{"version":3,"file":"index-B1micRJd.cjs","sources":["../src/core/constants.ts","../src/utils/common.ts","../src/utils/value/is.ts","../src/utils/abort/constants.ts","../src/utils/value/bool.ts","../src/utils/struct/property.ts","../src/utils/value/compare.ts","../src/utils/abort/internals.ts","../src/utils/abort/main.ts","../src/utils/value/constants.ts","../src/utils/async/constants.ts","../src/utils/async/main.ts","../src/utils/collection/main.ts","../src/utils/datetime/main.ts","../src/utils/file/download.ts","../src/utils/value/number.ts","../src/utils/file/size.ts","../src/utils/file/upload.ts","../src/utils/random/uniqueId.ts","../src/utils/random/uuid.ts","../src/utils/struct/main.ts","../src/utils/value/string.ts","../src/core/Http/constants.ts","../src/core/Errors/AdyenPlatformExperienceError.ts","../src/core/Http/utils.ts","../src/core/Http/http.ts","../src/core/utils.ts","../src/core/ConfigContext/session/constants.ts","../src/primitives/async/abortable/main.ts","../src/primitives/async/deferred/main.ts","../src/primitives/async/promisor/main.ts","../src/core/Analytics/analytics/utils.ts","../src/core/ConfigContext/session/SetupContext.ts","../src/primitives/context/session/constants.ts","../src/primitives/context/session/internal/constants.ts","../src/primitives/context/session/internal/autofresher.ts","../src/primitives/time/interval/constants.ts","../src/primitives/time/interval/main.ts","../src/primitives/reactive/watchlist/helpers.ts","../src/primitives/reactive/watchlist/constants.ts","../src/primitives/reactive/watchlist/main.ts","../src/primitives/time/clock/main.ts","../src/primitives/reactive/eventEmitter/main.ts","../src/primitives/context/session/internal/deadline.ts","../src/primitives/context/session/internal/refresher.ts","../src/primitives/context/session/SessionContext.ts","../src/core/ConfigContext/session/AuthSessionSpecification.ts","../src/primitives/auxiliary/errorContainer/main.ts","../src/core/ConfigContext/session/AuthSession.ts","../src/translations/index.ts","../src/core/Localization/constants/localization.ts","../src/core/Localization/constants/currency-codes.ts","../src/core/Localization/constants/currency-decimals.ts","../src/core/Localization/amount/amount-util.ts","../src/core/Localization/datetime/restamper/constants.ts","../src/core/Localization/datetime/restamper/utils.ts","../src/core/Localization/datetime/restamper/restamper.ts","../src/core/Localization/utils.ts","../src/core/Localization/localization-utils.ts","../src/core/Localization/Localization.ts","../src/core/Assets/Assets.ts","../src/core/Analytics/analytics/customTranslations.ts","../src/core/core.ts","../node_modules/.pnpm/preact@10.28.2/node_modules/preact/dist/preact.module.js","../node_modules/.pnpm/preact@10.28.2/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../node_modules/.pnpm/preact@10.28.2/node_modules/preact/hooks/dist/hooks.module.js","../src/core/Context/analytics/AnalyticsContext.tsx","../src/core/Analytics/analytics/user-events.ts","../node_modules/.pnpm/preact@10.28.2/node_modules/preact/compat/dist/compat.module.js","../src/utils/preact/fixedForwardRef.ts","../src/utils/preact/memoComparator/main.ts","../src/utils/preact/className.ts","../src/utils/preact/props.ts","../src/components/internal/Button/constants.ts","../src/components/internal/Spinner/Spinner.tsx","../src/components/internal/Typography/constants.ts","../src/components/internal/Typography/types.ts","../src/components/internal/Typography/Typography.tsx","../src/components/internal/Button/hooks/useButton.tsx","../src/components/internal/Button/types.ts","../src/components/internal/Button/Button.tsx","../src/core/Context/CoreContext.ts","../src/core/Context/useCoreContext.ts","../src/components/internal/ErrorMessageDisplay/ErrorMessageDisplay.tsx","../src/core/ConfigContext/session/utils/sessionAwareComponentAvailability/helpers/componentAvailabilityRegistry.ts","../src/core/ConfigContext/session/utils/sessionReady.ts","../src/core/ConfigContext/session/utils/sessionAwareComponentAvailability/sessionAwareComponentAvailability.ts","../src/core/ConfigContext/session/utils/sessionAwareComponentAvailability/helpers/componentAvailabilityErrors.ts","../src/core/ConfigContext/context.tsx","../src/hooks/useMutation/useMutation.ts","../src/hooks/useAnalytics/usePushAnalyticEvent.ts","../src/core/Context/analytics/AnalyticsProvider.tsx","../src/hooks/useBooleanState.ts","../src/core/Context/CoreProvider.tsx","../src/components/external/BaseElement.ts","../src/components/external/UIElement/UIElement.tsx","../src/components/internal/Popover/utils/popoverUtil.ts","../src/primitives/reactive/reflex/constants.ts","../src/primitives/reactive/reflex/errors.ts","../src/primitives/reactive/reflex/helpers.ts","../src/primitives/reactive/reflex/register.ts","../src/primitives/reactive/reflex/main.ts","../src/hooks/useReflex.ts","../src/hooks/element/useClickOutside.ts","../src/constants/dateFormats.ts","../src/constants/index.ts","../src/hooks/useContainerQuery.ts","../src/hooks/useResponsiveContainer.ts","../src/primitives/dom/tabbableRoot/tabbable.ts","../src/components/types.ts","../src/hooks/element/useFocusTrap.ts","../src/components/internal/Icon/Icon.tsx","../src/components/internal/Modal/Modal.tsx","../src/hooks/useFetch.ts","../src/hooks/useUniqueId.ts","../src/components/internal/Accordion/constants.ts","../src/components/internal/Accordion/Accordion.tsx","../src/components/internal/Card/constants.ts","../src/components/internal/Card/Card.tsx","../src/components/internal/StructuredList/constants.ts","../src/components/internal/StructuredList/useStructuredListItem.ts","../src/components/internal/StructuredList/StructuredList.tsx","../src/components/internal/DataOverviewDetails/constants.ts","../src/components/internal/DataOverviewDetails/DataOverviewDetailsSkeleton.tsx","../src/hooks/useTimezoneAwareDateFormatting.ts","../src/components/external/PayoutDetails/components/constants.ts","../src/components/internal/Tag/types.ts","../src/components/internal/Tag/Tag.tsx","../src/components/internal/Link/Link.tsx","../src/components/internal/DataGrid/components/Icon.tsx","../src/components/internal/DataGrid/hooks/useDataGridContext.ts","../src/components/internal/DataGrid/DataGridCell.tsx","../src/components/internal/DataGrid/components/TableCells.tsx","../src/components/internal/Button/ButtonActions/types.ts","../src/components/internal/Button/ButtonActions/ButtonActions.tsx","../src/components/utils/translation/factory.ts","../src/components/utils/disputes/constants.ts","../src/components/external/TransactionsOverview/types.ts","../src/components/internal/Calendar/calendar/timerange/utils.ts","../src/components/internal/Calendar/calendar/timerange/factory.ts","../src/components/internal/Calendar/calendar/utils.ts","../src/components/internal/Calendar/calendar/timerange/presets/shared/offsetMonth.ts","../src/components/internal/Calendar/calendar/timerange/presets/lastMonth.ts","../src/components/internal/Calendar/calendar/timerange/presets/lastNDays.ts","../src/components/internal/Calendar/calendar/timerange/presets/shared/offsetWeek.ts","../src/components/internal/Calendar/calendar/timerange/presets/lastWeek.ts","../src/components/internal/Calendar/calendar/timerange/presets/thisMonth.ts","../src/components/internal/Calendar/calendar/timerange/presets/thisWeek.ts","../src/components/internal/Calendar/calendar/timerange/presets/yearToDate.ts","../src/components/external/TransactionsOverview/constants.ts","../src/components/utils/getCommonErrorCode.ts","../src/components/internal/Popover/constants.ts","../src/components/internal/Popover/PopoverDismissButton/PopoverDismissButton.tsx","../src/components/internal/Popover/PopoverTitle/PopoverTitle.tsx","../src/components/internal/Popover/types.ts","../src/components/internal/Popover/utils/utils.ts","../src/hooks/element/usePopoverPositioner.ts","../src/hooks/element/useUniqueIdentifier.ts","../src/components/internal/Popover/Popover.tsx","../src/components/internal/Tooltip/useTooltipListeners.ts","../src/components/internal/Tooltip/Tooltip.tsx","../src/components/internal/CopyText/CopyText.tsx","../src/components/utils/getErrorMessage.tsx","../src/components/internal/DataOverviewError/DataOverviewError.tsx","../src/components/internal/DataGrid/components/TableBody.tsx","../src/components/internal/DataGrid/hooks/useInteractiveDataGrid.ts","../src/components/internal/DataGrid/components/InteractiveBody.tsx","../src/components/internal/DataGrid/components/SkeletonBody.tsx","../src/components/internal/DataGrid/utils/DataGridProvider.tsx","../src/components/internal/DataGrid/components/TableHeaderCell.tsx","../src/components/internal/DataGrid/DataGrid.tsx","../src/core/Errors/constants.ts","../src/hooks/useCommitAction/types.ts","../src/hooks/useCommitAction/useCommitAction.ts","../src/components/internal/Img/Img.tsx","../src/components/internal/FormFields/Select/constants.ts","../src/components/internal/FormFields/Select/components/SelectButton.tsx","../src/components/internal/FormFields/Select/components/SelectListItem.tsx","../src/components/internal/FormFields/Select/components/SelectList.tsx","../src/components/internal/FormFields/Select/hooks/useSelect.ts","../src/components/internal/FormFields/Select/Select.tsx","../src/components/internal/Translation/Translation.tsx","../src/components/internal/Pagination/Pagination.tsx","../src/components/external/TransactionsOverview/components/TransactionsTable/constants.ts","../src/hooks/useImageUrl.ts","../src/components/internal/Image/Image.tsx","../src/components/external/TransactionsOverview/components/utils.ts","../src/components/external/TransactionsOverview/components/TransactionsTable/PaymentMethodCell.tsx","../src/hooks/useTableColumns.ts","../src/components/external/TransactionsOverview/components/TransactionsTable/TransactionsTable.tsx","../src/components/external/TransactionDetails/types.ts","../src/components/external/TransactionDetails/constants.ts","../src/components/utils/translation/getters.ts","../src/components/external/PayoutDetails/components/PayoutData.tsx","../src/hooks/useBalanceAccounts.ts","../src/components/internal/DataOverviewDetails/useDataOverviewDetailsTitle.ts","../src/components/external/PayoutsOverview/components/PayoutsTable/constants.ts","../src/components/external/PayoutsOverview/components/PayoutsTable/PayoutsTable.tsx","../src/hooks/useComponentHeadingElement.ts","../src/components/internal/Divider/constants.ts","../src/components/internal/Divider/Divider.tsx","../src/components/internal/Header/Header.tsx","../src/components/internal/DataOverviewDetails/DataOverviewDetails.tsx","../src/components/external/PayoutDetails/PayoutDetails.tsx","../src/components/internal/DataOverviewContainer/constants.ts","../src/components/internal/DataOverviewContainer/DataOverviewContainer.tsx","../src/components/external/PayoutsOverview/components/PayoutsOverview/constants.ts","../src/components/internal/FilterBar/FilterBar.tsx","../src/core/Context/analytics/useAnalyticsContext.tsx","../src/hooks/useAnalytics/useFilterAnalyticsEvent.ts","../src/hooks/useBalanceAccountSelection.ts","../src/components/internal/FormFields/Select/BalanceAccountSelector/BalanceAccountSelector.tsx","../src/components/internal/Pagination/constants.ts","../src/components/internal/Pagination/utils.ts","../src/components/internal/Pagination/hooks/usePageLimit.ts","../src/hooks/useMounted.ts","../src/components/internal/Pagination/hooks/usePagination.ts","../src/components/internal/Pagination/hooks/useCursorPagination.ts","../src/components/internal/Pagination/hooks/useOffsetPagination.ts","../src/hooks/useReactiveState/useReactiveState.ts","../src/components/internal/Pagination/hooks/usePaginatedRecordsFilters.ts","../src/components/internal/Pagination/types.ts","../src/components/internal/Pagination/hooks/usePaginatedRecords.ts","../src/components/internal/Pagination/hooks/useCursorPaginatedRecords.ts","../src/components/internal/Calendar/hooks/useTimezone.ts","../src/components/internal/DatePicker/components/TimeRangeSelector/useTimeRangeSelection.ts","../src/components/internal/DatePicker/components/TimeRangeSelector/TimeRangeSelector.tsx","../src/components/internal/Calendar/components/CalendarGrid/utils.ts","../src/components/internal/Calendar/types.ts","../src/components/internal/Calendar/components/CalendarGrid/CalendarGridDate.tsx","../src/components/internal/Calendar/components/CalendarGrid/CalendarGridDayOfWeek.tsx","../src/components/internal/Calendar/components/CalendarGrid/CalendarGrid.tsx","../src/components/internal/Calendar/calendar/constants.ts","../src/components/internal/Calendar/calendar/timeframe/common/utils.ts","../src/components/internal/Calendar/calendar/timeslice/TimeSlice.ts","../src/components/internal/Calendar/calendar/timeslice/index.ts","../src/components/internal/Calendar/calendar/types.ts","../src/components/internal/Calendar/calendar/timeframe/common/flags.ts","../src/primitives/auxiliary/indexed/helpers.ts","../src/primitives/auxiliary/indexed/main.ts","../src/primitives/time/today/main.ts","../src/components/internal/Calendar/calendar/timeframe/frames/TimeFrame.ts","../src/components/internal/Calendar/calendar/timeframe/frames/MonthFrame.ts","../src/primitives/reactive/effectStack/main.ts","../src/components/internal/Calendar/calendar/facade/Calendar.ts","../src/components/internal/Calendar/calendar/facade/index.ts","../src/components/internal/Calendar/components/CalendarControls/CalendarControls.tsx","../src/hooks/element/useFocusCursor.ts","../src/components/internal/Calendar/hooks/useCalendar.ts","../src/components/internal/Calendar/Calendar.tsx","../src/hooks/element/useDetachedRender.ts","../src/components/internal/Calendar/hooks/useCalendarControlsRendering.tsx","../src/components/internal/DatePicker/DatePicker.tsx","../src/components/internal/FilterBar/components/FilterButton/FilterButton.tsx","../src/components/internal/FormFields/utils.ts","../src/components/internal/FormFields/FieldError/FieldError.tsx","../src/components/internal/FormFields/InputBase.tsx","../src/components/internal/FormFields/InputText.tsx","../src/components/internal/FilterBar/filters/BaseFilter/BaseFilter.tsx","../src/components/internal/FilterBar/filters/DateFilter/types.ts","../src/components/internal/FilterBar/filters/DateFilter/DateFilterCore.tsx","../src/components/internal/FilterBar/filters/DateFilter/DateFilter.tsx","../src/hooks/useModalDetails/types.ts","../src/hooks/useModalDetails/useModalDetails.ts","../src/components/external/TransactionsOverview/components/MultiSelectionFilter/MultiSelectionFilter.tsx","../src/components/external/TransactionsOverview/components/MultiSelectionFilter/useMultiSelectionFilter/utils.ts","../src/components/external/TransactionsOverview/components/MultiSelectionFilter/useMultiSelectionFilter/useMultiSelectionFilter.ts","../src/components/external/TransactionsOverview/components/MultiSelectionFilter/useMultiSelectionFilter/constants.ts","../src/hooks/useDefaultOverviewFilterParams.ts","../src/components/internal/Modal/ModalContent/ModalContent.tsx","../src/components/internal/DataOverviewDisplay/DataDetailsModal.tsx","../src/hooks/useCustomColumnsData.ts","../src/components/utils/customData/hasCustomField.ts","../src/components/utils/customData/mergeRecords.ts","../src/components/external/PayoutsOverview/components/PayoutsOverview/PayoutsOverview.tsx","../src/components/external/PayoutsOverview/components/PayoutsOverviewContainer/constants.ts","../src/components/external/PayoutsOverview/components/PayoutsOverviewContainer/PayoutsOverviewContainer.tsx","../src/components/external/PayoutsOverview/PayoutsOverviewElement.tsx","../src/components/utils/customData/normalizeCustomFields.ts","../src/hooks/useComponentTiming.ts","../src/components/external/TransactionDetails/components/PaymentRefund/PaymentRefundActions.tsx","../src/components/external/TransactionDetails/components/PaymentRefund/PaymentRefundAmount.tsx","../src/components/external/TransactionDetails/components/PaymentRefund/PaymentRefundNotice.tsx","../src/components/external/TransactionDetails/components/PaymentRefund/PaymentRefundReason.tsx","../src/components/internal/Alert/types.ts","../src/components/internal/Alert/AlertIcon.tsx","../src/components/internal/Alert/Alert.tsx","../src/components/external/TransactionDetails/components/PaymentRefund/PaymentRefund.tsx","../src/hooks/useTabbedControl.ts","../src/components/internal/Tabs/Tabs.tsx","../src/components/external/TransactionDetails/components/PaymentDetails/PaymentRefundAlerts.tsx","../src/components/external/TransactionDetails/components/PaymentDetails/PaymentDetailsActions.tsx","../src/components/external/TransactionDetails/components/PaymentDetails/PaymentDetailsProperties.tsx","../src/components/internal/StatusBox/constants.ts","../src/components/internal/StatusBox/StatusBox.tsx","../src/components/internal/StatusBox/utils.ts","../src/components/internal/StatusBox/useStatusBox.tsx","../src/components/external/TransactionDetails/utils.ts","../src/components/external/TransactionDetails/components/PaymentDetails/PaymentDetailsStatusBox.tsx","../src/components/external/TransactionDetails/components/PaymentDetails/PaymentDetailsSummary.tsx","../src/components/internal/Timeline/types.ts","../src/components/internal/Timeline/context.ts","../src/components/internal/Timeline/components/DateText.tsx","../src/components/internal/Timeline/components/TimelineItem.tsx","../src/components/internal/Timeline/Timeline.tsx","../src/components/external/TransactionDetails/components/PaymentDetails/PaymentDetailsTimeline.tsx","../src/components/external/TransactionDetails/components/PaymentDetails/PaymentDetails.tsx","../src/components/external/TransactionDetails/hooks/useRefundMetadata/useRefundMetadata.ts","../src/hooks/useAnalytics/useLandedPageEvent.ts","../src/components/external/TransactionDetails/components/TransactionData/TransactionDataContent.tsx","../src/components/external/TransactionDetails/hooks/useTransaction/transactionNavigator/createDuplexTransactionNavigator.ts","../src/components/external/TransactionDetails/hooks/useTransaction/useTransaction.ts","../src/components/external/TransactionDetails/components/TransactionData/TransactionData.tsx","../src/components/external/TransactionDetails/TransactionDetails.tsx","../src/components/external/TransactionsOverview/hooks/useTransactionsList.ts","../src/components/external/TransactionsOverview/hooks/useTransactionsViewSwitcher.ts","../src/components/external/TransactionsOverview/hooks/useTransactionsTotals.ts","../src/hooks/useAccountBalances.ts","../src/components/external/TransactionsOverview/hooks/useCurrenciesLookup.ts","../src/hooks/useAnalytics/useDurationEvent.ts","../src/components/external/TransactionsOverview/components/TransactionsList/TransactionDetailsModal.tsx","../src/components/external/TransactionsOverview/components/TransactionsList/TransactionsList.tsx","../src/components/internal/BaseButton/constants.ts","../src/components/internal/BaseButton/BaseButton.tsx","../src/components/internal/ExpandableCard/constants.ts","../src/components/internal/ExpandableCard/ExpandableCard.tsx","../src/components/external/TransactionsOverview/components/AmountSkeleton/constants.ts","../src/components/external/TransactionsOverview/components/AmountSkeleton/AmountSkeleton.tsx","../src/components/external/TransactionsOverview/components/SummaryItem/constants.ts","../src/components/external/TransactionsOverview/components/SummaryItem/SummaryItemLabel.tsx","../src/components/external/TransactionsOverview/components/SummaryItem/SummaryItem.tsx","../src/components/external/TransactionsOverview/components/TransactionTotalItem/TransactionTotalItem.tsx","../src/components/external/TransactionsOverview/hooks/useMaxWidths.ts","../src/components/external/TransactionsOverview/components/TransactionTotals/TotalsCard.tsx","../src/components/external/TransactionsOverview/components/TransactionTotals/constants.ts","../src/components/external/TransactionsOverview/components/TransactionTotals/TransactionTotals.tsx","../src/components/external/TransactionsOverview/components/BalanceItem/BalanceItem.tsx","../src/components/external/TransactionsOverview/components/Balances/BalancesCard.tsx","../src/components/external/TransactionsOverview/components/Balances/constants.ts","../src/components/external/TransactionsOverview/components/Balances/Balances.tsx","../src/components/external/TransactionsOverview/components/TransactionsOverview/TransactionsOverviewList.tsx","../src/components/external/TransactionsOverview/components/InsightsTotals/constants.ts","../src/components/external/TransactionsOverview/components/AmountDisplay/constants.ts","../src/components/external/TransactionsOverview/components/AmountDisplay/AmountDisplay.tsx","../src/components/external/TransactionsOverview/components/InsightsTotals/InsightsTotals.tsx","../src/components/external/TransactionsOverview/components/TransactionsOverview/TransactionsOverviewInsights.tsx","../src/hooks/useMultiSelectionFilterProps.ts","../src/components/external/TransactionsOverview/components/TransactionFilters/TransactionMultiSelectionFilter.tsx","../src/components/internal/FilterBar/filters/TextFilter/TextFilter.tsx","../src/components/external/TransactionsOverview/components/TransactionFilters/TransactionPspReferenceFilter.tsx","../src/components/external/TransactionsOverview/hooks/useCurrencySelection.ts","../src/components/external/TransactionsOverview/components/TransactionFilters/TransactionDateFilter.tsx","../src/components/external/TransactionsOverview/components/TransactionFilters/TransactionFilters.tsx","../src/components/internal/Button/DownloadButton/useDownload.ts","../src/components/internal/ToggleSwitch/constants.ts","../src/components/internal/ToggleSwitch/ToggleSwitch.tsx","../src/components/external/TransactionsOverview/components/TransactionsExport/constants.ts","../src/components/external/TransactionsOverview/components/TransactionsExport/TransactionsExport.tsx","../src/components/internal/SegmentedControl/SegmentedControl.tsx","../src/components/external/TransactionsOverview/components/TransactionsOverview/TransactionsOverview.tsx","../src/components/external/TransactionsOverview/components/TransactionsOverviewContainer/constants.ts","../src/components/external/TransactionsOverview/components/TransactionsOverviewContainer/TransactionsOverviewContainer.tsx","../src/components/external/TransactionsOverview/TransactionsOverviewElement.tsx","../src/components/internal/CapitalHeader/constants.ts","../src/components/internal/CapitalHeader/helpers.ts","../src/components/utils/capital/getCapitalErrorMessage.tsx","../src/components/external/CapitalOffer/components/utils/CapitalErrorMessageDisplay.tsx","../src/components/external/CapitalOffer/components/CapitalOffer/constants.ts","../src/components/internal/CapitalHeader/CapitalHeader.tsx","../src/components/internal/InfoBox/InfoBox.tsx","../src/components/external/CapitalOffer/components/utils/utils.ts","../src/components/internal/Slider/calculateProgress.ts","../src/components/internal/Slider/Slider.tsx","../src/components/internal/CapitalSlider/CapitalSlider.tsx","../src/components/constants.ts","../src/components/utils/utils.ts","../src/components/external/CapitalOffer/components/CapitalOfferSelection/CapitalOfferSelection.tsx","../src/components/internal/AnchorButton/AnchorButton.tsx","../src/components/external/CapitalOffer/components/CapitalOfferSummary/constants.ts","../src/components/external/CapitalOffer/components/CapitalOfferLegalNotice/CapitalOfferLegalNotice.tsx","../src/components/external/CapitalOffer/components/CapitalOfferSummary/CapitalOfferSummary.tsx","../src/components/external/CapitalOffer/components/CapitalOffer/CapitalOffer.tsx","../src/components/external/CapitalOffer/CapitalOfferElement.tsx","../src/hooks/useFreezePeriod.ts","../src/components/internal/Button/DownloadButton/DownloadButton.tsx","../src/components/external/ReportsOverview/components/ReportsTable/constants.ts","../src/components/external/ReportsOverview/components/ReportsTable/ReportsTable.tsx","../src/components/external/ReportsOverview/components/ReportsOverview/constants.ts","../src/components/external/ReportsOverview/components/ReportsOverview/ReportsOverview.tsx","../src/components/external/ReportsOverview/components/ReportsOverviewContainer/constants.ts","../src/components/external/ReportsOverview/components/ReportsOverviewContainer/ReportsOverviewContainer.tsx","../src/components/external/ReportsOverview/ReportsOverviewElement.tsx","../src/components/external/CapitalOverview/constants.ts","../src/components/external/CapitalOverview/components/Unqualified.tsx","../src/components/external/CapitalOverview/components/PreQualifiedIntro.tsx","../src/components/external/CapitalOverview/components/PreQualified/PreQualified.tsx","../src/components/internal/BaseList/constants.ts","../src/components/internal/BaseList/BaseList.tsx","../src/components/internal/ProgressBar/ProgressBar.tsx","../src/components/external/CapitalOverview/components/GrantItem/constants.ts","../src/components/external/CapitalOverview/components/GrantItem/utils.ts","../src/components/external/CapitalOverview/components/GrantDetails/constants.ts","../src/components/external/CapitalOverview/components/GrantDetails/GrantDetails.tsx","../src/components/external/CapitalOverview/components/GrantActions/constants.ts","../src/components/external/CapitalOverview/components/GrantActions/utils.ts","../src/components/external/CapitalOverview/components/GrantActions/GrantActions.tsx","../src/components/external/CapitalOverview/components/GrantItem/GrantItem.tsx","../src/components/external/CapitalOverview/components/GrantAdjustmentDetails/constants.ts","../src/components/external/CapitalOverview/components/AccountDetails/AccountDetail.tsx","../src/components/external/CapitalOverview/components/AccountDetails/utils.ts","../src/components/external/CapitalOverview/components/AccountDetails/AccountDetails.tsx","../src/components/external/CapitalOverview/components/GrantAdjustmentDetails/GrantAdjustmentDetails.tsx","../src/components/external/CapitalOverview/components/GrantRepaymentDetails/GrantRepaymentDetails.tsx","../src/components/external/CapitalOverview/components/GrantList/GrantsDisplay.tsx","../src/components/external/CapitalOverview/components/GrantList/GrantList.tsx","../src/components/external/CapitalOverview/components/CapitalOverview/CapitalOverview.tsx","../src/components/external/CapitalOverview/CapitalOverviewElement.tsx","../src/components/external/DisputesOverview/components/DisputesOverview/constants.ts","../src/components/utils/disputes/actionNeeded.ts","../src/components/external/DisputesOverview/components/DisputesTable/constants.ts","../src/components/external/DisputesOverview/components/DisputesTable/DisputeStatusTag.tsx","../src/components/external/DisputesOverview/components/DisputesTable/DisputesTable.tsx","../src/components/external/DisputeManagement/context/dispute/context.tsx","../src/components/external/DisputeManagement/components/AcceptDisputeFlow/AcceptDisputeFlow.tsx","../src/components/internal/FormFields/FileInput/constants.ts","../src/components/internal/FormFields/FileInput/components/UploadedFile.tsx","../src/hooks/useTrackedRef.ts","../src/components/internal/FormFields/FileInput/components/Dropzone.tsx","../src/components/internal/FormFields/FileInput/FileInput.tsx","../src/components/external/DisputeManagement/utils/index.ts","../src/components/external/DisputeManagement/components/DefendDisputeFlow/constants.ts","../src/components/external/DisputeManagement/components/DefendDisputeFlow/DefendDocumentUpload.tsx","../src/components/external/DisputeManagement/components/DefendDisputeFlow/SelectAndUploadOptionalDoc.tsx","../src/components/external/DisputeManagement/components/DefendDisputeFlow/DefendDisputeFileUpload.tsx","../src/components/external/DisputeManagement/components/DefendDisputeFlow/DefendDisputeReason.tsx","../src/components/external/DisputeManagement/components/DefendDisputeFlow/DefendDisputeResponse.tsx","../src/components/external/DisputeManagement/components/DefendDisputeFlow/DefendDisputeFlow.tsx","../src/components/external/DisputeManagement/components/DisputesData/constants.ts","../src/components/external/DisputeManagement/components/DisputesData/DisputeIssuerComments.tsx","../src/components/external/DisputeManagement/components/DisputesData/DisputeDataProperties.tsx","../src/components/utils/disputes/getDisputesErrorMessage.tsx","../src/components/external/DisputeManagement/components/DisputesData/DisputeData.tsx","../src/components/external/DisputeManagement/components/DisputeDetails/DisputeDetails.tsx","../src/components/external/DisputeManagement/components/DisputeDetailsContainer/DisputeDetailsContainer.tsx","../src/components/external/DisputesOverview/components/DisputeManagementModal/DisputeManagementModal.tsx","../src/components/external/DisputesOverview/components/DisputesOverview/DisputesOverview.tsx","../src/components/external/DisputesOverview/components/DisputesContainer/DisputesContainer.tsx","../src/components/external/DisputesOverview/DisputesOverviewElement.tsx","../src/components/external/DisputeManagement/DisputeManagementElement.tsx","../src/components/external/PaymentLinksOverview/components/constants.ts","../src/components/utils/payByLink/actionLevel.ts","../src/components/external/PaymentLinksOverview/utils/getPaymentLinksErrorMessage.tsx","../src/components/external/PaymentLinksOverview/components/PaymentLinksErrors.tsx","../src/components/external/PaymentLinksOverview/components/PaymentLinksTable.tsx","../src/components/external/PaymentLinkDetails/components/PaymentLinkSummary/PaymentLinkSummary.tsx","../src/components/external/PaymentLinkDetails/components/PaymentLinkActivity/utils.ts","../src/components/external/PaymentLinkDetails/components/PaymentLinkActivity/PaymentLinkActivity.tsx","../src/components/external/PaymentLinkDetails/components/PaymentLinkTabs/PaymentLinkTabs.tsx","../src/components/external/PaymentLinkDetails/components/PaymentLinkExpiration/PaymentLinkExpiration.tsx","../src/components/external/PaymentLinkDetails/components/PaymentLinkSkeleton/PaymentLinkSkeleton.tsx","../src/components/external/PaymentLinkDetails/components/PaymentLinkError/getPaymentLinkErrorMessage.tsx","../src/components/external/PaymentLinkDetails/components/PaymentLinkError/PaymentLinkError.tsx","../src/components/external/PaymentLinkDetails/components/PaymentLinkDetails/PaymentLinkDetails.tsx","../src/components/external/PaymentLinksOverview/components/PaymentLinkDetailsModal/PaymentLinkDetailsModal.tsx","../src/components/internal/Stepper/Step.tsx","../src/components/internal/Stepper/Stepper.tsx","../src/hooks/form/wizard/WizardFormContext.tsx","../src/components/external/PaymentLinkCreation/utils.ts","../src/hooks/form/useForm.ts","../src/hooks/form/wizard/useWizardForm.ts","../src/components/external/PaymentLinkCreation/components/PaymentLinkCreationFormContainer/usePaymentLinkFormData.ts","../src/components/internal/FormWrappers/FormField.tsx","../src/hooks/form/Controller.tsx","../src/hooks/form/useWatch.ts","../src/components/internal/FormWrappers/VisibleField.tsx","../src/components/internal/FormWrappers/FormTextInput.tsx","../src/components/external/PaymentLinkCreation/constants.ts","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/ShopperEmailField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/ShopperPhoneField.tsx","../src/components/internal/FormWrappers/FormSelect.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/CountryRegionField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/LanguageField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/BillingAndShippingCheckboxField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/ShippingStreetField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/ShippingHouseNumberField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/ShippingCountryField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/ShippingCityField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/ShippingPostalCodeField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/DeliveryAddressSection.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/BillingStreetField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/BillingHouseNumberField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/BillingCountryField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/BillingCityField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/BillingPostalCodeField.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/Fields/Address/BillingAddressSection.tsx","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/useAddressChecker.ts","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/useSameAddressCheckbox.ts","../src/components/external/PaymentLinkCreation/components/Form/CustomerDetailsForm/CustomerDetailsForm.tsx","../src/components/external/PaymentLinkCreation/components/Form/PaymentDetailsForm/Fields/ValidityField.tsx","../src/components/internal/FormFields/CurrencyInput/constants.ts","../src/utils/currency/main.ts","../src/components/internal/FormFields/CurrencyInput/CurrencyInput.tsx","../src/components/external/PaymentLinkCreation/components/Form/PaymentDetailsForm/Fields/AmountField.tsx","../src/components/external/PaymentLinkCreation/components/Form/PaymentDetailsForm/Fields/LinkTypeField.tsx","../src/components/internal/FormFields/CalendarInput/components/CalendarInputButton.tsx","../src/components/internal/FormFields/CalendarInput/components/CalendarInputPopover.tsx","../src/components/internal/FormFields/CalendarInput/CalendarInput.tsx","../src/components/internal/FormWrappers/FormCalendarInput.tsx","../src/components/external/PaymentLinkCreation/components/Form/PaymentDetailsForm/PaymentDetailsForm.tsx","../src/components/external/PaymentLinkCreation/components/Form/Summary/constants.ts","../src/components/external/PaymentLinkCreation/components/Form/Summary/FormSummary.tsx","../src/components/external/PaymentLinkCreation/components/Form/StoreForm/Fields/StoreField.tsx","../src/components/external/PaymentLinkCreation/components/Form/StoreForm/StoreForm.tsx","../src/components/external/PaymentLinkCreation/components/PaymentLinkCreationFormContainer/FormStepRenderer.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/context/constants.ts","../src/hooks/useStores.ts","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/utils/getThemePayload.ts","../src/components/external/PaymentLinkSettings/hooks/useStoreTheme.ts","../src/components/external/PaymentLinkSettings/hooks/useStoreTermsAndConditions.ts","../src/components/external/PaymentLinkSettings/components/PaymentLinkThemeContainer/types.ts","../src/components/external/PaymentLinkSettings/hooks/useSaveAction.ts","../src/components/external/PaymentLinkSettings/hooks/useSettingsPermission.ts","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/context/context.tsx","../src/components/internal/SecondaryNav/SecondaryNav.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/constants.ts","../src/components/internal/StoreSelector/StoreSelectorButton/StoreSelectorButton.tsx","../src/components/internal/StoreSelector/StoreSelectorItem/StoreSelectorItem.tsx","../src/components/internal/StoreSelector/StoreSelector.tsx","../src/components/internal/Checkbox/Checkbox.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/utils/validateTermsAndConditionsURL.ts","../src/components/external/PaymentLinkSettings/components/TermsAndConditions/Requirements/useTermsRequirementsConfig.ts","../src/components/external/PaymentLinkSettings/components/TermsAndConditions/Requirements/Requirements.tsx","../src/components/external/PaymentLinkSettings/components/TermsAndConditions/TermsAndConditions.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/utils/getSettingsErrorMessage.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/components/SettingsError/SettingsError.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/components/LoadingSkeleton/LoadingSkeleton.tsx","../src/components/external/PaymentLinkSettings/components/TermsAndConditions/TermsAndConditionsContainer.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkThemeContainer/components/ThemeForm/constants.ts","../src/components/external/PaymentLinkSettings/components/PaymentLinkThemeContainer/components/LogoPreview/LogoPreview.tsx","../src/components/internal/FormFields/FileInput/helpers/defaultMapError.ts","../src/utils/file/naming.ts","../src/components/external/PaymentLinkSettings/components/PaymentLinkThemeContainer/components/LogoRequirements/LogoRequirements.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkThemeContainer/components/LogoInput/LogoInput.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkThemeContainer/components/ThemeForm/ThemeForm.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkThemeContainer/PaymentLinkThemeContainer.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/components/PaymentLinkSettingsContentLoading/PaymentLinkSettingsContentLoading.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/components/PaymentLinkSettingsContent/PaymentLinkSettingsContent.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/components/SettingsActionButtons/SettingsActionButtons.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/PaymentLinkSettings.tsx","../src/components/external/PaymentLinkSettings/components/PaymentLinkSettingsContainer/PaymentLinkSettingsContainer.tsx","../src/components/external/PaymentLinkCreation/hooks/useInvalidFieldsConfig.ts","../src/components/external/PaymentLinkCreation/components/PaymentLinkCreationFormContainer/PaymentLinkCreationFormContainer.tsx","../src/components/external/PaymentLinkCreation/components/Form/FormSuccess/FormSuccess.tsx","../src/components/external/PaymentLinkCreation/components/PaymentLinkCreationContainer/PaymentLinkCreationContainer.tsx","../src/components/external/PaymentLinksOverview/components/PaymentLinksOverviewModal.tsx","../src/components/external/PaymentLinksOverview/components/PaymentLinksOverview.tsx","../src/hooks/usePaymentLinkFilters.ts","../src/components/external/PaymentLinksOverview/components/PaymentLinksOverviewContainer.tsx","../src/components/external/PaymentLinksOverview/PaymentLinksOverviewElement.tsx","../src/components/external/PaymentLinkCreation/PaymentLinkCreationElement.tsx","../src/components/external/PaymentLinkSettings/PaymentLinkSettingsElement.tsx","../src/components/external/PaymentLinkDetails/PaymentLinkDetailsElement.tsx","../src/index.ts"],"sourcesContent":["export const API_ENVIRONMENTS = {\n    test: 'https://platform-components-external-test.adyen.com/platform-components-external/api/',\n    live: 'https://platform-components-external-live.adyen.com/platform-components-external/api/',\n} as const;\n\nexport const CDN_ENVIRONMENTS = {\n    test: 'https://18e8543875.cdn.adyen.com/platform-components/v1-cdn-test',\n    live: 'https://bae81f955b.cdn.adyen.com/platform-components/v1-cdn-live',\n} as const;\n","import type { DeepReadonly, ListWithoutFirst } from './types';\n\ntype _BoundFn<T, Args extends any[]> = Args extends []\n    ? T extends (this: infer ThisType, ...args: [...infer RestArgs]) => infer ReturnType\n        ? (thisValue: ThisType, ...args: RestArgs) => ReturnType\n        : never\n    : T extends (this: Args[0], ...args: [...ListWithoutFirst<Args>, ...infer RestArgs]) => infer ReturnType\n      ? (...args: RestArgs) => ReturnType\n      : never;\n\nexport const fn: <T, Args extends any[]>(func: T, ...args: Args) => _BoundFn<T, Args> = Function.prototype.bind.bind(Function.prototype.call);\n\n// prettier-ignore\nexport const constant = <T>(value?: T) => () => value;\n\nexport const asyncNoop = async () => {};\nexport const identity = <T>(value?: T) => value;\nexport const noop = () => {};\n\nexport const panic = (reason?: any) => {\n    throw reason;\n};\n\nexport const unreachable = (value: never): never => {\n    throw new Error(`Unreachable code with value: ${value}`);\n};\n\nconst _toString = fn(Object.prototype.toString);\nexport const toStringTag = (value?: any) => _toString(value).slice(8, -1);\n\nexport const deepFreeze = <T extends object>(obj: T): DeepReadonly<T> => {\n    Object.keys(obj).forEach(prop => {\n        const value = obj[prop as keyof T];\n        if (value && typeof value === 'object' && !Object.isFrozen(value)) {\n            deepFreeze(value);\n        }\n    });\n    return Object.freeze(obj) as DeepReadonly<T>;\n};\n","import { toStringTag } from '../common';\nimport type { GetPredicateType } from '../types';\n\nexport const isBoolean = (value?: any): value is boolean => value === !!value;\nexport const isFunction = <T>(value?: T): value is GetPredicateType<(...args: any[]) => any, T> => typeof value === 'function';\nexport const isNull = (value?: any): value is null => value === null;\nexport const isNullish = (value?: any): value is undefined | null => value == undefined;\nexport const isNumber = (value?: any): value is number => typeof value === 'number';\nexport const isPlainObject = <T>(value?: T): value is GetPredicateType<Record<any, any>, T> => toStringTag(value) === 'Object';\nexport const isString = (value?: any): value is string => typeof value === 'string';\nexport const isSymbol = (value?: any): value is symbol => typeof value === 'symbol';\nexport const isUndefined = (value?: any): value is undefined => value === undefined;\n","export const ABORT_EVENT = 'abort';\nexport const DEFAULT_ABORT_ERROR_MESSAGE = 'signal is aborted without reason';\nexport const DEFAULT_TIMEOUT_ERROR_MESSAGE = 'signal timed out';\nexport const MAX_ABORT_TIMEOUT = 0x7fffffff;\n","import { isBoolean } from './is';\n\nexport const boolify = (value?: any, fallbackBoolean = value) => (isBoolean(value) ? value : !!fallbackBoolean);\n\nexport const boolOrFalse = (value?: any) => value === true;\nexport const boolOrTrue = (value?: any) => value !== false;\n\nexport const falsify = (_?: any): false => false;\nexport const truthify = (_?: any): true => true;\n","import { fn } from '../common';\nimport { boolOrFalse, boolOrTrue } from '../value/bool';\nimport type { GetterPropertyDescriptor, ValuePropertyDescriptor } from './types';\n\nexport const enumerable = <T>(value: T, writable = false): ValuePropertyDescriptor<T> => ({\n    writable: boolOrFalse(writable),\n    enumerable: true,\n    value,\n});\n\nexport const getter = <T>(get: () => T, enumerable = true): GetterPropertyDescriptor<T> => ({\n    enumerable: boolOrTrue(enumerable),\n    get,\n});\n\nexport const hasOwnProperty = fn(Object.prototype.hasOwnProperty);\n","/**\n * Compares two values using [`SameValueZero`](https://tc39.es/ecma262/multipage/abstract-operations.html#sec-samevaluezero) comparison and returns `true` if they are the same, or `false` otherwise.\n * The comparison is very similar to strict equality comparison but also returns `true` if both values are `NaN`.\n */\nexport const sameValue = (a: any, b: any) => a === b || !(a === a || b === b);\n","import { enumerable, getter, hasOwnProperty } from '../struct/property';\nimport { DEFAULT_ABORT_ERROR_MESSAGE, DEFAULT_TIMEOUT_ERROR_MESSAGE } from './constants';\nimport { sameValue } from '../value/compare';\n\nif (!hasOwnProperty(AbortSignal.prototype, 'reason')) {\n    try {\n        // Polyfill `AbortSignal.prototype.reason`\n        Object.defineProperty(AbortSignal.prototype, 'reason', {\n            ...getter(function _getReason(this: AbortSignal) {\n                return this.aborted ? abortError() : void 0;\n            }, true),\n            configurable: true,\n        });\n    } catch {\n        // `AbortSignal.prototype` is non-extensible or `reason` property already exists\n        // do nothing (fail silently)\n    }\n}\n\nif (!hasOwnProperty(AbortSignal.prototype, 'throwIfAborted')) {\n    // Polyfill `AbortSignal.prototype.throwIfAborted`\n    AbortSignal.prototype.throwIfAborted = function _throwIfAborted(this: AbortSignal) {\n        if (this.aborted) throw this.reason ?? abortError();\n    };\n}\n\nexport const abortError = (message = DEFAULT_ABORT_ERROR_MESSAGE) => new DOMException(message, 'AbortError');\nexport const timeoutError = (message = DEFAULT_TIMEOUT_ERROR_MESSAGE) => new DOMException(message, 'TimeoutError');\n\nexport const augmentSignalReason = (signal: AbortSignal, reason: any) => {\n    if (!sameValue(signal.reason, reason)) {\n        try {\n            Object.defineProperty(signal, 'reason', enumerable(reason));\n        } catch {\n            // `signal` is non-extensible or `reason` property already exists\n            // do nothing (fail silently)\n        }\n    }\n    return signal;\n};\n","import { clamp } from '../value/number';\nimport { isUndefined } from '../value/is';\nimport { ABORT_EVENT, MAX_ABORT_TIMEOUT } from './constants';\nimport { abortError, augmentSignalReason, timeoutError } from './internals';\n\ndeclare let AbortSignal: {\n    any: (signals: AbortSignal[]) => AbortSignal;\n} & typeof window.AbortSignal;\n\nexport const abortedSignal = (reason: unknown = abortError()) => {\n    if ('abort' in AbortSignal) {\n        return AbortSignal.abort(reason);\n    }\n\n    const _controller = new AbortController();\n    const _reason = isUndefined(reason) ? abortError() : reason;\n    const { signal } = _controller;\n\n    _controller.abort(_reason);\n    augmentSignalReason(signal, _reason);\n    return signal;\n};\n\nexport const abortSignalForAny = (signals: AbortSignal[]) => {\n    if ('any' in AbortSignal) {\n        return AbortSignal.any(signals);\n    }\n\n    let _sourceSignals = new Set<AbortSignal>();\n    let _controller = new AbortController();\n    const { signal } = _controller;\n\n    let abort = function (this: AbortSignal) {\n        _sourceSignals.forEach(signal => signal.removeEventListener(ABORT_EVENT, abort));\n        _sourceSignals.clear();\n\n        const reason = this?.reason ?? abortError();\n\n        _controller.abort(reason);\n        augmentSignalReason(signal, reason);\n        _controller = _sourceSignals = abort = undefined!;\n    };\n\n    setup: {\n        const NIL_EXCEPTION = Symbol('<NIL_EXCEPTION>');\n        let _exception: any = NIL_EXCEPTION;\n\n        filter: {\n            try {\n                for (const maybeSignal of signals) {\n                    if (!isAbortSignal(maybeSignal)) throw new TypeError(`Failed to convert value to 'AbortSignal'`);\n                    if (maybeSignal.aborted) break filter;\n                    _sourceSignals.add(maybeSignal);\n                }\n            } catch (ex) {\n                _exception = ex;\n                break filter;\n            }\n\n            _sourceSignals.forEach(signal => signal.addEventListener(ABORT_EVENT, abort));\n\n            // Mark setup as complete\n            break setup;\n        }\n\n        // If control flow reaches here, it means either of the following:\n        //  (1) at least one of the source signals is already aborted\n        //  (2) at least one invalid value was passed as source signal\n\n        // Hence, the need to abort the `signal` and destroy everything\n        abort.call(signal);\n\n        // And also throw the appropriate exception (if applicable)\n        if (_exception !== NIL_EXCEPTION) throw _exception;\n    }\n\n    return signal;\n};\n\nexport const isAbortSignal = (value?: any): value is AbortSignal => value instanceof AbortSignal;\n","export const EMPTY_ARRAY = Object.freeze([]);\nexport const EMPTY_OBJECT = Object.freeze(Object.create(null)) as Readonly<{}>;\n","import { EMPTY_ARRAY } from '../value/constants';\n\nexport const ALREADY_RESOLVED_PROMISE = Promise.resolve();\nexport const FOREVER_PENDING_PROMISE = Promise.race(EMPTY_ARRAY);\n","import { ALREADY_RESOLVED_PROMISE } from './constants';\nimport { Promised, PromiseState } from '../types';\n\nconst _pending = () => _PENDING;\nconst _PENDING: unique symbol = Symbol('<<PENDING>>');\n\nexport const getPromiseState = async (promise: Promise<any>): Promise<PromiseState> => {\n    try {\n        const value = await Promise.race([promise, ALREADY_RESOLVED_PROMISE.then(_pending)]);\n        return value === _PENDING ? PromiseState.PENDING : PromiseState.FULFILLED;\n    } catch {\n        return PromiseState.REJECTED;\n    }\n};\n\nexport const tryResolve = function <T extends any, Params extends any[] = []>(\n    this: any,\n    fn: (this: any, ...args: Params) => Promised<T>,\n    ...args: Params\n) {\n    return new Promise<T>(resolve => resolve(fn.call(this, ...args)));\n};\n","import { fn, identity } from '../common';\nimport { EMPTY_ARRAY } from '../value/constants';\nimport { isFunction, isNullish, isUndefined } from '../value/is';\nimport type { MapGetter } from './types';\nimport type { List } from '../types';\n\nexport const getMappedValue: MapGetter = (key, map, factory) => {\n    let value = map.get(key);\n\n    if (isUndefined(value) && isFunction(factory)) {\n        if (!isUndefined((value = factory(key, map)))) {\n            map.set(key, value);\n        }\n    }\n\n    return value;\n};\n\nexport const listFrom = <T extends string = string>(value?: string | any[], fallbackList = EMPTY_ARRAY as unknown as T[]) => {\n    const stringedValue = `${value || ''}`.trim();\n    const stringedList = (stringedValue ? stringedValue.split(/(?:\\s*,\\s*)+/).filter(identity) : EMPTY_ARRAY) as T[];\n    return stringedList.length ? stringedList : fallbackList;\n};\n\nexport const pickFrom = <C extends readonly any[] | any[]>(list: C, option?: C[number], defaultOption?: C[number]) => {\n    if (list.includes(option)) return option;\n    if (isNullish(option)) return list[0];\n    return list.includes(defaultOption) ? defaultOption : list[0];\n};\n\nexport const some = fn(Array.prototype.some);\n\nconst _uniqueFlatten = function _uniqueFlatten<T>(reversed: boolean, items: List<T>, uniqueItems: Set<T> = new Set<T>()) {\n    for (const item of items) {\n        if (!Array.isArray(item)) {\n            reversed && uniqueItems.delete(item);\n            uniqueItems.add(item);\n        } else _uniqueFlatten(reversed, item, uniqueItems);\n    }\n    return uniqueItems;\n};\n\ntype _UniqueFlatten = <T>(items: List<T>, uniqueItems?: Set<T>) => Set<T>;\n\nexport const uniqueFlatten = fn(_uniqueFlatten, void 0, false) as _UniqueFlatten;\nexport const uniqueFlattenReversed = fn(_uniqueFlatten, void 0, true) as _UniqueFlatten;\n","import { isString } from '../value/is';\nimport type { DateFunction, DateTimeComponents } from './types';\n\nconst MINUTE_IN_MS = 60 * 1000;\nconst HOUR_IN_MS = 60 * MINUTE_IN_MS;\nconst DAY_IN_MS = 24 * HOUR_IN_MS;\nconst WEEK_IN_MS = 7 * DAY_IN_MS;\n\nexport const parseDate = ((...args) => {\n    const [value] = args;\n\n    const date =\n        args.length >= 2\n            ? new Date(...(args as DateTimeComponents))\n            : value instanceof Date\n              ? value\n              : new Date((isString(value) || Number.isFinite(value) ? value : undefined)!);\n\n    const timestamp = date.getTime();\n    return Number.isFinite(timestamp) ? timestamp : undefined;\n}) as DateFunction<number | undefined>;\n\nexport const transformToMS = (unit: string, value: number): number => {\n    switch (unit) {\n        case 'hour':\n            return value * HOUR_IN_MS;\n        case 'minute':\n            return value * MINUTE_IN_MS;\n        case 'day':\n            return value * DAY_IN_MS;\n        case 'week':\n            return value * WEEK_IN_MS;\n        default:\n            console.warn(`Unknown unit: ${unit}`);\n            return 0;\n    }\n};\n","import { EndpointDownloadStreamData } from '../../types/api/endpoints';\n\nexport const downloadBlob = ({ blob, filename }: EndpointDownloadStreamData) => {\n    const a = document.createElement('a');\n    const url = URL.createObjectURL(blob);\n    const clickHandler = () => void setTimeout(() => URL.revokeObjectURL(url), 150);\n\n    a.href = url;\n    a.download = filename || 'download';\n    a.addEventListener('click', clickHandler, { once: true });\n\n    a.click();\n};\n","import { isNumber, isSymbol } from './is';\n\nexport const clamp = <T extends number = number>(min: T, value: T, max: T) => {\n    if (Math.min(min, max) !== min) [min, max] = [max, min];\n    return Math.max(min, Math.min(value, max));\n};\n\nexport const isBitSafeInteger = (value?: any): value is number => !isSymbol(value) && value === ~~value;\nexport const isInfinity = (value?: any): value is number => isNumber(value) && 1 / value === 0;\n\nexport const mid = (low: number, high: number) => {\n    if (Number.isInteger(low) && Number.isInteger(high)) {\n        return low + Math.floor((high - low) / 2);\n    }\n    throw TypeError(`Expects 2 integer values: [${low}, ${high}]`);\n};\n\nexport const mod = (value: number, modulo: number) => ((value % modulo) + modulo) % modulo;\n","import { clamp } from '../value/number';\n\nexport const enum ByteScale {\n    BYTES = 0,\n    KB = 1,\n    MB = 2,\n    GB = 3,\n}\n\nexport type FileSize = {\n    /**\n     * Byte scale of file.\n     * Maximum byte scale is {@link MAX_BYTE_SCALE}.\n     */\n    scale: ByteScale;\n\n    /**\n     * Approximate (low precision) size of file at the given byte scale.\n     * @example\n     * { scale: ByteScale.KB, size: 34 } // approx. 34 KB\n     * { scale: ByteScale.MB, size: 4.5 } // approx. 4.5 MB\n     */\n    size: number;\n};\n\n/**\n * Represents the maximum byte scale for file sizes.\n * Not expecting bytes beyond the GB (Scale 3) range.\n */\nconst MAX_BYTE_SCALE = ByteScale.GB satisfies ByteScale;\n\n/**\n * Given a number of bytes, will compute and return the corresponding {@link ByteScale byte scale}.\n * May return an integer greater than 3 if given a sufficiently large number of bytes,\n * though the predefined {@link MAX_BYTE_SCALE maximum byte scale} value is 3.\n *\n * @param bytes - Number of bytes\n */\nexport const getByteScale = (bytes: number): ByteScale => {\n    // Computations involving logarithms are used to determine the byte scale.\n    // The base for computation is 1024 (since 1024 bytes => 1KB, 1024KB => 1MB, 1024MB => 1GB).\n    // The required computation is: floor( log1024(bytes) )\n\n    // Logarithms are positive for values > 1, and not defined for values <= 0.\n    // Hence, for values <= 1, the byte scale is the zero (0) minimum (ByteScale.BYTES)\n    if (bytes <= 1) return ByteScale.BYTES;\n\n    // Change base for computation using natural logarithms: log1024(x) => log(x) / log(1024)\n    // The required computation becomes: floor( log(bytes) / log(1024) )\n    return Math.floor(Math.log(bytes) / Math.log(1024)) as ByteScale;\n};\n\n/**\n * Given a number of bytes, will compute and return the approximate low-precision {@link FileSize file size}\n * at the most appropriate {@link ByteScale byte scale}. For sufficiently large number of bytes, the scale is\n * capped at the predefined {@link MAX_BYTE_SCALE maximum byte scale} value of 3. Hence, the size for bytes\n * beyond the GB range, for example, will be expressed as integers greater than 1000.\n *\n * @param bytes - Number of bytes\n */\nexport const getFileSize = (bytes: number): Readonly<FileSize> => {\n    let scale = ByteScale.BYTES;\n\n    // Clamp number of bytes to zero (0) minimum.\n    // Round fractional bytes to the nearest integer.\n    let size = Math.max(0, Math.round(bytes));\n\n    if (size > 999) {\n        // For sizes < 1024, the byte scale will be zero (0).\n        // To approximate those sizes in KB (Scale 1) instead of bytes (Scale 0),\n        // clamp the actual byte scale using 1 as the minimum byte scale.\n        scale = clamp<ByteScale>(1, getByteScale(size), MAX_BYTE_SCALE);\n\n        // Given the byte scale, the corresponding size is derived by: size / (1024 ^ scale)\n        // For lower precision approximation of the size, only 3 significant digits is needed.\n        // Finally, ensure a maximum precision of 1 decimal place: round( approx_size * 10 ) / 10\n        size = Math.round(Number((size / 1024 ** scale).toPrecision(3)) * 10) / 10;\n    }\n\n    return { scale, size } as const;\n};\n\n/**\n * Given a number of bytes, will compute and return the approximate low-precision {@link FileSize file size}\n * as human-readable string (e.g. 512 bytes, 23.1 KB, 4.4 GB, etc.)\n *\n * @param bytes - Number of bytes\n */\nexport const getHumanReadableFileSize = (bytes: number): string => {\n    const { scale, size } = getFileSize(bytes);\n    /*\n     * The human-readable file size string is formed by joining the approximate file size and the byte scale\n     * unit (Bytes, KB, MB, etc.), both of which are separated by a non-breaking whitespace. Non-breaking\n     * whitespace is used here instead of the regular whitespace to ensure that the human-readable file size\n     * string is presented without any line breaks (whenever possible).\n     */\n    switch (scale) {\n        case ByteScale.BYTES:\n            return `${size} byte${size === 1 ? '' : 's'}`;\n        case ByteScale.KB:\n            return `${size} KB`;\n        case ByteScale.MB:\n            return `${size} MB`;\n        case ByteScale.GB:\n            return `${size} GB`;\n    }\n};\n","/**\n * A unified interface for file (uploaded files) sources, such as:\n * - {@link HTMLInputElement `HTMLInputElement`} — with type of `file`\n * - {@link ClipboardEvent `ClipboardEvent`}`.clipboardData`\n * - {@link DragEvent `DragEvent`}`.dataTransfer`\n * - {@link InputEvent `InputEvent`}`.dataTransfer`\n */\nexport interface UploadedFileSource {\n    files?: FileList | null;\n    items?: DataTransferItemList | null;\n}\n\n/**\n * Extracts uploaded {@link File files} from the specified file source and returns them in an array.\n * @param uploadedFileSource\n */\nexport const getUploadedFilesFromSource = <T extends UploadedFileSource>(uploadedFileSource?: T | null): File[] => {\n    const uploadedFiles = new Set<File>();\n\n    if (uploadedFileSource?.items) {\n        // If there is a `DataTransferItemList` in the source (e.g. for data transfers),\n        // try extracting the uploaded files from the `items` list.\n        for (const item of uploadedFileSource.items) {\n            if (item.kind !== 'file') continue;\n            const file = item.getAsFile();\n            if (file) uploadedFiles.add(file);\n        }\n    }\n\n    // If there are no files in the `DataTransferItemList` of the source,\n    // or there is no `DataTransferItemList` in the source (e.g. for input elements),\n    // try extracting the uploaded files from the `files` list of the source.\n\n    // prettier-ignore\n    return Array.from(\n        uploadedFiles.size === 0\n            ? new Set<File>(uploadedFileSource?.files ?? uploadedFiles)\n            : uploadedFiles\n    );\n};\n","export const uniqueId = (() => {\n    let counter = Date.now();\n    return (prefix = 'adyen-pe') => `${prefix}-${++counter}`;\n})();\n\nexport default uniqueId;\n","export const UUID_V4_REGEXP = /^[a-f\\d]{8}-[a-f\\d]{4}-4[a-f\\d]{3}-[89ab][a-f\\d]{3}-[a-f\\d]{12}$/i;\n\nexport const uuid = (() => {\n    const _UUID_V4_FILLER_STRING = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n\n    return () =>\n        _UUID_V4_FILLER_STRING.replace(/[xy]/g, xy => {\n            const randomNibble = (Math.random() * 16) | 0;\n            const nibble = xy == 'x' ? randomNibble : (randomNibble & 0x3) | 0x8;\n            return nibble.toString(16);\n        });\n})();\n\nexport default uuid;\n","import { fn } from '../common';\nimport { EMPTY_OBJECT } from '../value/constants';\nimport { truthify } from '../value/bool';\nimport { isPlainObject } from '../value/is';\nimport type { PredicateType } from '../types';\n\ntype _PlainObject<T> = PredicateType<typeof isPlainObject<T>>;\n\nexport const asPlainObject = <T>(value?: T, fallback = EMPTY_OBJECT as _PlainObject<T>): _PlainObject<T> =>\n    isPlainObject(value) ? value : asPlainObject(fallback, EMPTY_OBJECT as _PlainObject<T>);\n\ninterface _StructFrom {\n    <T extends Record<any, any>, P extends object | null>(o: P, properties: { [K in keyof T]: TypedPropertyDescriptor<T[K]> }): P extends object\n        ? Omit<P, keyof T> & T\n        : T;\n    <P extends object | null>(o: P): P extends object ? { [K in keyof P]: P[K] } : Record<any, any>;\n}\n\ninterface _Struct {\n    <T extends Record<any, any>>(properties: { [K in keyof T]: TypedPropertyDescriptor<T[K]> }): T;\n    (): Record<any, any>;\n}\n\nexport const structFrom = fn(Object.create, void 0) as _StructFrom;\nexport const struct: _Struct = fn(structFrom, void 0, null);\n\nexport const withFreezeProxyHandlers = <T extends object>(handler: ProxyHandler<T> = EMPTY_OBJECT): Readonly<ProxyHandler<T>> => {\n    return Object.freeze({ ...handler, defineProperty: truthify, set: truthify } as const);\n};\n","import { isNullish, isString } from './is';\n\nexport const capitalize = (str?: string) => (str && str?.length > 0 ? `${str[0]!.toUpperCase()}${str.slice(1)}` : str);\nexport const isEmptyString = (str?: string) => isNullish(str) || (isString(str) && /^\\s*$/.test(str));\n","export const API_VERSION = 'v1';\n","import { ErrorTypes } from '../Http/utils';\nexport type InvalidField = { name: string; message: string; value: string };\n\nclass AdyenPlatformExperienceError extends Error {\n    public type: string;\n    public errorCode?: string;\n    public requestId?: string;\n    public invalidFields?: InvalidField[];\n    public status?: string;\n    constructor(type: ErrorTypes, requestId?: string, message?: string, errorCode?: string, invalidFields?: InvalidField[], status?: string) {\n        super(message);\n        this.type = type;\n        this.name = type;\n        this.errorCode = errorCode;\n        this.requestId = requestId;\n        this.invalidFields = invalidFields;\n        this.status = status;\n    }\n}\n\nexport default AdyenPlatformExperienceError;\n","import { isNullish } from '../../utils';\nimport { API_VERSION } from './constants';\nimport { AdyenErrorResponse, ErrorLevel, HttpOptions } from './types';\nimport AdyenPlatformExperienceError, { InvalidField } from '../Errors/AdyenPlatformExperienceError';\n\nconst FILENAME_EXTRACTION_REGEX = /^[^]*?filename[^;\\n]*=\\s*(?:UTF-\\d['\"]*)?(?:(['\"])([^]*?)\\1|([^;\\n]*))?[^]*?$/;\n\nexport const enum ErrorTypes {\n    /** HTTP error. */\n    HTTP_ERROR = 'HTTP_ERROR',\n\n    /** Network error. */\n    NETWORK_ERROR = 'NETWORK_ERROR',\n\n    /** Shopper canceled the current transaction. */\n    CANCEL = 'CANCEL',\n\n    /** Implementation error. The method or parameter are incorrect or are not supported. */\n    IMPLEMENTATION_ERROR = 'IMPLEMENTATION_ERROR',\n\n    /** Generic error. */\n    ERROR = 'ERROR',\n\n    /** Token expired */\n    EXPIRED_TOKEN = 'EXPIRED_TOKEN',\n}\n\nexport const getErrorType = (errorCode: number): ErrorTypes => {\n    switch (errorCode) {\n        case 401:\n            return ErrorTypes.EXPIRED_TOKEN;\n        default:\n            return ErrorTypes.HTTP_ERROR;\n    }\n};\n\nexport const getApiVersion = (options: HttpOptions) => {\n    const [, version] = String(options.apiVersion).match(/^v?([1-9]\\d*)$/i) ?? [];\n    return version ? `v${version}` : API_VERSION;\n};\n\nexport const getResponseContentType = (response: Response): string | undefined => response.headers.get('Content-Type')?.split(';', 1)[0];\n\nexport const getResponseDownloadFilename = (response: Response): string | undefined => {\n    const disposition = response.headers.get('Content-Disposition') ?? '';\n    const filename = disposition.replace(FILENAME_EXTRACTION_REGEX, '$2$3');\n    return decodeURIComponent(filename);\n};\n\nexport const getRequestBodyForContentType = (body: any, contentType?: string) => {\n    switch (contentType) {\n        case 'application/json':\n            return JSON.stringify(body);\n        case 'multipart/form-data':\n            return body instanceof FormData ? body : new FormData();\n        default:\n            return String(body);\n    }\n};\n\nexport const getRequestObject = (options: HttpOptions): RequestInit => {\n    const { headers = [], method = 'GET' } = options;\n    const SDKVersion = !options.versionless && process.env.VITE_VERSION;\n    const contentType = options.skipContentType ? undefined : (options.contentType?.toLowerCase() ?? 'application/json');\n\n    return {\n        method,\n        mode: 'cors',\n        cache: 'default',\n        credentials: 'same-origin',\n        headers: {\n            Accept: 'application/json, text/plain, */*',\n            ...headers,\n\n            // Skip Content-Type header for multipart/form-data requests\n            // The browser will automatically set the content-type for such requests\n            ...(contentType && contentType !== 'multipart/form-data' && { 'Content-Type': contentType }),\n\n            ...(SDKVersion && { 'SDK-Version': SDKVersion }),\n        },\n        redirect: 'follow',\n        signal: options.signal,\n        keepalive: options.keepalive,\n        referrerPolicy: 'no-referrer-when-downgrade',\n        ...(method === 'POST' && options.body && { body: getRequestBodyForContentType(options.body, contentType) }),\n    };\n};\n\nexport function handleFetchError({\n    message,\n    level,\n    errorCode,\n    type = ErrorTypes.NETWORK_ERROR,\n    requestId,\n    invalidFields,\n}: {\n    message: string;\n    level: ErrorLevel | undefined;\n    errorCode?: string;\n    type?: ErrorTypes;\n    requestId?: string;\n    status?: number;\n    invalidFields?: InvalidField[];\n}) {\n    switch (level) {\n        case 'silent': {\n            break;\n        }\n        case 'info':\n        case 'warn':\n            console[level](message);\n            break;\n        case 'error':\n        default:\n            throw new AdyenPlatformExperienceError(type, requestId, message, errorCode, invalidFields);\n    }\n}\n\nexport function isAdyenErrorResponse(data: any): data is AdyenErrorResponse {\n    return data && data.errorCode && data.type && (data.detail || data.invalidFields) && data.status;\n}\n\nexport function parseSearchParams<T extends Record<string, any>>(parameters: T) {\n    const params = new URLSearchParams();\n\n    for (const param of Object.keys(parameters)) {\n        const value = parameters[param];\n        if (!isNullish(value)) {\n            if (Array.isArray(value)) {\n                value.forEach(item => params.append(param, item));\n            } else {\n                // For non-array values, just set the key and value normally\n                params.set(param, String(value));\n            }\n        }\n    }\n\n    return params;\n}\n","import {\n    ErrorTypes,\n    getApiVersion,\n    getErrorType,\n    getRequestObject,\n    getResponseContentType,\n    getResponseDownloadFilename,\n    handleFetchError,\n    isAdyenErrorResponse,\n} from './utils';\nimport { EndpointDownloadStreamData } from '../../types/api/endpoints';\nimport { normalizeLoadingContext, normalizeUrl } from '../utils';\nimport { HttpOptions } from './types';\nimport { onErrorHandler } from '../types';\n\nconst errorHandlerHelper = (errorHandler?: onErrorHandler, error?: any) => {\n    // Always throws\n    try {\n        errorHandler?.(error);\n    } catch {\n        throw error;\n    }\n};\n\nexport async function http<T>(options: HttpOptions): Promise<T> {\n    const { errorLevel, loadingContext = '', path } = options;\n    const versionless = options.versionless || false;\n    const apiVersion = getApiVersion(options);\n    const request = getRequestObject(options);\n    const baseUrl = normalizeLoadingContext(loadingContext);\n    const versionPath = versionless ? '' : apiVersion;\n    const url = new URL(`${baseUrl}${versionPath}${normalizeUrl(path)}`);\n\n    if (options.params) {\n        options.params.forEach((value, param) => {\n            const decodedValue = decodeURIComponent(value);\n            if (decodedValue) url.searchParams.append(param, decodedValue);\n        });\n    }\n\n    return (async () => {\n        // Boolean flag:\n        // Indicates whether a resulting exception will be propagated to the caller (unhandled).\n        // If set to `true`, the resulting exception will be propagated (unhandled).\n        let errorPassThrough = false;\n\n        const error = { level: errorLevel } as Parameters<typeof handleFetchError>[0];\n\n        try {\n            // The `fetch()` could fail and thus throw an exception due to several causes,\n            // including but not limited to: fetch signal aborted, CORS errors, network errors\n            // (e.g device is offline or poor connection), etc.\n            const res = await fetch(url, request); // (!)\n\n            if (res.ok) {\n                if (res.status === 204) {\n                    // No content to process\n                    return null;\n                }\n\n                try {\n                    const contentType = getResponseContentType(res);\n\n                    //TODO: when backend is ready double check this logic\n                    switch (contentType) {\n                        case 'application/json':\n                            // This could throw an exception if response body content is not valid JSON\n                            const text = await res.clone().text();\n                            if (!text) {\n                                if (process.env.VITE_MODE === 'development') {\n                                    console.warn(`Response from ${url} has an empty body. Review the API response.`);\n                                }\n                                return null;\n                            }\n                            return await res.json();\n                        default:\n                            const blob = await res.blob();\n                            const filename = getResponseDownloadFilename(res);\n                            return { blob, filename } as const satisfies EndpointDownloadStreamData;\n                    }\n                } catch (ex) {\n                    // If it does throw an exception, the exception will be propagated to the caller (unhandled).\n                    errorPassThrough = true;\n\n                    // Consider transforming the exception before propagating it to the caller,\n                    // thus making it easier for the caller to differentiate it from other errors.\n                    throw ex;\n                }\n            }\n\n            error.type = getErrorType(res.status);\n\n            // This could throw an exception in one of these two cases:\n            //   (1) if response has no body content\n            //   (2) if response body content is not valid JSON\n            //\n            // If it does throw an exception, the exception will be handled,\n            // since we have the `errorCode` (HTTP status code).\n            const response = await res.json(); // (!)\n\n            error.message = options.errorMessage || `Service at ${url} not available`;\n            error.errorCode = response?.status == undefined ? undefined : String(response.status);\n            error.requestId = response?.requestId;\n\n            if (isAdyenErrorResponse(response)) {\n                error.message = response.detail;\n                error.errorCode = response.errorCode;\n                error.status = response.status;\n                error.invalidFields = response.invalidFields;\n            }\n            errorHandlerHelper(options.errorHandler, error);\n        } catch (ex) {\n            if (errorPassThrough) {\n                // Since the `errorPassThrough` flag is set to `true`,\n                // The exception will be propagated to the caller (unhandled)\n                errorHandlerHelper(options.errorHandler, ex);\n                throw ex;\n            }\n\n            if (!error.type) {\n                // If the error type isn't already set, mark the error as a network error.\n                // [Note]: There could be other reasons (besides network) for having an error here.\n                error.type = ErrorTypes.NETWORK_ERROR;\n            }\n\n            errorHandlerHelper(options.errorHandler, ex);\n\n            error.message = options.errorMessage || `Call to ${url} failed. Error: ${ex}`;\n        }\n\n        // Handle the resulting error\n        // This could throw an exception, depending on the `errorLevel`\n        // If it does throw an exception, the exception will be propagated to the caller (unhandled).\n        handleFetchError(error); // (!!)\n    })();\n}\n\nexport function httpGet<T>(options: Omit<HttpOptions, 'method'>): Promise<T> {\n    return http<T>({ ...options, method: 'GET' });\n}\n\nexport function httpPost<T>(options: Omit<HttpOptions, 'method'>): Promise<T> {\n    return http<T>({ ...options, method: 'POST' });\n}\n","import { DevEnvironment } from './types';\nimport { API_ENVIRONMENTS, CDN_ENVIRONMENTS } from './constants';\nimport { httpGet } from './Http/http';\n\nexport const FALLBACK_ENV = 'test' satisfies DevEnvironment;\nexport const FALLBACK_CDN_ENV = 'live' satisfies DevEnvironment;\nexport const normalizeLoadingContext = (loadingContext: string) => loadingContext?.replace?.(/([^/])$/, '$1/');\nexport const normalizeUrl = (url: string) => url?.replace(/^([^/])/, '/$1');\n\nexport const resolveEnvironment = (() => {\n    const envs: Partial<Record<DevEnvironment, string>> = API_ENVIRONMENTS;\n    const cdnEnvs: Partial<Record<DevEnvironment, string>> = CDN_ENVIRONMENTS;\n\n    return (env?: DevEnvironment) => {\n        const cdnEnv = process.env.VITE_TEST_CDN_ASSETS ? 'test' : env === 'test' ? 'live' : env;\n\n        const cdnUrl = cdnEnvs[cdnEnv ?? FALLBACK_CDN_ENV] || cdnEnvs[FALLBACK_CDN_ENV]!;\n        const apiUrl = envs[env ?? FALLBACK_ENV] || envs[FALLBACK_ENV]!;\n\n        return {\n            apiUrl,\n            cdnTranslationsUrl: `${cdnUrl}/assets/translations`,\n            cdnAssetsUrl: `${cdnUrl}/assets`,\n            cdnConfigUrl: `${cdnUrl}/config`,\n        };\n    };\n})();\n\nexport const getConfigFromCdn = ({ url }: { url: string }) => {\n    return async <Fallback>({\n        name,\n        extension = 'json',\n        fallback,\n        subFolder = '',\n    }: {\n        name: string;\n        extension?: string;\n        subFolder?: string;\n        fallback?: Fallback;\n    }) => {\n        // If VITE_LOCAL_ASSETS is enabled load from local config folder\n        if (process.env.VITE_LOCAL_ASSETS) {\n            try {\n                const configPath = `../config${subFolder ? `/${subFolder}` : ''}/${name}.${extension}`;\n                const module = await import(/* @vite-ignore */ configPath);\n                return module.default || module;\n            } catch (error) {\n                console.warn(error);\n                return fallback;\n            }\n        }\n\n        // Otherwise, fetch from CDN\n        try {\n            return await httpGet<any>({\n                loadingContext: `${url}${subFolder ? `/${subFolder}` : ''}`,\n                path: `/${name}.${extension}`,\n                versionless: true,\n                skipContentType: true,\n                errorLevel: 'error',\n            });\n        } catch (error) {\n            console.warn(error);\n            return fallback;\n        }\n    };\n};\n\nexport const getDatasetFromCdn = ({ url }: { url: string }) => {\n    return async <Fallback>({\n        name,\n        extension = 'json',\n        fallback,\n        subFolder = '',\n    }: {\n        name: string;\n        extension?: string;\n        subFolder?: string;\n        fallback?: Fallback;\n    }) => {\n        // If VITE_LOCAL_ASSETS is enabled, fetch from local /datasets static path\n        if (process.env.VITE_LOCAL_ASSETS) {\n            try {\n                const datasetPath = `/datasets${subFolder ? `/${subFolder}` : ''}/${name}.${extension}`;\n                const response = await fetch(datasetPath);\n                if (!response.ok) {\n                    throw new Error(`Failed to fetch ${datasetPath}: ${response.status}`);\n                }\n                return (await response.json()) as Fallback;\n            } catch (error) {\n                console.warn(error);\n                return fallback as Fallback;\n            }\n        }\n\n        // Otherwise, fetch from CDN\n        try {\n            return (await httpGet<any>({\n                loadingContext: `${url}${subFolder ? `/${subFolder}` : ''}`,\n                path: `/${name}.${extension}`,\n                versionless: true,\n                skipContentType: true,\n                errorLevel: 'error',\n            })) as Fallback;\n        } catch (error) {\n            console.warn(error);\n            return fallback as Fallback;\n        }\n    };\n};\n","import { boolOrFalse } from '../../../utils';\nimport { EndpointName } from '../../../types/api/endpoints';\nimport { HttpOptions } from '../../Http/types';\n\nexport const SETUP_ENDPOINTS_API_VERSIONS: Partial<Record<EndpointName, HttpOptions['apiVersion']>> = {\n    getTransaction: 2,\n    getTransactions: 2,\n    getTransactionTotals: 2,\n} as const;\n\nexport const SETUP_ENDPOINT_PATH = '/setup';\nexport const AUTO_REFRESH = boolOrFalse(process.env.SESSION_AUTO_REFRESH);\n\nexport const MAX_AGE_MS = (() => {\n    // Value provisioned in `SESSION_MAX_AGE_MS` env variable\n    let maxAgeMs = ~~process.env.SESSION_MAX_AGE_MS!;\n\n    if (Number.isFinite(maxAgeMs) && (maxAgeMs = Math.max(0, ~~maxAgeMs))) {\n        return maxAgeMs;\n    }\n})();\n","import { boolOrFalse, enumerable, getter, isUndefined, noop, struct } from '../../../utils';\nimport type { Abortable } from './types';\n\nexport const createAbortable = <T>(abortReason?: T) => {\n    let _abortController: AbortController | undefined;\n    let _abortSignal: AbortSignal;\n    let _abortPromise: Promise<never>;\n\n    const _abort = () => {\n        if (isUndefined(_abortController)) return;\n\n        // Capture a reference of the signal abort procedure to be triggered\n        const _abort: typeof noop = _abortController.abort.bind(_abortController);\n\n        // Since abortable can only be refreshed if `_abortController` is `undefined`, trigger the\n        // signal abort procedure after setting `_abortController` to `undefined`. This ensures that\n        // `_abortController` is already `undefined` before any signal abort listener gets a chance\n        // to run. Think about a signal abort listener that triggers an abortable refresh when it\n        // runs — that refresh can only happen if `_abortController` is already set to `undefined`.\n        _abortController = undefined;\n        _abort();\n    };\n\n    const _getAbortPromise = () => {\n        _abortPromise = new Promise<never>((_, reject) => {\n            _abortSignal.addEventListener('abort', function _abort() {\n                _abortSignal.removeEventListener('abort', _abort);\n                reject(abortReason);\n            });\n\n            if (_abortSignal.aborted) throw abortReason;\n        });\n\n        // no-op catch callback to silence unnecessary \"unhandled rejection\" warnings\n        _abortPromise.catch(noop);\n\n        return _abortPromise;\n    };\n\n    const _refresh = (abort = false) => {\n        if (boolOrFalse(abort)) _abort();\n        if (isUndefined(_abortController)) {\n            _abortController = new AbortController();\n            _abortSignal = _abortController.signal;\n            _abortPromise = _getAbortPromise();\n        }\n        return abortable;\n    };\n\n    const abortable = struct<Abortable<T>>({\n        abort: enumerable(_abort),\n        promise: getter(() => _abortPromise),\n        reason: enumerable(abortReason),\n        refresh: enumerable(_refresh),\n        signal: getter(() => _abortSignal),\n    });\n\n    return _refresh();\n};\n\nexport default createAbortable;\n","import { enumerable, getter, noop, struct } from '../../../utils';\nimport type { Promised } from '../../../utils/types';\nimport type { Deferred } from './types';\n\nexport const createDeferred = <T extends Promised<any> = any>() => {\n    let _promise: Deferred<T>['promise'];\n    let _reject: Deferred<T>['reject'];\n    let _resolve: Deferred<T>['resolve'];\n\n    const _refresh = () => {\n        const previousResolve = _resolve ?? noop;\n\n        const currentPromise = new Promise<T>((resolve, reject) => {\n            _resolve = resolve;\n            _reject = reject;\n        });\n\n        previousResolve((_promise = currentPromise));\n        return deferred;\n    };\n\n    const deferred = struct<Deferred<T>>({\n        promise: getter(() => _promise),\n        refresh: enumerable(_refresh),\n        reject: enumerable(reason => _reject(reason)),\n        resolve: enumerable(value => _resolve(value)),\n    });\n\n    return _refresh();\n};\n\nexport default createDeferred;\n","import { createAbortable } from '../abortable';\nimport { createDeferred } from '../deferred';\nimport { enumerable, getter, isUndefined, tryResolve } from '../../../utils';\nimport type { Promised } from '../../../utils/types';\nimport type { Promisor } from './types';\n\nexport const createPromisor = <T extends any, Params extends any[] = []>(\n    factory: (this: any, signal: AbortSignal, ...args: Params) => Promised<T>\n) => {\n    const _abortable = createAbortable();\n    const _deferred = createDeferred<T>();\n    let _promise: Promisor<T, Params>['promise'] | undefined;\n\n    const promisor = function (this: any, ...args) {\n        isUndefined(_promise) ? _deferred.refresh() : _abortable.abort();\n\n        const currentPromise = tryResolve.call(this, factory, _abortable.refresh().signal, ...args) as Promise<T>;\n\n        (async () => {\n            let isLatestPromise = _promise === (_promise = currentPromise);\n            try {\n                const value = await currentPromise.finally(() => {\n                    isLatestPromise = _promise === currentPromise;\n                    isLatestPromise && (_promise = undefined);\n                });\n                isLatestPromise && _deferred.resolve(value);\n            } catch (ex) {\n                isLatestPromise && _deferred.reject(ex);\n            }\n        })();\n\n        return currentPromise;\n    } as Promisor<T, Params>;\n\n    return Object.defineProperties(promisor, {\n        abort: enumerable(_abortable.abort),\n        promise: getter(() => _deferred.promise),\n        refresh: enumerable(() => void _deferred.refresh()),\n    });\n};\n\nexport default createPromisor;\n","import { parseDate } from '../../../utils';\n\nexport function bytesToBase64(bytes: Uint8Array) {\n    const binString = Array.from(bytes, (byte: number) => String.fromCodePoint(byte)).join('');\n    return btoa(binString);\n}\n\nexport const encodeAnalyticsEvent = (event: any) => {\n    try {\n        const formattedOptions = JSON.stringify(event);\n        const encodedData = bytesToBase64(new TextEncoder().encode(formattedOptions));\n        const data = new URLSearchParams();\n        data.set('data', encodedData);\n        return data;\n    } catch (err) {\n        return null;\n    }\n};\n\nexport const getEventTime = (time?: number | string | Date) => {\n    const timestamp = parseDate(time) ?? Date.now();\n    return Math.floor(timestamp / 1000); // time in seconds\n};\n","import Core from '../../core';\nimport { SETUP_ENDPOINT_PATH, SETUP_ENDPOINTS_API_VERSIONS } from './constants';\nimport { parseSearchParams } from '../../Http/utils';\nimport { SessionContext } from '../../../primitives/context/session';\nimport { createPromisor } from '../../../primitives/async/promisor';\nimport {\n    abortSignalForAny,\n    asPlainObject,\n    deepFreeze,\n    EMPTY_OBJECT,\n    isAbortSignal,\n    isPlainObject,\n    isUndefined,\n    noop,\n    struct,\n    withFreezeProxyHandlers,\n} from '../../../utils';\nimport type { EndpointHttpCallables, EndpointSuccessResponse, SessionObject, SetupContextObject, SetupResponse } from '../types';\nimport type { EndpointName, SetupEndpoint } from '../../../types/api/endpoints';\nimport type { HttpMethod, HttpOptions } from '../../Http/types';\nimport { encodeAnalyticsEvent } from '../../Analytics/analytics/utils';\n\nexport class SetupContext {\n    private _endpoints: SetupContextObject['endpoints'] = EMPTY_OBJECT;\n    private _extraConfig: SetupContextObject['extraConfig'] = EMPTY_OBJECT;\n    private _revokeEndpointsProxy = noop;\n\n    private readonly _beforeHttp = async () => {\n        // a no-op catch callback is used here (`noop`),\n        // to silence unnecessary unhandled promise rejection warnings\n        await this._refreshPromisor.promise.catch(noop);\n    };\n\n    private readonly _refreshPromisor = createPromisor((promisorSignal, signal?: AbortSignal | null | undefined) => {\n        const abortSignal = isAbortSignal(signal) ? abortSignalForAny([signal, promisorSignal]) : promisorSignal;\n        return this._fetchSetupEndpoint(abortSignal);\n    });\n\n    declare public loadingContext?: Core<any>['loadingContext'];\n    declare public analyticsPayload?: Array<URLSearchParams> | undefined;\n    declare public analyticsEnabled?: boolean;\n    declare public readonly refresh: (signal: AbortSignal) => Promise<void>;\n\n    constructor(private readonly _session: SessionContext<SessionObject, any[]>) {\n        let _refreshPromise: Promise<void> | undefined;\n\n        this.refresh = signal => {\n            this._refreshPromisor(signal).catch(noop);\n\n            return (_refreshPromise ??= this._refreshPromisor.promise\n                .finally(() => (_refreshPromise = undefined))\n                .then(({ endpoints, ...rest }) => {\n                    this._resetEndpoints();\n                    ({ proxy: this._endpoints, revoke: this._revokeEndpointsProxy } = this._getEndpointsProxy(endpoints));\n                    this._extraConfig = deepFreeze(rest);\n                    if (this.analyticsEnabled) {\n                        this._setAnalyticsUserProfile()?.then(() => {\n                            this.setCustomTranslationsAnalytics();\n                        });\n                    }\n                }));\n        };\n    }\n\n    get endpoints() {\n        return this._endpoints;\n    }\n\n    get extraConfig() {\n        return this._extraConfig;\n    }\n\n    private _fetchSetupEndpoint(signal: AbortSignal) {\n        return this._session.http(null, {\n            method: 'POST',\n            path: SETUP_ENDPOINT_PATH,\n            errorLevel: 'fatal',\n            loadingContext: this.loadingContext,\n            signal,\n        }) as Promise<SetupResponse>;\n    }\n\n    private async _setAnalyticsUserProfile() {\n        const data = encodeAnalyticsEvent([{}]);\n        if (this._endpoints.sendEngageEvent && data) {\n            return this._endpoints.sendEngageEvent(\n                {\n                    body: data,\n                    contentType: 'application/x-www-form-urlencoded',\n                    keepalive: true,\n                },\n                EMPTY_OBJECT\n            );\n        }\n        return;\n    }\n\n    private async setCustomTranslationsAnalytics() {\n        if (this.analyticsPayload && this.analyticsPayload?.length > 0 && this._endpoints && this._endpoints.sendTrackEvent) {\n            const retryPayload: URLSearchParams[] = [];\n            Promise.all(\n                this.analyticsPayload.map((payload: URLSearchParams) => {\n                    return this._endpoints.sendTrackEvent!(\n                        {\n                            body: payload,\n                            contentType: 'application/x-www-form-urlencoded',\n                            keepalive: true,\n                        },\n                        EMPTY_OBJECT\n                    ).catch(() => {\n                        retryPayload.push(payload);\n                    });\n                })\n            ).finally(() => {\n                this.analyticsPayload = retryPayload.length > 0 ? retryPayload : undefined;\n            });\n        }\n        return;\n    }\n\n    private _getEndpointsProxy(endpoints: SetupEndpoint) {\n        const availableEndpoints: Set<EndpointName> = new Set(Object.keys(endpoints) as (keyof typeof endpoints)[]);\n        const sessionAwareEndpoints: SetupContextObject['endpoints'] = struct();\n        let isActive = true;\n\n        const revoke = () => {\n            isActive = false;\n            availableEndpoints.clear();\n        };\n\n        const proxy = new Proxy(\n            EMPTY_OBJECT as typeof sessionAwareEndpoints,\n            withFreezeProxyHandlers({\n                get: <Endpoint extends EndpointName>(target: typeof sessionAwareEndpoints, endpoint: Endpoint, receiver: any) => {\n                    if (!isActive || !availableEndpoints.has(endpoint)) {\n                        return Reflect.get(target, endpoint, receiver);\n                    }\n\n                    const apiVersion = SETUP_ENDPOINTS_API_VERSIONS[endpoint];\n                    const overrideHttpOptions: Partial<HttpOptions> = apiVersion ? { apiVersion } : EMPTY_OBJECT;\n\n                    sessionAwareEndpoints[endpoint] ??= (() => {\n                        const { method = 'GET', url } = endpoints[endpoint];\n                        if (isUndefined(url || undefined)) return;\n\n                        return ((...args: Parameters<EndpointHttpCallables>) => {\n                            const httpOptions = {\n                                ...this._getHttpOptions(method as HttpMethod, url!, ...args),\n                                ...overrideHttpOptions,\n                            };\n                            return this._session.http(this._beforeHttp, httpOptions) as Promise<EndpointSuccessResponse<Endpoint>>;\n                        }) as EndpointHttpCallables<Endpoint>;\n                    })()!;\n\n                    return sessionAwareEndpoints[endpoint];\n                },\n            })\n        );\n\n        return { proxy, revoke };\n    }\n\n    private _getHttpOptions(method: HttpMethod, path: string, ...args: Parameters<EndpointHttpCallables>) {\n        const { loadingContext } = this;\n        const [request, requestParams] = args;\n        const { path: pathParams, query: searchParams } = asPlainObject(requestParams as any);\n        const params = searchParams && parseSearchParams(searchParams);\n\n        if (isPlainObject(pathParams)) {\n            for (const pathParamKey of Object.keys(pathParams)) {\n                path = path.replace(`{${pathParamKey}}`, pathParams[pathParamKey]);\n            }\n        }\n\n        return { loadingContext, ...request, method, params, path } as const;\n    }\n\n    private _resetEndpoints() {\n        this._revokeEndpointsProxy();\n        this._revokeEndpointsProxy = noop;\n        this._endpoints = EMPTY_OBJECT;\n    }\n}\n\nexport default SetupContext;\n","export const ERR_SESSION_EXPIRED: unique symbol = Symbol('Error<SESSION_EXPIRED>');\nexport const ERR_SESSION_FACTORY_UNAVAILABLE: unique symbol = Symbol('Error<SESSION_FACTORY_UNAVAILABLE>');\nexport const ERR_SESSION_HTTP_UNAVAILABLE: unique symbol = Symbol('Error<SESSION_HTTP_UNAVAILABLE>');\nexport const ERR_SESSION_INVALID: unique symbol = Symbol('Error<SESSION_INVALID>');\nexport const ERR_SESSION_REFRESH_ABORTED: unique symbol = Symbol('Error<SESSION_REFRESH_ABORTED>');\nexport const EVT_SESSION_EXPIRED = '_sessionExpired';\nexport const EVT_SESSION_READY = '_sessionReady';\nexport const EVT_SESSION_REFRESHED = '_sessionRefreshed';\nexport const EVT_SESSION_REFRESHING_END = '_sessionRefreshingEnd';\nexport const EVT_SESSION_REFRESHING_START = '_sessionRefreshingStart';\n","export const INTERNAL_EVT_SESSION_DEADLINE = '_session.deadline';\nexport const INTERNAL_EVT_SESSION_READY = '_session.ready';\nexport const INTERNAL_EVT_SESSION_REFRESHING_END = '_session.refreshingEnd';\nexport const INTERNAL_EVT_SESSION_REFRESHING_START = '_session.refreshingStart';\n","import { boolOrFalse, falsify, getter, isFunction, noop, tryResolve } from '../../../../utils';\nimport { createPromisor } from '../../../async/promisor';\nimport { EVT_SESSION_EXPIRED } from '../constants';\nimport type { SessionRefresher } from './types';\n\nexport const _canAutofresh = async <T extends any>(refresher: SessionRefresher<T>) => {\n    const { specification } = refresher.context;\n\n    const canAutofresh = await tryResolve(async () => {\n        const _autoRefresh = specification.autoRefresh;\n        return isFunction(_autoRefresh) ? _autoRefresh.call(specification, refresher.session) : _autoRefresh;\n    }).catch(falsify);\n\n    return boolOrFalse(canAutofresh);\n};\n\nexport const createSessionAutofresher = <T extends any>(refresher: SessionRefresher<T>) => {\n    let _unlistenExpired = refresher.context.emitter.on(EVT_SESSION_EXPIRED, () => _autofresh(false));\n    let _autofreshSignal: AbortSignal | undefined;\n\n    let _autofreshPromisor = createPromisor(async (signal, skipCanAutofreshCheck = false) => {\n        _autofreshSignal = signal;\n\n        const canAutofresh = boolOrFalse(skipCanAutofreshCheck) || (await _canAutofresh(refresher));\n\n        if (_autofreshSignal !== signal) {\n            // The current autofresh signal does not match the autofresh attempt `signal`,\n            // meaning that this autofresh attempt is not the latest attempt.\n            // Return immediately to silently ignore this autofresh attempt.\n            return;\n        }\n\n        if (canAutofresh && refresher.pending && !refresher.refreshing) {\n            // a no-op catch callback is used here (`noop`),\n            // to silence unnecessary unhandled promise rejection warnings\n            refresher.refresh(_autofreshSignal).catch(noop);\n        }\n    });\n\n    let _autofresh = (skipCanAutofreshCheck = false) => {\n        if (!refresher.refreshing) void _autofreshPromisor(skipCanAutofreshCheck);\n    };\n\n    let _destruct = () => {\n        _unlistenExpired();\n        _autofreshPromisor.abort();\n        _autofreshPromisor = _autofreshSignal = _unlistenExpired = undefined!;\n        _autofresh = _destruct = noop;\n    };\n\n    const autofresh = (skipCanAutofreshCheck = false) => _autofresh(skipCanAutofreshCheck);\n\n    return Object.defineProperties(autofresh as typeof autofresh & { readonly destruct: () => void }, {\n        destruct: getter(() => _destruct, false),\n    });\n};\n\nexport default createSessionAutofresher;\n","export const DEFAULT_INTERVAL_MS = 1000;\nexport const MAX_INTERVAL_MS = 0x7fffffff;\n","import { boolOrFalse, clamp, enumerable, struct } from '../../../utils';\nimport { DEFAULT_INTERVAL_MS, MAX_INTERVAL_MS } from './constants';\nimport type { Interval } from './types';\n\n/**\n * Starts an abortable interval with autocorrection for time drifts.\n *\n * @example\n * // Schedule a callback every second:\n * let interval = createInterval(time => {\n *   console.log('clock!', time);\n * }, 1000, true);\n *\n * // And to stop it:\n * interval.cancel();\n *\n * // Don't forget to clean up:\n * interval = null;\n *\n * @param callback Callback to be executed at interval\n * @param ms Interval (in milliseconds)\n * @param runCallbackAsap Whether to execute callback as soon as possible\n *\n * @see [Gist by Jake Archibald](https://gist.github.com/jakearchibald/cb03f15670817001b1157e62a076fe95)\n */\nexport const createInterval = (callback: (time: DOMHighResTimeStamp) => any, ms = DEFAULT_INTERVAL_MS, runCallbackAsap = false) => {\n    let _abortController: AbortController | undefined = new AbortController();\n    let _intervalDelay = clamp(0, ~~ms, MAX_INTERVAL_MS);\n    let _shouldRunCallbackAsap = boolOrFalse(runCallbackAsap);\n\n    if (!Number.isFinite(_intervalDelay)) {\n        _intervalDelay = DEFAULT_INTERVAL_MS;\n    }\n\n    // Prefer `currentTime`, as it'll better sync animations queued in the same frame,\n    // but if it isn't supported, `performance.now()` is fine.\n    const _startTime = (document.timeline?.currentTime as number) ?? performance.now();\n\n    const _cancel = () => {\n        // Release the abort controller resource once aborted\n        _abortController?.abort();\n        _abortController = undefined;\n    };\n\n    const _frame = (time: number) => {\n        if (!_abortController || _abortController.signal.aborted) return;\n        _scheduleFrame(time);\n        callback(time);\n    };\n\n    const _scheduleFrame = (time: number) => {\n        // Just in case the interval callback needs to be executed as soon as possible,\n        // start with a zero delay (instead of the adjusted `ms` delay)\n        let delay = 0;\n\n        if (!_shouldRunCallbackAsap) {\n            const elapsed = time - _startTime;\n            const roundedElapsed = Math.round(elapsed / _intervalDelay) * _intervalDelay;\n            const targetNext = _startTime + roundedElapsed + _intervalDelay;\n\n            // Callback should be executed after adjusted `ms` delay\n            delay = targetNext - performance.now();\n        }\n\n        setTimeout(() => requestAnimationFrame(_frame), delay);\n    };\n\n    _scheduleFrame(_startTime);\n\n    // A frame must have already been scheduled for immediate run\n    _shouldRunCallbackAsap = false;\n\n    return struct<Interval>({\n        cancel: enumerable(_cancel),\n        delay: enumerable(ms),\n        signal: enumerable(_abortController.signal),\n    });\n};\n\nexport default createInterval;\n","import { getter, isFunction, isNullish, noop, struct } from '../../../utils';\nimport type { WatchListEntries, WatchListSubscriptionEventCallbacks } from './types';\n\nexport const createWatchListCurrentStateRecord = <T extends Record<string, any>>(entries: WatchListEntries<T>) => {\n    const statePropertyDescriptors = {} as { [K in keyof T]: TypedPropertyDescriptor<T[K]> };\n    const entriesPropertyDescriptors = Object.getOwnPropertyDescriptors(entries) as typeof statePropertyDescriptors;\n\n    for (const key of Object.keys(entries) as (keyof T)[]) {\n        const { get, value } = entriesPropertyDescriptors[key];\n\n        statePropertyDescriptors[key] = getter(\n            get ||\n                ((isFunction(value)\n                    ? // ensure that the `this` binding of the getter function is preserved\n                      value.bind(entries)\n                    : () => value) as NonNullable<typeof get>)\n        );\n    }\n\n    return struct<Readonly<T>>(statePropertyDescriptors);\n};\n\nexport const createWatchListSubscriptionEventCallbacks = () => {\n    const callbacks = { idle: null, resume: null } as {\n        [K in keyof WatchListSubscriptionEventCallbacks]: NonNullable<WatchListSubscriptionEventCallbacks[K]> | null;\n    };\n\n    const descriptors = {} as {\n        [K in keyof typeof callbacks]: {\n            get: () => (typeof callbacks)[K];\n            set: (callback?: (typeof callbacks)[K]) => void;\n        };\n    };\n\n    for (const key of Object.keys(callbacks) as (keyof typeof callbacks)[]) {\n        descriptors[key] = {\n            get: () => callbacks[key] ?? noop,\n            set: (callback?: (typeof callbacks)[typeof key]) => {\n                if (isNullish(callback)) {\n                    callbacks[key] = null;\n                } else if (isFunction(callback) && callback !== callbacks[key]) {\n                    callbacks[key] = callback;\n                }\n            },\n        };\n    }\n\n    return struct(descriptors) as WatchListSubscriptionEventCallbacks;\n};\n","export const UNSUBSCRIBE_TOKEN: unique symbol = Symbol('<<UNSUBSCRIBE>>');\n","import { enumerable, getMappedValue, getter, isFunction, noop, sameValue, struct } from '../../../utils';\nimport { createWatchListCurrentStateRecord, createWatchListSubscriptionEventCallbacks } from './helpers';\nimport type { WatchList, WatchListEntries, WatchListSubscriptionCallback } from './types';\nimport { UNSUBSCRIBE_TOKEN } from './constants';\n\nexport const isWatchlistUnsubscribeToken = <T extends Record<string, any>>(\n    currentStateSnapshotOrUnsubscribeToken?: Parameters<WatchListSubscriptionCallback<T>>[0]\n): currentStateSnapshotOrUnsubscribeToken is typeof UNSUBSCRIBE_TOKEN => currentStateSnapshotOrUnsubscribeToken === UNSUBSCRIBE_TOKEN;\n\nexport const createWatchlist = <T extends Record<string, any>>(entries: WatchListEntries<T>) => {\n    let lastStateSnapshot: Readonly<T> | undefined;\n\n    const currentState = createWatchListCurrentStateRecord(entries);\n    const subscriptionEventCallbacks = createWatchListSubscriptionEventCallbacks();\n    const subscriptionCallbacksWithReferenceCounting = new Map<WatchListSubscriptionCallback<T>, number>();\n    const unsubscribeCallbacks = new WeakMap<WatchListSubscriptionCallback<T>, (...args: any[]) => void>();\n\n    const _getCurrentStateSnapshot = () => Object.freeze({ ...currentState });\n    const _isWithoutSubscriptionCallbacks = () => subscriptionCallbacksWithReferenceCounting.size === 0;\n\n    const _notifySubscriptions = (unsubscribeToken?: typeof UNSUBSCRIBE_TOKEN) => {\n        if (_isWithoutSubscriptionCallbacks()) return;\n\n        if (isWatchlistUnsubscribeToken(unsubscribeToken)) {\n            const subscriptionCallbacks: WatchListSubscriptionCallback<T>[] = [];\n\n            subscriptionCallbacksWithReferenceCounting.forEach((referenceCount, callback) => {\n                subscriptionCallbacks.push(callback);\n                const unsubscribeCallback = unsubscribeCallbacks.get(callback)!;\n                while (referenceCount--) unsubscribeCallback?.();\n            });\n\n            subscriptionCallbacks.forEach(callback => callback(unsubscribeToken));\n            return true;\n        }\n\n        const currentStateSnapshot = lastStateSnapshot as Readonly<T>;\n\n        lastStateSnapshot = _getCurrentStateSnapshot();\n\n        for (const key of Object.keys(lastStateSnapshot) as (keyof T)[]) {\n            if (sameValue(lastStateSnapshot[key], currentStateSnapshot[key])) continue;\n            subscriptionCallbacksWithReferenceCounting.forEach((_, callback) => callback(lastStateSnapshot!));\n            return true;\n        }\n\n        return false;\n    };\n\n    const subscribe: WatchList<T>['subscribe'] = (subscriptionCallback?: WatchListSubscriptionCallback<T>) => {\n        if (!isFunction(subscriptionCallback)) return noop;\n\n        const unsubscribeCallback = getMappedValue(subscriptionCallback, unsubscribeCallbacks, () => {\n            let unsubscribe: (() => void) | undefined = () => {\n                const subscriptionCallbackReferenceCount = subscriptionCallbacksWithReferenceCounting.get(subscriptionCallback) || 0;\n\n                if (subscriptionCallbackReferenceCount === 1) {\n                    unsubscribe = undefined;\n                    subscriptionCallbacksWithReferenceCounting.delete(subscriptionCallback);\n                    unsubscribeCallbacks.delete(subscriptionCallback);\n\n                    if (_isWithoutSubscriptionCallbacks()) {\n                        lastStateSnapshot = undefined;\n                        subscriptionEventCallbacks.idle();\n                    }\n                } else if (subscriptionCallbackReferenceCount > 1) {\n                    subscriptionCallbacksWithReferenceCounting.set(subscriptionCallback, subscriptionCallbackReferenceCount - 1);\n                }\n            };\n\n            return () => {\n                unsubscribe?.();\n            };\n        })!;\n\n        const willResumeSubscriptions = _isWithoutSubscriptionCallbacks();\n\n        subscriptionCallbacksWithReferenceCounting.set(\n            subscriptionCallback,\n            (subscriptionCallbacksWithReferenceCounting.get(subscriptionCallback) || 0) + 1\n        );\n\n        if (willResumeSubscriptions) {\n            lastStateSnapshot = _getCurrentStateSnapshot();\n            subscriptionEventCallbacks.resume();\n        }\n\n        subscriptionCallback(lastStateSnapshot!);\n\n        return unsubscribeCallback;\n    };\n\n    return struct<WatchList<T>>({\n        idle: getter(_isWithoutSubscriptionCallbacks),\n        on: enumerable(subscriptionEventCallbacks),\n        cancelSubscriptions: enumerable(() => _notifySubscriptions(UNSUBSCRIBE_TOKEN) as true),\n        requestNotification: enumerable(() => _notifySubscriptions()),\n        snapshot: getter(() => lastStateSnapshot ?? _getCurrentStateSnapshot()),\n        subscribe: enumerable(subscribe),\n    });\n};\n\nexport default createWatchlist;\n","import { createInterval, Interval } from '../interval';\nimport { createWatchlist } from '../../reactive/watchlist';\nimport { enumerable, struct } from '../../../utils';\nimport type { Clock, ClockWatchListEntries } from './types';\n\nexport const clock = (() => {\n    let interval: Interval | undefined;\n\n    const { cancelSubscriptions, requestNotification, subscribe, on } = createWatchlist<ClockWatchListEntries>({\n        // Use wrapper function instead of direct reference to `Date.now`,\n        // otherwise, tests will fail since `Date.now` won't be mocked\n        now: () => Date.now(),\n    });\n\n    on.resume = () => {\n        interval = createInterval(requestNotification, 1000, false);\n    };\n\n    on.idle = () => {\n        interval?.cancel();\n        interval = undefined;\n    };\n\n    return struct<Clock>({\n        cancelSubscriptions: enumerable(cancelSubscriptions),\n        subscribe: enumerable(subscribe),\n    });\n})();\n\nexport default clock;\n","import { enumerable, isFunction, isUndefined, noop, struct } from '../../../utils';\nimport type { EmittableEvent, Emitter, EmitterEvents } from './types';\n\nexport const createEventEmitter = <Events extends EmitterEvents>() => {\n    const _eventTarget = new (class extends EventTarget {})();\n\n    const _emitEvent: Emitter<Events>['emit'] = (type, ...restArgs) => {\n        const [detail] = restArgs;\n\n        if (restArgs.length && isUndefined(detail)) {\n            // `undefined` has been explicitly passed as the detail of the event to be dispatched.\n            // Notify the consumer with a corresponding warning indicating possible resolutions.\n            // Warning can further be conditioned to only be available in development environment.\n            console.warn(\n                'Unexpected value `undefined` provided for event detail.\\n' +\n                    '\\tTurn off this warning by doing either of the following:\\n' +\n                    '\\t(1) omit the optional event detail parameter.\\n' +\n                    '\\t(2) explicitly pass `null` for the event detail parameter (instead of `undefined`).\\n'\n            );\n        }\n\n        const event = new CustomEvent(\n            type,\n            struct({\n                bubbles: enumerable(false),\n                cancelable: enumerable(false),\n                detail: enumerable(detail ?? null),\n            })\n        ) as EmittableEvent<Events, typeof type>;\n\n        return _eventTarget.dispatchEvent(event);\n    };\n\n    const _onEvent: Emitter<Events>['on'] = (type, listener) => {\n        if (!isFunction(listener)) return noop;\n\n        const _listener = (evt: Event) =>\n            listener.call(\n                null,\n                struct({\n                    detail: enumerable((evt as EmittableEvent<Events, typeof type>).detail),\n                    timeStamp: enumerable(evt.timeStamp),\n                    type: enumerable((evt as EmittableEvent<Events, typeof type>).type),\n                })\n            );\n\n        _eventTarget.addEventListener(type, _listener);\n\n        return () => _eventTarget.removeEventListener(type, _listener);\n    };\n\n    return struct<Emitter<Events>>({\n        emit: enumerable(_emitEvent),\n        on: enumerable(_onEvent),\n    });\n};\n\nexport default createEventEmitter;\n","import {\n    abortedSignal,\n    abortSignalForAny,\n    enumerable,\n    getter,\n    isAbortSignal,\n    isFunction,\n    noop,\n    parseDate,\n    struct,\n    tryResolve,\n} from '../../../../utils';\nimport clock from '../../../time/clock';\nimport { createAbortable } from '../../../async/abortable';\nimport { createPromisor } from '../../../async/promisor';\nimport { isWatchlistUnsubscribeToken } from '../../../reactive/watchlist';\nimport { createEventEmitter, Emitter } from '../../../reactive/eventEmitter';\nimport { INTERNAL_EVT_SESSION_DEADLINE } from './constants';\nimport type { SessionEventType, SessionSpecification } from '../types';\nimport type { SessionDeadline, SessionDeadlineEmitter } from './types';\n\nexport const createSessionDeadline = <T extends any>(emitter: Emitter<SessionEventType>, specification: SessionSpecification<T>) => {\n    let _deadlineSignal: AbortSignal | undefined;\n    let _deadlineTimestamp = Infinity;\n    let _refreshPromisorSignal: AbortSignal | undefined;\n    let _stopDeadlineClock: (() => void) | undefined;\n\n    const _deadlineAbortable = createAbortable();\n    const _deadlineEmitter: SessionDeadlineEmitter = createEventEmitter();\n\n    const _clearDeadline = () => {\n        _deadlineSignal?.removeEventListener('abort', _clearDeadline);\n        _deadlineTimestamp = Infinity;\n        _stopDeadlineClock?.();\n        _deadlineAbortable.refresh();\n        _deadlineEmitter.emit(INTERNAL_EVT_SESSION_DEADLINE);\n    };\n\n    const _refreshPromisor = createPromisor(async (signal, session: T | undefined) => {\n        _refreshPromisorSignal = signal;\n\n        const deadline = await tryResolve(() => {\n            const _deadline = specification.deadline;\n            return isFunction(_deadline) ? _deadline.call(specification, session, signal) : _deadline;\n        }).catch(noop as () => undefined);\n\n        if (_refreshPromisorSignal !== signal) return;\n\n        const _deadlines = (Array.isArray(deadline) ? deadline : [deadline]).filter(deadline => deadline || deadline === 0);\n\n        if (_deadlines.length > 0) {\n            let _deadlineElapsed = false;\n            let _signals = new Set<AbortSignal>();\n\n            for (const deadline of _deadlines) {\n                if (isAbortSignal(deadline)) {\n                    if ((_deadlineElapsed = deadline.aborted)) break;\n                    _signals.add(deadline);\n                } else {\n                    _deadlineTimestamp = Math.min(_deadlineTimestamp, parseDate(deadline) ?? Infinity);\n                    if ((_deadlineElapsed = _deadlineTimestamp <= Date.now())) break;\n                }\n            }\n\n            _deadlineElapsed ||= _signals.size < 1 && !Number.isFinite(_deadlineTimestamp);\n\n            if (!_deadlineElapsed) {\n                _deadlineSignal = abortSignalForAny([..._signals, _deadlineAbortable.signal]);\n                _deadlineSignal.addEventListener('abort', _clearDeadline);\n                _startDeadlineClock();\n            } else _deadlineSignal ??= abortedSignal();\n\n            // clear collections\n            _deadlines.length = 0;\n            _signals.clear();\n        } else {\n            _deadlineSignal = undefined;\n            _deadlineAbortable.refresh();\n        }\n    });\n\n    const _startDeadlineClock = () => {\n        if (!Number.isFinite(_deadlineTimestamp)) return;\n\n        let unsubscribeClock = clock.subscribe(snapshotOrSignal => {\n            if (isWatchlistUnsubscribeToken(snapshotOrSignal)) return _clearDeadline();\n            if (snapshotOrSignal.now >= _deadlineTimestamp) _deadlineAbortable.abort();\n        });\n\n        _stopDeadlineClock = () => {\n            unsubscribeClock?.();\n            unsubscribeClock = _stopDeadlineClock = undefined!;\n        };\n    };\n\n    return struct<SessionDeadline<T>>({\n        elapse: enumerable(_deadlineAbortable.abort),\n        elapsed: getter(() => _deadlineSignal && _deadlineSignal.aborted),\n        on: enumerable(_deadlineEmitter.on),\n        refresh: enumerable(_refreshPromisor.bind(undefined)),\n        signal: getter(() => _deadlineAbortable.signal),\n    });\n};\n\nexport default createSessionDeadline;\n","import { createPromisor } from '../../../async/promisor';\nimport { createEventEmitter, Emitter } from '../../../reactive/eventEmitter';\nimport { abortSignalForAny, ALREADY_RESOLVED_PROMISE, enumerable, getter, isAbortSignal, isFunction, struct, tryResolve } from '../../../../utils';\nimport { INTERNAL_EVT_SESSION_READY, INTERNAL_EVT_SESSION_REFRESHING_END, INTERNAL_EVT_SESSION_REFRESHING_START } from './constants';\nimport { ERR_SESSION_FACTORY_UNAVAILABLE, ERR_SESSION_INVALID, ERR_SESSION_REFRESH_ABORTED, EVT_SESSION_EXPIRED } from '../constants';\nimport type { SessionRefresher, SessionRefresherContext, SessionRefresherEmitter } from './types';\nimport type { SessionEventType, SessionSpecification } from '../types';\n\nexport const createSessionRefresher = <T extends any>(emitter: Emitter<SessionEventType>, specification: SessionSpecification<T>) => {\n    let _refreshPending = false;\n    let _refreshingPromise: Promise<void> | undefined;\n    let _refreshingSignal: AbortSignal;\n    let _waitForRefreshingPromise = true;\n    let _session: T | undefined;\n\n    const _sessionPlaceholder = Symbol('<next_session>');\n    const _refresherEmitter: SessionRefresherEmitter = createEventEmitter();\n\n    function _assertSession(value: any): asserts value is T {\n        try {\n            specification.assert?.(value);\n        } catch (ex) {\n            throw ERR_SESSION_INVALID;\n        }\n    }\n\n    function _assertSessionFactory(value: any): asserts value is NonNullable<SessionSpecification<T>['onRefresh']> {\n        if (!isFunction(value)) throw ERR_SESSION_FACTORY_UNAVAILABLE;\n    }\n\n    const _refreshPromisor = createPromisor((promisorSignal, signal?: AbortSignal | null | undefined) => {\n        if (!_refreshingSignal) _refreshingSignal = promisorSignal;\n        else return _refreshSession(isAbortSignal(signal) ? abortSignalForAny([signal, promisorSignal]) : promisorSignal);\n    });\n\n    const _refreshSession = async (signal: AbortSignal) => {\n        let nextSession: any = _sessionPlaceholder;\n        try {\n            _refreshPending = false;\n            _refreshingSignal = signal;\n\n            if (_waitForRefreshingPromise) {\n                await (_refreshingPromise ??= (async () => {\n                    /////////////////////////////////////////////////////////////////\n                    // Should run only once for each batch of refresh attempts, at //\n                    // the start (the first refresh attempt) of the current batch. //\n                    /////////////////////////////////////////////////////////////////\n\n                    // Defer dispatching `EVT_SESSION_REFRESHING_START` event\n                    // until the next tick, thus guaranteeing consistent async behavior\n                    // for every `refreshPromisor()` call.\n                    await ALREADY_RESOLVED_PROMISE;\n\n                    // Subsequent refresh attempts need not await `_refreshingPromise` anymore\n                    _waitForRefreshingPromise = false;\n\n                    _refresherEmitter.emit(INTERNAL_EVT_SESSION_REFRESHING_START);\n                })());\n            }\n\n            _assertSessionFactory(specification.onRefresh);\n\n            nextSession = await tryResolve(() => specification.onRefresh(_session, signal)).finally(() => {\n                if (signal.aborted) throw ERR_SESSION_REFRESH_ABORTED;\n            });\n        } finally {\n            if (_refreshingSignal === signal) {\n                //////////////////////////////////////////////////////////////////\n                // These session refresh completion steps should run only once, //\n                // at the end of each batch of session refresh attempts (only   //\n                // for the last session refresh request).                       //\n                //////////////////////////////////////////////////////////////////\n\n                try {\n                    if (nextSession !== _sessionPlaceholder) {\n                        _assertSession(nextSession);\n                        _session = nextSession;\n                        _refresherEmitter.emit(INTERNAL_EVT_SESSION_READY);\n                    }\n                } finally {\n                    // Mark current batch of refresh attempts as completed\n                    _refreshingPromise = undefined;\n                    _waitForRefreshingPromise = true;\n                    _refresherEmitter.emit(INTERNAL_EVT_SESSION_REFRESHING_END);\n                }\n            }\n        }\n    };\n\n    emitter.on(EVT_SESSION_EXPIRED, () => (_refreshPending = !_refreshingPromise));\n\n    // Initial refresh promisor call to capture the refreshing signal\n    void _refreshPromisor();\n\n    return struct<SessionRefresher<T>>({\n        context: enumerable(\n            struct<SessionRefresherContext<T>>({\n                emitter: enumerable(emitter),\n                specification: enumerable(specification),\n            })\n        ),\n        on: enumerable(_refresherEmitter.on),\n        pending: getter(() => _refreshPending),\n        promise: getter(() => _refreshPromisor.promise),\n        refresh: enumerable(_refreshPromisor.bind(undefined)),\n        refreshing: getter(() => !!_refreshingPromise),\n        session: getter(() => _session),\n        signal: getter(() => _refreshingSignal),\n    });\n};\n\nexport default createSessionRefresher;\n","import {\n    ERR_SESSION_EXPIRED,\n    ERR_SESSION_HTTP_UNAVAILABLE,\n    EVT_SESSION_EXPIRED,\n    EVT_SESSION_READY,\n    EVT_SESSION_REFRESHED,\n    EVT_SESSION_REFRESHING_END,\n    EVT_SESSION_REFRESHING_START,\n} from './constants';\nimport {\n    INTERNAL_EVT_SESSION_DEADLINE,\n    INTERNAL_EVT_SESSION_READY,\n    INTERNAL_EVT_SESSION_REFRESHING_END,\n    INTERNAL_EVT_SESSION_REFRESHING_START,\n} from './internal/constants';\nimport { createSessionAutofresher } from './internal/autofresher';\nimport { createSessionDeadline } from './internal/deadline';\nimport { createSessionRefresher } from './internal/refresher';\nimport { createEventEmitter } from '../../reactive/eventEmitter';\nimport { isFunction, noop } from '../../../utils';\nimport type { SessionEventType, SessionSpecification } from './types';\n\nexport class SessionContext<T, HttpParams extends any[] = any[]> {\n    private _session: T | undefined;\n\n    private readonly _autofresh;\n    private readonly _deadline;\n    private readonly _refresher;\n\n    private readonly _eventEmitter = createEventEmitter<SessionEventType>();\n\n    public declare readonly http: typeof this._sessionHttp;\n    public declare readonly on: (typeof this._eventEmitter)['on'];\n    public declare readonly refresh: (typeof this._refresher)['refresh'];\n\n    constructor(private readonly _specification: SessionSpecification<T, HttpParams>) {\n        this._deadline = createSessionDeadline(this._eventEmitter, this._specification as SessionSpecification<T>);\n        this._refresher = createSessionRefresher(this._eventEmitter, this._specification as SessionSpecification<T>);\n        this._autofresh = createSessionAutofresher(this._refresher);\n\n        this._deadline.on(INTERNAL_EVT_SESSION_DEADLINE, () => this._eventEmitter.emit(EVT_SESSION_EXPIRED));\n        this._refresher.on(INTERNAL_EVT_SESSION_REFRESHING_START, () => this._eventEmitter.emit(EVT_SESSION_REFRESHING_START));\n        this._refresher.on(INTERNAL_EVT_SESSION_REFRESHING_END, () => this._eventEmitter.emit(EVT_SESSION_REFRESHING_END));\n\n        this._refresher.on(INTERNAL_EVT_SESSION_READY, () => {\n            this._session = this._refresher.session;\n            this._deadline.refresh(this._session).finally(() => this._eventEmitter.emit(EVT_SESSION_REFRESHED));\n            this._eventEmitter.emit(EVT_SESSION_READY);\n        });\n\n        this.http = this._sessionHttp.bind(this);\n        this.on = this._eventEmitter.on;\n        this.refresh = this._refresher.refresh;\n    }\n\n    get isExpired() {\n        return this._deadline.elapsed;\n    }\n\n    get refreshing() {\n        return this._refresher.refreshing;\n    }\n\n    private _assertSessionHttp(value: any): asserts value is NonNullable<SessionSpecification<T, HttpParams>['http']> {\n        if (!isFunction(value)) throw ERR_SESSION_HTTP_UNAVAILABLE;\n    }\n\n    private async _sessionHttp(\n        beforeHttp?: ((currentSession: T | undefined, signal: AbortSignal, ...args: HttpParams) => any) | null,\n        ...args: HttpParams\n    ) {\n        this._autofresh(true);\n        while (true) {\n            try {\n                // a no-op catch callback is used here (`noop`),\n                // to silence unnecessary unhandled promise rejection warnings\n                await this._refresher.promise.catch(noop);\n\n                const { signal } = this._deadline;\n\n                await beforeHttp?.(this._session, signal, ...args);\n                this._assertSessionHttp(this._specification.http);\n\n                return await this._specification.http(this._session, signal, ...args);\n            } catch (ex) {\n                if (ex !== ERR_SESSION_EXPIRED) throw ex;\n                if (this._refresher.pending) continue;\n                this._deadline.elapse();\n            }\n        }\n    }\n}\n\nexport default SessionContext;\n","import { ERR_SESSION_EXPIRED, SessionSpecification } from '../../../primitives/context/session';\nimport { abortSignalForAny, enumerable, isAbortSignal, isPlainObject, isString, isUndefined } from '../../../utils';\nimport { http as _http } from '../../Http/http';\nimport { ErrorTypes } from '../../Http/utils';\nimport { AUTO_REFRESH, MAX_AGE_MS } from './constants';\nimport type { SessionObject, SessionRequest } from '../types';\nimport type { HttpOptions } from '../../Http/types';\nimport type { onErrorHandler } from '../../types';\n\ntype _AuthSessionSpecification = SessionSpecification<SessionObject, Parameters<typeof _http>>;\n\nexport class AuthSessionSpecification implements _AuthSessionSpecification {\n    public declare errorHandler: onErrorHandler | null;\n\n    public declare readonly autoRefresh: _AuthSessionSpecification['autoRefresh'];\n    public declare readonly onRefresh: _AuthSessionSpecification['onRefresh'];\n\n    constructor(public onSessionCreate?: SessionRequest) {\n        this._errorHandler = this._errorHandler.bind(this);\n\n        Object.defineProperties(this, {\n            autoRefresh: enumerable<typeof this.autoRefresh>(AUTO_REFRESH),\n            onRefresh: enumerable<typeof this.onRefresh>((_, signal) => this.onSessionCreate!(signal)),\n        });\n    }\n\n    public readonly assert: _AuthSessionSpecification['assert'] = maybeSession => {\n        if (isPlainObject(maybeSession)) {\n            const id = isString(maybeSession.id) ? maybeSession.id.trim() : undefined;\n            const token = isString(maybeSession.token) ? maybeSession.token.trim() : undefined;\n            if (id && token) return;\n        }\n        throw undefined;\n    };\n\n    public readonly deadline: _AuthSessionSpecification['deadline'] = session => {\n        const deadlines = [];\n        let issuedAt: number;\n        let expiresAt: number;\n\n        try {\n            ({ iat: issuedAt, exp: expiresAt } = JSON.parse(atob(session?.token.split('.')[1]!)));\n            deadlines.push(expiresAt);\n        } catch {\n            /* ignore malformed token errors */\n            issuedAt = Date.now();\n        }\n\n        if (!isUndefined(MAX_AGE_MS)) {\n            const issuedAtDate = new Date(issuedAt);\n            deadlines.push(issuedAtDate.setMilliseconds(issuedAtDate.getMilliseconds() + MAX_AGE_MS));\n        }\n\n        return deadlines;\n    };\n\n    public http: _AuthSessionSpecification['http'] = async (session, sessionSignal, httpOptions: HttpOptions) => {\n        const { headers, signal, ...restOptions } = httpOptions;\n        try {\n            const sessionHttpOptions = {\n                ...restOptions,\n                headers: {\n                    ...headers,\n                    ...(session && { Authorization: `Bearer ${session.token}` }),\n                },\n                errorHandler: this._errorHandler,\n                signal: isAbortSignal(signal) ? abortSignalForAny([sessionSignal, signal]) : sessionSignal,\n            };\n            return await _http(sessionHttpOptions);\n        } catch (ex: any) {\n            if (ex?.type === ErrorTypes.EXPIRED_TOKEN) throw ERR_SESSION_EXPIRED;\n            throw ex;\n        }\n    };\n\n    private _errorHandler(error: any) {\n        try {\n            if (this.errorHandler) this.errorHandler(error);\n        } catch {\n            /* Not interested in errors resulting from this instance's `errorHandler()` method */\n        }\n        throw error;\n    }\n}\n\nexport default AuthSessionSpecification;\n","import { enumerable, getter, struct } from '../../../utils';\nimport type { ErrorContainer } from './types';\n\nconst _NO_ERR: unique symbol = Symbol('<<NO_ERR>>');\n\nfunction _assertError<T>(error: any): asserts error is T {\n    /* istanbul ignore if -- @preserve */\n    if (error === _NO_ERR) {\n        // Code execution should never reach this block.\n        // If it does, then the consumer is doing something wrong.\n        // The consumer needs to call the `reset()` method instead.\n        throw new TypeError('Illegal error');\n    }\n}\n\nexport const createErrorContainer = <T = unknown>() => {\n    let _error: T | typeof _NO_ERR = _NO_ERR;\n\n    const _resetError = () => {\n        _error = _NO_ERR;\n    };\n\n    const _setError = (error: T) => {\n        _assertError<T>(error);\n        _error = error;\n    };\n\n    return struct<ErrorContainer<T>>({\n        error: getter(() => (_error === _NO_ERR ? undefined : _error)),\n        hasError: getter(() => _error !== _NO_ERR),\n        reset: enumerable(_resetError),\n        set: enumerable(_setError),\n    });\n};\n\nexport default createErrorContainer;\n","import SetupContext from './SetupContext';\nimport AuthSessionSpecification from './AuthSessionSpecification';\nimport { ERR_SESSION_REFRESH_ABORTED, EVT_SESSION_EXPIRED, EVT_SESSION_READY, SessionContext } from '../../../primitives/context/session';\nimport { createErrorContainer } from '../../../primitives/auxiliary/errorContainer';\nimport { createPromisor } from '../../../primitives/async/promisor';\nimport { createWatchlist } from '../../../primitives/reactive/watchlist';\nimport { boolOrFalse, boolOrTrue, isFunction } from '../../../utils';\n\nimport type { onErrorHandler } from '../../types';\n\nexport class AuthSession {\n    private _canSkipSessionRefresh = false;\n    private _refreshPromisorSignal: AbortSignal | undefined;\n    private _sessionIsFrozen = false;\n\n    private readonly _errorContainer = createErrorContainer();\n    private readonly _specification = new AuthSessionSpecification();\n    private readonly _sessionContext = new SessionContext(this._specification);\n    private readonly _setupContext = new SetupContext(this._sessionContext);\n\n    private readonly _refreshPromisor = createPromisor(async (signal, skipSessionRefreshIfPossible = false) => {\n        let authStateChanged = !this._refreshPromisorSignal;\n        let isLatestRefresh = this._refreshPromisorSignal === (this._refreshPromisorSignal = signal);\n        const onlySetupRefresh = boolOrFalse(skipSessionRefreshIfPossible) && this._canSkipSessionRefresh;\n\n        if (authStateChanged) {\n            authStateChanged = false;\n            this._errorContainer.reset();\n            this._onAuthStateChanged();\n        }\n\n        try {\n            await (onlySetupRefresh ? this._setupContext : this._sessionContext)\n                .refresh(signal)\n                .finally(() => (isLatestRefresh = this._refreshPromisorSignal === signal));\n        } catch (ex) {\n            if (!isLatestRefresh) return;\n            if (!signal.aborted && (onlySetupRefresh || ex !== ERR_SESSION_REFRESH_ABORTED)) this._errorContainer.set(ex);\n            authStateChanged = !onlySetupRefresh;\n        } finally {\n            if (authStateChanged || (onlySetupRefresh && isLatestRefresh)) {\n                this._refreshPromisorSignal = undefined;\n                this._onAuthStateChanged();\n            }\n        }\n    });\n\n    private readonly _watchlist = createWatchlist({\n        endpoints: () => this._setupContext.endpoints,\n        extraConfig: () => this._setupContext.extraConfig,\n        hasError: () => this._errorContainer.hasError,\n        isExpired: () => this._sessionContext.isExpired,\n        isFrozen: () => this._sessionIsFrozen,\n        refreshing: () => !!this._refreshPromisorSignal,\n    });\n\n    public readonly freeze = () => {\n        this._sessionIsFrozen = true;\n        this._watchlist.on.resume = undefined;\n        this._watchlist.cancelSubscriptions();\n    };\n\n    public readonly http = this._sessionContext.http.bind(this._sessionContext, null);\n    public readonly refresh = this._refresh.bind(this);\n    public readonly subscribe = this._watchlist.subscribe;\n\n    constructor() {\n        this._watchlist.on.resume = () => {\n            const unlisteners = [\n                this._sessionContext.on(EVT_SESSION_EXPIRED, () => {\n                    this._canSkipSessionRefresh = false;\n                    this._onAuthStateChanged();\n                }),\n\n                this._sessionContext.on(EVT_SESSION_READY, () => {\n                    void this._refresh((this._canSkipSessionRefresh = true));\n                }),\n            ];\n\n            this._watchlist.on.idle = () => {\n                this._watchlist.on.idle = undefined;\n                unlisteners.forEach(unlisten => unlisten());\n                unlisteners.length = 0;\n            };\n\n            if (!this.context.refreshing && boolOrTrue(this.context.isExpired)) {\n                this._refresh();\n            }\n        };\n    }\n\n    get context() {\n        return this._watchlist.snapshot;\n    }\n\n    set loadingContext(loadingContext: typeof this._setupContext.loadingContext) {\n        this._setupContext.loadingContext = loadingContext;\n    }\n\n    set analyticsPayload(payload: Array<URLSearchParams>) {\n        this._setupContext.analyticsPayload = payload;\n    }\n\n    set analyticsEnabled(analyticsEnabled: boolean) {\n        this._setupContext.analyticsEnabled = analyticsEnabled;\n    }\n\n    set errorHandler(errorHandler: onErrorHandler | null) {\n        this._specification.errorHandler = errorHandler;\n    }\n\n    set onSessionCreate(onSessionCreate: typeof this._specification.onSessionCreate) {\n        if (this._specification.onSessionCreate === onSessionCreate) return;\n\n        this._specification.onSessionCreate = onSessionCreate;\n        if (!this._refreshPromisorSignal) return;\n\n        if (isFunction(this._specification.onSessionCreate)) {\n            this._canSkipSessionRefresh = false;\n            this._refresh();\n        }\n    }\n\n    private _onAuthStateChanged() {\n        this._watchlist.requestNotification();\n    }\n\n    private _refresh(skipSessionRefreshIfPossible = false) {\n        void this._refreshPromisor(skipSessionRefreshIfPossible);\n    }\n}\n\nexport default AuthSession;\n","import type { KeyOfRecord } from '../utils/types';\nimport EN_US from '../assets/translations/en-US.json' with { type: 'json' };\nconst _en_US = { ...EN_US };\n\ntype _SupportedLocale = KeyOfRecord<typeof all_locales>;\ntype _Translations = Translations | PromiseLike<Translations>;\n\nexport type CustomTranslations = Record<string, Translations>;\nexport type Locale = `${Lowercase<string>}-${Uppercase<string>}`;\nexport type TranslationKey = KeyOfRecord<typeof _en_US>;\nexport type Translations = { [key in TranslationKey]?: string };\nexport type TranslationSource = _Translations | (() => _Translations);\n\nexport type TranslationSourceRecord = {\n    [K in _SupportedLocale]: {\n        [P in K]: TranslationSource;\n    };\n}[_SupportedLocale];\n\nexport type TranslationOptions = {\n    values?: Record<string, any> | ((placeholder: string, index: number, repetitionIndex: number) => any);\n    count?: number;\n};\n\n// TODO - Remove this in v2. It was previously used to expose the available translations to the user.\nexport const da_DK = { da_DK: () => ({}) };\nexport const de_DE = { de_DE: () => ({}) };\nexport const es_ES = { es_ES: () => ({}) };\nexport const fi_FI = { fi_FI: () => ({}) };\nexport const fr_FR = { fr_FR: () => ({}) };\nexport const it_IT = { it_IT: () => ({}) };\nexport const nl_NL = { nl_NL: () => ({}) };\nexport const no_NO = { no_NO: () => ({}) };\nexport const pt_BR = { pt_BR: () => ({}) };\nexport const sv_SE = { sv_SE: () => ({}) };\n\nexport const en_US = { en_US: _en_US as Translations };\n\n// TODO - Remove this in v2. It was previously used to expose all the available translations to the user.\nexport const all_locales = {\n    ...da_DK,\n    ...de_DE,\n    ...en_US,\n    ...es_ES,\n    ...fi_FI,\n    ...fr_FR,\n    ...it_IT,\n    ...nl_NL,\n    ...no_NO,\n    ...pt_BR,\n    ...sv_SE,\n} as const;\n","import { en_US } from '../../../translations';\nimport type { Locale, Translations, TranslationSource } from '../../../translations';\n\nexport const FALLBACK_LOCALE = 'en-US' as const;\nexport const DEFAULT_TRANSLATIONS: Translations = en_US['en_US'];\nexport const DEFAULT_DATETIME_FORMAT = { year: 'numeric', month: '2-digit', day: '2-digit' } as Intl.DateTimeFormatOptions;\nexport const EXCLUDE_PROPS = ['constructor', 'i18n', 'watch', 'preferredTranslations'] as const;\n\nexport const getLocalesFromTranslationSourcesRecord = (sources: Record<Locale, TranslationSource>) =>\n    [\n        ...new Set(\n            Object.keys(sources)\n                .map(locale => locale.replace(/_/g, '-'))\n                .sort()\n        ),\n    ] as Locale[];\n\nexport const SUPPORTED_LOCALES = [\n    'da-DK',\n    'de-DE',\n    'en-US',\n    'es-ES',\n    'fi-FI',\n    'fr-FR',\n    'it-IT',\n    'nl-NL',\n    'no-NO',\n    'pt-BR',\n    'sv-SE',\n] satisfies Locale[];\n","/**\n * Currency Codes\n */\nconst CURRENCY_CODES = {\n    AED: 'د.إ',\n    AFN: '؋',\n    ALL: 'L',\n    ANG: 'ƒ',\n    AOA: 'Kz',\n    ARS: '$',\n    AUD: '$',\n    AWG: 'ƒ',\n    AZN: '₼',\n    BAM: 'KM',\n    BBD: '$',\n    BDT: '৳',\n    BGN: 'лв',\n    BHD: '.د.ب',\n    BIF: 'FBu',\n    BMD: '$',\n    BND: '$',\n    BOB: 'Bs.',\n    BRL: 'R$',\n    BSD: '$',\n    BTC: '฿',\n    BTN: 'Nu.',\n    BWP: 'P',\n    BYR: 'p.',\n    BYN: 'Br',\n    BZD: 'BZ$',\n    CAD: '$',\n    CDF: 'FC',\n    CHF: 'Fr.',\n    CLP: '$',\n    CNY: '¥',\n    COP: '$',\n    CRC: '₡',\n    CUC: '$',\n    CUP: '₱',\n    CVE: '$',\n    CZK: 'Kč',\n    DJF: 'Fdj',\n    DKK: 'kr',\n    DOP: 'RD$',\n    DZD: 'دج',\n    EEK: 'kr',\n    EGP: '£',\n    ERN: 'Nfk',\n    ETB: 'Br',\n    EUR: '€',\n    FJD: '$',\n    FKP: '£',\n    GBP: '£',\n    GEL: '₾',\n    GGP: '£',\n    GHC: '₵',\n    GHS: 'GH₵',\n    GIP: '£',\n    GMD: 'D',\n    GNF: 'FG',\n    GTQ: 'Q',\n    GYD: '$',\n    HKD: '$',\n    HNL: 'L',\n    HRK: 'kn',\n    HTG: 'G',\n    HUF: 'Ft',\n    IDR: 'Rp',\n    ILS: '₪',\n    IMP: '£',\n    INR: '₹',\n    IQD: 'ع.د',\n    IRR: '﷼',\n    ISK: 'kr',\n    JEP: '£',\n    JMD: 'J$',\n    JPY: '¥',\n    KES: 'KSh',\n    KGS: 'лв',\n    KHR: '៛',\n    KMF: 'CF',\n    KPW: '₩',\n    KRW: '₩',\n    KYD: '$',\n    KZT: '₸',\n    LAK: '₭',\n    LBP: '£',\n    LKR: '₨',\n    LRD: '$',\n    LSL: 'M',\n    LTL: 'Lt',\n    LVL: 'Ls',\n    MAD: 'MAD',\n    MDL: 'lei',\n    MGA: 'Ar',\n    MKD: 'ден',\n    MMK: 'K',\n    MNT: '₮',\n    MOP: 'MOP$',\n    MUR: '₨',\n    MVR: 'Rf',\n    MWK: 'MK',\n    MXN: '$',\n    MYR: 'RM',\n    MZN: 'MT',\n    NAD: '$',\n    NGN: '₦',\n    NIO: 'C$',\n    NOK: 'kr',\n    NPR: '₨',\n    NZD: '$',\n    OMR: '﷼',\n    PAB: 'B/.',\n    PEN: 'S/.',\n    PGK: 'K',\n    PHP: '₱',\n    PKR: '₨',\n    PLN: 'zł',\n    PYG: 'Gs',\n    QAR: '﷼',\n    RMB: '￥',\n    RON: 'lei',\n    RSD: 'Дин.',\n    RUB: '₽',\n    RWF: 'R₣',\n    SAR: '﷼',\n    SBD: '$',\n    SCR: '₨',\n    SDG: 'ج.س.',\n    SEK: 'kr',\n    SGD: '$',\n    SHP: '£',\n    SLL: 'Le',\n    SOS: 'S',\n    SRD: '$',\n    SSP: '£',\n    STD: 'Db',\n    SVC: '$',\n    SYP: '£',\n    SZL: 'E',\n    THB: '฿',\n    TJS: 'SM',\n    TMT: 'T',\n    TND: 'د.ت',\n    TOP: 'T$',\n    TRL: '₤',\n    TRY: '₺',\n    TTD: 'TT$',\n    TVD: '$',\n    TWD: 'NT$',\n    TZS: 'TSh',\n    UAH: '₴',\n    UGX: 'USh',\n    USD: '$',\n    UYU: '$U',\n    UZS: 'лв',\n    VEF: 'Bs',\n    VND: '₫',\n    VUV: 'VT',\n    WST: 'WS$',\n    XAF: 'FCFA',\n    XBT: 'Ƀ',\n    XCD: '$',\n    XOF: 'CFA',\n    XPF: '₣',\n    YER: '﷼',\n    ZAR: 'R',\n    ZWD: 'Z$',\n};\n\nexport default CURRENCY_CODES;\n","const CURRENCY_DECIMALS = {\n    // ZERO_DECIMAL_CURRENCIES\n    IDR: 1,\n    JPY: 1,\n    KRW: 1,\n    VND: 1,\n    BYR: 1,\n    CVE: 1,\n    DJF: 1,\n    GHC: 1,\n    GNF: 1,\n    KMF: 1,\n    PYG: 1,\n    RWF: 1,\n    UGX: 1,\n    VUV: 1,\n    XAF: 1,\n    XOF: 1,\n    XPF: 1,\n\n    // ONE_DECIMAL_CURRENCIES\n    MRO: 10,\n\n    // THREE_DECIMAL_CURRENCIES\n    BHD: 1000,\n    IQD: 1000,\n    JOD: 1000,\n    KWD: 1000,\n    OMR: 1000,\n    LYD: 1000,\n    TND: 1000,\n};\n\nexport default CURRENCY_DECIMALS;\n","import CURRENCY_CODES from '../constants/currency-codes';\nimport CURRENCY_DECIMALS from '../constants/currency-decimals';\nimport { CurrencyCode, CurrencyDecimalCode } from '../types';\n\n/**\n * @internal\n * @param currencyCode -\n * Get divider amount\n */\nexport const getDivider = (currencyCode: string): number => CURRENCY_DECIMALS[currencyCode as CurrencyDecimalCode] || 100;\n\n/**\n * @internal\n * @param currencyCode -\n * Returns whether a CURRENCY CODE is valid\n */\nexport const isValidCurrencyCode = (currencyCode: string): currencyCode is CurrencyCode => !!CURRENCY_CODES[currencyCode as CurrencyCode];\n\n/**\n * @internal\n */\nexport const getCurrencyCode = (currencyCode: string): string | null => (isValidCurrencyCode(currencyCode) ? CURRENCY_CODES[currencyCode] : null);\n\n/**\n * @internal\n */\nexport const getDecimalAmount = (amount: number | string, currencyCode: string): number => {\n    const divider = getDivider(currencyCode);\n    return parseInt(String(amount), 10) / divider;\n};\n\n/**\n * @internal\n */\nexport const getLocalisedAmount = (\n    amount: number,\n    locale: string,\n    currencyCode: string,\n    hideCurrency = false,\n    options: Intl.NumberFormatOptions = {}\n): string => {\n    const stringAmount = amount.toString(); // Changing amount to string to avoid 0-value from returning false\n    const decimalAmount = getDecimalAmount(stringAmount, currencyCode);\n\n    const formatterLocale = locale.replace('_', '-');\n    const formatterOptions = {\n        style: 'currency',\n        currency: currencyCode,\n        currencyDisplay: 'symbol',\n        ...options,\n    } as const;\n\n    try {\n        return hideCurrency\n            ? formatAmountWithoutCurrency(formatterLocale, formatterOptions, decimalAmount)\n            : decimalAmount.toLocaleString(formatterLocale, formatterOptions);\n    } catch (e) {\n        return stringAmount;\n    }\n};\n\nexport const formatAmountWithoutCurrency = (locale: string, options: Intl.NumberFormatOptions, amount: number) => {\n    return Intl.NumberFormat(locale, options)\n        .formatToParts(amount)\n        .filter(p => p.type !== 'currency')\n        .reduce((s, p) => s + p.value, '')\n        .trim();\n};\n\n/**\n * @internal\n */\nexport const getLocalisedPercentage = (percent = 0, locale: string): string | null => {\n    const decimalPercent = percent / 100 / 100;\n    const localeOptions = {\n        style: 'percent',\n        maximumFractionDigits: 2,\n    } as const;\n\n    try {\n        return decimalPercent.toLocaleString(locale, localeOptions);\n    } catch (e) {\n        return null;\n    }\n};\n","import type { RestampContext } from './types';\n\nexport const REGEX_TZ_OFFSET = /GMT(?:[-+](?:0?\\d|1[0-4])(?::?[0-5]\\d)?)?$/;\n\nexport const { BASE_FORMAT_OPTIONS, BASE_LOCALE, SYSTEM_TIMEZONE, SYSTEM_TIMEZONE_FORMATTER } = (() => {\n    const BASE_LOCALE = 'en-US';\n    const DIGITS_2 = '2-digit';\n    const NUMERIC = 'numeric';\n    const SHORT = 'short';\n    const TZ_LONG = 'longOffset';\n    const FRACTIONAL_SECOND_DIGITS = 3;\n\n    const BASE_FORMAT_OPTIONS: Readonly<Intl.DateTimeFormatOptions> = Object.freeze({\n        year: NUMERIC,\n        month: SHORT,\n        day: NUMERIC,\n        hour: DIGITS_2,\n        minute: DIGITS_2,\n        second: DIGITS_2,\n        fractionalSecondDigits: FRACTIONAL_SECOND_DIGITS,\n        timeZoneName: TZ_LONG, // should not be changed — needed for the tz offsets regexp\n    });\n\n    let SYSTEM_TIMEZONE: RestampContext['TIMEZONE'];\n    let SYSTEM_TIMEZONE_FORMATTER: RestampContext['formatter'];\n\n    try {\n        SYSTEM_TIMEZONE_FORMATTER = new Intl.DateTimeFormat(BASE_LOCALE, BASE_FORMAT_OPTIONS);\n        SYSTEM_TIMEZONE = SYSTEM_TIMEZONE_FORMATTER.resolvedOptions().timeZone;\n    } catch (ex) {\n        SYSTEM_TIMEZONE = undefined;\n    }\n\n    return { BASE_FORMAT_OPTIONS, BASE_LOCALE, SYSTEM_TIMEZONE, SYSTEM_TIMEZONE_FORMATTER };\n})();\n","import { EMPTY_ARRAY, mod } from '../../../../utils';\nimport { REGEX_TZ_OFFSET, SYSTEM_TIMEZONE_FORMATTER } from './constants';\nimport type { RestampContext, Restamper, RestampResult } from './types';\n\nconst REGEX_GMT_OFFSET_UNWANTED_SUBSTRINGS = /\\+(?=-)|([+-]00:00)/g;\nconst REGEX_TZ_SINGLE_DIGIT_OFFSET = /(^\\D?)(\\d)$/;\n\nexport const computeTimezoneOffsetInMinutes = ([offsetHours, offsetMinutes]: readonly [number, number]) =>\n    (Math.abs(offsetHours * 60) + offsetMinutes) * (offsetHours < 0 ? -1 : 1);\n\nexport const computeTimezoneOffsetsFromMinutes = (timezoneOffsetInMinutes: number) =>\n    Object.freeze([\n        Math.floor(timezoneOffsetInMinutes / 60), // offset hours\n        mod(timezoneOffsetInMinutes, 60), // offset minutes\n    ] as const);\n\nexport const parseTimezoneOffset = (offset: string | number) => parseInt(offset as string, 10) || 0;\n\n/**\n * @param timezoneOffset {number} The minute offsets relative to GMT (Greenwich Mean Time).\n * @returns {string} The GMT suffixed string for the specified offsets in the format GMT(+|-)[HH]:[MM], or just GMT (if [HH]:[MM] is 00:00).\n */\nexport const getGMTSuffixForTimezoneOffset = (timezoneOffset: RestampResult['offset']): string => {\n    const offsets = computeTimezoneOffsetsFromMinutes(timezoneOffset);\n    const offsetString = offsets.map(offset => `${offset}`.replace(REGEX_TZ_SINGLE_DIGIT_OFFSET, '$10$2')).join(':');\n    return `GMT+${offsetString}`.replace(REGEX_GMT_OFFSET_UNWANTED_SUBSTRINGS, '');\n};\n\n/**\n * @param timezoneOffset {number} The minute offsets of the timezone relative to GMT (Greenwich Mean Time).\n * @param timezoneOffsetRelativeToSystem {number} The minute offsets of the timezone relative to the system timezone.\n * @returns {string} The system timezone GMT suffixed string in the format GMT(+|-)[HH]:[MM], or just GMT (if [HH]:[MM] is 00:00).\n */\nexport const getSystemTimezoneGMTSuffixFromTimezoneOffsets = (\n    timezoneOffset: RestampResult['offset'],\n    timezoneOffsetRelativeToSystem: RestampResult['offset']\n): string => getGMTSuffixForTimezoneOffset(timezoneOffset - timezoneOffsetRelativeToSystem);\n\nexport const getTimezoneOffsetFromFormattedDateString = (date?: string): number => {\n    const offsets = date?.match(REGEX_TZ_OFFSET)?.[0].replace('GMT', '').split(':', 2).map(parseTimezoneOffset) ?? (EMPTY_ARRAY as readonly number[]);\n    return computeTimezoneOffsetInMinutes(offsets.concat(0, 0).slice(0, 2) as [number, number]);\n};\n\nexport const getTimezoneOffsetForTimestamp = (timestamp: number, timezoneFormatter: RestampContext['formatter'] = SYSTEM_TIMEZONE_FORMATTER) => {\n    const date = new Date(timestamp);\n    const systemOffset = getTimezoneOffsetFromFormattedDateString(SYSTEM_TIMEZONE_FORMATTER?.format(date));\n    const timezoneOffset = getTimezoneOffsetFromFormattedDateString(timezoneFormatter?.format(date));\n    return timezoneOffset - systemOffset;\n};\n\nconst restamp = <R extends Restamper = Restamper>(restamper: R, time: Parameters<R>[0], direction: -1 | 1 = 1) => {\n    const { offset, timestamp } = restamper(time);\n    return timestamp - offset * direction * 60000;\n};\n\nexport const systemToTimezone = <R extends Restamper = Restamper>(restamper: R, time: Parameters<R>[0]) => restamp(restamper, time, 1);\nexport const timezoneToSystem = <R extends Restamper = Restamper>(restamper: R, time: Parameters<R>[0]) => restamp(restamper, time, -1);\n","import { isNullish, isUndefined, struct } from '../../../../utils';\nimport { BASE_FORMAT_OPTIONS, BASE_LOCALE, SYSTEM_TIMEZONE, SYSTEM_TIMEZONE_FORMATTER } from './constants';\nimport type { RestampContext, RestamperWithTimezone, RestampResult } from './types';\nimport { getTimezoneOffsetForTimestamp } from './utils';\n\nconst restamper = (() => {\n    let getTimeZone: (this: RestampContext) => RestampContext['TIMEZONE'];\n    let setTimeZone: (this: RestampContext, timezone?: RestampContext['TIMEZONE'] | null) => void;\n\n    if (!isUndefined(SYSTEM_TIMEZONE)) {\n        getTimeZone = function () {\n            return this.TIMEZONE;\n        };\n\n        setTimeZone = function (timeZone) {\n            if (!isNullish(timeZone)) {\n                try {\n                    const nextFormatter = new Intl.DateTimeFormat(BASE_LOCALE, { ...BASE_FORMAT_OPTIONS, timeZone });\n                    const nextTimeZone = nextFormatter.resolvedOptions().timeZone;\n\n                    if (this.TIMEZONE === nextTimeZone) return;\n\n                    this.TIMEZONE = nextTimeZone;\n                    this.formatter = nextFormatter;\n                } catch (ex) {\n                    // Silently ignore invalid timezone updates\n                    if (import.meta.env.DEV) console.error(ex);\n                }\n            } else {\n                this.TIMEZONE = SYSTEM_TIMEZONE;\n                this.formatter = SYSTEM_TIMEZONE_FORMATTER;\n            }\n        };\n    }\n\n    function restamp(this: RestampContext, ...args: [(string | number | Date)?]): RestampResult {\n        if (args.length === 0) return restamp.call(this, Date.now());\n\n        const time = args[0];\n        const timestamp = new Date(time as NonNullable<typeof time>).getTime();\n        const formatter = this.formatter ?? SYSTEM_TIMEZONE_FORMATTER;\n\n        return Object.freeze({\n            formatted: formatter?.format(new Date(timestamp)),\n            offset: getTimezoneOffsetForTimestamp(timestamp, formatter),\n            timestamp,\n        } as const);\n    }\n\n    return () => {\n        const context = { TIMEZONE: SYSTEM_TIMEZONE } as RestampContext;\n        const set = setTimeZone?.bind(context);\n\n        const tz = struct({\n            current: { get: getTimeZone?.bind(context), set },\n            system: { value: SYSTEM_TIMEZONE },\n        });\n\n        return Object.defineProperties(restamp.bind(context) as RestamperWithTimezone, {\n            tz: { get: () => tz, set },\n        });\n    };\n})();\n\nexport default restamper;\n","import { JSX } from 'preact';\nimport { DEFAULT_TRANSLATIONS, FALLBACK_LOCALE, SUPPORTED_LOCALES } from './constants/localization';\nimport { asPlainObject, EMPTY_OBJECT, hasOwnProperty, isFunction } from '../../utils';\nimport type { CustomTranslations, Locale, TranslationOptions, Translations } from '../../translations';\nimport { SupportedLocales } from './types';\n\nconst DEFAULT_TRANSLATION_OPTIONS: TranslationOptions = { values: EMPTY_OBJECT, count: 0 } as const;\nconst LOCALE_FORMAT_REGEX = /^[a-z]{2}-[A-Z]{2}$/;\n\n/**\n * Convert to ISO 639-1\n */\nexport const toTwoLetterCode = (locale: string) => locale.substring(0, 2).toLowerCase();\n\n/**\n * Matches a string with one of the locales\n * @param locale -\n * @param supportedLocales -\n\n * @example\n * matchLocale('en-GB');\n * // 'en-US'\n */\nexport function matchLocale(locale: string, supportedLocales: Locale[]): Locale | null {\n    if (!locale) return null;\n    const twoLetterCode = toTwoLetterCode(locale);\n    return supportedLocales.find(supportedLocale => toTwoLetterCode(supportedLocale) === twoLetterCode) || null;\n}\n\n/**\n * Returns a locale with the proper format\n * @param locale -\n *\n * @example\n * formatLocale('En_us');\n * // 'en-US'\n */\nexport function formatLocale(locale: string): Locale | null {\n    const localeString = locale.replace('_', '-');\n\n    // If it's already formatted, return the locale\n    if (LOCALE_FORMAT_REGEX.test(localeString)) return localeString as Locale;\n\n    // Split the string in two\n    const [languageCode, countryCode] = localeString.split('-');\n\n    // If the locale or the country codes are missing, return null\n    if (!languageCode || !countryCode) return null;\n\n    // Ensure correct format and join the strings back together\n    const fullLocale = `${languageCode.toLowerCase()}-${countryCode.toUpperCase()}` as Locale;\n\n    return fullLocale.length === 5 ? fullLocale : null;\n}\n\n/**\n * Checks the locale format.\n * Also checks if it's on the locales array.\n * If it is not, tries to match it with one.\n * @param locale -\n * @param supportedLocales -\n */\nexport function parseLocale(locale: string, supportedLocales: Locale[]): Locale | null {\n    const trimmedLocale = locale.trim();\n    if (!trimmedLocale || trimmedLocale.length < 1 || trimmedLocale.length > 5) return FALLBACK_LOCALE;\n\n    const formattedLocale = formatLocale(trimmedLocale);\n\n    if (formattedLocale && supportedLocales.includes(formattedLocale)) return formattedLocale;\n\n    return matchLocale(formattedLocale ?? trimmedLocale, supportedLocales);\n}\n\n/**\n * Formats the locales inside the customTranslations object against the supportedLocales\n * @param customTranslations -\n * @param supportedLocales -\n */\nexport function formatCustomTranslations(customTranslations: CustomTranslations = EMPTY_OBJECT, supportedLocales: Locale[]): CustomTranslations {\n    if (customTranslations === EMPTY_OBJECT) return customTranslations;\n\n    return (Object.keys(customTranslations) as Extract<keyof CustomTranslations, string>[]).reduce((translations, locale) => {\n        const formattedLocale = formatLocale(locale) || parseLocale(locale, supportedLocales);\n\n        if (formattedLocale && customTranslations[locale]) {\n            translations[formattedLocale] = customTranslations[locale]!;\n        }\n        return translations;\n    }, {} as CustomTranslations);\n}\n\nconst replaceTranslationValues = (translation: string, values?: TranslationOptions['values']) => {\n    if (isFunction(values)) {\n        const repetitions = new Map<string, number>();\n        let placeholderIndex = -1;\n\n        return translation.replace(/%{(\\w+)}/g, (_, placeholder) => {\n            let repetitionIndex = repetitions.get(placeholder) ?? -1;\n            const replacementValue = values(placeholder, ++placeholderIndex, ++repetitionIndex) ?? '';\n            repetitions.set(placeholder, repetitionIndex);\n            return replacementValue;\n        });\n    }\n\n    return translation.replace(/%{(\\w+)}/g, (_, placeholder) => values?.[placeholder] ?? '');\n};\n\n/**\n * Returns a translation string by key\n * @param translations -\n * @param key -\n * @param options -\n *\n * @internal\n */\nexport const getTranslation = (translations: Record<string, string>, key: string, options = DEFAULT_TRANSLATION_OPTIONS): string | null => {\n    const count = options.count ?? 0;\n    const countKey = `${key}__${count}`;\n\n    // Find {key}__{count} translation key\n    if (hasOwnProperty(translations, countKey) && translations[countKey]) {\n        return replaceTranslationValues(translations[countKey] as string, options.values);\n    }\n\n    const pluralKey = `${key}__plural`;\n\n    // Find {key}__plural translation key, if `count` greater than 1 (e.g. myTranslation__plural)\n    if (hasOwnProperty(translations, pluralKey) && count > 1 && translations[pluralKey]) {\n        return replaceTranslationValues(translations[pluralKey] as string, options.values);\n    }\n\n    // Find {key} translation key (e.g. myTranslation)\n    if (hasOwnProperty(translations, key) && translations[key]) {\n        return replaceTranslationValues(translations[key] as string, options.values);\n    }\n\n    return null;\n};\n\n/**\n * Returns an array with all the locales\n * @param locale - The locale the user wants to use\n * @param fetchTranslationFromCdnPromise -\n * @param customTranslations -\n */\nexport const loadTranslations = async (\n    locale: string,\n    fetchTranslationFromCdnPromise: (locale: SupportedLocales) => Promise<any>,\n    customTranslations: CustomTranslations = EMPTY_OBJECT\n): Promise<Translations> => {\n    // Match locale to one of our available locales (e.g. es-AR => es-ES)\n    const localeToLoad = parseLocale(locale, SUPPORTED_LOCALES) || FALLBACK_LOCALE;\n\n    const loadedLocale = fetchTranslationFromCdnPromise(localeToLoad as SupportedLocales);\n\n    return {\n        ...DEFAULT_TRANSLATIONS, // Default en-US translations (in case any other translation file is missing any key)\n        ...((await loadedLocale) ?? EMPTY_OBJECT), // Merge with our locale file of the locale they are loading\n        ...asPlainObject(customTranslations?.[locale]), // Merge with their custom locales if available\n    };\n};\n\n/**\n * Injects JSX elements in a middle of a translation and returns a JSX array\n * The input string should use %# as the token to know where to insert the component\n * @param translation - Translation string\n * @param renderFunctions - An array function that renders JSX elements\n */\nexport const interpolateElement = (translation: string, renderFunctions: Array<(translation: string) => JSX.Element>) => {\n    // splits by regex group, it guarantees that it only splits with 2 tokens (%#)\n    const matches = translation.split(/%#(.*?)%#/gm);\n    // the map will create an array of JSX / string elements, this syntax in accepted in JSX/react to render elements\n    return matches.map((term, index) => {\n        // math to get the index of the renderFunction that should be used\n        // since we split on tokens, that means the index of the render function is half of the index of the string\n        const indexInFunctionArray = Math.floor(index / 2);\n        return index % 2 === 0 ? term : renderFunctions[indexInFunctionArray]?.(term);\n    });\n};\n","import Localization from './Localization';\nimport { isFunction, struct } from '../../utils';\nimport { formatLocale, loadTranslations, parseLocale } from './utils';\nimport { EXCLUDE_PROPS, FALLBACK_LOCALE } from './constants/localization';\nimport type { CustomTranslations, Locale } from '../../translations';\nimport { SupportedLocales } from './types';\n\nexport function createTranslationsLoader(this: Localization) {\n    type TranslationsLoader = {\n        load: (\n            fetchTranslationFromCdnPromise: (locale: SupportedLocales) => Promise<any>,\n            customTranslations?: CustomTranslations\n        ) => ReturnType<typeof loadTranslations>;\n        get locale(): Locale;\n        set locale(locale: string);\n        supportedLocales: Locale[];\n    };\n\n    let _locale = this.locale;\n    let _preferredLocale: string = _locale;\n    let _supportedLocales: TranslationsLoader['supportedLocales'] = [...this.supportedLocales];\n\n    return struct<TranslationsLoader>({\n        load: {\n            value: (fetchTranslationFromCdnPromise: (locale: SupportedLocales) => Promise<any>, customTranslations?: CustomTranslations) =>\n                loadTranslations(_locale, fetchTranslationFromCdnPromise, customTranslations),\n        },\n        locale: {\n            get: () => _locale,\n            set: (locale: string) => {\n                _preferredLocale = locale;\n                _locale = formatLocale(locale) || parseLocale(locale, _supportedLocales) || FALLBACK_LOCALE;\n            },\n        },\n        supportedLocales: {\n            get: () => _supportedLocales,\n            set(this: TranslationsLoader, supportedLocales: Locale[]) {\n                _supportedLocales = supportedLocales;\n                this.locale = _preferredLocale;\n            },\n        },\n    });\n}\n\nexport function getLocalizationProxyDescriptors(this: Localization) {\n    const descriptors = {} as any;\n\n    for (const [prop, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(Localization.prototype))) {\n        if (EXCLUDE_PROPS.includes(prop as (typeof EXCLUDE_PROPS)[number])) continue;\n\n        if (isFunction(descriptor.get)) {\n            descriptors[prop] = {\n                get: descriptor.get.bind(this),\n                ...(prop === 'timezone' && { set: descriptor.set?.bind(this) }),\n            };\n        } else if (isFunction(descriptor.value)) {\n            descriptors[prop] = { value: descriptor.value.bind(this) };\n        } else {\n            descriptors[prop] = { get: () => this[prop as keyof Localization] };\n        }\n    }\n\n    return descriptors as { [K in keyof Localization['i18n']]: PropertyDescriptor };\n}\n","import {\n    DEFAULT_DATETIME_FORMAT,\n    DEFAULT_TRANSLATIONS,\n    EXCLUDE_PROPS,\n    FALLBACK_LOCALE,\n    getLocalesFromTranslationSourcesRecord,\n    SUPPORTED_LOCALES,\n} from './constants/localization';\nimport type {\n    CustomTranslations,\n    Locale,\n    TranslationKey,\n    TranslationOptions,\n    Translations,\n    TranslationSource,\n    TranslationSourceRecord,\n} from '../../translations';\nimport { en_US } from '../../translations';\nimport { getLocalisedAmount } from './amount/amount-util';\nimport restamper, { RestamperWithTimezone } from './datetime/restamper';\nimport { createTranslationsLoader, getLocalizationProxyDescriptors } from './localization-utils';\nimport { formatCustomTranslations, getTranslation, toTwoLetterCode } from './utils';\nimport { createWatchlist } from '../../primitives/reactive/watchlist';\nimport { ALREADY_RESOLVED_PROMISE, isNull, isNullish, isUndefined, noop, struct } from '../../utils';\nimport { httpGet } from '../Http/http';\nimport { SupportedLocales } from './types';\nimport { translations_dev_assets } from '../../translations/local';\nimport localSwapConfig from '../../config/translations/swapConfig.json';\n\nexport default class Localization {\n    #locale: Locale = FALLBACK_LOCALE;\n    #languageCode: string = toTwoLetterCode(this.#locale);\n    #availableLocales: Readonly<Locale[]> = [FALLBACK_LOCALE] as const;\n    #supportedLocales: Readonly<Locale[]> = this.#availableLocales;\n\n    #customTranslations?: CustomTranslations;\n    #translations: Translations = DEFAULT_TRANSLATIONS;\n    #translationsLoader = createTranslationsLoader.call(this);\n    readonly #fetchTranslationFromCdnPromise: (locale: SupportedLocales) => Promise<any>;\n\n    #ready: Promise<void> = ALREADY_RESOLVED_PROMISE;\n    #currentRefresh?: Promise<void>;\n    #markRefreshAsDone?: () => void;\n    #refreshWatchlist = createWatchlist({ timestamp: () => performance.now() });\n    #restamp: RestamperWithTimezone = restamper();\n    #keySwapConfig: Record<string, string | string[]> = localSwapConfig;\n    #warnedDeprecatedKeys = new Set<string>();\n\n    private watch = this.#refreshWatchlist.subscribe.bind(undefined);\n    public i18n: Omit<Localization, (typeof EXCLUDE_PROPS)[number]> = struct(getLocalizationProxyDescriptors.call(this));\n    public preferredTranslations?: Readonly<{ [k: Locale]: TranslationSource }>;\n\n    constructor(locale: string = FALLBACK_LOCALE, availableTranslations?: TranslationSourceRecord[], cdnTranslationsUrl = '', cdnConfigUrl = '') {\n        this.watch(noop);\n\n        this.#fetchTranslationFromCdnPromise = (locale: string) =>\n            process.env.VITE_LOCAL_ASSETS\n                ? translations_dev_assets[locale]!\n                : httpGet<any>({\n                      loadingContext: cdnTranslationsUrl,\n                      path: `/${locale}.json`,\n                      versionless: true,\n                      skipContentType: true,\n                      errorLevel: 'info',\n                  });\n\n        this.preferredTranslations = Object.freeze(\n            availableTranslations?.reduce((records, curr) => ({ ...records, ...curr }), en_US) ?? { ...en_US }\n        );\n\n        this.#availableLocales = getLocalesFromTranslationSourcesRecord(this.preferredTranslations);\n        this.locale = locale;\n\n        // Load swap config\n        (async () => {\n            // If no CDN config URL provided, use local fallback\n            if (!cdnConfigUrl || process.env.VITE_LOCAL_ASSETS) {\n                return localSwapConfig;\n            }\n\n            try {\n                return await httpGet<Record<string, string | string[]>>({\n                    loadingContext: cdnConfigUrl,\n                    path: '/translations/swapConfig.json',\n                    versionless: true,\n                    skipContentType: true,\n                    errorLevel: 'error',\n                });\n            } catch (error) {\n                console.warn('Failed to load swapConfig from CDN, using local fallback', error);\n                return localSwapConfig;\n            }\n        })().then(config => (this.#keySwapConfig = config));\n    }\n\n    get customTranslations(): CustomTranslations {\n        return this.#customTranslations ?? ({} as CustomTranslations);\n    }\n\n    set customTranslations(customTranslations: CustomTranslations | undefined | null) {\n        let translations: CustomTranslations | undefined = undefined;\n        let supportedLocales: Locale[] = [...this.#availableLocales];\n\n        if (!isNullish(customTranslations)) {\n            translations = formatCustomTranslations(customTranslations, SUPPORTED_LOCALES);\n            const localesFromCustomTranslations = Object.keys(translations) as Locale[];\n\n            // default locales + validated custom locales\n            supportedLocales = [...supportedLocales, ...localesFromCustomTranslations]\n                .sort()\n                .filter((locale, index, locales) => locales.indexOf(locale) === index);\n        }\n\n        this.#translationsLoader.supportedLocales = supportedLocales;\n        this.#refreshTranslations(translations);\n    }\n\n    get languageCode() {\n        return this.#languageCode;\n    }\n\n    get lastRefreshTimestamp() {\n        return this.#refreshWatchlist.snapshot.timestamp;\n    }\n\n    get locale(): Locale {\n        return this.#locale;\n    }\n\n    set locale(locale: string | undefined | null) {\n        if (!isNullish(locale)) {\n            this.#translationsLoader.locale = locale;\n            if (this.#locale === this.#translationsLoader.locale) return;\n            this.#refreshTranslations(this.#customTranslations);\n        } else this.locale = FALLBACK_LOCALE;\n    }\n\n    get ready(): Promise<void> {\n        return this.#ready;\n    }\n\n    get supportedLocales(): Readonly<Locale[]> {\n        return this.#supportedLocales;\n    }\n\n    get timezone(): RestamperWithTimezone['tz']['current'] {\n        return this.#restamp.tz.current;\n    }\n\n    set timezone(timezone: string | undefined | null) {\n        this.#restamp.tz = timezone;\n    }\n\n    #refreshTranslations(customTranslations?: CustomTranslations) {\n        if (isUndefined(this.#markRefreshAsDone)) {\n            this.#ready = new Promise<void>(resolve => {\n                this.#markRefreshAsDone = () => {\n                    resolve(this.#currentRefresh);\n                    this.#currentRefresh = this.#markRefreshAsDone = undefined;\n                };\n            });\n        }\n\n        const currentRefreshDone = () => {\n            if (this.#currentRefresh === currentRefresh) this.#markRefreshAsDone?.();\n        };\n\n        const currentRefresh = (this.#currentRefresh = (async () => {\n            this.#translations = await this.#translationsLoader.load(this.#fetchTranslationFromCdnPromise, customTranslations);\n            this.#locale = this.#translationsLoader.locale;\n            this.#supportedLocales = Object.freeze(this.#translationsLoader.supportedLocales);\n            this.#customTranslations = customTranslations;\n            this.#languageCode = toTwoLetterCode(this.#locale);\n            this.#refreshWatchlist.requestNotification();\n        })());\n\n        currentRefresh.then(currentRefreshDone).catch(reason => {\n            currentRefreshDone();\n            // handle current refresh promise rejection\n            // throw reason;\n            console.error(reason);\n        });\n    }\n\n    /**\n     * Returns a translated string from a key in the current {@link Localization.locale}\n     * @param key - Translation key\n     * @param options - Translation options\n     * @returns Translated string\n     */\n    get(key: TranslationKey, options?: TranslationOptions): string {\n        const customTranslations = this.#customTranslations?.[this.#locale];\n        const initialSwapKey = this.#keySwapConfig[key];\n\n        // Check if there's a mapped old key in swapConfig and if user provided custom translation with old key\n        if (customTranslations && initialSwapKey && !Array.isArray(initialSwapKey) && initialSwapKey !== key) {\n            let currentKey: string = key;\n            const keyChain: string[] = [];\n            const visitedKeys = new Set<string>();\n\n            while (true) {\n                // Cycle detected, stop lookup\n                if (visitedKeys.has(currentKey)) break;\n\n                visitedKeys.add(currentKey);\n                keyChain.push(currentKey);\n\n                const nextSwapKey = this.#keySwapConfig[currentKey];\n\n                // Stop if no mapping, or array (composite key)\n                if (!nextSwapKey || Array.isArray(nextSwapKey)) break;\n\n                currentKey = nextSwapKey;\n            }\n\n            // Check translations in order (Newest -> Oldest)\n            for (let i = 0; i < keyChain.length; i++) {\n                const translationKey = keyChain[i]!;\n                const translation = getTranslation(customTranslations, translationKey, options);\n\n                if (!isNull(translation)) {\n                    if (translationKey !== key) {\n                        if (!this.#warnedDeprecatedKeys.has(translationKey)) {\n                            console.warn(\n                                `[Adyen Platform Experience Web] Deprecated translation key detected: \"${translationKey}\". ` +\n                                    `Please update to use the new key: \"${key}\". ` +\n                                    `This backward compatibility will be removed in a future version.`\n                            );\n                            this.#warnedDeprecatedKeys.add(translationKey);\n                        }\n\n                        // Path compression (for shorter subsequent lookups)\n                        if (i > 1) this.#keySwapConfig[key] = translationKey;\n                    }\n\n                    return translation;\n                }\n            }\n        }\n\n        // Get translation normally (this includes custom translations with new key + default translations)\n        const translation = getTranslation(this.#translations, key, options);\n        return isNull(translation) ? key : translation;\n    }\n\n    /**\n     * Returns a boolean that checks if the translation key exists in the current {@link Localization.locale}\n     * @param key - Translation key\n     * @param options - Translation options\n     * @returns boolean\n     */\n    has(key: string, options?: TranslationOptions): key is TranslationKey {\n        const translation = getTranslation(this.#translations, key, options);\n        return !!translation;\n    }\n\n    /**\n     * Returns a localized string for an amount\n     * @param amount - Amount to be converted\n     * @param currencyCode - Currency code of the amount\n     * @param options - Options for String.prototype.toLocaleString\n     */\n    amount(amount: number, currencyCode: string, options?: Record<string, any>): string {\n        const { hideCurrency, ...restOfOptions } = options || {};\n        const localisedAmount = getLocalisedAmount(amount, this.#locale, currencyCode, hideCurrency, {\n            ...restOfOptions,\n            currencyDisplay: 'symbol',\n            signDisplay: 'never',\n        });\n\n        return amount < 0 ? `- ${localisedAmount}` : localisedAmount;\n    }\n\n    /**\n     * Returns a localized string for a date\n     * @param date - Date to be localized\n     * @param options - Options for {@link Date.toLocaleDateString}\n     */\n    date(date: number | string | Date, options: Intl.DateTimeFormatOptions = {}) {\n        const dateOptions = { ...DEFAULT_DATETIME_FORMAT, timeZone: this.#restamp.tz.current, ...options };\n        return new Date(date).toLocaleDateString(this.#locale, dateOptions);\n    }\n\n    /**\n     * Returns a localized string for a full date\n     * @param date - Date to be localized\n     */\n    fullDate(date: number | string | Date) {\n        return this.date(date, {\n            month: 'short',\n            hour: '2-digit',\n            minute: '2-digit',\n            second: '2-digit',\n            hour12: false,\n        });\n    }\n}\n","export interface AssetOptions {\n    mainFolder?: string;\n    extension?: string;\n    name?: string;\n    subFolder?: string;\n    type?: string;\n}\n\nconst getLocalAsset = ({ name, extension, subFolder, mainFolder }: AssetOptions) => {\n    const path = `${mainFolder ? `${mainFolder}/` : ''}${subFolder ? `${subFolder}/` : ''}${name}${extension ? `.${extension}` : ''}`;\n    return `src/assets/${path}`.replace(/\\/+/, '/');\n};\n\nexport class Assets {\n    private readonly resourceContext: string;\n\n    constructor(cdnContext: string) {\n        this.resourceContext = cdnContext;\n    }\n\n    private returnAsset = ({ name, resourceUrl, mainFolder, extension, subFolder }: AssetOptions & { resourceUrl: string }): string =>\n        `${resourceUrl}/${mainFolder ? `${mainFolder}/` : ''}${subFolder ? `${subFolder}/` : ''}${name}${extension ? `.${extension}` : ''}`;\n\n    private getAssetUrl = (props: AssetOptions): string => {\n        return process.env.VITE_LOCAL_ASSETS ? getLocalAsset({ ...props }) : this.returnAsset({ resourceUrl: this.resourceContext, ...props });\n    };\n\n    public getAsset(defaultProps: AssetOptions = {}) {\n        return (props: AssetOptions) => this.getAssetUrl({ ...defaultProps, ...props });\n    }\n}\n","import Localization from '../../Localization';\nimport currentTranslations from '../../../assets/translations/en-US.json' with { type: 'json' };\nimport { SUPPORTED_LOCALES } from '../../Localization/constants/localization';\nimport { encodeAnalyticsEvent, getEventTime } from './utils';\n\nexport const oldTranslationKeys = new Set([\n    'account',\n    'accountBalance',\n    'accountDescription',\n    'accountID',\n    'additions',\n    'adjustments',\n    'amount',\n    'and',\n    'apply',\n    'back',\n    'balanceAccount',\n    'balanceAccountId',\n    'balanceAccounts.all',\n    'Booked',\n    'button.clearAll',\n    'calendar.controls',\n    'calendar.nextMonth',\n    'calendar.previousMonth',\n    'calendar.timezone',\n    'capital.accountIsInactive',\n    'capital.actionNeeded',\n    'capital.annualPercentageRate',\n    'capital.annualPercentageRateIsTheCostOfBorrowingForALoan',\n    'capital.bankAccountDetails',\n    'capital.bankAccountIban',\n    'capital.bankAccountNumber',\n    'capital.bankCountryOrRegion',\n    'capital.bankRoutingNumber',\n    'capital.bankSortCode',\n    'capital.businessFinancing',\n    'capital.businessFinancingOffer',\n    'capital.businessFinancingSummary',\n    'capital.closed',\n    'capital.couldNotContinueWithTheOffer',\n    'capital.couldNotLoadFinancialOffers',\n    'capital.dailyRepaymentRate',\n    'capital.daysAndDaysLeft',\n    'capital.expectedRepaymentPeriod',\n    'capital.failed',\n    'capital.fees',\n    'capital.fullyRepaid',\n    'capital.goToTermsAndConditions',\n    'capital.grantID',\n    'capital.howMuchMoneyDoYouNeed',\n    'capital.inProgress',\n    'capital.legalSubtitleAU',\n    'capital.legalSubtitleCA',\n    'capital.legalSubtitleEU',\n    'capital.legalSubtitleGB',\n    'capital.legalSubtitleUS',\n    'capital.maximumRepaymentPeriod',\n    'capital.minimumRepaymentToRepayTheFinancingOnTime',\n    'capital.needSomeExtraMoney',\n    'capital.offerLegalNoticeDescriptionUS',\n    'capital.offerLegalNoticeTitleUS',\n    'capital.oneMonth',\n    'capital.pending',\n    'capital.primaryAccount',\n    'capital.remaining',\n    'capital.remainingAmount',\n    'capital.remainingFees',\n    'capital.repaid',\n    'capital.repaidAmount',\n    'capital.repaidFees',\n    'capital.repaymentBalanceInfo',\n    'capital.repaymentThreshold',\n    'capital.requestedFunds',\n    'capital.requestFunds',\n    'capital.requesting',\n    'capital.reviewOffer',\n    'capital.revoked',\n    'capital.seeNewOffer',\n    'capital.seeOptions',\n    'capital.sendRepayment',\n    'capital.sendRepaymentNotice',\n    'capital.sendRepaymentSubtitle',\n    'capital.signTermsAndConditionsToReceiveFunds',\n    'capital.signTheTermsToReceiveYourFunds',\n    'capital.submitInformation',\n    'capital.termEnds',\n    'capital.thereIsNoPrimaryAccountConfigured',\n    'capital.thisOfferExpiresOn',\n    'capital.totalFees',\n    'capital.totalRepaymentAmount',\n    'capital.unsupportedRegionDescription',\n    'capital.unsupportedRegionTitle',\n    'capital.weCouldNotContinueWithTheOffer',\n    'capital.weCouldNotContinueWithTheOfferContactSupportForHelp',\n    'capital.weCouldNotLoadFinancialOffers',\n    'capital.weCouldNotProcessThisRequestTryAgain',\n    'capital.weNeedABitMoreInformationToProcessYourFundsPleaseCompleteTheseActions',\n    'capital.weNeedABitMoreInformationToProcessYourFundsPleaseCompleteThisAction',\n    'capital.weNeedABitMoreInformationToProcessYourFundsPleaseCompleteThisActionBy',\n    'capital.weReceivedYourRequestAndWeAreWorkingOnItNowCheckBackSoon',\n    'capital.writtenOff',\n    'capital.xDays',\n    'capital.xMonths',\n    'capital.xPercent',\n    'capital.youAcceptedButThenReturnedTheseFunds',\n    'capital.youAcceptedTheseFundsButDidNotRepayThem',\n    'capital.youAreRequestingFundingOf',\n    'capital.youHaveBeenPrequalifiedForBusinessFinancingUpToX.part1',\n    'capital.youHaveBeenPrequalifiedForBusinessFinancingUpToX.part2',\n    'capital.yourRequestedFundsWere',\n    'capital.youShouldGetTheFundsWithinOneBusinessDay',\n    'capital.youWillNeedToRepayAMinimumOfXEveryXDaysToPayOffTheFunds',\n    'capital.youWillSoonQualifyForAFinancialOffer',\n    'capture',\n    'category',\n    'chargeback',\n    'closeIconLabel',\n    'contactSupport',\n    'contactSupportForHelp',\n    'contactSupportForHelpAndShareErrorCode',\n    'copied',\n    'copy',\n    'correction',\n    'currency',\n    'date',\n    'dateRange',\n    'default',\n    'description',\n    'dismiss',\n    'disputes.accept',\n    'disputes.accept.accepted',\n    'disputes.accept.chargeback',\n    'disputes.accept.disputeAccepted',\n    'disputes.accept.disputeDisclaimer',\n    'disputes.accept.iAgree',\n    'disputes.accept.requestForInformation',\n    'disputes.accept.requestForInformationAccepted',\n    'disputes.accept.requestForInformationDisclaimer',\n    'disputes.acceptedOn',\n    'disputes.account',\n    'disputes.alert.autoDefended',\n    'disputes.alert.notDefendable',\n    'disputes.alert.notDefendedExpired',\n    'disputes.alert.notDefendedLost',\n    'disputes.alert.responseDeadline',\n    'disputes.contactSupport.toDefendDispute',\n    'disputes.contactSupport.toDefendRequestForInformation',\n    'disputes.contactSupport.toResolveNotificationOfFraud',\n    'disputes.currency',\n    'disputes.defend.chargeback',\n    'disputes.defend.chargebackFeeInformation',\n    'disputes.defend.continue',\n    'disputes.defend.defended',\n    'disputes.defend.evidenceSubmitted',\n    'disputes.defend.selectDefenseReason',\n    'disputes.defend.somethingWentWrong',\n    'disputes.defend.submit',\n    'disputes.defend.submitSuccessfulInformation',\n    'disputes.defend.uploadDocumentsInformation',\n    'disputes.defendedOn',\n    'disputes.defenseDocument.acquirerRepresentmentForm',\n    'disputes.defenseDocument.acquirerRepresentmentFormAutomaticallyGenerated',\n    'disputes.defenseDocument.acquirerRetrievalFulfilmentForm',\n    'disputes.defenseDocument.acquirerRetrievalFulfilmentFormAutomaticallyGenerated',\n    'disputes.defenseDocument.additionalInformation',\n    'disputes.defenseDocument.additionalTransactions',\n    'disputes.defenseDocument.additionalTransactionsConnectedWithDisputedFlight',\n    'disputes.defenseDocument.alternativeDefenseMaterial',\n    'disputes.defenseDocument.amexFaxCover',\n    'disputes.defenseDocument.appropriateExplanation',\n    'disputes.defenseDocument.appropriateExplanationAndDocTwoSeparateTransactions',\n    'disputes.defenseDocument.authorizationNotObtained',\n    'disputes.defenseDocument.authorizationNotObtainedHelp',\n    'disputes.defenseDocument.autoGeneratedDocRetrievalRequestFulfilled',\n    'disputes.defenseDocument.automaticallyGeneratedTransactionDetails',\n    'disputes.defenseDocument.avsDocumentation',\n    'disputes.defenseDocument.cancelledRecurringBilling',\n    'disputes.defenseDocument.cardholderAgreedToAmountRange',\n    'disputes.defenseDocument.cardholderResponsibleForAddendumTransaction',\n    'disputes.defenseDocument.cardholderResponsibleForDisputedAmount',\n    'disputes.defenseDocument.cardRecoveryBulletinOrExceptionFile',\n    'disputes.defenseDocument.cardRecoveryBulletinOrExceptionFileHelp',\n    'disputes.defenseDocument.chargebackRemediedOrInvalid',\n    'disputes.defenseDocument.chargeToWrongAccountNumber',\n    'disputes.defenseDocument.chargeToWrongAccountNumberHelp',\n    'disputes.defenseDocument.clearingText',\n    'disputes.defenseDocument.compellingEvidence',\n    'disputes.defenseDocument.copyOfInvoice',\n    'disputes.defenseDocument.copyOfInvoiceOrOtherRelevantTransactionDetails',\n    'disputes.defenseDocument.CopyOfSalesDraftDetails',\n    'disputes.defenseDocument.CopyOfSalesDraftTitle',\n    'disputes.defenseDocument.copyOfTid',\n    'disputes.defenseDocument.coverPageForAmexDisputes',\n    'disputes.defenseDocument.creditNotProcessed',\n    'disputes.defenseDocument.creditNotProcessedHelp',\n    'disputes.defenseDocument.creditNotProcessedReason',\n    'disputes.defenseDocument.creditsOfMilesShowingConnectionToCardholder',\n    'disputes.defenseDocument.customerWrittenConfirmation',\n    'disputes.defenseDocument.defenseMaterial',\n    'disputes.defenseDocument.deffectiveMerchandise',\n    'disputes.defenseDocument.deffectiveMerchandiseHelp',\n    'disputes.defenseDocument.deliveryOfFlightTicketAtAddress',\n    'disputes.defenseDocument.descriptionOfDisputeReason',\n    'disputes.defenseDocument.descriptionOfMerchandiseOrServices',\n    'disputes.defenseDocument.differentSignature',\n    'disputes.defenseDocument.differentSignatureHelp',\n    'disputes.defenseDocument.disclosureAtPointOfInteraction',\n    'disputes.defenseDocument.docAllOfFollowing',\n    'disputes.defenseDocument.docCardholderIssuedPaperAirlineTickets',\n    'disputes.defenseDocument.docChargebackCodeNotApplicable',\n    'disputes.defenseDocument.docCorrectCurrency',\n    'disputes.defenseDocument.docIdentifyTransaction',\n    'disputes.defenseDocument.docMerchandiseNotCounterfeit',\n    'disputes.defenseDocument.docProvingCardHolderParticipated',\n    'disputes.defenseDocument.docRemediesChargeback',\n    'disputes.defenseDocument.docsTwoTransactionsWithSameShopper',\n    'disputes.defenseDocument.docTermsOfSaleNotMisrepresented',\n    'disputes.defenseDocument.docTransactionOccurredOnPos',\n    'disputes.defenseDocument.docTwoDifferentTransactions',\n    'disputes.defenseDocument.documentationOfPositiveAvsResponseXOrY',\n    'disputes.defenseDocument.documentCanBeCreditReasonDue',\n    'disputes.defenseDocument.documentCanBeProofOfDelivery',\n    'disputes.defenseDocument.documentCanBeSubscriptionAgreement',\n    'disputes.defenseDocument.documentCanBetUrlReturnPolicy',\n    'disputes.defenseDocument.documentContainingImportantShipmentData',\n    'disputes.defenseDocument.documentShipmentDate',\n    'disputes.defenseDocument.docViaFraudReporter',\n    'disputes.defenseDocument.duplicateProcessing',\n    'disputes.defenseDocument.duplicateProcessingHelp',\n    'disputes.defenseDocument.evidenceCardHolderParticipation',\n    'disputes.defenseDocument.evidenceProofingParticipationOfCardholder',\n    'disputes.defenseDocument.evidenceTransactionWasRecurring',\n    'disputes.defenseDocument.expiredCard',\n    'disputes.defenseDocument.expiredCardHelp',\n    'disputes.defenseDocument.explanation',\n    'disputes.defenseDocument.explanationWhyCancellationCodeInvalid',\n    'disputes.defenseDocument.falseTransaction',\n    'disputes.defenseDocument.firstChargebackNumberAndDate',\n    'disputes.defenseDocument.flightManifest',\n    'disputes.defenseDocument.flightManifestShowingCardholderName',\n    'disputes.defenseDocument.flightTicket',\n    'disputes.defenseDocument.flightTicketUsed',\n    'disputes.defenseDocument.flightTicketWithCardholderName',\n    'disputes.defenseDocument.flightTookPlace',\n    'disputes.defenseDocument.frequentFlyerInformation',\n    'disputes.defenseDocument.ifDelayedProofShowingMerchantAbleToProvideServices',\n    'disputes.defenseDocument.incorrectAmount',\n    'disputes.defenseDocument.latePresentment',\n    'disputes.defenseDocument.latePresentmentHelp',\n    'disputes.defenseDocument.latestRecurringTransactions',\n    'disputes.defenseDocument.memberMessageText',\n    'disputes.defenseDocument.memberMessageTextSentToSchemes',\n    'disputes.defenseDocument.merchandiseDescription',\n    'disputes.defenseDocument.merchandiseNotAsDescribed',\n    'disputes.defenseDocument.merchandiseNotReceived',\n    'disputes.defenseDocument.merchandiseNotReceivedHelp',\n    'disputes.defenseDocument.merchandiseSentToAvsConfirmedBillingAddress',\n    'disputes.defenseDocument.merchantFraudPerformanceProgram',\n    'disputes.defenseDocument.merchantFraudPerformanceProgramHelp',\n    'disputes.defenseDocument.merchantObtainedCardAtTimeReservationMade',\n    'disputes.defenseDocument.merchantWrittenRebuttal',\n    'disputes.defenseDocument.missingSignature',\n    'disputes.defenseDocument.missingSignatureHelp',\n    'disputes.defenseDocument.moreThanOneTransactionProcessed',\n    'disputes.defenseDocument.mpiData',\n    'disputes.defenseDocument.nonMatchingAccountNumber',\n    'disputes.defenseDocument.nonMatchingAccountNumberHelp',\n    'disputes.defenseDocument.noNotification',\n    'disputes.defenseDocument.numberAndDateOfOriginalChargeback',\n    'disputes.defenseDocument.originalAmount',\n    'disputes.defenseDocument.originalAmountIfDisputedRepresentsPartialShipment',\n    'disputes.defenseDocument.other',\n    'disputes.defenseDocument.otherHelp',\n    'disputes.defenseDocument.paidByOtherMeansThanJCBCard',\n    'disputes.defenseDocument.paidByOtherMeansThanJCBCardHelp',\n    'disputes.defenseDocument.paperAirlineTicket',\n    'disputes.defenseDocument.passengerId',\n    'disputes.defenseDocument.passengerIdLinkedToCardholder',\n    'disputes.defenseDocument.previousTransactionsNotDisputed',\n    'disputes.defenseDocument.printedSignedReceipt',\n    'disputes.defenseDocument.processingError',\n    'disputes.defenseDocument.processingErrorHelp',\n    'disputes.defenseDocument.proofAirlineTicketsWereUsed',\n    'disputes.defenseDocument.proofCardAndCardholderSignature',\n    'disputes.defenseDocument.proofCardPresence',\n    'disputes.defenseDocument.proofFlightTookPlace',\n    'disputes.defenseDocument.proofGoodsServicesWereProvided',\n    'disputes.defenseDocument.proofGoodsWereDeliveredAsDescribed',\n    'disputes.defenseDocument.proofMerchantHadNotReceivedPreviousChargeback',\n    'disputes.defenseDocument.proofMerchantHadNotReceivedPreviousChargebackAutoGenerated',\n    'disputes.defenseDocument.proofMerchantNotNotifiedOfCancellation',\n    'disputes.defenseDocument.proofOfAccountTakeover',\n    'disputes.defenseDocument.proofOfAddendum',\n    'disputes.defenseDocument.proofOfDelayedDelivery',\n    'disputes.defenseDocument.proofOfFulfillment',\n    'disputes.defenseDocument.proofOfInvalidChargeback',\n    'disputes.defenseDocument.proofOfNoCancellation',\n    'disputes.defenseDocument.proofOfNoChargebackReceived',\n    'disputes.defenseDocument.proofOfNoShow',\n    'disputes.defenseDocument.proofOfRecurringTransaction',\n    'disputes.defenseDocument.proofOfRefund',\n    'disputes.defenseDocument.proofOfRetailSale',\n    'disputes.defenseDocument.proofProvidedMerchandise',\n    'disputes.defenseDocument.proofRecurringContractNotCancelledAtTimeOfSettlement',\n    'disputes.defenseDocument.proofRenewedMembership',\n    'disputes.defenseDocument.proofShowingCardholderRenewedMembership',\n    'disputes.defenseDocument.proofShowingTrackingInformation',\n    'disputes.defenseDocument.proofValidIncreaseOfAmount',\n    'disputes.defenseDocument.provideRefundId',\n    'disputes.defenseDocument.provingTransactionResultedFromAccountTakeover',\n    'disputes.defenseDocument.reasonableAmount',\n    'disputes.defenseDocument.reasonForInvalidation',\n    'disputes.defenseDocument.reasonForInvalidationOfChargeback',\n    'disputes.defenseDocument.rebuttalCancellationNotAccepted',\n    'disputes.defenseDocument.rebuttalGivenToCardholder',\n    'disputes.defenseDocument.rebuttalStatingCancellationNotAccepted',\n    'disputes.defenseDocument.receiptOfFlightTicketAtBillingAddress',\n    'disputes.defenseDocument.receiptOrOther',\n    'disputes.defenseDocument.resultsOfMpiCalls',\n    'disputes.defenseDocument.retrievalRequestFulfilled',\n    'disputes.defenseDocument.retrievalRequestNotHonored',\n    'disputes.defenseDocument.retrievalRequestNotHonoredHelp',\n    'disputes.defenseDocument.serviceNotRendered',\n    'disputes.defenseDocument.serviceNotRenderedHelp',\n    'disputes.defenseDocument.shipmentDocumentation',\n    'disputes.defenseDocument.shipToAddress',\n    'disputes.defenseDocument.shipToAddressIfApplicable',\n    'disputes.defenseDocument.signatureOrChipPinEvidence',\n    'disputes.defenseDocument.signedTerminalReceipt',\n    'disputes.defenseDocument.SplitSales',\n    'disputes.defenseDocument.SplitSalesHelp',\n    'disputes.defenseDocument.statementMerchantDidNotReceiveGoods',\n    'disputes.defenseDocument.SupplementalDocumentsDetails',\n    'disputes.defenseDocument.SupplementalDocumentsTitle',\n    'disputes.defenseDocument.TEDocumentDetails',\n    'disputes.defenseDocument.TEDocumentTitle',\n    'disputes.defenseDocument.transactionAfterReservationCancelled',\n    'disputes.defenseDocument.transactionAfterReservationCancelledHelp',\n    'disputes.defenseDocument.transactionNotRecognizedChipLiabilityShift',\n    'disputes.defenseDocument.transactionNotRecognizedChipLiabilityShiftHelp',\n    'disputes.defenseDocument.transactionNotRecognizedContactlessAndCardNotPresented',\n    'disputes.defenseDocument.transactionNotRecognizedContactlessAndCardNotPresentedHelp',\n    'disputes.defenseDocument.unauthorisedReason',\n    'disputes.defenseDocument.uploadListOfRefundIds',\n    'disputes.defenseDocument.writtenCorrespondenceExchanged',\n    'disputes.defenseDocument.writtenRebutalGoodsRepairedOrReplaced',\n    'disputes.defenseReason',\n    'disputes.defenseReason.3dSecureFullyAuthenticatedTransaction',\n    'disputes.defenseReason.3dSecureLiabilityShiftNotFullyAuthenticated',\n    'disputes.defenseReason.accountNumberNotListedInExceptions',\n    'disputes.defenseReason.accountNumberNotListedInExceptionsFor60Days',\n    'disputes.defenseReason.accountTakeover',\n    'disputes.defenseReason.acquirerDefendChargebackIfIssuerRequested',\n    'disputes.defenseReason.acquirerProvidesCorrectDateWithinTimeLimit',\n    'disputes.defenseReason.additionalInformation',\n    'disputes.defenseReason.addressMerchandiseSentAvsConfirmed',\n    'disputes.defenseReason.addressVerificationService',\n    'disputes.defenseReason.addressVerificationServiceAdditionalInformation',\n    'disputes.defenseReason.airlineCompellingEvidence',\n    'disputes.defenseReason.airlineFlightProvided',\n    'disputes.defenseReason.atmDispute',\n    'disputes.defenseReason.authorisationReceivedForAmount',\n    'disputes.defenseReason.authorisedOnline',\n    'disputes.defenseReason.autoGeneratedRecurringTransactionDetails',\n    'disputes.defenseReason.autoResponseSentToIssuer',\n    'disputes.defenseReason.autoResponseToRfi',\n    'disputes.defenseReason.buyerExceededWindowToFileReturn',\n    'disputes.defenseReason.cancellationCodeWasInvalidAsShownByExplanationProvided',\n    'disputes.defenseReason.cancellationContractFailed',\n    'disputes.defenseReason.cancellationOrReturns',\n    'disputes.defenseReason.cardAndSignatureForCorporateFleetCardTransaction',\n    'disputes.defenseReason.cardholderAgreedToAmountAsReasonable',\n    'disputes.defenseReason.cardholderBilledForSeparateAdditionalAmount',\n    'disputes.defenseReason.cardholderCancelledRecurringServiceButRenewedLater',\n    'disputes.defenseReason.cardholderDidNotMeetCancellationTerms',\n    'disputes.defenseReason.cardholderNotifiedBeforeRecurringTransaction',\n    'disputes.defenseReason.cardholderNotifiedButNoReply',\n    'disputes.defenseReason.cardholderParticipated',\n    'disputes.defenseReason.cardholderResponsibleForAddendumTransaction',\n    'disputes.defenseReason.cardholderResponsibleForDisputedAmount',\n    'disputes.defenseReason.cardholderShouldHaveReturnedGoods',\n    'disputes.defenseReason.cardPresenceProof',\n    'disputes.defenseReason.cardPresentAndChipUsedNoPinProvided',\n    'disputes.defenseReason.cardWithSignatureNotProcessedMastercardNetwork',\n    'disputes.defenseReason.cbCodeNotApplicable',\n    'disputes.defenseReason.chargebackBundlingInvalid',\n    'disputes.defenseReason.chargebackCodeNA3dSecureNotOffered',\n    'disputes.defenseReason.chargebackInvalidCorrectAmountAndCurrencyProvided',\n    'disputes.defenseReason.chargebackReceivedAfterMastercardTimeLimit',\n    'disputes.defenseReason.chipLiabilityShift',\n    'disputes.defenseReason.chipTransaction',\n    'disputes.defenseReason.chipTransactionReportedSAFE',\n    'disputes.defenseReason.claimNotJustifiedSinceTransactionNotChargebacked',\n    'disputes.defenseReason.compellingEvidence',\n    'disputes.defenseReason.compellingEvidenceRecurringTransactions',\n    'disputes.defenseReason.correctTransactionAmount',\n    'disputes.defenseReason.correctTransactionCurrency',\n    'disputes.defenseReason.correctTransactionDateProvided',\n    'disputes.defenseReason.creditOrCancellationPolicyDisclosed',\n    'disputes.defenseReason.creditOrCancellationPolicyDisclosedToCardholder',\n    'disputes.defenseReason.creditPreviouslyIssued',\n    'disputes.defenseReason.cvc2ValidationProgram',\n    'disputes.defenseReason.de22DontMatchInFaceToFaceTransaction',\n    'disputes.defenseReason.defenseReasonIfProblemsWithScans',\n    'disputes.defenseReason.deficiencyCorrected',\n    'disputes.defenseReason.delayInSubmittingTransaction',\n    'disputes.defenseReason.disputedSurcharge',\n    'disputes.defenseReason.disputedSurchargeIncorrectCalculation',\n    'disputes.defenseReason.docToProveNoPaymentByOtherMean',\n    'disputes.defenseReason.documentationIncreasedDebitCardholderAccount',\n    'disputes.defenseReason.documentationReceivedWasIllegible',\n    'disputes.defenseReason.documentsSentToFulfillRetrievalRequest',\n    'disputes.defenseReason.duplicateChargeback',\n    'disputes.defenseReason.emergencyPaymentAuthorizationService',\n    'disputes.defenseReason.emvDeviceNonEmvCard',\n    'disputes.defenseReason.emvLiabilityShift',\n    'disputes.defenseReason.evidenceCardholderAuthorizedTransaction',\n    'disputes.defenseReason.evidenceGoodsNotDamaged',\n    'disputes.defenseReason.evidenceServicesProvidedAndReceivedWrittenCorrespondence',\n    'disputes.defenseReason.evidenceThatCardholderParticipated',\n    'disputes.defenseReason.faceToFaceTransactionNoConflictingInformation',\n    'disputes.defenseReason.faceToFaceTransactionWithConflictingInformation',\n    'disputes.defenseReason.fallbackDefenseReasonCode',\n    'disputes.defenseReason.firstChargebackCodeNotApplicable',\n    'disputes.defenseReason.firstChargebackDoesNotMeetPrerequisites',\n    'disputes.defenseReason.firstChargebackInvalid',\n    'disputes.defenseReason.formatCbmmddyyArdXxxExpected',\n    'disputes.defenseReason.formatMultipleTransactionsNnnExpected',\n    'disputes.defenseReason.formatRpcsMmddyyExpected',\n    'disputes.defenseReason.fraudEvidence',\n    'disputes.defenseReason.goodsNotReturned',\n    'disputes.defenseReason.goodsOrServicesProvided',\n    'disputes.defenseReason.goodsRepairedOrReplaced',\n    'disputes.defenseReason.goodsWereAsDescribed',\n    'disputes.defenseReason.goodsWereRepairedOrReplaced',\n    'disputes.defenseReason.identifiedAddendum',\n    'disputes.defenseReason.increasedTransactionAmount',\n    'disputes.defenseReason.intraregionalTransactionReportedSAFE',\n    'disputes.defenseReason.invalidAcquirerReferenceData',\n    'disputes.defenseReason.invalidCancellationCode',\n    'disputes.defenseReason.invalidChargeback',\n    'disputes.defenseReason.invalidChargebackBasedOnMcc',\n    'disputes.defenseReason.invalidChargebackReasonCode',\n    'disputes.defenseReason.invalidMessageText',\n    'disputes.defenseReason.invalidReferenceDataDocumentationNotRequired',\n    'disputes.defenseReason.issuerDidNotIncludeTwoSetsOfArns',\n    'disputes.defenseReason.issuerDidNotProvideRequiredDocumentation',\n    'disputes.defenseReason.issuerHasInitiatedTooManyFraudulentDisputes',\n    'disputes.defenseReason.issuerProcessedChargebackMoreThanOnce',\n    'disputes.defenseReason.justifiedDelayedPresentment',\n    'disputes.defenseReason.liabilityShiftFullAuthenticated',\n    'disputes.defenseReason.manyFraudulentChargebacks',\n    'disputes.defenseReason.membershipRenewedAfterCancellation',\n    'disputes.defenseReason.merchandiseNotReturned',\n    'disputes.defenseReason.merchandiseWasNotCounterfeit',\n    'disputes.defenseReason.merchandiseWasReceivedByShopper',\n    'disputes.defenseReason.merchantCanProvideAdditionalCompellingEvidence',\n    'disputes.defenseReason.merchantCanProvideAdditionalInformation',\n    'disputes.defenseReason.merchantCantReceiveThisChargebackBasedOnTheirMcc',\n    'disputes.defenseReason.merchantNotNotifiedOfCancellation',\n    'disputes.defenseReason.merchantProvidedServicesToCardholderProof',\n    'disputes.defenseReason.merchantProvideMissingDocuments',\n    'disputes.defenseReason.noCreditSlip',\n    'disputes.defenseReason.noPriorChargebackReceived',\n    'disputes.defenseReason.noShowTransaction',\n    'disputes.defenseReason.not3dSecureTransaction',\n    'disputes.defenseReason.notAgreeWithRefund',\n    'disputes.defenseReason.notPosTransaction',\n    'disputes.defenseReason.parcelServiceReceipt',\n    'disputes.defenseReason.pastChargebackTimeLimit',\n    'disputes.defenseReason.paymentByOtherMeans',\n    'disputes.defenseReason.paypassAmountBelowProtectionAmount',\n    'disputes.defenseReason.paypassTransaction',\n    'disputes.defenseReason.pinForOneOrBothTransactions',\n    'disputes.defenseReason.pinTransaction',\n    'disputes.defenseReason.pinUsedToVerifyCardholder',\n    'disputes.defenseReason.posTransactionAndSignedTerminalReceiptAvailable',\n    'disputes.defenseReason.posTransactionCardholderWasPresentProof',\n    'disputes.defenseReason.prevChargedbackTwoTransactionsWithSameAccount',\n    'disputes.defenseReason.previousChargebackCancellingRecurringContract',\n    'disputes.defenseReason.proofCardholderReceivedMerchandise',\n    'disputes.defenseReason.proofDeficiencyCorrected',\n    'disputes.defenseReason.proofOfCardPresenceAvailableNotAuthorisedMastercardNetwork',\n    'disputes.defenseReason.proofOfCardPresenceMastercardCorporateFleet',\n    'disputes.defenseReason.provideInformationForCollectionOrFraudCase',\n    'disputes.defenseReason.provideMissingInformation',\n    'disputes.defenseReason.provideTransactionalInformation',\n    'disputes.defenseReason.provideTransactionalInfoTravelDetails',\n    'disputes.defenseReason.purchaseProperlyPosted',\n    'disputes.defenseReason.qpsTransaction',\n    'disputes.defenseReason.qpsTransactionWithAmountLessThanChargebackProtectionAmount',\n    'disputes.defenseReason.receiptWithItemsBilledBecauseOfLossTheftDamages',\n    'disputes.defenseReason.recurringTransactionCompellingEvidence',\n    'disputes.defenseReason.recurringTransactionCompellingMerchantEvidence',\n    'disputes.defenseReason.reponseToRfi',\n    'disputes.defenseReason.reponseToRfiCardPresent',\n    'disputes.defenseReason.requiredDocumentationNotReceived',\n    'disputes.defenseReason.responseToRfiAirlines',\n    'disputes.defenseReason.responseToRfiCarRental',\n    'disputes.defenseReason.retrievalRequestFulfilled',\n    'disputes.defenseReason.returnNotAccepted',\n    'disputes.defenseReason.scanningError',\n    'disputes.defenseReason.serviceCancelledButMerchantNotNotified',\n    'disputes.defenseReason.serviceNotCancelled',\n    'disputes.defenseReason.serviceNotCancelledEvidence',\n    'disputes.defenseReason.servicesProvidedAfterCancellation',\n    'disputes.defenseReason.servicesProvidedAndUsedAfterCancellation',\n    'disputes.defenseReason.shopperClaimsRefundWasPromisedButNotExecuted',\n    'disputes.defenseReason.shopperUsedAirlineTicket',\n    'disputes.defenseReason.signedImprintedSalesSlipInvoicePosReceipt',\n    'disputes.defenseReason.signedTerminalReceiptAvailable',\n    'disputes.defenseReason.supplyDefenseMaterial',\n    'disputes.defenseReason.surchargeCorrectlyProcessed',\n    'disputes.defenseReason.surchargeIncorrectlyCalculatedByIssuer',\n    'disputes.defenseReason.termsOfSaleWereNotMisrepresented',\n    'disputes.defenseReason.thisReasonIsTechnical',\n    'disputes.defenseReason.timeBetweenAuthorisationAndSettlementWithinTimeLimits',\n    'disputes.defenseReason.transactioAuthorisedEmergencyPaymentAuthorizationService',\n    'disputes.defenseReason.transactionAmountAlreadyRefunded',\n    'disputes.defenseReason.transactionApproved3dSecureAuthenticated',\n    'disputes.defenseReason.transactionBetweenChipLiabilityShiftProgramCustomers',\n    'disputes.defenseReason.transactionFallsCvc2ValidationProgram',\n    'disputes.defenseReason.transactionFromAccountTakeover',\n    'disputes.defenseReason.transactionInformationDocument',\n    'disputes.defenseReason.transactionIssuerApproved3dSecureAuthenticated',\n    'disputes.defenseReason.transactionNotChargebackedAutoDefense',\n    'disputes.defenseReason.transactionNotFully3dSecureAuthenticated',\n    'disputes.defenseReason.transactionNotRecurring',\n    'disputes.defenseReason.transactionNotRecurringTransactionInstallment',\n    'disputes.defenseReason.transactionSettledWithinTimeLimit',\n    'disputes.defenseReason.transactionsInitiatedDueToLossTheftOrDamages',\n    'disputes.defenseReason.transactionWasAuthorised',\n    'disputes.defenseReason.transactionWasAuthorisedOnline',\n    'disputes.defenseReason.transactionWasECommerceGivenChargebackReasonNotApplicable',\n    'disputes.defenseReason.transactionWasInFaceToFaceEnvironment',\n    'disputes.defenseReason.transactionWasProperlyIdentifiedAsInstallmentTransaction',\n    'disputes.defenseReason.transactionWasResultOfGuaranteedReservation',\n    'disputes.defenseReason.twoDifferentTidsNonAtm',\n    'disputes.defenseReason.twoDifferentTidsWithSameCardholderAccount',\n    'disputes.defenseReason.twoDifferentTransactions',\n    'disputes.defenseReason.twoPreviousFraudRelatedChargebacks',\n    'disputes.defenseReason.twoSeparateTransactions',\n    'disputes.defenseReason.unfoundedCardholderDispute',\n    'disputes.defenseReason.unreasonableAmount',\n    'disputes.defenseReason.uploadReturnPolicyDocument',\n    'disputes.defenseReason.useThisDefenseReasonIfApplicable',\n    'disputes.defenseReason.validityOfTransactionChargedExplanation',\n    'disputes.defenseReason.waiverFormAbsolvingMerchantResponsibility',\n    'disputes.disputedAmount',\n    'disputes.disputeManagementTitle',\n    'disputes.disputeReason',\n    'disputes.disputeReference',\n    'disputes.documentRequirements',\n    'disputes.documentRequirements.acceptableFormatAndSize',\n    'disputes.documentRequirements.mustBeInEnglish',\n    'disputes.documentRequirements.recommendedSize',\n    'disputes.empty.noChargebacksFound',\n    'disputes.empty.noDisputesFound',\n    'disputes.empty.noFraudAlertsFound',\n    'disputes.empty.tryDifferentSearchOrCheckAgainLaterForNewChargebacks',\n    'disputes.empty.tryDifferentSearchOrCheckAgainLaterForNewDisputes',\n    'disputes.empty.tryDifferentSearchOrCheckAgainLaterForNewFraudAlerts',\n    'disputes.error.couldNotLoadDisputesOverview',\n    'disputes.error.entityWasNotFound',\n    'disputes.error.entityWasNotFoundDetail',\n    'disputes.error.failedRetry',\n    'disputes.error.weCouldNotLoadYourDispute',\n    'disputes.error.weCouldNotLoadYourDisputes',\n    'disputes.error.weCouldNotProcessTheDisputePleaseTryAgainOrContactSupport',\n    'disputes.evidence',\n    'disputes.expiredOn',\n    'disputes.goBack',\n    'disputes.gridCell.dueDate',\n    'disputes.inputError.fileIsOverSizeLimitForTypeChooseASmallerFileAndTryAgain',\n    'disputes.inputError.somethingWentWrongPleaseCheckYourDocuments',\n    'disputes.inputError.uploadAtLeastOneSupportingDocumentToContinue',\n    'disputes.issuerComment.showLess',\n    'disputes.issuerComment.showMore',\n    'disputes.issuerComment.title',\n    'disputes.merchantReference',\n    'disputes.openedOn',\n    'disputes.paymentMethod',\n    'disputes.paymentReference',\n    'disputes.reason',\n    'disputes.reasonCategory.adjustment',\n    'disputes.reasonCategory.authorisationError',\n    'disputes.reasonCategory.consumerDispute',\n    'disputes.reasonCategory.fraud',\n    'disputes.reasonCategory.other',\n    'disputes.reasonCategory.processingError',\n    'disputes.reasonCategory.requestForInformation',\n    'disputes.reasonCode',\n    'disputes.respondBy',\n    'disputes.showDisputeDetails',\n    'disputes.status',\n    'disputes.status.accepted',\n    'disputes.status.expired',\n    'disputes.status.lost',\n    'disputes.status.pending',\n    'disputes.status.responded',\n    'disputes.status.undefended',\n    'disputes.status.unresponded',\n    'disputes.status.won',\n    'disputes.statusGroup.chargebacks',\n    'disputes.statusGroup.fraudAlerts',\n    'disputes.statusGroup.ongoingAndClosed',\n    'disputes.title',\n    'disputes.totalPaymentAmount',\n    'disputes.type.chargeback',\n    'disputes.type.notificationOfFraud',\n    'disputes.type.requestForInformation',\n    'disputes.uploadDocuments.addOptionalDocument',\n    'disputes.uploadDocuments.extraRequiredDocument',\n    'disputes.uploadDocuments.optionalDocument',\n    'disputes.uploadDocuments.selectDocumentType',\n    'disputes.uploadDocuments.selectOneOfTheRequiredOptions',\n    'download',\n    'downloading',\n    'email',\n    'entityWasNotFound',\n    'entityWasNotFoundDetail',\n    'error.pleaseTryAgainLater',\n    'error.somethingWentWrongWithDownload',\n    'expandableCard.collapse',\n    'expandableCard.expand',\n    'export',\n    'fee',\n    'file',\n    'filter.date.since',\n    'filter.date.until',\n    'filterBar',\n    'filterPlaceholder.category',\n    'filterPlaceholder.currency',\n    'filterPlaceholder.status',\n    'from',\n    'full',\n    'fundsCaptured',\n    'goBack',\n    'grantIssued',\n    'grantRepayment',\n    'hideContent',\n    'id',\n    'incompleteField',\n    'inProgress',\n    'inputError.disallowedFileType',\n    'inputError.fileRequired',\n    'inputError.tooManyFiles',\n    'inputError.veryLargeFile',\n    'loading',\n    'max',\n    'min',\n    'mobile',\n    'netPayout',\n    'nextPayouts',\n    'noData',\n    'noNegativeNumbersAllowed',\n    'noPayoutsFound',\n    'noReportsFound',\n    'noTransactionsFound',\n    'other',\n    'paginatedNavigation',\n    'pagination.nextPage',\n    'pagination.previousPage',\n    'pagination.showing',\n    'partial',\n    'paymentId',\n    'paymentMethod',\n    'payoutDetails',\n    'payoutsNotice',\n    'payoutsTitle',\n    'Pending',\n    'pleaseComeBackLater',\n    'pleaseReachOutToSupportForAssistance',\n    'rangePreset.custom',\n    'rangePreset.last30Days',\n    'rangePreset.last7Days',\n    'rangePreset.lastMonth',\n    'rangePreset.lastWeek',\n    'rangePreset.thisMonth',\n    'rangePreset.thisWeek',\n    'rangePreset.yearToDate',\n    'reachOutToSupport',\n    'referenceID',\n    'refresh',\n    'refund',\n    'refund.amountAlreadyRefunded',\n    'refund.amountFailed',\n    'refund.amountInProgress',\n    'refund.fee',\n    'refund.fullAmountFailed',\n    'refund.fullAmountRefunded',\n    'refund.goToPayment',\n    'refund.maximumRefundable',\n    'refund.onlyRefundable',\n    'refund.originalAmount',\n    'refund.originalPayment',\n    'refund.paymentPspReference',\n    'refund.pspReference',\n    'refund.refundFee',\n    'refund.refundPspReference',\n    'refund.returnToRefund',\n    'refund.theRefundIsBeingProcessed',\n    'refundAction',\n    'refundActionErrorSubtitle',\n    'refundActionErrorTitle',\n    'refundActionSuccessSubtitle',\n    'refundActionSuccessTitle',\n    'refundAmount',\n    'refundAmount.excess',\n    'refundAmount.required',\n    'refunded.full',\n    'refunded.partial',\n    'refundNotice',\n    'refundPayment',\n    'refundReason',\n    'refundReason.duplicate',\n    'refundReason.fraudulent',\n    'refundReason.issue_with_item_sold',\n    'refundReason.other',\n    'refundReason.requested_by_customer',\n    'refundReference',\n    'refundReference.placeholder',\n    'remainingAmount',\n    'report',\n    'reportsError.tooManyDownloads',\n    'reportsNotice',\n    'reportsTitle',\n    'reportType.payout',\n    'reset',\n    'Reversed',\n    'select.filter.placeholder',\n    'select.noOptionsFound',\n    'somethingWentWrong',\n    'somethingWentWrongTryRefreshingOrComeBackLater',\n    'status',\n    'structuredList',\n    'subtractions',\n    'sumOfSameDayPayouts',\n    'tabs',\n    'theErrorCodeIs',\n    'thereAreNoResults',\n    'theRequestIsMissingRequiredFieldsOrContainsInvalidData',\n    'thereWasAnUnexpectedError',\n    'theSelectedBalanceAccountIsIncorrect',\n    'timezone',\n    'to',\n    'tooltip.ATM',\n    'tooltip.Capital',\n    'tooltip.Chargeback',\n    'tooltip.Correction',\n    'tooltip.Fee',\n    'tooltip.Other',\n    'tooltip.Payment',\n    'tooltip.Refund',\n    'tooltip.totalIncoming',\n    'tooltip.totalOutgoing',\n    'tooltip.Transfer',\n    'totalIncoming',\n    'totalOutgoing',\n    'toValueShouldBeGreaterThanTheFromValue',\n    'transactionDetails',\n    'transactions',\n    'transactionsOverviewTitle',\n    'transactionType',\n    'transfer',\n    'tryDifferentSearchOrResetYourFiltersAndWeWillTryAgain',\n    'tryRefreshingThePageOrComeBackLater',\n    'txAmount',\n    'txType.ATM',\n    'txType.Capital',\n    'txType.Chargeback',\n    'txType.Correction',\n    'txType.Fee',\n    'txType.Other',\n    'txType.Payment',\n    'txType.Refund',\n    'txType.Transfer',\n    'type',\n    'uploadedFile.remove',\n    'uploadFile.browse',\n    'value',\n    'weCouldNotLoadThePayoutsOverview',\n    'weCouldNotLoadTheReportsOverview',\n    'weCouldNotLoadTheTransactionsOverview',\n    'weCouldNotLoadYourBalanceAccounts',\n    'weCouldNotLoadYourPayouts',\n    'weCouldNotLoadYourReports',\n    'weCouldNotLoadYourTransactions',\n]);\n\nconst currentTranslationKeys = new Set(Object.keys(currentTranslations));\n\nexport const getCustomTranslationsAnalyticsPayload = (customTranslations: Localization['customTranslations']) => {\n    const payloads = [];\n    const customizedLocale = Object.keys(customTranslations);\n\n    if (customizedLocale.length > 0) {\n        for (const locale of customizedLocale) {\n            const baseEventProperties = {\n                category: 'PIE',\n                subCategory: 'Core',\n                locale: locale,\n                sdkVersion: process.env.VITE_VERSION,\n                userAgent: navigator.userAgent,\n            };\n\n            if (!SUPPORTED_LOCALES.includes(locale as any)) {\n                const newLanguageEvent = encodeAnalyticsEvent({\n                    event: 'Added new language',\n                    properties: { ...baseEventProperties, time: getEventTime() },\n                });\n                if (newLanguageEvent) {\n                    payloads.push(newLanguageEvent);\n                }\n            } else {\n                const translations = customTranslations?.[locale];\n                const keys = translations ? Object.keys(translations) : [];\n                if (keys?.length > 0) {\n                    const oldCustomizedKeys = keys.filter(key => oldTranslationKeys.has(key));\n                    // This event is a temporary event that tracks platforms that are still using old translations.\n                    // We will reach out to these platforms to encourage them to migrate to the new translations.\n                    // We will keep maintaining old translations mapping for backward compatibility until all platforms have migrated.\n                    if (oldCustomizedKeys.length > 0) {\n                        const oldTranslationsEvent = encodeAnalyticsEvent({\n                            event: 'Customized old translation',\n                            properties: { ...baseEventProperties, keys: oldCustomizedKeys, time: getEventTime() },\n                        });\n                        if (oldTranslationsEvent) {\n                            payloads.push(oldTranslationsEvent);\n                        }\n                    }\n\n                    const matchingCustomizedKeys = keys.filter(key => currentTranslationKeys.has(key));\n\n                    // This event is permanent to keep track of all the customizations that user made to translations\n                    const allTranslationsEvent = encodeAnalyticsEvent({\n                        event: 'Customized translation',\n                        properties: { ...baseEventProperties, keys: matchingCustomizedKeys, time: getEventTime() },\n                    });\n                    if (allTranslationsEvent) {\n                        payloads.push(allTranslationsEvent);\n                    }\n                }\n            }\n        }\n    }\n    return payloads;\n};\n","import type { CoreOptions, onErrorHandler } from './types';\nimport { FALLBACK_ENV, getConfigFromCdn, getDatasetFromCdn, resolveEnvironment } from './utils';\nimport { AuthSession } from './ConfigContext/session/AuthSession';\nimport BaseElement from '../components/external/BaseElement';\nimport Localization, { TranslationSourceRecord } from './Localization';\nimport { EMPTY_OBJECT } from '../utils';\nimport { AssetOptions, Assets } from './Assets/Assets';\nimport { getCustomTranslationsAnalyticsPayload } from './Analytics/analytics/customTranslations';\n\nclass Core<AvailableTranslations extends TranslationSourceRecord[] = [], CustomTranslations extends {} = {}> {\n    public static readonly version = process.env.VITE_VERSION!;\n\n    public components: BaseElement<any>[] = [];\n    public options: CoreOptions<AvailableTranslations, CustomTranslations>;\n\n    public localization: Localization;\n    public loadingContext: string;\n    public analyticsEnabled: boolean;\n    public session = new AuthSession();\n    public onError?: onErrorHandler;\n    public getImageAsset: (props: AssetOptions) => string;\n    public getDatasetAsset: (props: AssetOptions) => string;\n    public getCdnConfig: (props: { name: string; extension?: string; subFolder?: string }) => Promise<any>;\n    public getCdnDataset: <Fallback>(props: { name: string; extension?: string; subFolder?: string; fallback?: Fallback }) => Promise<Fallback>;\n\n    private readyCustomTranslationsAnalytics: boolean;\n\n    // [TODO]: Change the error handling strategy.\n\n    constructor(options: CoreOptions<AvailableTranslations, CustomTranslations>) {\n        this.options = { environment: FALLBACK_ENV, ...options };\n        const { cdnTranslationsUrl, cdnAssetsUrl, cdnConfigUrl, apiUrl } = resolveEnvironment(this.options.environment);\n\n        this.localization = new Localization(options.locale, options.availableTranslations, cdnTranslationsUrl, cdnConfigUrl);\n        this.loadingContext = options.loadingContext || process.env.VITE_APP_LOADING_CONTEXT || apiUrl;\n        this.getImageAsset = new Assets(cdnAssetsUrl).getAsset({ extension: 'svg', subFolder: 'images' });\n        this.getDatasetAsset = new Assets(cdnAssetsUrl).getAsset({ extension: 'json', mainFolder: 'datasets' });\n        this.getCdnConfig = getConfigFromCdn({ url: cdnConfigUrl });\n        this.getCdnDataset = getDatasetFromCdn({ url: `${cdnAssetsUrl}/datasets` });\n        this.readyCustomTranslationsAnalytics = false;\n        this.analyticsEnabled = options?.analytics?.enabled ?? true;\n        this.session.analyticsEnabled = this.analyticsEnabled;\n        this.setOptions(options);\n    }\n\n    async initialize(): Promise<this> {\n        return Promise.all([this.localization.ready]).then(() => {\n            if (!this.readyCustomTranslationsAnalytics && this.analyticsEnabled) {\n                const analyticsPayload = this.setTranslationsPayload();\n                if (analyticsPayload.length > 0) {\n                    this.session.analyticsPayload = analyticsPayload;\n                    this.readyCustomTranslationsAnalytics = true;\n                }\n            }\n            return this;\n        });\n    }\n\n    /**\n     * Updates global configurations, resets the internal state and remounts each element.\n     * @param options - props to update\n     * @returns this - the element instance\n     */\n    public update = async (options: Partial<typeof this.options> = EMPTY_OBJECT): Promise<this> => {\n        this.setOptions(options);\n        await this.initialize();\n\n        this.components.forEach(component => {\n            if (component.props.core === this) {\n                // Update each component under this instance\n                component.update(this.getPropsForComponent(this.options));\n            }\n        });\n\n        return this;\n    };\n\n    /**\n     * Remove the reference of a component\n     * @param component - reference to the component to be removed\n     * @returns this - the element instance\n     */\n    public remove = (component: BaseElement<any>): this => {\n        this.components = this.components.filter(c => c._id !== component._id);\n        component.unmount();\n        return this;\n    };\n\n    /**\n     * @internal\n     * Register components in core to be able to update them all at once\n     */\n    public registerComponent = (component: BaseElement<any>) => {\n        if (component.props.core === this) {\n            this.components.push(component);\n        }\n    };\n\n    /**\n     * @internal\n     * Enhances the config object passed when AdyenPlatformExperience is initialised (environment, clientKey, etc...)\n     * (Re)Initializes core properties & processes (i18n, etc...)\n     * @param options - the config object passed when AdyenPlatformExperience is initialised\n     * @returns this\n     */\n    private setOptions = (options: Partial<typeof this.options>): this => {\n        this.options = { ...this.options, ...options };\n\n        this.localization.locale = this.options?.locale;\n        this.localization.customTranslations = this.options?.translations;\n\n        this.session.loadingContext = this.loadingContext;\n        this.session.onSessionCreate = this.options.onSessionCreate;\n\n        return this;\n    };\n\n    private setTranslationsPayload() {\n        if (this.localization) {\n            return getCustomTranslationsAnalyticsPayload(this.localization.i18n.customTranslations);\n        }\n        return [];\n    }\n\n    /**\n     * @internal\n     * @param options - options that will be merged to the global Checkout props\n     * @returns props for a new UIElement\n     */\n    private getPropsForComponent(options: any) {\n        return { ...options };\n    }\n}\n\nexport default Core;\n","var n,l,u,t,i,o,r,e,f,c,s,a,h,p={},v=[],y=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,d=Array.isArray;function w(n,l){for(var u in l)n[u]=l[u];return n}function g(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function _(l,u,t){var i,o,r,e={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:e[r]=u[r];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===e[r]&&(e[r]=l.defaultProps[r]);return m(l,e,i,o,null)}function m(n,t,i,o,r){var e={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==r?++u:r,__i:-1,__u:0};return null==r&&null!=l.vnode&&l.vnode(e),e}function b(){return{current:null}}function k(n){return n.children}function x(n,l){this.props=n,this.context=l}function S(n,l){if(null==l)return n.__?S(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?S(n):null}function C(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C(n)}}function M(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!$.__r++||o!=l.debounceRendering)&&((o=l.debounceRendering)||r)($)}function $(){for(var n,u,t,o,r,f,c,s=1;i.length;)i.length>s&&i.sort(e),n=i.shift(),s=i.length,n.__d&&(t=void 0,o=void 0,r=(o=(u=n).__v).__e,f=[],c=[],u.__P&&((t=w({},o)).__v=o.__v+1,l.vnode&&l.vnode(t),O(u.__P,t,o,u.__n,u.__P.namespaceURI,32&o.__u?[r]:null,f,null==r?S(o):r,!!(32&o.__u),c),t.__v=o.__v,t.__.__k[t.__i]=t,N(f,t,c),o.__e=o.__=null,t.__e!=r&&C(t)));$.__r=0}function I(n,l,u,t,i,o,r,e,f,c,s){var a,h,y,d,w,g,_,m=t&&t.__k||v,b=l.length;for(f=P(u,l,m,f,b),a=0;a<b;a++)null!=(y=u.__k[a])&&(h=-1==y.__i?p:m[y.__i]||p,y.__i=a,g=O(n,y,h,i,o,r,e,f,c,s),d=y.__e,y.ref&&h.ref!=y.ref&&(h.ref&&B(h.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),(_=!!(4&y.__u))||h.__k===y.__k?f=A(y,f,n,_):\"function\"==typeof y.type&&void 0!==g?f=g:d&&(f=d.nextSibling),y.__u&=-7);return u.__e=w,f}function P(n,l,u,t,i){var o,r,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),o=0;o<i;o++)null!=(r=l[o])&&\"boolean\"!=typeof r&&\"function\"!=typeof r?(\"string\"==typeof r||\"number\"==typeof r||\"bigint\"==typeof r||r.constructor==String?r=n.__k[o]=m(null,r,null,null,null):d(r)?r=n.__k[o]=m(k,{children:r},null,null,null):void 0===r.constructor&&r.__b>0?r=n.__k[o]=m(r.type,r.props,r.key,r.ref?r.ref:null,r.__v):n.__k[o]=r,f=o+h,r.__=n,r.__b=n.__b+1,e=null,-1!=(c=r.__i=L(r,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof r.type&&(r.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,r.__u|=4))):n.__k[o]=null;if(a)for(o=0;o<s;o++)null!=(e=u[o])&&0==(2&e.__u)&&(e.__e==t&&(t=S(e)),D(e,e));return t}function A(n,l,u,t){var i,o;if(\"function\"==typeof n.type){for(i=n.__k,o=0;i&&o<i.length;o++)i[o]&&(i[o].__=n,l=A(i[o],l,u,t));return l}n.__e!=l&&(t&&(l&&n.type&&!l.parentNode&&(l=S(n)),u.insertBefore(n.__e,l||null)),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function H(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(d(n)?n.some(function(n){H(n,l)}):l.push(n)),l}function L(n,l,u,t){var i,o,r,e=n.key,f=n.type,c=l[u],s=null!=c&&0==(2&c.__u);if(null===c&&null==e||s&&e==c.key&&f==c.type)return u;if(t>(s?1:0))for(i=u-1,o=u+1;i>=0||o<l.length;)if(null!=(c=l[r=i>=0?i--:o++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return r;return-1}function T(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||y.test(l)?u:u+\"px\"}function j(n,l,u,t,i){var o,r;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||T(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||T(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])o=l!=(l=l.replace(f,\"$1\")),r=l.toLowerCase(),l=r in n||\"onFocusOut\"==l||\"onFocusIn\"==l?r.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=c,n.addEventListener(l,o?a:s,o)):n.removeEventListener(l,o?a:s,o);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=c++;else if(u.t<t.u)return;return t(l.event?l.event(u):u)}}}function O(n,u,t,i,o,r,e,f,c,s){var a,h,p,v,y,_,m,b,S,C,M,$,P,A,H,L,T,j=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof j)try{if(b=u.props,S=\"prototype\"in j&&j.prototype.render,C=(a=j.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?m=(h=u.__c=t.__c).__=h.__E:(S?u.__c=h=new j(b,M):(u.__c=h=new x(b,M),h.constructor=j,h.render=E),C&&C.sub(h),h.state||(h.state={}),h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),S&&null==h.__s&&(h.__s=h.state),S&&null!=j.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=w({},h.__s)),w(h.__s,j.getDerivedStateFromProps(b,h.__s))),v=h.props,y=h.state,h.__v=u,p)S&&null==j.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),S&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(S&&null==j.getDerivedStateFromProps&&b!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(b,M),u.__v==t.__v||!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(b,h.__s,M)){for(u.__v!=t.__v&&(h.props=b,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),$=0;$<h._sb.length;$++)h.__h.push(h._sb[$]);h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(b,h.__s,M),S&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,y,_)})}if(h.context=M,h.props=b,h.__P=n,h.__e=!1,P=l.__r,A=0,S){for(h.state=h.__s,h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[]}else do{h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++A<25);h.state=h.__s,null!=h.getChildContext&&(i=w(w({},i),h.getChildContext())),S&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,y)),L=a,null!=a&&a.type===k&&null==a.key&&(L=V(a.props.children)),f=I(n,d(L)?L:[L],u,t,i,o,r,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),m&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=r)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;r[r.indexOf(f)]=null,u.__e=f}else{for(T=r.length;T--;)g(r[T]);z(u)}else u.__e=t.__e,u.__k=t.__k,n.then||z(u);l.__e(n,u,t)}else null==r&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=q(t.__e,u,t,i,o,r,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function z(n){n&&n.__c&&(n.__c.__e=!0),n&&n.__k&&n.__k.forEach(z)}function N(n,u,t){for(var i=0;i<t.length;i++)B(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function V(n){return\"object\"!=typeof n||null==n||n.__b&&n.__b>0?n:d(n)?n.map(V):w({},n)}function q(u,t,i,o,r,e,f,c,s){var a,h,v,y,w,_,m,b=i.props||p,k=t.props,x=t.type;if(\"svg\"==x?r=\"http://www.w3.org/2000/svg\":\"math\"==x?r=\"http://www.w3.org/1998/Math/MathML\":r||(r=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((w=e[a])&&\"setAttribute\"in w==!!x&&(x?w.localName==x:3==w.nodeType)){u=w,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(r,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)b===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),!c&&null!=e)for(b={},a=0;a<u.attributes.length;a++)b[(w=u.attributes[a]).name]=w.value;for(a in b)if(w=b[a],\"children\"==a);else if(\"dangerouslySetInnerHTML\"==a)v=w;else if(!(a in k)){if(\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k)continue;j(u,a,null,w,r)}for(a in k)w=k[a],\"children\"==a?y=w:\"dangerouslySetInnerHTML\"==a?h=w:\"value\"==a?_=w:\"checked\"==a?m=w:c&&\"function\"!=typeof w||b[a]===w||j(u,a,w,b[a],r);if(h)c||v&&(h.__html==v.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(v&&(u.innerHTML=\"\"),I(\"template\"==t.type?u.content:u,d(y)?y:[y],t,i,o,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":r,e,f,e?e[0]:i.__k&&S(i,0),c,s),null!=e)for(a=e.length;a--;)g(e[a]);c||(a=\"value\",\"progress\"==x&&null==_?u.removeAttribute(\"value\"):null!=_&&(_!==u[a]||\"progress\"==x&&!_||\"option\"==x&&_!=b[a])&&j(u,a,_,b[a],r),a=\"checked\",null!=m&&m!=u[a]&&j(u,a,m,b[a],r))}return u}function B(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function D(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||B(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&D(i[o],u,t||\"function\"!=typeof n.type);t||g(n.__e),n.__c=n.__=n.__e=void 0}function E(n,l,u){return this.constructor(n,u)}function G(u,t,i){var o,r,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),r=(o=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],O(t,u=(!o&&i||t).__k=_(k,null,[u]),r||p,p,t.namespaceURI,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,e,!o&&i?i:r?r.__e:t.firstChild,o,f),N(e,u,f)}function J(n,l){G(n,l,J)}function K(l,u,t){var i,o,r,e,f=w({},l.props);for(r in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=void 0===u[r]&&null!=e?e[r]:u[r];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),m(l.type,f,i||l.key,o||l.ref,null)}function Q(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,M(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+h++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=v.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},x.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=w({},this.state),\"function\"==typeof n&&(n=n(w({},u),this.props)),n&&w(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M(this))},x.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M(this))},x.prototype.render=k,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},$.__r=0,f=/(PointerCapture)$|Capture$/i,c=0,s=F(!1),a=F(!0),h=0;export{x as Component,k as Fragment,K as cloneElement,Q as createContext,_ as createElement,b as createRef,_ as h,J as hydrate,t as isValidElement,l as options,G as render,H as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\"&quot;\";break;case 38:f=\"&amp;\";break;case 60:f=\"&lt;\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){t||(t={});var a,c,p=t;if(\"ref\"in p)for(c in p={},t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(t=function(r){return null!==r&&\"object\"==typeof r&&\"function\"==typeof r.valueOf?r.valueOf():r}(t),\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),s=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(s=\"px;\"),i=i+l+\":\"+a+s}}return e+'=\"'+n(i)+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(\"\"+t)+'\"'}function s(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=s(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,s as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return!!n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[]}catch(t){n.__H.__h=[],c.__e(t,n.__v)}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import { createContext } from 'preact';\n\nimport { noop } from '../../../utils';\nimport { UserEvents } from '../../Analytics/analytics/user-events';\n\nconst defaultUserEvents: UserEvents = {\n    addEvent: noop,\n    addJourneyEvent: noop,\n    addTaskEvent: noop,\n    addPageEvent: noop,\n    addFieldEvent: noop,\n    startEvent: noop,\n    subscribe: noop,\n    updateBaseTrackingPayload: noop,\n    updateSharedEventProperties: noop,\n    unsubscribe: noop,\n} as unknown as UserEvents;\n\nexport const AnalyticsContext = createContext<Partial<UserEvents>>(defaultUserEvents);\n","import { ExternalComponentType } from '../../../components/types';\nimport { getEventTime } from './utils';\n\nexport type MixpanelProperty = string | number | boolean | any[] | null | undefined;\n\n/**\n * Level of the funnel that is relevant for this event\n */\ntype ActionLevel = 'journey' | 'task' | 'page' | 'field';\n\n/**\n * The type of action associated with the event\n */\nexport type ActionType = 'add' | 'reset' | 'update';\n\n/**\n * The base event properties that are sent with every event\n */\nexport type BaseEventProperties = {\n    category: 'pie';\n    subCategory: 'pie component';\n    capabilities?: string[];\n    componentName?: ExternalComponentType;\n    countryCode?: string;\n    locale?: string;\n    sdkVersion?: string;\n    userAgent?: string;\n};\n\n/**\n * Additional event properties\n */\nexport interface AdditionalEventProperties {\n    actionType?: ActionType;\n    actionLevel?: ActionLevel;\n    page?: string;\n    field?: string;\n    returnType?: 'backend' | 'validation' | (string & {});\n    returnValue?: string | string[];\n    additionalData?: string | string[];\n    label?: string;\n    category: string;\n    subCategory: string;\n    [key: string]: MixpanelProperty;\n\n    // Mixpanel experiment properties\n    'Experiment name'?: string;\n    'Variant name'?: string;\n}\n\n/**\n * Name of the tracked event\n * Can be either a custom name or one of the pre-defined values\n */\nexport type FilterType =\n    | 'Date filter'\n    | 'Amount filter'\n    | 'Balance account filter'\n    | 'Category filter'\n    | 'Currency filter'\n    | 'PSP reference filter'\n    | 'Status filter';\n\n/**\n * Name of the tracked event\n * Can be either a custom name or one of the pre-defined values\n */\nexport type EventName =\n    | 'Landed on page'\n    | 'Clicked button'\n    | 'Clicked link'\n    | 'Modified filter'\n    | 'Encountered error'\n    | (string & {})\n\n    // Mixpanel experiment event\n    | '$experiment_started';\n\nexport type AnalyticsEventPayload = Required<BaseEventProperties> & AdditionalEventProperties;\n\nexport type EventQueueItem = {\n    name: EventName;\n    properties?: AnalyticsEventPayload;\n};\n\nexport type EmbeddedEventItem = {\n    event: string;\n    properties: AnalyticsEventPayload | Record<string, MixpanelProperty>;\n};\n\ntype UserEventCallback = (eventQueueItem: EventQueueItem) => void;\n\nexport class UserEvents {\n    private readonly queue: EventQueueItem[] = [];\n    private readonly subscriptions: Set<UserEventCallback> = new Set();\n\n    /* function to be called when there is at least one subscriber */\n    private doneWaitingForSubscribers: (() => void) | undefined;\n\n    /** payload of commmon props sent in every event */\n    private baseTrackingPayload: BaseEventProperties;\n\n    /** properties not set with every event but that may be shared between some events\n     * ex. `page` value for `Interacted with form field` events\n     */\n    private sharedEventProperties: Partial<AdditionalEventProperties>;\n\n    constructor(componentName?: ExternalComponentType) {\n        this.baseTrackingPayload = {\n            ...(componentName ? { componentName: componentName } : {}),\n            category: 'pie',\n            subCategory: 'pie component',\n            userAgent: navigator.userAgent,\n        };\n        this.sharedEventProperties = {};\n    }\n\n    protected add(...args: EventQueueItem[]) {\n        this.queue.push(...args);\n    }\n\n    protected notifySubscribers() {\n        if (this.subscriptions.size > 0) {\n            while (this.queue.length > 0) {\n                const nextEvent = this.queue.shift()!;\n                this.subscriptions.forEach((callback: UserEventCallback) => callback(nextEvent));\n            }\n        } else if (this.doneWaitingForSubscribers === undefined) {\n            new Promise<void>(resolve => {\n                this.doneWaitingForSubscribers = resolve;\n            }).then(() => {\n                this.doneWaitingForSubscribers = undefined;\n                this.notifySubscribers();\n            });\n        }\n    }\n\n    /**\n     * Adds an analytics event with all base event properties.\n     */\n    public addEvent(eventName: EventName, properties: AdditionalEventProperties) {\n        const time = getEventTime();\n        const completeEvent = { ...this.baseTrackingPayload, time, ...properties } as AnalyticsEventPayload;\n        this.add({\n            name: eventName,\n            // type: 'add_event',\n            properties: completeEvent,\n        });\n        this.notifySubscribers();\n    }\n\n    /**\n     * Adds an event with context specific to\n     */\n    public addModifyFilterEvent(properties: Omit<AdditionalEventProperties, 'subCategory' | 'label'> & { label?: FilterType; subCategory?: string }) {\n        this.addEvent('Modified filter', {\n            ...properties,\n            subCategory: properties.subCategory ?? 'Filter',\n        } as AdditionalEventProperties);\n    }\n\n    /**\n     * Tracks an experiment for Mixpanel experiment reporting\n     */\n    public trackExperiment({ name, variant }: { name: string; variant: string }) {\n        this.add({\n            // type: 'add_event',\n            name: '$experiment_started',\n            properties: {\n                ...this.baseTrackingPayload,\n                'Experiment name': name,\n                'Variant name': variant,\n            } as AnalyticsEventPayload,\n        });\n    }\n\n    /**\n     * Starts a timer for an event to measure the time it takes for an event to occur. Time is ended when `addEvent` is executed with the same key\n     */\n    public startEvent(eventName: EventName) {\n        this.add({\n            // type: 'start_event',\n            name: eventName,\n        });\n        this.notifySubscribers();\n    }\n\n    /**\n     * Subscribes a callback to analytics events. It gets called every time\n     * one of the above public methods get called, and the event data is passed back as an array.\n     * The callback must have a single argument which is an array of [eventName, eventPayload?].\n     * @example\n     * ```js\n     * const callback = ([eventName, eventPayload]) => console.log(eventName, eventPayload);\n     * this.subscribe(callback);\n     *\n     * const exampleEventPayload = { count: 1, segmentation: { foo: 'bar' } };\n     * this.addEvent('exampleEventDidOccur', exampleEventPayload);\n     *\n     * // `callback` will get called with `['exampleEventDidOccur', exampleEventPayload]`\n     * ```\n     */\n    public subscribe(callback: UserEventCallback) {\n        this.doneWaitingForSubscribers?.();\n        this.subscriptions.add(callback);\n    }\n\n    /**\n     * Sets params that are sent on every event\n     * */\n    public updateBaseTrackingPayload(baseTrackingPayload: Partial<BaseEventProperties>) {\n        this.baseTrackingPayload = { ...this.baseTrackingPayload, ...baseTrackingPayload };\n    }\n\n    /**\n     * Sets params that may be shared between events\n     * */\n    public updateSharedEventProperties = (props: Record<string, MixpanelProperty>) => {\n        this.sharedEventProperties = { ...this.sharedEventProperties, ...props };\n    };\n\n    /**\n     * Removes a subscribed callback\n     */\n    public unsubscribe(callback: UserEventCallback) {\n        if (this.subscriptions.has(callback)) {\n            this.subscriptions.delete(callback);\n        }\n    }\n}\n\nexport const createUserEvents = (analyticsEnabled = true, componentName?: ExternalComponentType): Partial<UserEvents> => {\n    return analyticsEnabled ? new UserEvents(componentName) : {};\n};\n","import{Component as n,createElement as t,options as e,toChildArray as r,Fragment as u,render as o,hydrate as i,createContext as l,createRef as c,cloneElement as f}from\"preact\";export{Component,Fragment,createContext,createElement,createRef}from\"preact\";import{useState as a,useLayoutEffect as s,useEffect as h,useCallback as v,useContext as d,useDebugValue as m,useId as p,useImperativeHandle as y,useMemo as _,useReducer as b,useRef as S}from\"preact/hooks\";export*from\"preact/hooks\";function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function C(n,t){var e=t(),r=a({t:{__:e,u:t}}),u=r[0].t,o=r[1];return s(function(){u.__=e,u.u=t,x(u)&&o({t:u})},[n,e,t]),h(function(){return x(u)&&o({t:u}),n(function(){x(u)&&o({t:u})})},[n]),e}function x(n){var t,e,r=n.u,u=n.__;try{var o=r();return!((t=u)===(e=o)&&(0!==t||1/t==1/e)||t!=t&&e!=e)}catch(n){return!0}}function R(n){n()}function w(n){return n}function k(){return[!1,R]}var I=s;function N(n,t){this.props=n,this.context=t}function M(n,e){function r(n){var t=this.props.ref,r=t==n.ref;return!r&&t&&(t.call?t(null):t.current=null),e?!e(this.props,n)||!r:E(this.props,n)}function u(e){return this.shouldComponentUpdate=r,t(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.prototype.isReactComponent=!0,u.__f=!0,u.type=n,u}(N.prototype=new n).isPureReactComponent=!0,N.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var T=e.__b;e.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),T&&T(n)};var A=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function D(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=A,t.render=n,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var L=function(n,t){return null==n?null:r(r(n).map(t))},O={map:L,forEach:L,count:function(n){return n?r(n).length:0},only:function(n){var t=r(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:r},F=e.__e;e.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);F(n,t,e,r)};var U=e.unmount;function V(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c.__e=!0,n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return V(n,t,e)})),n}function W(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return W(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function P(){this.__u=0,this.o=null,this.__b=null}function j(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function z(n){var e,r,u,o=null;function i(i){if(e||(e=n()).then(function(n){n&&(o=n.default||n),u=!0},function(n){r=n,u=!0}),r)throw r;if(!u)throw e;return o?t(o,i):null}return i.displayName=\"Lazy\",i.__f=!0,i}function B(){this.i=null,this.l=null}e.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),U&&U(n)},(P.prototype=new n).__c=function(n,t){var e=t.__c,r=this;null==r.o&&(r.o=[]),r.o.push(e);var u=j(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=W(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.o.pop();)t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},P.prototype.componentWillUnmount=function(){this.o=[]},P.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=V(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&t(u,null,n.fallback);return i&&(i.__u&=-33),[t(u,null,e.__a?null:n.children),i]};var H=function(n,t,e){if(++e[1]===e[0]&&n.l.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.l.size))for(e=n.i;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.i=e=e[2]}};function Z(n){return this.getChildContext=function(){return n.context},n.children}function Y(n){var e=this,r=n.h;if(e.componentWillUnmount=function(){o(null,e.v),e.v=null,e.h=null},e.h&&e.h!==r&&e.componentWillUnmount(),!e.v){for(var u=e.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;e.h=r,e.v={nodeType:1,parentNode:r,childNodes:[],__k:{__m:u.__m},contains:function(){return!0},insertBefore:function(n,t){this.childNodes.push(n),e.h.insertBefore(n,t)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.h.removeChild(n)}}}o(t(Z,{context:e.context},n.__v),e.v)}function $(n,e){var r=t(Y,{__v:n,h:e});return r.containerInfo=e,r}(B.prototype=new n).__a=function(n){var t=this,e=j(t.__v),r=t.l.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),H(t,n,r)):u()};e?e(o):o()}},B.prototype.render=function(n){this.i=null,this.l=new Map;var t=r(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.l.set(t[e],this.i=[1,0,this.i]);return n.children},B.prototype.componentDidUpdate=B.prototype.componentDidMount=function(){var n=this;this.l.forEach(function(t,e){H(n,e,t)})};var q=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,G=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,J=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,K=/[A-Z0-9]/g,Q=\"undefined\"!=typeof document,X=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function nn(n,t,e){return null==t.__k&&(t.textContent=\"\"),o(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function tn(n,t,e){return i(n,t),\"function\"==typeof e&&e(),n?n.__c:null}n.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(n.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var en=e.event;function rn(){}function un(){return this.cancelBubble}function on(){return this.defaultPrevented}e.event=function(n){return en&&(n=en(n)),n.persist=rn,n.isPropagationStopped=un,n.isDefaultPrevented=on,n.nativeEvent=n};var ln,cn={enumerable:!1,configurable:!0,get:function(){return this.class}},fn=e.vnode;e.vnode=function(n){\"string\"==typeof n.type&&function(n){var t=n.props,e=n.type,u={},o=-1===e.indexOf(\"-\");for(var i in t){var l=t[i];if(!(\"value\"===i&&\"defaultValue\"in t&&null==l||Q&&\"children\"===i&&\"noscript\"===e||\"class\"===i||\"className\"===i)){var c=i.toLowerCase();\"defaultValue\"===i&&\"value\"in t&&null==t.value?i=\"value\":\"download\"===i&&!0===l?l=\"\":\"translate\"===c&&\"no\"===l?l=!1:\"o\"===c[0]&&\"n\"===c[1]?\"ondoubleclick\"===c?i=\"ondblclick\":\"onchange\"!==c||\"input\"!==e&&\"textarea\"!==e||X(t.type)?\"onfocus\"===c?i=\"onfocusin\":\"onblur\"===c?i=\"onfocusout\":J.test(i)&&(i=c):c=i=\"oninput\":o&&G.test(i)?i=i.replace(K,\"-$&\").toLowerCase():null===l&&(l=void 0),\"oninput\"===c&&u[i=c]&&(i=\"oninputCapture\"),u[i]=l}}\"select\"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=r(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),\"select\"==e&&null!=u.defaultValue&&(u.value=r(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,\"className\",cn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u}(n),n.$$typeof=q,fn&&fn(n)};var an=e.__r;e.__r=function(n){an&&an(n),ln=n.__c};var sn=e.diffed;e.diffed=function(n){sn&&sn(n);var t=n.props,e=n.__e;null!=e&&\"textarea\"===n.type&&\"value\"in t&&t.value!==e.value&&(e.value=null==t.value?\"\":t.value),ln=null};var hn={ReactCurrentDispatcher:{current:{readContext:function(n){return ln.__n[n.__c].props.value},useCallback:v,useContext:d,useDebugValue:m,useDeferredValue:w,useEffect:h,useId:p,useImperativeHandle:y,useInsertionEffect:I,useLayoutEffect:s,useMemo:_,useReducer:b,useRef:S,useState:a,useSyncExternalStore:C,useTransition:k}}},vn=\"18.3.1\";function dn(n){return t.bind(null,n)}function mn(n){return!!n&&n.$$typeof===q}function pn(n){return mn(n)&&n.type===u}function yn(n){return!!n&&!!n.displayName&&(\"string\"==typeof n.displayName||n.displayName instanceof String)&&n.displayName.startsWith(\"Memo(\")}function _n(n){return mn(n)?f.apply(null,arguments):n}function bn(n){return!!n.__k&&(o(null,n),!0)}function Sn(n){return n&&(n.base||1===n.nodeType&&n)||null}var gn=function(n,t){return n(t)},En=function(n,t){return n(t)},Cn=u,xn=mn,Rn={useState:a,useId:p,useReducer:b,useEffect:h,useLayoutEffect:s,useInsertionEffect:I,useTransition:k,useDeferredValue:w,useSyncExternalStore:C,startTransition:R,useRef:S,useImperativeHandle:y,useMemo:_,useCallback:v,useContext:d,useDebugValue:m,version:\"18.3.1\",Children:O,render:nn,hydrate:tn,unmountComponentAtNode:bn,createPortal:$,createElement:t,createContext:l,createFactory:dn,cloneElement:_n,createRef:c,Fragment:u,isValidElement:mn,isElement:xn,isFragment:pn,isMemo:yn,findDOMNode:Sn,Component:n,PureComponent:N,memo:M,forwardRef:D,flushSync:En,unstable_batchedUpdates:gn,StrictMode:Cn,Suspense:P,SuspenseList:B,lazy:z,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:hn};export{O as Children,N as PureComponent,Cn as StrictMode,P as Suspense,B as SuspenseList,hn as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_n as cloneElement,dn as createFactory,$ as createPortal,Rn as default,Sn as findDOMNode,En as flushSync,D as forwardRef,tn as hydrate,xn as isElement,pn as isFragment,yn as isMemo,mn as isValidElement,z as lazy,M as memo,nn as render,R as startTransition,bn as unmountComponentAtNode,gn as unstable_batchedUpdates,w as useDeferredValue,I as useInsertionEffect,C as useSyncExternalStore,k as useTransition,vn as version};\n//# sourceMappingURL=compat.module.js.map\n","import { ComponentChildren, Ref } from 'preact';\nimport { forwardRef } from 'preact/compat';\n\ntype _RenderResult = ComponentChildren | null;\n\n/**\n * Alternative to using `forwardRef` but with fixed type inference.\n * @see [How To Use forwardRef With Generic Components]{@link https://www.totaltypescript.com/forwardref-with-generic-components}\n */\nexport const fixedForwardRef = <P, T>(render: (props: P, ref: Ref<T>) => _RenderResult): ((props: P & { ref?: Ref<T> }) => _RenderResult) =>\n    forwardRef(render);\n\nexport default fixedForwardRef;\n","import { identity, isFunction, noop, sameValue } from '../../../utils';\nimport { MemoComparator, MemoComparatorGetters, MemoComparatorProp } from './types';\n\nexport const memoComparator = (() => {\n    const _comparedProps = new Set<string>();\n\n    const _propHasChanged = <T = {}>(prev: T, next: T, prop: MemoComparatorProp<T>, getters?: MemoComparatorGetters<T>) => {\n        let getter = getters?.[prop];\n        getter = isFunction(getter) ? getter : identity;\n        return !sameValue(getter(prev[prop]), getter(next[prop]));\n    };\n\n    const comparator = (<T = {}>(getters?: MemoComparatorGetters<T>) =>\n        (prev: T, next: T) => {\n            try {\n                for (const prop in prev) {\n                    _comparedProps.add(prop);\n                    if (_propHasChanged(prev, next, prop, getters)) return false;\n                }\n\n                for (const prop in next) {\n                    if (_comparedProps.has(prop)) continue;\n                    _comparedProps.add(prop);\n                    if (_propHasChanged(prev, next, prop, getters)) return false;\n                }\n\n                return true;\n            } finally {\n                _comparedProps.clear();\n            }\n        }) as MemoComparator;\n\n    return Object.defineProperty(comparator, 'exclude', { value: noop });\n})();\n\nexport default memoComparator;\n","import classnames from 'classnames';\nimport { JSX } from 'preact';\n\nconst EXCESS_WHITESPACE_CHAR = /^\\s+|\\s+(?=\\s|$)/g;\n\nexport const parseClassName = (fallbackClassName: string, className: JSX.Signalish<string | undefined>): undefined | string => {\n    const classes = className ? (typeof className === 'string' ? className : className?.value ?? '') : '';\n    return classes.replace(EXCESS_WHITESPACE_CHAR, '') || fallbackClassName.replace(EXCESS_WHITESPACE_CHAR, '') || undefined;\n};\n\nexport const getClassName = (\n    className?: JSX.Signalish<string | undefined>,\n    fallbackClassName?: JSX.Signalish<string | undefined>,\n    requiredClassName?: JSX.Signalish<string | undefined>\n) => classnames(parseClassName('', requiredClassName), parseClassName(parseClassName('', fallbackClassName) || '', className));\n\nexport const getModifierClasses = (prefix: string, modifiers: string[] = [], baseClasses: string[] = []): string =>\n    classnames([...baseClasses, ...modifiers?.map(m => (prefix ? `${prefix}--${m}` : m))]);\n","import { SignalLike } from 'preact';\nimport { boolify } from '../value/bool';\n\nexport const parseBooleanProp = (prop: boolean | SignalLike<boolean | undefined> | undefined): boolean =>\n    boolify(prop, (prop as SignalLike<boolean | undefined>)?.value ?? prop);\n","export const DEFAULT_BUTTON_CLASSNAME = 'adyen-pe-button';\nexport const BUTTON_ANCHOR_CLASSNAME = 'adyen-pe-button__anchor';\nexport const BUTTON_ACTION_CLASSNAME = `${DEFAULT_BUTTON_CLASSNAME}-actions`;\nexport const ICON_BUTTON_CLASSNAME = `${DEFAULT_BUTTON_CLASSNAME}--icon`;\nexport const ICON_BUTTON_CONTENT_CLASSNAME = `${DEFAULT_BUTTON_CLASSNAME}--icon-content`;\nexport const BUTTON_ACTION_CONTAINER_CLASSNAME = `${BUTTON_ACTION_CLASSNAME}__container-wrapper`;\nexport const BUTTON_LABEL_CLASSNAME = `${DEFAULT_BUTTON_CLASSNAME}__label`;\nexport const BUTTON_ICON_RIGHT_CLASSNAME = `${DEFAULT_BUTTON_CLASSNAME}__icon-right`;\nexport const BUTTON_ICON_LEFT_CLASSNAME = `${DEFAULT_BUTTON_CLASSNAME}__icon-left`;\nexport const BUTTON_CONDENSED_CLASSNAME = `${DEFAULT_BUTTON_CLASSNAME}--condensed`;\nexport const BUTTON_FULL_WIDTH_CLASSNAME = `${DEFAULT_BUTTON_CLASSNAME}--full-width`;\nexport const BUTTON_LOADING_CLASSNAME = `${DEFAULT_BUTTON_CLASSNAME}--loading`;\nexport const BUTTON_LABEL_CENTERED_CLASSNAME = `${BUTTON_LABEL_CLASSNAME}--centered`;\n","import './Spinner.scss';\n\ninterface SpinnerProps {\n    /**\n     * Whether the spinner should be rendered inline\n     */\n    inline?: boolean;\n\n    /**\n     * size of the spinner (x-small/small/medium/large)\n     */\n    size?: 'x-small' | 'small' | 'medium' | 'large';\n}\n\n/**\n * Default Loading Spinner\n * @param props -\n */\nconst Spinner = ({ inline = false, size = 'large' }: SpinnerProps) => (\n    <div className={`adyen-pe-spinner__wrapper ${inline ? 'adyen-pe-spinner__wrapper--inline' : ''}`}>\n        <div className={`adyen-pe-spinner adyen-pe-spinner--${size}`} />\n    </div>\n);\n\nexport default Spinner;\n","export const DEFAULT_TYPOGRAPHY_CLASSNAME = 'adyen-pe-typography';\n","export enum TypographyVariant {\n    CAPTION = 'caption',\n    BODY = 'body',\n    SUBTITLE = 'subtitle',\n    TITLE = 'title',\n}\n\nexport enum TypographyModifier {\n    WIDE = 'wide',\n    STRONGER = 'stronger',\n    STRONGER_WIDE = 'stronger-wide',\n    STRONGEST = 'strongest',\n    STRONGEST_WIDE = 'strongest-wide',\n    MEDIUM = 'm',\n    LARGE = 'l',\n    MOBILE = 'mobile',\n}\n\nexport enum TypographyElement {\n    H1 = 'h1',\n    H2 = 'h2',\n    H3 = 'h3',\n    H4 = 'h4',\n    H5 = 'h5',\n    H6 = 'h6',\n    DIV = 'div',\n    PARAGRAPH = 'p',\n    SPAN = 'span',\n}\n","import { DEFAULT_TYPOGRAPHY_CLASSNAME } from './constants';\nimport cx from 'classnames';\nimport { useMemo } from 'preact/hooks';\nimport { TypographyElement, TypographyModifier, TypographyVariant } from './types';\nimport { memo, PropsWithChildren } from 'preact/compat';\nimport './Typography.scss';\nimport { ComponentChild } from 'preact';\n\ninterface TypographyProps {\n    id?: string;\n    el?: TypographyElement;\n    stronger?: boolean;\n    strongest?: boolean;\n    variant: TypographyVariant;\n    medium?: boolean;\n    large?: boolean;\n    wide?: boolean;\n    children: ComponentChild;\n    className?: string;\n    testId?: string;\n}\n\nfunction Typography({ el, id, className, stronger, strongest, variant, medium, large, testId, wide, children }: PropsWithChildren<TypographyProps>) {\n    const Tag = el || 'p';\n    const conditionalClasses = useMemo(\n        () => ({\n            // Caption\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.CAPTION}`]: variant === TypographyVariant.CAPTION,\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.CAPTION}-${TypographyModifier.WIDE}`]:\n                variant === TypographyVariant.CAPTION && wide,\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.CAPTION}-${TypographyModifier.STRONGER}`]:\n                variant === TypographyVariant.CAPTION && stronger,\n\n            // Body\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.BODY}`]: variant === TypographyVariant.BODY,\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.BODY}-${TypographyModifier.WIDE}`]: variant === TypographyVariant.BODY && wide,\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.BODY}-${TypographyModifier.STRONGER}`]:\n                variant === TypographyVariant.BODY && stronger,\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.BODY}-${TypographyModifier.STRONGEST}`]:\n                variant === TypographyVariant.BODY && strongest,\n\n            // Subtitle\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.SUBTITLE}`]: variant === TypographyVariant.SUBTITLE,\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.SUBTITLE}-${TypographyModifier.STRONGER}`]:\n                variant === TypographyVariant.SUBTITLE && stronger,\n\n            // Title\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.TITLE}`]: variant === TypographyVariant.TITLE && !medium && !large,\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.TITLE}-${TypographyModifier.MEDIUM}`]:\n                variant === TypographyVariant.TITLE && medium,\n            [`${DEFAULT_TYPOGRAPHY_CLASSNAME}--${TypographyVariant.TITLE}-${TypographyModifier.LARGE}`]: variant === TypographyVariant.TITLE && large,\n        }),\n        [variant, wide, stronger, medium, large, strongest]\n    );\n\n    return (\n        <Tag id={id} className={cx([`${DEFAULT_TYPOGRAPHY_CLASSNAME}`, conditionalClasses, className])} data-testid={testId}>\n            {children}\n        </Tag>\n    );\n}\n\nexport default memo(Typography);\n","import { MouseEventHandler } from 'preact';\nimport { getModifierClasses } from '../../../../utils/preact';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport cx from 'classnames';\nimport {\n    BUTTON_LABEL_CENTERED_CLASSNAME,\n    BUTTON_CONDENSED_CLASSNAME,\n    BUTTON_FULL_WIDTH_CLASSNAME,\n    BUTTON_ICON_LEFT_CLASSNAME,\n    BUTTON_ICON_RIGHT_CLASSNAME,\n    BUTTON_LABEL_CLASSNAME,\n    BUTTON_LOADING_CLASSNAME,\n    ICON_BUTTON_CLASSNAME,\n    ICON_BUTTON_CONTENT_CLASSNAME,\n} from '../constants';\nimport Spinner from '../../Spinner';\nimport Typography from '../../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../Typography/types';\nimport { BaseButtonProps, RegularButtonProps } from '../types';\nimport { PropsWithChildren } from 'preact/compat';\n\nconst useButton = (\n    className: string,\n    classNameModifiers: string[],\n    defaultClassName: string,\n    disabled: boolean,\n    props: PropsWithChildren<BaseButtonProps>,\n    type: RegularButtonProps['type'],\n    onClick?: MouseEventHandler<HTMLButtonElement> | MouseEventHandler<HTMLAnchorElement>\n) => {\n    const { children, iconLeft, iconRight, iconButton = false, fullWidth, condensed, state = 'default' } = props;\n\n    const click = useCallback(\n        (e: any) => {\n            // Only prevent default for non-submit buttons\n            // Submit buttons should trigger form submission naturally\n            if (type !== 'submit') {\n                e.preventDefault();\n            }\n\n            if (!disabled) {\n                onClick?.(e);\n            }\n        },\n        [disabled, onClick, type]\n    );\n\n    const classes = useMemo(\n        () => getModifierClasses(defaultClassName, classNameModifiers, [defaultClassName, className]),\n        [defaultClassName, classNameModifiers, className]\n    );\n\n    const allProps = useMemo(\n        () => ({\n            ...props,\n            className: cx(classes, {\n                [ICON_BUTTON_CLASSNAME]: iconButton,\n                [BUTTON_CONDENSED_CLASSNAME]: condensed,\n                [BUTTON_FULL_WIDTH_CLASSNAME]: fullWidth,\n                [BUTTON_LOADING_CLASSNAME]: state === 'loading',\n            }),\n            disabled: disabled || state === 'loading',\n        }),\n        [classes, condensed, disabled, fullWidth, iconButton, props, state]\n    );\n\n    const allChildren = useMemo(\n        () =>\n            iconButton ? (\n                <div className={`${ICON_BUTTON_CONTENT_CLASSNAME}`}>{children}</div>\n            ) : (\n                <>\n                    {state === 'loading' && <Spinner size={'x-small'} />}\n                    {iconLeft && <span className={BUTTON_ICON_LEFT_CLASSNAME}>{iconLeft}</span>}\n                    <Typography\n                        className={cx(BUTTON_LABEL_CLASSNAME, {\n                            [BUTTON_LABEL_CENTERED_CLASSNAME]: props.align === 'center',\n                        })}\n                        el={TypographyElement.SPAN}\n                        variant={TypographyVariant.BODY}\n                    >\n                        {children}\n                    </Typography>\n                    {iconRight && <span className={BUTTON_ICON_RIGHT_CLASSNAME}>{iconRight}</span>}\n                </>\n            ),\n        [children, iconButton, iconLeft, iconRight, props.align, state]\n    );\n\n    return { classes, click, allChildren, allProps };\n};\n\nexport default useButton;\n","import type { VNode, h } from 'preact';\nimport { AnchorHTMLAttributes, ButtonHTMLAttributes } from 'preact/compat';\n\nexport type BaseButtonProps = {\n    classNameModifiers?: string[];\n    variant?: ButtonVariant;\n    iconLeft?: VNode<Element>;\n    iconRight?: VNode<Element>;\n    inline?: boolean;\n    iconButton?: boolean;\n    fullWidth?: boolean;\n    condensed?: boolean;\n    state?: 'loading' | 'default';\n    disabled?: h.JSX.Signalish<boolean | undefined>;\n    align?: 'center' | 'left' | 'right';\n};\n\nexport interface AnchorButtonProps extends AnchorHTMLAttributes<HTMLAnchorElement>, BaseButtonProps {}\n\nexport interface RegularButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, BaseButtonProps {}\n\nexport type ButtonProps = AnchorButtonProps | RegularButtonProps;\n\nexport enum ButtonVariant {\n    PRIMARY = 'primary',\n    SECONDARY = 'secondary',\n    TERTIARY = 'tertiary',\n    TERTIARY_WITH_BACKGROUND = 'tertiary-with-background',\n    LINK = 'link',\n}\n","import useButton from './hooks/useButton';\nimport { DEFAULT_BUTTON_CLASSNAME } from './constants';\nimport { fixedForwardRef, parseBooleanProp, parseClassName } from '../../../utils/preact';\nimport { Ref } from 'preact';\nimport { useMemo } from 'preact/hooks';\nimport { ButtonVariant, RegularButtonProps } from './types';\nimport './Button.scss';\n\n// TODO: Reuse BaseButton component within Button component\nfunction Button(props: RegularButtonProps, ref: Ref<HTMLButtonElement> | undefined) {\n    const classNameValue = useMemo(() => parseClassName('', props.className) || '', [props.className]);\n    const disabledValue = useMemo(() => parseBooleanProp(props.disabled || false), [props.disabled]);\n\n    const { click, allChildren, allProps } = useButton(\n        classNameValue,\n        [...(props.classNameModifiers || []), props.variant || ButtonVariant.PRIMARY],\n        DEFAULT_BUTTON_CLASSNAME,\n        disabledValue,\n        props,\n        props.type,\n        props.onClick\n    );\n\n    const { classNameModifiers, ...restOfAllProps } = allProps;\n    return (\n        <button {...restOfAllProps} ref={ref as Ref<HTMLButtonElement>} type={props.type || 'button'} onClick={click}>\n            {allChildren}\n        </button>\n    );\n}\n\nexport default fixedForwardRef(Button);\n","import { createContext } from 'preact';\nimport { noop } from '../../utils';\nimport { CommonPropsTypes, CoreProviderProps } from './types';\nimport Localization from '../Localization';\n\nexport const CoreContext = createContext<CoreProviderProps & { i18n: Localization['i18n'] }>({\n    i18n: new Localization().i18n,\n    loadingContext: '',\n    commonProps: {} as CommonPropsTypes,\n    updateCore: noop,\n    componentRef: { current: null },\n});\n","import { useContext } from 'preact/hooks';\nimport { CoreContext } from './CoreContext';\n\nconst useCoreContext = () => useContext(CoreContext);\n\nexport default useCoreContext;\n","import { JSX } from 'preact';\nimport cx from 'classnames';\nimport Button from '../Button';\nimport Typography from '../Typography/Typography';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\nimport { TranslationKey } from '../../../translations';\nimport { useCallback } from 'preact/hooks';\nimport './ErrorMessageDisplay.scss';\n\nconst BASE_CLASS = 'adyen-pe-error-message-display';\nexport const IMAGE_BREAKPOINT_MEDIUM_PX = 680;\n\nconst classes = {\n    base: BASE_CLASS,\n    base_absolutePosition: BASE_CLASS + '--absolute-position',\n    base_centered: BASE_CLASS + '--centered',\n    base_outlined: BASE_CLASS + '--outlined',\n    base_withBackground: BASE_CLASS + '--with-background',\n    base_withHeaderOffset: BASE_CLASS + '--with-header-offset',\n    base_condensed: BASE_CLASS + '--condensed',\n    button: BASE_CLASS + '__button',\n    illustration: BASE_CLASS + '__illustration',\n};\n\ntype ErrorMessageDisplayProps = {\n    title: TranslationKey;\n    message?: TranslationKey | TranslationKey[];\n    imageDesktop?: string;\n    imageMobile?: string;\n    withImage?: boolean;\n    centered?: boolean;\n    refreshComponent?: boolean;\n    onContactSupport?: () => void;\n    onRefreshComponent?: () => void;\n    translationValues?: { [k in TranslationKey]?: JSX.Element | null };\n    absolutePosition?: boolean;\n    outlined?: boolean;\n    renderSecondaryButton?: () => JSX.Element;\n    withBackground?: boolean;\n    withHeaderOffset?: boolean;\n    condensed?: boolean;\n};\n\nconst ErrorMessageSeparator = () => (\n    <>\n        {' ' /* collapsed whitespace */}\n        <br />\n        {' ' /* collapsed whitespace */}\n    </>\n);\n\nexport const ErrorMessageDisplay = ({\n    title,\n    message,\n    imageDesktop,\n    imageMobile,\n    withImage,\n    centered,\n    refreshComponent,\n    onRefreshComponent,\n    onContactSupport,\n    translationValues,\n    absolutePosition = true,\n    outlined = true,\n    renderSecondaryButton,\n    withBackground,\n    withHeaderOffset,\n    condensed,\n}: ErrorMessageDisplayProps) => {\n    const { i18n, updateCore, getImageAsset } = useCoreContext();\n\n    const renderMessage = useCallback(\n        (errorMessage: TranslationKey | TranslationKey[]) =>\n            Array.isArray(errorMessage)\n                ? errorMessage.map((message, i) => (\n                      <>\n                          {i > 0 && <ErrorMessageSeparator />}\n                          {i18n.get(message)}\n                          {translationValues?.[message]}\n                      </>\n                  ))\n                : i18n.get(errorMessage),\n        [i18n, translationValues]\n    );\n\n    return (\n        <div\n            className={cx(classes.base, {\n                [classes.base_absolutePosition]: absolutePosition,\n                [classes.base_centered]: centered,\n                [classes.base_outlined]: outlined,\n                [classes.base_withBackground]: withBackground !== false && !outlined,\n                [classes.base_withHeaderOffset]: withHeaderOffset,\n                [classes.base_condensed]: condensed,\n            })}\n        >\n            {(imageDesktop || imageMobile || withImage) && (\n                <div className={classes.illustration}>\n                    <picture>\n                        <source type=\"image/svg+xml\" media={`(min-width: ${IMAGE_BREAKPOINT_MEDIUM_PX}px)`} srcSet={imageDesktop} />\n                        <source\n                            type=\"image/svg+xml\"\n                            media={`(max-width: ${IMAGE_BREAKPOINT_MEDIUM_PX}px)`}\n                            srcSet={imageMobile ?? getImageAsset?.({ name: 'wrong-environment', subFolder: 'images/small' })}\n                        />\n                        <img srcSet={imageDesktop ?? getImageAsset?.({ name: 'wrong-environment' })} alt=\"\" />\n                    </picture>\n                </div>\n            )}\n\n            <Typography el={TypographyElement.DIV} variant={TypographyVariant.TITLE}>\n                {i18n.get(title)}\n            </Typography>\n\n            {message && <Typography variant={TypographyVariant.BODY}>{renderMessage(message)}</Typography>}\n\n            {(onContactSupport || refreshComponent || renderSecondaryButton) && (\n                <div className={classes.button}>\n                    {renderSecondaryButton && renderSecondaryButton()}\n                    {onContactSupport && <Button onClick={onContactSupport}>{i18n.get('common.actions.contactSupport.labels.reachOut')}</Button>}\n                    {!onContactSupport && refreshComponent && (\n                        <Button onClick={onRefreshComponent ?? updateCore}>{i18n.get('common.actions.refresh.labels.default')}</Button>\n                    )}\n                </div>\n            )}\n        </div>\n    );\n};\n","import { isFunction } from '../../../../../../utils';\nimport AuthSession from '../../../AuthSession';\nimport type { ExternalComponentAvailabilityRegistry } from '../types';\n\nconst getComponentAvailabilityFromEndpoint = (context: AuthSession['context'], endpoint: keyof AuthSession['context']['endpoints']) => {\n    return isFunction(context.endpoints[endpoint]);\n};\n\nconst componentAvailabilityRegistry: ExternalComponentAvailabilityRegistry = {\n    transactions: context => getComponentAvailabilityFromEndpoint(context, 'getTransactions'),\n    transactionDetails: context => getComponentAvailabilityFromEndpoint(context, 'getTransaction'),\n    payouts: context => getComponentAvailabilityFromEndpoint(context, 'getPayouts'),\n    payoutDetails: context => getComponentAvailabilityFromEndpoint(context, 'getPayout'),\n    reports: context => getComponentAvailabilityFromEndpoint(context, 'getReports'),\n    capitalOverview: context => getComponentAvailabilityFromEndpoint(context, 'getDynamicGrantOffersConfiguration'),\n    capitalOffer: context => getComponentAvailabilityFromEndpoint(context, 'getDynamicGrantOffer'),\n    disputes: context => getComponentAvailabilityFromEndpoint(context, 'getDisputeList'),\n    disputesManagement: context => getComponentAvailabilityFromEndpoint(context, 'getDisputeDetail'),\n    paymentLinksOverview: context => getComponentAvailabilityFromEndpoint(context, 'getPaymentLinks'),\n    paymentLinkCreation: context => getComponentAvailabilityFromEndpoint(context, 'getPayByLinkConfiguration'),\n    paymentLinkSettings: context => getComponentAvailabilityFromEndpoint(context, 'savePayByLinkSettings'),\n    paymentLinkDetails: context => getComponentAvailabilityFromEndpoint(context, 'getPayByLinkPaymentLinkById'),\n};\n\nexport default componentAvailabilityRegistry;\n","import AuthSession from '../AuthSession';\nimport { isWatchlistUnsubscribeToken } from '../../../../primitives/reactive/watchlist';\nimport { createDeferred } from '../../../../primitives/async/deferred';\nimport { boolOrTrue } from '../../../../utils';\n\nconst sessionReady = async (session: AuthSession) => {\n    const ready = createDeferred<void>();\n    const readyPromise = ready.promise;\n    const refreshInProgress = session.context.refreshing;\n    let didTriggerRefresh: boolean | undefined = undefined;\n    let canRefreshSession: boolean | undefined = undefined;\n\n    let sessionUnsubscribe = session.subscribe(maybeUnsubscribeToken => {\n        if (isWatchlistUnsubscribeToken(maybeUnsubscribeToken)) {\n            ready.resolve();\n            return;\n        }\n\n        didTriggerRefresh ??= session.context.refreshing;\n\n        if (session.context.refreshing) return;\n\n        if (boolOrTrue(session.context.isExpired)) {\n            if ((canRefreshSession ??= !(refreshInProgress || didTriggerRefresh))) {\n                canRefreshSession = false;\n                session.refresh();\n                return;\n            }\n        }\n\n        // Session has been refreshed (likely to have an active session)\n        ready.resolve();\n    });\n\n    readyPromise.finally(() => {\n        // Unsubscribe from session immediately readyPromise settles\n        sessionUnsubscribe();\n        sessionUnsubscribe = null!;\n    });\n\n    return readyPromise;\n};\n\nexport default sessionReady;\n","import { boolOrFalse } from '../../../../../utils';\nimport componentAvailabilityRegistry from './helpers/componentAvailabilityRegistry';\nimport type { ExternalComponentType } from '../../../../../components/types';\nimport AuthSession from '../../AuthSession';\nimport sessionReady from '../sessionReady';\n\nconst sessionAwareComponentAvailability = async (type: ExternalComponentType, session: AuthSession) => {\n    await sessionReady(session);\n    return boolOrFalse(await componentAvailabilityRegistry[type]?.(session.context));\n};\n\nexport default sessionAwareComponentAvailability;\n","import { ExternalComponentType } from '../../../../../../components/types';\nimport { TranslationKey } from '../../../../../../translations';\n\nconst componentAvailabilityErrors = (type: ExternalComponentType): TranslationKey => {\n    switch (type) {\n        case 'transactions':\n            return 'transactions.overview.errors.unavailable';\n        case 'payouts':\n            return 'payouts.overview.errors.unavailable';\n        case 'reports':\n            return 'reports.overview.errors.unavailable';\n        case 'disputes':\n            return 'disputes.overview.common.errors.unavailable';\n        case 'transactionDetails':\n            return 'transactions.details.errors.unavailable';\n        case 'payoutDetails':\n            return 'payouts.details.errors.unavailable';\n        case 'disputesManagement':\n            return 'disputes.management.common.errors.unavailable';\n        case 'paymentLinksOverview':\n            return 'payByLink.overview.errors.unavailable';\n        default:\n            return 'common.errors.componentUnavailable';\n    }\n};\n\nexport default componentAvailabilityErrors;\n","import { createContext, toChildArray } from 'preact';\nimport { useContext, useEffect, useState } from 'preact/hooks';\nimport { ErrorMessageDisplay } from '../../components/internal/ErrorMessageDisplay/ErrorMessageDisplay';\nimport { AuthSession } from './session/AuthSession';\nimport { isWatchlistUnsubscribeToken } from '../../primitives/reactive/watchlist';\nimport sessionAwareComponentAvailability, { componentAvailabilityErrors } from './session/utils/sessionAwareComponentAvailability';\nimport { asyncNoop, EMPTY_OBJECT, isUndefined, noop } from '../../utils';\nimport type { ConfigProviderProps } from './types';\n\nconst ConfigContext = createContext<AuthSession['context'] & Pick<AuthSession, 'http' | 'refresh'>>({\n    endpoints: EMPTY_OBJECT,\n    extraConfig: EMPTY_OBJECT,\n    hasError: false,\n    http: asyncNoop,\n    isExpired: undefined,\n    isFrozen: false,\n    refresh: noop,\n    refreshing: false,\n});\n\nexport const ConfigProvider = ({ children, session, type }: ConfigProviderProps) => {\n    const { context, http, refresh } = session;\n    const [, setContextCounter] = useState(0);\n    const [unsubscribeCounter, setUnsubscribeCounter] = useState(0);\n    const [hasPermission, setHasPermission] = useState<undefined | boolean>();\n\n    useEffect(() => {\n        sessionAwareComponentAvailability(type, session).then(setHasPermission);\n    }, [session, type]);\n\n    useEffect(() => {\n        return session.subscribe(maybeContext => {\n            const stateUpdater = isWatchlistUnsubscribeToken(maybeContext) ? setUnsubscribeCounter : setContextCounter;\n            stateUpdater(count => count + 1);\n        });\n    }, [session, unsubscribeCounter]);\n\n    return (\n        <ConfigContext.Provider value={{ ...context, http, refresh }}>\n            {!isUndefined(hasPermission) &&\n                (hasPermission ? (\n                    toChildArray(children)\n                ) : (\n                    <ErrorMessageDisplay\n                        withImage\n                        centered\n                        title={'common.errors.somethingWentWrong'}\n                        message={[componentAvailabilityErrors(type), 'common.errors.contactSupport']}\n                    />\n                ))}\n        </ConfigContext.Provider>\n    );\n};\n\nexport const useConfigContext = () => useContext(ConfigContext);\nexport default useConfigContext;\n","import { useState, useCallback, useRef, useMemo, useEffect } from 'preact/hooks';\nimport { ALREADY_RESOLVED_PROMISE, EMPTY_OBJECT, isFunction, isNumber, tryResolve } from '../../utils';\nimport { AdyenErrorResponse } from '../../core/Http/types';\n\ntype MutationOptions<ResponseType> = {\n    onSuccess?: (data: ResponseType) => void | Promise<void>;\n    onError?: (error: Error | AdyenErrorResponse) => void | Promise<void>;\n    onSettled?: (data: ResponseType | undefined, error: Error | AdyenErrorResponse | null) => void | Promise<void>;\n    retry?: number | boolean;\n    retryDelay?: number | ((retryAttempt: number) => number);\n    shouldRetry?: (error: AdyenErrorResponse) => boolean;\n};\ntype MutationStatus = 'idle' | 'loading' | 'success' | 'error';\n\nconst catchCallback = (reason: unknown) => {\n    setTimeout(() => {\n        throw reason;\n    }, 0);\n};\n\nfunction useMutation<queryFn extends (...args: any[]) => any, ResponseType extends Awaited<ReturnType<queryFn>>>({\n    queryFn,\n    options,\n}: {\n    queryFn: queryFn | undefined;\n    options?: MutationOptions<ResponseType>;\n}) {\n    const { retry = false, retryDelay = 1000, onSuccess, onError, onSettled, shouldRetry } = options || (EMPTY_OBJECT as NonNullable<typeof options>);\n\n    const [data, setData] = useState<ResponseType | null>(null);\n    const [error, setError] = useState<Error | AdyenErrorResponse | null>(null);\n    const [status, setStatus] = useState<MutationStatus>('idle');\n\n    // Use refs for mutable values that shouldn't trigger re-renders\n    const mountedRef = useRef(true);\n    const retryCountRef = useRef(0);\n\n    const reset = useCallback(() => {\n        setData(null);\n        setError(null);\n        setStatus('idle');\n        retryCountRef.current = 0;\n    }, []);\n\n    const resetRetries = useCallback(() => {\n        retryCountRef.current = 0;\n    }, []);\n\n    const mutate = useCallback(\n        async (...variables: Parameters<queryFn>): Promise<ResponseType> => {\n            try {\n                setStatus('loading');\n                setError(null);\n\n                const result = await queryFn?.(...variables);\n\n                // Only update state if component is still mounted\n                if (mountedRef.current) {\n                    setData(result);\n                    setStatus('success');\n                }\n\n                ALREADY_RESOLVED_PROMISE.then(() => {\n                    onSuccess && tryResolve(onSuccess, result).catch(catchCallback);\n                    onSettled && tryResolve(onSettled, result, null).catch(catchCallback);\n                    resetRetries();\n                });\n\n                return result;\n            } catch (error: any) {\n                let maxRetries = 0;\n                if (isNumber(retry) && (shouldRetry ? shouldRetry(error) : true)) {\n                    maxRetries = Math.max(0, Math.floor(retry));\n                } else {\n                    maxRetries = 0;\n                }\n\n                // Handle retries\n                if (retryCountRef.current++ < maxRetries) {\n                    const delay = isFunction(retryDelay) ? retryDelay(retryCountRef.current) : retryDelay ?? 1000;\n\n                    await new Promise(resolve => setTimeout(resolve, delay));\n\n                    return mutate(...variables);\n                }\n\n                // Only update state if component is still mounted\n                if (mountedRef.current) {\n                    setError(error);\n                    setStatus('error');\n                }\n\n                // Run error callbacks\n                ALREADY_RESOLVED_PROMISE.then(() => {\n                    onError && tryResolve(onError, error).catch(catchCallback);\n                    onSettled && tryResolve(onSettled, undefined, error).catch(catchCallback);\n                    resetRetries();\n                });\n\n                throw error;\n            }\n        },\n        [queryFn, onSuccess, onSettled, retry, shouldRetry, retryDelay, resetRetries, onError]\n    );\n\n    // Cleanup on unmount\n    useEffect(() => {\n        return () => {\n            mountedRef.current = false;\n        };\n    }, []);\n\n    return useMemo(\n        () => ({\n            data,\n            error,\n            status,\n            isIdle: status === 'idle',\n            isLoading: status === 'loading',\n            isSuccess: status === 'success',\n            isError: status === 'error',\n            mutate,\n            reset,\n        }),\n        [data, error, status, mutate, reset]\n    );\n}\n\nexport default useMutation;\n","import { useCallback } from 'preact/hooks';\nimport { useConfigContext } from '../../core/ConfigContext';\nimport useMutation from '../useMutation/useMutation';\nimport { EmbeddedEventItem } from '../../core/Analytics/analytics/user-events';\nimport { encodeAnalyticsEvent } from '../../core/Analytics/analytics/utils';\nimport { ExternalComponentType } from '../../components/types';\nimport { EMPTY_OBJECT } from '../../utils';\n\nexport const usePushAnalyticEvent = () => {\n    const { sendTrackEvent } = useConfigContext().endpoints;\n\n    const { mutate: sendAnalytics } = useMutation({\n        queryFn: sendTrackEvent,\n    });\n\n    const track = useCallback(\n        (options: URLSearchParams, componentName?: ExternalComponentType) =>\n            sendAnalytics?.(\n                {\n                    body: options.toString(),\n                    contentType: 'application/x-www-form-urlencoded',\n                    keepalive: true,\n                },\n                {\n                    ...(componentName\n                        ? {\n                              query: {\n                                  component: componentName,\n                              },\n                          }\n                        : EMPTY_OBJECT),\n                }\n            ),\n        [sendAnalytics]\n    );\n\n    return useCallback(\n        (options: EmbeddedEventItem) => {\n            const componentName = options.properties.componentName as ExternalComponentType;\n            const data = encodeAnalyticsEvent(options);\n            if (data) {\n                track(data, componentName);\n            }\n        },\n        [track]\n    );\n};\n","import type { ComponentChildren } from 'preact';\nimport { PropsWithChildren } from 'preact/compat';\nimport { useCallback, useEffect, useMemo } from 'preact/hooks';\nimport { AnalyticsContext } from './AnalyticsContext';\nimport { createUserEvents, type EventQueueItem } from '../../Analytics/analytics/user-events';\nimport { usePushAnalyticEvent } from '../../../hooks/useAnalytics/usePushAnalyticEvent';\nimport { ExternalComponentType } from '../../../components/types';\n\nexport interface AnalyticsProviderProps {\n    componentName?: ExternalComponentType;\n    analyticsEnabled: boolean;\n    children?: ComponentChildren;\n}\n\nexport const AnalyticsProvider = ({ children, componentName, analyticsEnabled }: PropsWithChildren<AnalyticsProviderProps>) => {\n    const pushAnalyticsEvent = usePushAnalyticEvent();\n\n    const pushEvent = useCallback(\n        (data: EventQueueItem) => {\n            const { name, properties } = data;\n            pushAnalyticsEvent({\n                event: name,\n                properties: properties || {},\n            });\n        },\n        [pushAnalyticsEvent]\n    );\n\n    const userEvents = useMemo(() => {\n        const userEvents = createUserEvents(analyticsEnabled, componentName);\n\n        userEvents.updateBaseTrackingPayload?.({\n            sdkVersion: process.env.VITE_VERSION,\n            userAgent: navigator.userAgent,\n        });\n\n        return userEvents;\n    }, [analyticsEnabled, componentName]);\n\n    useEffect(() => {\n        if (analyticsEnabled) {\n            userEvents.subscribe?.(pushEvent);\n            return () => userEvents.unsubscribe?.(pushEvent);\n        }\n    }, [analyticsEnabled, pushEvent, userEvents]);\n\n    return <AnalyticsContext.Provider value={userEvents}>{children}</AnalyticsContext.Provider>;\n};\n","import { useCallback, useState } from 'preact/hooks';\n\nconst useBooleanState = (initialState = false) => {\n    const [state, setState] = useState(initialState);\n    const updateState = useCallback((state: boolean) => setState(state), []);\n    const toggleState = useCallback(() => setState(state => !state), []);\n    return [state, updateState, toggleState] as const;\n};\n\nexport default useBooleanState;\n","import { toChildArray } from 'preact';\nimport { useEffect, useMemo } from 'preact/hooks';\nimport { CoreContext } from './CoreContext';\nimport { CoreProviderProps } from './types';\nimport useBooleanState from '../../hooks/useBooleanState';\nimport Localization from '../Localization';\n\n/**\n * CoreProvider Component\n * Wraps a component delaying the render until after the i18n module is fully loaded\n */\nconst CoreProvider = ({\n    i18n = new Localization().i18n,\n    children,\n    commonProps: _commonProps,\n    loadingContext: _loadingContext,\n    updateCore,\n    externalErrorHandler,\n    componentRef,\n    getImageAsset,\n    getDatasetAsset,\n    getCdnDataset,\n    getCdnConfig,\n}: CoreProviderProps) => {\n    const [ready, setReady] = useBooleanState(false);\n    const commonProps = useMemo(() => _commonProps || {}, [_commonProps]);\n    const loadingContext = useMemo(() => _loadingContext ?? '', [_loadingContext]);\n\n    useEffect(() => {\n        (async () => {\n            await i18n?.ready;\n            setReady(true);\n        })().catch();\n    }, []);\n\n    const coreContextValues = useMemo(\n        () => ({\n            i18n,\n            commonProps,\n            loadingContext,\n            updateCore,\n            externalErrorHandler,\n            componentRef,\n            getImageAsset,\n            getDatasetAsset,\n            getCdnConfig,\n            getCdnDataset,\n        }),\n        [\n            commonProps,\n            componentRef,\n            externalErrorHandler,\n            i18n,\n            loadingContext,\n            getImageAsset,\n            getDatasetAsset,\n            getCdnConfig,\n            getCdnDataset,\n            updateCore,\n        ]\n    );\n\n    if (!ready) return null;\n\n    return <CoreContext.Provider value={coreContextValues}>{toChildArray(children)}</CoreContext.Provider>;\n};\n\nexport default CoreProvider;\n","import { ComponentChild, render } from 'preact';\nimport { BaseElementProps, BaseElementState, ExternalComponentType } from '../types';\nimport { isString, uuid } from '../../utils';\n\nclass BaseElement<P> {\n    public static type: ExternalComponentType;\n\n    public _component: ComponentChild | Error;\n    public _node: Document | ShadowRoot | DocumentFragment | Element | null = null;\n    public readonly _id = `${(this.constructor as typeof BaseElement)?.type}-${uuid()}`;\n\n    public defaultProps = {};\n    public props: P & BaseElementProps;\n    public state: BaseElementState = {};\n\n    protected constructor(props: P & BaseElementProps) {\n        this.props = this.formatProps({ ...this?.defaultProps, ...props });\n        this.props.core.registerComponent(this);\n    }\n\n    /**\n     * Executed during creation of any element.\n     * Gives a chance to any component to format the props we're receiving.\n     */\n    protected formatProps(props: P & BaseElementProps): any {\n        return props;\n    }\n\n    /**\n     * Executed on the `data` getter.\n     * Returns the component data necessary for making a request\n     */\n    protected formatData() {\n        return {};\n    }\n\n    protected setState(newState: object): void {\n        this.state = { ...this.state, ...newState };\n    }\n\n    /**\n     * Returns the component data ready to submit to the Checkout API\n     * Note: this does not ensure validity, check isValid first\n     */\n    get data(): any {\n        return {\n            ...this.formatData(),\n            clientStateDataIndicator: true,\n        };\n    }\n\n    public render(): ComponentChild | Error {\n        // render() not implemented in the element\n        throw new Error('Component cannot be rendered.');\n    }\n\n    /**\n     * Mounts an element into the dom\n     * @param domNode - Node (or selector) where we will mount the element\n     * @returns this - the element instance we mounted\n     */\n    public mount(domNode: string): this;\n    public mount(domNode: HTMLElement): this;\n    public mount(domNode: any): any {\n        const node = isString(domNode) ? document.querySelector(domNode) : domNode;\n\n        if (!node) throw new Error('Component could not mount. Root node was not found.');\n\n        // new, if this._node exists then we are \"remounting\" so we first need to unmount if it's not already been done\n        if (this._node) this.unmount();\n\n        this._node = node;\n        this._component = this.render();\n\n        render(this._component, node);\n        return this;\n    }\n\n    /**\n     * Updates props, resets the internal state and remounts the element.\n     * @param props - props to update\n     * @returns this - the element instance\n     */\n    public update(props: P): this {\n        /*\n        // OLD\n        this.props = this.formatProps({ ...this.props, ...props });\n        this.state = {};\n\n        return this.unmount().mount(this._node); // for new mount fny\n        */\n\n        // /*\n        this.props = this.formatProps({ ...this.props, ...props });\n        this._component = this.render();\n\n        if (this._node) render(this._component, this._node);\n        return this;\n\n        // return this.remount(this._component);\n        // */\n    }\n\n    /**\n     * Unmounts an element and mounts it again on the same node i.e. allows mount w/o having to pass a node.\n     * Should be \"private\" & undocumented (although being a public function is useful for testing).\n     * Left in for legacy reasons\n     */\n    public remount(component: BaseElement<any>): this {\n        if (!this._node) throw new Error('Component is not mounted.');\n\n        const newComponent = component || this.render();\n        render(newComponent, this._node);\n        return this;\n    }\n\n    /**\n     * Unmounts an element from the DOM\n     */\n    public unmount(): this {\n        if (this._node) render(null, this._node);\n        return this;\n    }\n\n    /**\n     * Unmounts an element and removes it from the parent instance\n     * For \"destroy\" type cleanup - when you don't intend to use the component again\n     */\n    public remove() {\n        this.unmount();\n        this.props.core.remove(this);\n    }\n}\n\nexport default BaseElement;\n","import cx from 'classnames';\nimport { createRef, RefObject, JSX } from 'preact';\nimport { BaseElementProps, ExternalComponentType, IUIElement, UIElementProps, UIElementStatus } from '../../types';\nimport { AnalyticsProvider } from '../../../core/Context/analytics/AnalyticsProvider';\nimport { ConfigProvider } from '../../../core/ConfigContext';\nimport CoreProvider from '../../../core/Context/CoreProvider';\nimport BaseElement from '../BaseElement';\nimport './UIElement.scss';\n\nexport class UIElement<P> extends BaseElement<P & UIElementProps> implements IUIElement {\n    protected componentRef: UIElement<P> | null = null;\n\n    public componentToRender: (() => JSX.Element) | null = null;\n    public compRef: RefObject<HTMLDivElement>;\n    public customClassNames: string | undefined;\n    public elementRef: UIElement<P> | null;\n    public onContactSupport?: () => void;\n\n    constructor(props: P & UIElementProps & BaseElementProps) {\n        super(props);\n        this.setState = this.setState.bind(this);\n        this.onContactSupport = props.onContactSupport;\n        this.elementRef = this;\n        this.compRef = createRef();\n    }\n\n    get isValid() {\n        return !!this.state.isValid;\n    }\n\n    /**\n     * Get the element's displayable name\n     */\n    get displayName(): ExternalComponentType {\n        return this.type;\n    }\n\n    /**\n     * Get the element accessible name, used in the aria-label of the button that controls selected component\n     */\n    get accessibleName(): string {\n        return this.displayName;\n    }\n\n    /**\n     * Return the type of an element\n     */\n    get type(): ExternalComponentType {\n        return (this.constructor as typeof UIElement)?.type;\n    }\n\n    formatProps(props: P) {\n        return props;\n    }\n\n    /**\n     * Formats the component data output\n     */\n    formatData() {\n        return {\n            ...this.state,\n        };\n    }\n\n    public setState(newState: Record<any, any>): void {\n        this.state = { ...this.state, ...newState };\n    }\n\n    private setUIElementStatus: ((status: string) => void) | undefined;\n\n    public setStatus(status: UIElementStatus, props: P & UIElementProps): this {\n        if (this.componentRef?.setStatus) {\n            this.componentRef.setStatus(status, props);\n        } else {\n            this.setUIElementStatus?.(status);\n        }\n        return this;\n    }\n\n    render() {\n        const core = this.props.core;\n        const externalErrorHandler = this.props.onError || core.onError || null;\n        const updateCore = core.update.bind(core);\n\n        core.session.errorHandler = externalErrorHandler;\n\n        return (\n            <ConfigProvider type={this.type} session={core.session} key={performance.now()}>\n                <CoreProvider\n                    componentRef={this.compRef}\n                    i18n={core.localization.i18n}\n                    getCdnConfig={core.getCdnConfig}\n                    getImageAsset={core.getImageAsset}\n                    getDatasetAsset={core.getDatasetAsset}\n                    getCdnDataset={core.getCdnDataset}\n                    loadingContext={core.loadingContext}\n                    externalErrorHandler={externalErrorHandler}\n                    updateCore={updateCore}\n                >\n                    <AnalyticsProvider componentName={this.displayName} analyticsEnabled={core?.analyticsEnabled ?? true}>\n                        {this.componentToRender && (\n                            <section ref={this.compRef} className={cx('adyen-pe-component', this.customClassNames)}>\n                                <div className=\"adyen-pe-component__container\">{this.componentToRender()}</div>\n                            </section>\n                        )}\n                    </AnalyticsProvider>\n                </CoreProvider>\n            </ConfigProvider>\n        );\n    }\n}\n\nexport default UIElement;\n","import { CONTROL_ELEMENT_PROPERTY } from '../../../../hooks/element/useClickOutside';\n\nexport const popoverUtil = (<T extends Element, U extends Function>() => {\n    let popoverRefs: Array<{ element: T; callback?: U | undefined }> = [];\n\n    const closePopoversOutsideOfClick = (eventPath: EventTarget[]) => {\n        // Check if click is on a control element (button that opens the popover)\n        // If so, let the button's onClick handle the toggle instead of closing here\n        const clickedOnControlElement = eventPath.some(\n            path =>\n                path instanceof Element &&\n                popoverRefs.some(popoverRef => {\n                    const controlElement = (popoverRef.element as any)[CONTROL_ELEMENT_PROPERTY];\n                    return controlElement instanceof Element && controlElement.contains(path as Node);\n                })\n        );\n        if (clickedOnControlElement) return;\n\n        const index = eventPath.reduce((index: number, path: EventTarget) => {\n            const pathMatchIndex = path instanceof Element ? popoverRefs.findIndex(popoverRef => popoverRef.element === path) : -1;\n            if (index === -1 && pathMatchIndex !== -1) return pathMatchIndex;\n            return index;\n        }, -1);\n        if (index === -1) {\n            closeNestedPopovers(0);\n        } else {\n            index + 1 <= popoverRefs.length - 1 && closeNestedPopovers(index + 1);\n        }\n    };\n\n    const remove = (currentRef: T) => {\n        const index = popoverRefs.findIndex(refs => refs.element === currentRef);\n        if (index >= 0) {\n            popoverRefs.splice(index, 1);\n        }\n    };\n\n    const add = (currentRef: T, callback: U | undefined) => {\n        const index = popoverRefs.findIndex(refs => refs.element === currentRef);\n        if (index >= 0) return;\n        popoverRefs.push({ element: currentRef, callback: callback });\n    };\n\n    const closeNestedPopovers = (fromIndex: number) => {\n        const popoverLength = popoverRefs.length;\n        for (let i = fromIndex; i < popoverLength; i++) {\n            popoverRefs?.[i]?.callback?.();\n        }\n        popoverRefs.splice(fromIndex);\n    };\n\n    const closeAll = () => {\n        popoverRefs.forEach(ref => ref?.callback?.());\n        popoverRefs = [];\n    };\n\n    return { add, remove, closeAll, closePopoversOutsideOfClick };\n})();\n","export const REF: unique symbol = Symbol('_ref');\n","export class ReflexError extends Error {}\nexport class UnknownRefError extends ReflexError {}\nexport class MissingReflexActionError extends ReflexError {}\n","import { REF } from './constants';\nimport { MissingReflexActionError } from './errors';\nimport type { Ref, Reflex, Reflexable, ReflexAction } from './types';\nimport { EMPTY_OBJECT, hasOwnProperty, isFunction, isUndefined, sameValue } from '../../../utils';\nimport { RefObject } from 'preact';\n\nexport function assertReflexAction<T = any>(value?: any): asserts value is ReflexAction<T> {\n    if (!isFunction(value)) throw new MissingReflexActionError();\n}\n\nexport const isReflex = <T = any>(value: any): value is Reflex<T> => {\n    try {\n        if (isFunction(value) && hasOwnProperty(value, 'current') && hasOwnProperty(value, REF) && !sameValue(value, (value as Reflex<T>)[REF])) {\n            const notDefined = (value as Reflex<T>).actions.get(EMPTY_OBJECT as ReflexAction<T>);\n            const size = (value as Reflex<T>).actions.size;\n            return isUndefined(notDefined) && Number.isInteger(size) && size >= 0;\n        }\n    } catch {\n        /* Definitely not a reflex, return false outside this block */\n    }\n\n    return false;\n};\n\nexport const unwrap = <T = any>(reflexable: Reflexable<T>): Ref<T> => (isReflex<T>(reflexable) ? unwrap(reflexable[REF]) : reflexable);\n\nexport function isRefObject(ref: any): ref is RefObject<any> {\n    return !!ref.current;\n}\n","import type { Defined, Nullable } from '../../../utils/types';\nimport type { Ref, RefAsCallback, Reflex, Reflexable, ReflexAction, ReflexRecord, ReflexRegister } from './types';\nimport { enumerable, isFunction, sameValue, struct } from '../../../utils';\nimport { assertReflexAction, unwrap } from './helpers';\nimport { UnknownRefError } from './errors';\nimport { REF } from './constants';\n\nexport const createReflexRegister = (() => {\n    const _getRecordForRef = <T = any>(register: WeakMap<NonNullable<Ref>, ReflexRecord>, ref: NonNullable<Ref<T>>): ReflexRecord<T> => {\n        const record = register.get(ref);\n        if (!record) throw new UnknownRefError();\n        return record;\n    };\n\n    const _bindReflexAction = <T = any>(\n        register: WeakMap<NonNullable<Ref>, ReflexRecord>,\n        reflexable: NonNullable<Reflexable<T>>,\n        action?: ReflexAction<T>\n    ): ReflexRecord<T>[0] => {\n        let record: ReflexRecord<T> | undefined;\n        let actions: Defined<typeof record>[1];\n\n        const _ref = unwrap(reflexable) as NonNullable<Ref>;\n\n        try {\n            record = _getRecordForRef(register, _ref);\n        } catch {\n            /**\n             * Ignore the original exception — since this could be a potential\n             * reflex action binding. If no reflex action was provided, throw\n             * an exception to signal the missing reflex action.\n             */\n            assertReflexAction<T>(action);\n        }\n\n        if (record) [, actions] = record;\n        else {\n            const isCallbackRef = isFunction(_ref);\n\n            const _updateCurrentInstance: RefAsCallback<T | undefined> = isCallbackRef\n                ? instance => {\n                      _ref((_current = instance));\n                  }\n                : instance => {\n                      if (_ref) {\n                          _ref.current = instance;\n                          _current = _ref.current;\n                      }\n                  };\n\n            const reflex = (instance => {\n                if (actions.size === 0) {\n                    // Reflex is dead when there are no more reflex actions.\n                    // It should no longer mutate the _ref current instance.\n                    // Binding a new action registers _ref afresh with a new\n                    // reflex.\n                    return;\n                }\n\n                const previous = _current;\n\n                _updateCurrentInstance(instance);\n\n                if (!sameValue(_current, previous)) {\n                    for (const [action] of actions) {\n                        action(_current, previous);\n                    }\n                }\n            }) as Reflex<T>;\n\n            let _current: Nullable<T> = isCallbackRef ? null : _ref.current;\n\n            register.set(_ref, (record = [reflex, (actions = new Map())]));\n\n            Object.defineProperties(reflex, {\n                [REF]: { value: _ref },\n                actions: {\n                    value: struct({\n                        get: { value: actions.get.bind(actions) },\n                        size: { get: () => actions.size },\n                    }),\n                },\n                current: {\n                    get: () => _current,\n                    set: isCallbackRef ? (void 0 as unknown as typeof reflex) : reflex,\n                },\n            });\n        }\n\n        if (action) {\n            actions.set(action, 1 + (actions.get(action) || 0));\n        }\n\n        return record[0];\n    };\n\n    const _unbindReflexAction = <T = any>(\n        register: WeakMap<NonNullable<Ref>, ReflexRecord>,\n        reflexable: Reflexable<T>,\n        action: ReflexAction<T>\n    ): void => {\n        const _ref = unwrap(reflexable);\n        const [, actions] = _getRecordForRef(register, _ref as NonNullable<Ref>);\n        const bindings = actions.get(action) || 0;\n\n        if (bindings === 1) actions.delete(action);\n        else if (bindings > 1) actions.set(action, bindings - 1);\n        if (actions.size === 0 && _ref) register.delete(_ref);\n    };\n\n    return (): ReflexRegister => {\n        const _register = new WeakMap<NonNullable<Ref>, ReflexRecord>();\n        return struct({\n            bind: enumerable(_bindReflexAction.bind(void 0, _register)),\n            unbind: enumerable(_unbindReflexAction.bind(void 0, _register)),\n        }) as ReflexRegister;\n    };\n})();\n\nexport const $globalReflexRegister = createReflexRegister();\nexport default $globalReflexRegister;\n","import type { Reflex, Reflexable, ReflexAction, ReflexContainer, ReflexRegister } from './types';\nimport type { DefinedNullable, Nullable } from '../../../utils/types';\nimport { isNullish, sameValue, struct } from '../../../utils';\nimport { assertReflexAction, unwrap } from './helpers';\nimport { $globalReflexRegister } from './register';\nimport { REF } from './constants';\n\nexport const createIsolatedFauxReflex = <T = any>(action: ReflexAction<T>): Reflex<T> => {\n    assertReflexAction<T>(action);\n\n    const $actions = new WeakMap<ReflexAction<T>, number>([[action, 1]]);\n\n    const reflex = (instance => {\n        if (sameValue(_current, instance)) return;\n        const previous = _current;\n        action((_current = instance), previous);\n    }) as Reflex<T>;\n\n    let _current: Nullable<T> = null;\n\n    return Object.defineProperties(reflex, {\n        [REF]: { value: reflex },\n        actions: {\n            value: struct({\n                get: { value: $actions.get.bind($actions) },\n                size: { value: 1 },\n            }),\n        },\n        current: {\n            get: () => _current,\n            set: reflex,\n        },\n    });\n};\n\nexport const createReflexContainer = <T = any>(register: ReflexRegister = $globalReflexRegister): ReflexContainer<T> => {\n    let _reflex: Nullable<Reflex<T>>;\n    let _reflexable: DefinedNullable<Reflexable<T>> = null;\n    let _reflexAction: ReflexAction<T>;\n    let _released = false;\n\n    const _refreshContainer = (action: ReflexAction<T>) => {\n        _reflex = undefined;\n        _reflexable = null;\n        _reflexAction = action;\n        _released = false;\n    };\n\n    const _releaseContainer = () => {\n        if (!_released) {\n            _unbindReflexAction();\n            _released = true;\n        }\n    };\n\n    const _unbindReflexAction = () => {\n        try {\n            if (!_reflexable) return;\n            register.unbind(_reflexable, _reflexAction);\n        } catch {\n            /* ignore exception for unknown ref */\n        }\n    };\n\n    const _updateContainer = (action: ReflexAction<T>, reflexable?: Nullable<Reflexable<T>>) => {\n        assertReflexAction<T>(action);\n\n        if (_released) _refreshContainer(action);\n\n        const currentReflexable = isNullish(reflexable) ? null : reflexable;\n\n        if (_reflexAction === action && _reflexable === currentReflexable) {\n            if (_reflex) return; // no further update required\n        } else if (_reflexable) {\n            if (sameValue(unwrap(_reflexable), unwrap(currentReflexable!))) {\n                _reflex = register.bind(_reflexable, action);\n                _unbindReflexAction();\n                _reflexAction = action;\n                return; // no further update required\n            }\n\n            _unbindReflexAction();\n        }\n\n        _reflexAction = action;\n\n        _reflex = (_reflexable = currentReflexable) ? register.bind(_reflexable, _reflexAction) : createIsolatedFauxReflex(_reflexAction);\n    };\n\n    return struct<ReflexContainer<T>>({\n        action: { get: () => _reflexAction },\n        reflex: { get: () => _reflex },\n        release: { value: _releaseContainer },\n        update: { value: _updateContainer },\n    });\n};\n\nexport default createReflexContainer;\n","import { useLayoutEffect, useMemo, useRef } from 'preact/hooks';\nimport { createReflexContainer, Reflex, Reflexable, ReflexAction } from '../primitives/reactive/reflex';\nimport type { Nullable } from '../utils/types';\n\nconst useReflex = <T = any>(action: ReflexAction<T>, reflexable?: Nullable<Reflexable<T>>) => {\n    const container = useRef(createReflexContainer<T>());\n\n    useLayoutEffect(() => container.current.release, []);\n\n    return useMemo(() => {\n        container.current.update(action, reflexable);\n        return container.current.reflex as Reflex<T>;\n    }, [action, reflexable]);\n};\n\nexport default useReflex;\n","import { useCallback, useEffect, useRef } from 'preact/hooks';\nimport { popoverUtil } from '../../components/internal/Popover/utils/popoverUtil';\nimport type { Reflexable } from '../../primitives/reactive/reflex';\nimport type { Nullable } from '../../utils/types';\nimport useReflex from '../useReflex';\n\nexport const CONTROL_ELEMENT_PROPERTY: unique symbol = Symbol('__control.Elem.');\n\nexport const enum ClickOutsideVariant {\n    POPOVER = 'POPOVER',\n    DEFAULT = 'DEFAULT',\n}\n\nconst onFocusout = (e: Event) => e.stopImmediatePropagation();\n\nexport const useClickOutside = <T extends Element = Element>(\n    rootElementRef?: Nullable<Reflexable<T>>,\n    callback?: (interactionKeyPressed: boolean) => void,\n    disableClickOutside?: boolean,\n    variant?: ClickOutsideVariant\n) => {\n    const ref = useRef<Nullable<T>>(null);\n    const mouseDownInsideRef = useRef(false);\n\n    const handleClickOutside = useCallback(\n        (e: Event) => {\n            if (!(ref && ref.current)) return;\n\n            const eventPath: EventTarget[] = e.composedPath();\n\n            if (variant === ClickOutsideVariant.POPOVER) {\n                popoverUtil.closePopoversOutsideOfClick(eventPath);\n            } else {\n                let eventPathIndex = 0;\n                let samePath = false;\n                let currentElement: Element | ShadowRoot | null = eventPath[eventPathIndex] as Element | ShadowRoot;\n\n                while (currentElement instanceof Element || currentElement instanceof ShadowRoot) {\n                    if (currentElement instanceof ShadowRoot) {\n                        currentElement = currentElement.host;\n                    }\n\n                    if ((samePath ||= currentElement.isSameNode(ref.current))) break;\n\n                    if ((currentElement as any)?.[CONTROL_ELEMENT_PROPERTY] instanceof Element) {\n                        currentElement = (currentElement as any)[CONTROL_ELEMENT_PROPERTY];\n                        eventPath.length = 0;\n                        continue;\n                    }\n\n                    const nextInPath = eventPath[++eventPathIndex] as Element | ShadowRoot | undefined;\n                    if (nextInPath) {\n                        currentElement = nextInPath;\n                    } else {\n                        if (currentElement.parentElement) {\n                            currentElement = currentElement.parentElement;\n                        } else if (currentElement.parentNode instanceof ShadowRoot) {\n                            currentElement = currentElement.parentNode;\n                        } else {\n                            currentElement = null;\n                        }\n                    }\n                }\n\n                if (callback && !samePath) callback(true);\n            }\n        },\n        [ref, callback, variant]\n    );\n\n    const handleMouseDown = useCallback((e: MouseEvent) => {\n        if (ref.current) {\n            mouseDownInsideRef.current = e.composedPath().includes(ref.current);\n        }\n    }, []);\n\n    const handleClick = useCallback(\n        (e: MouseEvent) => {\n            if (mouseDownInsideRef.current) {\n                mouseDownInsideRef.current = false;\n            } else handleClickOutside(e);\n        },\n        [handleClickOutside]\n    );\n\n    useEffect(() => {\n        if (disableClickOutside || !ref.current) return;\n\n        const element = ref.current;\n        const target = element.getRootNode();\n\n        if (target instanceof ShadowRoot || target instanceof Document) {\n            target.addEventListener('mousedown', handleMouseDown as EventListener, true);\n            target.addEventListener('click', handleClick as EventListener, true);\n\n            if (variant === ClickOutsideVariant.POPOVER) {\n                popoverUtil.add(element, callback);\n            }\n\n            return () => {\n                target.removeEventListener('mousedown', handleMouseDown as EventListener, true);\n                target.removeEventListener('click', handleClick as EventListener, true);\n\n                if (variant === ClickOutsideVariant.POPOVER) {\n                    popoverUtil.remove(element);\n                }\n            };\n        }\n    }, [disableClickOutside, variant, handleMouseDown, handleClick, callback]);\n\n    return useReflex<T>(\n        useCallback(\n            (current: Nullable<T>, previous) => {\n                if (previous instanceof Element) {\n                    previous.removeEventListener('focusout', onFocusout, false);\n                }\n                if (current instanceof Element) {\n                    if (!disableClickOutside) {\n                        current.addEventListener('focusout', onFocusout, false);\n                        ref.current = current;\n                    }\n                } else {\n                    ref.current = null;\n                }\n            },\n            [disableClickOutside]\n        ),\n        rootElementRef\n    );\n};\n","const DIGITS_2 = '2-digit';\nconst LONG = 'long';\nconst NUMERIC = 'numeric';\nconst SHORT = 'short';\nconst SHORT_OFFSET = 'shortOffset';\n\nconst BASE_DATE_FORMAT: Intl.DateTimeFormatOptions = {\n    month: LONG,\n    day: NUMERIC,\n    year: NUMERIC,\n};\n\nconst BASE_TIME_FORMAT: Intl.DateTimeFormatOptions = {\n    hour: DIGITS_2,\n    minute: DIGITS_2,\n};\n\nconst BASE_DATE_TIME_FORMAT: Intl.DateTimeFormatOptions = {\n    ...BASE_DATE_FORMAT,\n    ...BASE_TIME_FORMAT,\n    month: SHORT,\n    hour12: false,\n};\n\nconst BASE_DATE_TIME_MOBILE_FORMAT: Intl.DateTimeFormatOptions = { ...BASE_DATE_TIME_FORMAT, year: undefined };\n\n// Capital\nexport const DATE_FORMAT_CAPITAL_OVERVIEW: Intl.DateTimeFormatOptions = { ...BASE_DATE_FORMAT, month: 'short' };\nexport const DATE_FORMAT_MISSING_ACTION: Intl.DateTimeFormatOptions = { ...BASE_DATE_FORMAT, month: 'long' };\n\n// Disputes\nexport const DATE_FORMAT_DISPUTES: Intl.DateTimeFormatOptions = BASE_DATE_FORMAT;\nexport const DATE_FORMAT_DISPUTE_DETAILS: Intl.DateTimeFormatOptions = {\n    ...BASE_DATE_TIME_FORMAT,\n    hour12: true,\n    timeZoneName: SHORT_OFFSET,\n};\n\n// PayByLink\nexport const DATE_FORMAT_PAYMENT_LINKS_OVERVIEW: Intl.DateTimeFormatOptions = BASE_DATE_TIME_FORMAT;\nexport const DATE_FORMAT_PAYMENT_LINKS_OVERVIEW_EXPIRATION_DATE: Intl.DateTimeFormatOptions = BASE_DATE_TIME_FORMAT;\nexport const DATE_FORMAT_PAYMENT_LINK_DETAILS_TABS: Intl.DateTimeFormatOptions = {\n    ...BASE_DATE_TIME_FORMAT,\n    month: LONG,\n    ...BASE_TIME_FORMAT,\n    timeZoneName: SHORT_OFFSET,\n};\nexport const DATE_FORMAT_PAYMENT_LINK_DETAILS_SUMMARY: Intl.DateTimeFormatOptions = {\n    ...BASE_DATE_TIME_FORMAT,\n    month: LONG,\n    weekday: LONG,\n    timeZoneName: SHORT_OFFSET,\n};\n\n// Payouts\nexport const DATE_FORMAT_PAYOUTS: Intl.DateTimeFormatOptions = BASE_DATE_FORMAT;\nexport const DATE_FORMAT_PAYOUTS_MOBILE: Intl.DateTimeFormatOptions = BASE_DATE_TIME_MOBILE_FORMAT;\nexport const DATE_FORMAT_PAYOUT_DETAILS: Intl.DateTimeFormatOptions = { ...BASE_DATE_FORMAT, weekday: LONG };\n\n// Reports\nexport const DATE_FORMAT_REPORTS: Intl.DateTimeFormatOptions = { ...BASE_DATE_FORMAT, month: SHORT };\n\n// Transactions\nexport const DATE_FORMAT_TRANSACTIONS: Intl.DateTimeFormatOptions = BASE_DATE_TIME_FORMAT;\nexport const DATE_FORMAT_TRANSACTIONS_MOBILE: Intl.DateTimeFormatOptions = BASE_DATE_TIME_MOBILE_FORMAT;\nexport const DATE_FORMAT_TRANSACTION_DETAILS: Intl.DateTimeFormatOptions = {\n    ...BASE_DATE_FORMAT,\n    ...BASE_TIME_FORMAT,\n    weekday: LONG,\n    timeZoneName: SHORT_OFFSET,\n};\n\n// Other\nexport const DATE_FORMAT_RESPONSE_DEADLINE: Intl.DateTimeFormatOptions = {\n    month: SHORT,\n    weekday: LONG,\n    hour: DIGITS_2,\n    minute: NUMERIC,\n    year: undefined,\n    timeZoneName: SHORT_OFFSET,\n};\nexport const DATE_FORMAT_DELIVERY_DATE: Intl.DateTimeFormatOptions = {\n    month: SHORT,\n    weekday: LONG,\n    hour: undefined,\n    minute: undefined,\n    year: 'numeric',\n    timeZoneName: undefined,\n};\n","export * from './dateFormats';\n\nexport const BREAKPOINTS = {\n    sm: 480,\n    md: 768,\n    lg: 1024,\n} as const;\n","import { useEffect, useState } from 'preact/hooks';\nimport useCoreContext from '../core/Context/useCoreContext';\n\nexport const useContainerQuery = <T extends readonly [string, number, { min?: number; max?: number }?]>(query: T) => {\n    const { componentRef } = useCoreContext();\n    const [width, setWidth] = useState(componentRef.current?.offsetWidth || 0);\n    const [type, breakpoint, minMax] = query;\n\n    let queryMatch = false;\n\n    switch (type) {\n        case 'up':\n            queryMatch = width >= breakpoint;\n            break;\n        case 'down':\n            queryMatch = width <= breakpoint;\n            break;\n        case 'only':\n            if (minMax) {\n                const { min, max } = minMax;\n                queryMatch = max ? width <= max : min ? width >= min : false;\n            } else {\n                queryMatch = width === breakpoint;\n            }\n            break;\n    }\n\n    useEffect(() => {\n        const containerElement = componentRef.current;\n        if (!containerElement) return;\n\n        // ResizeObserver to watch for changes to container's size.\n        const resizeObserver = new ResizeObserver(entries => {\n            for (const entry of entries) {\n                if (entry.target === containerElement) {\n                    setWidth(containerElement.offsetWidth);\n                }\n            }\n        });\n\n        resizeObserver.observe(containerElement);\n\n        // Cleanup resize observer on unmount\n        return () => {\n            resizeObserver.unobserve(containerElement);\n            resizeObserver.disconnect();\n        };\n    }, [componentRef]);\n\n    return queryMatch;\n};\n\nexport default useContainerQuery;\n","import { BREAKPOINTS } from '../constants';\nimport type { ValueOfRecord } from '../utils/types';\nimport { useContainerQuery } from './useContainerQuery';\n\nexport const containerQueries = {\n    up: {\n        sm: ['up', BREAKPOINTS.sm],\n        md: ['up', BREAKPOINTS.md],\n        lg: ['up', BREAKPOINTS.lg],\n    },\n    down: {\n        xs: ['down', BREAKPOINTS.sm - 1],\n        sm: ['down', BREAKPOINTS.md - 1],\n        md: ['down', BREAKPOINTS.lg - 1],\n    },\n    only: {\n        xs: ['only', BREAKPOINTS.sm - 1, { max: BREAKPOINTS.sm - 1 }],\n        sm: ['only', BREAKPOINTS.sm, { max: BREAKPOINTS.md - 1 }],\n        md: ['only', BREAKPOINTS.md, { max: BREAKPOINTS.lg - 1 }],\n        lg: ['only', BREAKPOINTS.lg, { min: BREAKPOINTS.lg }],\n    },\n} as const;\n\ntype _ContainerQueries = typeof containerQueries;\n\nexport type ResponsiveViewportContainerQuery = ValueOfRecord<{\n    [K in keyof _ContainerQueries]: ValueOfRecord<_ContainerQueries[K]>;\n}>;\n\nexport const useResponsiveContainer = useContainerQuery<ResponsiveViewportContainerQuery>;\n","import { isNullish, isNumber, isUndefined, mod, some } from '../../../utils';\n\nexport interface TabbableRoot {\n    get current(): Element | null;\n    set current(maybeTabbableOrOffset: Element | number | null);\n    root: Element | null;\n    tabbables: Element[];\n}\n\nexport const SELECTORS = `:scope ${`\n    a[href],\n    audio[controls],\n    video[controls],\n    button,\n    input,\n    select,\n    textarea,\n    [contenteditable],\n    [tabindex]\n`.replace(/\\s+/g, '')}`;\n\nconst ATTRIBUTES = ['contenteditable', 'controls', 'disabled', 'hidden', 'href', 'inert', 'tabindex'];\nconst CHECKED_RADIOS = new Map<HTMLFormElement, Map<string, HTMLInputElement | null>>();\n\nconst isInput = (element: Element): element is HTMLInputElement => element.tagName === 'INPUT';\nconst isRadio = (element: Element): element is HTMLInputElement => isInput(element) && element.type === 'radio';\nconst isCheckedRadio = (element: Element): element is HTMLInputElement => {\n    const name = (element as HTMLInputElement).name;\n    const form = (element as HTMLInputElement).form;\n    const checkedRadiosForForm = CHECKED_RADIOS.get(form as HTMLFormElement);\n\n    let checkedRadio = checkedRadiosForForm?.get(name);\n\n    if (isUndefined(checkedRadio) && form) {\n        checkedRadio = (form.querySelector(`:scope input[type=radio][name='${name}']:checked`) as HTMLInputElement) || null;\n        CHECKED_RADIOS.set(form, (checkedRadiosForForm || new Map<string, HTMLInputElement | null>()).set(name, checkedRadio));\n    }\n\n    return checkedRadio === element;\n};\n\nexport const getDeepActiveElement = (root: Document | ShadowRoot = document): Element | null => {\n    let activeEl = root.activeElement;\n    while (activeEl && activeEl.shadowRoot && activeEl.shadowRoot.activeElement) {\n        activeEl = activeEl.shadowRoot.activeElement;\n    }\n    return activeEl;\n};\n\nexport const focusIsWithin = (rootElement: Element = document.body, elementWithFocus?: Element | null): boolean => {\n    if (isUndefined(rootElement)) return false;\n\n    if (isNullish(elementWithFocus)) {\n        const activeElement = getDeepActiveElement();\n        return !!activeElement && focusIsWithin(rootElement, activeElement);\n    }\n\n    let parentElement = elementWithFocus.parentNode as Node | null;\n\n    while (parentElement) {\n        if (parentElement === rootElement) return true;\n        parentElement = parentElement instanceof ShadowRoot ? parentElement.host : parentElement?.parentNode || null;\n    }\n\n    return false;\n};\n\nexport const isFocusable = (element: Element) =>\n    !(\n        // [TODO]: Include all of these checks\n        // (1) matches focusable elements selector\n        // (2) is disabled element\n        // (3) is inert or inert subtree child\n        // (4) is hidden input\n        // (5) with visibility: hidden\n        // (6) is summary of open details element\n        // (7) is details with summary element\n        // (8) is disabled fieldset subtree child\n\n        /* (1) */ (\n            !element.matches(SELECTORS) ||\n            /* (2) */ (element as HTMLInputElement)?.disabled ||\n            /* (3) */ /^(true)?$/.test(element.getAttribute('inert') as string) ||\n            /* (4) */ (isInput(element) && element.hidden)\n        )\n    );\n\nexport const isTabbable = (element: Element) =>\n    !(\n        (\n            (isRadio(element) && !isCheckedRadio(element)) || // (1) is not checked radio button\n            (element as HTMLElement)?.tabIndex < 0 || // (2) has negative tabindex\n            !isFocusable(element)\n        ) // (3) is not focusable\n    );\n\nexport const withTabbableRoot = () => {\n    const observer = new MutationObserver(records => shouldRefresh(records) && getTabbables());\n    const tabbables: Element[] = [];\n\n    let currentIndex = -1;\n    let root: Element | null = null;\n\n    const focusAt = (tabbableIndex: number) => {\n        if (tabbableIndex < 0) return;\n        const constrainedIndex = Math.min(tabbableIndex, tabbables.length - 1);\n        if (currentIndex !== constrainedIndex) currentIndex = constrainedIndex;\n        (tabbables[currentIndex] as HTMLElement)?.focus();\n    };\n\n    const getTabbables = () => {\n        tabbables.length = 0;\n        if (!root) return;\n\n        const observerConfig = {\n            attributeFilter: ATTRIBUTES,\n            attributes: true,\n            childList: true,\n            subtree: true,\n        };\n\n        observer.observe(root, observerConfig);\n\n        const walkAndObserve = (rootNode: Node) => {\n            const walker = document.createTreeWalker(rootNode, NodeFilter.SHOW_ELEMENT, {\n                acceptNode: () => NodeFilter.FILTER_ACCEPT,\n            });\n\n            let currentNode = walker.nextNode();\n\n            while (currentNode) {\n                const element = currentNode as Element;\n                if (isTabbable(element)) tabbables.push(element);\n                if (element.shadowRoot) {\n                    observer.observe(element.shadowRoot, observerConfig);\n                    walkAndObserve(element.shadowRoot);\n                }\n                currentNode = walker.nextNode();\n            }\n        };\n\n        walkAndObserve(root);\n\n        if (!focusIsWithin(root)) return;\n        tabbableRoot.current = getDeepActiveElement();\n    };\n\n    const shouldRefresh = (records: MutationRecord[]) => {\n        let shouldRefreshTabbables = false;\n\n        for (const record of records) {\n            if (record.type === 'attributes') {\n                shouldRefreshTabbables ||=\n                    record.target instanceof Element &&\n                    // Target is a tabbable element (possibly due to attribute changes)\n                    // For example, disabled set to false, tabindex set to a number, etc.\n                    (isTabbable(record.target) ||\n                        // Target is already contained in the list of tabbables\n                        // Attribute changes could make it no longer tabbable (e.g. disabled set to true)\n                        tabbables.includes(record.target));\n            } else {\n                shouldRefreshTabbables ||=\n                    // At least one element was added or removed from the DOM tree of the root element\n                    some(record.addedNodes, (node: Node) => node instanceof Element) ||\n                    some(record.removedNodes, (node: Node) => node instanceof Element);\n            }\n\n            if (shouldRefreshTabbables) break;\n        }\n\n        return shouldRefreshTabbables;\n    };\n\n    const tabbableRoot = Object.create(null, {\n        current: {\n            get: () => tabbables[currentIndex] ?? null,\n            set: (maybeTabbableOrOffset: Element | number | null) => {\n                if (!maybeTabbableOrOffset) return;\n                if (!isNumber(maybeTabbableOrOffset)) return focusAt(tabbables.indexOf(maybeTabbableOrOffset));\n                if (maybeTabbableOrOffset !== ~~maybeTabbableOrOffset) return;\n                return focusAt(mod(currentIndex + maybeTabbableOrOffset, tabbables.length));\n            },\n        },\n        root: {\n            get: () => root,\n            set: (maybeElement?: any) => {\n                if (maybeElement === root) return;\n\n                root && observer.disconnect();\n                root = maybeElement instanceof Element ? maybeElement : null;\n                getTabbables();\n            },\n        },\n        tabbables: { value: tabbables },\n    }) as TabbableRoot;\n\n    return tabbableRoot;\n};\n\nexport default withTabbableRoot;\n","import UIElement from './external/UIElement/UIElement';\nimport { Core, onErrorHandler } from '../core';\nimport { TransactionsTableFields } from './external/TransactionsOverview/components/TransactionsTable/types';\nimport { IPayout, IPayoutDetails, IReport, ITransaction, ITransactionWithDetails } from '../types';\nimport { AnchorHTMLAttributes } from 'preact/compat';\nimport { ReportsTableFields } from './external/ReportsOverview/components/ReportsTable/ReportsTable';\nimport { StringWithAutocompleteOptions } from '../utils/types';\nimport { PayoutsTableFields } from './external/PayoutsOverview/components/PayoutsTable/PayoutsTable';\nimport { TransactionDetailsFields } from './external';\nimport { IDisputeListItem } from '../types/api/models/disputes';\nimport { DisputesTableFields } from './external/DisputesOverview/components/DisputesTable/DisputesTable';\nimport { PaymentLinkCreationFormValues } from './external/PaymentLinkCreation/components/types';\nimport { FieldValues } from '../hooks/form/types';\nimport { StoreIds } from './external/PaymentLinksOverview/types';\n\nexport const enum InteractionKeyCode {\n    ARROW_DOWN = 'ArrowDown',\n    ARROW_LEFT = 'ArrowLeft',\n    ARROW_RIGHT = 'ArrowRight',\n    ARROW_UP = 'ArrowUp',\n    BACKSPACE = 'Backspace',\n    END = 'End',\n    ENTER = 'Enter',\n    ESCAPE = 'Escape',\n    HOME = 'Home',\n    PAGE_DOWN = 'PageDown',\n    PAGE_UP = 'PageUp',\n    SPACE = 'Space',\n    TAB = 'Tab',\n    DELETE = 'Delete',\n}\n\nexport interface BaseElementProps {\n    core: Core<any, any>;\n}\n\nexport interface IUIElement {\n    accessibleName: string;\n    displayName: string;\n    elementRef: any;\n    type: string;\n}\n\nexport interface IFormElement<P> {\n    submit(): void;\n    setStatus(status: UIElementStatus, props?: any): UIElement<P>;\n    showValidation(): void;\n    setState(newState: object): void;\n}\n\nexport type UIElementStatus = 'ready' | 'loading' | 'error' | 'success';\n\nexport type SetTriggerValidation = (callback: (schema?: Record<string, any>) => void) => void;\n\nexport interface UIElementProps {\n    hideTitle?: boolean;\n    onContactSupport?: () => void;\n    onError?: onErrorHandler;\n    ref?: any;\n}\n\nexport interface FormProps<P> {\n    onChange?: (state: any, element: UIElement<P> | null) => void;\n    onValid?: (state: any, element: UIElement<P> | null) => void;\n    beforeSubmit?: (state: any, element: UIElement<P>, actions: any) => Promise<void>;\n    onSubmit?: (state: any, element: UIElement<P> | null) => void;\n    onComplete?: (state: BaseElementProps, element: UIElement<P> | null) => void;\n    onError?: (error: any, element?: UIElement<P> | null) => void;\n    triggerValidation?: SetTriggerValidation;\n}\n\nexport type BaseElementState = {\n    errors?: {\n        [key: string]: any;\n    };\n    valid?: {\n        [key: string]: boolean;\n    };\n    fieldProblems?: {\n        [key: string]: any;\n    };\n    isValid?: boolean;\n};\n\nexport type _UIComponentProps<T> = BaseElementProps & Omit<UIElementProps, 'ref'> & T & {};\n\nexport type ExternalUIComponentProps<T> = UIElementProps & T & {};\n\ntype onRecordSelection<T extends { showModal: () => void }> = (selection: T) => any;\n\ninterface _DataOverviewSelectionProps<T extends { showModal: () => void } = { showModal: () => void }> {\n    onRecordSelection?: onRecordSelection<T>;\n}\n\nexport type DataGridIcon = { url: string; alt?: string } | ((value: unknown) => { url: string; alt?: string });\n\nexport type DataGridCustomColumnConfig<k> = {\n    key: k;\n    flex?: number;\n    align?: 'right' | 'left' | 'center';\n    visibility?: 'visible' | 'hidden';\n};\n\nexport type CustomColumn<T extends string> = {\n    [k in T]: DataGridCustomColumnConfig<k>;\n}[T];\n\ninterface _DataOverviewComponentProps {\n    allowLimitSelection?: boolean;\n    balanceAccountId?: string;\n    onFiltersChanged?: (filters: { [P in FilterParam]?: string }) => any;\n    preferredLimit?: 10 | 20;\n    showDetails?: boolean;\n    onContactSupport?: () => void;\n}\n\nexport type CustomDataObject = CustomIconObject | CustomTextObject | CustomLinkObject | CustomButtonObject;\n\ninterface BaseCustomObject {\n    value: any;\n}\n\ntype BaseDetails = {\n    className?: string;\n};\n\nexport interface CustomIconObject extends BaseCustomObject {\n    type: 'icon';\n    config: BaseDetails & { src: string; alt?: string };\n}\n\nexport interface CustomTextObject extends BaseCustomObject {\n    type: 'text';\n    config?: BaseDetails;\n}\n\nexport interface CustomLinkObject extends BaseCustomObject {\n    type: 'link';\n    config: BaseDetails & { href: string; target?: AnchorHTMLAttributes<any>['target'] };\n}\n\nexport interface CustomButtonObject extends BaseCustomObject {\n    type: 'button';\n    config: BaseDetails & { action: () => void };\n}\n\nexport type CustomDataRetrieved = { [k: string]: CustomDataObject | Record<any, any> | string | number | boolean };\n\nexport type OnDataRetrievedCallback<DataRetrieved, CallbackResponse = CustomDataRetrieved[]> = (data: DataRetrieved) => Promise<CallbackResponse>;\n\nexport type DataCustomizationObject<Columns extends string, DataRetrieved, CallbackResponse> = {\n    fields: CustomColumn<StringWithAutocompleteOptions<Columns>>[];\n    onDataRetrieve?: OnDataRetrievedCallback<DataRetrieved, CallbackResponse>;\n};\n\nexport type DetailsCustomFieldConfig<k> = {\n    key: k;\n    visibility?: 'visible' | 'hidden';\n};\n\nexport type CustomDetailsField<T extends string> = {\n    [k in T]: DetailsCustomFieldConfig<k>;\n}[T];\n\nexport type DetailsDataCustomizationObject<Columns extends string, DataRetrieved, CallbackResponse> = {\n    fields: CustomDetailsField<StringWithAutocompleteOptions<Columns>>[];\n    onDataRetrieve?: OnDataRetrievedCallback<DataRetrieved, CallbackResponse>;\n};\n\ninterface _CustomizableDataOverview<CustomizationOptions extends Record<string, DataCustomizationObject<any, any, any>>> {\n    dataCustomization?: CustomizationOptions;\n}\n\ntype OverviewCustomizationProperties<Fields extends string, Data, DetailsFields extends string, DetailsData> = {\n    list?: DataCustomizationObject<Fields, Data[], CustomDataRetrieved[]>;\n    details?: DetailsDataCustomizationObject<DetailsFields, DetailsData, CustomDataRetrieved>;\n};\n\nexport interface ReportsOverviewComponentProps\n    extends Omit<_DataOverviewComponentProps, 'showDetails'>,\n        _CustomizableDataOverview<Omit<OverviewCustomizationProperties<ReportsTableFields, IReport, any, any>, 'details'>> {}\n\nexport interface TransactionOverviewComponentProps\n    extends _DataOverviewComponentProps,\n        _CustomizableDataOverview<\n            OverviewCustomizationProperties<TransactionsTableFields, ITransaction, TransactionDetailsFields, ITransactionWithDetails>\n        >,\n        _DataOverviewSelectionProps<{ id: string; showModal: () => void }> {}\n\ntype PaymentLinkOverviewSubComponentProps<Props> = Omit<Props, 'onContactSupport' | 'storeIds' | 'ref'>;\n\nexport interface PaymentLinksOverviewComponentProps\n    extends _DataOverviewComponentProps,\n        _DataOverviewSelectionProps<{ id: string; showModal: () => void }> {\n    paymentLinkCreation?: PaymentLinkOverviewSubComponentProps<PaymentLinkCreationComponentProps>;\n    paymentLinkSettings?: PaymentLinkOverviewSubComponentProps<PaymentLinkSettingsComponentProps>;\n    storeIds?: StoreIds;\n}\n\nexport interface PayoutsOverviewComponentProps\n    extends _DataOverviewComponentProps,\n        _CustomizableDataOverview<OverviewCustomizationProperties<PayoutsTableFields, IPayout, any, IPayoutDetails>>,\n        _DataOverviewSelectionProps<{ balanceAccountId: string; date: string; showModal: () => void }> {}\n\nexport interface DisputeOverviewComponentProps\n    extends _DataOverviewComponentProps,\n        _CustomizableDataOverview<Omit<OverviewCustomizationProperties<DisputesTableFields, IDisputeListItem, any, any>, 'list'>>,\n        _DataOverviewSelectionProps<{ id: string; showModal: () => void }> {}\n\nexport type DeepPartial<T> = T extends object\n    ? {\n          [K in keyof T]?: DeepPartial<T[K]>;\n      }\n    : T;\n\nexport type PaymentLinkFieldVisibility = 'hidden' | 'readOnly';\n\nexport type PaymentLinkParentFields = 'amount' | 'deliveryAddress' | 'billingAddress' | 'shopperName' | 'linkValidity';\n\n// Nested visibility config for parent fields - supports both string and object notation\ntype AmountVisibility = PaymentLinkFieldVisibility | Partial<Record<'currency' | 'value', PaymentLinkFieldVisibility>>;\ntype AddressVisibility =\n    | PaymentLinkFieldVisibility\n    | Partial<Record<'city' | 'country' | 'houseNumberOrName' | 'postalCode' | 'street' | 'stateOrProvince', PaymentLinkFieldVisibility>>;\ntype ShopperNameVisibility = PaymentLinkFieldVisibility | Partial<Record<'firstName' | 'lastName', PaymentLinkFieldVisibility>>;\ntype LinkValidityVisibility = PaymentLinkFieldVisibility | Partial<Record<'durationUnit' | 'quantity', PaymentLinkFieldVisibility>>;\n\nexport type PaymentLinkFieldsVisibilityConfig = Partial<\n    Omit<Record<FieldValues<PaymentLinkCreationFormValues>, PaymentLinkFieldVisibility>, PaymentLinkParentFields> & {\n        amount?: AmountVisibility;\n        deliveryAddress?: AddressVisibility;\n        billingAddress?: AddressVisibility;\n        shopperName?: ShopperNameVisibility;\n        linkValidity?: LinkValidityVisibility;\n    }\n>;\n\nexport interface PaymentLinkCreationFieldsConfig {\n    data?: DeepPartial<PaymentLinkCreationFormValues>;\n    visibility?: PaymentLinkFieldsVisibilityConfig;\n}\n\nexport interface PaymentLinkCreationComponentProps extends UIElementProps {\n    fieldsConfig?: PaymentLinkCreationFieldsConfig;\n    storeIds?: StoreIds;\n    onPaymentLinkCreated?: (paymentLink: PaymentLinkCreationFormValues) => void;\n    onCreationDismiss?: () => void;\n}\n\nexport interface PaymentLinkSettingsComponentProps extends UIElementProps {\n    storeIds?: string[] | string;\n}\n\nexport const enum FilterParam {\n    BALANCE_ACCOUNT = 'balanceAccount',\n    CATEGORIES = 'categories',\n    CURRENCIES = 'currencies',\n    CREATED_SINCE = 'createdSince',\n    CREATED_UNTIL = 'createdUntil',\n    STATUSES = 'statuses',\n    MIN_AMOUNT = 'minAmount',\n    MAX_AMOUNT = 'maxAmount',\n    LINK_TYPES = 'linkTypes',\n    MERCHANT_REFERENCE = 'merchantReference',\n    PAYMENT_LINK_ID = 'paymentLinkId',\n    STORE_IDS = 'storeIds',\n}\n\nexport type ExternalComponentType =\n    | 'capitalOverview'\n    | 'capitalOffer'\n    | 'disputes'\n    | 'disputesManagement'\n    | 'paymentLinkCreation'\n    | 'paymentLinkDetails'\n    | 'paymentLinksOverview'\n    | 'paymentLinkSettings'\n    | 'payouts'\n    | 'payoutDetails'\n    | 'reports'\n    | 'transactions'\n    | 'transactionDetails';\n","import { useCallback, useMemo, useRef } from 'preact/hooks';\nimport { InteractionKeyCode } from '../../components/types';\nimport { isUndefined } from '../../utils';\nimport withTabbableRoot, { focusIsWithin, getDeepActiveElement, isFocusable } from '../../primitives/dom/tabbableRoot/tabbable';\nimport type { Reflexable } from '../../primitives/reactive/reflex';\nimport type { Nullable } from '../../utils/types';\nimport useReflex from '../useReflex';\n\nconst useFocusTrap = <T extends Element>(rootElementRef: Nullable<Reflexable<T>>, onEscape: (interactionKeyPressed: boolean) => any) => {\n    const escapedFocus = useRef(false);\n    const focusElement = useRef<Element | null>(null);\n    const interactionKeyPressed = useRef(false);\n    const lastInteractionKey = useRef<string | null>(null);\n    const lastTabDirection = useRef<1 | -1>(1);\n    const setRootTabIndex = useRef(false);\n    const tabbableRoot = useMemo(withTabbableRoot, []);\n\n    const focusFallback = useCallback((root: Element) => {\n        const lastFocused = focusElement.current;\n        if (lastFocused instanceof HTMLElement && focusIsWithin(root, lastFocused)) {\n            lastFocused.focus();\n            return;\n        }\n        if (root instanceof HTMLElement) root.focus();\n    }, []);\n\n    const onClickCapture = useMemo(() => {\n        let lastFocusableElement: Element | null = null;\n        let raf: number | undefined;\n\n        return (evt: Event) => {\n            if (!isUndefined(raf)) cancelAnimationFrame(raf);\n\n            const eventPath = evt.composedPath();\n            let element = eventPath[0] as Element | null;\n            let index = 0;\n\n            while (element && element !== evt.currentTarget) {\n                if (element instanceof Element && isFocusable(element)) {\n                    lastFocusableElement = element;\n                    raf = requestAnimationFrame(() => {\n                        raf = requestAnimationFrame(() => {\n                            if (focusElement.current !== lastFocusableElement && lastFocusableElement instanceof HTMLElement) {\n                                (focusElement.current = lastFocusableElement)?.focus();\n                            }\n                            lastFocusableElement = null;\n                            raf = undefined;\n                        });\n                    });\n                    return;\n                }\n                element = eventPath[++index] as Element | null;\n            }\n        };\n    }, []);\n\n    const onFocusInCapture = useCallback((evt: FocusEvent) => {\n        tabbableRoot.current = focusElement.current = (evt.composedPath()[0] || evt.target) as Element | null;\n    }, []);\n\n    const onDocumentFocusInCapture = useCallback((evt: FocusEvent) => {\n        const root = tabbableRoot.root;\n        if (!(root instanceof Element)) return;\n\n        const target = (evt.composedPath()[0] || evt.target) as Element | null;\n        if (focusIsWithin(root, target)) return;\n\n        // Only trap focus if it's moving from within this trap.\n        if (!focusIsWithin(root, evt.relatedTarget as Element | null)) return;\n\n        if (interactionKeyPressed.current && lastInteractionKey.current === InteractionKeyCode.TAB) {\n            const tabbables = tabbableRoot.tabbables;\n            if (tabbables.length) {\n                const nextIndex = lastTabDirection.current === -1 ? tabbables.length - 1 : 0;\n                (tabbables[nextIndex] as HTMLElement)?.focus();\n            } else {\n                focusFallback(root);\n            }\n        }\n    }, []);\n\n    const onFocusOut = useCallback((evt: FocusEvent) => {\n        if (tabbableRoot.tabbables.includes(evt.relatedTarget as Element)) return;\n        if (focusIsWithin(evt.currentTarget as Element, evt.relatedTarget as Element | null)) return;\n        if (interactionKeyPressed.current) return;\n\n        escapedFocus.current = true;\n\n        requestAnimationFrame(() => {\n            if (escapedFocus.current) onEscape((escapedFocus.current = false));\n        });\n    }, []);\n\n    const onKeyDownCapture = useMemo(() => {\n        let raf: number | undefined;\n\n        return (evt: KeyboardEvent) => {\n            lastInteractionKey.current = evt.code;\n            switch (evt.code) {\n                case InteractionKeyCode.ARROW_DOWN:\n                case InteractionKeyCode.ARROW_LEFT:\n                case InteractionKeyCode.ARROW_RIGHT:\n                case InteractionKeyCode.ARROW_UP:\n                case InteractionKeyCode.END:\n                case InteractionKeyCode.ESCAPE:\n                case InteractionKeyCode.HOME:\n                case InteractionKeyCode.PAGE_DOWN:\n                case InteractionKeyCode.PAGE_UP:\n                case InteractionKeyCode.TAB:\n                    cancelAnimationFrame(raf as number);\n                    raf = requestAnimationFrame(() => {\n                        raf = requestAnimationFrame(() => {\n                            interactionKeyPressed.current = false;\n                            raf = undefined;\n                        });\n                    });\n                    interactionKeyPressed.current = true;\n                    break;\n            }\n            if (evt.code === InteractionKeyCode.TAB) {\n                evt.preventDefault();\n                lastTabDirection.current = evt.shiftKey ? -1 : 1;\n\n                if (tabbableRoot.tabbables.length) {\n                    tabbableRoot.current = lastTabDirection.current;\n                } else if (tabbableRoot.root instanceof Element) {\n                    focusFallback(tabbableRoot.root);\n                }\n            } else if (evt.code === InteractionKeyCode.ESCAPE) onEscape(true);\n        };\n    }, []);\n\n    return useReflex<T>(\n        useCallback((current, previous) => {\n            if (previous instanceof Element) {\n                (previous as unknown as HTMLElement).removeEventListener('keydown', onKeyDownCapture, true);\n                (previous as unknown as HTMLElement).removeEventListener('focusin', onFocusInCapture, true);\n                (previous as unknown as HTMLElement).removeEventListener('focusout', onFocusOut, false);\n                (previous as unknown as HTMLElement).removeEventListener('click', onClickCapture, true);\n                document.removeEventListener('focusin', onDocumentFocusInCapture, true);\n\n                if (setRootTabIndex.current && previous instanceof HTMLElement) {\n                    previous.removeAttribute('tabindex');\n                    setRootTabIndex.current = false;\n                }\n            }\n\n            if (current instanceof Element) {\n                (current as unknown as HTMLElement).addEventListener('keydown', onKeyDownCapture, true);\n                (current as unknown as HTMLElement).addEventListener('focusin', onFocusInCapture, true);\n                (current as unknown as HTMLElement).addEventListener('focusout', onFocusOut, false);\n                (current as unknown as HTMLElement).addEventListener('click', onClickCapture, true);\n                document.addEventListener('focusin', onDocumentFocusInCapture, true);\n                escapedFocus.current = false;\n                tabbableRoot.root = current;\n\n                if (current instanceof HTMLElement && !current.hasAttribute('tabindex')) {\n                    current.setAttribute('tabindex', '-1');\n                    setRootTabIndex.current = true;\n                }\n\n                // Automatically focus inside the trap if focus is not already within it\n                if (!focusIsWithin(current, getDeepActiveElement())) {\n                    if (current instanceof HTMLElement) {\n                        current.focus();\n                    }\n                }\n            } else tabbableRoot.root = null;\n        }, []),\n        rootElementRef\n    );\n};\n\nexport default useFocusTrap;\n","import './Icon.scss';\nimport cx from 'classnames';\nimport { JSX } from 'preact';\nimport { useState, useEffect } from 'preact/hooks';\n\nconst icons = {\n    'angle-right': () => import('../../../images/icons/angle-right.svg?component'),\n    'arrow-right': () => import('../../../images/icons/arrow-right.svg?component'),\n    'checkmark-circle-fill': () => import('../../../images/icons/checkmark-circle-fill.svg?component'),\n    'checkmark-square-fill': () => import('../../../images/icons/checkmark-square-fill.svg?component'),\n    checkmark: () => import('../../../images/icons/checkmark.svg?component'),\n    'checkbox-disabled': () => import('../../../images/icons/checkbox-disabled.svg?component'),\n    'chevron-down': () => import('../../../images/icons/chevron-down.svg?component'),\n    'chevron-left': () => import('../../../images/icons/chevron-left.svg?component'),\n    'chevron-right': () => import('../../../images/icons/chevron-right.svg?component'),\n    'chevron-up': () => import('../../../images/icons/chevron-up.svg?component'),\n    'chevron-up-down': () => import('../../../images/icons/chevron-up-down.svg?component'),\n    copy: () => import('../../../images/icons/copy.svg?component'),\n    'cross-circle-fill': () => import('../../../images/icons/cross-circle-fill.svg?component'),\n    search: () => import('../../../images/icons/search.svg?component'),\n    cross: () => import('../../../images/icons/cross.svg?component'),\n    download: () => import('../../../images/icons/download.svg?component'),\n    'external-link': () => import('../../../images/icons/external-link.svg?component'),\n    filter: () => import('../../../images/icons/filter.svg?component'),\n    info: () => import('../../../images/icons/info.svg?component'),\n    'info-filled': () => import('../../../images/icons/info-filled.svg?component'),\n    'minus-circle-outline': () => import('../../../images/icons/minus-circle-outline.svg?component'),\n    plus: () => import('../../../images/icons/plus.svg?component'),\n    'plus-circle-outline': () => import('../../../images/icons/plus-circle-outline.svg?component'),\n    square: () => import('../../../images/icons/square.svg?component'),\n    'square-small-fill': () => import('../../../images/icons/square-small-fill.svg?component'),\n    'trash-can': () => import('../../../images/icons/trash-can.svg?component'),\n    cog: () => import('../../../images/icons/cog.svg?component'),\n    upload: () => import('../../../images/icons/upload.svg?component'),\n    'warning-filled': () => import('../../../images/icons/warning-filled.svg?component'),\n    warning: () => import('../../../images/icons/warning.svg?component'),\n} as const;\n\nexport type IconName = keyof typeof icons;\n\n/**\n * Props for the Icon component.\n */\ninterface IconProps {\n    /**\n     * The name of the icon to be displayed.\n     */\n    name: IconName;\n\n    /**\n     * Optional class name(s) for styling the icon.\n     */\n    className?: string;\n\n    /**\n     * Any additional attributes or properties that can be passed to the icon element (e.g., role, aria-label, etc.).\n     */\n    [key: string]: any;\n}\n\nexport const Icon = ({ className, name, ...props }: IconProps) => {\n    const [IconComponent, setIconComponent] = useState<JSX.Element | null>(null);\n\n    useEffect(() => {\n        if (icons[name]) {\n            icons[name]().then(({ default: LoadedIcon }) => {\n                setIconComponent(<LoadedIcon />);\n            });\n        } else {\n            setIconComponent(null);\n            console.error(`Icon with name \"${name}\" does not exist.`);\n        }\n    }, [name]);\n\n    return (\n        IconComponent && (\n            <span className={cx('adyen-pe-icon', className)} role=\"img\" aria-hidden {...props}>\n                {IconComponent}\n            </span>\n        )\n    );\n};\n\nexport default Icon;\n","import { ButtonVariant } from '../Button/types';\nimport { useClickOutside } from '../../../hooks/element/useClickOutside';\nimport { containerQueries, useResponsiveContainer } from '../../../hooks/useResponsiveContainer';\nimport tabbable, { getDeepActiveElement } from '../../../primitives/dom/tabbableRoot/tabbable';\nimport useFocusTrap from '../../../hooks/element/useFocusTrap';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport { useCallback, useContext, useEffect, useRef } from 'preact/hooks';\nimport { createContext } from 'preact';\nimport { ModalProps } from './types';\nimport Button from '../Button';\nimport Icon from '../Icon';\nimport cx from 'classnames';\nimport './Modal.scss';\n\nconst ModalContext = createContext({ withinModal: false });\n\nexport const useModalContext = () => useContext(ModalContext);\n\nexport default function Modal({\n    title,\n    children,\n    classNameModifiers = [],\n    isOpen,\n    onClose,\n    isDismissible = true,\n    headerWithBorder = true,\n    size = 'fluid',\n    ...props\n}: ModalProps) {\n    const { i18n } = useCoreContext();\n    const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n    const focusCaptureElement = useRef<HTMLDivElement | null>(null);\n    const focusRestoreElement = useRef<Element | null>(null);\n\n    const handleDismiss = useCallback(() => {\n        if (isOpen && isDismissible) {\n            (focusRestoreElement.current as HTMLElement)?.focus();\n            onClose();\n        }\n    }, [isOpen, isDismissible, onClose]);\n\n    const modalRootElement = useFocusTrap<HTMLDivElement>(useClickOutside(null, handleDismiss), handleDismiss);\n\n    useEffect(() => {\n        if (isOpen && modalRootElement.current) {\n            focusRestoreElement.current = getDeepActiveElement();\n            let tabbableHandle = tabbable();\n\n            // Temporarily focus on the capture element, so that\n            // focus is contained within the modal root element.\n            focusCaptureElement.current?.focus();\n\n            // Set the modal root element as the tabbable root.\n            // And then activate focus on the first tabbable element.\n            tabbableHandle.root = modalRootElement.current;\n            tabbableHandle.current = 1;\n\n            // Focus capture element no longer needed\n            focusCaptureElement.current?.remove();\n\n            return () => {\n                tabbableHandle.root = null;\n                tabbableHandle = null!;\n            };\n        }\n    }, [isOpen]);\n\n    return (\n        <>\n            {isOpen && (\n                <div\n                    className={cx(\n                        'adyen-pe-modal-wrapper',\n                        classNameModifiers.map(m => `adyen-pe-modal-wrapper--${m}`),\n                        { 'adyen-pe-modal-wrapper--open': isOpen, 'adyen-pe-modal-wrapper--dismissible': isDismissible }\n                    )}\n                    role=\"dialog\"\n                    aria-modal=\"true\"\n                    aria-hidden=\"false\"\n                    {...props}\n                >\n                    <ModalContext.Provider value={{ withinModal: true }}>\n                        <div\n                            className={cx('adyen-pe-modal', {\n                                'adyen-pe-modal--fluid': size === 'fluid',\n                                'adyen-pe-modal--small': size === 'small',\n                                'adyen-pe-modal--large': size === 'large',\n                                'adyen-pe-modal--extra-large': size === 'extra-large',\n                                'adyen-pe-modal--full-screen': size === 'full-screen' || isSmContainer,\n                            })}\n                            ref={modalRootElement}\n                        >\n                            <div className=\"adyen-pe-visually-hidden\" ref={focusCaptureElement} tabIndex={-1}></div>\n                            <div\n                                className={cx('adyen-pe-modal__header', {\n                                    'adyen-pe-modal__header--with-title': title,\n                                    'adyen-pe-modal__header--with-border-bottom': headerWithBorder,\n                                })}\n                            >\n                                {title && <div className={`adyen-pe-modal__header-title`}>{title}</div>}\n\n                                {isDismissible && (\n                                    <Button\n                                        onClick={handleDismiss}\n                                        variant={ButtonVariant.TERTIARY}\n                                        iconButton\n                                        classNameModifiers={['circle']}\n                                        className={`adyen-pe-modal__dismiss-button`}\n                                        aria-label={i18n.get('common.modal.controls.dismiss.label')}\n                                    >\n                                        <Icon name=\"cross\" />\n                                    </Button>\n                                )}\n                            </div>\n                            <div className={'adyen-pe-modal__content'}>{children}</div>\n                        </div>\n                    </ModalContext.Provider>\n                </div>\n            )}\n        </>\n    );\n}\n","import { useCallback, useEffect, useReducer, useRef } from 'preact/hooks';\nimport { ErrorLevel } from '../core/Http/types';\nimport { boolOrTrue } from '../utils';\n\nexport interface State<T> {\n    data?: T;\n    error?: Error;\n    isFetching: boolean;\n    refetch: () => void;\n}\n\n// type Cache<T> = Map<string, T>;\n\ntype Action<T> = { type: 'loading' } | { type: 'fetched'; payload: T } | { type: 'error'; payload: Error };\n\ntype FetchOptions<ReturnType> = {\n    enabled: boolean;\n    errorLevel: ErrorLevel;\n    keepPrevData: boolean;\n    onSuccess?: (data: ReturnType) => void;\n};\n\ntype UseFetchConfig<QueryFn extends (...args: any) => Promise<any>> = {\n    loadingContext?: string;\n    params?: Record<string, string | number | Date>;\n    requestOptions?: RequestInit;\n    fetchOptions?: Partial<FetchOptions<Awaited<ReturnType<QueryFn>>>>;\n    queryFn: QueryFn;\n};\nexport function useFetch<QueryFn extends (...args: any) => Promise<any>, T extends Awaited<ReturnType<QueryFn>>>({\n    fetchOptions: { keepPrevData, onSuccess, enabled } = { keepPrevData: true },\n    queryFn,\n}: // params,\nUseFetchConfig<QueryFn>): State<T> {\n    // TODO cache endpoint calls\n    //const cache = useRef<Cache<T>>(new Map());\n    // Used to prevent state update if the component is unmounted\n    const cancelRequest = useRef<boolean>(false);\n    const initialState: State<T> = {\n        error: undefined,\n        data: undefined,\n        isFetching: boolOrTrue(enabled),\n        refetch: () => fetchData(),\n    };\n    const fetchReducer = (state: State<T>, action: Action<T>): State<T> => {\n        switch (action.type) {\n            case 'loading':\n                return { ...initialState, isFetching: true, data: keepPrevData ? state.data : undefined };\n            case 'fetched':\n                return { ...initialState, data: action.payload, isFetching: false };\n            case 'error':\n                return { ...initialState, error: action.payload, isFetching: false };\n            default:\n                return state;\n        }\n    };\n\n    const [state, dispatch] = useReducer(fetchReducer, initialState);\n\n    const fetchData = useCallback(async () => {\n        // If a cache exists for this url, return it\n        /* if (cache.current.get(url.href)) {\n            dispatch({ type: 'fetched', payload: cache.current.get(url.href)! });\n            return;\n        } */\n        dispatch({ type: 'loading' });\n\n        try {\n            if (cancelRequest.current) return;\n            const data = await queryFn();\n            // cache.current.set(url.href, data);\n            onSuccess?.(data);\n            dispatch({ type: 'fetched', payload: data });\n        } catch (error) {\n            if (cancelRequest.current) return;\n            dispatch({ type: 'error', payload: error as Error });\n        }\n    }, [dispatch, queryFn, onSuccess]);\n\n    useEffect(() => {\n        cancelRequest.current = false;\n\n        if (boolOrTrue(enabled)) void fetchData();\n\n        // Avoid a possible state update after the component was unmounted\n        return () => {\n            cancelRequest.current = true;\n        };\n    }, [enabled, fetchData]);\n\n    return state;\n}\n","import { useRef } from 'preact/hooks';\nimport { uniqueId } from '../utils';\n\nexport const useUniqueId = () => {\n    return useRef(uniqueId().replace(/.*?(?=\\d+$)/, '')).current;\n};\n\nexport default useUniqueId;\n","export const ACCORDION_BASE_CLASS = 'adyen-pe-accordion';\nexport const ACCORDION_HEADER_CLASS = ACCORDION_BASE_CLASS + '__header';\nexport const ACCORDION_HEADER_CONTAINER_CLASS = ACCORDION_HEADER_CLASS + '-container';\nexport const ACCORDION_HEADER_CONTROLLER_CLASS = ACCORDION_HEADER_CLASS + '-controller';\nexport const ACCORDION_CONTENT_CLASS = ACCORDION_BASE_CLASS + '__content';\n","import classnames from 'classnames';\nimport { PropsWithChildren } from 'preact/compat';\nimport { useCallback, useRef, useState } from 'preact/hooks';\nimport useUniqueId from '../../../hooks/useUniqueId';\nimport {\n    ACCORDION_BASE_CLASS,\n    ACCORDION_CONTENT_CLASS,\n    ACCORDION_HEADER_CLASS,\n    ACCORDION_HEADER_CONTAINER_CLASS,\n    ACCORDION_HEADER_CONTROLLER_CLASS,\n} from './constants';\nimport { AccordionProps } from './types';\nimport Icon from '../Icon';\nimport './Accordion.scss';\n\nfunction Accordion({ children, classNames, header, headerInformation }: PropsWithChildren<AccordionProps>) {\n    const [isExpanded, setIsExpanded] = useState(false);\n    const accordionContentRef = useRef<HTMLDivElement>(null);\n    const toggle = useCallback(() => setIsExpanded(isExpanded => !isExpanded), []);\n\n    const uniqueId = useUniqueId();\n    const contentElementId = `accordion-content-${uniqueId}`;\n    const controllerElementId = `accordion-controller-${uniqueId}`;\n\n    return (\n        <div className={classnames(ACCORDION_BASE_CLASS, classNames)}>\n            <div className={ACCORDION_HEADER_CLASS}>\n                <button\n                    id={controllerElementId}\n                    aria-controls={contentElementId}\n                    className={ACCORDION_HEADER_CONTAINER_CLASS}\n                    onClick={toggle}\n                    aria-expanded={isExpanded}\n                >\n                    <div className={ACCORDION_HEADER_CONTROLLER_CLASS}>\n                        {header}\n                        {isExpanded ? <Icon name=\"chevron-up\" /> : <Icon name=\"chevron-down\" />}\n                    </div>\n                </button>\n                {headerInformation && <div>{headerInformation}</div>}\n            </div>\n            {\n                <div\n                    role=\"region\"\n                    id={contentElementId}\n                    aria-labelledby={controllerElementId}\n                    style={{ maxHeight: isExpanded ? accordionContentRef?.current?.offsetHeight : 0 }}\n                    className={ACCORDION_CONTENT_CLASS}\n                >\n                    <div ref={accordionContentRef}>{children}</div>\n                </div>\n            }\n        </div>\n    );\n}\n\nexport default Accordion;\n","export const CARD_BASE_CLASS = 'adyen-pe-card';\nexport const CARD_EXPANDABLE_CLASS = `${CARD_BASE_CLASS}--expandable`;\nexport const CARD_TOGGLE_CLASS = `${CARD_BASE_CLASS}__toggle`;\nexport const CARD_BODY = `${CARD_BASE_CLASS}__body`;\nexport const CARD_HEADER = `${CARD_BASE_CLASS}__header`;\nexport const CARD_TITLE = `${CARD_BASE_CLASS}__title`;\nexport const CARD_SUBTITLE = `${CARD_BASE_CLASS}__subtitle`;\nexport const CARD_HEADER_CONTENT = `${CARD_HEADER}-content`;\nexport const CARD_BODY_WITH_TITLE = `${CARD_BODY}--with-title`;\nexport const CARD_NO_OUTLINE = `${CARD_BASE_CLASS}--no-outline`;\nexport const CARD_NO_PADDING = `${CARD_BASE_CLASS}--no-padding`;\nexport const CARD_FILLED = `${CARD_BASE_CLASS}--filled`;\nexport const CARD_FOOTER = `${CARD_BASE_CLASS}__footer`;\nexport const CARD_COMPACT = `${CARD_BASE_CLASS}--compact`;\n","import { HTMLAttributes } from 'preact';\nimport classNames from 'classnames';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport { uuid } from '../../../utils';\nimport { InteractionKeyCode } from '../../types';\nimport Icon from '../Icon';\nimport {\n    CARD_BASE_CLASS,\n    CARD_BODY,\n    CARD_BODY_WITH_TITLE,\n    CARD_COMPACT,\n    CARD_EXPANDABLE_CLASS,\n    CARD_FILLED,\n    CARD_FOOTER,\n    CARD_HEADER,\n    CARD_HEADER_CONTENT,\n    CARD_NO_OUTLINE,\n    CARD_NO_PADDING,\n    CARD_SUBTITLE,\n    CARD_TITLE,\n    CARD_TOGGLE_CLASS,\n} from './constants';\nimport { CardProps } from './types';\nimport { PropsWithChildren } from 'preact/compat';\nimport './Card.scss';\n\ntype AriaRole = HTMLAttributes<HTMLDivElement>['role'];\n\nconst Card = ({\n    title,\n    subTitle,\n    children,\n    expandable = false,\n    footer,\n    renderHeader,\n    renderFooter,\n    filled,\n    noOutline,\n    noPadding,\n    classNameModifiers,\n    testId,\n    compact,\n}: PropsWithChildren<CardProps>) => {\n    const [showContent, setShowContent] = useState(false);\n    const cardId = useMemo(() => uuid(), []);\n\n    const toggleExpansion = useCallback(() => {\n        if (expandable) {\n            setShowContent(showContent => !showContent);\n        }\n    }, [expandable]);\n\n    const onKeyDown = useCallback(\n        (evt: KeyboardEvent) => {\n            switch (evt.code) {\n                case InteractionKeyCode.ENTER:\n                case InteractionKeyCode.SPACE:\n                    evt.preventDefault();\n                    toggleExpansion();\n                    return;\n            }\n        },\n        [toggleExpansion]\n    );\n\n    const cardContainerAttributes = useMemo(() => {\n        return expandable\n            ? {\n                  role: 'button' as AriaRole,\n                  tabIndex: 0,\n                  onClick: toggleExpansion,\n                  onKeyDown: onKeyDown,\n                  'aria-controls': cardId,\n                  'aria-expanded': showContent,\n              }\n            : {};\n    }, [expandable, showContent, cardId, onKeyDown, toggleExpansion]);\n\n    return (\n        <div\n            data-testid={testId}\n            className={classNames(CARD_BASE_CLASS, classNameModifiers, {\n                [CARD_FILLED]: filled,\n                [CARD_NO_OUTLINE]: noOutline,\n                [CARD_NO_PADDING]: noPadding,\n                [CARD_EXPANDABLE_CLASS]: expandable,\n                [CARD_COMPACT]: compact,\n            })}\n            {...cardContainerAttributes}\n        >\n            {(title || renderHeader) && (\n                <div className={classNames(CARD_HEADER)}>\n                    <div className={classNames(CARD_HEADER_CONTENT)}>\n                        {expandable && <Icon name={showContent ? 'chevron-up' : 'chevron-down'} className={CARD_TOGGLE_CLASS} role=\"presentation\" />}\n                        {renderHeader ? renderHeader : <span className={CARD_TITLE}>{title}</span>}\n                        {subTitle && <div className={CARD_SUBTITLE}>{subTitle}</div>}\n                    </div>\n                </div>\n            )}\n            {(!expandable || showContent) && (\n                <div\n                    id={cardId}\n                    className={classNames(CARD_BODY, {\n                        [CARD_BODY_WITH_TITLE]: title || renderHeader,\n                    })}\n                >\n                    {children}\n                </div>\n            )}\n            {(footer || renderFooter) && <div className={CARD_FOOTER}>{renderFooter ? renderFooter : footer}</div>}\n        </div>\n    );\n};\n\nexport default Card;\n","export const SL_BASE_CLASS = 'adyen-pe-structured-list';\nexport const SL_ALIGN_END = `${SL_BASE_CLASS}--align-end`;\nexport const SL_EXPANDED_CLASS = `${SL_BASE_CLASS}--expanded`;\nexport const SL_ITEM_CLASS = `${SL_BASE_CLASS}__item`;\nexport const SL_GRID_CLASS = `${SL_BASE_CLASS}__grid`;\nexport const SL_CONTENT_CLASS = `${SL_BASE_CLASS}__content`;\nexport const SL_LABEL_CLASS = `${SL_BASE_CLASS}__label`;\nexport const SL_ITEM_WITH_HIGHLIGHT_CLASS = `${SL_ITEM_CLASS}--has-highlight`;\n","import { useMemo } from 'preact/hooks';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport { uuid } from '../../../utils';\nimport { StructuredListItem } from './types';\n\nexport const useStructuredListItems = (items: StructuredListItem[]) => {\n    const { i18n } = useCoreContext();\n    return useMemo(() => {\n        return items.map(item => {\n            return {\n                key: item.key,\n                value: item.value,\n                id: item.id || uuid(),\n                label: item.label ?? i18n.get(item.key),\n                type: item.type,\n                config: item.config,\n                rawValue: item.rawValue,\n                render: item.render,\n            };\n        });\n    }, [i18n, items]);\n};\n","import cx from 'classnames';\nimport { useMemo } from 'preact/hooks';\nimport { AriaAttributes } from 'preact/compat';\nimport { TypographyVariant } from '../Typography/types';\nimport Typography from '../Typography/Typography';\nimport {\n    SL_ALIGN_END,\n    SL_BASE_CLASS,\n    SL_CONTENT_CLASS,\n    SL_EXPANDED_CLASS,\n    SL_GRID_CLASS,\n    SL_ITEM_CLASS,\n    SL_ITEM_WITH_HIGHLIGHT_CLASS,\n    SL_LABEL_CLASS,\n} from './constants';\nimport { StructuredListProps } from './types';\nimport './StructuredList.scss';\nimport { useStructuredListItems } from './useStructuredListItem';\n\nexport const StructuredListLayouts = ['3-9', '4-8', '5-7', '6-6', '7-5', '8-4'] as const satisfies ReadonlyArray<`${number}-${number}`>;\n\nconst DEFAULT_LAYOUT = '6-6';\nexport default function StructuredList({\n    ['aria-label']: ariaLabel,\n    items,\n    highlightable,\n    renderValue,\n    renderLabel,\n    layout = DEFAULT_LAYOUT,\n    grid = true,\n    classNames,\n    align = 'end',\n    condensed = true,\n}: StructuredListProps & Pick<AriaAttributes, 'aria-label'>) {\n    const [LABEL_COL_CLASS, VALUE_COL_CLASS] = useMemo(() => {\n        return layout.split('-').map(w => `${SL_GRID_CLASS}--width-${w}-of-12`);\n    }, [layout]);\n\n    const formattedItems = useStructuredListItems(items);\n\n    const typographyVariant = condensed ? TypographyVariant.CAPTION : TypographyVariant.BODY;\n\n    return (\n        <dl className={cx(SL_BASE_CLASS, classNames, { [SL_ALIGN_END]: align === 'end', [SL_EXPANDED_CLASS]: !condensed })} aria-label={ariaLabel}>\n            {formattedItems.map((item, index) => (\n                <div\n                    data-testid={item.label}\n                    key={`${index}_${item.id || '0'}`}\n                    className={cx(SL_ITEM_CLASS, {\n                        [SL_ITEM_WITH_HIGHLIGHT_CLASS]: highlightable,\n                        [SL_GRID_CLASS]: grid,\n                    })}\n                >\n                    <dt className={cx(SL_LABEL_CLASS, LABEL_COL_CLASS)}>\n                        {renderLabel ? (\n                            renderLabel(item.label, item.key, item.rawValue)\n                        ) : (\n                            <Typography variant={typographyVariant}>{item.label}</Typography>\n                        )}\n                    </dt>\n                    <dd className={cx(SL_CONTENT_CLASS, VALUE_COL_CLASS)}>\n                        {item.render ? (\n                            item.render(item)\n                        ) : renderValue ? (\n                            renderValue(item.value, item.key, item.type, item.config)\n                        ) : (\n                            <Typography variant={typographyVariant}>{item.value}</Typography>\n                        )}\n                    </dd>\n                </div>\n            ))}\n        </dl>\n    );\n}\n","export const BASE_CLASS = 'adyen-pe-overview-details';\nexport const SKELETON_CLASS = `${BASE_CLASS}__skeleton`;\nexport const SKELETON_CONTAINER = `${SKELETON_CLASS}-container`;\nexport const SKELETON_LOADING = `${SKELETON_CLASS}--loading-content`;\nexport const STATUS_SKELETON = `${BASE_CLASS}__status-skeleton`;\n","import cx from 'classnames';\nimport { memo } from 'preact/compat';\nimport { SKELETON_CLASS, SKELETON_CONTAINER, SKELETON_LOADING, STATUS_SKELETON } from './constants';\n\nconst DataOverviewDetailsSkeleton = ({ skeletonRowNumber = 0 }: { skeletonRowNumber?: number }) => {\n    const className = cx(SKELETON_CLASS, SKELETON_LOADING);\n    const skeletonRows = Array.from({ length: skeletonRowNumber });\n    const statusSkeletonRows = Array.from({ length: 2 });\n\n    return (\n        <div className={SKELETON_CONTAINER}>\n            <div className={STATUS_SKELETON}>\n                {statusSkeletonRows.map((_, index) => (\n                    <span className={className} key={`status-skeleton-${index}`} />\n                ))}\n            </div>\n            {skeletonRows.map((_, index) => (\n                <span className={className} key={`skeleton-${index}`} />\n            ))}\n        </div>\n    );\n};\n\nexport default memo(DataOverviewDetailsSkeleton);\n","import { useCallback, useMemo } from 'preact/hooks';\nimport useCoreContext from '../core/Context/useCoreContext';\n\nconst _useAtomicTimezoneOperation = <Args extends any[], ReturnValue>(operation: (...args: Args) => ReturnValue) => {\n    const { i18n } = useCoreContext();\n\n    return useCallback(\n        (...args: Args) => {\n            // capture timezone to restore\n            const timezoneToRestore = i18n.timezone;\n            try {\n                // perform timezone operation\n                return operation(...args);\n            } finally {\n                // restore timezone\n                i18n.timezone = timezoneToRestore;\n            }\n        },\n        [i18n, operation]\n    );\n};\n\nconst _useActiveTimezone = (timezone?: string) => {\n    const { i18n } = useCoreContext();\n\n    const getActiveTimezone = _useAtomicTimezoneOperation(\n        useCallback(() => {\n            // first reset to system timezone,\n            // then attempt to set the specified timezone,\n            // will fail silently if specified timezone is invalid\n            i18n.timezone = undefined;\n            i18n.timezone = timezone;\n            return i18n.timezone!;\n        }, [i18n, timezone])\n    );\n\n    return useMemo(getActiveTimezone, [getActiveTimezone]);\n};\n\nconst useTimezoneAwareDateFormatting = (timezone?: string) => {\n    const { i18n } = useCoreContext();\n    const activeTimezone = _useActiveTimezone(timezone);\n\n    const dateFormat = _useAtomicTimezoneOperation(\n        useCallback<(typeof i18n)['date']>(\n            (...args) => {\n                i18n.timezone = activeTimezone;\n                return i18n.date(...args);\n            },\n            [i18n, activeTimezone]\n        )\n    );\n\n    const fullDateFormat = _useAtomicTimezoneOperation(\n        useCallback<(typeof i18n)['fullDate']>(\n            (...args) => {\n                i18n.timezone = activeTimezone;\n                return i18n.fullDate(...args);\n            },\n            [i18n, activeTimezone]\n        )\n    );\n\n    return { dateFormat, fullDateFormat } as const;\n};\n\nexport default useTimezoneAwareDateFormatting;\n","export const PD_BASE_CLASS = 'adyen-pe-payout-data';\nexport const PD_TITLE_CONTAINER_CLASS = `${PD_BASE_CLASS}__title-container`;\nexport const PD_TITLE_CLASS = `${PD_BASE_CLASS}__title`;\nexport const PD_TITLE_CLASS_WITH_EXTRA_DETAILS = `${PD_BASE_CLASS}__title--with-extra-details`;\nexport const PD_TITLE_BA_CLASS = `${PD_BASE_CLASS}__title--ba-id`;\nexport const PD_CONTENT_CLASS = `${PD_BASE_CLASS}__content`;\nexport const PD_EXTRA_DETAILS_CLASS = `${PD_BASE_CLASS}__extra-details`;\nexport const PD_EXTRA_DETAILS_LABEL = `${PD_BASE_CLASS}__extra-details-label`;\nexport const PD_EXTRA_DETAILS_ICON = `${PD_BASE_CLASS}__extra-details-icon`;\nexport const PD_BUTTON_ACTIONS = `${PD_BASE_CLASS}__button-actions`;\nexport const PD_SECTION_CLASS = `${PD_CONTENT_CLASS}--section`;\nexport const PD_CARD_CLASS = `${PD_CONTENT_CLASS}--card`;\nexport const PD_CARD_TITLE_CLASS = `${PD_CARD_CLASS}-title`;\nexport const PD_SECTION_AMOUNT_CLASS = `${PD_SECTION_CLASS}-amount`;\nexport const PD_SECTION_GROSS_AMOUNT_CLASS = `${PD_SECTION_AMOUNT_CLASS}-gross`;\nexport const PD_SECTION_NET_AMOUNT_CLASS = `${PD_SECTION_AMOUNT_CLASS}-net`;\nexport const PD_UNPAID_AMOUNT = `${PD_BASE_CLASS}--unpaid-amount`;\n","export enum TagVariant {\n    DEFAULT = 'default',\n    WARNING = 'warning',\n    ERROR = 'error',\n    SUCCESS = 'success',\n    WHITE = 'white',\n    LIGHT = 'light',\n    LIGHT_WITH_OUTLINE = 'light-with-outline',\n\n    // Adapted from the latest Bento tag variants spec\n    BLUE = 'blue',\n}\n\nexport interface TagProps {\n    variant?: TagVariant;\n    label?: string;\n}\n","import cx from 'classnames';\nimport { TagProps, TagVariant } from './types';\nimport './Tag.scss';\nimport { memo, PropsWithChildren } from 'preact/compat';\nexport const Tag = memo(({ variant = TagVariant.DEFAULT, label, children }: PropsWithChildren<TagProps>) => {\n    return (\n        <div\n            className={cx('adyen-pe-tag', {\n                // [TODO]: These Bento tag variants definitions are outdated\n                'adyen-pe-tag--success': variant === TagVariant.SUCCESS,\n                'adyen-pe-tag--default': variant === TagVariant.DEFAULT,\n                'adyen-pe-tag--warning': variant === TagVariant.WARNING,\n                'adyen-pe-tag--error': variant === TagVariant.ERROR,\n                'adyen-pe-tag--primary': variant === TagVariant.WHITE,\n                'adyen-pe-tag--light': variant === TagVariant.LIGHT,\n                'adyen-pe-tag--light-with-outline': variant === TagVariant.LIGHT_WITH_OUTLINE,\n                // Adopted from the latest Bento tag variants spec\n                'adyen-pe-tag--blue': variant === TagVariant.BLUE,\n            })}\n        >\n            {children || label}\n        </div>\n    );\n});\n","import Typography from '../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\nimport { LinkProps } from './types';\nimport { PropsWithChildren, TargetedEvent } from 'preact/compat';\nimport cx from 'classnames';\nimport { useCallback } from 'preact/hooks';\nimport './Link.scss';\nimport Icon from '../Icon';\n\nfunction Link({\n    href,\n    children,\n    variant = 'default',\n    truncate,\n    target = '_blank',\n    withIcon = true,\n    classNames = [],\n    ...props\n}: PropsWithChildren<LinkProps>) {\n    const onClick = useCallback((e: TargetedEvent<HTMLAnchorElement>) => e.stopPropagation(), []);\n    return (\n        <a\n            className={cx('adyen-pe-link', [...classNames], {\n                [`adyen-pe-link--${variant}`]: variant !== 'default',\n                'adyen-pe-link--truncate': truncate,\n            })}\n            href={href}\n            target={target}\n            rel=\"noopener noreferrer\"\n            onClick={onClick}\n            {...props}\n        >\n            <Typography className=\"adyen-pe-link__text\" el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                {children}\n            </Typography>\n            {withIcon && target === '_blank' && <Icon name=\"external-link\" />}\n        </a>\n    );\n}\n\nexport default Link;\n","import cx from 'classnames';\n\nconst Icon = ({ className, alt, url }: { className?: string; alt?: string; url: string }) => {\n    return (\n        <div className=\"adyen-pe-data-grid__icon-container\">\n            <img className={cx('adyen-pe-data-grid__icon', className)} alt={alt} src={url} />\n        </div>\n    );\n};\n\nexport default Icon;\n","import { createContext } from 'preact';\nimport { useContext } from 'preact/hooks';\nimport { DataGridContextProps } from '../types';\nimport { EMPTY_OBJECT } from '../../../../utils';\n\nexport const DataGridContext = createContext<DataGridContextProps>(EMPTY_OBJECT as any);\n\nexport const useDataGridContext = () => useContext(DataGridContext);\n","import { HTMLAttributes, PropsWithChildren } from 'preact/compat';\nimport { useDataGridContext } from './hooks/useDataGridContext';\nimport { useEffect, useRef } from 'preact/hooks';\nimport { cloneElement, isValidElement } from 'preact';\nimport cx from 'classnames';\nimport { CellTextPosition } from './types';\n\nexport default function DataGridCell({\n    children,\n    column,\n    position,\n    ...props\n}: PropsWithChildren<HTMLAttributes<HTMLDivElement>> & { column: string; position?: string }) {\n    const { registerCells } = useDataGridContext();\n    const ref = useRef<HTMLDivElement>(null);\n\n    useEffect(() => {\n        if (ref.current) {\n            registerCells({\n                column,\n                width: ref.current?.getBoundingClientRect().width,\n            });\n        }\n    }, [column, registerCells]);\n\n    return (\n        <div\n            role=\"cell\"\n            className={cx('adyen-pe-data-grid__cell', {\n                'adyen-pe-data-grid__cell--right': position === 'right',\n                'adyen-pe-data-grid__cell--center': position === 'center',\n            })}\n            {...props}\n        >\n            {children && isValidElement(children)\n                ? cloneElement(children, {\n                      ...children?.props,\n                      ref: ref,\n                      style: { width: 'min-content' },\n                  })\n                : null}\n        </div>\n    );\n}\n","import { TargetedMouseEvent } from 'preact';\nimport DataGridCell from '../DataGridCell';\nimport { DataGridColumn } from '../types';\nimport { CustomCell } from '../DataGrid';\nimport Icon from './Icon';\nimport { CustomButtonObject, CustomDataObject, CustomIconObject, CustomLinkObject } from '../../../types';\nimport Button from '../../Button';\nimport Link from '../../Link/Link';\nimport { ButtonVariant } from '../../Button/types';\nimport cx from 'classnames';\n\nexport const isCustomDataObject = (item: any): item is CustomDataObject => {\n    return !!item && typeof item === 'object' && 'value' in item;\n};\n\nconst _isIconType = (item: any): item is CustomIconObject => {\n    return !!item && typeof item === 'object' && item.type === 'icon';\n};\n\nconst _isButtonType = (item: any): item is CustomButtonObject => {\n    return !!item && typeof item === 'object' && item.type === 'button';\n};\n\nconst _isLinkType = (item: any): item is CustomLinkObject => {\n    return !!item && typeof item === 'object' && item.type === 'link';\n};\n\nexport const TableCells = <\n    Items extends Array<any>,\n    Columns extends Array<DataGridColumn<Extract<keyof Items[number], string>>>,\n    CustomCells extends CustomCell<Items, Columns, Columns[number]>,\n>({\n    columns,\n    customCells,\n    item,\n    rowIndex,\n}: {\n    columns: Columns;\n    customCells?: CustomCells;\n    item: Items[number];\n    rowIndex: number;\n}) => {\n    return (\n        <>\n            {columns.map(({ key, position }) => {\n                if (customCells?.[key])\n                    return (\n                        <DataGridCell aria-labelledby={String(key)} key={key} column={key} position={position}>\n                            <div style={{ width: 'min-content' }}>\n                                {\n                                    // TODO create safeguard to remove \"as any\" assertion\n                                    customCells[key]!({\n                                        key,\n                                        value: item[key],\n                                        item,\n                                        rowIndex,\n                                    } as any)\n                                }\n                            </div>\n                        </DataGridCell>\n                    );\n\n                const data = item[key] as CustomDataObject;\n\n                const { value, type } = isCustomDataObject(data) ? data : { value: data, type: 'text' };\n\n                const icon = _isIconType(data)\n                    ? { url: data?.config?.src, alt: data?.config?.alt !== undefined && data?.config?.alt !== null ? data?.config?.alt : data.value }\n                    : undefined;\n                const buttonCallback = _isButtonType(data)\n                    ? (e: TargetedMouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n                          e.stopPropagation();\n                          data?.config?.action();\n                      }\n                    : undefined;\n\n                return (\n                    <DataGridCell aria-labelledby={String(key)} key={key} column={key} position={position}>\n                        <div className=\"adyen-pe-data-grid__cell-value\">\n                            {_isIconType(data) && data.config && icon?.url && (\n                                <div className={cx('adyen-pe-data-grid__icon-cell', data?.config?.className)}>\n                                    <Icon {...icon} />\n                                    {value.trim() && <span>{value}</span>}\n                                </div>\n                            )}\n                            {type === 'text' && <span className={cx(data?.config?.className)}>{value}</span>}\n                            {type === 'button' && data.config && buttonCallback && (\n                                <Button className={cx(data.config?.className)} onClick={buttonCallback} variant={ButtonVariant.SECONDARY}>\n                                    {value}\n                                </Button>\n                            )}\n                            {_isLinkType(data) && data.config && (\n                                <Link\n                                    classNames={data.config.className ? [data.config.className] : []}\n                                    href={data.config.href}\n                                    target={data.config.target}\n                                >\n                                    {value}\n                                </Link>\n                            )}\n                        </div>\n                    </DataGridCell>\n                );\n            })}\n        </>\n    );\n};\n","import { ButtonVariant } from '../types';\nimport { ComponentChild, VNode } from 'preact';\n\nexport interface ButtonActionObject {\n    title: string;\n    event: (event: Event) => void;\n    disabled?: boolean;\n    variant?: ButtonVariant;\n    renderTitle?: (title: string) => ComponentChild;\n    state?: 'loading' | 'default';\n    classNames?: string[];\n    iconLeft?: VNode<Element>;\n    iconRight?: VNode<Element>;\n    ariaLabel?: string;\n}\n\nexport type ButtonActionsList = ButtonActionObject[] | readonly ButtonActionObject[];\n\nexport enum ButtonActionsLayoutBasic {\n    BUTTONS_END = 'buttons-end',\n    FILL_CONTAINER = 'fill-container',\n    SPACE_BETWEEN = 'space-between',\n    VERTICAL_STACK = 'vertical-stack',\n}\n\nexport enum ButtonActionsLayoutExtended {\n    BUTTONS_START = 'buttons-start',\n}\n\nexport const ButtonActionsLayout = { ...ButtonActionsLayoutBasic, ...ButtonActionsLayoutExtended };\nexport type ButtonActionsLayout = ButtonActionsLayoutBasic | ButtonActionsLayoutExtended;\n","import Button from '../../Button';\nimport { ButtonActionsLayout, ButtonActionsList } from './types';\nimport { BUTTON_ACTION_CLASSNAME, BUTTON_ACTION_CONTAINER_CLASSNAME } from '../constants';\nimport { ButtonVariant } from '../types';\nimport './ButtonActions.scss';\nimport { memo } from 'preact/compat';\nimport { useMemo } from 'preact/hooks';\nimport cx from 'classnames';\n\ninterface ButtonActionsProps {\n    actions: ButtonActionsList;\n    layout?: ButtonActionsLayout;\n}\nfunction ButtonActions({ actions, layout = ButtonActionsLayout.BUTTONS_END }: ButtonActionsProps) {\n    const conditionalClasses = (): string => {\n        return `${BUTTON_ACTION_CLASSNAME}--${layout}`;\n    };\n\n    const generateButtonVariantByIndex = (actionIndex: number) => {\n        const lastActionIndex = actions.length - 1;\n        return actionIndex === lastActionIndex ? ButtonVariant.PRIMARY : ButtonVariant.SECONDARY;\n    };\n\n    const reversedActions = useMemo(() => [...actions].reverse(), [actions]);\n\n    return (\n        <div className={BUTTON_ACTION_CLASSNAME}>\n            <div className={`${BUTTON_ACTION_CONTAINER_CLASSNAME} ${conditionalClasses()}`} role=\"group\">\n                {reversedActions.map((button, index) => (\n                    <Button\n                        className={cx(button.classNames)}\n                        aria-label={button.ariaLabel ?? button.title}\n                        key={`${index}_${button.title || '0'}`}\n                        disabled={button.disabled}\n                        variant={button.variant || generateButtonVariantByIndex(index)}\n                        onClick={button.event}\n                        state={button.state ?? 'default'}\n                        iconLeft={button.iconLeft}\n                        iconRight={button.iconRight}\n                    >\n                        {button.renderTitle ? button.renderTitle(button.title) : button.title}\n                    </Button>\n                ))}\n            </div>\n        </div>\n    );\n}\n\nexport default memo(ButtonActions);\n","import Localization, { TranslationKey, TranslationOptions } from '../../../core/Localization';\nimport { EMPTY_OBJECT } from '../../../utils';\n\nexport interface KeyFactoryConfig {\n    prefix?: string;\n    suffix?: string;\n}\n\nexport interface KeyFactoryFunction {\n    (value?: string): string | undefined;\n}\n\nexport interface TranslationFactoryFunction {\n    (i18n: Localization['i18n'], value?: string, options?: TranslationOptions): string | undefined;\n}\n\nexport interface TranslationFallbackFunction {\n    (translationKey: string | undefined, value: string | undefined, options: TranslationOptions | undefined): string | undefined;\n}\n\nexport const createKeyFactoryFromConfig = (config?: KeyFactoryConfig): KeyFactoryFunction => {\n    const { prefix = '', suffix = '' } = config ?? (EMPTY_OBJECT as NonNullable<typeof config>);\n    return (value?: string) => (value == undefined ? undefined : `${prefix}${value}${suffix}`);\n};\n\nexport const createDynamicTranslationFactory =\n    (keyFactory: KeyFactoryFunction, translationFallback?: TranslationFallbackFunction): TranslationFactoryFunction =>\n    (i18n, value, options) => {\n        let translation: string | undefined = undefined;\n        const translationKey = keyFactory(value);\n\n        if (translationKey != undefined) {\n            translation = i18n.get(translationKey as TranslationKey, options);\n            translation = translation === translationKey ? undefined : translation;\n        }\n\n        return translation ?? translationFallback?.(translationKey, value, options);\n    };\n","import { TranslationKey } from '../../../translations';\nimport { IDispute, IDisputeStatus, IDisputeStatusGroup, IDisputeType } from '../../../types/api/models/disputes';\n\nexport const DISPUTE_ACTION_NEEDED_URGENTLY_THRESHOLD_DAYS = 10;\n\nexport const DISPUTE_PAYMENT_SCHEMES = {\n    mc: 'Mastercard',\n    visa: 'Visa',\n    ach: 'ACH Direct Debit',\n    amex: 'American Express',\n    discover: 'Discover',\n    elo: 'Elo',\n    jcb: 'JCB',\n    pulse: 'PULSE',\n    sepadirectdebit: 'SEPA Direct Debit',\n    others: 'Others',\n} as const;\n\nexport const DISPUTE_REASON_CATEGORIES = {\n    FRAUD: 'disputes.common.reasonCategories.fraud',\n    CONSUMER_DISPUTE: 'disputes.common.reasonCategories.consumerDispute',\n    PROCESSING_ERROR: 'disputes.common.reasonCategories.processingError',\n    REQUEST_FOR_INFORMATION: 'disputes.common.reasonCategories.requestForInformation',\n    AUTHORISATION_ERROR: 'disputes.common.reasonCategories.authorisationError',\n    ADJUSTMENT: 'disputes.common.reasonCategories.adjustment',\n    OTHER: 'disputes.common.reasonCategories.other',\n} satisfies Record<IDispute['reason']['category'], TranslationKey>;\n\nexport const DISPUTE_STATUS_GROUPS = {\n    CHARGEBACKS: 'disputes.overview.common.statusGroups.chargebacks',\n    FRAUD_ALERTS: 'disputes.overview.common.statusGroups.fraudAlerts',\n    ONGOING_AND_CLOSED: 'disputes.overview.common.statusGroups.ongoingAndClosed',\n} satisfies Record<IDisputeStatusGroup, TranslationKey>;\n\nexport const DISPUTE_STATUSES = {\n    ACCEPTED: 'disputes.common.statuses.accepted',\n    EXPIRED: 'disputes.common.statuses.expired',\n    LOST: 'disputes.common.statuses.lost',\n    PENDING: 'disputes.common.statuses.pending',\n    RESPONDED: 'disputes.common.statuses.responded',\n    UNDEFENDED: 'disputes.common.statuses.undefended',\n    UNRESPONDED: 'disputes.common.statuses.unresponded',\n    WON: 'disputes.common.statuses.won',\n} as const satisfies Record<IDisputeStatus, TranslationKey>;\n\nexport const DISPUTE_TYPES = {\n    CHARGEBACK: 'disputes.management.details.types.chargeback',\n    NOTIFICATION_OF_FRAUD: 'disputes.management.details.types.notificationOfFraud',\n    REQUEST_FOR_INFORMATION: 'disputes.management.details.types.requestForInformation',\n} as const satisfies Record<IDisputeType, TranslationKey>;\n","import { IAmount, IBalanceAccountBase, ITransactionCategory, ITransactionStatus } from '../../../types';\nimport { ExternalUIComponentProps, TransactionOverviewComponentProps } from '../../types';\nimport { RangeTimestamps } from '../../internal/Calendar/calendar/timerange';\nimport { TranslationKey } from '../../../translations';\n\ntype _DateRangeKey<T extends TranslationKey> = T;\n\nexport type TransactionsDateRange =\n    | _DateRangeKey<'common.filters.types.date.rangeSelect.options.last7Days'>\n    | _DateRangeKey<'common.filters.types.date.rangeSelect.options.last30Days'>\n    | _DateRangeKey<'common.filters.types.date.rangeSelect.options.last180Days'>\n    | _DateRangeKey<'common.filters.types.date.rangeSelect.options.thisWeek'>\n    | _DateRangeKey<'common.filters.types.date.rangeSelect.options.lastWeek'>\n    | _DateRangeKey<'common.filters.types.date.rangeSelect.options.thisMonth'>\n    | _DateRangeKey<'common.filters.types.date.rangeSelect.options.lastMonth'>\n    | _DateRangeKey<'common.filters.types.date.rangeSelect.options.yearToDate'>\n    | _DateRangeKey<'common.filters.types.date.rangeSelect.options.custom'>;\n\nexport interface TransactionsFilters {\n    balanceAccount?: Readonly<IBalanceAccountBase>;\n    categories: readonly ITransactionCategory[];\n    statuses: readonly ITransactionStatus[];\n    currencies: readonly IAmount['currency'][];\n    createdDate: RangeTimestamps;\n    paymentPspReference?: string;\n}\n\nexport const enum TransactionsView {\n    TRANSACTIONS = 'transactions',\n    INSIGHTS = 'insights',\n}\n\nexport type TransactionOverviewProps = ExternalUIComponentProps<\n    TransactionOverviewComponentProps & { balanceAccounts: IBalanceAccountBase[] | undefined; isLoadingBalanceAccount: boolean }\n>;\n","import type {\n    RangeTimestamp,\n    RangeTimestampOffsets,\n    RangeTimestamps,\n    RangeTimestampsConfig,\n    RangeTimestampsConfigContext,\n    RangeTimestampsConfigParameter,\n    RangeTimestampsConfigParameterValue,\n    RangeTimestampsConfigRestampingContext,\n    RangeTimestampsConfigWithFromOffsets,\n    RangeTimestampsConfigWithoutOffsets,\n} from './types';\nimport { Restamper, RestamperWithTimezone, systemToTimezone, timezoneToSystem } from '../../../../../core/Localization/datetime/restamper';\nimport { clamp, enumerable, getter, hasOwnProperty, isBitSafeInteger, isFunction, isNullish, isUndefined, noop, struct } from '../../../../../utils';\n\nexport const createRangeTimestampsConfigRestampingContext = (restamper: RestamperWithTimezone) =>\n    Object.freeze({\n        systemToTimezone: enumerable((time?: Parameters<Restamper>[0]) => systemToTimezone(restamper, time)),\n        timezoneToSystem: enumerable((time?: Parameters<Restamper>[0]) => timezoneToSystem(restamper, time)),\n        timezoneOffset: enumerable((time?: Parameters<Restamper>[0]) => restamper(time).offset),\n    }) as { [P in keyof RangeTimestampsConfigRestampingContext]: TypedPropertyDescriptor<RangeTimestampsConfigRestampingContext[P]> };\n\nexport const getRangeTimestampsContextIntegerPropertyFactory = <T extends number = number>(\n    minInteger: T,\n    maxInteger: T,\n    defaultInteger: T = minInteger\n) => {\n    const _getNormalizedValue = (value?: T | null, fallbackValue?: T) => {\n        let normalizedValue = value as T;\n\n        if (isNullish(value)) normalizedValue = defaultInteger;\n        else if (!isBitSafeInteger(value)) normalizedValue = fallbackValue ?? defaultInteger;\n\n        const clampedValue = clamp(minInteger, normalizedValue, maxInteger) as T;\n        return clampedValue === normalizedValue ? clampedValue : (fallbackValue ?? defaultInteger);\n    };\n\n    return (initialValue?: T) => {\n        const valueGetter = getter(() => normalizedValue);\n        let normalizedValue = _getNormalizedValue(initialValue);\n\n        return struct({\n            value: valueGetter,\n            descriptor: enumerable({\n                ...valueGetter,\n                set(this: RangeTimestamps, value?: T | null) {\n                    const currentValue = normalizedValue;\n                    normalizedValue = _getNormalizedValue(value, normalizedValue);\n                    if (currentValue !== normalizedValue) this.now = this.now;\n                },\n            }),\n        }) as Readonly<{\n            value: T;\n            descriptor: TypedPropertyDescriptor<T>;\n        }>;\n    };\n};\n\nexport const getRangeTimestampsConfigParameterUnwrapper =\n    (config: RangeTimestampsConfig, context: RangeTimestampsConfigContext) =>\n    <T = {}>(value: T): RangeTimestampsConfigParameterValue<T> =>\n        isFunction(value) ? value.call(config, context) : (value as RangeTimestampsConfigParameterValue<T>);\n\nexport const isRangeTimestampsConfigWithoutOffsets = (config: RangeTimestampsConfig): config is RangeTimestampsConfigWithoutOffsets =>\n    !hasOwnProperty(config, 'offsets');\n\nexport const isRangeTimestampsConfigWithFromOffsets = (\n    config: Exclude<RangeTimestampsConfig, RangeTimestampsConfigWithoutOffsets>\n): config is RangeTimestampsConfigWithFromOffsets => hasOwnProperty(config, 'from');\n\nexport const nowTimestamp = (({ now }) => now) satisfies RangeTimestampsConfigParameter<RangeTimestamp>;\n\nexport const offsetsForNDays = (() => {\n    const _cache = new Map<number, RangeTimestampOffsets>();\n\n    return (numberOfDays: number) => {\n        let offsets = _cache.get(numberOfDays);\n\n        if (isUndefined(offsets)) {\n            offsets = Object.freeze([0, 0, numberOfDays, 0, 0, 0, -1] as const);\n            _cache.set(numberOfDays, offsets);\n        }\n\n        return offsets;\n    };\n})();\n\nexport const parseRangeTimestamp = (timestamp: Date | RangeTimestamp): RangeTimestamp | undefined => {\n    try {\n        const normalizedTimestamp = timestamp instanceof Date || +timestamp === timestamp ? timestamp : undefined;\n        const parsedTimestamp = new Date(normalizedTimestamp as RangeTimestamp).getTime();\n        return isNaN(parsedTimestamp) ? undefined : parsedTimestamp;\n    } catch {\n        /* ignore any parsing exception and implicitly return `undefined` */\n    }\n};\n\nexport const getDateRangeTimestamps = (range: RangeTimestamps, now: number, timezone?: string) => {\n    let restoreRangeState = noop;\n    try {\n        const timestampToRestore = range.now;\n        const timezoneToRestore = range.timezone;\n\n        restoreRangeState = () => {\n            range.now = timestampToRestore;\n            range.timezone = timezoneToRestore;\n        };\n\n        range.now = now;\n        range.timezone = timezone;\n        const { from, to } = range;\n        return { from, to } as const;\n    } finally {\n        restoreRangeState();\n    }\n};\n","import { asPlainObject, EMPTY_OBJECT, getter, struct } from '../../../../../utils';\nimport restamper, { RestamperWithTimezone } from '../../../../../core/Localization/datetime/restamper';\nimport type { RangeTimestamp, RangeTimestamps, RangeTimestampsConfig, RangeTimestampsConfigContext } from './types';\nimport {\n    createRangeTimestampsConfigRestampingContext,\n    getRangeTimestampsConfigParameterUnwrapper,\n    isRangeTimestampsConfigWithFromOffsets,\n    isRangeTimestampsConfigWithoutOffsets,\n    parseRangeTimestamp,\n} from './utils';\n\nconst createRangeTimestampsFactory = <T extends Record<any, any> = {}>(\n    config = EMPTY_OBJECT as RangeTimestampsConfig,\n    additionalContext = EMPTY_OBJECT as { [P in keyof T]: TypedPropertyDescriptor<T[P]> }\n) => {\n    const _config = asPlainObject(config);\n    const _additionalContext = asPlainObject(additionalContext);\n\n    return () => {\n        const _restamper = restamper();\n        const nowDescriptor = getter(() => NOW);\n        const tzDescriptor = getter(() => _restamper.tz.current);\n        const configContext = struct({\n            now: nowDescriptor,\n            timezone: tzDescriptor,\n            ...createRangeTimestampsConfigRestampingContext(_restamper),\n        }) as RangeTimestampsConfigContext;\n        const unwrap = getRangeTimestampsConfigParameterUnwrapper(_config, configContext);\n\n        let { from, to, now: NOW } = EMPTY_OBJECT as RangeTimestamps;\n\n        const nowSetter = (timestamp?: Date | RangeTimestamp | null) => {\n            NOW = parseRangeTimestamp((timestamp ?? Date.now()) as RangeTimestamp) ?? NOW;\n\n            parsing: {\n                if (isRangeTimestampsConfigWithoutOffsets(_config)) {\n                    from = parseRangeTimestamp(unwrap(_config.from)) ?? NOW;\n                    to = parseRangeTimestamp(unwrap(_config.to)) ?? NOW;\n                    break parsing;\n                }\n\n                let date: Date;\n                let direction: 1 | -1;\n                let withRangeFrom: boolean;\n\n                if ((withRangeFrom = isRangeTimestampsConfigWithFromOffsets(_config))) {\n                    date = new Date((from = parseRangeTimestamp(unwrap(_config.from)) ?? NOW));\n                    direction = 1;\n                } else {\n                    date = new Date((to = parseRangeTimestamp(unwrap(_config.to)) ?? NOW));\n                    direction = -1;\n                }\n\n                // revert timestamp to system timezone ahead of offset operations\n                date = new Date(configContext.timezoneToSystem(date));\n\n                const [years = 0, months = 0, days = 0, hours = 0, minutes = 0, seconds = 0, ms = 0] = unwrap(_config.offsets);\n\n                date.setFullYear(date.getFullYear() + years * direction, date.getMonth() + months * direction, date.getDate() + days * direction);\n\n                date.setHours(\n                    date.getHours() + hours * direction,\n                    date.getMinutes() + minutes * direction,\n                    date.getSeconds() + seconds * direction,\n                    date.getMilliseconds() + ms * direction\n                );\n\n                // restamp timestamp to current target timezone before update range\n                const timestamp = parseRangeTimestamp(configContext.systemToTimezone(date)) ?? NOW;\n\n                withRangeFrom ? (to = timestamp) : (from = timestamp);\n            }\n\n            if (from > to) [from, to] = [to, from];\n        };\n\n        const tzSetter = (timezone?: RestamperWithTimezone['tz']['current'] | null) => {\n            const tz = _restamper.tz;\n            const currentTimezone = tz.current;\n            _restamper.tz = timezone;\n            if (tz.current !== currentTimezone) nowSetter(NOW);\n        };\n\n        nowSetter();\n\n        return struct<RangeTimestamps<T>>({\n            ..._additionalContext,\n            from: getter(() => from),\n            now: { ...nowDescriptor, set: nowSetter },\n            timezone: { ...tzDescriptor, set: tzSetter },\n            to: getter(() => to),\n        });\n    };\n};\n\nexport default createRangeTimestampsFactory;\n","import restamper, { systemToTimezone, timezoneToSystem } from '../../../../core/Localization/datetime/restamper';\nimport { BASE_LOCALE, BASE_FORMAT_OPTIONS } from '../../../../core/Localization/datetime/restamper/constants';\nimport { DEFAULT_DATETIME_FORMAT } from '../../../../core/Localization/constants/localization';\nimport { EMPTY_ARRAY, EMPTY_OBJECT, identity, isInfinity, isUndefined, mod } from '../../../../utils';\nimport type { Month, MonthDays, Time, WeekDay } from './types';\n\nconst DATE_PARTS_REGEX = /^(\\d{2})\\/(\\d{2})\\/(-?\\d+),\\s+(\\d{2}):(\\d{2}):(\\d{2}).(\\d{3})/;\n\nconst _startTimestamp =\n    <RestArgs extends any[], DateAdjustmentFn extends (date: Date, ...args: RestArgs) => Date | number>(\n        adjustDate = identity as unknown as DateAdjustmentFn\n    ) =>\n    (timestamp: Date | number, timezone?: string, ...args: RestArgs) => {\n        const restamper = withTimezone(timezone);\n        const restampedDate = new Date(timezoneToSystem(restamper, timestamp));\n        restampedDate.setHours(0, 0, 0, 0);\n        return systemToTimezone(restamper, adjustDate(restampedDate, ...args));\n    };\n\nexport const startOfDay = _startTimestamp();\nexport const startOfMonth = _startTimestamp(date => date.setDate(1));\nexport const startOfYear = _startTimestamp(date => date.setMonth(0, 1));\n\nexport const startOfWeek = _startTimestamp((date, firstWeekDay?: WeekDay) => {\n    const dateOffset = getWeekDayIndex(date.getDay() as WeekDay, firstWeekDay ?? 0);\n    return date.setDate(date.getDate() - dateOffset);\n});\n\nexport const isLeapYear = (year: number) => (year % 100 ? year % 4 : year % 400) === 0;\n\nexport const getMonthDays = (month: Month, year: number, offset = 0) => {\n    const nextMonth = month + offset;\n    const monthIndex = mod(nextMonth, 12) as Month;\n    const nextYear = year + Math.floor(nextMonth / 12);\n\n    let days: MonthDays = 31;\n\n    switch (monthIndex) {\n        case 1:\n            days = isLeapYear(nextYear) ? 29 : 28;\n            break;\n        case 3:\n        case 5:\n        case 8:\n        case 10:\n            days = 30;\n            break;\n    }\n\n    return [days, monthIndex, nextYear] as const;\n};\n\nexport const getWeekDayIndex = (weekDay: WeekDay, firstWeekDay: WeekDay = 0) => ((7 - firstWeekDay + weekDay) % 7) as WeekDay;\n\nexport const computeTimestampOffset = (timestamp: number, timezone?: string) =>\n    isInfinity(timestamp) ? 0 : timestamp - startOfDay(timestamp, timezone);\n\nexport const getDateObjectFromTimestamp = (timestamp?: number) => (isUndefined(timestamp) ? timestamp : new Date(timestamp));\n\nexport const getTimezoneDateString = (date: number | string | Date, options: Intl.DateTimeFormatOptions = EMPTY_OBJECT) => {\n    const restamper = withTimezone(options.timeZone);\n    const dateOptions = { ...DEFAULT_DATETIME_FORMAT, ...options, timeZone: restamper.tz.current };\n    return new Date(date).toLocaleDateString(BASE_LOCALE, dateOptions);\n};\n\nexport const getTimezoneDateParts = (date: number | string | Date, timeZone?: string) => {\n    const dateString = getTimezoneDateString(date, { ...BASE_FORMAT_OPTIONS, ...DEFAULT_DATETIME_FORMAT, timeZone, hour12: false });\n    const [, month = '', day = '', year = '', hours = '', minutes = '', seconds = '', ms = ''] = dateString.match(DATE_PARTS_REGEX) ?? EMPTY_ARRAY;\n    return [+year, +month - 1, +day, +hours % 24, +minutes, +seconds, +ms] as const;\n};\n\nexport const getEdgesDistance = (fromTime: Time, toTime: Time, timezone?: string) => {\n    if (isInfinity(fromTime) || isInfinity(toTime)) return Infinity;\n    const [fromYear, fromMonth] = getTimezoneDateParts(fromTime, timezone);\n    const [toYear, toMonth] = getTimezoneDateParts(toTime, timezone);\n    return Math.abs(toMonth - fromMonth + (toYear - fromYear) * 12);\n};\n\nexport const withTimezone = (() => {\n    const _restamper = restamper();\n    return (timezone?: string) => {\n        _restamper.tz = undefined; // first reset to system timezone\n        _restamper.tz = timezone;\n        return _restamper;\n    };\n})();\n","import { clamp } from '../../../../../../../utils';\nimport createRangeTimestampsFactory from '../../factory';\nimport type { RangeTimestampOffsets } from '../../types';\nimport { nowTimestamp } from '../../utils';\nimport { startOfMonth } from '../../../utils';\n\nexport const ONE_MONTH_OFFSETS = Object.freeze([0, 1, 0, 0, 0, 0, -1] as const) as RangeTimestampOffsets;\n\nconst offsetMonth = (monthCount: number = 0) => {\n    const months = ~~clamp(0, monthCount as number, Infinity) || 0;\n    const restConfig = months ? { offsets: ONE_MONTH_OFFSETS } : { to: nowTimestamp };\n\n    return createRangeTimestampsFactory({\n        from: ({ now, timezone, systemToTimezone, timezoneToSystem }) => {\n            const date = new Date(timezoneToSystem(startOfMonth(now, timezone)));\n            date.setMonth(date.getMonth() - months);\n            return systemToTimezone(date);\n        },\n        ...restConfig,\n    });\n};\n\nexport default offsetMonth;\n","import offsetMonth from './shared/offsetMonth';\nconst lastMonth = offsetMonth(1);\nexport default lastMonth;\n","import createRangeTimestampsFactory from '../factory';\nimport { getRangeTimestampsContextIntegerPropertyFactory, nowTimestamp } from '../utils';\nimport { startOfDay } from '../../utils';\n\nexport const MAX_NUM_DAYS = 365;\nexport const MIN_NUM_DAYS = 1;\nexport const DEFAULT_NUM_DAYS = 1;\n\nconst _getNumberOfDaysContext = getRangeTimestampsContextIntegerPropertyFactory<number>(MIN_NUM_DAYS, MAX_NUM_DAYS, DEFAULT_NUM_DAYS);\n\nconst lastNDays = (numberOfDays?: number) => {\n    const numberOfDaysContext = _getNumberOfDaysContext(numberOfDays);\n\n    return createRangeTimestampsFactory(\n        {\n            from: ({ now, timezone, systemToTimezone, timezoneToSystem }) => {\n                const date = new Date(timezoneToSystem(startOfDay(now, timezone)));\n                date.setDate(date.getDate() - numberOfDaysContext.value + 1);\n                return systemToTimezone(date);\n            },\n            to: nowTimestamp,\n        },\n        { numberOfDays: numberOfDaysContext.descriptor }\n    )();\n};\n\nexport default lastNDays;\n","import { clamp } from '../../../../../../../utils';\nimport createRangeTimestampsFactory from '../../factory';\nimport { getRangeTimestampsContextIntegerPropertyFactory, nowTimestamp, offsetsForNDays } from '../../utils';\nimport { startOfWeek } from '../../../utils';\nimport type { WeekDay } from '../../../types';\n\nexport const DEFAULT_FIRST_WEEK_DAY = 1;\nexport const ONE_WEEK_OFFSETS = offsetsForNDays(7);\n\nconst _getFirstWeekDayContext = getRangeTimestampsContextIntegerPropertyFactory<WeekDay>(0, 6, DEFAULT_FIRST_WEEK_DAY);\n\nconst offsetWeek = (weekCount: number = 0) => {\n    const weeks = ~~clamp(0, weekCount as number, Infinity) || 0;\n\n    return (firstWeekDay: WeekDay = DEFAULT_FIRST_WEEK_DAY) => {\n        const restConfig = weeks ? { offsets: ONE_WEEK_OFFSETS } : { to: nowTimestamp };\n        const firstWeekDayContext = _getFirstWeekDayContext(firstWeekDay);\n\n        return createRangeTimestampsFactory(\n            {\n                from: ({ now, timezone, systemToTimezone, timezoneToSystem }) => {\n                    const date = new Date(timezoneToSystem(startOfWeek(now, timezone, firstWeekDayContext.value)));\n                    date.setDate(date.getDate() - weeks * 7);\n                    return systemToTimezone(date);\n                },\n                ...restConfig,\n            },\n            { firstWeekDay: firstWeekDayContext.descriptor }\n        )();\n    };\n};\n\nexport default offsetWeek;\n","import offsetWeek from './shared/offsetWeek';\nconst lastWeek = offsetWeek(1);\nexport default lastWeek;\n","import offsetMonth from './shared/offsetMonth';\nconst thisMonth = offsetMonth(0);\nexport default thisMonth;\n","import offsetWeek from './shared/offsetWeek';\nconst thisWeek = offsetWeek(0);\nexport default thisWeek;\n","import createRangeTimestampsFactory from '../factory';\nimport { nowTimestamp } from '../utils';\nimport { startOfYear } from '../../utils';\n\nconst yearToDate = createRangeTimestampsFactory({\n    from: ({ now, timezone }) => startOfYear(now, timezone),\n    to: nowTimestamp,\n});\n\nexport default yearToDate;\n","import { TranslationKey } from '../../../translations';\nimport { ITransaction, ITransactionCategory, ITransactionStatus } from '../../../types';\nimport { TransactionsDateRange, TransactionsFilters, TransactionsView } from './types';\nimport * as RangePreset from '../../internal/Calendar/calendar/timerange/presets';\n\nconst ROOT_CLASS = 'adyen-pe-transactions';\nexport const BASE_CLASS = ROOT_CLASS + '-overview';\nexport const DETAILS_CLASS = ROOT_CLASS + '-details';\n\nexport const classes = {\n    root: BASE_CLASS,\n    rootSmall: BASE_CLASS + '--xs',\n    summary: BASE_CLASS + '__summary',\n    summaryItem: BASE_CLASS + '__summary-item',\n    toolbar: BASE_CLASS + '__toolbar',\n    details: DETAILS_CLASS,\n    filterBarSmall: BASE_CLASS + '__filter-bar-small',\n    totalsError: BASE_CLASS + '__totals-error',\n} as const;\n\nexport const TRANSACTION_DATE_RANGE_CUSTOM = 'common.filters.types.date.rangeSelect.options.custom' satisfies TransactionsDateRange;\nexport const TRANSACTION_DATE_RANGE_LAST_7_DAYS = 'common.filters.types.date.rangeSelect.options.last7Days' satisfies TransactionsDateRange;\nexport const TRANSACTION_DATE_RANGE_LAST_30_DAYS = 'common.filters.types.date.rangeSelect.options.last30Days' satisfies TransactionsDateRange;\nexport const TRANSACTION_DATE_RANGE_LAST_180_DAYS = 'common.filters.types.date.rangeSelect.options.last180Days' satisfies TransactionsDateRange;\nexport const TRANSACTION_DATE_RANGE_THIS_WEEK = 'common.filters.types.date.rangeSelect.options.thisWeek' satisfies TransactionsDateRange;\nexport const TRANSACTION_DATE_RANGE_LAST_WEEK = 'common.filters.types.date.rangeSelect.options.lastWeek' satisfies TransactionsDateRange;\nexport const TRANSACTION_DATE_RANGE_THIS_MONTH = 'common.filters.types.date.rangeSelect.options.thisMonth' satisfies TransactionsDateRange;\nexport const TRANSACTION_DATE_RANGE_LAST_MONTH = 'common.filters.types.date.rangeSelect.options.lastMonth' satisfies TransactionsDateRange;\nexport const TRANSACTION_DATE_RANGE_YEAR_TO_DATE = 'common.filters.types.date.rangeSelect.options.yearToDate' satisfies TransactionsDateRange;\n\nexport const TRANSACTION_DATE_RANGE_DEFAULT = TRANSACTION_DATE_RANGE_LAST_180_DAYS;\n\nexport const TRANSACTION_DATE_RANGES = Object.freeze({\n    [TRANSACTION_DATE_RANGE_LAST_7_DAYS]: RangePreset.lastNDays(7),\n    [TRANSACTION_DATE_RANGE_LAST_30_DAYS]: RangePreset.lastNDays(30),\n    [TRANSACTION_DATE_RANGE_LAST_180_DAYS]: RangePreset.lastNDays(180),\n    [TRANSACTION_DATE_RANGE_THIS_WEEK]: RangePreset.thisWeek(),\n    [TRANSACTION_DATE_RANGE_LAST_WEEK]: RangePreset.lastWeek(),\n    [TRANSACTION_DATE_RANGE_THIS_MONTH]: RangePreset.thisMonth(),\n    [TRANSACTION_DATE_RANGE_LAST_MONTH]: RangePreset.lastMonth(),\n    [TRANSACTION_DATE_RANGE_YEAR_TO_DATE]: RangePreset.yearToDate(),\n} as const);\n\nexport const TRANSACTION_DATE_RANGE_DEFAULT_TIMESTAMPS = TRANSACTION_DATE_RANGES[TRANSACTION_DATE_RANGE_DEFAULT];\nexport const TRANSACTION_DATE_RANGE_MAX_YEARS = 2;\n\nexport const TRANSACTION_STATUSES: readonly ITransactionStatus[] = ['Booked', 'Pending', 'Reversed'] as const;\n\nexport const TRANSACTION_CATEGORIES: readonly ITransactionCategory[] = [\n    'ATM',\n    'Capital',\n    'Chargeback',\n    'Correction',\n    'Payment',\n    'Refund',\n    'Transfer',\n    'Other',\n] as const;\n\nexport const TRANSACTIONS_VIEW_TABS: readonly Readonly<{ id: TransactionsView; label: TranslationKey; content: null }>[] = [\n    { id: TransactionsView.TRANSACTIONS, label: 'transactions.overview.views.transactions', content: null } as const,\n    { id: TransactionsView.INSIGHTS, label: 'transactions.overview.views.insights', content: null } as const,\n] as const;\n\nexport const INITIAL_FILTERS: Readonly<TransactionsFilters> = {\n    balanceAccount: undefined,\n    categories: [] as const,\n    createdDate: TRANSACTION_DATE_RANGE_DEFAULT_TIMESTAMPS,\n    currencies: [] as const,\n    paymentPspReference: undefined,\n    statuses: ['Booked'] as const,\n} as const;\n\nexport const EXPORT_COLUMNS = [\n    'id',\n    'balanceAccountId',\n    'createdAt',\n    'status',\n    'paymentMethod',\n    'category',\n    'paymentPspReference',\n    'currency',\n    'netAmount',\n    'amountBeforeDeductions',\n] as const satisfies (keyof ITransaction | 'currency')[];\n\nexport const DEFAULT_EXPORT_COLUMNS: readonly (typeof EXPORT_COLUMNS)[number][] = [\n    'createdAt',\n    'paymentMethod',\n    'category',\n    'currency',\n    'netAmount',\n    'amountBeforeDeductions',\n] as const;\n\nexport const TRANSACTION_ANALYTICS_CATEGORY = 'Transaction component' as const;\nexport const TRANSACTION_ANALYTICS_SUBCATEGORY_DETAILS = 'Transaction details' as const;\nexport const TRANSACTION_ANALYTICS_SUBCATEGORY_INSIGHTS = 'Transactions insights' as const;\nexport const TRANSACTION_ANALYTICS_SUBCATEGORY_LIST = 'Transactions list' as const;\n","import { JSX } from 'preact';\nimport AdyenPlatformExperienceError from '../../core/Errors/AdyenPlatformExperienceError';\nimport { TranslationKey } from '../../translations';\n\nexport type ErrorMessage = {\n    title: TranslationKey;\n    message?: TranslationKey | TranslationKey[];\n    refreshComponent?: boolean;\n    onContactSupport?: () => void;\n    translationValues?: { [k in TranslationKey]?: JSX.Element | null };\n    images?: {\n        desktop?: string;\n        mobile?: string;\n    };\n};\n\nexport const UNDEFINED_ERROR = {\n    title: 'common.errors.unexpected',\n    message: ['common.errors.contactSupport'],\n} satisfies ErrorMessage;\n\nexport const getCommonErrorMessage = (error: AdyenPlatformExperienceError | undefined, onContactSupport?: () => void): ErrorMessage | null => {\n    if (!error) return null;\n\n    switch (error.errorCode) {\n        case '29_001':\n            return {\n                title: 'common.errors.requestInvalid',\n                message: ['common.errors.contactSupport'],\n                onContactSupport,\n            };\n        case '30_112':\n            return {\n                title: 'common.errors.notFound',\n                message: ['transactions.details.errors.notFound'],\n                onContactSupport,\n            };\n        case '00_403':\n            return UNDEFINED_ERROR;\n        default:\n            return null;\n    }\n};\n","export const DEFAULT_POPOVER_CLASSNAME = 'adyen-pe-popover';\nexport const DEFAULT_TOOLTIP_CLASSNAME = 'adyen-pe-tooltip';\nexport const POPOVER_CONTAINER_CLASSNAME = `${DEFAULT_POPOVER_CLASSNAME}-container`;\nexport const POPOVER_HEADER_CLASSNAME = `${DEFAULT_POPOVER_CLASSNAME}__header`;\nexport const POPOVER_HEADER_TITLE_CLASSNAME = `${DEFAULT_POPOVER_CLASSNAME}__header-title`;\nexport const POPOVER_CONTENT_CLASSNAME = `${DEFAULT_POPOVER_CLASSNAME}__content`;\nexport const TOOLTIP_CONTENT_CLASSNAME = `${DEFAULT_TOOLTIP_CLASSNAME}__content`;\nexport const POPOVER_FOOTER_CLASSNAME = `${DEFAULT_POPOVER_CLASSNAME}__footer`;\n","import Button from '../../Button';\nimport { ButtonVariant } from '../../Button/types';\nimport './PopoverDismissButton.scss';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport { memo } from 'preact/compat';\n\ninterface PopoverDismissButtonProps {\n    image?: boolean;\n    onClick: () => void;\n}\n\nfunction PopoverDismissButton({ image = true, onClick }: PopoverDismissButtonProps) {\n    const { i18n } = useCoreContext();\n    const getConditionalClasses = (): string => {\n        return image ? 'adyen-pe-popover-dismiss-button--on-image' : '';\n    };\n    return (\n        <>\n            <Button\n                className={getConditionalClasses()}\n                iconButton={true}\n                variant={ButtonVariant.TERTIARY}\n                onClick={onClick}\n                aria-label={i18n.get('common.actions.dismiss.labels.close')}\n            >\n                <svg role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n                    <title>{'dismiss'}</title>\n                    <path\n                        fill=\"#00112C\"\n                        fillRule=\"evenodd\"\n                        d=\"M11.4697 12.5303C11.7626 12.8232 12.2374 12.8232 12.5303 12.5303C12.8232 12.2374 12.8232 11.7626 12.5303 11.4697L9.06066 8L12.5303 4.53033C12.8232 4.23744 12.8232 3.76256 12.5303 3.46967C12.2374 3.17678 11.7626 3.17678 11.4697 3.46967L8 6.93934L4.53033 3.46967C4.23744 3.17678 3.76256 3.17678 3.46967 3.46967C3.17678 3.76256 3.17678 4.23744 3.46967 4.53033L6.93934 8L3.46967 11.4697C3.17678 11.7626 3.17678 12.2374 3.46967 12.5303C3.76256 12.8232 4.23744 12.8232 4.53033 12.5303L8 9.06066L11.4697 12.5303Z\"\n                        clipRule=\"evenodd\"\n                    />\n                </svg>\n            </Button>\n        </>\n    );\n}\n\nexport default memo(PopoverDismissButton);\n","import Typography from '../../Typography/Typography';\nimport { TypographyVariant } from '../../Typography/types';\nimport { memo } from 'preact/compat';\n\nexport interface PopoverTitleProps {\n    title: string;\n    isImageTitle?: boolean;\n}\nfunction PopoverTitle({ title, isImageTitle = false }: PopoverTitleProps) {\n    const getVariant = (): TypographyVariant => {\n        return isImageTitle ? TypographyVariant.SUBTITLE : TypographyVariant.BODY;\n    };\n\n    return (\n        <Typography strongest={!isImageTitle} variant={getVariant()}>\n            {title}\n        </Typography>\n    );\n}\n\nexport default memo(PopoverTitle);\n","import { ButtonActionsLayout, ButtonActionsList } from '../Button/ButtonActions/types';\nimport { ComponentChildren } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { MutableRef } from 'preact/hooks';\n\nexport enum PopoverContainerVariant {\n    TOOLTIP = 'tooltip',\n    POPOVER = 'popover',\n}\n\nexport interface PopoverCoreProps {\n    actions?: ButtonActionsList;\n    actionsLayout?: ButtonActionsLayout;\n    variant?: PopoverContainerVariant;\n    divider?: boolean;\n    dismissible?: boolean;\n    fitContent?: boolean;\n    disableFocusTrap?: boolean;\n    open?: boolean;\n    withContentPadding?: boolean;\n    modifiers?: string[];\n    position?: PopoverContainerPosition;\n    containerSize?: PopoverContainerSize;\n    title?: string;\n    targetElement: MutableRef<Element | null>;\n    withoutSpace?: boolean;\n    dismiss?: () => any;\n    setToTargetWidth?: boolean;\n    children: ComponentChildren;\n    classNameModifiers?: string[];\n    showOverlay?: boolean;\n    fitPosition?: boolean;\n    fixedPositioning?: boolean;\n    setPopoverElement?: (element: HTMLDivElement | null) => void;\n    additionalStyle?: { minY?: number; maxY?: number };\n}\n\ntype UncontrolledProps = Pick<HTMLAttributes<any>, 'aria-describedby'>;\n\nexport type PopoverProps = PopoverCoreProps & UncontrolledProps;\n\nexport enum PopoverContainerPosition {\n    TOP = 'top',\n    RIGHT = 'right',\n    BOTTOM = 'bottom',\n    LEFT = 'left',\n    TOP_LEFT = 'top-left',\n    TOP_RIGHT = 'top-right',\n    BOTTOM_LEFT = 'bottom-left',\n    BOTTOM_RIGHT = 'bottom-right',\n}\n\nexport enum PopoverContainerSize {\n    MEDIUM = 'medium',\n    WIDE = 'wide',\n}\n","import { enumerable, isUndefined, struct, structFrom } from '../../../../utils';\n\ntype ObserverCallback = (entry: IntersectionObserverEntry) => void;\n\ninterface WithIntersectionObserver {\n    remove: (this: { observerCallback: ObserverCallback }) => void;\n}\n\ninterface ObserverInstance {\n    observerCallback: ObserverCallback;\n    observer: IntersectionObserver;\n}\n\nconst getIntersectionObserver = (() => {\n    const observerCallbackMap = new WeakMap<ObserverCallback, ObserverInstance & WithIntersectionObserver>();\n\n    const withIntersectionObserver = struct({\n        remove: enumerable(function () {\n            remove(this.observerCallback);\n        } as WithIntersectionObserver['remove']),\n    }) as WithIntersectionObserver;\n\n    const findObserver = (callbackFn: ObserverCallback, root?: Element) => {\n        let observerInstance = observerCallbackMap.get(callbackFn);\n\n        if (isUndefined(observerInstance)) {\n            const observer = new IntersectionObserver(\n                entries => {\n                    entries.forEach(entry => {\n                        if (callbackFn) callbackFn(entry);\n                    });\n                },\n                { root: root ?? null, rootMargin: '', threshold: [1] }\n            );\n\n            observerInstance = structFrom(withIntersectionObserver, {\n                observerCallback: enumerable(callbackFn),\n                observer: enumerable(observer),\n            }) as ObserverInstance & WithIntersectionObserver;\n\n            observerCallbackMap.set(callbackFn, observerInstance);\n        }\n\n        return observerInstance;\n    };\n\n    const remove = (callbackFn: ObserverCallback) => {\n        const currentObserver = observerCallbackMap.get(callbackFn);\n        currentObserver?.observer.disconnect();\n        observerCallbackMap.delete(callbackFn);\n    };\n\n    return findObserver;\n})();\n\nexport default getIntersectionObserver;\n","import { h, Ref } from 'preact';\nimport { MutableRef, useCallback, useEffect, useRef, useState } from 'preact/hooks';\nimport getIntersectionObserver from '../../components/internal/Popover/utils/utils';\nimport { PopoverContainerPosition, PopoverContainerVariant } from '../../components/internal/Popover/types';\nimport { isRefObject } from '../../primitives/reactive/reflex/helpers';\nimport type { Reflexable } from '../../primitives/reactive/reflex';\nimport type { Nullable } from '../../utils/types';\nimport useReflex from '../useReflex';\n\nconst FULL_WIDTH_TOOLTIP_POSITIONS = [\n    PopoverContainerPosition.BOTTOM_RIGHT,\n    PopoverContainerPosition.BOTTOM_LEFT,\n    PopoverContainerPosition.TOP_RIGHT,\n    PopoverContainerPosition.TOP_LEFT,\n];\n\nconst POPOVER_DIAGONAL_HORIZONTAL_OFFSET = 5;\nconst ARROW_OFFSET = 4;\nconst SCREEN_EDGE_MARGIN = 10;\n\nconst calculateOffset = ({\n    position,\n    variant,\n    offset,\n    additionalStyle,\n    fixedPositioning,\n    fullWidth,\n    fitPosition,\n    forceFixed,\n    popover,\n    targetElement,\n}: {\n    position: PopoverContainerPosition;\n    variant: PopoverContainerVariant;\n    offset: [number, number, number, number];\n    additionalStyle?: { minY?: number; maxY?: number };\n    fixedPositioning?: boolean;\n    fullWidth?: boolean;\n    fitPosition?: boolean;\n    forceFixed?: boolean;\n    popover: Element;\n    targetElement: HTMLElement;\n}): h.JSX.CSSProperties => {\n    let translateX = 0;\n    let translateY = 0;\n\n    const isTooltip = variant === PopoverContainerVariant.TOOLTIP;\n\n    const popoverHeight = popover.clientHeight;\n    const popoverWidth = popover.clientWidth;\n    const popoverContent = popover.firstChild as HTMLElement;\n\n    const popoverContentHeight = popoverContent.offsetHeight;\n    const popoverContentWidth = popoverContent.offsetWidth;\n\n    const bodyPosition = document.body.getBoundingClientRect();\n    const targetPosition = targetElement.getBoundingClientRect();\n\n    const toCenterFullWidth = bodyPosition.x + (bodyPosition.width - popoverContentWidth) / 2;\n    const toCenterX = targetPosition.x + (targetPosition.width - popoverContentWidth) / 2;\n    const toCenterY = targetPosition.y + (targetPosition.height - popoverContentHeight) / 2;\n\n    const scrollX = window.scrollX;\n    const scrollY = window.scrollY;\n\n    switch (position) {\n        case PopoverContainerPosition.BOTTOM:\n            translateX = fullWidth ? toCenterFullWidth : isTooltip ? toCenterX : targetPosition.x;\n            translateY = targetPosition.y + targetPosition.height + offset[1];\n\n            if (!fixedPositioning && !forceFixed) {\n                if (!fullWidth) {\n                    translateX += scrollX;\n                }\n                translateY += scrollY;\n            }\n            break;\n        case PopoverContainerPosition.TOP:\n            translateX = isTooltip ? toCenterX : targetPosition.x;\n            translateY = targetPosition.y - (popoverHeight + offset[0]);\n\n            if (!fixedPositioning && !forceFixed) {\n                translateX += scrollX;\n                translateY += scrollY - popoverContent.clientHeight + popoverHeight;\n            }\n            break;\n        case PopoverContainerPosition.RIGHT:\n            translateX = targetPosition.x + targetPosition.width + offset[2];\n            translateY = isTooltip ? toCenterY : targetPosition.y - targetPosition.height / 2;\n\n            if (!fixedPositioning && !forceFixed) {\n                translateX += scrollX;\n                translateY += scrollY;\n            }\n            break;\n        case PopoverContainerPosition.LEFT:\n            translateX = targetPosition.x - (popoverWidth + offset[3]);\n            translateY = isTooltip ? toCenterY : targetPosition.y - targetPosition.height / 2;\n\n            if (!fixedPositioning && !forceFixed) {\n                translateX += scrollX;\n                translateY += scrollY;\n            }\n            break;\n        case PopoverContainerPosition.BOTTOM_LEFT:\n            translateX = fitPosition ? targetPosition.x : 5;\n            translateY = targetPosition.y + targetPosition.height + offset[1];\n\n            if (!fixedPositioning && !forceFixed) {\n                translateX += scrollX;\n                translateY += scrollY;\n            }\n            break;\n        case PopoverContainerPosition.BOTTOM_RIGHT:\n            translateX = fitPosition ? targetPosition.x : -5;\n            translateY = targetPosition.y + targetPosition.height + offset[1];\n\n            if (!fixedPositioning && !forceFixed) {\n                translateX = fitPosition ? targetPosition.x + scrollX : scrollX - (bodyPosition.width - targetPosition.right);\n                translateY += scrollY;\n            }\n            break;\n        case PopoverContainerPosition.TOP_LEFT:\n            translateX = fitPosition ? targetPosition.x : POPOVER_DIAGONAL_HORIZONTAL_OFFSET;\n            translateY = targetPosition.y - popoverHeight;\n\n            if (!fixedPositioning && !forceFixed) {\n                translateX += scrollX;\n                translateY += scrollY - popoverContent.clientHeight + popoverHeight;\n            }\n            break;\n        case PopoverContainerPosition.TOP_RIGHT:\n            translateX = fitPosition ? targetPosition.x : -POPOVER_DIAGONAL_HORIZONTAL_OFFSET;\n            translateY = targetPosition.y - popoverHeight;\n\n            if (!fixedPositioning && !forceFixed) {\n                translateX = fitPosition ? targetPosition.x + scrollX : translateX + scrollX;\n                translateY += scrollY - popoverContent.clientHeight + popoverHeight;\n            }\n            break;\n    }\n\n    // [IMPORTANT]:\n    // - Use hyphen-case for CSS property names (as you would for CSSStyleDeclaration.setProperty)\n    // - Use string for CSS property values (as you would for CSSStyleDeclaration.setProperty)\n    const offsetStyle: h.JSX.CSSProperties = {};\n\n    if (additionalStyle) {\n        const isMaxLimits = !!additionalStyle.maxY && translateY + popover?.clientHeight > additionalStyle.maxY;\n        const isMinLimits = !!additionalStyle.minY && translateY < additionalStyle.minY;\n\n        if (isMaxLimits && additionalStyle.maxY) {\n            const targetVerticalPosition = targetPosition.y + targetPosition.height + 8; // [TODO]: Capture 8 as a constant\n            const height = Math.max(0, additionalStyle.maxY - targetVerticalPosition);\n\n            if (height > 20) {\n                offsetStyle.height = `${height}px`;\n            }\n\n            offsetStyle['overflow-y'] = 'scroll';\n        }\n\n        if (isMinLimits && additionalStyle.minY && translateY) {\n            const popoverHeight = (popover as HTMLElement).offsetHeight ?? (popover as HTMLElement).clientHeight;\n            const targetHeight = Math.max(0, popoverHeight - (additionalStyle.minY - translateY));\n\n            offsetStyle.height = `${targetHeight}px`;\n\n            if (targetHeight) {\n                offsetStyle['overflow-y'] = 'scroll';\n            }\n        }\n\n        if (isMinLimits) {\n            translateY = additionalStyle.minY ?? 0;\n        }\n    }\n\n    const isAlignedToRight = position === PopoverContainerPosition.TOP_RIGHT || position === PopoverContainerPosition.BOTTOM_RIGHT;\n\n    return {\n        inset: isAlignedToRight ? '0 0 auto auto' : '0 auto auto 0',\n        margin: '0',\n        position: fixedPositioning || forceFixed ? 'fixed' : 'absolute',\n        transform: `translate3d(${translateX}px, ${translateY}px, 0)`,\n        visibility: 'hidden',\n        ...offsetStyle,\n    };\n};\n\nconst usePopoverPositioner = (\n    offset: [number, number, number, number],\n    targetElement: MutableRef<Element | null>,\n    variant: PopoverContainerVariant,\n    position?: PopoverContainerPosition,\n    arrowRef?: Ref<HTMLSpanElement> | undefined,\n    setToTargetWidth?: boolean,\n    showOverlay?: boolean,\n    fitPosition?: boolean,\n    fixedPositioning?: boolean,\n    additionalStyle?: { minY?: number; maxY?: number },\n    ref?: Nullable<Reflexable<Element>>,\n    contentRef?: Ref<HTMLDivElement> | undefined\n) => {\n    const [initialPosition, setInitialPosition] = useState(true);\n    const [showPopover, setShowPopover] = useState(fitPosition ? !fitPosition : !!position);\n    const [currentPosition, setCurrentPosition] = useState(position || PopoverContainerPosition.TOP);\n    const [checkedPositions, setCheckedPosition] = useState<Array<[PopoverContainerPosition, number]>>([]);\n    const popoverRef = useRef<Element | null>(null);\n    const currentPositionRef = useRef(currentPosition);\n    const lastTargetRectRef = useRef<{ x: number; y: number } | null>(null);\n    currentPositionRef.current = currentPosition;\n\n    // Track scroll events to update popover position relative to target element\n    useEffect(() => {\n        if (fixedPositioning) return;\n\n        let rafId: ReturnType<typeof requestAnimationFrame> | null = null;\n\n        const handleScroll = () => {\n            if (rafId) cancelAnimationFrame(rafId);\n            rafId = requestAnimationFrame(() => {\n                rafId = null;\n                const popover = popoverRef.current;\n                if (!popover || !targetElement.current) return;\n\n                // Check if target element has actually moved to avoid infinite loops\n                const targetRect = targetElement.current.getBoundingClientRect();\n                const lastRect = lastTargetRectRef.current;\n                if (lastRect && lastRect.x === targetRect.x && lastRect.y === targetRect.y) {\n                    return;\n                }\n                lastTargetRectRef.current = { x: targetRect.x, y: targetRect.y };\n\n                const popoverStyle = calculateOffset({\n                    variant,\n                    offset,\n                    additionalStyle,\n                    fixedPositioning,\n                    fullWidth: showOverlay,\n                    fitPosition,\n                    forceFixed: !showPopover,\n                    popover,\n                    position: currentPositionRef.current,\n                    targetElement: targetElement.current as HTMLElement,\n                });\n\n                (popover as HTMLElement).style.transform = popoverStyle.transform as string;\n            });\n        };\n\n        window.addEventListener('scroll', handleScroll, { passive: true, capture: true });\n\n        return () => {\n            window.removeEventListener('scroll', handleScroll, { capture: true });\n            if (rafId) cancelAnimationFrame(rafId);\n        };\n    }, [fixedPositioning, targetElement, variant, offset, additionalStyle, showOverlay, fitPosition]);\n\n    const observerCallback = useCallback(\n        (entry: IntersectionObserverEntry) => {\n            const screenWidth = document.documentElement.clientWidth;\n            const targetPosition = targetElement.current?.getBoundingClientRect();\n\n            if (entry.intersectionRatio === 1) return setShowPopover(true);\n\n            if (!initialPosition && entry.intersectionRatio !== 1) {\n                if (checkedPositions && checkedPositions.length === (fitPosition ? 8 : 4)) {\n                    const bestPos = checkedPositions.reduce((res, pos) => (pos[1] > res[1] ? pos : res), checkedPositions[0]!);\n                    setCurrentPosition(bestPos[0]);\n                    return setShowPopover(true);\n                }\n\n                setShowPopover(false);\n\n                switch (currentPosition) {\n                    case PopoverContainerPosition.TOP:\n                        setCheckedPosition(value => [...value, [PopoverContainerPosition.TOP, entry.intersectionRatio]]);\n                        setCurrentPosition(PopoverContainerPosition.BOTTOM);\n                        break;\n                    case PopoverContainerPosition.BOTTOM:\n                        setCheckedPosition(value => [...value, [PopoverContainerPosition.BOTTOM, entry.intersectionRatio]]);\n                        setCurrentPosition(\n                            fitPosition\n                                ? (targetPosition?.x || 0) > screenWidth / 2\n                                    ? PopoverContainerPosition.BOTTOM_RIGHT\n                                    : PopoverContainerPosition.BOTTOM_LEFT\n                                : PopoverContainerPosition.RIGHT\n                        );\n                        break;\n                    case PopoverContainerPosition.BOTTOM_LEFT:\n                        setCheckedPosition(value => [...value, [PopoverContainerPosition.BOTTOM_LEFT, entry.intersectionRatio]]);\n                        setCurrentPosition(fitPosition ? PopoverContainerPosition.TOP_LEFT : PopoverContainerPosition.RIGHT);\n                        break;\n                    case PopoverContainerPosition.BOTTOM_RIGHT:\n                        setCheckedPosition(value => [...value, [PopoverContainerPosition.BOTTOM_RIGHT, entry.intersectionRatio]]);\n                        setCurrentPosition(fitPosition ? PopoverContainerPosition.TOP_RIGHT : PopoverContainerPosition.RIGHT);\n                        break;\n                    case PopoverContainerPosition.TOP_LEFT:\n                        setCheckedPosition(value => [...value, [PopoverContainerPosition.TOP_LEFT, entry.intersectionRatio]]);\n                        setCurrentPosition(fitPosition ? PopoverContainerPosition.BOTTOM_LEFT : PopoverContainerPosition.RIGHT);\n                        break;\n                    case PopoverContainerPosition.TOP_RIGHT:\n                        setCheckedPosition(value => [...value, [PopoverContainerPosition.TOP_RIGHT, entry.intersectionRatio]]);\n                        setCurrentPosition(fitPosition ? PopoverContainerPosition.BOTTOM_RIGHT : PopoverContainerPosition.RIGHT);\n                        break;\n                    case PopoverContainerPosition.RIGHT:\n                        setCheckedPosition(value => [...value, [PopoverContainerPosition.RIGHT, entry.intersectionRatio]]);\n                        setCurrentPosition(PopoverContainerPosition.LEFT);\n                        break;\n                    case PopoverContainerPosition.LEFT:\n                        setCheckedPosition(value => [...value, [PopoverContainerPosition.LEFT, entry.intersectionRatio]]);\n                        setCurrentPosition(PopoverContainerPosition.TOP);\n                        break;\n                }\n            }\n        },\n        [targetElement, initialPosition, checkedPositions, fitPosition, currentPosition]\n    );\n\n    const observerCallbackRef = useRef(observerCallback);\n\n    useEffect(() => {\n        getIntersectionObserver(observerCallbackRef.current).remove();\n        observerCallbackRef.current = observerCallback;\n    }, [observerCallback]);\n\n    return useReflex<Element>(\n        useCallback(\n            (current, previous) => {\n                popoverRef.current = current ?? null;\n\n                if (previous && (!position || fitPosition)) {\n                    const observer = getIntersectionObserver(observerCallback).observer;\n                    observer.unobserve(previous);\n                }\n\n                if (current && targetElement.current) {\n                    if (!position || fitPosition) {\n                        const observer = getIntersectionObserver(observerCallback).observer;\n                        observer.observe(current);\n                    }\n\n                    if (!(current instanceof Element)) return;\n\n                    const popoverStyle = calculateOffset({\n                        variant,\n                        offset,\n                        additionalStyle,\n                        fixedPositioning,\n                        fullWidth: showOverlay,\n                        fitPosition,\n                        forceFixed: !showPopover,\n                        popover: current,\n                        position: currentPosition,\n                        targetElement: targetElement.current as HTMLElement,\n                    });\n\n                    const style = {\n                        ...popoverStyle,\n                        ...(showPopover && { visibility: 'visible' }),\n                        ...(setToTargetWidth && {\n                            'min-width': 'fit-content',\n                            width: `${targetElement.current.clientWidth}px`,\n                        }),\n                    };\n\n                    (current as HTMLElement).setAttribute(\n                        'style',\n                        Object.entries(style)\n                            .map(entry => entry.join(':'))\n                            .join(';')\n                    );\n\n                    if (initialPosition) setInitialPosition(false);\n\n                    if (variant && variant === PopoverContainerVariant.TOOLTIP && arrowRef && isRefObject(arrowRef)) {\n                        arrowRef.current?.setAttribute('data-popover-placement', currentPosition);\n                        if (FULL_WIDTH_TOOLTIP_POSITIONS.includes(currentPosition)) {\n                            const targetPosition = targetElement.current.getBoundingClientRect();\n                            const popoverContent = current.firstChild as HTMLElement;\n                            const popoverContentWidth = popoverContent.offsetWidth;\n                            const positionX = targetPosition.x + (targetPosition.width - popoverContentWidth) / 2;\n                            const popoverContentHeight = popoverContent.offsetHeight;\n\n                            const positionY =\n                                currentPosition === PopoverContainerPosition.BOTTOM_RIGHT || currentPosition === PopoverContainerPosition.BOTTOM_LEFT\n                                    ? popoverContentHeight + ARROW_OFFSET\n                                    : ARROW_OFFSET;\n\n                            arrowRef.current?.setAttribute(\n                                'style',\n                                `transform: translate3d(${positionX}px, -${positionY}px, 0) rotate(45deg); inset: 0 0 auto auto`\n                            );\n                        }\n                    }\n\n                    if (\n                        variant &&\n                        variant === PopoverContainerVariant.TOOLTIP &&\n                        contentRef &&\n                        isRefObject(contentRef) &&\n                        FULL_WIDTH_TOOLTIP_POSITIONS.includes(currentPosition)\n                    ) {\n                        const screenWidth = document.documentElement.clientWidth;\n                        contentRef.current?.setAttribute('style', `max-width: ${screenWidth - SCREEN_EDGE_MARGIN}px`);\n                    }\n                }\n            },\n            [\n                position,\n                fitPosition,\n                targetElement,\n                observerCallback,\n                variant,\n                offset,\n                additionalStyle,\n                fixedPositioning,\n                showOverlay,\n                currentPosition,\n                showPopover,\n                setToTargetWidth,\n                initialPosition,\n                arrowRef,\n                contentRef,\n            ]\n        ),\n        ref\n    );\n};\n\nexport default usePopoverPositioner;\n","import { uniqueId } from '../../utils';\nimport { useCallback, useRef } from 'preact/hooks';\nimport type { Reflexable } from '../../primitives/reactive/reflex';\nimport type { Nullable } from '../../utils/types';\nimport useReflex from '../useReflex';\n\nconst useUniqueIdentifier = (ref?: Nullable<Reflexable<Element>>) => {\n    const id = useRef<string>();\n\n    return useReflex<Element>(\n        useCallback(\n            (current, previous) => {\n                if (previous instanceof Element && previous.id === id.current) previous.id = '';\n                if (!(current instanceof Element)) return;\n                current.id = id.current || (id.current = uniqueId());\n            },\n            [ref]\n        ),\n        ref\n    );\n};\n\nexport default useUniqueIdentifier;\n","import ButtonActions from '../Button/ButtonActions/ButtonActions';\nimport { ButtonActionsLayoutBasic } from '../Button/ButtonActions/types';\nimport {\n    DEFAULT_POPOVER_CLASSNAME,\n    DEFAULT_TOOLTIP_CLASSNAME,\n    POPOVER_CONTAINER_CLASSNAME,\n    POPOVER_CONTENT_CLASSNAME,\n    POPOVER_FOOTER_CLASSNAME,\n    POPOVER_HEADER_CLASSNAME,\n    POPOVER_HEADER_TITLE_CLASSNAME,\n    TOOLTIP_CONTENT_CLASSNAME,\n} from './constants';\nimport PopoverDismissButton from './PopoverDismissButton/PopoverDismissButton';\nimport PopoverTitle from './PopoverTitle/PopoverTitle';\nimport { PopoverContainerSize, PopoverContainerVariant, PopoverProps } from './types';\nimport { InteractionKeyCode } from '../../types';\nimport { ClickOutsideVariant, CONTROL_ELEMENT_PROPERTY, useClickOutside } from '../../../hooks/element/useClickOutside';\nimport useFocusTrap from '../../../hooks/element/useFocusTrap';\nimport usePopoverPositioner from '../../../hooks/element/usePopoverPositioner';\nimport useUniqueIdentifier from '../../../hooks/element/useUniqueIdentifier';\nimport useReflex from '../../../hooks/useReflex';\nimport { getModifierClasses } from '../../../utils/preact';\nimport { boolOrTrue, isFunction } from '../../../utils';\nimport { isFocusable, SELECTORS } from '../../../primitives/dom/tabbableRoot/tabbable';\nimport classNames from 'classnames';\nimport { createPortal, PropsWithChildren } from 'preact/compat';\nimport { useCallback, useEffect, useMemo, useRef } from 'preact/hooks';\nimport { Ref } from 'preact';\nimport './Popover.scss';\n\nconst findFirstFocusableElement = (root: Element) => {\n    let focusable: HTMLElement | undefined;\n    const elements = root.querySelector(`:scope .${TOOLTIP_CONTENT_CLASSNAME}`)?.querySelectorAll(SELECTORS);\n    if (elements) {\n        Array.prototype.some.call(elements, elem => {\n            if (isFocusable(elem)) return (focusable = elem);\n        });\n        return focusable;\n    }\n    return null;\n};\n\nconst getGapByVariant = (variant: PopoverContainerVariant): [number, number, number, number] => {\n    return variant === PopoverContainerVariant.TOOLTIP ? [10, 3, 5, 5] : [8, 8, 8, 8];\n};\n\nfunction Popover({\n    actions,\n    disableFocusTrap = false,\n    actionsLayout = ButtonActionsLayoutBasic.SPACE_BETWEEN,\n    variant = PopoverContainerVariant.TOOLTIP,\n    title,\n    open,\n    dismissible,\n    modifiers,\n    divider,\n    fitContent,\n    withoutSpace,\n    containerSize,\n    position,\n    targetElement,\n    setToTargetWidth,\n    dismiss,\n    children,\n    withContentPadding,\n    classNameModifiers,\n    showOverlay = false,\n    fitPosition,\n    fixedPositioning = false,\n    additionalStyle,\n    setPopoverElement,\n    ...uncontrolledProps\n}: PropsWithChildren<PopoverProps>) {\n    const isDismissible = useMemo(() => isFunction(dismiss) && boolOrTrue(dismissible), [dismiss, dismissible]);\n    const arrowRef = useUniqueIdentifier() as Ref<HTMLSpanElement> | undefined;\n    const contentRef = useUniqueIdentifier() as Ref<HTMLDivElement> | undefined;\n    const popoverOpen = useRef<boolean>();\n\n    const onCloseFocusTrap = useCallback(\n        (interactionKeyPressed: boolean) => {\n            dismiss && dismiss();\n            if (interactionKeyPressed) {\n                (targetElement?.current as HTMLElement)?.focus();\n            }\n        },\n        [dismiss, targetElement]\n    );\n\n    const onKeyDown = useCallback(\n        (e: KeyboardEvent) => {\n            if (e.code === InteractionKeyCode.ESCAPE) {\n                dismiss && dismiss();\n                (targetElement?.current as HTMLElement).focus();\n            }\n        },\n        [dismiss, targetElement]\n    );\n\n    const cachedOnKeyDown = useRef(onKeyDown);\n    const autoFocusAnimFrame = useRef<ReturnType<typeof requestAnimationFrame>>();\n\n    const popoverPositionAnchorElement = useClickOutside(\n        usePopoverPositioner(\n            getGapByVariant(variant),\n            targetElement,\n            variant,\n            position,\n            arrowRef,\n            setToTargetWidth,\n            showOverlay,\n            fitPosition,\n            fixedPositioning,\n            additionalStyle,\n            undefined,\n            contentRef\n        ),\n        dismiss,\n        variant === PopoverContainerVariant.TOOLTIP && !open,\n        ClickOutsideVariant.POPOVER\n    );\n\n    const popoverFocusTrapElement = useFocusTrap(disableFocusTrap ? null : popoverPositionAnchorElement, onCloseFocusTrap);\n\n    const popoverElement = useReflex<Element & { [CONTROL_ELEMENT_PROPERTY]?: (typeof targetElement)['current'] }>(\n        useCallback(\n            (current, previous) => {\n                if (previous instanceof Element) {\n                    previous[CONTROL_ELEMENT_PROPERTY] = undefined;\n                    delete previous[CONTROL_ELEMENT_PROPERTY];\n                }\n                if (current instanceof Element) {\n                    current[CONTROL_ELEMENT_PROPERTY] = targetElement.current;\n                    cancelAnimationFrame(autoFocusAnimFrame.current!);\n\n                    autoFocusAnimFrame.current = requestAnimationFrame(() => {\n                        if (popoverOpen.current === open) return;\n                        if (!(popoverOpen.current = open)) return;\n                        const focusable = findFirstFocusableElement(current) as HTMLElement;\n                        focusable?.focus();\n                    });\n                }\n            },\n            [open, targetElement]\n        ),\n        disableFocusTrap ? popoverPositionAnchorElement : popoverFocusTrapElement\n    );\n\n    const popoverElementWithId = useUniqueIdentifier(popoverElement);\n\n    const conditionalClasses = useMemo(\n        () => ({\n            [`${DEFAULT_POPOVER_CLASSNAME}--medium`]: containerSize === PopoverContainerSize.MEDIUM,\n            [`${DEFAULT_POPOVER_CLASSNAME}--with-divider`]: !!divider,\n            [`${DEFAULT_POPOVER_CLASSNAME}--wide`]: containerSize === PopoverContainerSize.WIDE,\n            [`${DEFAULT_POPOVER_CLASSNAME}--fit-content`]: fitContent,\n            [`${DEFAULT_POPOVER_CLASSNAME}--without-space`]: withoutSpace,\n            [`${DEFAULT_POPOVER_CLASSNAME}--auto-width`]: showOverlay,\n        }),\n        [containerSize, divider, withoutSpace, fitContent, showOverlay]\n    );\n\n    useEffect(() => {\n        const popover = popoverElement.current;\n\n        if (popover) {\n            popover[CONTROL_ELEMENT_PROPERTY] = targetElement.current;\n            targetElement.current?.setAttribute('aria-controls', popover.id);\n\n            return () => {\n                targetElement.current?.removeAttribute('aria-controls');\n                popover[CONTROL_ELEMENT_PROPERTY] = undefined;\n            };\n        }\n    }, [popoverElement, targetElement]);\n\n    useEffect(() => {\n        document.removeEventListener('keydown', cachedOnKeyDown.current);\n        document.addEventListener('keydown', (cachedOnKeyDown.current = onKeyDown));\n        return () => document.removeEventListener('keydown', cachedOnKeyDown.current);\n    }, [onKeyDown]);\n\n    const classNamesByVariant =\n        variant === PopoverContainerVariant.TOOLTIP ? DEFAULT_TOOLTIP_CLASSNAME : `${DEFAULT_POPOVER_CLASSNAME} ${POPOVER_CONTAINER_CLASSNAME}`;\n    const classNamesContentByVariant = variant === PopoverContainerVariant.TOOLTIP ? TOOLTIP_CONTENT_CLASSNAME : `${POPOVER_CONTENT_CLASSNAME}`;\n\n    return createPortal(\n        <>\n            {open ? (\n                <>\n                    {showOverlay && <div className=\"adyen-pe-popover__overlay\"></div>}\n                    <div\n                        {...uncontrolledProps}\n                        ref={elem => {\n                            popoverElementWithId(elem);\n                            setPopoverElement?.(elem);\n                        }}\n                        aria-labelledby={targetElement.current?.id}\n                        className={classNames(classNamesByVariant, conditionalClasses, classNameModifiers)}\n                        role={variant === PopoverContainerVariant.POPOVER ? 'dialog' : 'tooltip'}\n                        style={{ visibility: 'hidden' }}\n                    >\n                        {(title || isDismissible) && (\n                            <div className={getModifierClasses(POPOVER_HEADER_CLASSNAME, modifiers, [POPOVER_HEADER_CLASSNAME])}>\n                                {title && (\n                                    <div className={POPOVER_HEADER_TITLE_CLASSNAME}>\n                                        <PopoverTitle title={title} />\n                                    </div>\n                                )}\n                                {isDismissible && <PopoverDismissButton onClick={dismiss!} />}\n                            </div>\n                        )}\n                        {children && (\n                            <>\n                                <div\n                                    className={classNames(classNamesContentByVariant, {\n                                        [`${POPOVER_CONTENT_CLASSNAME}--with-padding`]: withContentPadding,\n                                        [`${POPOVER_CONTENT_CLASSNAME}--overlay`]: showOverlay,\n                                    })}\n                                    ref={contentRef}\n                                >\n                                    {children}\n                                </div>\n                                {variant === PopoverContainerVariant.TOOLTIP && (\n                                    <span data-popover-placement=\"hidden\" ref={arrowRef} className=\"adyen-pe-tooltip__arrow\" />\n                                )}\n                            </>\n                        )}\n                        {actions && (\n                            <div className={POPOVER_FOOTER_CLASSNAME}>\n                                <ButtonActions actions={actions} layout={actionsLayout} />\n                            </div>\n                        )}\n                    </div>\n                </>\n            ) : null}\n        </>,\n        document.getElementsByTagName('body')[0]!\n    );\n}\nexport default Popover;\n","import { useCallback, useEffect, useRef } from 'preact/hooks';\nimport { InteractionKeyCode } from '../../types';\nimport useBooleanState from '../../../hooks/useBooleanState';\n\nexport interface TooltipListeners {\n    onfocusin(): void;\n    onfocusout(): void;\n    onMouseEnter(): void;\n    onMouseLeave(): void;\n    onKeyDown(evt: Event): void;\n}\nexport const useTooltipListeners = (): {\n    isVisible: boolean;\n    listeners: TooltipListeners;\n} => {\n    const [isVisible, setIsVisible] = useBooleanState();\n    const visibilityTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n    const clearVisibilityTimer = useRef(() => {\n        visibilityTimerRef.current && clearTimeout(visibilityTimerRef.current);\n        visibilityTimerRef.current = undefined;\n    }).current;\n\n    const showTooltip = useCallback(() => {\n        visibilityTimerRef.current ??= setTimeout(() => {\n            visibilityTimerRef.current = setTimeout(hideTooltip, 15000);\n            setIsVisible(true);\n        }, 500);\n    }, [setIsVisible]);\n\n    const hideTooltip = useCallback(() => {\n        clearVisibilityTimer();\n        setIsVisible(false);\n    }, [setIsVisible]);\n\n    const onKeyDown = useCallback(\n        (evt: KeyboardEvent) => {\n            if (evt.code === InteractionKeyCode.ESCAPE) {\n                evt.preventDefault();\n                evt.stopPropagation();\n                hideTooltip();\n            }\n        },\n        [hideTooltip]\n    );\n\n    useEffect(() => hideTooltip, [hideTooltip]);\n\n    return {\n        listeners: {\n            onfocusin: showTooltip,\n            onfocusout: hideTooltip,\n            onMouseEnter: showTooltip,\n            onMouseLeave: hideTooltip,\n            onKeyDown,\n        },\n        isVisible,\n    };\n};\n","import Popover from '../Popover/Popover';\nimport { PopoverContainerVariant } from '../Popover/types';\nimport { useTooltipListeners } from './useTooltipListeners';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\nimport Typography from '../Typography/Typography';\nimport useUniqueIdentifier from '../../../hooks/element/useUniqueIdentifier';\nimport classNames from 'classnames';\nimport { cloneElement, VNode } from 'preact';\nimport { PropsWithChildren } from 'preact/compat';\nimport { MutableRef, useMemo, useState } from 'preact/hooks';\nimport { TooltipProps } from './types';\nimport './Tooltip.scss';\n\nconst isString = (content: string | VNode<any>) => {\n    return typeof content === 'string';\n};\n\nexport const Tooltip = ({ content, children, showTooltip, position, isUnderlineVisible = false }: PropsWithChildren<TooltipProps>) => {\n    const [popoverElement, setPopoverElement] = useState<HTMLDivElement | null>(null);\n    const { isVisible, listeners } = useTooltipListeners();\n    const targetElementRef = useUniqueIdentifier();\n    const canShowTooltip = isVisible || !!showTooltip;\n\n    const targetClassName = useMemo(\n        () => classNames(children?.props?.className, 'adyen-pe-tooltip-target', { 'adyen-pe-tooltip-target--underlined': isUnderlineVisible }),\n        [children?.props?.className, isUnderlineVisible]\n    );\n\n    return (\n        <>\n            {children\n                ? cloneElement(children, {\n                      ...children.props,\n                      ...listeners,\n                      ...(canShowTooltip && popoverElement?.id ? { 'aria-describedby': popoverElement.id } : {}),\n                      className: targetClassName,\n                      ref: targetElementRef,\n                      role: 'button',\n                      tabIndex: 0,\n                  })\n                : null}\n\n            {canShowTooltip && (\n                <Popover\n                    position={position}\n                    variant={PopoverContainerVariant.TOOLTIP}\n                    targetElement={targetElementRef as MutableRef<Element | null>}\n                    setPopoverElement={setPopoverElement}\n                    fitPosition\n                    open\n                    disableFocusTrap\n                >\n                    {content && isString(content) ? (\n                        <Typography el={TypographyElement.DIV} variant={TypographyVariant.CAPTION}>\n                            {content}\n                        </Typography>\n                    ) : (\n                        content\n                    )}\n                </Popover>\n            )}\n        </>\n    );\n};\n","import { HTMLAttributes } from 'preact';\nimport { ReactNode } from 'preact/compat';\nimport cx from 'classnames';\nimport { TranslationKey } from '../../../translations';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport { ButtonVariant } from '../Button/types';\nimport Button from '../Button';\nimport Icon from '../Icon';\nimport './CopyText.scss';\n\ntype CopyTextProps = {\n    copyButtonAriaLabelKey?: TranslationKey;\n    isUnderlineVisible?: boolean;\n    showCopyTextTooltip?: boolean;\n    type?: 'Trimmed' | 'Text' | 'Default';\n    textToCopy: string;\n    visibleText?: string | ReactNode;\n    onCopyText?: () => void;\n    stronger?: boolean;\n} & Omit<HTMLAttributes<HTMLSpanElement>, 'type'>;\n\nconst BASE_CLASSNAME = 'adyen-pe-copy-text';\n\nconst classes = {\n    base: BASE_CLASSNAME,\n    container: BASE_CLASSNAME + '__container',\n    icon: BASE_CLASSNAME + '__icon',\n    information: BASE_CLASSNAME + '__information',\n    label: BASE_CLASSNAME + '__label',\n    text: BASE_CLASSNAME + '__text',\n    stronger: BASE_CLASSNAME + '--stronger',\n};\n\nconst CopyText = ({\n    copyButtonAriaLabelKey,\n    isUnderlineVisible,\n    textToCopy,\n    visibleText,\n    onCopyText,\n    showCopyTextTooltip = true,\n    type = 'Trimmed',\n    stronger,\n    ...restProps\n}: CopyTextProps) => {\n    const { i18n } = useCoreContext();\n    const [isCopied, setIsCopied] = useState(false);\n    const resetIsCopied = useCallback(() => setIsCopied(false), []);\n    const copyButtonLabel = useMemo(() => i18n.get(copyButtonAriaLabelKey ?? 'common.actions.copy.labels.default'), [i18n, copyButtonAriaLabelKey]);\n\n    const onClick = useCallback(async () => {\n        if (textToCopy) {\n            try {\n                await navigator.clipboard.writeText(textToCopy);\n                setIsCopied(true);\n                onCopyText && onCopyText();\n            } catch (e) {\n                console.error(e);\n            }\n        }\n    }, [textToCopy, onCopyText]);\n\n    const visibleTextToCopy = useMemo(\n        () => (\n            <span\n                className={cx({\n                    [classes.label]: type !== 'Default',\n                    [classes.information]: type === 'Trimmed',\n                    [classes.text]: type === 'Text',\n                    [classes.stronger]: stronger,\n                })}\n            >\n                {visibleText || textToCopy}\n            </span>\n        ),\n        [type, stronger, visibleText, textToCopy]\n    );\n\n    return (\n        <span className={classes.container} {...restProps}>\n            {showCopyTextTooltip ? (\n                <Tooltip content={textToCopy} isUnderlineVisible={isUnderlineVisible}>\n                    {visibleTextToCopy}\n                </Tooltip>\n            ) : (\n                visibleTextToCopy\n            )}\n\n            <Tooltip content={i18n.get(isCopied ? 'common.actions.copy.labels.done' : 'common.actions.copy.labels.default')}>\n                <Button\n                    variant={ButtonVariant.TERTIARY}\n                    className={classes.base}\n                    onClick={onClick}\n                    onBlur={resetIsCopied}\n                    onMouseLeaveCapture={resetIsCopied}\n                    aria-label={copyButtonLabel}\n                    data-testid=\"copyText\"\n                >\n                    <div className={classes.icon}>\n                        <Icon name={'copy'} data-testid={'copy-icon'} />\n                    </div>\n                </Button>\n            </Tooltip>\n\n            <div className=\"adyen-pe-visually-hidden\" aria-atomic=\"true\" aria-live=\"polite\">\n                {isCopied && i18n.get('common.actions.copy.labels.done')}\n            </div>\n        </span>\n    );\n};\n\nexport default CopyText;\n","import { ErrorMessage, getCommonErrorMessage, UNDEFINED_ERROR } from './getCommonErrorCode';\nimport AdyenPlatformExperienceError from '../../core/Errors/AdyenPlatformExperienceError';\nimport CopyText from '../internal/CopyText/CopyText';\nimport { TranslationKey } from '../../translations';\n\nexport const getErrorMessage = (\n    error: AdyenPlatformExperienceError | undefined,\n    errorMessage: TranslationKey,\n    onContactSupport?: () => void\n): ErrorMessage => {\n    if (!error) return UNDEFINED_ERROR;\n\n    const commonError = getCommonErrorMessage(error, onContactSupport);\n    if (commonError) return commonError;\n\n    switch (error.errorCode) {\n        case undefined:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: [errorMessage, 'common.errors.retry'],\n                refreshComponent: true,\n            };\n        case '00_500': {\n            const secondaryErrorMessage = onContactSupport ? 'common.errors.errorCode' : 'common.errors.errorCodeSupport';\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: [errorMessage, secondaryErrorMessage],\n                translationValues: {\n                    [secondaryErrorMessage]: error.requestId ? (\n                        <CopyText copyButtonAriaLabelKey=\"common.actions.copy.labels.errorCode\" textToCopy={error.requestId} />\n                    ) : null,\n                },\n                onContactSupport,\n            };\n        }\n        default:\n            return UNDEFINED_ERROR;\n    }\n};\n","import { ErrorMessageDisplay } from '../ErrorMessageDisplay/ErrorMessageDisplay';\nimport { getErrorMessage } from '../../utils/getErrorMessage';\nimport AdyenPlatformExperienceError from '../../../core/Errors/AdyenPlatformExperienceError';\nimport { TranslationKey } from '../../../translations';\n\nconst DataOverviewError = ({\n    error,\n    errorMessage,\n    onContactSupport,\n}: {\n    error: AdyenPlatformExperienceError | undefined;\n    errorMessage: TranslationKey;\n    onContactSupport?: () => void;\n}) => {\n    const {\n        title,\n        message,\n        refreshComponent,\n        translationValues,\n        onContactSupport: ContactSupport,\n    } = getErrorMessage(error, errorMessage, onContactSupport);\n    return (\n        <ErrorMessageDisplay\n            withHeaderOffset\n            title={title}\n            message={message}\n            translationValues={translationValues}\n            withImage\n            centered\n            refreshComponent={refreshComponent}\n            onContactSupport={ContactSupport}\n        />\n    );\n};\n\nexport default DataOverviewError;\n","import { TableCells } from './TableCells';\nimport { DataGridColumn, InteractiveBodyProps } from '../types';\nimport { CustomCell } from '../DataGrid';\n\nexport const TableBody = <\n    Items extends Array<any>,\n    Columns extends Array<DataGridColumn<Extract<keyof Items[number], string>>>,\n    ClickedField extends keyof Items[number],\n    CustomCells extends CustomCell<Items, Columns, Columns[number]>,\n>({\n    data,\n    columns,\n    customCells,\n    onRowHover,\n}: Omit<InteractiveBodyProps<Items, Columns, ClickedField, CustomCells>, 'onRowClick'>) => (\n    <>\n        {data?.map((item, index) => {\n            const onHoverEnter = onRowHover && onRowHover.bind(null, index);\n            const onHoverLeave = onRowHover && onRowHover.bind(null, undefined);\n            return (\n                <div\n                    role=\"row\"\n                    tabIndex={0}\n                    className=\"adyen-pe-data-grid__row\"\n                    key={item}\n                    onMouseEnter={onHoverEnter}\n                    onFocus={onHoverEnter}\n                    onMouseLeave={onHoverLeave}\n                    onBlur={onHoverLeave}\n                >\n                    <TableCells<Items, Columns, CustomCells> columns={columns} customCells={customCells} item={item} rowIndex={index} />\n                </div>\n            );\n        })}\n    </>\n);\n","import { useCallback, useReducer } from 'preact/hooks';\nimport useReflex from '../../../../hooks/useReflex';\nimport { InteractionKeyCode } from '../../../types';\nimport { INITIAL_STATE } from '../DataGrid';\n\nexport const useInteractiveDataGrid = ({ totalRows }: { totalRows: number }) => {\n    const [state, dispatch] = useReducer<Readonly<{ activeIndex: number; index: number }>, { type: 'ACTIVE' | 'CURRENT'; index: number }>(\n        (currentState, action) => {\n            const total = totalRows;\n\n            if (total > 1) {\n                const nextIndex = action.index;\n\n                if (nextIndex < total && nextIndex! >= 0) {\n                    if (action.type === 'ACTIVE') {\n                        return Object.freeze({ ...currentState, index: action.index ?? 0, activeIndex: action.index });\n                    } else {\n                        return Object.freeze({ ...currentState, index: action.index ?? 0, activeIndex: -1 });\n                    }\n                }\n            }\n            return currentState;\n        },\n        INITIAL_STATE\n    );\n\n    const ref = useReflex<Element>(\n        useCallback(\n            current => {\n                if (!(current instanceof Element)) return;\n\n                const optionIndex = Number((current as HTMLElement).dataset?.index);\n\n                if ((state.activeIndex === -1 && optionIndex === 0) || optionIndex === state.index) {\n                    current.setAttribute('tabindex', '0');\n                } else {\n                    current.setAttribute('tabindex', '-1');\n                }\n                if (optionIndex === state.activeIndex) {\n                    (current as HTMLElement)?.focus();\n                }\n            },\n            [state.activeIndex, state.index]\n        )\n    );\n\n    const onKeyDownCapture = useCallback(\n        (evt: KeyboardEvent) => {\n            const isRow = (evt.target as HTMLElement)?.getAttribute('role') === 'row';\n            if (!isRow) {\n                if (evt.code === InteractionKeyCode.ARROW_LEFT) {\n                    dispatch({\n                        type: 'ACTIVE',\n                        index: state.index,\n                    });\n                }\n                return;\n            }\n            switch (evt.code) {\n                case InteractionKeyCode.ARROW_DOWN:\n                case InteractionKeyCode.ARROW_UP:\n                    dispatch({\n                        type: 'ACTIVE',\n                        index: evt.code === InteractionKeyCode.ARROW_DOWN ? state.index + 1 : state.index - 1,\n                    });\n                    break;\n                case InteractionKeyCode.HOME:\n                    dispatch({\n                        type: 'ACTIVE',\n                        index: 0,\n                    });\n                    break;\n                case InteractionKeyCode.END:\n                    dispatch({\n                        type: 'ACTIVE',\n                        index: totalRows - 1,\n                    });\n                    break;\n                case InteractionKeyCode.ENTER:\n                    (evt.currentTarget as HTMLElement)?.click();\n                    break;\n                default:\n                    return;\n            }\n            evt.stopPropagation();\n        },\n\n        [totalRows, state.index]\n    );\n\n    const onFocusCapture = useCallback(\n        (index: number) => (evt: Event) => {\n            const isRow = (evt.target as HTMLElement)?.localName === 'tr';\n            if (!isRow || state.index === -1) dispatch({ type: 'CURRENT', index: index });\n        },\n        [state.index]\n    );\n\n    return { listeners: { onKeyDownCapture, onFocusCapture }, ref, activeIndex: state.activeIndex, currentIndex: state.index };\n};\n","import { TableCells } from './TableCells';\nimport { useCallback } from 'preact/hooks';\nimport { useInteractiveDataGrid } from '../hooks/useInteractiveDataGrid';\nimport { DataGridColumn, InteractiveBodyProps } from '../types';\nimport { CustomCell } from '../DataGrid';\n\nexport const InteractiveBody = <\n    Items extends any[],\n    Columns extends Array<DataGridColumn<Extract<keyof Items[number], string>>>,\n    ClickedField extends keyof Items[number],\n    CustomCells extends CustomCell<Items, Columns, Columns[number]>,\n>({\n    data,\n    columns,\n    onRowClick,\n    customCells,\n    onRowHover,\n}: InteractiveBodyProps<Items, Columns, ClickedField, CustomCells>) => {\n    const { currentIndex, listeners, ref } = useInteractiveDataGrid({ totalRows: data?.length ?? 0 });\n\n    const onClickCallBack = useCallback(\n        (item: Items[number]) => () => onRowClick?.callback(onRowClick?.retrievedField ? item[onRowClick.retrievedField] : item),\n        [onRowClick]\n    );\n\n    return (\n        <>\n            {data?.map((item, index) => {\n                const onHoverEnter = onRowHover && onRowHover.bind(null, index);\n                const onHoverLeave = onRowHover && onRowHover.bind(null, undefined);\n                return (\n                    <div\n                        role=\"row\"\n                        tabIndex={0}\n                        onMouseEnter={onHoverEnter}\n                        onFocus={onHoverEnter}\n                        onMouseLeave={onHoverLeave}\n                        onBlur={onHoverLeave}\n                        ref={ref}\n                        aria-selected={index === currentIndex}\n                        data-index={index}\n                        className=\"adyen-pe-data-grid__row adyen-pe-data-grid__row--clickable\"\n                        key={item}\n                        onClick={onClickCallBack(item)}\n                        onFocusCapture={listeners.onFocusCapture(index)}\n                        onKeyDownCapture={listeners.onKeyDownCapture}\n                    >\n                        <TableCells columns={columns} customCells={customCells} item={item} rowIndex={index} />\n                    </div>\n                );\n            })}\n        </>\n    );\n};\n","import cx from 'classnames';\nimport '../DataGrid.scss';\nimport { VNode } from 'preact';\n\nconst SkeletonBody = ({ columnsNumber, loading, emptyMessageDisplay }: { columnsNumber: number; loading: boolean; emptyMessageDisplay?: VNode }) => {\n    const rows = Array.from({ length: 10 }, (_, index) => index);\n    const columns = Array.from({ length: columnsNumber }, (_, index) => index);\n    return (\n        <>\n            {rows.map((_, i) => (\n                <div className=\"adyen-pe-data-grid__row\" key={`adyen-pe-data-grid-skeleton-row-${i}`}>\n                    {columns.map((_, index) => (\n                        <div key={`adyen-pe-data-grid-skeleton-cell-${index}`} className=\"adyen-pe-data-grid__cell adyen-pe-data-grid__skeleton-cell\">\n                            <span\n                                className={cx({\n                                    'adyen-pe-data-grid__skeleton-cell-content adyen-pe-data-grid__skeleton-cell-content--loading': loading,\n                                    'adyen-pe-data-grid__empty-cell': !loading,\n                                })}\n                            />\n                        </div>\n                    ))}\n                </div>\n            ))}\n            {!loading && emptyMessageDisplay && emptyMessageDisplay}\n        </>\n    );\n};\n\nexport default SkeletonBody;\n","import { DataGridContext } from '../hooks/useDataGridContext';\nimport { ComponentChildren, toChildArray } from 'preact';\nimport { useCallback, useMemo } from 'preact/hooks';\n\ntype ColumnWidth = { column: string; width: number };\n\nexport const DataGridProvider = ({ children }: { children: ComponentChildren }) => {\n    const minWidthByColumn = useMemo(() => new Map<string, number>(), []);\n    const registerCells: (props: ColumnWidth) => void = useCallback(\n        ({ column, width }) => {\n            if (minWidthByColumn.has(column)) {\n                const existingWidth = minWidthByColumn.get(column)!;\n                if (width > existingWidth) {\n                    minWidthByColumn.set(column, width);\n                }\n            } else {\n                minWidthByColumn.set(column, width);\n            }\n        },\n        [minWidthByColumn]\n    );\n\n    const getMinWidthByColumn = useCallback(\n        (column: string) => {\n            return minWidthByColumn.get(column);\n        },\n        [minWidthByColumn]\n    );\n\n    return <DataGridContext.Provider value={{ registerCells, getMinWidthByColumn }}>{toChildArray(children)}</DataGridContext.Provider>;\n};\n","import classnames from 'classnames';\nimport { DataGridColumn } from '../types';\nimport { useDataGridContext } from '../hooks/useDataGridContext';\nimport { useEffect, useRef } from 'preact/hooks';\n\nexport const TableHeaderCell = ({ cellKey, position, label }: DataGridColumn<Extract<string, string>> & { cellKey: string }) => {\n    const { registerCells } = useDataGridContext();\n    const ref = useRef<HTMLDivElement>(null);\n\n    useEffect(() => {\n        if (ref.current) {\n            registerCells({\n                column: cellKey,\n                width: ref.current?.getBoundingClientRect().width,\n            });\n        }\n    }, [cellKey, registerCells]);\n\n    return (\n        <div\n            role=\"columnheader\"\n            id={String(cellKey)}\n            className={classnames('adyen-pe-data-grid__cell adyen-pe-data-grid__cell--heading', {\n                'adyen-pe-data-grid__cell--right': position === 'right',\n                'adyen-pe-data-grid__cell--center': position === 'center',\n            })}\n        >\n            <div ref={ref} className={'adyen-pe-data-grid__cell--heading-content'}>\n                {label}\n            </div>\n        </div>\n    );\n};\n","import { ComponentChild, toChildArray } from 'preact';\nimport classnames from 'classnames';\nimport './DataGrid.scss';\nimport { TableBody } from './components/TableBody';\nimport { InteractiveBody } from './components/InteractiveBody';\nimport { DataGridColumn, DataGridProps } from './types';\nimport SkeletonBody from './components/SkeletonBody';\nimport { ErrorMessageDisplay } from '../ErrorMessageDisplay/ErrorMessageDisplay';\nimport { useMemo } from 'preact/hooks';\nimport { DataGridProvider } from './utils/DataGridProvider';\nimport { useDataGridContext } from './hooks/useDataGridContext';\nimport { TableHeaderCell } from './components/TableHeaderCell';\nimport useCoreContext from '../../../core/Context/useCoreContext';\n\nexport const INITIAL_STATE = Object.freeze({\n    activeIndex: -1,\n    index: -1,\n});\n\nexport type CustomCell<\n    Item extends Array<any>,\n    Columns extends Array<DataGridColumn<Extract<keyof Item[number], string>>>,\n    T extends Columns[number],\n> = {\n    [k in T['key']]?: (\n        props: Item[0][k] extends NonNullable<Item[0][k]>\n            ? { key: k; value: Item[number][k]; item: Item[number]; rowIndex: number }\n            : { key: k; item: Item[number]; rowIndex: number }\n    ) => ComponentChild;\n};\n\nfunction DataGrid<\n    Items extends Array<any>,\n    Columns extends Array<DataGridColumn<Extract<keyof Items[number], string>>>,\n    ClickedField extends keyof Items[number],\n    CustomCells extends CustomCell<Items, Columns, Columns[number]>,\n>({ errorDisplay, ...props }: DataGridProps<Items, Columns, ClickedField, CustomCells>) {\n    return (\n        <div style={{ width: '100%' }}>\n            <DataGridProvider>\n                <DataGridTable {...props} errorDisplay={errorDisplay} />\n            </DataGridProvider>\n        </div>\n    );\n}\n\nfunction DataGridTable<\n    Items extends Array<any>,\n    Columns extends Array<DataGridColumn<Extract<keyof Items[number], string>>>,\n    ClickedField extends keyof Items[number],\n    CustomCells extends CustomCell<Items, Columns, Columns[number]>,\n>({ autoFitColumns, errorDisplay, ...props }: DataGridProps<Items, Columns, ClickedField, CustomCells>) {\n    const children = useMemo(() => toChildArray(props.children), [props.children]);\n    const footer = useMemo(() => children.find((child: ComponentChild) => (child as any)?.['type'] === DataGridFooter), [children]);\n    const emptyBody = useMemo(() => props.data?.length === 0, [props.data]);\n    const showMessage = useMemo(() => !props.loading && (emptyBody || props.error), [emptyBody, props.error, props.loading]);\n    const { getMinWidthByColumn } = useDataGridContext();\n    const { getImageAsset } = useCoreContext();\n\n    const visibleCols = props.columns\n        .filter(column => column.visible !== false)\n        .map(column => ({ ...column, minWidth: getMinWidthByColumn(column.key) }));\n\n    const cellWidths = visibleCols.map(col => `minmax(${(col.minWidth || 100) + (props.narrowColumns ? 0 : 40)}px, ${col.flex || 1}fr)`).join(' ');\n\n    return (\n        <div\n            className={classnames('adyen-pe-data-grid', {\n                'adyen-pe-data-grid--condensed': props.condensed,\n                'adyen-pe-data-grid--outline': props.outline,\n                'adyen-pe-data-grid--scrollable': props.scrollable,\n                'adyen-pe-data-grid--loading': props.loading,\n                'adyen-pe-data-grid--empty': emptyBody || props.error,\n            })}\n            style={\n                autoFitColumns\n                    ? undefined\n                    : {\n                          '--adyen-pe-data-grid-cols': visibleCols.length,\n                          '--adyen-pe-data-grid-cells': cellWidths,\n                      }\n            }\n        >\n            <div className=\"adyen-pe-data-grid__table-wrapper\">\n                <div role=\"table\" className=\"adyen-pe-data-grid__table\">\n                    <div className=\"adyen-pe-data-grid__head\" role=\"rowgroup\">\n                        <div role=\"rowheader\" className=\"adyen-pe-data-grid__header\" style={props.loading ? { width: '100%' } : {}}>\n                            {visibleCols.map(item => (\n                                <TableHeaderCell key={item.key} label={item.label} position={item.position} cellKey={item.key} />\n                            ))}\n                        </div>\n                    </div>\n\n                    <DataGridBody<Items, Columns, ClickedField, CustomCells> {...props} columns={visibleCols as Columns} emptyBody={emptyBody} />\n                </div>\n                {showMessage &&\n                    (emptyBody && !props.error ? (\n                        <ErrorMessageDisplay\n                            withHeaderOffset\n                            title={props.emptyTableMessage?.title ?? 'common.errors.noResults'}\n                            message={props.emptyTableMessage?.message}\n                            imageDesktop={getImageAsset?.({ name: 'no-results-found' })}\n                            imageMobile={getImageAsset?.({ name: 'no-results-found', subFolder: 'images/small' })}\n                            centered\n                        />\n                    ) : props.error && errorDisplay ? (\n                        errorDisplay()\n                    ) : null)}\n            </div>\n            {footer}\n        </div>\n    );\n}\n\nfunction DataGridBody<\n    Items extends Array<any>,\n    Columns extends Array<DataGridColumn<Extract<keyof Items[number], string>>>,\n    ClickedField extends keyof Items[number],\n    CustomCells extends CustomCell<Items, Columns, Columns[number]>,\n>(props: DataGridProps<Items, Columns, ClickedField, CustomCells> & { emptyBody: boolean }) {\n    const showSkeleton = useMemo(() => props.loading || props.emptyBody || props.error, [props.emptyBody, props.error, props.loading]);\n\n    return (\n        <div\n            role=\"rowgroup\"\n            className={classnames('adyen-pe-data-grid__body')}\n            style={showSkeleton && { display: 'grid', gridTemplateColumns: '1fr' }}\n        >\n            {showSkeleton ? (\n                <SkeletonBody columnsNumber={props.columns.length} loading={props.loading} />\n            ) : props.onRowClick ? (\n                <InteractiveBody<Items, Columns, ClickedField, CustomCells>\n                    onRowHover={props.onRowHover}\n                    data={props.data}\n                    columns={props.columns}\n                    onRowClick={props.onRowClick}\n                    customCells={props.customCells}\n                />\n            ) : (\n                <TableBody<Items, Columns, ClickedField, CustomCells>\n                    onRowHover={props.onRowHover}\n                    data={props.data}\n                    customCells={props.customCells}\n                    columns={props.columns}\n                />\n            )}\n        </div>\n    );\n}\n\nDataGrid.Footer = DataGridFooter;\n\nfunction DataGridFooter({ children }: { children: ComponentChild }) {\n    return <div className=\"adyen-pe-data-grid__footer\">{children}</div>;\n}\n\nDataGrid.defaultProps = {\n    condensed: false,\n    outline: true,\n    scrollable: true,\n};\n\nexport default DataGrid;\n","export const ARIA_ERROR_SUFFIX = '-ariaError';\nexport const ERROR_MSG_INCOMPLETE_FIELD = 'incompleteField';\n","import { ButtonActionObject } from '../../components/internal/Button/ButtonActions/types';\n\nexport enum CommitAction {\n    NONE = 0,\n    APPLY = 1,\n    CLEAR = 2,\n}\n\nexport interface UseCommitActionConfig {\n    applyDisabled?: boolean;\n    applyTitle?: string;\n    resetDisabled?: boolean;\n    resetTitle?: string;\n    onResetAction?: () => void;\n}\n\nexport interface CommitActionProperties {\n    readonly commitAction: CommitAction;\n    readonly commitActionButtons: readonly [ButtonActionObject, ButtonActionObject];\n    readonly committing: boolean;\n    readonly resetCommitAction: () => void;\n}\n","import { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { ButtonVariant } from '../../components/internal/Button/types';\nimport { ButtonActionObject } from '../../components/internal/Button/ButtonActions/types';\nimport { CommitAction, CommitActionProperties, UseCommitActionConfig } from './types';\nimport useCoreContext from '../../core/Context/useCoreContext';\nimport { boolOrFalse, EMPTY_OBJECT } from '../../utils';\n\nconst useCommitAction = ({\n    applyDisabled,\n    applyTitle,\n    resetDisabled,\n    resetTitle,\n    onResetAction,\n}: UseCommitActionConfig = EMPTY_OBJECT): CommitActionProperties => {\n    const { i18n } = useCoreContext();\n    const [commitAction, setCommitAction] = useState(CommitAction.NONE);\n\n    const applyAction = useCallback(() => setCommitAction(CommitAction.APPLY), [setCommitAction]);\n    const resetAction = useCallback(() => {\n        setCommitAction(CommitAction.CLEAR);\n        onResetAction && onResetAction();\n    }, [setCommitAction, onResetAction]);\n    const resetCommitAction = useCallback(() => setCommitAction(CommitAction.NONE), [setCommitAction]);\n\n    const applyButtonAction = useMemo(\n        () =>\n            ({\n                disabled: boolOrFalse(applyDisabled),\n                event: applyAction,\n                title: applyTitle?.trim() || i18n.get('common.actions.apply.labels.default'),\n                variant: ButtonVariant.PRIMARY,\n            }) as ButtonActionObject,\n        [i18n, applyAction, applyDisabled, applyTitle]\n    );\n\n    const resetButtonAction = useMemo(\n        () =>\n            ({\n                disabled: boolOrFalse(resetDisabled),\n                event: resetAction,\n                title: resetTitle?.trim() || i18n.get('common.actions.reset.labels.default'),\n                variant: ButtonVariant.SECONDARY,\n            }) as ButtonActionObject,\n        [i18n, resetAction, resetDisabled, resetTitle]\n    );\n\n    const commitActionButtons = useMemo(() => [applyButtonAction, resetButtonAction] as const, [applyButtonAction, resetButtonAction]);\n    const committing = useMemo(() => commitAction !== CommitAction.NONE, [commitAction]);\n\n    useEffect(() => {\n        switch (commitAction) {\n            case CommitAction.APPLY:\n            case CommitAction.CLEAR:\n                resetCommitAction();\n                break;\n        }\n    }, [commitAction, resetCommitAction]);\n\n    return { commitAction, commitActionButtons, committing, resetCommitAction } as const;\n};\n\nexport default useCommitAction;\n","import { JSX } from 'preact';\nimport { useRef, useState, useEffect } from 'preact/hooks';\nimport cx from 'classnames';\nimport './Img.scss';\nimport { ImgProps } from './types';\n\nexport default function Img(props: ImgProps) {\n    const { backgroundUrl = '', className = '', classNameModifiers = [], src = '', alt = '', showOnError = false } = props;\n    const [loaded, setLoaded] = useState(false);\n    const imageRef = useRef(null);\n\n    const handleLoad = () => {\n        setLoaded(true);\n    };\n\n    const handleError = () => {\n        setLoaded(showOnError);\n    };\n\n    const classNames = cx(\n        [className],\n        'adyen-pe-image',\n        { 'adyen-pe-image--loaded': loaded },\n        ...classNameModifiers.map(modifier => `adyen-pe-image--${modifier}`)\n    );\n\n    useEffect(() => {\n        const image = backgroundUrl ? new Image() : imageRef.current;\n        if (image) {\n            image.src = backgroundUrl || src;\n            image.onload = handleLoad;\n        }\n        setLoaded(!!image?.complete);\n    }, []);\n\n    if (backgroundUrl) {\n        return <div style={{ backgroundUrl } as JSX.CSSProperties} {...props} className={classNames} />;\n    }\n\n    return <img {...props} alt={alt} ref={imageRef} className={classNames} onError={handleError} />;\n}\n","export const DROPDOWN_BASE_CLASS = 'adyen-pe-dropdown';\nexport const DROPDOWN_BUTTON_CLASS = `${DROPDOWN_BASE_CLASS}__button`;\nexport const DROPDOWN_BUTTON_ACTIVE_CLASS = `${DROPDOWN_BUTTON_CLASS}--active`;\nexport const DROPDOWN_BUTTON_COLLAPSE_INDICATOR_CLASS = `${DROPDOWN_BUTTON_CLASS}-collapse-indicator`;\nexport const DROPDOWN_BUTTON_CLEAR_CLASS = `${DROPDOWN_BUTTON_CLASS}-clear`;\nexport const DROPDOWN_BUTTON_HAS_SELECTION_CLASS = `${DROPDOWN_BUTTON_CLASS}--has-selection`;\nexport const DROPDOWN_BUTTON_ICON_CLASS = `${DROPDOWN_BUTTON_CLASS}-icon`;\nexport const DROPDOWN_BUTTON_MULTI_SELECT_COUNTER_CLASS = `${DROPDOWN_BUTTON_CLASS}-multiselect-counter`;\nexport const DROPDOWN_BUTTON_READONLY_CLASS = `${DROPDOWN_BUTTON_CLASS}--readonly`;\nexport const DROPDOWN_BUTTON_TEXT_CLASS = `${DROPDOWN_BUTTON_CLASS}-text`;\nexport const DROPDOWN_BUTTON_VALID_CLASS = `${DROPDOWN_BUTTON_CLASS}--valid`;\nexport const DROPDOWN_BUTTON_INVALID_CLASS = `${DROPDOWN_BUTTON_CLASS}--invalid`;\nexport const DROPDOWN_ELEMENT_CLASS = `${DROPDOWN_BASE_CLASS}__element`;\nexport const DROPDOWN_ELEMENT_ACTIVE_CLASS = `${DROPDOWN_ELEMENT_CLASS}--active`;\nexport const DROPDOWN_ELEMENT_KEYBOARD_ACTIVE_CLASS = `${DROPDOWN_ELEMENT_CLASS}--keyboard-active`;\nexport const DROPDOWN_ELEMENT_CHECKBOX_CLASS = `${DROPDOWN_ELEMENT_CLASS}-checkbox`;\nexport const DROPDOWN_ELEMENT_CHECKMARK_CLASS = `${DROPDOWN_ELEMENT_CLASS}-checkmark`;\nexport const DROPDOWN_ELEMENT_CONTENT_CLASS = `${DROPDOWN_ELEMENT_CLASS}-content`;\nexport const DROPDOWN_ELEMENT_DISABLED_CLASS = `${DROPDOWN_ELEMENT_CLASS}--disabled`;\nexport const DROPDOWN_ELEMENT_ICON_CLASS = `${DROPDOWN_ELEMENT_CLASS}-icon`;\nexport const DROPDOWN_ELEMENT_NO_OPTION_CLASS = `${DROPDOWN_ELEMENT_CLASS}--no-option`;\nexport const DROPDOWN_LIST_CLASS = `${DROPDOWN_BASE_CLASS}__list`;\nexport const DROPDOWN_LIST_ACTIVE_CLASS = `${DROPDOWN_LIST_CLASS}--active`;\nexport const DROPDOWN_MULTI_SELECT_CLASS = `${DROPDOWN_BASE_CLASS}--multiselect`;\n","import cx from 'classnames';\nimport { Ref } from 'preact';\nimport { MutableRef, useMemo } from 'preact/hooks';\nimport { AnchorHTMLAttributes, ButtonHTMLAttributes, HTMLAttributes, PropsWithChildren } from 'preact/compat';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Img from '../../../Img';\nimport Icon from '../../../Icon';\nimport Button from '../../../Button';\nimport { ButtonVariant } from '../../../Button/types';\nimport Typography from '../../../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../Typography/types';\nimport { boolOrFalse } from '../../../../../utils';\nimport { DEFAULT_BUTTON_CLASSNAME } from '../../../Button/constants';\nimport { getModifierClasses } from '../../../../../utils/preact';\nimport {\n    DROPDOWN_BUTTON_ACTIVE_CLASS,\n    DROPDOWN_BUTTON_CLASS,\n    DROPDOWN_BUTTON_CLEAR_CLASS,\n    DROPDOWN_BUTTON_COLLAPSE_INDICATOR_CLASS,\n    DROPDOWN_BUTTON_HAS_SELECTION_CLASS,\n    DROPDOWN_BUTTON_ICON_CLASS,\n    DROPDOWN_BUTTON_INVALID_CLASS,\n    DROPDOWN_BUTTON_MULTI_SELECT_COUNTER_CLASS,\n    DROPDOWN_BUTTON_READONLY_CLASS,\n    DROPDOWN_BUTTON_TEXT_CLASS,\n    DROPDOWN_BUTTON_VALID_CLASS,\n} from '../constants';\nimport type { SelectButtonProps, SelectItem } from '../types';\nimport { InteractionKeyCode } from '../../../../types';\n\nconst SelectButtonElement = <T extends SelectItem>({\n    active,\n    disabled,\n    className,\n    filterable,\n    toggleButtonRef,\n    buttonVariant,\n    ...props\n}: PropsWithChildren<\n    SelectButtonProps<T> &\n        (Partial<ButtonHTMLAttributes<HTMLButtonElement>> &\n            Partial<AnchorHTMLAttributes<HTMLAnchorElement>> &\n            Partial<HTMLAttributes<HTMLDivElement>>)\n>) => {\n    const variant = buttonVariant ?? ButtonVariant.SECONDARY;\n    const buttonClasses = useMemo(() => getModifierClasses(DEFAULT_BUTTON_CLASSNAME, [variant], [DEFAULT_BUTTON_CLASSNAME]), [variant]);\n    const baseClassName = useMemo(() => (filterable ? cx(buttonClasses, className) : className), [buttonClasses, className, filterable]);\n    return filterable ? (\n        <div {...props} className={baseClassName} ref={toggleButtonRef as Ref<HTMLDivElement>} />\n    ) : (\n        <Button\n            {...props}\n            className={baseClassName}\n            disabled={disabled}\n            variant={variant}\n            ref={toggleButtonRef as MutableRef<HTMLButtonElement>}\n            aria-label={props['aria-label']}\n            aria-labelledby={props['aria-labelledby']}\n        />\n    );\n};\n\nconst SelectButton = <T extends SelectItem>(props: SelectButtonProps<T> & { appliedFilterNumber: number }) => {\n    const { i18n } = useCoreContext();\n    const { active, clearable, filterable, multiSelect, placeholder, onClear, readonly, showList, withoutCollapseIndicator } = props;\n    const placeholderText = useMemo(() => placeholder?.trim() || i18n.get('common.inputs.select.placeholder'), [i18n, placeholder]);\n    const buttonActiveItem = useMemo(() => (boolOrFalse(multiSelect) ? undefined : active[0]), [active, multiSelect]);\n    const buttonTitleText = useMemo(() => buttonActiveItem?.name?.trim() || placeholderText, [buttonActiveItem, placeholderText]);\n    const showClearButton = useMemo(() => boolOrFalse(clearable) && !!active.length && !readonly, [active, clearable, readonly]);\n\n    return (\n        <SelectButtonElement\n            buttonVariant={props.buttonVariant}\n            active={active}\n            disabled={readonly}\n            aria-disabled={readonly}\n            aria-expanded={showList}\n            aria-haspopup=\"dialog\"\n            aria-invalid={props.isInvalid}\n            className={cx(DROPDOWN_BUTTON_CLASS, {\n                [DROPDOWN_BUTTON_ACTIVE_CLASS]: showList,\n                [DROPDOWN_BUTTON_HAS_SELECTION_CLASS]: !!active.length,\n                [DROPDOWN_BUTTON_READONLY_CLASS]: readonly,\n                [DROPDOWN_BUTTON_INVALID_CLASS]: props.isInvalid,\n                [DROPDOWN_BUTTON_VALID_CLASS]: props.isValid,\n            })}\n            filterable={filterable}\n            name={props.name}\n            onClick={!readonly ? props.toggleList : undefined}\n            onKeyDown={!readonly ? props.onButtonKeyDown : undefined}\n            role={!filterable || showList ? 'button' : undefined}\n            tabIndex={0}\n            title={buttonTitleText}\n            toggleButtonRef={props.toggleButtonRef}\n            type={filterable ? undefined : 'button'}\n            aria-describedby={props.ariaDescribedBy}\n            id={props.id}\n            {...(showList && filterable ? {} : { 'aria-label': props['aria-label'], 'aria-labelledby': props['aria-labelledby'] })}\n        >\n            {props.renderButtonContent ? (\n                props.renderButtonContent({ item: buttonActiveItem })\n            ) : showList && filterable ? (\n                <input\n                    aria-autocomplete=\"list\"\n                    aria-label={props['aria-label']}\n                    aria-labelledby={props['aria-labelledby']}\n                    aria-controls={props.selectListId}\n                    aria-expanded={showList}\n                    aria-owns={props.selectListId}\n                    aria-invalid={props.isInvalid}\n                    autoComplete=\"off\"\n                    className=\"adyen-pe-filter-input\"\n                    onInput={props.onInput}\n                    onKeyDown={props.onFilterInputKeyDown}\n                    placeholder={placeholderText}\n                    ref={props.filterInputRef}\n                    role=\"combobox\"\n                    type=\"text\"\n                />\n            ) : (\n                <>\n                    {buttonActiveItem?.icon && (\n                        <Img className={DROPDOWN_BUTTON_ICON_CLASS} src={buttonActiveItem.icon} alt={buttonActiveItem?.name?.trim() ?? ''} />\n                    )}\n                    <span className={DROPDOWN_BUTTON_TEXT_CLASS}>{buttonActiveItem?.selectedOptionName?.trim() || buttonTitleText}</span>\n                    {multiSelect && props.appliedFilterNumber > 0 && (\n                        <div className={DROPDOWN_BUTTON_MULTI_SELECT_COUNTER_CLASS}>\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger={true}>\n                                {props.appliedFilterNumber}\n                            </Typography>\n                        </div>\n                    )}\n                </>\n            )}\n            {!withoutCollapseIndicator && !showClearButton && (\n                <span className={DROPDOWN_BUTTON_COLLAPSE_INDICATOR_CLASS}>\n                    <Icon name=\"chevron-down\" />\n                </span>\n            )}\n            {showClearButton && (\n                <span\n                    role=\"button\"\n                    tabIndex={0}\n                    className={DROPDOWN_BUTTON_CLEAR_CLASS}\n                    onClick={onClear}\n                    onKeyDown={e => {\n                        if (e.code === InteractionKeyCode.ENTER || e.code === InteractionKeyCode.SPACE) {\n                            onClear?.(e);\n                        }\n                    }}\n                >\n                    <Icon name=\"cross-circle-fill\" />\n                </span>\n            )}\n        </SelectButtonElement>\n    );\n};\n\nexport default SelectButton;\n","import cx from 'classnames';\nimport { memo } from 'preact/compat';\nimport { useEffect, useRef } from 'preact/hooks';\nimport Img from '../../../Img';\nimport Icon from '../../../Icon';\nimport type { SelectItem, SelectItemProps } from '../types';\nimport { boolOrFalse } from '../../../../../utils';\nimport {\n    DROPDOWN_ELEMENT_ACTIVE_CLASS,\n    DROPDOWN_ELEMENT_CHECKBOX_CLASS,\n    DROPDOWN_ELEMENT_CHECKMARK_CLASS,\n    DROPDOWN_ELEMENT_CLASS,\n    DROPDOWN_ELEMENT_CONTENT_CLASS,\n    DROPDOWN_ELEMENT_DISABLED_CLASS,\n    DROPDOWN_ELEMENT_ICON_CLASS,\n    DROPDOWN_ELEMENT_KEYBOARD_ACTIVE_CLASS,\n} from '../constants';\n\ntype _RenderSelectOptionResult<T extends SelectItem> = ReturnType<SelectItemProps<T>['renderListItem']>;\ntype _RenderSelectOptionData<T extends SelectItem> = Parameters<SelectItemProps<T>['renderListItem']>[0];\n\nexport const renderDefaultMultiSelectionCheckedness = <T extends SelectItem>(data: _RenderSelectOptionData<T>): _RenderSelectOptionResult<T> =>\n    data.multiSelect ? (\n        <span className={DROPDOWN_ELEMENT_CHECKBOX_CLASS}>{data.selected ? <Icon name=\"checkmark-square-fill\" /> : <Icon name=\"square\" />}</span>\n    ) : null;\n\nexport const renderDefaultSingleSelectionCheckedness = <T extends SelectItem>(data: _RenderSelectOptionData<T>): _RenderSelectOptionResult<T> =>\n    data.multiSelect ? null : <span className={DROPDOWN_ELEMENT_CHECKMARK_CLASS}>{data.selected && <Icon name=\"checkmark\" />}</span>;\n\nexport const renderListItemDefault = <T extends SelectItem>(data: _RenderSelectOptionData<T>): _RenderSelectOptionResult<T> => (\n    <>\n        {renderDefaultMultiSelectionCheckedness(data)}\n        <div className={data.contentClassName as string}>\n            {data.item.icon && <Img className={data.iconClassName as string} alt={data.item.name} src={data.item.icon} />}\n            <span>{data.item.name}</span>\n        </div>\n        {renderDefaultSingleSelectionCheckedness(data)}\n    </>\n);\n\nconst SelectListItem = <T extends SelectItem>({\n    item,\n    multiSelect,\n    onKeyDown,\n    onSelect,\n    renderListItem,\n    selected,\n    isKeyboardActive,\n}: SelectItemProps<T>) => {\n    const disabled = !!item.disabled;\n    const itemRef = useRef<HTMLLIElement>(null);\n\n    // A change in Preact v10.11.1 means that all falsy values are assessed and set on data attributes.\n    // In the case of `data-disabled` we only ever want it set if item.disabled is actually true, since the presence\n    // of the `data-disabled` attr, regardless of its value, will disable the select list item.\n    const dataDisabled = boolOrFalse(item.disabled) || null;\n\n    const itemClassName = cx(DROPDOWN_ELEMENT_CLASS, {\n        [DROPDOWN_ELEMENT_ACTIVE_CLASS]: selected,\n        [DROPDOWN_ELEMENT_DISABLED_CLASS]: disabled,\n        [DROPDOWN_ELEMENT_KEYBOARD_ACTIVE_CLASS]: isKeyboardActive,\n    });\n\n    // Scroll into view when keyboard-active\n    useEffect(() => {\n        if (isKeyboardActive && itemRef.current) {\n            itemRef.current.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n        }\n    }, [isKeyboardActive]);\n\n    return (\n        <li\n            ref={itemRef}\n            aria-disabled={disabled}\n            aria-selected={selected}\n            className={itemClassName}\n            data-disabled={dataDisabled}\n            data-value={item.id}\n            onClick={onSelect}\n            onKeyDown={onKeyDown}\n            title={item.name}\n            role=\"option\"\n            tabIndex={-1}\n        >\n            {renderListItem({\n                item,\n                multiSelect,\n                selected,\n                contentClassName: DROPDOWN_ELEMENT_CONTENT_CLASS,\n                iconClassName: DROPDOWN_ELEMENT_ICON_CLASS,\n            })}\n        </li>\n    );\n};\n\nexport default memo(SelectListItem);\n","import { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { PopoverContainerPosition, PopoverContainerSize, PopoverContainerVariant, PopoverProps } from '../../../Popover/types';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { boolOrFalse, isFunction } from '../../../../../utils';\nimport { fixedForwardRef } from '../../../../../utils/preact';\nimport cx from 'classnames';\nimport { ForwardedRef, memo } from 'preact/compat';\nimport { useMemo } from 'preact/hooks';\nimport { DROPDOWN_ELEMENT_CLASS, DROPDOWN_ELEMENT_NO_OPTION_CLASS, DROPDOWN_LIST_ACTIVE_CLASS, DROPDOWN_LIST_CLASS } from '../constants';\nimport type { SelectItem, SelectListProps } from '../types';\nimport SelectListItem, { renderListItemDefault } from './SelectListItem';\nimport Popover from '../../../Popover/Popover';\n\nconst SelectList = fixedForwardRef(\n    <T extends SelectItem>(\n        {\n            active,\n            commitActions,\n            items,\n            disableFocusTrap,\n            multiSelect,\n            onKeyDown,\n            onSelect,\n            renderListItem,\n            selectListId,\n            showList,\n            textFilter,\n            toggleButtonRef,\n            dismissPopover,\n            setToTargetWidth,\n            popoverClassNameModifiers,\n            showOverlay,\n            fitPosition,\n            fixedPopoverPositioning,\n            activeIndex,\n            filterable,\n        }: SelectListProps<T>,\n        ref: ForwardedRef<HTMLUListElement>\n    ) => {\n        const { i18n } = useCoreContext();\n        const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n        const filteredItems = items.filter(item => !textFilter || item.name.toLowerCase().includes(textFilter));\n        const listClassName = cx(DROPDOWN_LIST_CLASS, { [DROPDOWN_LIST_ACTIVE_CLASS]: showList });\n        const noOptionsClassName = cx(DROPDOWN_ELEMENT_CLASS, DROPDOWN_ELEMENT_NO_OPTION_CLASS);\n        const renderSelectOption = useMemo(() => (isFunction(renderListItem) ? renderListItem : renderListItemDefault), [renderListItem]);\n        const multipleSelection = useMemo(() => boolOrFalse(multiSelect), [multiSelect]);\n\n        return showList ? (\n            <Popover\n                classNameModifiers={popoverClassNameModifiers}\n                actions={multipleSelection ? commitActions : undefined}\n                disableFocusTrap={disableFocusTrap}\n                divider={true}\n                dismiss={dismissPopover}\n                dismissible={false}\n                open={showList}\n                setToTargetWidth={setToTargetWidth}\n                containerSize={PopoverContainerSize.MEDIUM}\n                variant={PopoverContainerVariant.POPOVER}\n                targetElement={toggleButtonRef as PopoverProps['targetElement']}\n                withContentPadding={false}\n                position={PopoverContainerPosition.BOTTOM}\n                showOverlay={showOverlay && isSmContainer}\n                fitPosition={fitPosition}\n                fixedPositioning={fixedPopoverPositioning}\n            >\n                <ul className={listClassName} id={selectListId} ref={ref} role=\"listbox\" aria-multiselectable={multipleSelection}>\n                    {filteredItems.length ? (\n                        filteredItems.map((item, index) => {\n                            return (\n                                <SelectListItem\n                                    item={item}\n                                    key={item.id}\n                                    multiSelect={multipleSelection}\n                                    onKeyDown={onKeyDown}\n                                    onSelect={onSelect}\n                                    renderListItem={renderSelectOption}\n                                    selected={active.includes(item)}\n                                    isKeyboardActive={filterable && activeIndex === index}\n                                />\n                            );\n                        })\n                    ) : (\n                        <div className={noOptionsClassName}>{i18n.get('common.inputs.select.errors.noOptions')}</div>\n                    )}\n                </ul>\n            </Popover>\n        ) : null;\n    }\n);\n\nexport default memo(SelectList);\n","import { useCallback, useEffect, useState } from 'preact/hooks';\nimport { EMPTY_ARRAY } from '../../../../../utils';\nimport { SelectItem, SelectProps } from '../types';\n\nconst useSelect = <T extends SelectItem>({ items, multiSelect, selected }: Pick<SelectProps<T>, 'items' | 'multiSelect' | 'selected'>) => {\n    const getSelectedItems = useCallback(\n        (selectedItems: typeof selected = EMPTY_ARRAY) => {\n            const _selected = (EMPTY_ARRAY as readonly T['id'][]).concat(selectedItems ?? EMPTY_ARRAY).filter(Boolean);\n            const _selectedItems = items.filter(item => _selected.includes(item.id));\n            const selection = multiSelect ? _selectedItems : _selectedItems.slice(0, 1);\n            return selection.length ? Object.freeze(selection) : EMPTY_ARRAY;\n        },\n        [items, multiSelect]\n    );\n\n    const [selection, setSelection] = useState(getSelectedItems(selected));\n\n    const resetSelection = useCallback(\n        (selection: readonly T[] | T[] = EMPTY_ARRAY) => {\n            const nextSelection = selection.filter(item => items.includes(item));\n            setSelection(nextSelection.length ? Object.freeze(nextSelection) : EMPTY_ARRAY);\n        },\n        [items, setSelection]\n    );\n\n    const select = useCallback(\n        (item: T) => {\n            setSelection(currentSelection => {\n                const index = currentSelection.indexOf(item);\n\n                // Item not already selected\n                if (index < 0) return Object.freeze(((multiSelect ? currentSelection : EMPTY_ARRAY) as readonly T[]).concat(item));\n\n                // Item is current selection\n                if (!multiSelect) return currentSelection;\n\n                // Item should be deselected\n                const nextSelection = [...currentSelection];\n                nextSelection.splice(index, 1);\n                return nextSelection.length ? Object.freeze(nextSelection) : EMPTY_ARRAY;\n            });\n        },\n        [multiSelect, setSelection]\n    );\n\n    useEffect(() => setSelection(getSelectedItems(selected)), [getSelectedItems, selected, setSelection]);\n\n    return { resetSelection, select, selection } as const;\n};\n\nexport default useSelect;\n","import cx from 'classnames';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { InteractionKeyCode } from '../../../types';\nimport { ARIA_ERROR_SUFFIX } from '../../../../core/Errors/constants';\nimport { boolOrFalse, EMPTY_ARRAY, noop } from '../../../../utils';\nimport useCommitAction, { CommitAction } from '../../../../hooks/useCommitAction';\nimport useUniqueId from '../../../../hooks/useUniqueId';\nimport SelectButton from './components/SelectButton';\nimport SelectList from './components/SelectList';\nimport useSelect from './hooks/useSelect';\nimport { DROPDOWN_BASE_CLASS, DROPDOWN_MULTI_SELECT_CLASS } from './constants';\nimport { SelectItem, SelectProps } from './types';\nimport './Select.scss';\n\n// [TODO]: Revisit this component logic — for handling user interaction\nconst Select = <T extends SelectItem>({\n    className,\n    classNameModifiers = EMPTY_ARRAY as [],\n    clearable = false,\n    popoverClassNameModifiers,\n    items = EMPTY_ARRAY as readonly T[],\n    filterable = false,\n    disableFocusTrap = false,\n    disableToggleFocusOnClose = false,\n    multiSelect = false,\n    readonly = false,\n    onChange = noop,\n    selected,\n    name,\n    isInvalid,\n    isValid,\n    placeholder,\n    uniqueId,\n    renderListItem,\n    renderButtonContent,\n    isCollatingErrors,\n    setToTargetWidth,\n    withoutCollapseIndicator = false,\n    showOverlay = false,\n    fitPosition,\n    fixedPopoverPositioning,\n    onResetAction,\n    buttonVariant,\n    ...ariaAttributeProps\n}: SelectProps<T>) => {\n    const { resetSelection, select, selection } = useSelect({ items, multiSelect, selected });\n    const [showList, setShowList] = useState<boolean>(false);\n    const [textFilter, setTextFilter] = useState<string>('');\n    const [activeIndex, setActiveIndex] = useState<number>(-1);\n    const filterInputRef = useRef<HTMLInputElement>(null);\n    const selectListRef = useRef<HTMLUListElement>(null);\n    const toggleButtonRef = useRef<HTMLButtonElement>(null);\n\n    const selectButtonUniqueId = `elem-${useUniqueId()}`;\n    const selectButtonId = uniqueId ?? selectButtonUniqueId;\n    const selectListId = `select-${useUniqueId()}`;\n\n    const autoFocusAnimFrame = useRef<ReturnType<typeof requestAnimationFrame>>();\n    const pendingClickOutsideTriggeredHideList = useRef(true);\n    const clearSelectionInProgress = useRef(false);\n    const cachedSelectedItems = useRef(selection);\n    const selectedItems = useRef(selection);\n\n    const appliedFilterNumber = useMemo(() => selection.length, [selection]);\n\n    const dismissPopover = useCallback(() => {\n        setTextFilter('');\n        setShowList(false);\n        setActiveIndex(-1);\n        if (showList) {\n            resetSelection(cachedSelectedItems.current);\n            pendingClickOutsideTriggeredHideList.current = true;\n        }\n    }, [resetSelection, setShowList, setTextFilter, showList]);\n\n    const dropdownClassName = useMemo(\n        () =>\n            cx([\n                DROPDOWN_BASE_CLASS,\n                { [DROPDOWN_MULTI_SELECT_CLASS]: boolOrFalse(multiSelect) },\n                ...classNameModifiers.map(mod => `${DROPDOWN_BASE_CLASS}--${mod}`),\n                className,\n            ]),\n        [className, classNameModifiers, multiSelect]\n    );\n\n    const { commitAction, commitActionButtons, committing, resetCommitAction } = useCommitAction({\n        resetDisabled: !selection.length,\n        onResetAction: onResetAction,\n    });\n\n    /**\n     * Closes the select list:\n     *   - empties the text filter\n     *   - restores focus to the select button element (?)\n     */\n    const closeList = useCallback(() => {\n        setTextFilter('');\n        setShowList(false);\n        setActiveIndex(-1);\n        resetCommitAction();\n\n        if (!pendingClickOutsideTriggeredHideList.current) {\n            if (!disableToggleFocusOnClose) toggleButtonRef.current?.focus();\n        } else pendingClickOutsideTriggeredHideList.current = false;\n    }, [disableToggleFocusOnClose, resetCommitAction, setShowList, setTextFilter]);\n\n    const commitSelection = useCallback(() => {\n        cachedSelectedItems.current = selection;\n        const value = `${selection.map(({ id }) => id)}`;\n        onChange({ target: { value, name } });\n    }, [name, onChange, selection]);\n\n    const clearAndResetSelection = useCallback(() => {\n        resetSelection();\n        cachedSelectedItems.current = EMPTY_ARRAY;\n        onChange({ target: { value: '', name } });\n    }, [name, onChange, resetSelection]);\n\n    useEffect(() => {\n        switch (commitAction) {\n            case CommitAction.APPLY:\n                commitSelection();\n                break;\n            case CommitAction.CLEAR:\n                clearSelectionInProgress.current = true;\n                clearAndResetSelection();\n                break;\n        }\n    }, [clearAndResetSelection, commitAction, commitSelection, name, onChange, resetSelection]);\n\n    /**\n     * Closes the select list and fires an onChange\n     * @param e - Event\n     */\n    const handleSelect = useCallback(\n        (e: Event) => {\n            e.preventDefault();\n\n            // If the target is not one of the list items, select the first list item\n            const target: HTMLUListElement | undefined | null =\n                e.currentTarget && selectListRef?.current?.contains(e.currentTarget as HTMLUListElement)\n                    ? (e.currentTarget as HTMLUListElement)\n                    : null; // (selectListRef?.current?.firstElementChild as HTMLUListElement);\n\n            if (target && !target.getAttribute('data-disabled')) {\n                const value = target.getAttribute('data-value');\n                const item = items.find(item => item.id === value)!;\n                select(item);\n            }\n        },\n        [items, select]\n    );\n\n    useEffect(() => {\n        if (selectedItems.current !== selection) {\n            selectedItems.current = selection;\n            // showList check added to prevent commitSelection from being executed on initial value assignment\n            if ((!multiSelect || clearSelectionInProgress.current) && showList) {\n                commitSelection();\n                closeList();\n            }\n        }\n        clearSelectionInProgress.current = false;\n    }, [closeList, commitSelection, multiSelect, selection, showList]);\n\n    useEffect(() => {\n        if (committing) closeList();\n    }, [committing, closeList]);\n\n    useEffect(() => {\n        if (!showList) {\n            cachedSelectedItems.current = selection;\n        }\n    }, [selection, showList]);\n\n    /**\n     * Handle keyDown events on the selectList button\n     * Opens the selectList and focuses the first element if available\n     * @param evt {KeyboardEvent}\n     */\n    const handleButtonKeyDown = useCallback(\n        (evt: KeyboardEvent) => {\n            switch (evt.code) {\n                case InteractionKeyCode.ESCAPE:\n                case InteractionKeyCode.TAB:\n                    /**\n                     * Implementation notes ({@link https://w3c.github.io/aria-practices/examples/disclosure/disclosure-navigation.html article}):\n                     * - When user has focused select button but not yet moved into select list, close list and keep focus on the select button\n                     * - Shift+Tab out of select should close list\n                     */\n                    showList && closeList();\n                    pendingClickOutsideTriggeredHideList.current = evt.key === InteractionKeyCode.TAB;\n                    return;\n                case InteractionKeyCode.ENTER:\n                case InteractionKeyCode.SPACE:\n                    if (filterable && showList) {\n                        if (evt.key === InteractionKeyCode.ENTER) {\n                            if (textFilter) handleSelect(evt);\n                            else break;\n                        }\n                        return;\n                    }\n                    break;\n                case InteractionKeyCode.ARROW_DOWN:\n                case InteractionKeyCode.ARROW_UP:\n                    if (filterable && showList) {\n                        // When filterable and list is open, arrow keys are handled by input\n                        return;\n                    }\n                    break;\n                default:\n                    return;\n            }\n\n            evt.preventDefault();\n            setShowList(true);\n        },\n        [closeList, filterable, handleSelect, showList, setShowList, textFilter]\n    );\n\n    useEffect(() => {\n        if (showList) {\n            cancelAnimationFrame(autoFocusAnimFrame.current!);\n\n            autoFocusAnimFrame.current = requestAnimationFrame(() => {\n                focus: {\n                    let item = selectListRef.current?.firstElementChild as HTMLLIElement;\n                    let firstAvailableItem: typeof item | undefined;\n                    let activeIndex = 0;\n\n                    while (item) {\n                        if (!(item.dataset.disabled && item.dataset.disabled === 'true')) {\n                            if (item.getAttribute('aria-selected') === 'true') {\n                                item.tabIndex = 0;\n                                filterable ? setActiveIndex(activeIndex) : item.focus();\n                                break focus;\n                            }\n                            firstAvailableItem = firstAvailableItem || item;\n                            activeIndex++;\n                        }\n                        item = item.nextElementSibling as HTMLLIElement;\n                    }\n\n                    if (firstAvailableItem && !filterable) {\n                        firstAvailableItem.tabIndex = 0;\n                        firstAvailableItem.focus();\n                    }\n                }\n            });\n        }\n    }, [filterable, showList]);\n\n    /**\n     * Handle keyDown events on the list elements\n     * Navigates through the list, or select an element, or focus the filter input, or close the menu.\n     * @param e - KeyDownEvent\n     */\n    const handleListKeyDown = useCallback(\n        (evt: KeyboardEvent) => {\n            const target = evt.target as HTMLInputElement;\n\n            switch (evt.code) {\n                case InteractionKeyCode.ESCAPE:\n                    evt.preventDefault();\n                    evt.stopPropagation();\n                    // When user is actively navigating through list with arrow keys - close list and keep focus on the Select Button re. a11y guidelines (above)\n                    closeList();\n                    break;\n                case InteractionKeyCode.ENTER:\n                case InteractionKeyCode.SPACE:\n                    handleSelect(evt);\n                    break;\n                case InteractionKeyCode.ARROW_DOWN: {\n                    evt.preventDefault();\n                    let item = target.nextElementSibling as HTMLLIElement;\n                    while (item) {\n                        if (!(item.dataset.disabled && item.dataset.disabled === 'true')) {\n                            target.tabIndex = -1;\n                            item.tabIndex = 0;\n                            item.focus();\n                            break;\n                        }\n                        item = item.nextElementSibling as HTMLLIElement;\n                    }\n                    break;\n                }\n                case InteractionKeyCode.ARROW_UP: {\n                    evt.preventDefault();\n                    focus: {\n                        let item = target.previousElementSibling as HTMLLIElement;\n                        while (item) {\n                            if (!(item.dataset.disabled && item.dataset.disabled === 'true')) {\n                                target.tabIndex = -1;\n                                item.tabIndex = 0;\n                                item.focus();\n                                break focus;\n                            }\n                            item = item.previousElementSibling as HTMLLIElement;\n                        }\n                        if (filterable && filterInputRef.current) {\n                            filterInputRef.current.focus();\n                        }\n                    }\n                    break;\n                }\n                default:\n            }\n        },\n        [closeList, filterable, handleSelect]\n    );\n\n    /**\n     * Handle keyDown events on the filter input\n     * Navigates through filtered items using arrow keys\n     * @param evt - KeyboardEvent\n     */\n    const handleFilterInputKeyDown = useCallback(\n        (evt: KeyboardEvent) => {\n            if (!filterable || !showList) return;\n\n            const filteredItems = items.filter(item => !textFilter || item.name.toLowerCase().includes(textFilter));\n            const availableItems = filteredItems.filter(item => !item.disabled);\n\n            switch (evt.code) {\n                case InteractionKeyCode.ESCAPE:\n                    evt.preventDefault();\n                    closeList();\n                    break;\n                case InteractionKeyCode.ENTER:\n                    evt.preventDefault();\n                    if (activeIndex >= 0 && activeIndex < filteredItems.length) {\n                        const item = filteredItems[activeIndex];\n                        if (item && !item?.disabled) {\n                            select(item);\n                        }\n                    }\n                    break;\n                case InteractionKeyCode.ARROW_DOWN: {\n                    evt.preventDefault();\n                    if (availableItems.length === 0) break;\n\n                    let nextIndex = activeIndex + 1;\n                    while (nextIndex < filteredItems.length) {\n                        if (!filteredItems[nextIndex]?.disabled) {\n                            setActiveIndex(nextIndex);\n                            break;\n                        }\n                        nextIndex++;\n                    }\n                    // If we reached the end, wrap to first available\n                    if (nextIndex >= filteredItems.length) {\n                        for (let i = 0; i < filteredItems.length; i++) {\n                            if (!filteredItems[i]?.disabled) {\n                                setActiveIndex(i);\n                                break;\n                            }\n                        }\n                    }\n                    break;\n                }\n                case InteractionKeyCode.ARROW_UP: {\n                    evt.preventDefault();\n                    if (availableItems.length === 0) break;\n\n                    let prevIndex = activeIndex - 1;\n                    while (prevIndex >= 0) {\n                        if (!filteredItems[prevIndex]?.disabled) {\n                            setActiveIndex(prevIndex);\n                            break;\n                        }\n                        prevIndex--;\n                    }\n                    // If we reached the start or activeIndex was -1, don't wrap\n                    if (prevIndex < 0) {\n                        setActiveIndex(-1);\n                    }\n                    break;\n                }\n                default:\n                    break;\n            }\n        },\n        [filterable, showList, items, textFilter, activeIndex, closeList, select]\n    );\n\n    /**\n     * Updates the state with the current text filter value\n     * @param e - KeyboardEvent\n     */\n    const handleTextFilter = useCallback(\n        (e: Event) => {\n            const value: string = (e.target as HTMLInputElement).value;\n            setTextFilter(value.toLowerCase());\n            setActiveIndex(-1); // Reset active index when filter changes\n        },\n        [setTextFilter]\n    );\n\n    /**\n     * Toggles the selectList and focuses in either the filter input or in the selectList button\n     * @param e - Event\n     */\n    const toggleList = useCallback(\n        (e: Event) => {\n            e.preventDefault();\n            setShowList(showList => !showList);\n            showList && resetSelection(cachedSelectedItems.current);\n        },\n        [setShowList, showList, resetSelection]\n    );\n\n    useEffect(() => {\n        if (showList && filterable) {\n            // Use requestAnimationFrame to ensure focus happens after any parent\n            // focus traps (e.g., Modal) have completed their focus management\n            const frame = requestAnimationFrame(() => {\n                filterInputRef.current?.focus();\n            });\n            setActiveIndex(-1);\n            return () => cancelAnimationFrame(frame);\n        }\n    }, [filterable, showList]);\n\n    const handleClear = useCallback(\n        (e?: Event) => {\n            e?.preventDefault?.();\n            e?.stopPropagation?.();\n            clearAndResetSelection();\n        },\n        [clearAndResetSelection]\n    );\n\n    return (\n        <div className={dropdownClassName}>\n            <SelectButton\n                buttonVariant={buttonVariant}\n                id={selectButtonId}\n                appliedFilterNumber={appliedFilterNumber}\n                active={selection}\n                clearable={clearable}\n                filterInputRef={filterInputRef}\n                filterable={filterable}\n                isInvalid={isInvalid}\n                isValid={isValid}\n                name={name}\n                onClear={handleClear}\n                onButtonKeyDown={handleButtonKeyDown}\n                onFilterInputKeyDown={handleFilterInputKeyDown}\n                multiSelect={multiSelect}\n                placeholder={placeholder}\n                readonly={readonly}\n                renderButtonContent={renderButtonContent}\n                selectListId={selectListId}\n                showList={showList}\n                toggleButtonRef={toggleButtonRef}\n                toggleList={toggleList}\n                withoutCollapseIndicator={withoutCollapseIndicator}\n                ariaDescribedBy={!isCollatingErrors && selectButtonId ? `${selectButtonId}${ARIA_ERROR_SUFFIX}` : undefined}\n                {...ariaAttributeProps}\n                onInput={handleTextFilter}\n            />\n            <SelectList\n                popoverClassNameModifiers={popoverClassNameModifiers}\n                setToTargetWidth={setToTargetWidth}\n                dismissPopover={dismissPopover}\n                active={selection}\n                commitActions={commitActionButtons}\n                items={items}\n                multiSelect={multiSelect}\n                disableFocusTrap={disableFocusTrap || filterable}\n                onKeyDown={handleListKeyDown}\n                onSelect={handleSelect}\n                selectListId={selectListId}\n                ref={selectListRef}\n                toggleButtonRef={toggleButtonRef}\n                renderListItem={renderListItem}\n                showList={showList}\n                showOverlay={showOverlay}\n                textFilter={textFilter}\n                activeIndex={filterable ? activeIndex : undefined}\n                filterable={filterable}\n                fitPosition={fitPosition}\n                fixedPopoverPositioning={fixedPopoverPositioning}\n            />\n        </div>\n    );\n};\n\nexport default Select;\n","import useCoreContext from '../../../core/Context/useCoreContext';\nimport { ComponentChildren, Fragment, FunctionalComponent } from 'preact';\nimport { TranslationFill, TranslationFillFunc, TranslationProps } from './types';\nimport { isFunction, uniqueId } from '../../../utils';\nimport { useMemo } from 'preact/hooks';\n\nconst normalizeFill = (fill: TranslationFill): TranslationFillFunc => {\n    return isFunction(fill) ? fill : () => fill;\n};\n\nexport const Translation: FunctionalComponent<TranslationProps> = ({ count, defaultFill, fills, translationKey }) => {\n    const { i18n } = useCoreContext();\n\n    const getFill = useMemo<TranslationFillFunc>(() => {\n        const _defaultFill = normalizeFill(defaultFill);\n\n        if (fills !== undefined) {\n            return (...args) => {\n                const [placeholder, index] = args;\n\n                for (const lookupProperty of [placeholder, index]) {\n                    const fill = normalizeFill((fills as any)[lookupProperty])(...args);\n                    if (fill != undefined) return fill;\n                }\n\n                return _defaultFill(...args);\n            };\n        }\n\n        return _defaultFill;\n    }, [fills, defaultFill]);\n\n    return useMemo(() => {\n        const fills: ComponentChildren[] = [];\n        const placeholderFill = uniqueId('translation');\n\n        const values = (...args: Parameters<TranslationFillFunc>) => {\n            fills.push(getFill(...args) ?? null);\n            return placeholderFill;\n        };\n\n        const [firstFragment, ...restFragments] = i18n.get(translationKey, { count, values }).split(placeholderFill);\n\n        return (\n            <>\n                {firstFragment}\n                {restFragments.map((fragment, index) => (\n                    <Fragment key={`${placeholderFill}__${index}`}>\n                        {fills[index]}\n                        {fragment}\n                    </Fragment>\n                ))}\n            </>\n        );\n    }, [i18n, count, getFill, translationKey]);\n};\n\nexport default Translation;\n","import Icon from '../Icon';\nimport Button from '../Button';\nimport Select from '../FormFields/Select';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { EMPTY_ARRAY, isNullish } from '../../../utils';\nimport { SelectChangeEvent, SelectItem } from '../FormFields/Select/types';\nimport { ButtonVariant } from '../Button/types';\nimport { Translation } from '../Translation';\nimport { PaginationProps } from './types';\nimport './Pagination.scss';\n\nconst BASE_CLASS = 'adyen-pe-pagination';\n\nconst classes = {\n    base: BASE_CLASS,\n    context: BASE_CLASS + '__context',\n    controls: BASE_CLASS + '__controls',\n    limit: BASE_CLASS + '__limit',\n    limitSelector: BASE_CLASS + '__limit-selector',\n};\n\nexport default function Pagination({\n    next,\n    hasNext,\n    hasPrev,\n    prev,\n    limit,\n    limitOptions,\n    onLimitSelection,\n    ariaLabelKey,\n    limitSelectAriaLabelKey,\n}: PaginationProps) {\n    const { i18n } = useCoreContext();\n\n    const _limitOptions = useMemo(\n        () =>\n            limitOptions &&\n            Object.freeze(\n                limitOptions.map(\n                    option =>\n                        ({\n                            name: option.toLocaleString(i18n.locale, { style: 'decimal' }),\n                            id: String(option),\n                        }) as SelectItem\n                )\n            ),\n        [i18n, limitOptions]\n    );\n\n    const _onLimitChanged = useCallback(\n        ({ target }: SelectChangeEvent) => {\n            if (isNullish(target?.value)) return;\n            onLimitSelection?.(+target.value);\n        },\n        [onLimitSelection]\n    );\n\n    return (\n        <div role=\"group\" aria-label={i18n.get(ariaLabelKey ?? 'common.pagination.label')} className={classes.base}>\n            <div className={classes.context}>\n                {_limitOptions && onLimitSelection && (\n                    <div className={classes.limit} role=\"presentation\">\n                        <Translation\n                            translationKey=\"common.pagination.controls.limitSelect\"\n                            fills={{\n                                pageLimit: (\n                                    <div className={classes.limitSelector}>\n                                        <Select\n                                            setToTargetWidth={true}\n                                            filterable={false}\n                                            multiSelect={false}\n                                            items={_limitOptions}\n                                            onChange={_onLimitChanged}\n                                            selected={`${limit ?? ''}`}\n                                            aria-label={i18n.get(limitSelectAriaLabelKey ?? 'common.pagination.controls.limitSelect.label')}\n                                        />\n                                    </div>\n                                ),\n                            }}\n                        />\n                    </div>\n                )}\n            </div>\n\n            <div className={classes.controls}>\n                <Button\n                    variant={ButtonVariant.TERTIARY}\n                    disabled={!hasPrev}\n                    iconButton={true}\n                    aria-label={i18n.get('common.pagination.controls.previousPage.label')}\n                    classNameModifiers={['circle'].concat(hasPrev ? EMPTY_ARRAY : 'disabled')}\n                    onClick={prev}\n                >\n                    <Icon name=\"chevron-left\" />\n                </Button>\n                <Button\n                    variant={ButtonVariant.TERTIARY}\n                    disabled={!hasNext}\n                    iconButton={true}\n                    aria-label={i18n.get('common.pagination.controls.nextPage.label')}\n                    classNameModifiers={['circle'].concat(hasNext ? EMPTY_ARRAY : 'disabled')}\n                    onClick={next}\n                >\n                    <Icon name=\"chevron-right\" />\n                </Button>\n            </div>\n        </div>\n    );\n}\n","export const BASE_CLASS = 'adyen-pe-transactions-table';\nexport const AMOUNT_CLASS = BASE_CLASS + '__amount';\nexport const PAYMENT_METHOD_CLASS = BASE_CLASS + '__payment-method';\nexport const PAYMENT_METHOD_LOGO_CONTAINER_CLASS = BASE_CLASS + '__payment-method-logo-container';\nexport const PAYMENT_METHOD_LOGO_CLASS = BASE_CLASS + '__payment-method-logo';\nexport const DATE_AND_PAYMENT_METHOD_CLASS = BASE_CLASS + '__date-and-payment-method';\nexport const DATE_METHOD_CLASS = BASE_CLASS + '__date-and-payment-method--date';\n","import useCoreContext from '../core/Context/useCoreContext';\nimport { EMPTY_OBJECT } from '../utils';\nimport { useMemo } from 'preact/hooks';\n\n// TODO - Remove once we define a strategy to handle images\nconst FALLBACK_CDN_CONTEXT = 'https://cdf6519016.cdn.adyen.com/checkoutshopper/';\n\nexport interface ImageOptions {\n    extension?: string;\n    imageFolder?: string;\n    resourceContext?: string;\n    name: string;\n    parentFolder?: string;\n    size?: string;\n    subFolder?: string;\n}\n\nconst returnImage = ({\n    name,\n    resourceContext,\n    imageFolder = 'logos/',\n    parentFolder = '',\n    extension = 'svg',\n    size = '',\n    subFolder = '',\n}: ImageOptions) => {\n    const path = `/images/${imageFolder}/${subFolder}/${parentFolder}/${name}${size}.${extension}`.replace(/\\/+/g, '/');\n    return `${resourceContext}${path}`;\n};\n\nexport const useImageUrl = ({ options = EMPTY_OBJECT, name }: { options: Partial<ImageOptions>; name: string }) => {\n    const { loadingContext } = useCoreContext();\n\n    // TODO - Get rid of FALLBACK_CDN_CONTEXT once we define our assets URL\n    const image = useMemo(\n        () =>\n            returnImage({\n                resourceContext: FALLBACK_CDN_CONTEXT || loadingContext,\n                name,\n                ...options,\n            }),\n        [loadingContext, name, options]\n    );\n\n    return image;\n};\n","import cx from 'classnames';\nimport { useImageUrl } from '../../../hooks/useImageUrl';\nimport { useMemo } from 'preact/hooks';\n\ninterface ImageProps {\n    name: string;\n    alt: string;\n    extension?: string;\n    className?: string;\n    folder?: string;\n}\n\nexport const Image = ({ folder = 'components/', className, alt, name, extension }: ImageProps) => {\n    const imageUrl = useImageUrl({\n        options: useMemo(() => ({ imageFolder: folder, extension }), [extension, folder]),\n        name,\n    });\n\n    return <img className={cx('adyen-pe__image', className)} alt={alt} src={imageUrl} />;\n};\n","import { getDateRangeTimestamps } from '../../../internal/Calendar/calendar/timerange/utils';\nimport { IPaymentMethod } from '../../../../types';\nimport { EMPTY_OBJECT } from '../../../../utils';\nimport { TransactionsFilters } from '../types';\nimport { INITIAL_FILTERS } from '../constants';\n\nconst allFilters = Object.keys(INITIAL_FILTERS) as readonly (keyof TransactionsFilters)[];\nconst allFiltersSet = new Set(allFilters);\n\nconst PAYMENT_METHODS = Object.freeze({\n    klarna: 'Klarna',\n    paypal: 'PayPal',\n    klarna_paynow: 'Klarna Pay Now',\n});\n\nexport const parsePaymentMethodType = (paymentMethod: NonNullable<IPaymentMethod>, format?: 'detail' | 'fourDigit') => {\n    const { lastFourDigits, description, type } = paymentMethod ?? EMPTY_OBJECT;\n    if (lastFourDigits) return format === 'detail' ? `•••• •••• •••• ${lastFourDigits}` : lastFourDigits;\n    return description || PAYMENT_METHODS[type as keyof typeof PAYMENT_METHODS] || type;\n};\n\nexport const getTransactionsFilterQueryParams = <T extends TransactionsFilters>(filters: T, now: number) => {\n    const { from, to } = getDateRangeTimestamps(filters.createdDate, now, filters.balanceAccount?.timeZone);\n    return {\n        balanceAccountId: filters.balanceAccount?.id!, // using null assertion to ensure correct type inference\n        categories: filters.categories as (typeof filters.categories)[number][],\n        createdSince: new Date(from).toISOString(),\n        createdUntil: new Date(to).toISOString(),\n        currencies: filters.currencies as (typeof filters.currencies)[number][],\n        paymentPspReference: filters.paymentPspReference,\n        statuses: filters.statuses as (typeof filters.statuses)[number][],\n    } as const;\n};\n\nexport const getTransactionsFilterParams = <T extends TransactionsFilters>(filters: T, now: number) => {\n    const { balanceAccountId, categories, currencies, statuses, ...restFilterParams } = getTransactionsFilterQueryParams(filters, now);\n    return {\n        ...restFilterParams,\n        balanceAccountId: balanceAccountId || undefined,\n        categories: String(categories) || undefined,\n        currencies: String(currencies) || undefined,\n        statuses: String(statuses) || undefined,\n    } as const;\n};\n\nexport const compareTransactionsFilters = <T extends TransactionsFilters>(\n    filtersA: T,\n    filtersB: T,\n    filtersSet: Set<keyof TransactionsFilters> = allFiltersSet\n) => {\n    return allFilters.some(filterName => {\n        if (filtersSet.has(filterName)) {\n            const filterValueA = filtersA[filterName];\n            const filterValueB = filtersB[filterName];\n\n            switch (filterName) {\n                case 'categories':\n                case 'currencies':\n                case 'statuses':\n                    return String(filterValueA) !== String(filterValueB);\n                default:\n                    return filterValueA !== filterValueB;\n            }\n        }\n    });\n};\n","import useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { IBankAccount, IPaymentMethod } from '../../../../../types';\nimport { Image } from '../../../../internal/Image/Image';\nimport { Tag } from '../../../../internal/Tag/Tag';\nimport { TagVariant } from '../../../../internal/Tag/types';\nimport { TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { parsePaymentMethodType } from '../utils';\nimport { PAYMENT_METHOD_CLASS, PAYMENT_METHOD_LOGO_CLASS, PAYMENT_METHOD_LOGO_CONTAINER_CLASS } from './constants';\n\nconst PaymentMethodCell = ({ paymentMethod, bankAccount }: { paymentMethod?: IPaymentMethod; bankAccount?: IBankAccount }) => {\n    const { i18n } = useCoreContext();\n    const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    return (\n        <div className={PAYMENT_METHOD_CLASS}>\n            {paymentMethod || bankAccount ? (\n                <>\n                    <div className={PAYMENT_METHOD_LOGO_CONTAINER_CLASS}>\n                        <Image\n                            name={paymentMethod ? paymentMethod.type : 'bankTransfer'}\n                            alt={paymentMethod ? paymentMethod.type : 'bankTransfer'}\n                            folder={'logos/'}\n                            className={PAYMENT_METHOD_LOGO_CLASS}\n                        />\n                    </div>\n                    <Typography variant={TypographyVariant.BODY} stronger={isSmContainer}>\n                        {paymentMethod ? parsePaymentMethodType(paymentMethod) : bankAccount?.accountNumberLastFourDigits}\n                    </Typography>\n                </>\n            ) : (\n                <Tag label={i18n.get('common.tags.noData')} variant={TagVariant.LIGHT_WITH_OUTLINE} />\n            )}\n        </div>\n    );\n};\n\nexport default PaymentMethodCell;\n","import { useMemo } from 'preact/hooks';\nimport { CellTextPosition } from '../components/internal/DataGrid/types';\nimport { CustomColumn, DataGridCustomColumnConfig } from '../components/types';\nimport useCoreContext from '../core/Context/useCoreContext';\nimport { EMPTY_OBJECT, isUndefined } from '../utils';\nimport { containerQueries, useResponsiveContainer } from './useResponsiveContainer';\nimport { TranslationKey } from '../translations';\n\ntype Columns<k extends string> = DataGridCustomColumnConfig<k> & { label?: string; position?: CellTextPosition; visible?: boolean };\n\nfunction removeUndefinedProperties<T extends string>(obj: Omit<Columns<T>, 'key'>): Partial<Columns<T>> {\n    let result: Partial<Omit<Columns<T>, 'key'>> = {};\n    for (const key of Object.keys(obj) as Array<keyof Omit<Columns<T>, 'key'>>) {\n        if (!isUndefined(obj[key])) {\n            result = { ...result, [key as keyof T]: obj[key] };\n        }\n    }\n    return result;\n}\n\nexport const useTableColumns = <T extends string, C extends string>({\n    fields,\n    customColumns,\n    columnConfig,\n    fieldsKeys,\n}: {\n    fields: T[] | Readonly<T[]>;\n    customColumns?: CustomColumn<C>[];\n    columnConfig?: { [k in T]?: Omit<Columns<k>, 'key'> };\n    fieldsKeys?: { [k in T]?: TranslationKey };\n}) => {\n    const { i18n } = useCoreContext();\n\n    const tableColumns: CustomColumn<T>[] = useMemo(() => fields.map(field => ({ key: field })), [fields]);\n    const isSmAndUpContainer = useResponsiveContainer(containerQueries.up.sm);\n\n    const columns = useMemo(() => {\n        const newFields = customColumns?.filter(cc => !fields?.some(field => field === (cc.key as unknown as T))).map(colum => colum.key) || [];\n\n        const mergedColumns = [...tableColumns, ...(customColumns?.filter(col => col?.key) || [])];\n\n        const customColumnsMap =\n            customColumns?.reduce<Record<string, (typeof customColumns)[number]>>((acc, col) => {\n                acc[col.key] = col;\n                return acc;\n            }, {}) || {};\n\n        // Use a Map to track columns by key.\n        const columnMap = new Map<string, { key: T; position?: 'center' | 'left' | 'right'; flex?: number; visible?: boolean; label: string }>();\n\n        mergedColumns.forEach(current => {\n            // Check if there is a custom column that should be hidden\n            const hiddenColumn = customColumnsMap[current.key];\n            if (hiddenColumn?.visibility === 'hidden') return;\n\n            if (columnMap.has(current.key)) {\n                // Merge properties from current into the existing column.\n                const existing = columnMap.get(current.key)!;\n                // Current's properties will override existing ones if there are conflicts\n                columnMap.set(current.key, {\n                    ...existing,\n                    ...current,\n                    visible: current.visibility !== 'hidden',\n                    position: current.align || existing.position,\n                });\n            } else {\n                const { key, flex, align } = current;\n                const label = i18n.get(fieldsKeys?.[key] || (key as any));\n                const config = removeUndefinedProperties<T>(columnConfig?.[key] || EMPTY_OBJECT);\n\n                columnMap.set(current.key, {\n                    key: key as unknown as T,\n                    label,\n                    visible: newFields.includes(current.key as unknown as C) ? isSmAndUpContainer : true,\n                    flex,\n                    position: align,\n                    ...config,\n                });\n            }\n        });\n\n        return Array.from(columnMap.values());\n    }, [columnConfig, customColumns, fields, i18n, isSmAndUpContainer, tableColumns]);\n\n    return columns;\n};\n","import { FC } from 'preact/compat';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport { DATE_FORMAT_TRANSACTIONS, DATE_FORMAT_TRANSACTIONS_MOBILE } from '../../../../../constants';\nimport DataOverviewError from '../../../../internal/DataOverviewError/DataOverviewError';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { getCurrencyCode } from '../../../../../core/Localization/amount/amount-util';\nimport { TranslationKey } from '../../../../../translations';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport DataGrid from '../../../../internal/DataGrid';\nimport Pagination from '../../../../internal/Pagination';\nimport { Tooltip } from '../../../../internal/Tooltip/Tooltip';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { getTransactionCategoryDescription, getTransactionCategory } from '../../../../utils/translation/getters';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { AMOUNT_CLASS, BASE_CLASS, DATE_AND_PAYMENT_METHOD_CLASS, DATE_METHOD_CLASS } from './constants';\nimport './TransactionTable.scss';\nimport PaymentMethodCell from './PaymentMethodCell';\nimport { TransactionTableProps } from './types';\nimport { useTableColumns } from '../../../../../hooks/useTableColumns';\nimport { Tag } from '../../../../internal/Tag/Tag';\n\n// Remove status column temporarily\nexport const TRANSACTION_FIELDS = ['createdAt' /*, 'status'*/, 'paymentMethod', 'transactionType', 'currency', 'netAmount', 'grossAmount'] as const;\nexport type TransactionsTableCols = (typeof TRANSACTION_FIELDS)[number];\n\n// Mapping used to remap custom column (field) configurations to a different field name\n// For example: `amount` field (V1) is remapped to `netAmount` field (V2).\nexport const TRANSACTION_FIELDS_REMAPS: Readonly<Record<string, TransactionsTableCols>> = {\n    amount: 'netAmount',\n} as const;\n\nconst FIELDS_KEYS = {\n    createdAt: 'transactions.overview.list.fields.createdAt',\n    currency: 'transactions.overview.list.fields.currency',\n    grossAmount: 'transactions.overview.list.fields.grossAmount',\n    netAmount: 'transactions.overview.list.fields.netAmount',\n    paymentMethod: 'transactions.overview.list.fields.paymentMethod',\n    // status: 'transactions.overview.list.fields.status',\n    transactionType: 'transactions.overview.list.fields.transactionType',\n} as const satisfies Partial<Record<TransactionsTableCols, TranslationKey>>;\n\nexport const TransactionsTable: FC<TransactionTableProps> = ({\n    activeBalanceAccount,\n    availableCurrencies,\n    error,\n    hasMultipleCurrencies,\n    loading,\n    onContactSupport,\n    onRowClick,\n    showDetails,\n    showPagination,\n    transactions,\n    customColumns,\n    ...paginationProps\n}) => {\n    const { i18n } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting(activeBalanceAccount?.timeZone);\n    const [hoveredRow, setHoveredRow] = useState<undefined | number>();\n    const isSmAndUpContainer = useResponsiveContainer(containerQueries.up.sm);\n    const isMdAndUpContainer = useResponsiveContainer(containerQueries.up.md);\n    const isXsAndDownContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    const columns = useTableColumns({\n        customColumns,\n        fields: TRANSACTION_FIELDS,\n        fieldsKeys: FIELDS_KEYS,\n        columnConfig: {\n            netAmount: {\n                label: hasMultipleCurrencies\n                    ? undefined\n                    : `${i18n.get(FIELDS_KEYS['netAmount'])} ${availableCurrencies && availableCurrencies[0] ? `(${getCurrencyCode(availableCurrencies[0])})` : ''}`,\n                position: 'right',\n                flex: isSmAndUpContainer ? 1.5 : undefined,\n            },\n            grossAmount: {\n                label: hasMultipleCurrencies\n                    ? undefined\n                    : `${i18n.get(FIELDS_KEYS['grossAmount'])} ${availableCurrencies && availableCurrencies[0] ? `(${getCurrencyCode(availableCurrencies[0])})` : ''}`,\n                position: 'right',\n                flex: isSmAndUpContainer ? 1.5 : undefined,\n                visible: isMdAndUpContainer,\n            },\n            currency: { visible: isMdAndUpContainer && hasMultipleCurrencies },\n            transactionType: { visible: isMdAndUpContainer },\n            paymentMethod: { visible: isSmAndUpContainer },\n        },\n    });\n\n    const EMPTY_TABLE_MESSAGE = {\n        title: 'transactions.overview.errors.listEmpty',\n        message: ['common.errors.updateFilters'],\n    } satisfies { title: TranslationKey; message: TranslationKey | TranslationKey[] };\n\n    const onHover = useCallback(\n        (index?: number) => {\n            setHoveredRow(index ?? undefined);\n        },\n        [setHoveredRow]\n    );\n\n    const errorDisplay = useMemo(\n        () => () => (\n            <DataOverviewError error={error} onContactSupport={onContactSupport} errorMessage={'transactions.overview.errors.listUnavailable'} />\n        ),\n        [error, onContactSupport]\n    );\n\n    return (\n        <div className={BASE_CLASS}>\n            <DataGrid\n                autoFitColumns={isXsAndDownContainer}\n                errorDisplay={errorDisplay}\n                error={error}\n                columns={columns}\n                data={transactions}\n                loading={loading}\n                outline={false}\n                onRowClick={{ callback: onRowClick }}\n                onRowHover={onHover}\n                emptyTableMessage={EMPTY_TABLE_MESSAGE}\n                customCells={{\n                    // Remove status column temporarily\n                    // status: ({ item }) => {\n                    //     return (\n                    //         <Tag\n                    //             label={getTransactionStatus(i18n, item.status)}\n                    //             variant={getTagVariantForTransaction(item)}\n                    //         />\n                    //     );\n                    // },\n                    transactionType: ({ item, rowIndex }) => {\n                        const category = getTransactionCategory(i18n, item.category);\n                        if (category) {\n                            const tooltip = getTransactionCategoryDescription(i18n, item.category);\n                            const renderCategory = () => (\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                    {category}\n                                </Typography>\n                            );\n                            return tooltip ? (\n                                <Tooltip content={tooltip} isUnderlineVisible={rowIndex === hoveredRow}>\n                                    <span>{renderCategory()}</span>\n                                </Tooltip>\n                            ) : (\n                                renderCategory()\n                            );\n                        }\n                        return null;\n                    },\n                    currency: ({ item }) => {\n                        return <Tag>{item.amountBeforeDeductions.currency}</Tag>;\n                    },\n                    netAmount: ({ value: netAmount }) => {\n                        const { value, currency } = netAmount;\n                        const amount = i18n.amount(value, currency, { hideCurrency: !hasMultipleCurrencies });\n                        return (\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} className={AMOUNT_CLASS}>\n                                {amount}\n                            </Typography>\n                        );\n                    },\n                    grossAmount: ({ item }) => {\n                        const { value, currency } = item.amountBeforeDeductions;\n                        const amount = i18n.amount(value, currency, { hideCurrency: !hasMultipleCurrencies });\n                        return (\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} className={AMOUNT_CLASS}>\n                                {amount}\n                            </Typography>\n                        );\n                    },\n                    createdAt: ({ item, value }) => {\n                        if (isXsAndDownContainer) {\n                            return (\n                                <div className={DATE_AND_PAYMENT_METHOD_CLASS}>\n                                    <PaymentMethodCell paymentMethod={item.paymentMethod} bankAccount={item.bankAccount} />\n\n                                    <time dateTime={item.createdAt} className={DATE_METHOD_CLASS}>\n                                        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                            {dateFormat(item.createdAt, DATE_FORMAT_TRANSACTIONS_MOBILE)}\n                                        </Typography>\n                                    </time>\n                                </div>\n                            );\n                        }\n                        return (\n                            <time dateTime={value}>\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                    {dateFormat(value, DATE_FORMAT_TRANSACTIONS)}\n                                </Typography>\n                            </time>\n                        );\n                    },\n                    paymentMethod: ({ item }) => <PaymentMethodCell paymentMethod={item.paymentMethod} bankAccount={item.bankAccount} />,\n                }}\n            >\n                {showPagination && (\n                    <DataGrid.Footer>\n                        <Pagination\n                            {...paginationProps}\n                            ariaLabelKey=\"transactions.overview.pagination.label\"\n                            limitSelectAriaLabelKey=\"transactions.overview.pagination.controls.limitSelect.label\"\n                        />\n                    </DataGrid.Footer>\n                )}\n            </DataGrid>\n        </div>\n    );\n};\n","import { IBalanceAccountBase, ILineItem, IRefundReason, ITransactionWithDetails } from '../../../types';\nimport { CustomDataRetrieved, DetailsDataCustomizationObject, ExternalUIComponentProps } from '../../types';\n\nexport type TransactionDetailsCustomization = DetailsDataCustomizationObject<TransactionDetailsFields, TransactionDetails, CustomDataRetrieved>;\n\nexport interface DetailsWithExtraData<T extends DetailsDataCustomizationObject<any, any, any>> {\n    dataCustomization?: {\n        details?: T;\n    };\n}\n\nexport type TransactionDetails = ITransactionWithDetails & {\n    balanceAccount?: IBalanceAccountBase;\n    lineItems?: ILineItem[];\n};\n\nexport type TransactionDetailsProps = ExternalUIComponentProps<{\n    dataCustomization?: { details?: TransactionDetailsCustomization };\n    id: string;\n}>;\n\nexport type TransactionDetailsFields =\n    | 'account'\n    | 'amount'\n    | 'amountBeforeDeductions'\n    | 'balanceAccount'\n    | 'balanceAccountId'\n    | 'bankAccount'\n    | 'category'\n    | 'createdAt'\n    | 'currency'\n    | 'deductedAmount'\n    | 'description'\n    | 'grossAmount'\n    | 'id'\n    | 'lineItems'\n    | 'merchantReference'\n    | 'netAmount'\n    | 'originalAmount'\n    | 'paymentMethod'\n    | 'paymentPspReference'\n    | 'pspReference'\n    | 'refundDetails'\n    | 'refundMetadata'\n    | 'refundPspReference'\n    | 'refundReason'\n    | 'status'\n    | 'transactionType';\n\nexport const enum ActiveView {\n    DETAILS = 'details',\n    REFUND = 'refund',\n}\n\nexport const enum DetailsTab {\n    DETAILS = 'details',\n    SUMMARY = 'summary',\n    TIMELINE = 'timeline',\n}\n\nexport const enum RefundedState {\n    INDETERMINATE,\n    PARTIAL,\n    FULL,\n}\n\nexport const enum RefundMode {\n    NON_REFUNDABLE = 'non_refundable',\n    PARTIAL_AMOUNT = 'partially_refundable_any_amount',\n    PARTIAL_LINE_ITEMS = 'partially_refundable_with_line_items_required',\n    FULL_AMOUNT = 'fully_refundable_only',\n}\n\nexport const enum RefundType {\n    PARTIAL = 'partial',\n    FULL = 'full',\n}\n\nexport type RefundReason = IRefundReason;\nexport type RefundResult = 'done' | 'error';\n\nexport type RefundLineItem = Readonly<{\n    id: ILineItem['id'];\n    amount: ILineItem['amountIncludingTax']['value'];\n    quantity: ILineItem['availableQuantity'];\n}>;\n\nexport type RefundLineItemUpdates = Readonly<{\n    id: ILineItem['id'];\n    amount?: ILineItem['amountIncludingTax']['value'];\n    quantity: ILineItem['availableQuantity'];\n}>[];\n","import { TRANSACTION_ANALYTICS_CATEGORY, TRANSACTION_ANALYTICS_SUBCATEGORY_DETAILS } from '../TransactionsOverview/constants';\nimport { TRANSACTION_FIELDS } from '../TransactionsOverview/components/TransactionsTable/TransactionsTable';\nimport { DetailsTab, TransactionDetails, TransactionDetailsFields } from './types';\nimport { TranslationKey } from '../../../translations';\nimport { IRefundStatus } from '../../../types';\n\nexport const TX_DATA_CLASS = 'adyen-pe-transaction-data';\nexport const TX_DATA_AMOUNT = `${TX_DATA_CLASS}__amount`;\nexport const TX_DATA_ACTION_BAR = `${TX_DATA_CLASS}__action-bar`;\nexport const TX_DATA_CONTAINER = `${TX_DATA_CLASS}__container`;\nexport const TX_DATA_HEAD_CONTAINER = `${TX_DATA_CLASS}__head-container`;\nexport const TX_DATA_INPUT = `${TX_DATA_CLASS}__input`;\nexport const TX_DATA_INPUT_CHARS = `${TX_DATA_INPUT}-chars-counter`;\nexport const TX_DATA_INPUT_CONTAINER = `${TX_DATA_INPUT}-container`;\nexport const TX_DATA_INPUT_CONTAINER_SHORT = `${TX_DATA_INPUT_CONTAINER}--short`;\nexport const TX_DATA_INPUT_CONTAINER_TEXT = `${TX_DATA_INPUT_CONTAINER}--text-input`;\nexport const TX_DATA_INPUT_CONTAINER_WITH_ERROR = `${TX_DATA_INPUT_CONTAINER}--with-error`;\nexport const TX_DATA_INPUT_HEAD = `${TX_DATA_INPUT}-head`;\nexport const TX_DATA_INPUT_TEXTAREA = `${TX_DATA_INPUT}--textarea`;\nexport const TX_DATA_LABEL = `${TX_DATA_CLASS}__label`;\nexport const TX_DATA_LIST = `${TX_DATA_CLASS}__list`;\nexport const TX_DATA_PAY_METHOD = `${TX_DATA_CLASS}__payment-method`;\nexport const TX_DATA_PAY_METHOD_DETAIL = `${TX_DATA_PAY_METHOD}-detail`;\nexport const TX_DATA_PAY_METHOD_LOGO = `${TX_DATA_PAY_METHOD}-logo`;\nexport const TX_DATA_PAY_METHOD_LOGO_CONTAINER = `${TX_DATA_PAY_METHOD_LOGO}-container`;\nexport const TX_DATA_TAGS = `${TX_DATA_CLASS}__tags`;\nexport const TX_STATUS_BOX = `${TX_DATA_CLASS}__status-box`;\nexport const TX_TIMELINE_LABEL = `${TX_DATA_CLASS}__timeline-label`;\nexport const TX_TIMELINE_VALUE = `${TX_DATA_CLASS}__timeline-value`;\nexport const TX_REFUND_RESPONSE = `${TX_DATA_CLASS}__refund-response`;\nexport const TX_REFUND_RESPONSE_ICON = `${TX_DATA_CLASS}__refund-response-icon`;\nexport const TX_REFUND_RESPONSE_SUCCESS_ICON = `${TX_REFUND_RESPONSE_ICON}--success`;\nexport const TX_REFUND_RESPONSE_ERROR_ICON = `${TX_REFUND_RESPONSE_ICON}--error`;\nexport const TX_REFUND_STATUSES_CONTAINER = `${TX_DATA_CLASS}__refund-statuses-container`;\n\nexport const TX_DETAILS_RESERVED_FIELDS_SET = new Set<TransactionDetailsFields>([\n    ...(['status', 'category', 'paymentMethod', 'bankAccount', 'balanceAccount', 'id', 'balanceAccountId'] satisfies (keyof TransactionDetails)[]),\n    ...TRANSACTION_FIELDS,\n    'account',\n    'deductedAmount',\n    'description',\n    'lineItems',\n    'merchantReference',\n    'originalAmount',\n    'paymentPspReference',\n    'pspReference',\n    'refundDetails',\n    'refundMetadata',\n    'refundPspReference',\n    'refundReason',\n] as const);\n\nexport const TX_DETAILS_FIELDS_REMAPS = {\n    balanceAccount: 'account',\n    balanceAccountId: (tx?: TransactionDetails) => {\n        const account = tx?.balanceAccount;\n        if (account && !account.description) return 'account';\n    },\n    description: (tx?: TransactionDetails) => {\n        if (tx?.balanceAccount?.description) return 'account';\n    },\n} as const;\n\nexport const TX_DETAILS_TABS: readonly Readonly<{ id: DetailsTab; label: TranslationKey; content: null }>[] = [\n    { id: DetailsTab.SUMMARY, label: 'transactions.details.views.summary', content: null } as const,\n    { id: DetailsTab.DETAILS, label: 'transactions.details.views.details', content: null } as const,\n    { id: DetailsTab.TIMELINE, label: 'transactions.details.views.timeline', content: null } as const,\n] as const;\n\nexport const REFUND_STATUSES = ['completed', 'in_progress', 'failed'] as const satisfies readonly IRefundStatus[];\nexport const REFUND_REASONS = ['requested_by_customer', 'issue_with_item_sold', 'fraudulent', 'duplicate', 'other'] as const;\n\nexport const REFUND_REASONS_KEYS = Object.freeze({\n    requested_by_customer: 'transactions.details.common.refundReasons.requestedByCustomer',\n    issue_with_item_sold: 'transactions.details.common.refundReasons.issueWithItemSold',\n    fraudulent: 'transactions.details.common.refundReasons.fraudulent',\n    duplicate: 'transactions.details.common.refundReasons.duplicate',\n    other: 'transactions.details.common.refundReasons.other',\n} as const) satisfies Readonly<Record<(typeof REFUND_REASONS)[number], TranslationKey>>;\n\nexport const REFUND_REFERENCE_CHAR_LIMIT = 80;\n\nexport const sharedTransactionDetailsEventProperties = {\n    category: TRANSACTION_ANALYTICS_CATEGORY,\n    subCategory: TRANSACTION_ANALYTICS_SUBCATEGORY_DETAILS,\n} as const;\n","import { createDynamicTranslationFactory, createKeyFactoryFromConfig, KeyFactoryFunction, TranslationFallbackFunction } from './factory';\nimport { IDisputeReasonCategory, IDisputeStatus, IDisputeType } from '../../../types/api/models/disputes';\nimport { DISPUTE_REASON_CATEGORIES, DISPUTE_STATUSES, DISPUTE_TYPES } from '../disputes/constants';\nimport { REFUND_REASONS_KEYS } from '../../external/TransactionDetails/constants';\nimport { RefundReason } from '../../external/TransactionDetails/types';\n\nconst originalValueFallback: TranslationFallbackFunction = (_, value) => value;\n\nconst payoutAdjustmentTypeKeyFactory = createKeyFactoryFromConfig({ prefix: 'payouts.details.breakdown.adjustments.types.' });\nexport const getPayoutAdjustmentType = createDynamicTranslationFactory(payoutAdjustmentTypeKeyFactory, originalValueFallback);\n\nconst payoutFundsCapturedTypeKeyFactory = createKeyFactoryFromConfig({ prefix: 'payouts.details.breakdown.fundsCaptured.types.' });\nexport const getPayoutFundsCapturedType = createDynamicTranslationFactory(payoutFundsCapturedTypeKeyFactory, originalValueFallback);\n\nconst reportTypeKeyFactory = createKeyFactoryFromConfig({ prefix: 'reports.common.types.' });\nexport const getReportType = createDynamicTranslationFactory(reportTypeKeyFactory, originalValueFallback);\n\nconst txAmountAdjustmentTypeKeyFactory = createKeyFactoryFromConfig({ prefix: 'transactions.details.summary.adjustments.types.' });\nexport const getTransactionAmountAdjustmentType = createDynamicTranslationFactory(txAmountAdjustmentTypeKeyFactory, originalValueFallback);\n\nconst txAmountAdjustmentInformationKeyFactory = createKeyFactoryFromConfig({\n    prefix: 'transactions.details.summary.adjustments.types.',\n    suffix: '.information',\n});\nexport const getTransactionAmountAdjustmentTypeInformation = createDynamicTranslationFactory(txAmountAdjustmentInformationKeyFactory);\n\nconst txCategoryKeyFactory = createKeyFactoryFromConfig({ prefix: 'transactions.common.types.' });\nexport const getTransactionCategory = createDynamicTranslationFactory(txCategoryKeyFactory, originalValueFallback);\n\nconst txCategoryDescriptionKeyFactory = createKeyFactoryFromConfig({ prefix: 'transactions.common.types.', suffix: '.description' });\nexport const getTransactionCategoryDescription = createDynamicTranslationFactory(txCategoryDescriptionKeyFactory);\n\nconst txStatusKeyFactory = createKeyFactoryFromConfig({ prefix: 'transactions.common.statuses.' });\nexport const getTransactionStatus = createDynamicTranslationFactory(txStatusKeyFactory, originalValueFallback);\n\nconst txTimelineStatusKeyFactory = createKeyFactoryFromConfig({ prefix: 'transactions.details.timeline.statuses.' });\nexport const getTransactionTimelineTxStatus = createDynamicTranslationFactory(txTimelineStatusKeyFactory, originalValueFallback);\n\nconst txTimelineTypeKeyFactory = createKeyFactoryFromConfig({ prefix: 'transactions.details.timeline.types.' });\nexport const getTransactionTimelineTxType = createDynamicTranslationFactory(txTimelineTypeKeyFactory, originalValueFallback);\n\nconst txRefundReasonKey = createKeyFactoryFromConfig({ prefix: 'transactions.details.common.refundReasons.' });\nconst txRefundReasonKeyFactory: KeyFactoryFunction = reason => reason && (REFUND_REASONS_KEYS[reason as RefundReason] ?? txRefundReasonKey(reason));\nexport const getTransactionRefundReason = createDynamicTranslationFactory(txRefundReasonKeyFactory, originalValueFallback);\n\nconst disputeReasonKey = createKeyFactoryFromConfig({ prefix: 'disputes.common.reasonCategories.' });\nconst disputeReasonKeyFactory: KeyFactoryFunction = reason =>\n    reason && (DISPUTE_REASON_CATEGORIES[reason as IDisputeReasonCategory] ?? disputeReasonKey(reason));\nexport const getDisputeReason = createDynamicTranslationFactory(disputeReasonKeyFactory, originalValueFallback);\n\nconst disputeStatusKey = createKeyFactoryFromConfig({ prefix: 'disputes.common.statuses.' });\nconst disputeStatusKeyFactory: KeyFactoryFunction = status => status && (DISPUTE_STATUSES[status as IDisputeStatus] ?? disputeStatusKey(status));\nexport const getDisputeStatus = createDynamicTranslationFactory(disputeStatusKeyFactory, originalValueFallback);\n\nconst disputeTypeKey = createKeyFactoryFromConfig({ prefix: 'disputes.management.details.types.' });\nconst disputeTypeKeyFactory: KeyFactoryFunction = type => type && (DISPUTE_TYPES[type as IDisputeType] ?? disputeTypeKey(type));\nexport const getDisputeType = createDynamicTranslationFactory(disputeTypeKeyFactory, originalValueFallback);\n","import classnames from 'classnames';\nimport cx from 'classnames';\nimport { useMemo } from 'preact/hooks';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport { TranslationKey } from '../../../../translations';\nimport { IPayoutDetails } from '../../../../types';\nimport { EMPTY_OBJECT } from '../../../../utils';\nimport Accordion from '../../../internal/Accordion/Accordion';\nimport Card from '../../../internal/Card/Card';\nimport { DATE_FORMAT_PAYOUT_DETAILS } from '../../../../constants';\nimport StructuredList from '../../../internal/StructuredList';\nimport { ListValue, StructuredListProps } from '../../../internal/StructuredList/types';\nimport { TypographyElement, TypographyVariant } from '../../../internal/Typography/types';\nimport Typography from '../../../internal/Typography/Typography';\nimport DataOverviewDetailsSkeleton from '../../../internal/DataOverviewDetails/DataOverviewDetailsSkeleton';\nimport useTimezoneAwareDateFormatting from '../../../../hooks/useTimezoneAwareDateFormatting';\nimport './PayoutData.scss';\nimport {\n    PD_BASE_CLASS,\n    PD_BUTTON_ACTIONS,\n    PD_CARD_CLASS,\n    PD_CARD_TITLE_CLASS,\n    PD_CONTENT_CLASS,\n    PD_EXTRA_DETAILS_CLASS,\n    PD_EXTRA_DETAILS_ICON,\n    PD_EXTRA_DETAILS_LABEL,\n    PD_SECTION_AMOUNT_CLASS,\n    PD_SECTION_CLASS,\n    PD_SECTION_GROSS_AMOUNT_CLASS,\n    PD_SECTION_NET_AMOUNT_CLASS,\n    PD_TITLE_BA_CLASS,\n    PD_TITLE_CLASS,\n    PD_TITLE_CLASS_WITH_EXTRA_DETAILS,\n    PD_TITLE_CONTAINER_CLASS,\n    PD_UNPAID_AMOUNT,\n} from './constants';\nimport { Tag } from '../../../internal/Tag/Tag';\nimport { TagVariant } from '../../../internal/Tag/types';\nimport Link from '../../../internal/Link/Link';\nimport Icon from '../../../internal/DataGrid/components/Icon';\nimport { isCustomDataObject } from '../../../internal/DataGrid/components/TableCells';\nimport { ButtonVariant } from '../../../internal/Button/types';\nimport { ButtonActionsLayoutBasic } from '../../../internal/Button/ButtonActions/types';\nimport ButtonActions from '../../../internal/Button/ButtonActions/ButtonActions';\nimport { PayoutDetailsCustomization } from '../types';\nimport { getPayoutAdjustmentType, getPayoutFundsCapturedType } from '../../../utils/translation/getters';\nimport { TranslationFactoryFunction } from '../../../utils/translation/factory';\n\nexport const PayoutData = ({\n    balanceAccountId,\n    balanceAccountDescription,\n    payout: payoutData,\n    extraFields,\n}: {\n    payout?: IPayoutDetails;\n    isFetching?: boolean;\n    balanceAccountId: string;\n    balanceAccountDescription?: string;\n    extraFields?: Record<string, any> | undefined;\n    dataCustomization?: { details?: PayoutDetailsCustomization };\n}) => {\n    const { payout } = payoutData ?? (EMPTY_OBJECT as NonNullable<typeof payoutData>);\n    const { dateFormat } = useTimezoneAwareDateFormatting('UTC');\n    const { i18n } = useCoreContext();\n\n    const adjustments = useMemo(() => {\n        const data = payoutData?.amountBreakdowns?.adjustmentBreakdown?.reduce(\n            (accumulator, currentValue) => {\n                if (currentValue.category && currentValue.amount?.value) {\n                    const { currency, value: amount } = currentValue.amount;\n                    const targetObj = accumulator[amount && amount < 0 ? 'subtractions' : 'additions'];\n\n                    targetObj.push({\n                        key: currentValue.category as TranslationKey,\n                        value: i18n.amount(amount, currency, { hideCurrency: true }),\n                    });\n                }\n                return accumulator;\n            },\n            { subtractions: [] as { key: TranslationKey; value: ListValue }[], additions: [] as { key: TranslationKey; value: ListValue }[] }\n        );\n        data?.subtractions.sort((a, b) => a.key.localeCompare(b.key));\n        data?.additions.sort((a, b) => a.key.localeCompare(b.key));\n        return data;\n    }, [i18n, payoutData]);\n\n    const fundsCaptured = useMemo(() => {\n        const data = payoutData?.amountBreakdowns?.fundsCapturedBreakdown?.reduce(\n            (items, breakdown) => {\n                if (breakdown?.amount?.value === 0) return items;\n                if (breakdown?.amount?.value && breakdown.category) {\n                    items.push({\n                        key: breakdown.category as TranslationKey,\n                        value: i18n.amount(breakdown?.amount?.value, breakdown?.amount?.currency, { hideCurrency: true }),\n                    });\n                }\n                return items;\n            },\n            [] as { key: TranslationKey; value: ListValue }[]\n        );\n        data?.sort((a, b) => {\n            const captureType = 'capture' as TranslationKey;\n            if (a.key === captureType) return -1;\n            if (b.key === captureType) return 1;\n            return a.key.localeCompare(b.key);\n        });\n        return data;\n    }, [payoutData, i18n]);\n\n    const { payoutAdjustmentTypeLabelRenderer, payoutFundsCapturedTypeLabelRenderer } = useMemo(() => {\n        const payoutBreakdownTypeLabelRenderer =\n            (translationFn: TranslationFactoryFunction): StructuredListProps['renderLabel'] =>\n            (_, type) => {\n                return (\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                        {translationFn(i18n, type)}\n                    </Typography>\n                );\n            };\n\n        return {\n            payoutAdjustmentTypeLabelRenderer: payoutBreakdownTypeLabelRenderer(getPayoutAdjustmentType),\n            payoutFundsCapturedTypeLabelRenderer: payoutBreakdownTypeLabelRenderer(getPayoutFundsCapturedType),\n        } as const;\n    }, [i18n]);\n\n    const extraDetails: StructuredListProps['items'] =\n        Object.entries(extraFields || {})\n            .filter(([, field]) => field.type !== 'button' && field.visibility !== 'hidden')\n            .map(([key, value]) => ({\n                key: key as TranslationKey,\n                value: isCustomDataObject(value) ? value.value : value,\n                type: isCustomDataObject(value) ? value.type : 'text',\n                config: isCustomDataObject(value) ? value.config : undefined,\n            })) || [];\n\n    const buttonActions = useMemo(() => {\n        const extraActions = extraFields\n            ? Object.values(extraFields)\n                  .filter(field => field.type === 'button')\n                  .map(field => ({\n                      title: field.value,\n                      variant: ButtonVariant.SECONDARY,\n                      event: field.config?.action,\n                      classNames: field?.config?.className ? [field?.config?.className] : [],\n                  }))\n            : [];\n        const actions = [...extraActions].filter(Boolean);\n        return actions;\n    }, [extraFields]);\n\n    return (\n        <>\n            {!payout ? (\n                <DataOverviewDetailsSkeleton skeletonRowNumber={6} />\n            ) : (\n                <div className={PD_BASE_CLASS}>\n                    <div\n                        className={cx(PD_TITLE_CLASS, {\n                            [PD_TITLE_CLASS_WITH_EXTRA_DETAILS]: extraDetails.length,\n                        })}\n                    >\n                        <div className={PD_TITLE_CONTAINER_CLASS}>\n                            <Typography variant={TypographyVariant.SUBTITLE} stronger>\n                                {i18n.get('payouts.details.tags.netPayout')}\n                            </Typography>\n                            {payout.isSumOfSameDayPayouts && (\n                                <Tag variant={TagVariant.BLUE} label={i18n.get('payouts.details.tags.sameDaySum')}></Tag>\n                            )}\n                        </div>\n                        <Typography variant={TypographyVariant.TITLE} large>\n                            {`${i18n.amount(payout.payoutAmount.value, payout.payoutAmount.currency, {\n                                hideCurrency: true,\n                            })} ${payout.payoutAmount.currency}`}\n                        </Typography>\n                        {payout?.createdAt && (\n                            <time dateTime={payout.createdAt}>\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                    {dateFormat(payout.createdAt, DATE_FORMAT_PAYOUT_DETAILS)}\n                                </Typography>\n                            </time>\n                        )}\n                        <div className={PD_SECTION_CLASS}>\n                            {balanceAccountDescription && (\n                                <Typography variant={TypographyVariant.CAPTION} stronger wide>\n                                    {`${balanceAccountDescription}`}\n                                </Typography>\n                            )}\n                            <Typography variant={TypographyVariant.CAPTION} className={PD_TITLE_BA_CLASS}>{`${balanceAccountId}`}</Typography>\n                        </div>\n                    </div>\n                    {extraDetails && extraDetails.length > 0 ? (\n                        <div>\n                            <StructuredList\n                                classNames={PD_EXTRA_DETAILS_CLASS}\n                                items={extraDetails}\n                                align=\"start\"\n                                layout=\"4-8\"\n                                renderLabel={label => <div className={PD_EXTRA_DETAILS_LABEL}>{label}</div>}\n                                renderValue={(val, key, type, config) => {\n                                    if (type === 'link' && config) {\n                                        return (\n                                            <Link classNames={[cx(config?.className)]} href={config.href} target={config.target || '_blank'}>\n                                                {val}\n                                            </Link>\n                                        );\n                                    }\n                                    if (type === 'icon' && config) {\n                                        const icon = { url: config.src, alt: config.alt || val };\n                                        return (\n                                            <div className={cx(PD_EXTRA_DETAILS_ICON, config?.className)}>\n                                                <Icon {...icon} />\n                                                <Typography variant={TypographyVariant.BODY}>{val}</Typography>\n                                            </div>\n                                        );\n                                    }\n                                    return (\n                                        <Typography className={cx(config?.className)} variant={TypographyVariant.BODY}>\n                                            {val}\n                                        </Typography>\n                                    );\n                                }}\n                            />\n                        </div>\n                    ) : null}\n                    <div className={PD_CONTENT_CLASS}>\n                        <div className={PD_SECTION_CLASS}>\n                            {payout?.fundsCapturedAmount &&\n                                (fundsCaptured && Object.keys(fundsCaptured).length > 0 ? (\n                                    <Accordion\n                                        header={\n                                            <Typography variant={TypographyVariant.BODY}>\n                                                {i18n.get('payouts.details.breakdown.fields.fundsCaptured')}\n                                            </Typography>\n                                        }\n                                        headerInformation={\n                                            <Typography variant={TypographyVariant.BODY}>\n                                                {i18n.amount(payout.fundsCapturedAmount.value, payout.fundsCapturedAmount.currency)}\n                                            </Typography>\n                                        }\n                                    >\n                                        <div className={PD_SECTION_CLASS}>\n                                            {\n                                                <div className={PD_CARD_CLASS}>\n                                                    <Card noPadding>\n                                                        <StructuredList items={fundsCaptured} renderLabel={payoutFundsCapturedTypeLabelRenderer} />\n                                                    </Card>\n                                                </div>\n                                            }\n                                        </div>\n                                    </Accordion>\n                                ) : (\n                                    <div className={classnames(PD_SECTION_AMOUNT_CLASS, PD_SECTION_GROSS_AMOUNT_CLASS)}>\n                                        <Typography variant={TypographyVariant.BODY}>\n                                            {i18n.get('payouts.details.breakdown.fields.fundsCaptured')}\n                                        </Typography>\n                                        <Typography variant={TypographyVariant.BODY}>\n                                            {i18n.amount(payout.fundsCapturedAmount.value, payout.fundsCapturedAmount.currency)}\n                                        </Typography>\n                                    </div>\n                                ))}\n                        </div>\n                        <div className={PD_SECTION_CLASS}>\n                            {(adjustments?.subtractions && Object.keys(adjustments?.subtractions).length > 0) ||\n                            (adjustments?.additions && Object.keys(adjustments?.additions).length > 0) ? (\n                                <Accordion\n                                    header={\n                                        <Typography variant={TypographyVariant.BODY}>\n                                            {i18n.get('payouts.details.breakdown.fields.adjustments')}\n                                        </Typography>\n                                    }\n                                    headerInformation={\n                                        <Typography variant={TypographyVariant.BODY}>\n                                            {i18n.amount(payout.adjustmentAmount.value, payout.adjustmentAmount.currency)}\n                                        </Typography>\n                                    }\n                                >\n                                    {adjustments?.additions && Object.keys(adjustments?.additions).length > 0 && (\n                                        <div className={PD_CARD_CLASS}>\n                                            <Card\n                                                noPadding\n                                                renderHeader={\n                                                    <Typography className={PD_CARD_TITLE_CLASS} variant={TypographyVariant.CAPTION} stronger>\n                                                        {i18n.get('payouts.details.breakdown.fields.additions')}\n                                                    </Typography>\n                                                }\n                                            >\n                                                <StructuredList items={adjustments?.additions} renderLabel={payoutAdjustmentTypeLabelRenderer} />\n                                            </Card>\n                                        </div>\n                                    )}\n                                    {adjustments?.subtractions && Object.keys(adjustments?.subtractions).length > 0 && (\n                                        <div className={PD_CARD_CLASS}>\n                                            <Card\n                                                noPadding\n                                                renderHeader={\n                                                    <Typography className={PD_CARD_TITLE_CLASS} variant={TypographyVariant.CAPTION} stronger>\n                                                        {i18n.get('payouts.details.breakdown.fields.subtractions')}\n                                                    </Typography>\n                                                }\n                                            >\n                                                <StructuredList items={adjustments?.subtractions} renderLabel={payoutAdjustmentTypeLabelRenderer} />\n                                            </Card>\n                                        </div>\n                                    )}\n                                </Accordion>\n                            ) : (\n                                <div className={classnames(PD_SECTION_AMOUNT_CLASS, PD_SECTION_GROSS_AMOUNT_CLASS)}>\n                                    <Typography variant={TypographyVariant.BODY}>\n                                        {i18n.get('payouts.details.breakdown.fields.adjustments')}\n                                    </Typography>\n                                    <Typography variant={TypographyVariant.BODY}>\n                                        {i18n.amount(payout.adjustmentAmount.value, payout.adjustmentAmount.currency)}\n                                    </Typography>\n                                </div>\n                            )}\n                        </div>\n                        <div className={classnames(PD_SECTION_CLASS)}>\n                            <div className={classnames(PD_SECTION_AMOUNT_CLASS, PD_SECTION_NET_AMOUNT_CLASS)}>\n                                <Typography variant={TypographyVariant.BODY} stronger>\n                                    {i18n.get('payouts.details.breakdown.fields.netPayout')}\n                                </Typography>\n                                <Typography variant={TypographyVariant.BODY} stronger>\n                                    {i18n.amount(payout.payoutAmount.value, payout.payoutAmount.currency)}\n                                </Typography>\n                            </div>\n                        </div>\n                    </div>\n                    {payoutData?.payout?.unpaidAmount && (\n                        <div className={PD_UNPAID_AMOUNT}>\n                            <Typography variant={TypographyVariant.BODY}>{i18n.get('payouts.details.breakdown.fields.remainingAmount')}</Typography>\n                            <Typography variant={TypographyVariant.BODY}>\n                                {i18n.amount(payoutData.payout.unpaidAmount.value, payoutData.payout.unpaidAmount.currency)}\n                            </Typography>\n                        </div>\n                    )}\n                    {buttonActions.length ? (\n                        <div className={PD_BUTTON_ACTIONS}>\n                            <ButtonActions actions={buttonActions} layout={ButtonActionsLayoutBasic.BUTTONS_END} />\n                        </div>\n                    ) : null}\n                </div>\n            )}\n        </>\n    );\n};\n","import { IBalanceAccountBase } from '../types';\nimport { EMPTY_OBJECT, isFunction } from '../utils';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { useConfigContext } from '../core/ConfigContext';\nimport { useFetch } from './useFetch';\n\nconst cache = new WeakMap<(...args: any[]) => any, IBalanceAccountBase[]>();\n\nconst useBalanceAccounts = (balanceAccountId?: string, enabled?: boolean) => {\n    const { getBalanceAccounts } = useConfigContext().endpoints;\n    const [balanceAccountsFromCache, setBalanceAccountsFromCache] = useState(() => getBalanceAccounts && cache.get(getBalanceAccounts));\n\n    const canFetchBalanceAccounts = useMemo(\n        () => !balanceAccountsFromCache && isFunction(getBalanceAccounts) && enabled !== false,\n        [balanceAccountsFromCache, enabled, getBalanceAccounts]\n    );\n\n    const { data, isFetching, error } = useFetch({\n        queryFn: useCallback(async () => getBalanceAccounts?.(EMPTY_OBJECT), [getBalanceAccounts]),\n        fetchOptions: { enabled: canFetchBalanceAccounts, keepPrevData: true },\n    });\n\n    const allBalanceAccounts = balanceAccountsFromCache ?? data?.data;\n\n    const balanceAccounts = useMemo(\n        () => allBalanceAccounts?.filter(account => !balanceAccountId || balanceAccountId === account.id),\n        [allBalanceAccounts, balanceAccountId]\n    );\n\n    const isBalanceAccountIdWrong = useMemo(\n        () => !!balanceAccountId && !!allBalanceAccounts?.length && balanceAccounts?.length === 0,\n        [allBalanceAccounts, balanceAccountId, balanceAccounts]\n    );\n\n    useEffect(() => {\n        if (data?.data && getBalanceAccounts) {\n            const fetchedBalanceAccounts = data.data;\n            cache.set(getBalanceAccounts, fetchedBalanceAccounts);\n            setBalanceAccountsFromCache(fetchedBalanceAccounts);\n        }\n    }, [data, getBalanceAccounts]);\n\n    // TODO: Consider unifying error with isBalanceAccountIdWrong\n    return { balanceAccounts, isBalanceAccountIdWrong, isFetching, error } as const;\n};\n\nexport default useBalanceAccounts;\n","import { boolOrFalse } from '../../../utils';\nimport { useModalContext } from '../Modal/Modal';\nimport { useEffect, useState } from 'preact/hooks';\nimport type { TranslationKey } from '../../../translations';\nimport type { ExternalUIComponentProps } from '../../types';\nimport type { DetailsComponentProps } from './types';\n\ntype _BaseUseDataOverviewDetailsTitleProps = Pick<ExternalUIComponentProps<DetailsComponentProps>, 'hideTitle' | 'type'>;\n\nexport const TITLES_BY_TYPE = {\n    payout: 'payouts.details.title',\n} as const satisfies Record<_BaseUseDataOverviewDetailsTitleProps['type'], TranslationKey>;\n\nexport const useDataOverviewDetailsTitle = <T extends _BaseUseDataOverviewDetailsTitleProps>({ hideTitle: _hideTitle, type }: T) => {\n    const { withinModal } = useModalContext();\n    const [forcedHideTitle, setForcedHideTitle] = useState(false);\n\n    const hideTitle = forcedHideTitle || boolOrFalse(_hideTitle);\n    const titleKey = TITLES_BY_TYPE[type];\n\n    useEffect(() => {\n        // ensure title is always hidden within overview details modal\n        setForcedHideTitle(withinModal);\n    }, [withinModal]);\n\n    return { hideTitle, titleKey } as const;\n};\n\nexport default useDataOverviewDetailsTitle;\n","export const BASE_CLASS = 'adyen-pe-payouts-table';\nexport const NET_PAYOUT_CLASS = `${BASE_CLASS}__net-payout`;\n","import cx from 'classnames';\nimport { FC } from 'preact/compat';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { getCurrencyCode } from '../../../../../core/Localization/amount/amount-util';\nimport { TranslationKey } from '../../../../../translations';\nimport { IPayout } from '../../../../../types';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport DataGrid from '../../../../internal/DataGrid';\nimport { DATE_FORMAT_PAYOUTS, DATE_FORMAT_PAYOUTS_MOBILE } from '../../../../../constants';\nimport DataOverviewError from '../../../../internal/DataOverviewError/DataOverviewError';\nimport Pagination from '../../../../internal/Pagination';\nimport { PaginationProps, WithPaginationLimitSelection } from '../../../../internal/Pagination/types';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { BASE_CLASS, NET_PAYOUT_CLASS } from './constants';\nimport './PayoutsTable.scss';\nimport { useTableColumns } from '../../../../../hooks/useTableColumns';\nimport { CustomColumn } from '../../../../types';\nimport { StringWithAutocompleteOptions } from '../../../../../utils/types';\n\nconst AMOUNT_FIELDS = ['fundsCapturedAmount', 'adjustmentAmount', 'payoutAmount'] as const;\nexport const PAYOUT_TABLE_FIELDS = ['createdAt', ...AMOUNT_FIELDS] as const;\nexport type PayoutsTableFields = (typeof PAYOUT_TABLE_FIELDS)[number];\n\nconst FIELDS_KEYS = {\n    adjustmentAmount: 'payouts.overview.list.fields.adjustmentAmount',\n    createdAt: 'payouts.overview.list.fields.createdAt',\n    fundsCapturedAmount: 'payouts.overview.list.fields.fundsCapturedAmount',\n    payoutAmount: 'payouts.overview.list.fields.payoutAmount',\n} as const satisfies Partial<Record<PayoutsTableFields, TranslationKey>>;\n\nconst _isAmountFieldKey = (key: (typeof PAYOUT_TABLE_FIELDS)[number]): key is (typeof AMOUNT_FIELDS)[number] => {\n    return AMOUNT_FIELDS.includes(key as (typeof AMOUNT_FIELDS)[number]);\n};\n\nexport interface PayoutsTableProps extends WithPaginationLimitSelection<PaginationProps> {\n    loading: boolean;\n    error?: AdyenPlatformExperienceError;\n    onContactSupport?: () => void;\n    onRowClick: (value: any) => void;\n    showDetails?: boolean;\n    showPagination: boolean;\n    data: IPayout[] | undefined;\n    customColumns?: CustomColumn<StringWithAutocompleteOptions<PayoutsTableFields>>[];\n}\n\nexport const PayoutsTable: FC<PayoutsTableProps> = ({\n    error,\n    loading,\n    onContactSupport,\n    onRowClick,\n    showDetails,\n    showPagination,\n    data,\n    customColumns,\n    ...paginationProps\n}) => {\n    const { i18n } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting('UTC');\n    const { refreshing } = useConfigContext();\n    const isLoading = useMemo(() => loading || refreshing, [loading, refreshing]);\n    const isSmAndUpContainer = useResponsiveContainer(containerQueries.up.sm);\n\n    const getAmountFieldConfig = useCallback(\n        (key: (typeof PAYOUT_TABLE_FIELDS)[number]) => {\n            const label = i18n.get(FIELDS_KEYS[key]);\n            if (_isAmountFieldKey(key)) {\n                return {\n                    label: data?.[0]?.[key]?.currency ? `${label} (${getCurrencyCode(data?.[0]?.[key]?.currency)})` : label,\n                    position: 'right',\n                } as const;\n            }\n        },\n        [data, i18n]\n    );\n\n    const columns = useTableColumns({\n        customColumns,\n        fields: PAYOUT_TABLE_FIELDS,\n        fieldsKeys: FIELDS_KEYS,\n        columnConfig: useMemo(\n            () => ({\n                fundsCapturedAmount: { ...getAmountFieldConfig('fundsCapturedAmount'), visible: isSmAndUpContainer },\n                adjustmentAmount: { ...getAmountFieldConfig('adjustmentAmount'), visible: isSmAndUpContainer },\n                payoutAmount: getAmountFieldConfig('payoutAmount'),\n            }),\n            [getAmountFieldConfig, isSmAndUpContainer]\n        ),\n    });\n\n    const EMPTY_TABLE_MESSAGE = {\n        title: 'payouts.overview.errors.listEmpty',\n        message: ['common.errors.updateFilters'],\n    } satisfies { title: TranslationKey; message: TranslationKey | TranslationKey[] };\n\n    const errorDisplay = useMemo(\n        () => () => <DataOverviewError error={error} errorMessage={'payouts.overview.errors.listUnavailable'} onContactSupport={onContactSupport} />,\n        [error, onContactSupport]\n    );\n\n    return (\n        <div className={BASE_CLASS}>\n            <DataGrid\n                errorDisplay={errorDisplay}\n                error={error}\n                columns={columns}\n                data={data}\n                loading={isLoading}\n                outline={false}\n                onRowClick={{ callback: onRowClick }}\n                emptyTableMessage={EMPTY_TABLE_MESSAGE}\n                customCells={{\n                    createdAt: ({ value }) => {\n                        if (!value) return null;\n                        if (!isSmAndUpContainer) {\n                            return <time dateTime={value}>{dateFormat(value, DATE_FORMAT_PAYOUTS_MOBILE)}</time>;\n                        }\n                        return (\n                            value && (\n                                <time dateTime={value}>\n                                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                        {dateFormat(value, DATE_FORMAT_PAYOUTS)}\n                                    </Typography>\n                                </time>\n                            )\n                        );\n                    },\n                    fundsCapturedAmount: ({ value }) => {\n                        return (\n                            value && (\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                    {i18n.amount(value.value, value.currency, { hideCurrency: true })}\n                                </Typography>\n                            )\n                        );\n                    },\n                    adjustmentAmount: ({ value }) => {\n                        return (\n                            value && (\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                    {i18n.amount(value.value, value.currency, { hideCurrency: true })}\n                                </Typography>\n                            )\n                        );\n                    },\n                    payoutAmount: ({ value }) => {\n                        return (\n                            value && (\n                                <Typography\n                                    el={TypographyElement.SPAN}\n                                    variant={TypographyVariant.BODY}\n                                    className={cx({ [`${NET_PAYOUT_CLASS}--strong`]: !isSmAndUpContainer })}\n                                >\n                                    {i18n.amount(value.value, value.currency, { hideCurrency: isSmAndUpContainer })}\n                                </Typography>\n                            )\n                        );\n                    },\n                }}\n            >\n                {showPagination && (\n                    <DataGrid.Footer>\n                        <Pagination\n                            {...paginationProps}\n                            ariaLabelKey=\"payouts.overview.pagination.label\"\n                            limitSelectAriaLabelKey=\"payouts.overview.pagination.controls.limitSelect.label\"\n                        />\n                    </DataGrid.Footer>\n                )}\n            </DataGrid>\n        </div>\n    );\n};\n","import { useEffect, useMemo, useRef } from 'preact/hooks';\nimport useCoreContext from '../core/Context/useCoreContext';\nimport useUniqueId from './useUniqueId';\nimport { EMPTY_OBJECT } from '../utils';\n\nexport const enum ComponentHeadingType {\n    TITLE = 1,\n    SUBTITLE = 2,\n}\n\nexport interface UseComponentHeadingElementProps {\n    forwardedToRoot?: boolean;\n    headingType?: ComponentHeadingType;\n}\n\nexport const useComponentHeadingElement = <T extends HTMLElement>(\n    { headingType = ComponentHeadingType.TITLE, forwardedToRoot } = EMPTY_OBJECT as UseComponentHeadingElementProps\n) => {\n    const { componentRef } = useCoreContext();\n    const headingElementId = `heading-${useUniqueId()}`;\n    const headingElementRef = useRef<T | null>(null);\n\n    const ariaAttribute = useMemo(() => {\n        switch (headingType) {\n            case ComponentHeadingType.TITLE:\n                return 'aria-labeledby';\n            case ComponentHeadingType.SUBTITLE:\n                return 'aria-describedby';\n        }\n    }, [headingType]);\n\n    useEffect(() => {\n        if (forwardedToRoot === false) return;\n\n        const componentElement = componentRef.current;\n        const headingElementId = headingElementRef.current?.id;\n\n        if (headingElementId && componentElement) {\n            componentElement.setAttribute(ariaAttribute, headingElementId);\n\n            return () => {\n                const currentAttributeValue = componentElement.getAttribute(ariaAttribute);\n                if (currentAttributeValue !== headingElementId) return;\n                componentElement.removeAttribute(ariaAttribute);\n            };\n        }\n    }, [ariaAttribute, componentRef, forwardedToRoot, headingElementId]);\n\n    return { id: headingElementId, ref: headingElementRef } as const;\n};\n\nexport default useComponentHeadingElement;\n","export const DIVIDER_CLASS_NAMES = {\n    base: 'adyen-pe-divider',\n    vertical: 'adyen-pe-divider--vertical',\n};\n","import { FunctionalComponent } from 'preact';\nimport cx from 'classnames';\nimport './Divider.scss';\nimport { DividerProps } from './types';\nimport { DIVIDER_CLASS_NAMES } from './constants';\n\nexport const Divider: FunctionalComponent<DividerProps> = ({ className, variant = 'horizontal' }) => {\n    return <hr className={cx(DIVIDER_CLASS_NAMES.base, variant === 'vertical' && DIVIDER_CLASS_NAMES.vertical, className)} />;\n};\n","import { HTMLAttributes } from 'preact';\nimport { FC } from 'preact/compat';\nimport cx from 'classnames';\nimport Typography from '../Typography/Typography';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport useComponentHeadingElement, { ComponentHeadingType } from '../../../hooks/useComponentHeadingElement';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\nimport type { TranslationKey } from '../../../translations';\nimport type { UIElementProps } from '../../types';\nimport { Divider } from '../Divider/Divider';\nimport './Header.scss';\n\nexport const BASE_CLASS = 'adyen-pe-header';\n\nexport interface HeaderProps extends HTMLAttributes<HTMLHeadingElement> {\n    baseClassName?: string;\n    forwardedToRoot?: boolean;\n    hasDivider?: boolean;\n    hideTitle?: UIElementProps['hideTitle'];\n    subtitleKey?: TranslationKey;\n    titleKey?: TranslationKey;\n    subtitleConfig?: {\n        variant?: TypographyVariant;\n        typographyEl?: TypographyElement;\n        classNames?: string;\n    };\n}\n\nexport const Header: FC<HeaderProps> = ({\n    baseClassName = BASE_CLASS,\n    forwardedToRoot = true,\n    children,\n    className,\n    hasDivider,\n    hideTitle,\n    titleKey,\n    subtitleKey,\n    subtitleConfig,\n    ...props\n}) => {\n    const { i18n } = useCoreContext();\n\n    const { id: titleElemId, ref: titleElemRef } = useComponentHeadingElement<HTMLDivElement>({\n        headingType: ComponentHeadingType.TITLE,\n        forwardedToRoot,\n    });\n\n    const { id: subtitleElemId, ref: subtitleElemRef } = useComponentHeadingElement<HTMLDivElement>({\n        headingType: ComponentHeadingType.SUBTITLE,\n        forwardedToRoot,\n    });\n\n    return (\n        <div {...props} className={cx([baseClassName, className])}>\n            <div className={`${baseClassName}__headings`}>\n                {!hideTitle && titleKey && (\n                    <div ref={titleElemRef} id={titleElemId} className={`${baseClassName}__title`}>\n                        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.TITLE} medium>\n                            {i18n.get(titleKey)}\n                        </Typography>\n                    </div>\n                )}\n                {subtitleKey && (\n                    <div ref={subtitleElemRef} id={subtitleElemId} className={cx(`${baseClassName}__subtitle`, subtitleConfig?.classNames)}>\n                        <Typography\n                            el={subtitleConfig?.typographyEl ?? TypographyElement.SPAN}\n                            variant={subtitleConfig?.variant ?? TypographyVariant.BODY}\n                        >\n                            {i18n.get(subtitleKey)}\n                        </Typography>\n                    </div>\n                )}\n                {hasDivider && <Divider className={`${baseClassName}__divider`} />}\n            </div>\n            {children && <div className={`${baseClassName}__controls`}>{children}</div>}\n        </div>\n    );\n};\n","import './DataOverviewDetails.scss';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../core/ConfigContext';\nimport { useModalContext } from '../Modal/Modal';\nimport AdyenPlatformExperienceError from '../../../core/Errors/AdyenPlatformExperienceError';\nimport { useFetch } from '../../../hooks/useFetch';\nimport { IPayoutDetails } from '../../../types';\nimport { EMPTY_OBJECT } from '../../../utils';\nimport { PayoutData } from '../../external/PayoutDetails/components/PayoutData';\nimport useBalanceAccounts from '../../../hooks/useBalanceAccounts';\nimport { CustomColumn, ExternalUIComponentProps } from '../../types';\nimport { getErrorMessage } from '../../utils/getErrorMessage';\nimport { ErrorMessageDisplay } from '../ErrorMessageDisplay/ErrorMessageDisplay';\nimport { DetailsComponentProps } from './types';\nimport useDataOverviewDetailsTitle from './useDataOverviewDetailsTitle';\nimport { TX_DETAILS_RESERVED_FIELDS_SET } from '../../external/TransactionDetails/constants';\nimport { PAYOUT_TABLE_FIELDS } from '../../external/PayoutsOverview/components/PayoutsTable/PayoutsTable';\nimport { PayoutDetailsCustomization } from '../../external/PayoutDetails/types';\nimport { TranslationKey } from '../../../translations';\nimport { Header } from '../Header';\n\nconst ENDPOINTS_BY_TYPE = {\n    payout: 'getPayout',\n} as const;\n\nexport default function DataOverviewDetails(props: ExternalUIComponentProps<DetailsComponentProps>) {\n    const getDetail = useConfigContext().endpoints[ENDPOINTS_BY_TYPE[props.type]];\n    const { hideTitle, titleKey } = useDataOverviewDetailsTitle(props);\n    const { withinModal } = useModalContext();\n\n    const { data, error, isFetching } = useFetch(\n        useMemo(\n            () => ({\n                fetchOptions: { enabled: !!props.id && !!getDetail },\n                queryFn: async () => {\n                    switch (props.type) {\n                        case 'payout':\n                            const queryParam = { query: { balanceAccountId: props.id, createdAt: props.date } };\n                            return getDetail!(EMPTY_OBJECT, { ...queryParam });\n                    }\n                },\n            }),\n            [getDetail, props]\n        )\n    );\n\n    const balanceAccountId = props.id;\n    const hasBalanceAccountDetail = props?.balanceAccountDescription;\n    const { balanceAccounts } = useBalanceAccounts(balanceAccountId, !hasBalanceAccountDetail);\n\n    const errorProps = useMemo(() => {\n        if (error) {\n            let errorMessageKey!: TranslationKey;\n            switch (props.type) {\n                case 'payout':\n                    errorMessageKey = 'payouts.details.errors.unavailable';\n                    break;\n            }\n            return getErrorMessage(error as AdyenPlatformExperienceError, errorMessageKey, props.onContactSupport);\n        }\n    }, [error, props.onContactSupport, props.type]);\n\n    const detailsData = data;\n\n    const [extraFields, setExtraFields] = useState<Record<string, any>>();\n\n    const getExtraFields = useCallback(async () => {\n        if (data) {\n            const detailsData = await props.dataCustomization?.details?.onDataRetrieve?.(data);\n\n            setExtraFields(\n                props.dataCustomization?.details?.fields.reduce((acc, field) => {\n                    return TX_DETAILS_RESERVED_FIELDS_SET.has(field.key as any) ||\n                        PAYOUT_TABLE_FIELDS.includes(field.key as any) ||\n                        field?.visibility === 'hidden'\n                        ? acc\n                        : { ...acc, ...(detailsData?.[field.key] ? { [field.key]: detailsData[field.key] } : {}) };\n                }, {} as CustomColumn<any>)\n            );\n        }\n    }, [data, props]);\n\n    const dataCustomization = props.dataCustomization;\n\n    useEffect(() => {\n        void getExtraFields();\n    }, [getExtraFields]);\n\n    return (\n        <div className=\"adyen-pe-overview-details\">\n            <Header hideTitle={hideTitle} titleKey={titleKey} forwardedToRoot={!withinModal} />\n\n            {error && errorProps && (\n                <div className=\"adyen-pe-overview-details--error-container\">\n                    <ErrorMessageDisplay withImage {...errorProps} />\n                </div>\n            )}\n\n            {props.type === 'payout' && detailsData && (\n                <PayoutData\n                    balanceAccountId={balanceAccountId}\n                    payout={detailsData as IPayoutDetails}\n                    balanceAccountDescription={props?.balanceAccountDescription || balanceAccounts?.[0]?.description}\n                    isFetching={isFetching}\n                    extraFields={extraFields}\n                    dataCustomization={dataCustomization as { details?: PayoutDetailsCustomization }}\n                />\n            )}\n        </div>\n    );\n}\n","import { _UIComponentProps, ExternalComponentType } from '../../types';\nimport UIElement from '../UIElement/UIElement';\nimport DataOverviewDetails from '../../internal/DataOverviewDetails/DataOverviewDetails';\nimport { PayoutDetailsProps } from './types';\n\nexport class PayoutElement extends UIElement<PayoutDetailsProps> {\n    public static type: ExternalComponentType = 'payoutDetails';\n\n    constructor(props: _UIComponentProps<PayoutDetailsProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n    }\n\n    public componentToRender = () => {\n        return <DataOverviewDetails {...this.props} type=\"payout\" />;\n    };\n}\n\nexport default PayoutElement;\n","export const WITH_ERROR_CLASS = 'adyen-pe-data-overview-container--with-error';\n","import { WITH_ERROR_CLASS } from './constants';\nimport { ErrorMessageDisplay } from '../ErrorMessageDisplay/ErrorMessageDisplay';\nimport { useConfigContext } from '../../../core/ConfigContext';\nimport { TranslationKey } from '../../../translations';\nimport cx from 'classnames';\nimport { PropsWithChildren } from 'preact/compat';\nimport { getErrorMessage } from '../../utils/getErrorMessage';\nimport AdyenPlatformExperienceError from '../../../core/Errors/AdyenPlatformExperienceError';\n\ntype DataOverviewContainerProps = PropsWithChildren<{\n    balanceAccountsError?: Error;\n    className: string;\n    errorMessage: TranslationKey;\n    isBalanceAccountIdWrong: boolean;\n    onContactSupport?: () => void;\n}>;\n\nfunction DataOverviewContainer({\n    balanceAccountsError,\n    children,\n    className,\n    errorMessage,\n    isBalanceAccountIdWrong,\n    onContactSupport,\n}: DataOverviewContainerProps) {\n    const { hasError } = useConfigContext();\n\n    // TODO: Verify if WITH_ERROR_CLASS should appended only for session setup error\n    return (\n        <div className={cx(className, { [WITH_ERROR_CLASS]: hasError })}>\n            {hasError ? (\n                <ErrorMessageDisplay\n                    withImage\n                    centered\n                    title={'common.errors.somethingWentWrong'}\n                    message={[errorMessage, 'common.errors.retry']}\n                    refreshComponent={true}\n                />\n            ) : balanceAccountsError ? (\n                <ErrorMessageDisplay\n                    withImage\n                    centered\n                    {...getErrorMessage(balanceAccountsError as AdyenPlatformExperienceError, 'common.errors.accountUnavailable', onContactSupport)}\n                />\n            ) : isBalanceAccountIdWrong ? (\n                <ErrorMessageDisplay\n                    withImage\n                    centered\n                    title={'common.errors.somethingWentWrong'}\n                    message={[errorMessage, 'common.errors.accountInvalid']}\n                />\n            ) : (\n                <>{children}</>\n            )}\n        </div>\n    );\n}\n\nexport default DataOverviewContainer;\n","export const BASE_CLASS = 'adyen-pe-payouts-overview';\nexport const BASE_CLASS_DETAILS = 'adyen-pe-payouts-details';\nexport const EARLIEST_PAYOUT_SINCE_DATE = new Date('2024-04-16T00:00:00.000Z').toString();\n","import cx from 'classnames';\nimport Button from '../Button';\nimport Icon from '../Icon';\nimport { isFunction } from '../../../utils';\nimport { ButtonVariant } from '../Button/types';\nimport { PropsWithChildren } from 'preact/compat';\nimport { useEffect, useMemo, useState } from 'preact/hooks';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport { containerQueries, useResponsiveContainer } from '../../../hooks/useResponsiveContainer';\nimport type { FilterBarMobileSwitchProps, FilterBarProps } from './types';\nimport './FilterBar.scss';\nimport useUniqueId from '../../../hooks/useUniqueId';\n\nconst MOBILE_SWITCH_CLASS = 'adyen-pe-filter-bar-mobile-switch';\n\nexport const useFilterBarState = () => {\n    const isMobileContainer = useResponsiveContainer(containerQueries.down.xs);\n    const [showingFilters, setShowingFilters] = useState(!isMobileContainer);\n    const filterBarElementId = `filters-${useUniqueId()}`;\n\n    useEffect(() => {\n        setShowingFilters(!isMobileContainer);\n    }, [isMobileContainer]);\n\n    return { filterBarElementId, isMobileContainer, showingFilters, setShowingFilters } as const;\n};\n\nexport const FilterBarMobileSwitch = ({\n    ariaLabelKey,\n    filterBarElementId,\n    isMobileContainer,\n    showingFilters,\n    setShowingFilters,\n}: FilterBarMobileSwitchProps) => {\n    const { i18n } = useCoreContext();\n    const ariaLabel = useMemo(() => i18n.get(ariaLabelKey ?? 'common.filters.mobile.label'), [i18n]);\n    const disabled = !isFunction(setShowingFilters);\n    const expanded = !disabled && !!showingFilters;\n\n    return isMobileContainer ? (\n        <div className={MOBILE_SWITCH_CLASS}>\n            <Button\n                iconButton\n                className={`${MOBILE_SWITCH_CLASS}__button`}\n                disabled={disabled}\n                aria-label={ariaLabel}\n                aria-expanded={expanded}\n                aria-controls={filterBarElementId}\n                onClick={() => setShowingFilters?.(!showingFilters)}\n                variant={ButtonVariant.SECONDARY}\n            >\n                <Icon name={showingFilters ? 'cross' : 'filter'} />\n            </Button>\n        </div>\n    ) : null;\n};\n\nexport const FilterBar = (props: PropsWithChildren<FilterBarProps>) => {\n    const { i18n } = useCoreContext();\n\n    return props.showingFilters ? (\n        <div\n            role=\"group\"\n            data-testId=\"filter-bar\"\n            aria-label={i18n.get(props.ariaLabelKey ?? 'common.filters.label')}\n            className={cx('adyen-pe-filter-bar', { 'adyen-pe-filter-bar--mobile': props.isMobileContainer })}\n            id={props.filterBarElementId}\n        >\n            {props.children}\n            {props.canResetFilters && !!props.resetFilters && (\n                <Button variant={ButtonVariant.TERTIARY} onClick={props.resetFilters}>\n                    {i18n.get('common.filters.controls.resetAll.label')}\n                </Button>\n            )}\n        </div>\n    ) : null;\n};\n\nexport default FilterBar;\n","import { useContext } from 'preact/hooks';\n\nimport { AnalyticsContext } from './AnalyticsContext';\n\nconst useAnalyticsContext = () => {\n    const context = useContext(AnalyticsContext);\n\n    if (!context) {\n        throw new Error('Cannot use AnalyticsContext without <AnalyticsProvider>');\n    }\n\n    return context;\n};\n\nexport default useAnalyticsContext;\n","import { useMemo } from 'preact/hooks';\nimport { FilterType, MixpanelProperty } from '../../core/Analytics/analytics/user-events';\nimport useAnalyticsContext from '../../core/Context/analytics/useAnalyticsContext';\n\nexport interface UseFilterAnalyticsEventProps {\n    category?: string;\n    subCategory?: string;\n    label?: FilterType;\n}\n\nconst useFilterAnalyticsEvent = ({ category, label, subCategory }: UseFilterAnalyticsEventProps) => {\n    const analytics = useAnalyticsContext();\n\n    const logEvent = useMemo(() => {\n        if (category && label) {\n            const defaultPayload = {\n                ...(subCategory && { subCategory }),\n                actionType: 'reset',\n                category,\n                label,\n            } as const;\n\n            return (actionType: 'reset' | 'update', value?: MixpanelProperty) => {\n                try {\n                    analytics.addModifyFilterEvent?.({\n                        ...defaultPayload,\n                        ...(actionType === 'update' ? { actionType, value } : {}),\n                    });\n                } catch (err) {\n                    console.error(err);\n                }\n            };\n        }\n    }, [analytics, category, label, subCategory]);\n\n    return { logEvent } as const;\n};\n\nexport default useFilterAnalyticsEvent;\n","import { capitalize, uniqueId } from '../utils';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport useCoreContext from '../core/Context/useCoreContext';\nimport useFilterAnalyticsEvent from './useAnalytics/useFilterAnalyticsEvent';\nimport type { FilterType } from '../core/Analytics/analytics/user-events';\nimport type { SelectItem } from '../components/internal/FormFields/Select/types';\nimport type { IBalanceAccountBase } from '../types';\n\nexport const ALL_BALANCE_ACCOUNTS_SELECTION_ID = uniqueId();\n\nexport interface UseBalanceAccountSelectionProps {\n    allowAllSelection?: boolean;\n    balanceAccounts?: IBalanceAccountBase[];\n    eventCategory?: string;\n    eventSubCategory?: string;\n    eventLabel?: FilterType;\n    onUpdateSelection?: (balanceAccount?: IBalanceAccountBase) => void;\n}\n\nconst useBalanceAccountSelection = ({\n    allowAllSelection = false,\n    balanceAccounts,\n    eventCategory,\n    eventSubCategory,\n    eventLabel = 'Balance account filter',\n    onUpdateSelection,\n}: UseBalanceAccountSelectionProps) => {\n    const { i18n } = useCoreContext();\n    const { logEvent } = useFilterAnalyticsEvent({ category: eventCategory, subCategory: eventSubCategory, label: eventLabel });\n    const [selectedBalanceAccountIndex, setSelectedBalanceAccountIndex] = useState(0);\n\n    const allBalanceAccounts = useMemo(\n        () =>\n            balanceAccounts && [\n                ...balanceAccounts,\n                ...(allowAllSelection && balanceAccounts.length > 1\n                    ? [\n                          {\n                              ...(balanceAccounts[0] ?? {}),\n                              id: ALL_BALANCE_ACCOUNTS_SELECTION_ID,\n                              description: undefined,\n                          } as IBalanceAccountBase,\n                      ]\n                    : []),\n            ],\n        [allowAllSelection, balanceAccounts]\n    );\n\n    const activeBalanceAccount = useMemo(() => allBalanceAccounts?.[selectedBalanceAccountIndex], [allBalanceAccounts, selectedBalanceAccountIndex]);\n\n    const activeBalanceAccountId = activeBalanceAccount?.id;\n    const cachedBalanceAccountIdRef = useRef<string | undefined>();\n\n    const balanceAccountSelectionOptions = useMemo(\n        () =>\n            Object.freeze(\n                allBalanceAccounts?.map(({ description, id }) => {\n                    const name =\n                        id === ALL_BALANCE_ACCOUNTS_SELECTION_ID ? i18n.get('common.filters.types.account.options.all') : capitalize(description)!;\n                    return { id, name } as SelectItem;\n                }) ?? []\n            ),\n        [allBalanceAccounts, i18n]\n    );\n\n    const onBalanceAccountSelection = useCallback(\n        ({ target }: { target?: { value: string } }) => {\n            const balanceAccountId = target?.value;\n            const index = allBalanceAccounts?.findIndex(({ id }) => id === balanceAccountId);\n            if (index !== undefined && index >= 0) setSelectedBalanceAccountIndex(index);\n        },\n        [allBalanceAccounts]\n    );\n\n    const resetBalanceAccountSelection = useCallback(() => setSelectedBalanceAccountIndex(0), []);\n\n    useEffect(() => {\n        const cachedBalanceAccountId = cachedBalanceAccountIdRef.current;\n\n        if (cachedBalanceAccountId !== activeBalanceAccountId) {\n            // Update the cached balance account id with the active one\n            cachedBalanceAccountIdRef.current = activeBalanceAccountId;\n\n            if (cachedBalanceAccountId && activeBalanceAccountId) {\n                // Balance account changed\n                // Log filter modification event\n                logEvent?.('update', activeBalanceAccountId);\n            }\n\n            onUpdateSelection?.(activeBalanceAccount);\n        }\n    }, [activeBalanceAccount, activeBalanceAccountId, logEvent, onUpdateSelection]);\n\n    return { activeBalanceAccount, balanceAccountSelectionOptions, onBalanceAccountSelection, resetBalanceAccountSelection } as const;\n};\n\nexport default useBalanceAccountSelection;\n","import useBalanceAccountSelection, { ALL_BALANCE_ACCOUNTS_SELECTION_ID } from '../../../../../hooks/useBalanceAccountSelection';\nimport { memo } from 'preact/compat';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport Select from '../../Select';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { renderDefaultSingleSelectionCheckedness } from '../components/SelectListItem';\nimport { SelectItem, SelectProps } from '../types';\nimport './BalanceAccountSelector.scss';\n\ntype _GetRenderListItemType<T> = T extends Readonly<SelectItem[]> ? NonNullable<SelectProps<T[number]>['renderListItem']> : never;\n\nconst BA_SELECTOR_CLASS = 'adyen-pe-balance-account-selector';\nconst BA_SELECTOR_ACCOUNT_ID_CLASS = `${BA_SELECTOR_CLASS}__account-id` as const;\nconst BA_SELECTOR_ACCOUNT_LABEL_CLASS = `${BA_SELECTOR_CLASS}__account-label` as const;\n\nconst BalanceAccountSelector = memo(\n    ({\n        activeBalanceAccount,\n        balanceAccountSelectionOptions,\n        onBalanceAccountSelection,\n    }: Omit<ReturnType<typeof useBalanceAccountSelection>, 'resetBalanceAccountSelection'>) => {\n        const { i18n } = useCoreContext();\n        const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n        const balanceAccountLabel = useMemo(() => i18n.get('common.filters.types.account.label'), [i18n]);\n\n        const renderListItem = useCallback<_GetRenderListItemType<typeof balanceAccountSelectionOptions>>(\n            data => (\n                <>\n                    <div className={data.contentClassName}>\n                        {data.item.name && <span className={BA_SELECTOR_ACCOUNT_LABEL_CLASS}>{data.item.name}</span>}\n                        {data.item.id !== ALL_BALANCE_ACCOUNTS_SELECTION_ID && (\n                            <span className={data.item.name ? BA_SELECTOR_ACCOUNT_ID_CLASS : BA_SELECTOR_ACCOUNT_LABEL_CLASS}>{data.item.id}</span>\n                        )}\n                    </div>\n                    {renderDefaultSingleSelectionCheckedness(data)}\n                </>\n            ),\n            []\n        );\n\n        const canRenderSelector = balanceAccountSelectionOptions && balanceAccountSelectionOptions.length > 1;\n\n        return (\n            canRenderSelector && (\n                <Select\n                    popoverClassNameModifiers={[BA_SELECTOR_CLASS]}\n                    onChange={onBalanceAccountSelection}\n                    filterable={false}\n                    multiSelect={false}\n                    placeholder={activeBalanceAccount?.id || balanceAccountLabel}\n                    selected={activeBalanceAccount?.id}\n                    withoutCollapseIndicator={true}\n                    items={balanceAccountSelectionOptions}\n                    renderListItem={renderListItem}\n                    showOverlay={isSmContainer}\n                    aria-label={balanceAccountLabel}\n                />\n            )\n        );\n    }\n);\n\nexport default BalanceAccountSelector;\n","export const LIMIT_OPTIONS = Object.freeze([10, 20]);\nexport const MAX_PAGE_LIMIT = 100;\nexport const DEFAULT_PAGE_LIMIT = 10;\n","import { MAX_PAGE_LIMIT } from './constants';\n\nexport const getClampedPageLimit = (pageLimit?: number) => {\n    const limit = ~~(pageLimit as number);\n    return limit === pageLimit && limit > 0 ? Math.min(limit, MAX_PAGE_LIMIT) : Math.max(limit, 0);\n};\n","import { useMemo, useRef } from 'preact/hooks';\nimport { DEFAULT_PAGE_LIMIT } from '../constants';\nimport { getClampedPageLimit } from '../utils';\nimport { isNumber, mid } from '../../../../utils';\nimport { BasePaginatedRecordsInitOptions } from './types';\n\nexport const getNearestFromSortedUniqueNums = (nums: number[], target: number): number => {\n    const lastindex = nums.length - 1;\n\n    if (lastindex < 0) return target;\n    if (target <= (nums[0] as number)) return nums[0] as number;\n    if (target >= (nums[lastindex] as number)) return nums[lastindex] as number;\n\n    let index = 0,\n        lo = 0,\n        hi = lastindex;\n\n    while (true) {\n        const current = nums[(index = mid(lo, hi))] as number;\n        if (lo > hi || target === current) return current;\n        target > current ? (lo = index + 1) : (hi = index - 1);\n    }\n};\n\nconst usePageLimit = ({\n    preferredLimit = DEFAULT_PAGE_LIMIT,\n    preferredLimitOptions,\n}: Pick<BasePaginatedRecordsInitOptions<any, any, any, any>, 'preferredLimit' | 'preferredLimitOptions'>) => {\n    const cachedLimitOptions = useRef<readonly number[]>();\n    const cachedLimit = useRef<number>();\n\n    const options = useMemo(() => {\n        try {\n            const uniqueOptions = new Set<number>();\n\n            for (const option of preferredLimitOptions as number[]) {\n                const limit = getClampedPageLimit(option);\n                if (limit > 0) uniqueOptions.add(limit);\n            }\n\n            return Object.freeze([...uniqueOptions].sort((a, b) => a - b));\n        } catch {\n            /* ignore exception — no options available */\n        }\n    }, [preferredLimitOptions]);\n\n    const limit = useMemo(() => {\n        let limit = getClampedPageLimit(preferredLimit) || DEFAULT_PAGE_LIMIT;\n\n        parsing: try {\n            const uniqueOptions = new Set((cachedLimitOptions.current = options));\n\n            if (uniqueOptions.size === 0) {\n                cachedLimitOptions.current = undefined;\n                break parsing;\n            }\n\n            if (cachedLimit.current !== limit) {\n                selection: {\n                    if (uniqueOptions.size === uniqueOptions.add(limit).size) {\n                        break selection;\n                    } else uniqueOptions.delete(limit);\n\n                    if (uniqueOptions.size === uniqueOptions.add(cachedLimit.current as number).size) {\n                        if (isNumber(cachedLimit.current)) {\n                            limit = cachedLimit.current;\n                            break selection;\n                        }\n                    } else uniqueOptions.delete(cachedLimit.current as number);\n\n                    // limit = cachedLimitOptions.current?.[0] as number;\n                    limit = getNearestFromSortedUniqueNums(cachedLimitOptions.current as number[], limit);\n                }\n            }\n        } catch {\n            /* ignore exception here — there are no options */\n        }\n\n        return (cachedLimit.current = limit);\n    }, [options, preferredLimit]);\n\n    return { limit, limitOptions: options } as const;\n};\n\nexport default usePageLimit;\n","import { useEffect, useMemo, useRef } from 'preact/hooks';\n\nconst useMounted = <U extends (...args: any[]) => any>(beforeUnmount?: U) => {\n    const $mounted = useRef(false);\n    const unmount = useMemo(() => beforeUnmount, [beforeUnmount]);\n\n    useEffect(() => {\n        $mounted.current = true;\n\n        return () => {\n            $mounted.current = false;\n            unmount && unmount();\n        };\n    }, [unmount]);\n\n    return $mounted;\n};\n\nexport default useMounted;\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { RequestPageCallback, RequestPageCallbackParams, UsePaginationSetupConfig } from './types';\nimport useBooleanState from '../../../../hooks/useBooleanState';\nimport useMounted from '../../../../hooks/useMounted';\nimport { PaginationType, UsePagination } from '../types';\nimport { getClampedPageLimit } from '../utils';\nimport { clamp, noop } from '../../../../utils';\n\nconst usePagination = <Pagination extends PaginationType>(\n    paginationSetupConfig: UsePaginationSetupConfig<Pagination>,\n    requestPageCallback?: RequestPageCallback<Pagination>,\n    pageLimit?: number\n): UsePagination => {\n    const $controller = useRef<AbortController>();\n    const $maxVisitedPage = useRef<number>();\n    const $maxVisitedPageSize = useRef<number>();\n    const $page = useRef<number>();\n\n    const $mounted = useMounted(\n        useCallback(() => {\n            $controller.current?.abort();\n            $controller.current = undefined;\n        }, [])\n    );\n\n    const [page, setCurrentPage] = useState($page.current);\n    const [paginationChanged, updatePaginationChanged] = useBooleanState(false);\n    const limit = useMemo(() => getClampedPageLimit(pageLimit), [pageLimit]);\n\n    const { getPageCount, getPageParams, resetPageCount, updatePagination } = paginationSetupConfig;\n\n    const goto = useMemo(() => {\n        return requestPageCallback\n            ? (page: number) => {\n                  if (!(limit && Number.isInteger(page))) return;\n\n                  const PAGES = getPageCount();\n                  const requestedPage = page < 0 ? page + PAGES + 1 : page;\n                  const isValidPageRequest = requestedPage > 0 && (PAGES ? requestedPage <= PAGES : requestedPage === 1);\n\n                  if (!isValidPageRequest) return;\n\n                  $controller.current?.abort();\n                  $controller.current = new AbortController();\n\n                  if (!$mounted.current) return;\n\n                  if (($page.current = requestedPage) > 1 || PAGES) {\n                      setCurrentPage($page.current);\n                  }\n\n                  (async () => {\n                      const { signal } = $controller.current as AbortController;\n                      const params = { ...getPageParams(requestedPage, limit), limit, page: requestedPage } as RequestPageCallbackParams<Pagination>;\n\n                      try {\n                          const data = await requestPageCallback(params, signal);\n                          if (!data || !$mounted.current) return;\n\n                          const { size, ...paginationData } = data;\n\n                          updatePagination(requestedPage, limit, paginationData);\n                          $maxVisitedPage.current = $page.current && Math.max($page.current, $maxVisitedPage.current || -Infinity);\n\n                          if ($page.current && $page.current === $maxVisitedPage.current) $maxVisitedPageSize.current = size;\n                          if ($page.current === 1 && size > 0) setCurrentPage($page.current);\n\n                          $page.current = undefined;\n                          updatePaginationChanged(true);\n                      } catch (ex) {\n                          if (signal.aborted) return;\n                          console.error(ex); // throw ex;\n                      }\n                  })();\n              }\n            : (noop as UsePagination['goto']);\n    }, [limit, requestPageCallback]);\n\n    const next = useCallback(() => {\n        page && goto(Math.min(page + 1, getPageCount()));\n    }, [goto, page]);\n\n    const prev = useCallback(() => {\n        page && goto(Math.max(page - 1, 1));\n    }, [goto, page]);\n\n    const pages = useMemo(() => getPageCount() || page || undefined, [goto, paginationChanged]);\n    const hasNext = useMemo(() => !!(page && pages) && page < pages, [page, pages]);\n    const hasPrev = useMemo(() => !!page && page > 1, [page]);\n\n    const size = useMemo(\n        () => ($maxVisitedPage.current ? ($maxVisitedPage.current - 1) * limit + ($maxVisitedPageSize.current || 0) : 0),\n        [goto, paginationChanged]\n    );\n\n    const pageSize = useMemo(() => (page ? clamp(0, size - (page - 1) * limit, limit) : 0), [limit, size, page]);\n\n    const resetPagination = useCallback(() => {\n        resetPageCount();\n        $maxVisitedPage.current = $maxVisitedPageSize.current = $page.current = undefined;\n        $mounted.current && setCurrentPage($page.current);\n    }, [resetPageCount]);\n\n    useEffect(() => {\n        if ($mounted.current && paginationChanged) {\n            updatePaginationChanged(false);\n        }\n    }, [paginationChanged]);\n\n    return { goto, hasNext, hasPrev, limit, next, page, pages, pageSize, prev, resetPagination, size };\n};\n\nexport default usePagination;\n","import { useMemo } from 'preact/hooks';\nimport { isString, isUndefined } from '../../../../utils';\nimport { RequestPageCallback, RequestPageCallbackParams } from './types';\nimport { PaginationType, UsePagination, WithEitherPages, WithNextPage, WithPrevPage } from '../types';\nimport usePagination from './usePagination';\n\ntype HasEitherPages = WithEitherPages<PaginationType.CURSOR>;\ntype HasNextPage = WithNextPage<PaginationType.CURSOR>;\ntype HasPrevPage = WithPrevPage<PaginationType.CURSOR>;\ntype PageCursorType = RequestPageCallbackParams<PaginationType.CURSOR>['cursor'];\n\nexport const hasNextPage = (value: HasEitherPages): value is HasNextPage => isString((value as HasNextPage).next);\nexport const hasPrevPage = (value: HasEitherPages): value is HasPrevPage => isString((value as HasPrevPage).prev);\n\nconst useCursorPagination = (requestPageCallback?: RequestPageCallback<PaginationType.CURSOR>, pageLimit?: number): UsePagination => {\n    const paginationSetupConfig = useMemo(() => {\n        const cursors: PageCursorType[] = [];\n        const getPageCount = () => cursors.length;\n        const resetPageCount = () => {\n            cursors.length = 0;\n        };\n        const getPageParams = (page: number) => ({ cursor: cursors[page - 1] });\n\n        const updateCursor = (cursor: PageCursorType, page: number) => {\n            const currentCursor = cursors[page - 1];\n\n            if ((page === 1 || page === (cursors.length || 1) + 1) && isUndefined(currentCursor)) {\n                cursors[page - 1] = cursor ? decodeURIComponent(cursor) : undefined;\n            }\n        };\n\n        const updatePagination = (page: number, limit: number, paginationData: HasEitherPages) => {\n            if (hasNextPage(paginationData)) updateCursor(paginationData.next, page + 1);\n            if (hasPrevPage(paginationData)) updateCursor(paginationData.prev, page - 1);\n        };\n\n        return { getPageCount, getPageParams, resetPageCount, updatePagination };\n    }, []);\n\n    return usePagination<PaginationType.CURSOR>(paginationSetupConfig, requestPageCallback, pageLimit);\n};\n\nexport default useCursorPagination;\n","import { useMemo } from 'preact/hooks';\nimport { RequestPageCallback } from './types';\nimport { PaginationType, UsePagination, WithEitherPages, WithNextPage } from '../types';\nimport usePagination from './usePagination';\n\nexport type HasEitherPages = WithEitherPages<PaginationType.OFFSET>;\nexport type HasNextPage = WithNextPage<PaginationType.OFFSET>;\nexport const hasNextPage = (value: HasEitherPages): value is HasNextPage => (value as HasNextPage).next;\n\nconst useOffsetPagination = (requestPageCallback?: RequestPageCallback<PaginationType.OFFSET>, pageLimit?: number): UsePagination => {\n    const paginationSetupConfig = useMemo(() => {\n        let currentPage = 0;\n        const getPageCount = () => currentPage;\n        const resetPageCount = () => {\n            currentPage = 0;\n        };\n        const getPageParams = (page: number, limit: number) => ({ offset: (page - 1) * limit });\n\n        const updatePagination = (page: number, limit: number, paginationData: HasEitherPages) => {\n            if (hasNextPage(paginationData) && paginationData.next) {\n                currentPage = Math.max(currentPage, page + 1);\n            }\n        };\n\n        return { getPageCount, getPageParams, resetPageCount, updatePagination };\n    }, []);\n\n    return usePagination<PaginationType.OFFSET>(paginationSetupConfig, requestPageCallback, pageLimit);\n};\n\nexport default useOffsetPagination;\n","import { useEffect, useMemo, useReducer, useRef } from 'preact/hooks';\nimport { EMPTY_OBJECT } from '../../utils';\nimport useMounted from '../useMounted';\nimport { ReactiveStateRecord, ReactiveStateUpdateRequest, ReactiveStateUpdateRequestWithField, UseReactiveStateRecord } from './types';\n\nconst useReactiveState = <Value, Param extends string>(\n    params: ReactiveStateRecord<Value, Param> = EMPTY_OBJECT as ReactiveStateRecord<Value, Param>,\n    initialStateSameAsDefault = true\n): UseReactiveStateRecord<Value, Param> => {\n    const $hasDefaultState = useRef(initialStateSameAsDefault);\n    const $defaultState = useRef(Object.freeze({ ...params }) as ReactiveStateRecord<Value, Param>);\n    const $stateParams = useRef(new Set(Object.keys($defaultState.current) as Param[]));\n    const $changedParams = useRef(new Set<Param>());\n    const $mounted = useMounted();\n\n    const [resetState, updateState] = useMemo(() => {\n        const requestStateUpdate = (stateUpdateRequest: ReactiveStateUpdateRequest<Value, Param>) => {\n            if (!$mounted.current) return;\n            dispatch(stateUpdateRequest);\n        };\n\n        return [\n            () => requestStateUpdate('reset'),\n            (stateUpdateRequest: ReactiveStateUpdateRequestWithField<Value, Param>) => requestStateUpdate(stateUpdateRequest),\n        ];\n    }, [$mounted]);\n\n    const [state, dispatch] = useReducer((state, stateUpdateRequest: ReactiveStateUpdateRequest<Value, Param>) => {\n        if (stateUpdateRequest === 'reset') {\n            $changedParams.current.clear();\n            return $defaultState.current;\n        }\n\n        const stateUpdate = { ...stateUpdateRequest } as ReactiveStateRecord<Value, Param>;\n        const stateUpdateFlags = [0];\n\n        (Object.keys(stateUpdate) as Param[]).forEach((key, index) => {\n            if (!$stateParams.current.has(key)) return;\n\n            const currentValue = state[key] ?? undefined;\n            const defaultValue = $defaultState.current[key] ?? undefined;\n            const updateValue = stateUpdate[key] ?? defaultValue;\n\n            if (updateValue === currentValue) return;\n\n            const flagIndex = Math.floor(index / 32);\n            const updateFlag = 1 << index % 32;\n\n            stateUpdate[key] = updateValue;\n            stateUpdateFlags[flagIndex] = (stateUpdateFlags[flagIndex] ?? 0) | updateFlag;\n            $changedParams.current[updateValue === defaultValue ? 'delete' : 'add'](key);\n        });\n\n        const STATE = stateUpdateFlags.some(flag => flag)\n            ? $hasDefaultState.current && $changedParams.current.size === 0\n                ? $defaultState.current\n                : Object.freeze({ ...state, ...stateUpdate })\n            : state;\n\n        if (!$hasDefaultState.current) {\n            // Mark as having default state on the first \"non-reset\" state update request,\n            // whether it results in a state update or not.\n            $defaultState.current = STATE;\n            $hasDefaultState.current = true;\n        }\n\n        return STATE;\n    }, $defaultState.current);\n\n    const canResetState = useMemo(() => !!$changedParams.current.size, []);\n\n    useEffect(() => {\n        $defaultState.current = Object.freeze({ ...params }) as ReactiveStateRecord<Value, Param>;\n        $stateParams.current = new Set(Object.keys($defaultState.current) as Param[]);\n        $hasDefaultState.current = initialStateSameAsDefault;\n        resetState();\n    }, [initialStateSameAsDefault, params, resetState]);\n    return { canResetState, defaultState: $defaultState.current, resetState, state, updateState };\n};\n\nexport default useReactiveState;\n","import { EMPTY_OBJECT } from '../../../../utils';\nimport { UsePaginatedRecordsFilters } from './types';\nimport useReactiveState from '../../../../hooks/useReactiveState';\nimport { ReactiveStateRecord } from '../../../../hooks/useReactiveState/types';\n\nconst usePaginatedRecordsFilters = <FilterValue, FilterParam extends string>(\n    filterParams: ReactiveStateRecord<FilterValue, FilterParam> = EMPTY_OBJECT as ReactiveStateRecord<FilterValue, FilterParam>,\n    initialFiltersSameAsDefault?: boolean\n): UsePaginatedRecordsFilters<FilterValue, FilterParam> => {\n    const {\n        canResetState: canResetFilters,\n        defaultState: defaultFilters,\n        resetState: resetFilters,\n        state: filters,\n        updateState: updateFilters,\n    } = useReactiveState<FilterValue, FilterParam>(filterParams, initialFiltersSameAsDefault);\n\n    return { canResetFilters, defaultFilters, filters, resetFilters, updateFilters };\n};\n\nexport default usePaginatedRecordsFilters;\n","import { UseReactiveStateRecord } from '../../../hooks/useReactiveState/types';\nimport { TranslationKey } from '../../../translations';\n\nexport const enum PageNeighbour {\n    NEXT = 'next',\n    PREV = 'prev',\n}\n\nexport const enum PaginationType {\n    CURSOR = 'cursor',\n    OFFSET = 'offset',\n}\n\nexport type ForPaginationType<T extends PaginationType, CursorType, OffsetType> = T extends PaginationType.CURSOR\n    ? CursorType\n    : T extends PaginationType.OFFSET\n      ? OffsetType\n      : never;\n\ntype BothPageNeighbours<T = any> = { [P in PageNeighbour]: T };\ntype NextPageNeighbour<T = any> = Omit<BothPageNeighbours<T>, PageNeighbour.PREV>;\ntype PrevPageNeighbour<T = any> = Omit<BothPageNeighbours<T>, PageNeighbour.NEXT>;\n\ntype WithNextPageNeighbour<T = any> = BothPageNeighbours<T> | NextPageNeighbour<T>;\ntype WithPrevPageNeighbour<T = any> = BothPageNeighbours<T> | PrevPageNeighbour<T>;\ntype WithPageNeighbours<T = any> = WithNextPageNeighbour<T> | WithPrevPageNeighbour<T>;\n\ntype WhichPageNeighbour<T extends PaginationType> = ForPaginationType<T, string, boolean>;\n\nexport type WithEitherPages<T extends PaginationType> = WithPageNeighbours<WhichPageNeighbour<T>>;\nexport type WithNextPage<T extends PaginationType> = WithNextPageNeighbour<WhichPageNeighbour<T>>;\nexport type WithPrevPage<T extends PaginationType> = WithPrevPageNeighbour<WhichPageNeighbour<T>>;\n\nexport type WithPaginationCursor<T extends Record<any, any> = {}> = T & { cursor?: string };\nexport type WithPaginationLimit<T extends Record<any, any> = {}> = T & { limit?: number };\nexport type WithPaginationOffset<T extends Record<any, any> = {}> = T & { offset: number };\nexport type WithPaginationRecordSize<T extends Record<any, any> = {}> = T & { size?: number };\n\nexport type WithPaginationLimitSelection<T extends Record<any, any> = {}> = T & {\n    limitOptions?: readonly number[];\n    onLimitSelection?: (limit: number) => void;\n};\n\nexport type PaginatedResponseDataKeyword = 'hasNext' | 'hasPrevious' | '_links';\nexport type PaginatedResponseDataField<DataField extends string> = Exclude<DataField | PaginatedResponseDataKeyword, PaginatedResponseDataKeyword>;\n\nexport type BasePaginatedResponseData<T = any, DataField extends string = 'data'> = {\n    [K in PaginatedResponseDataField<DataField>]?: T[];\n};\n\nexport type PaginatedResponseDataWithLinks<T = any, DataField extends string = 'data'> = BasePaginatedResponseData<T, DataField> & {\n    _links: {\n        [K in PageNeighbour]?: { cursor: string };\n    };\n};\n\nexport type PaginatedResponseDataWithoutLinks<T = any, DataField extends string = 'data'> = BasePaginatedResponseData<T, DataField> & {\n    hasNext?: boolean;\n    hasPrevious?: boolean;\n};\n\nexport type PaginatedResponseData<T = any, DataField extends string = 'data'> =\n    | PaginatedResponseDataWithLinks<T, DataField>\n    | PaginatedResponseDataWithoutLinks<T, DataField>;\n\nexport interface UseFilters<S extends UseReactiveStateRecord> {\n    canResetFilters: S['canResetState'];\n    defaultFilters: S['defaultState'];\n    filters: S['state'];\n    resetFilters: S['resetState'];\n    updateFilters: S['updateState'];\n}\n\nexport interface UsePagination extends Required<WithPaginationLimit>, WithPaginationRecordSize {\n    goto: (page: number) => void;\n    hasNext: boolean;\n    hasPrev: boolean;\n    next: () => void;\n    page: number | undefined;\n    pages: number | undefined;\n    pageSize: number | undefined;\n    prev: () => void;\n    resetPagination: () => void;\n}\n\nexport type PaginationProps = WithPaginationLimitSelection<Omit<UsePagination, 'goto' | 'resetPagination'> & Partial<Pick<UsePagination, 'goto'>>> & {\n    ariaLabelKey?: TranslationKey;\n    limitSelectAriaLabelKey?: TranslationKey;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { boolOrFalse, EMPTY_OBJECT } from '../../../../utils';\nimport {\n    BasePaginatedRecordsInitOptions,\n    PaginatedRecordsFetcherReturnValue,\n    RequestPageCallback,\n    RequestPageCallbackParams,\n    RequestPageCallbackReturnValue,\n    UsePaginatedRecords,\n} from './types';\nimport usePageLimit from './usePageLimit';\nimport useCursorPagination from './useCursorPagination';\nimport useOffsetPagination from './useOffsetPagination';\nimport usePaginatedRecordsFilters from './usePaginatedRecordsFilters';\nimport useBooleanState from '../../../../hooks/useBooleanState';\nimport useMounted from '../../../../hooks/useMounted';\nimport {\n    PageNeighbour,\n    PaginatedResponseData,\n    PaginatedResponseDataField,\n    PaginatedResponseDataWithLinks,\n    PaginationType,\n    WithEitherPages,\n} from '../types';\nimport AdyenPlatformExperienceError from '../../../../core/Errors/AdyenPlatformExperienceError';\nimport { ReactiveStateRecord } from '../../../../hooks/useReactiveState/types';\n\nconst offsetPaginatedResponseFields = ['hasNext', 'hasPrevious'] as const;\n\nconst isCursorPaginatedResponseData = <T, DataField extends string>(\n    data: PaginatedResponseData<T, DataField>\n): data is PaginatedResponseDataWithLinks<T, DataField> => {\n    const dataProperties = Object.getOwnPropertyNames(data as PaginatedResponseDataWithLinks<T, DataField>);\n    return !offsetPaginatedResponseFields.some(prop => dataProperties.includes(prop));\n};\n\nconst parseCursorPaginatedResponseData = <T, DataField extends string>(\n    data: PaginatedResponseData<T, DataField>,\n    dataField: PaginatedResponseDataField<DataField> = 'data' as PaginatedResponseDataField<DataField>\n) => {\n    const records = data[dataField] as T[];\n\n    if (isCursorPaginatedResponseData<T, DataField>(data)) {\n        const paginationData = Object.fromEntries(\n            Object.entries(data._links).map(([key, value]) => [key, value.cursor])\n        ) as WithEitherPages<PaginationType.CURSOR>;\n\n        return { records, paginationData };\n    }\n\n    throw new TypeError('MALFORMED_PAGINATED_DATA');\n};\n\nconst parseOffsetPaginatedResponseData = <T, DataField extends string>(\n    data: PaginatedResponseData<T, DataField>,\n    dataField: PaginatedResponseDataField<DataField> = 'data' as PaginatedResponseDataField<DataField>\n) => {\n    const records = data[dataField] as T[];\n\n    if (!isCursorPaginatedResponseData<T, DataField>(data)) {\n        const { hasNext, hasPrevious } = data;\n\n        const paginationData = {\n            [PageNeighbour.NEXT]: boolOrFalse(hasNext),\n            [PageNeighbour.PREV]: boolOrFalse(hasPrevious),\n        } as WithEitherPages<PaginationType.OFFSET>;\n\n        return { records, paginationData };\n    }\n\n    throw new TypeError('MALFORMED_PAGINATED_DATA');\n};\n\nconst usePaginatedRecords = <T, DataField extends string, FilterValue extends string, FilterParam extends string>({\n    dataField = 'data' as PaginatedResponseDataField<DataField>,\n    fetchRecords,\n    filterParams = EMPTY_OBJECT as ReactiveStateRecord<FilterValue, FilterParam>,\n    initialFiltersSameAsDefault = true,\n    initialize,\n    onFiltersChanged,\n    pagination,\n    preferredLimit,\n    preferredLimitOptions,\n    enabled,\n}: BasePaginatedRecordsInitOptions<T, DataField, FilterValue, FilterParam>): UsePaginatedRecords<T, FilterValue, FilterParam> => {\n    const [records, setRecords] = useState<T[]>([]);\n    const [fetching, updateFetching] = useBooleanState(enabled !== undefined ? enabled : true);\n    const [error, setError] = useState<AdyenPlatformExperienceError>();\n    const [preferredPageLimit, setPreferredPageLimit] = useState(preferredLimit);\n\n    const $mounted = useMounted();\n    const $initialFetchInProgress = useRef(true);\n    const $lastRequestedPage = useRef(1);\n    const $recordsFilters = usePaginatedRecordsFilters<FilterValue, FilterParam>(filterParams, initialFiltersSameAsDefault);\n\n    const { limit, limitOptions } = usePageLimit({ preferredLimit: preferredPageLimit, preferredLimitOptions });\n    const { defaultFilters, filters, updateFilters, ...filtersProps } = $recordsFilters;\n\n    const [parsePaginatedResponseData, usePagination] = useMemo(\n        () =>\n            pagination === PaginationType.CURSOR\n                ? [parseCursorPaginatedResponseData, useCursorPagination]\n                : [parseOffsetPaginatedResponseData, useOffsetPagination],\n        // [TODO] - Fix missing dependencies\n        []\n    );\n\n    const updateLimit = useCallback((limit: number) => setPreferredPageLimit(limit), []);\n\n    const { goto, page, pages, resetPagination, ...paginationProps } = usePagination(\n        useCallback(\n            async (\n                { page, ...pageRequestParams }: RequestPageCallbackParams<PaginationType>,\n                signal?: AbortSignal\n            ): Promise<RequestPageCallbackReturnValue<PaginationType>> => {\n                try {\n                    setError(undefined);\n                    $lastRequestedPage.current = page;\n\n                    if (!$mounted.current || <undefined>updateFetching(true)) return;\n\n                    const res = await fetchRecords({ ...pageRequestParams, ...filters }, signal);\n                    const { records, paginationData } = parsePaginatedResponseData<T, DataField>(res, dataField);\n\n                    if ($initialFetchInProgress.current) {\n                        initialize?.([records, paginationData] as PaginatedRecordsFetcherReturnValue<PaginationType, T>, $recordsFilters);\n                        $initialFetchInProgress.current = false;\n                    }\n\n                    if ($mounted.current) {\n                        setRecords(records);\n                        updateFetching(false);\n                    }\n\n                    return { ...paginationData, size: records?.length };\n                } catch (err) {\n                    // TODO - Handle signal abortion and updateFetching\n                    if (signal?.aborted) return;\n                    updateFetching(false);\n                    setError(err as AdyenPlatformExperienceError);\n\n                    console.error(err);\n                }\n            },\n            // [TODO] - Fix missing dependencies\n            [fetchRecords, filters, limit]\n        ) as RequestPageCallback<PaginationType>,\n        limit\n    );\n\n    useMemo(() => {\n        $initialFetchInProgress.current = true;\n        /* eslint-disable-next-line */\n    }, [filterParams]);\n\n    useMemo(() => {\n        resetPagination();\n        $lastRequestedPage.current = 1;\n        /* eslint-disable-next-line */\n    }, [filters, limit, resetPagination]);\n\n    useEffect(() => {\n        if (enabled) goto($lastRequestedPage.current);\n    }, [goto, enabled]);\n\n    useEffect(() => {\n        onFiltersChanged?.(filters);\n        // [TODO] - Fix missing dependencies\n    }, [filters]);\n\n    return { error, fetching, filters, goto, limitOptions, page, pages, records, updateFilters, updateLimit, ...filtersProps, ...paginationProps };\n};\n\nexport default usePaginatedRecords;\n","import { PaginatedRecordsInitOptions, UsePaginatedRecords } from './types';\nimport usePaginatedRecords from './usePaginatedRecords';\nimport { PaginationType } from '../types';\n\nconst useCursorPaginatedRecords = <T, DataField extends string, FilterValue extends string, FilterParam extends string>(\n    initOptions: PaginatedRecordsInitOptions<T, DataField, FilterValue, FilterParam>\n): UsePaginatedRecords<T, FilterValue, FilterParam> => {\n    return usePaginatedRecords<T, DataField, FilterValue, FilterParam>({\n        ...initOptions,\n        pagination: PaginationType.CURSOR,\n    });\n};\n\nexport default useCursorPaginatedRecords;\n","import { useEffect, useMemo, useState } from 'preact/hooks';\nimport restamper, { RestampContext } from '../../../../core/Localization/datetime/restamper';\nimport { getGMTSuffixForTimezoneOffset, getTimezoneOffsetFromFormattedDateString } from '../../../../core/Localization/datetime/restamper/utils';\nimport { isWatchlistUnsubscribeToken } from '../../../../primitives/reactive/watchlist';\nimport { boolOrFalse, EMPTY_ARRAY, EMPTY_OBJECT } from '../../../../utils';\nimport clock from '../../../../primitives/time/clock';\n\nexport type UseTimezoneConfig = {\n    timezone?: RestampContext['TIMEZONE'];\n    withClock?: boolean;\n};\n\nexport const { getTimezoneTime, getUsedTimezone } = (() => {\n    const REGEX_CLOCK_TIME_MATCHER = /\\d{2}:\\d{2}(?=:\\d{2}(?:\\.\\d+)?\\s+([AP]M))/i;\n    const REGEX_GMT_OFFSET_UNWANTED_SUBSTRINGS = /^GMT|0(?=\\d:00)|:00/g;\n    const $restamper = restamper();\n\n    const getTimezoneTime = (timezone: RestampContext['TIMEZONE'], timestamp = Date.now()) => {\n        $restamper.tz = timezone!; // switch restamper to this timezone\n\n        const { formatted } = $restamper(timestamp);\n        const [time = '', meridian = ''] = formatted?.match(REGEX_CLOCK_TIME_MATCHER) ?? EMPTY_ARRAY;\n        const offset = getTimezoneOffsetFromFormattedDateString(formatted);\n        const clockTime = `${time}${meridian && ` ${meridian}`}`;\n        const GMTOffsetString = getGMTSuffixForTimezoneOffset(offset).replace(REGEX_GMT_OFFSET_UNWANTED_SUBSTRINGS, '');\n\n        return [clockTime, GMTOffsetString] as const;\n    };\n\n    const getUsedTimezone = (timezone?: RestampContext['TIMEZONE']) => {\n        $restamper.tz = timezone;\n        return $restamper.tz.current!;\n    };\n\n    return { getTimezoneTime, getUsedTimezone } as const;\n})();\n\nconst useTimezone = ({ timezone: tz, withClock = false }: UseTimezoneConfig = EMPTY_OBJECT) => {\n    const shouldWatchClock = useMemo(() => boolOrFalse(withClock), [withClock]);\n    const timezone = useMemo(() => getUsedTimezone(tz), [tz]);\n\n    const [timestamp, setTimestamp] = useState(Date.now());\n    const [clockTime, GMTOffset] = useMemo(() => getTimezoneTime(timezone, timestamp), [timestamp, timezone]);\n\n    useEffect(() => {\n        if (!shouldWatchClock) return;\n\n        return clock.subscribe(snapshot => {\n            if (!isWatchlistUnsubscribeToken(snapshot)) {\n                setTimestamp(snapshot.now);\n            }\n        });\n    }, [setTimestamp, shouldWatchClock]);\n\n    return { clockTime, GMTOffset, timestamp, timezone } as const;\n};\n\nexport default useTimezone;\n","import { useCallback, useMemo, useRef, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport type { RestampContext } from '../../../../../core/Localization/datetime/restamper';\nimport type { TranslationKey } from '../../../../../translations';\nimport { RangeTimestamp, RangeTimestamps } from '../../../Calendar/calendar/timerange';\nimport * as RangePreset from '../../../Calendar/calendar/timerange/presets';\n\nexport type TimeRangeOptions = 'last7Days' | 'last30Days' | 'last90Days' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'yearToDate';\n\nexport const TIME_RANGE_SELECTION_PRESET_OPTION_KEYS = Object.freeze({\n    LAST_7_DAYS: 'common.filters.types.date.rangeSelect.options.last7Days',\n    LAST_30_DAYS: 'common.filters.types.date.rangeSelect.options.last30Days',\n    LAST_90_DAYS: 'common.filters.types.date.rangeSelect.options.last90Days',\n    THIS_WEEK: 'common.filters.types.date.rangeSelect.options.thisWeek',\n    LAST_WEEK: 'common.filters.types.date.rangeSelect.options.lastWeek',\n    THIS_MONTH: 'common.filters.types.date.rangeSelect.options.thisMonth',\n    LAST_MONTH: 'common.filters.types.date.rangeSelect.options.lastMonth',\n    YEAR_TO_DATE: 'common.filters.types.date.rangeSelect.options.yearToDate',\n} as const);\n\nexport type TimeRangeSelectionPresetOptionKey =\n    (typeof TIME_RANGE_SELECTION_PRESET_OPTION_KEYS)[keyof typeof TIME_RANGE_SELECTION_PRESET_OPTION_KEYS];\n\nexport type UseTimeRangeSelectionConfig = {\n    clearable?: boolean;\n    now?: RangeTimestamp;\n    options: Readonly<Partial<{ [P in TimeRangeOptions as `common.filters.types.date.rangeSelect.options.${P}`]: RangeTimestamps }>>;\n    selectedOption?: string;\n    timezone?: RestampContext['TIMEZONE'];\n};\n\nexport type UseTimeRangeSelectionData = ReturnType<typeof useTimeRangeSelection>;\n\nexport const getTimeRangeSelectionDefaultPresetOptions = ({\n    exclude = [],\n}: { exclude?: TimeRangeSelectionPresetOptionKey[] } = {}): UseTimeRangeSelectionConfig['options'] => {\n    const allOptions = {\n        [TIME_RANGE_SELECTION_PRESET_OPTION_KEYS.LAST_7_DAYS]: RangePreset.lastNDays(7),\n        [TIME_RANGE_SELECTION_PRESET_OPTION_KEYS.LAST_30_DAYS]: RangePreset.lastNDays(30),\n        [TIME_RANGE_SELECTION_PRESET_OPTION_KEYS.LAST_90_DAYS]: RangePreset.lastNDays(90),\n        [TIME_RANGE_SELECTION_PRESET_OPTION_KEYS.THIS_WEEK]: RangePreset.thisWeek(),\n        [TIME_RANGE_SELECTION_PRESET_OPTION_KEYS.LAST_WEEK]: RangePreset.lastWeek(),\n        [TIME_RANGE_SELECTION_PRESET_OPTION_KEYS.THIS_MONTH]: RangePreset.thisMonth(),\n        [TIME_RANGE_SELECTION_PRESET_OPTION_KEYS.LAST_MONTH]: RangePreset.lastMonth(),\n        [TIME_RANGE_SELECTION_PRESET_OPTION_KEYS.YEAR_TO_DATE]: RangePreset.yearToDate(),\n    } satisfies Readonly<Partial<Record<TranslationKey, RangeTimestamps>>>;\n\n    if (!exclude?.length) return Object.freeze(allOptions) as UseTimeRangeSelectionConfig['options'];\n\n    const excludeSet = new Set(exclude);\n    return Object.freeze(\n        Object.fromEntries(Object.entries(allOptions).filter(([key]) => !excludeSet.has(key as TimeRangeSelectionPresetOptionKey)))\n    ) as UseTimeRangeSelectionConfig['options'];\n};\n\nexport const useTimeRangeSelection = ({\n    now = Date.now(),\n    options: presetOptions,\n    selectedOption: selectedPresetOption,\n    timezone,\n}: UseTimeRangeSelectionConfig) => {\n    const { i18n } = useCoreContext();\n    const [from, setFrom] = useState<number>();\n    const [to, setTo] = useState<number>();\n    const [selectedOption, setSelectedOption] = useState<string>();\n    const NOW = useRef<typeof now>();\n    const TZ = useRef<typeof timezone>();\n\n    const [customOption, getRangesForOption, selectionOptions] = useMemo(() => {\n        const customOption = i18n.get('common.filters.types.date.rangeSelect.options.custom');\n        const optionKeys = Object.keys(presetOptions) as TranslationKey[];\n        const selectionOptions = Object.freeze(optionKeys.map(key => i18n.get(key)));\n\n        const getRangesForOption = (option: string, options: readonly string[] = selectionOptions) => {\n            const optionIndex = options.findIndex(currentOption => currentOption === option);\n            return presetOptions[optionKeys[optionIndex] as keyof typeof presetOptions];\n        };\n\n        return [customOption, getRangesForOption, selectionOptions] as const;\n    }, [i18n, presetOptions]);\n\n    const [isCustomSelection, setIsCustomSelection] = useState(selectedPresetOption === customOption);\n    const selectionOptionsWithCustomOption = useMemo(() => Object.freeze([...selectionOptions, customOption]), [customOption, selectionOptions]);\n\n    const options = useMemo(\n        () => (isCustomSelection ? selectionOptionsWithCustomOption : selectionOptions),\n        [isCustomSelection, selectionOptions, selectionOptionsWithCustomOption]\n    );\n\n    const onSelection = useCallback(\n        (option: string) => {\n            const ranges = getRangesForOption(option, selectionOptions);\n            if (!ranges) return;\n\n            setFrom(ranges.from);\n            setTo(ranges.to);\n            setIsCustomSelection(false);\n            setSelectedOption(option);\n        },\n        [customOption, getRangesForOption, selectedOption, selectionOptions]\n    );\n\n    const customSelection = useCallback(() => {\n        setFrom(undefined);\n        setTo(undefined);\n        setIsCustomSelection(true);\n        setSelectedOption(customOption);\n    }, [customOption]);\n\n    useMemo(() => {\n        selectedPresetOption === customOption ? setSelectedOption(customOption) : onSelection(selectedPresetOption!);\n    }, []);\n\n    useMemo(() => {\n        if (NOW.current !== now || TZ.current !== timezone) {\n            const options = Object.values(presetOptions);\n\n            options.forEach(ranges => {\n                ranges.now = now;\n                ranges.timezone = timezone;\n            });\n\n            NOW.current = now;\n            TZ.current = options[0]?.timezone;\n\n            onSelection(selectedOption!);\n        }\n    }, [now, timezone, presetOptions]);\n\n    return {\n        customSelection,\n        from,\n        onSelection,\n        options,\n        selectedOption,\n        to,\n    } as const;\n};\n\nexport default useTimeRangeSelection;\n","import { AriaAttributes } from 'preact/compat';\nimport { useCallback, useEffect, useMemo, useRef } from 'preact/hooks';\nimport Select from '../../../FormFields/Select';\nimport { SelectChangeEvent, SelectItem } from '../../../FormFields/Select/types';\nimport { useTimeRangeSelection, UseTimeRangeSelectionConfig } from './useTimeRangeSelection';\n\nconst TimeRangeSelector = ({\n    ['aria-label']: ariaLabel,\n    calendarRef,\n    onTimeRangeSelected,\n    timestamp,\n    ...useTimeRangeSelectionConfig\n}: UseTimeRangeSelectionConfig &\n    Pick<AriaAttributes, 'aria-label'> & {\n        calendarRef?: any;\n        onTimeRangeSelected?: (option: string) => any;\n        timestamp: DOMHighResTimeStamp;\n    }) => {\n    const { customSelection, from, onSelection, options, selectedOption, to } = useTimeRangeSelection(useTimeRangeSelectionConfig);\n    const selectOptions = useMemo(() => Object.freeze(options.map(id => ({ id, name: id }) as SelectItem)), [options]);\n    const onSelectedOptionChanged = useCallback(({ target }: SelectChangeEvent) => onSelection(target?.value), [onSelection]);\n    const rangeSelectionInProgress = useRef(true);\n    const cachedTimestamp = useRef(timestamp);\n\n    useEffect(() => {\n        if (calendarRef?.current && from && to) {\n            rangeSelectionInProgress.current = true;\n            calendarRef.current.from = new Date(from);\n            calendarRef.current.to = new Date(to);\n        }\n    }, [calendarRef, from, to]);\n\n    useEffect(() => {\n        if (cachedTimestamp.current !== timestamp) {\n            cachedTimestamp.current = timestamp;\n\n            if (rangeSelectionInProgress.current) {\n                rangeSelectionInProgress.current = false;\n            } else customSelection();\n        }\n    }, [customSelection, timestamp]);\n\n    useEffect(() => {\n        selectedOption && onTimeRangeSelected?.(selectedOption);\n    }, [selectedOption, onTimeRangeSelected]);\n\n    return (\n        <Select\n            setToTargetWidth={true}\n            items={selectOptions}\n            filterable={false}\n            multiSelect={false}\n            onChange={onSelectedOptionChanged}\n            selected={selectedOption}\n            aria-label={ariaLabel}\n        />\n    );\n};\n\nexport default TimeRangeSelector;\n","import { boolOrTrue, EMPTY_OBJECT, enumerable, isPlainObject, struct, structFrom } from '../../../../../utils';\n\ntype PropertyDescriptor<T = any> = {\n    configurable?: boolean;\n    enumerable?: boolean;\n    value?: T;\n    writable?: boolean;\n    get?(): T | undefined;\n    set?(v?: T): void;\n};\n\ntype PropertyFactory = {\n    <T = any>(setter?: false | ((value?: T) => T | undefined), value?: T): PropertyDescriptor<T>;\n    is: (value: any) => value is PropertyDescriptor;\n    isObject: (value: any) => value is Record<any, any>;\n    immutable: <T = any>(value?: T) => PropertyDescriptor<T>;\n    mutable: <T = any>(value?: T) => PropertyDescriptor<T>;\n    restricted: () => PropertyDescriptor<undefined>;\n};\n\nexport const property = (() => {\n    const descriptor = <T>(descriptor: PropertyDescriptor<T>) =>\n        Object.freeze(\n            structFrom(EMPTY_OBJECT, Object.fromEntries(Object.entries(descriptor).map(([field, value]) => [field, { value }])))\n        ) as PropertyDescriptor<T>;\n\n    const isPropDescriptor = (value: any): value is PropertyDescriptor => {\n        try {\n            return Object.getPrototypeOf(value) === EMPTY_OBJECT;\n        } catch {\n            return false;\n        }\n    };\n\n    const prop = <T = any>(setter?: false | ((value?: T) => T | undefined), value?: T) => {\n        if (!setter) return descriptor(enumerable(value, boolOrTrue(setter)));\n\n        let currentValue = value;\n\n        return descriptor({\n            enumerable: true,\n            get: () => currentValue,\n            set: (value?: T) => {\n                currentValue = setter(value);\n            },\n        });\n    };\n\n    return Object.defineProperties(prop, {\n        is: { value: isPropDescriptor },\n        isObject: { value: isPlainObject },\n        immutable: { value: <T = any>(value?: T) => prop(false, value) },\n        mutable: { value: <T = any>(value?: T) => prop(undefined, value) },\n        restricted: { value: () => prop<undefined>(false) },\n    }) as PropertyFactory;\n})();\n\nexport const propsProperty = (() => {\n    type UnwrappedProps<T extends Record<string, any>> = {\n        [K in keyof T]:\n            | (T[K] extends PropertyDescriptor<infer U> ? (U extends Record<string, any> ? UnwrappedProps<U> : U) : T[K])\n            | PropertyDescriptor<T[K]>;\n    } & Record<string, any>;\n\n    const propsProperty = <T extends Record<string, any> = {}>(props = {} as UnwrappedProps<T>, deepImmutable = false) => {\n        const $props = struct() as UnwrappedProps<T>;\n\n        for (const [prop, maybeDescriptor] of Object.entries<UnwrappedProps<T>[keyof T]>(props)) {\n            try {\n                const isDescriptor = property.is(maybeDescriptor);\n                const isPlainObject = property.isObject(maybeDescriptor);\n\n                if (isDescriptor || isPlainObject) {\n                    Object.defineProperty($props, prop, isDescriptor ? maybeDescriptor : propsProperty(maybeDescriptor, deepImmutable));\n                    continue;\n                } else if (deepImmutable) {\n                    Object.defineProperty($props, prop, property.immutable(maybeDescriptor));\n                    continue;\n                }\n            } catch {\n                /* no empty catch block */\n            }\n\n            $props[prop as keyof T] = maybeDescriptor;\n        }\n\n        return property((props = {} as UnwrappedProps<T>) => Object.assign($props, props), $props);\n    };\n\n    const unwrapped = <T extends Record<string, any> = {}>(props = {} as UnwrappedProps<T>, deepImmutable = false) => {\n        const P = propsProperty(props, deepImmutable);\n        return struct({ P }).P as T;\n    };\n\n    return Object.defineProperties(propsProperty, {\n        unwrapped: { value: unwrapped },\n    }) as {\n        <T extends Record<string, any> = {}>(props?: UnwrappedProps<T>, deepImmutable?: boolean): PropertyDescriptor<UnwrappedProps<T>>;\n        unwrapped: <T extends Record<string, any> = {}>(props?: UnwrappedProps<T>, deepImmutable?: boolean) => T;\n    };\n})();\n","import { VNode } from 'preact';\nimport {\n    CalendarBlock,\n    CalendarConfig,\n    CalendarGridControlRecord,\n    CalendarSelection,\n    CalendarShiftControls,\n    FirstWeekDay,\n    Time,\n    TimeFrameSize,\n} from './calendar/types';\n\nexport const enum CalendarGridRenderToken {\n    DATE,\n    DAY_OF_WEEK,\n    MONTH_HEADER,\n}\n\nexport interface CalendarGridCursorRootProps {\n    onClickCapture: (evt: Event) => void;\n    onMouseOverCapture: (evt: Event) => void;\n    onPointerOverCapture: (evt: Event) => void;\n    onKeyDownCapture: (evt: KeyboardEvent) => void;\n}\n\nexport interface CalendarHandle {\n    clear: () => void;\n    config: CalendarConfig;\n    from?: Date;\n    to?: Date;\n}\n\nexport interface CalendarProps {\n    blocks?: TimeFrameSize;\n    controls?: CalendarShiftControls;\n    dynamicBlockRows?: boolean;\n    firstWeekDay?: FirstWeekDay;\n    highlight?: CalendarSelection | string;\n    locale?: string;\n    onHighlight?: (from?: number, to?: number) => any;\n    onlyCellsWithin?: boolean;\n    originDate?: Time | Time[];\n    getGridLabel: (block: CalendarBlock) => string | undefined;\n    prepare?: (renderToken: CalendarGridRenderToken, renderContext: any) => any;\n    renderControl?: (...args: CalendarGridControlRecord) => VNode | null;\n    sinceDate?: Time;\n    timezone?: string;\n    trackCurrentDay?: boolean;\n    untilDate?: Time;\n    useYearView?: boolean;\n}\n\nexport type CalendarRenderControl = Exclude<CalendarProps['renderControl'], undefined>;\nexport type CalendarControlRenderer = (targetElement: Element, ...args: CalendarGridControlRecord) => ReturnType<CalendarRenderControl>;\n","import { memo } from 'preact/compat';\nimport { property, propsProperty } from './utils';\nimport { CalendarGridDateProps, CalendarGridDateRenderProps } from './types';\nimport { fixedForwardRef, getClassName, memoComparator } from '../../../../../utils/preact';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport { CalendarGridRenderToken } from '../../types';\n\nconst DEFAULT_DATE_CELL_CLASSNAME = 'adyen-pe-calendar__cell adyen-pe-calendar__cell--date';\nconst DEFAULT_DATE_TIME_CLASSNAME = 'adyen-pe-calendar__date';\n\nconst getGridDateRenderProps = (computedProps = EMPTY_OBJECT as any, prepare?: CalendarGridDateProps['prepare']) => {\n    const renderProps = propsProperty.unwrapped<CalendarGridDateRenderProps>(\n        {\n            childClassName: property.mutable(DEFAULT_DATE_TIME_CLASSNAME),\n            childProps: {\n                children: property.restricted(),\n                className: '',\n            },\n            className: property.mutable(DEFAULT_DATE_CELL_CLASSNAME),\n            props: {\n                ...computedProps,\n                children: property.restricted(),\n                className: '',\n            },\n        },\n        true\n    );\n\n    prepare?.(CalendarGridRenderToken.DATE, renderProps);\n    return renderProps;\n};\n\nconst CalendarGridDate = fixedForwardRef(\n    ({ grid, prepare, datetime, flags, index, label, onlyCellsWithin }: CalendarGridDateProps, cursorElementRef) => {\n        const withinMonth = flags.WITHIN_BLOCK;\n\n        const props = {\n            'data-cursor-position': index,\n            'data-within-month': withinMonth,\n            tabIndex: -1,\n        } as any;\n\n        if (withinMonth) {\n            const withinRange = flags.WITHIN_RANGE;\n\n            props['data-today'] = flags.CURRENT;\n            props['data-first-week-day'] = flags.LINE_START;\n            props['data-last-week-day'] = flags.LINE_END;\n            props['data-weekend'] = flags.WEEKEND;\n            props['data-first-month-day'] = flags.BLOCK_START;\n            props['data-last-month-day'] = flags.BLOCK_END;\n\n            props['data-within-range'] = withinRange;\n\n            if (withinRange) {\n                props['data-range-end'] = flags.RANGE_END;\n                props['data-range-start'] = flags.RANGE_START;\n                props['data-selection-end'] = flags.SELECTION_END;\n                props['data-selection-start'] = flags.SELECTION_START;\n                props['data-within-selection'] = flags.WITHIN_SELECTION;\n                props['aria-selected'] = `${!!(flags.SELECTION_END || flags.SELECTION_START || flags.WITHIN_SELECTION)}`;\n            }\n\n            if (index === +grid.cursor) props.ref = cursorElementRef;\n        }\n\n        const renderProps = getGridDateRenderProps(props, prepare);\n        const { children: _, className, ...extendedProps } = renderProps.props || (EMPTY_OBJECT as NonNullable<typeof renderProps.props>);\n        const classes = getClassName(renderProps.className, DEFAULT_DATE_CELL_CLASSNAME, className);\n\n        return (\n            <td {...extendedProps} {...props} className={classes}>\n                {(!onlyCellsWithin || withinMonth) &&\n                    (() => {\n                        const {\n                            children: _,\n                            className,\n                            ...extendedProps\n                        } = renderProps.childProps || (EMPTY_OBJECT as NonNullable<typeof renderProps.childProps>);\n                        const classes = getClassName(renderProps.childClassName, DEFAULT_DATE_TIME_CLASSNAME, className);\n                        return (\n                            <time {...extendedProps} className={classes} dateTime={datetime}>\n                                {label}\n                            </time>\n                        );\n                    })()}\n            </td>\n        );\n    }\n);\n\nexport default memo(\n    CalendarGridDate,\n    memoComparator({\n        block: memoComparator.exclude,\n        flags: value => +(value as number),\n    })\n);\n","import { memo } from 'preact/compat';\nimport { property, propsProperty } from './utils';\nimport { getClassName, memoComparator } from '../../../../../utils/preact';\nimport { CalendarGridDayOfWeekProps, CalendarGridDayOfWeekRenderProps } from './types';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport { CalendarGridRenderToken } from '../../types';\nimport { Ref } from 'preact';\n\nconst DEFAULT_CELL_CLASSNAME = 'adyen-pe-calendar__cell adyen-pe-calendar__cell--day-of-week';\nconst DEFAULT_CELL_ABBR_CLASSNAME = 'adyen-pe-calendar__day-of-week';\n\nconst getGridDayOfWeekRenderProps = (computedProps = EMPTY_OBJECT as any, prepare?: CalendarGridDayOfWeekProps['prepare']) => {\n    const renderProps = propsProperty.unwrapped<CalendarGridDayOfWeekRenderProps>(\n        {\n            childClassName: property.mutable(DEFAULT_CELL_ABBR_CLASSNAME),\n            childProps: {\n                children: property.restricted(),\n                className: '',\n            },\n            className: property.mutable(DEFAULT_CELL_CLASSNAME),\n            props: {\n                ...computedProps,\n                children: property.restricted(),\n                className: '',\n            },\n        },\n        true\n    );\n\n    prepare?.(CalendarGridRenderToken.DAY_OF_WEEK, renderProps);\n    return renderProps;\n};\n\nconst CalendarGridDayOfWeek = ({ prepare, flags, labels: { long: longLabel, short: shortLabel } }: CalendarGridDayOfWeekProps) => {\n    const props = {\n        'aria-label': longLabel,\n        'data-first-week-day': flags.LINE_START,\n        'data-last-week-day': flags.LINE_END,\n        'data-weekend': flags.WEEKEND,\n        scope: 'col',\n    };\n\n    const renderProps = getGridDayOfWeekRenderProps(props, prepare);\n    const { children: _, className, onCommand, ...extendedProps } = renderProps.props || (EMPTY_OBJECT as NonNullable<typeof renderProps.props>);\n\n    const classes = getClassName(renderProps.className, DEFAULT_CELL_CLASSNAME, className);\n\n    const {\n        children: __,\n        className: childClassName,\n        ...extendedChildProps\n    } = renderProps.childProps || (EMPTY_OBJECT as NonNullable<typeof renderProps.childProps>);\n    const childClasses = getClassName(renderProps.childClassName, DEFAULT_CELL_ABBR_CLASSNAME, childClassName);\n\n    return (\n        <th {...extendedProps} ref={extendedProps.ref as Ref<HTMLTableCellElement>} {...props} className={classes}>\n            <abbr {...extendedChildProps} className={childClasses}>\n                {shortLabel}\n            </abbr>\n        </th>\n    );\n};\n\nexport default memo(\n    CalendarGridDayOfWeek,\n    memoComparator({\n        block: memoComparator.exclude,\n        flags: value => +(value as number),\n    })\n);\n","import { forwardRef, memo } from 'preact/compat';\nimport { CalendarGridProps } from './types';\nimport CalendarGridDate from './CalendarGridDate';\nimport CalendarGridDayOfWeek from './CalendarGridDayOfWeek';\nimport '../../Calendar.scss';\n\nconst CalendarGrid = forwardRef(({ cursorRootProps, onlyCellsWithin, prepare, getGridLabel, grid }: CalendarGridProps, cursorElementRef) => (\n    <ol className={'adyen-pe-calendar'} role=\"none\" {...cursorRootProps}>\n        {grid.map(block => (\n            <li key={block.datetime} className={'adyen-pe-calendar__month'} role=\"none\">\n                <div className={'adyen-pe-calendar__month-name'} role=\"none\">\n                    <time dateTime={block.datetime} aria-hidden=\"true\">\n                        {block.label}\n                    </time>\n                </div>\n\n                <table\n                    role=\"grid\"\n                    aria-multiselectable={true}\n                    aria-label={getGridLabel(block)}\n                    className={'adyen-pe-calendar__grid'}\n                    style={{ '--adyen-pe-calendar-rowspan': grid.rowspan }}\n                >\n                    <thead>\n                        <tr className={'adyen-pe-calendar__row'}>\n                            {grid.weekdays.map((data, index) => (\n                                <CalendarGridDayOfWeek key={data.labels['long']} grid={grid} block={block} prepare={prepare} cell={index} {...data} />\n                            ))}\n                        </tr>\n                    </thead>\n                    <tbody>\n                        {block.map((row, rowindex) => (\n                            <tr key={`${block.month}:${rowindex}`} className={'adyen-pe-calendar__row'}>\n                                {row.map((data, index) => (\n                                    <CalendarGridDate\n                                        key={`${block.month}:${data.timestamp}`}\n                                        ref={cursorElementRef}\n                                        grid={grid}\n                                        block={block}\n                                        prepare={prepare}\n                                        cell={index}\n                                        onlyCellsWithin={onlyCellsWithin}\n                                        row={rowindex}\n                                        {...data}\n                                    />\n                                ))}\n                            </tr>\n                        ))}\n                    </tbody>\n                </table>\n            </li>\n        ))}\n    </ol>\n));\n\nexport default memo(CalendarGrid);\n","export const DAY_MS = 86400000 as const;\nexport const DAY_OF_WEEK_FORMATS = ['narrow', 'short', 'long'] as const;\nexport const FIRST_WEEK_DAYS = [0, 1, 6] as const;\nexport const FRAME_SIZES = [1, 2, 3, 4, 6, 12] as const;\nexport const MAXIMUM_MONTH_UNITS = 42 as const;\nexport const WEEKEND_DAYS_SEED = [0, 1] as const;\nexport const YEAR_MONTHS = 12 as const;\nexport const CONTROLS_ALL: unique symbol = Symbol();\nexport const CONTROLS_MINIMAL: unique symbol = Symbol();\nexport const CONTROLS_NONE: unique symbol = Symbol();\nexport const CALENDAR_CONTROLS = [CONTROLS_NONE, CONTROLS_MINIMAL, CONTROLS_ALL] as const;\nexport const SELECT_MANY: unique symbol = Symbol();\nexport const SELECT_NONE: unique symbol = Symbol();\nexport const SELECT_ONE: unique symbol = Symbol();\nexport const CALENDAR_SELECTIONS = [SELECT_NONE, SELECT_ONE, SELECT_MANY] as const;\nexport const CURSOR_BACKWARD: unique symbol = Symbol();\nexport const CURSOR_BLOCK_END: unique symbol = Symbol();\nexport const CURSOR_BLOCK_START: unique symbol = Symbol();\nexport const CURSOR_DOWNWARD: unique symbol = Symbol();\nexport const CURSOR_FORWARD: unique symbol = Symbol();\nexport const CURSOR_LINE_END: unique symbol = Symbol();\nexport const CURSOR_LINE_START: unique symbol = Symbol();\nexport const CURSOR_NEXT_BLOCK: unique symbol = Symbol();\nexport const CURSOR_PREV_BLOCK: unique symbol = Symbol();\nexport const CURSOR_UPWARD: unique symbol = Symbol();\nexport const RANGE_FROM: unique symbol = Symbol();\nexport const RANGE_TO: unique symbol = Symbol();\nexport const SELECTION_COLLAPSE: unique symbol = Symbol();\nexport const SELECTION_FARTHEST: unique symbol = Symbol();\nexport const SELECTION_FROM: unique symbol = Symbol();\nexport const SELECTION_NEAREST: unique symbol = Symbol();\nexport const SELECTION_TO: unique symbol = Symbol();\nexport const SHIFT_BLOCK: unique symbol = Symbol();\nexport const SHIFT_FRAME: unique symbol = Symbol();\nexport const SHIFT_PERIOD: unique symbol = Symbol();\n","import { FRAME_SIZES, WEEKEND_DAYS_SEED } from '../../constants';\nimport { FirstWeekDay, TimeFrameSize, WeekDay } from '../../types';\nimport { mod } from '../../../../../../utils';\n\nexport const downsizeTimeFrame = (size: TimeFrameSize, maxsize: number): TimeFrameSize => {\n    if (maxsize >= size) return size;\n    let i = Math.max(1, FRAME_SIZES.indexOf(size));\n    while (--i && maxsize < (FRAME_SIZES[i] as TimeFrameSize)) {}\n    return FRAME_SIZES[i] as TimeFrameSize;\n};\n\nexport const resolveTimeFrameBlockSize = (size: TimeFrameSize) => FRAME_SIZES[Math.max(FRAME_SIZES.indexOf(size), 0)];\n\nexport const getWeekendDays = (firstWeekDay: FirstWeekDay = 0) =>\n    // [TODO]: Derive weekend days based on locale\n    Object.freeze(WEEKEND_DAYS_SEED.map(seed => mod(6 - firstWeekDay + seed, 7)) as [WeekDay, WeekDay]);\n","import { RANGE_FROM, RANGE_TO } from '../constants';\nimport { Time, TimeFrameRangeEdge } from '../types';\nimport { computeTimestampOffset, getEdgesDistance } from '../utils';\n\nexport default class __TimeSlice__ {\n    readonly #numberOfMonths: number = Infinity;\n    readonly #endTimestamp: number = Infinity;\n    readonly #startTimestamp: number = -Infinity;\n    readonly #endTimestampOffset: number = 0;\n    readonly #startTimestampOffset: number = 0;\n\n    constructor(timezone?: string, fromTime?: Time, toTime?: Time);\n    constructor(timezone?: string, time?: Time, timeEdge?: TimeFrameRangeEdge);\n    constructor(...args: any[]) {\n        if (args.length >= 3) {\n            let timestamp = new Date(args[1]).getTime();\n\n            if (typeof args[2] !== 'symbol') {\n                this.#startTimestamp = timestamp || this.#startTimestamp;\n                this.#endTimestamp = new Date(args[2]).getTime() || this.#endTimestamp;\n\n                if (this.#endTimestamp < this.#startTimestamp) {\n                    [this.#endTimestamp, this.#startTimestamp] = [this.#startTimestamp, this.#endTimestamp];\n                }\n\n                this.#startTimestampOffset = computeTimestampOffset(this.#startTimestamp, args[0]);\n                this.#endTimestampOffset = computeTimestampOffset(this.#endTimestamp, args[0]);\n                this.#numberOfMonths = getEdgesDistance(this.#startTimestamp, this.#endTimestamp, args[0]) + 1;\n            } else if (!isNaN(timestamp)) {\n                switch (args[2]) {\n                    case RANGE_TO:\n                        this.#endTimestamp = timestamp;\n                        this.#endTimestampOffset = computeTimestampOffset(this.#endTimestamp, args[0]);\n                        break;\n\n                    case RANGE_FROM:\n                    default:\n                        this.#startTimestamp = timestamp;\n                        this.#startTimestampOffset = computeTimestampOffset(this.#startTimestamp, args[0]);\n                        break;\n                }\n            }\n        }\n    }\n\n    get numberOfMonths() {\n        return this.#numberOfMonths;\n    }\n\n    get endTimestamp() {\n        return this.#endTimestamp;\n    }\n\n    get endTimestampOffset() {\n        return this.#endTimestampOffset;\n    }\n\n    get startTimestamp() {\n        return this.#startTimestamp;\n    }\n\n    get startTimestampOffset() {\n        return this.#startTimestampOffset;\n    }\n}\n","import __TimeSlice__ from './TimeSlice';\nimport { RANGE_FROM, RANGE_TO } from '../constants';\nimport { TimeSlice, TimeSliceFactory } from '../types';\nimport { getter, struct } from '../../../../../utils';\nimport { withTimezone } from '../utils';\n\nconst factory = ((...args: any[]) => {\n    let tz = withTimezone().tz.current;\n    let slice = new __TimeSlice__(tz, ...args);\n\n    return struct({\n        from: getter(() => slice.startTimestamp, false),\n        to: getter(() => slice.endTimestamp, false),\n        offsets: {\n            value: struct({\n                from: getter(() => slice.startTimestampOffset, false),\n                to: getter(() => slice.endTimestampOffset, false),\n            }),\n        },\n        span: getter(() => slice.numberOfMonths, false),\n        timezone: {\n            ...getter(() => tz, false),\n            set: (timezone: string | undefined | null) => {\n                const currentTimezone = tz;\n                tz = withTimezone(timezone ?? undefined).tz.current;\n                if (tz !== currentTimezone) {\n                    slice = new __TimeSlice__(tz, ...args);\n                }\n            },\n        },\n    }) as TimeSlice;\n}) as TimeSliceFactory;\n\nexport const UNBOUNDED_SLICE = factory();\nexport const sinceNow = () => factory(Date.now(), RANGE_FROM);\nexport const untilNow = () => factory(Date.now(), RANGE_TO);\n\nexport default ((...args: any[]) => (args.length === 0 ? UNBOUNDED_SLICE : factory(...args))) as TimeSliceFactory;\n","import {\n    CONTROLS_ALL,\n    CONTROLS_MINIMAL,\n    CONTROLS_NONE,\n    CURSOR_BACKWARD,\n    CURSOR_BLOCK_END,\n    CURSOR_BLOCK_START,\n    CURSOR_DOWNWARD,\n    CURSOR_FORWARD,\n    CURSOR_LINE_END,\n    CURSOR_LINE_START,\n    CURSOR_NEXT_BLOCK,\n    CURSOR_PREV_BLOCK,\n    CURSOR_UPWARD,\n    DAY_OF_WEEK_FORMATS,\n    FIRST_WEEK_DAYS,\n    FRAME_SIZES,\n    RANGE_FROM,\n    RANGE_TO,\n    SHIFT_BLOCK,\n    SHIFT_FRAME,\n    SHIFT_PERIOD,\n    SELECT_MANY,\n    SELECT_NONE,\n    SELECT_ONE,\n    SELECTION_COLLAPSE,\n    SELECTION_FARTHEST,\n    SELECTION_FROM,\n    SELECTION_NEAREST,\n    SELECTION_TO,\n    CALENDAR_CONTROLS,\n    CALENDAR_SELECTIONS,\n} from './constants';\nimport { Indexed } from '../../../../primitives/auxiliary/indexed';\nimport { WatchListCallable } from '../../../../primitives/reactive/watchlist';\n\nexport type WithGetSetProperty<T = any> = {\n    get _(): T;\n    set _($: T);\n};\n\n// export type WithGetSetProperties<K extends string, T = any> = {\n//     [P in K]: WithGetSetProperty<T, X>['_'];\n// };\n\nexport type WithTimeEdges<T = {}> = {\n    from: T;\n    to: T;\n};\n\nexport type DayOfWeekLabelFormat = (typeof DAY_OF_WEEK_FORMATS)[number];\nexport type FirstWeekDay = (typeof FIRST_WEEK_DAYS)[number];\nexport type WeekDay = FirstWeekDay | 2 | 3 | 4 | 5;\nexport type Month = WeekDay | 7 | 8 | 9 | 10 | 11;\nexport type MonthDays = 28 | 29 | 30 | 31;\nexport type Time = Date | number | string;\n\nexport enum TimeFlag {\n    CURRENT = 0x1,\n    CURSOR = 0x2,\n    WEEKEND = 0x4,\n    LINE_START = 0x8,\n    LINE_END = 0x10,\n    WITHIN_BLOCK = 0x20,\n    BLOCK_START = 0x40,\n    BLOCK_END = 0x80,\n    WITHIN_RANGE = 0x100,\n    RANGE_START = 0x200,\n    RANGE_END = 0x400,\n    WITHIN_SELECTION = 0x800,\n    SELECTION_START = 0x1000,\n    SELECTION_END = 0x2000,\n    ALL = 0x3fff,\n}\n\nexport type TimeFlagProp = Exclude<keyof typeof TimeFlag, 'ALL'>;\n\nexport type TimeFrameCursor =\n    | typeof CURSOR_BACKWARD\n    | typeof CURSOR_BLOCK_END\n    | typeof CURSOR_BLOCK_START\n    | typeof CURSOR_DOWNWARD\n    | typeof CURSOR_FORWARD\n    | typeof CURSOR_LINE_END\n    | typeof CURSOR_LINE_START\n    | typeof CURSOR_NEXT_BLOCK\n    | typeof CURSOR_PREV_BLOCK\n    | typeof CURSOR_UPWARD;\n\nexport type TimeFrameSelection =\n    | typeof SELECTION_COLLAPSE\n    | typeof SELECTION_FARTHEST\n    | typeof SELECTION_FROM\n    | typeof SELECTION_NEAREST\n    | typeof SELECTION_TO;\n\nexport type TimeFrameRangeEdge = typeof RANGE_FROM | typeof RANGE_TO;\nexport type TimeFrameShift = typeof SHIFT_BLOCK | typeof SHIFT_FRAME | typeof SHIFT_PERIOD;\nexport type TimeFrameSize = (typeof FRAME_SIZES)[number];\n\ntype TimeFrameBlockMetrics<T extends string> = {\n    [K in T]: Readonly<WithTimeEdges<number>> & { readonly units: number };\n};\n\nexport type TimeFrameBlock = TimeFrameBlockMetrics<'inner' | 'outer'> &\n    Readonly<{\n        [K: number]: readonly [number, number];\n        month: Month;\n        year: number;\n    }>;\n\nexport type TimeSlice = Readonly<WithTimeEdges<number>> &\n    Readonly<{\n        offsets: Readonly<WithTimeEdges<number>>;\n        span: number;\n    }> & {\n        get timezone(): string;\n        set timezone(value: string | undefined | null);\n    };\n\nexport type TimeSliceFactory = {\n    (fromTime?: Time, toTime?: Time): TimeSlice;\n    (time?: Time, timeEdge?: TimeFrameRangeEdge): TimeSlice;\n};\n\nexport const enum CalendarShiftControlFlag {\n    PREV = 0x1,\n    BLOCK = 0x0,\n    FRAME = 0x2,\n    PERIOD = 0x4,\n}\n\nexport enum CalendarShiftControlsFlag {\n    PREV_PERIOD = CalendarShiftControlFlag.PREV | CalendarShiftControlFlag.PERIOD,\n    PREV_FRAME = CalendarShiftControlFlag.PREV | CalendarShiftControlFlag.FRAME,\n    PREV = CalendarShiftControlFlag.PREV | CalendarShiftControlFlag.BLOCK,\n    NEXT = CalendarShiftControlFlag.BLOCK,\n    NEXT_FRAME = CalendarShiftControlFlag.FRAME,\n    NEXT_PERIOD = CalendarShiftControlFlag.PERIOD,\n}\n\nexport type CalendarShiftControl = keyof typeof CalendarShiftControlsFlag;\nexport type CalendarShiftControls = (typeof CALENDAR_CONTROLS)[number];\nexport type CalendarSelection = (typeof CALENDAR_SELECTIONS)[number];\n\nexport type CalendarConfig = {\n    blocks?: TimeFrameSize;\n    controls?: CalendarShiftControls;\n    firstWeekDay?: FirstWeekDay;\n    fixedBlockHeight?: boolean;\n    highlight?: CalendarSelection | string;\n    locale?: string;\n    minified?: boolean;\n    timeslice?: TimeSlice;\n    timezone?: string;\n    trackCurrentDay?: boolean;\n};\n\nexport type CalendarFlagsRecord = Readonly<{\n    [K in TimeFlagProp]?: 1;\n}>;\n\nexport type CalendarBlock = Readonly<{\n    datetime: string;\n    label: string;\n    month: number;\n    year: number;\n}>;\n\nexport type CalendarBlockCellData = Readonly<{\n    datetime: string;\n    flags: CalendarFlagsRecord;\n    index: number;\n    label: string;\n    timestamp: number;\n}>;\n\nexport type CalendarDayOfWeekData = Readonly<{\n    flags: CalendarFlagsRecord;\n    labels: Readonly<{ [K in DayOfWeekLabelFormat]: string }>;\n}>;\n\nexport type IndexedCalendarBlock = Indexed<Indexed<CalendarBlockCellData>> & CalendarBlock;\n\nexport type CalendarGridControls = Readonly<{\n    [P in CalendarShiftControl]?: (evt?: Event) => boolean;\n}>;\n\nexport type CalendarGridControlRecord = [CalendarShiftControl, Exclude<CalendarGridControls[CalendarShiftControl], undefined>];\n\nexport type CalendarGrid = Indexed<IndexedCalendarBlock> &\n    Readonly<{\n        config: {\n            (config?: CalendarConfig): CalendarConfig;\n            cursorIndex: WithGetSetProperty<(this: CalendarConfig, evt: Event) => number | undefined>['_'];\n            shiftFactor: WithGetSetProperty<(this: CalendarConfig, evt: Event, target: CalendarShiftControl) => number | undefined>['_'];\n            watch: WithGetSetProperty<WatchListCallable<any, CalendarConfig>>['_'];\n        };\n        controls: Indexed<CalendarGridControlRecord> & CalendarGridControls;\n        cursor: (evt?: Event) => boolean;\n        highlight: WithTimeEdges<WithGetSetProperty<number | undefined>['_']> & Readonly<{ blank: boolean }>;\n        rowspan: number;\n        weekdays: Indexed<CalendarDayOfWeekData>;\n    }>;\n\nexport type CalendarFacade = {\n    (init?: CalendarConfig | TimeFrameSize | WatchListCallable<any, CalendarConfig>): Readonly<{\n        readonly grid: CalendarGrid;\n        readonly kill: () => void;\n    }>;\n    readonly controls: Readonly<{\n        ALL: typeof CONTROLS_ALL;\n        MINIMAL: typeof CONTROLS_MINIMAL;\n        NONE: typeof CONTROLS_NONE;\n    }>;\n    readonly highlight: Readonly<{\n        ONE: typeof SELECT_ONE;\n        MANY: typeof SELECT_MANY;\n        NONE: typeof SELECT_NONE;\n    }>;\n    readonly slice: TimeSliceFactory &\n        Readonly<{\n            FROM: typeof RANGE_FROM;\n            SINCE_NOW: TimeSlice;\n            TO: typeof RANGE_TO;\n            UNBOUNDED: TimeSlice;\n            UNTIL_NOW: TimeSlice;\n        }>;\n};\n\nexport type CalendarWatchAtoms = Partial<WithTimeEdges<number>> & {\n    blocks?: TimeFrameSize;\n    cells?: number;\n    controls?: CalendarShiftControls;\n    cursor?: number;\n    highlight?: CalendarSelection;\n    locale?: string;\n    minified?: boolean;\n    origin?: number;\n    today: number;\n    timezone?: string;\n};\n","import { CalendarFlagsRecord, TimeFlag, TimeFlagProp } from '../../types';\nimport { isString, struct, withFreezeProxyHandlers } from '../../../../../../utils';\n\nconst createFlagsRecord = (() => {\n    const CACHE = {} as { [K: number]: CalendarFlagsRecord };\n    const FLAG_PROPS = Object.keys(TimeFlag).filter(prop => isNaN(+prop)) as TimeFlagProp[];\n\n    const isFlagProp = (property: string | symbol): property is TimeFlagProp =>\n        property !== 'ALL' && isString(property) && FLAG_PROPS.includes(property as TimeFlagProp);\n\n    return (flags: number): CalendarFlagsRecord => {\n        const flagsTruncated = flags & TimeFlag.ALL;\n\n        if (!CACHE[flagsTruncated]) {\n            CACHE[flagsTruncated] = new Proxy(\n                struct({\n                    valueOf: { value: () => flagsTruncated },\n                }),\n                withFreezeProxyHandlers({\n                    get: (target: {}, property: string | symbol) => {\n                        switch (property) {\n                            case 'valueOf':\n                                return target.valueOf;\n                            case Symbol.toStringTag:\n                                return '_';\n                            default:\n                                if (!isFlagProp(property)) return;\n                        }\n\n                        return flagsTruncated & (TimeFlag[property] as number) ? 1 : undefined;\n                    },\n                })\n            ) as CalendarFlagsRecord;\n        }\n\n        return CACHE[flagsTruncated] as CalendarFlagsRecord;\n    };\n})();\n\nexport default createFlagsRecord;\n","import { identity, isString } from '../../../utils';\nimport type { Indexed, IndexedMapIteratorFactory } from './types';\n\nexport const indexedProxyGetTrap =\n    <V>(getter: (index: number) => V) =>\n    (target: Indexed<V>, property: string | symbol, receiver: any) => {\n        if (isString(property)) {\n            const index = +property;\n            if (index >= 0 && index < target.length) {\n                return getter(index);\n            }\n        }\n        return Reflect.get(target, property, receiver);\n    };\n\nexport const mapIteratorFactory: IndexedMapIteratorFactory = function* (callback = identity, thisArg: any) {\n    for (let i = 0; i < this.length; i++) {\n        yield callback.call(thisArg, this[i], i, this);\n    }\n};\n","import { isFunction, isNumber, struct, structFrom, truthify } from '../../../utils';\nimport { indexedProxyGetTrap, mapIteratorFactory } from './helpers';\nimport type { Indexed, IndexedMapIteratorCallback } from './types';\n\nconst __INDEXED_PROTO__ = Object.freeze(\n    struct<\n        Readonly<{\n            [Symbol.iterator]: (this: Indexed) => Generator<any>;\n            map: Indexed['map'];\n        }>\n    >({\n        [Symbol.iterator]: {\n            value(this: Indexed) {\n                return mapIteratorFactory.call(this);\n            },\n        },\n        map: {\n            value(this: Indexed, callback?: IndexedMapIteratorCallback, thisArg?: any) {\n                return [...mapIteratorFactory.call(this, callback, thisArg)];\n            },\n        },\n    })\n);\n\nexport const createIndexed = <T extends Record<any, any> = {}, V = any>(\n    iterablePropertyDescriptorsOrSize: PropertyDescriptorMap | (() => number) | number,\n    iteratorValueGetter: (index: number) => V\n): Indexed<V> & T => {\n    if (isFunction(iterablePropertyDescriptorsOrSize)) {\n        return createIndexed<T, V>(\n            {\n                length: { get: iterablePropertyDescriptorsOrSize },\n            },\n            iteratorValueGetter\n        );\n    }\n\n    if (isNumber(iterablePropertyDescriptorsOrSize)) {\n        return createIndexed<T, V>(\n            {\n                length: { value: iterablePropertyDescriptorsOrSize },\n            },\n            iteratorValueGetter\n        );\n    }\n\n    return new Proxy(structFrom(__INDEXED_PROTO__, iterablePropertyDescriptorsOrSize), {\n        get: indexedProxyGetTrap(iteratorValueGetter),\n        set: truthify,\n    }) as Indexed<V> & T;\n};\n\nexport default createIndexed;\n","import $restamper, { RestamperWithTimezone, systemToTimezone, timezoneToSystem } from '../../../core/Localization/datetime/restamper';\nimport { createWatchlist, isWatchlistUnsubscribeToken } from '../../reactive/watchlist';\nimport { enumerable, getter, isNull, struct } from '../../../utils';\nimport type { Today, TodayWatchListEntries } from './types';\nimport { clock } from '../clock';\n\nexport const today = (() => {\n    const timezones = new Map<NonNullable<RestamperWithTimezone['tz']['current']>, Today>();\n    const restamper = $restamper();\n\n    const getTimestampWithTomorrowOffset = (withTimestamp = Date.now()) => {\n        const restampedDate = new Date(timezoneToSystem(restamper, withTimestamp));\n        const currentTimestamp = systemToTimezone(restamper, restampedDate.setHours(0, 0, 0, 0)); // current day start timestamp\n        const nextTimestamp = systemToTimezone(restamper, restampedDate.setDate(restampedDate.getDate() + 1)); // next day start timestamp\n        return [currentTimestamp, nextTimestamp - currentTimestamp] as const;\n    };\n\n    return (timezone?: RestamperWithTimezone['tz']['current']) => {\n        restamper.tz = timezone;\n\n        const tz = restamper.tz.current!;\n\n        return (\n            timezones.get(tz) ??\n            (() => {\n                let timestamp: number | null = null;\n                let tomorrowOffset: number | null = null;\n                let unsubscribeClock: ReturnType<Today['subscribe']> | null = null;\n\n                const getTimestamp = () => {\n                    restamper.tz = tz; // switch restamper to this timezone\n                    return timestamp ?? getTimestampWithTomorrowOffset()[0];\n                };\n\n                const refreshTimestamps = (withTimestamp = Date.now()) => {\n                    restamper.tz = tz; // switch restamper to this timezone\n                    [timestamp, tomorrowOffset] = getTimestampWithTomorrowOffset(withTimestamp);\n                };\n\n                const { cancelSubscriptions, requestNotification, subscribe, on } = createWatchlist<TodayWatchListEntries>({\n                    timestamp: getTimestamp,\n                });\n\n                on.resume = () => {\n                    unsubscribeClock = clock.subscribe(snapshot => {\n                        if (isWatchlistUnsubscribeToken(snapshot)) return;\n\n                        const { now } = snapshot;\n\n                        if (isNull(timestamp) || isNull(tomorrowOffset)) return refreshTimestamps(now);\n                        if (now - timestamp < tomorrowOffset) return;\n\n                        refreshTimestamps(now);\n                        requestNotification();\n                    });\n                };\n\n                on.idle = () => {\n                    unsubscribeClock?.();\n                    timestamp = tomorrowOffset = unsubscribeClock = null;\n                };\n\n                const instance = struct<Today>({\n                    cancelSubscriptions: enumerable(cancelSubscriptions),\n                    timestamp: getter(getTimestamp),\n                    timezone: enumerable(tz),\n                    subscribe: enumerable(subscribe),\n                });\n\n                timezones.set(tz, instance);\n                return instance;\n            })()\n        );\n    };\n})();\n\nexport default today;\n","import { downsizeTimeFrame, resolveTimeFrameBlockSize } from '../common/utils';\nimport $timeslice, { UNBOUNDED_SLICE } from '../../timeslice';\nimport { computeTimestampOffset } from '../../utils';\nimport {\n    CURSOR_BACKWARD,\n    CURSOR_BLOCK_END,\n    CURSOR_BLOCK_START,\n    CURSOR_DOWNWARD,\n    CURSOR_FORWARD,\n    CURSOR_LINE_END,\n    CURSOR_LINE_START,\n    CURSOR_NEXT_BLOCK,\n    CURSOR_PREV_BLOCK,\n    CURSOR_UPWARD,\n    DAY_MS,\n    FIRST_WEEK_DAYS,\n    SELECTION_COLLAPSE,\n    SELECTION_FARTHEST,\n    SELECTION_FROM,\n    SELECTION_NEAREST,\n    SELECTION_TO,\n    SHIFT_BLOCK,\n    SHIFT_FRAME,\n    SHIFT_PERIOD,\n} from '../../constants';\nimport createFlagsRecord from '../common/flags';\nimport { createIndexed } from '../../../../../../primitives/auxiliary/indexed';\nimport type { WatchListCallable } from '../../../../../../primitives/reactive/watchlist';\nimport { BASE_LOCALE } from '../../../../../../core/Localization/datetime/restamper/constants';\nimport {\n    clamp,\n    enumerable,\n    isBitSafeInteger,\n    isBoolean,\n    isFunction,\n    isInfinity,\n    isNullish,\n    isUndefined,\n    mid,\n    mod,\n    struct,\n} from '../../../../../../utils';\nimport today from '../../../../../../primitives/time/today';\nimport {\n    CalendarBlock,\n    CalendarBlockCellData,\n    CalendarDayOfWeekData,\n    FirstWeekDay,\n    IndexedCalendarBlock,\n    Time,\n    TimeFrameBlock,\n    TimeFrameCursor,\n    TimeFrameSelection,\n    TimeFrameShift,\n    TimeFrameSize,\n    TimeSlice,\n} from '../../types';\n\nexport default abstract class TimeFrame {\n    static #DEFAULT_LOCALE = BASE_LOCALE;\n\n    #cursorBlockIndex: number = 0;\n    #cursorBlockStartIndex!: number;\n    #cursorBlockEndIndex!: number;\n    #cursorStartIndex: number = -1;\n    #cursorEndIndex: number = -1;\n    #cursorIndex!: number;\n    #cursorOffset!: number;\n    #cursorTimestamp!: number;\n    #dynamicBlockHeight: boolean = false;\n    #effect?: WatchListCallable;\n    #firstWeekDay: FirstWeekDay = 0;\n    #frameBlocksCached: IndexedCalendarBlock[] = [];\n    #locale: string = TimeFrame.#DEFAULT_LOCALE;\n    #maxFrameSize: TimeFrameSize = 12;\n    #selectionStartTimestamp?: number;\n    #selectionEndTimestamp?: number;\n    #size: TimeFrameSize = 1;\n    #_timeslice!: TimeSlice;\n    #timeslice!: TimeSlice;\n    #timezone!: string;\n    #today = today();\n    #unwatchCurrentDay?: () => void;\n\n    #fromTimestamp: number = -Infinity;\n    #toTimestamp: number = Infinity;\n    #fromBlockOffsetFromOrigin: number = -Infinity;\n    #toBlockOffsetFromOrigin: number = Infinity;\n    #numberOfBlocks: number = Infinity;\n    #numberOfUnits: number = 0;\n\n    protected daysInWeek: number = 0;\n    protected origin!: number;\n    protected originTimestamp!: number;\n\n    protected abstract getCursorBlockOriginTimestampOffset(timestamp: number): number;\n    protected abstract getDayOfWeekAtIndex(index: number): CalendarDayOfWeekData;\n    protected abstract getEdgeBlockOffsetsFromOrigin(): [number, number];\n    protected abstract getFormattedDataForBlockCell(time: Time): [string, string];\n    protected abstract getFormattedDataForFrameBlock(time: Time): [string, string];\n    protected abstract getFrameBlockAtIndex(index: number): TimeFrameBlock;\n    protected abstract getUnitsForFrameBlockAtIndex(index: number): number;\n    protected abstract getUnitsOffsetForTimestamp(startTimestamp: number, timestamp: number): number;\n    protected abstract reoriginate(): void;\n    protected abstract reslice(): void;\n    protected abstract shiftOrigin(offset: number): void;\n\n    abstract getTimestampAtIndex(indexOffset: number): number;\n    abstract withCurrentDayTimestamp(): void;\n\n    abstract get currentDayTimestamp(): number;\n    abstract get rowspan(): number;\n\n    #daysOfWeek = createIndexed(() => this.daysInWeek, this.getDayOfWeekAtIndex.bind(this));\n    #frameBlocks = createIndexed(() => this.#size, this.#getFrameBlockAtIndex.bind(this));\n\n    protected get fromTimestamp() {\n        return this.#fromTimestamp;\n    }\n\n    protected get toTimestamp() {\n        return this.#toTimestamp;\n    }\n\n    protected get numberOfBlocks() {\n        return this.#numberOfBlocks;\n    }\n\n    get blankSelection() {\n        return this.#selectionStartTimestamp === this.#selectionEndTimestamp && isUndefined(this.#selectionEndTimestamp);\n    }\n\n    get cursor() {\n        return this.#cursorIndex ?? -1;\n    }\n\n    get daysOfWeek() {\n        return this.#daysOfWeek;\n    }\n\n    get dynamicBlockHeight(): boolean {\n        return this.#dynamicBlockHeight;\n    }\n\n    set dynamicBlockHeight(bool: boolean | null | undefined) {\n        if (isNullish(bool)) this.#dynamicBlockHeight = !!bool;\n        else if (isBoolean(bool)) this.#dynamicBlockHeight = bool;\n    }\n\n    set effect(effect: WatchListCallable | null | undefined) {\n        if (isNullish(effect)) this.#effect = undefined;\n        else if (isFunction(effect)) this.#effect = effect;\n    }\n\n    get firstWeekDay(): FirstWeekDay {\n        return this.#firstWeekDay;\n    }\n\n    set firstWeekDay(day: FirstWeekDay | null | undefined) {\n        if (!isNullish(day)) {\n            if (!FIRST_WEEK_DAYS.includes(day)) return;\n            if (this.#firstWeekDay === (this.#firstWeekDay = day)) return;\n        } else this.firstWeekDay = 0;\n    }\n\n    get frameBlocks() {\n        return this.#frameBlocks;\n    }\n\n    get isAtEnd() {\n        return !isInfinity(this.#toBlockOffsetFromOrigin) && this.#toBlockOffsetFromOrigin === this.#size - 1;\n    }\n\n    get isAtStart() {\n        return !isInfinity(this.#fromBlockOffsetFromOrigin) && this.#fromBlockOffsetFromOrigin === 0;\n    }\n\n    get locale(): string {\n        return this.#locale;\n    }\n\n    set locale(locale: string | Intl.Locale | null | undefined) {\n        const currentLocale = this.#locale;\n\n        if (isNullish(locale)) {\n            this.#locale = TimeFrame.#DEFAULT_LOCALE;\n        } else if (typeof Intl !== 'undefined') {\n            try {\n                this.#locale = new Intl.Locale(locale as NonNullable<typeof locale>).toString();\n            } catch {\n                this.#locale = TimeFrame.#DEFAULT_LOCALE;\n            }\n        }\n\n        if (this.#locale !== currentLocale) this.refreshFrame(true);\n    }\n\n    get selectionStart() {\n        return this.#selectionStartTimestamp;\n    }\n\n    get selectionEnd() {\n        return this.#selectionEndTimestamp;\n    }\n\n    get size(): TimeFrameSize {\n        return this.#size;\n    }\n\n    set size(size: TimeFrameSize | null | undefined) {\n        const nextFrameSize = Math.min((!isNullish(size) && resolveTimeFrameBlockSize(size)) || 1, this.#maxFrameSize) as TimeFrameSize;\n        if (this.#size === (this.#size = nextFrameSize)) return;\n        this.#shiftOriginIfNecessary();\n        this.refreshFrame();\n    }\n\n    get timeslice(): TimeSlice {\n        return this.#timeslice;\n    }\n\n    set timeslice(timeslice: TimeSlice | null | undefined) {\n        if (timeslice === this.#_timeslice || (isNullish(timeslice) && this.#_timeslice === UNBOUNDED_SLICE)) return;\n        const { from, to, timezone } = (this.#_timeslice = timeslice ?? UNBOUNDED_SLICE);\n        this.#timeslice = $timeslice(from, to);\n        this.timezone = timezone;\n    }\n\n    get timezone(): string {\n        return this.#timezone;\n    }\n\n    set timezone(timezone: string | null | undefined) {\n        this.#timeslice.timezone = timezone;\n        this.#timezone = this.#timeslice.timezone;\n        this.#today = today(this.#timezone);\n\n        if (this.#unwatchCurrentDay) {\n            this.#unwatchCurrentDay();\n            this.#unwatchCurrentDay = this.#today.subscribe(this.refreshFrame.bind(this, true));\n        }\n\n        this.#applyTimeSliceUpdate();\n    }\n\n    set trackCurrentDay(bool: boolean | null | undefined) {\n        if (isBoolean(bool)) {\n            if (bool && !this.#unwatchCurrentDay) {\n                this.#unwatchCurrentDay = this.#today.subscribe(this.refreshFrame.bind(this, true));\n            } else if (!bool && this.#unwatchCurrentDay) {\n                this.#unwatchCurrentDay();\n                this.#unwatchCurrentDay = undefined;\n            }\n        } else if (isNullish(bool)) this.trackCurrentDay = false;\n    }\n\n    get units() {\n        return this.#numberOfUnits;\n    }\n\n    #applyTimeSliceUpdate() {\n        const { from, to, span, offsets } = this.#timeslice;\n\n        this.#fromTimestamp = from - offsets.from;\n        this.#toTimestamp = to - offsets.to;\n        this.#numberOfBlocks = span;\n\n        const selectionStartTimestamp = isUndefined(this.#selectionStartTimestamp)\n            ? this.#selectionStartTimestamp\n            : Math.max(this.#selectionStartTimestamp, from);\n\n        const selectionEndTimestamp = isUndefined(this.#selectionEndTimestamp)\n            ? this.#selectionEndTimestamp\n            : Math.min(this.#selectionEndTimestamp, to);\n\n        if (selectionStartTimestamp === this.#selectionStartTimestamp || selectionEndTimestamp === this.#selectionEndTimestamp) {\n            this.#selectionStartTimestamp = selectionStartTimestamp;\n            this.#selectionEndTimestamp = selectionEndTimestamp;\n        } else this.#selectionStartTimestamp = this.#selectionEndTimestamp = undefined;\n\n        this.reslice();\n        this.#maxFrameSize = downsizeTimeFrame(12, this.numberOfBlocks);\n        this.#size = downsizeTimeFrame(this.#size, this.numberOfBlocks);\n\n        this.shiftFrameToTimestamp(this.#cursorTimestamp);\n    }\n\n    #getClampedFrameOffset(frameOffset: number) {\n        return clamp(this.#fromBlockOffsetFromOrigin, frameOffset || 0, this.#toBlockOffsetFromOrigin - this.#size + 1);\n    }\n\n    #getContainedTimestamp(time?: Time, withMidRangeFallback = true): [number, number] {\n        let timestamp = new Date(time as Time).getTime();\n\n        if (isNaN(timestamp)) return this.#getContainedTimestamp(Date.now());\n\n        const { from, to } = this.#timeslice;\n        const clampedTimestamp = clamp(from, timestamp, to);\n\n        if (clampedTimestamp !== timestamp && withMidRangeFallback) {\n            timestamp = mid(from, to);\n            if (isNaN(timestamp) || isInfinity(timestamp)) {\n                timestamp = clampedTimestamp;\n            }\n        } else timestamp = clampedTimestamp;\n\n        const offset = computeTimestampOffset(timestamp, this.#timezone);\n\n        return [timestamp - offset, offset];\n    }\n\n    #getFrameBlockAtIndex(index: number): IndexedCalendarBlock | undefined {\n        if (!(isBitSafeInteger(index) && index >= 0 && index < this.#size)) return;\n\n        if (!this.#frameBlocksCached[index]) {\n            const block = this.getFrameBlockAtIndex(index);\n            if (!block) return undefined as unknown as IndexedCalendarBlock;\n\n            const [label, datetime] = this.getFormattedDataForFrameBlock(block[block.inner.from]![0] + DAY_MS / 2);\n            const blockStartIndex = block.outer.from;\n\n            this.#frameBlocksCached[index] = createIndexed<CalendarBlock>(\n                {\n                    datetime: enumerable(datetime),\n                    label: enumerable(label),\n                    length: enumerable(Math.ceil(block.outer.units / this.rowspan)),\n                    month: enumerable(block.month),\n                    year: enumerable(block.year),\n                },\n                index => {\n                    const indexOffset = index * this.rowspan;\n\n                    return createIndexed(this.rowspan, index => {\n                        const [timestamp, flags] = block[index + indexOffset] as (typeof block)[number];\n                        const [label, datetime] = this.getFormattedDataForBlockCell(timestamp + DAY_MS / 2);\n\n                        return struct({\n                            datetime: enumerable(datetime),\n                            flags: enumerable(createFlagsRecord(flags)),\n                            index: enumerable(blockStartIndex + index + indexOffset),\n                            label: enumerable(label),\n                            timestamp: enumerable(timestamp),\n                        }) as CalendarBlockCellData;\n                    });\n                }\n            );\n        }\n\n        return this.#frameBlocksCached[index] as IndexedCalendarBlock;\n    }\n\n    #shiftFrameCursorByOffset(offset: number): void {\n        if (offset === 0) return;\n        this.#cursorOffset += offset;\n        this.refreshFrame();\n    }\n\n    #shiftOrigin(offset: number) {\n        const clampedOffset = this.#getClampedFrameOffset(offset);\n        if (clampedOffset) {\n            this.shiftOrigin(clampedOffset);\n            this.#fromBlockOffsetFromOrigin -= clampedOffset;\n            this.#toBlockOffsetFromOrigin -= clampedOffset;\n            this.#cursorBlockIndex = mod(this.#cursorBlockIndex - clampedOffset, this.#size);\n            this.refreshFrame();\n        }\n    }\n\n    #shiftOriginIfNecessary() {\n        const size_1 = this.#size - 1;\n        const offset = Math.min(size_1 - (this.origin % this.#size), this.#toBlockOffsetFromOrigin) - size_1;\n        if (offset) this.#shiftOrigin(offset);\n    }\n\n    protected initialize() {\n        this.timeslice = UNBOUNDED_SLICE;\n    }\n\n    protected refreshFrame(skipCursorRefresh = false): void {\n        this.#frameBlocksCached.length = 0;\n\n        if (!(isUndefined(this.#cursorOffset) || skipCursorRefresh)) {\n            const cursorBlock = this.getFrameBlockAtIndex(this.#cursorBlockIndex) as TimeFrameBlock;\n            const { from: startIndex, to: endIndex } = cursorBlock.inner;\n            const [nextCursorTimestamp] = this.#getContainedTimestamp(this.getTimestampAtIndex(startIndex + this.#cursorOffset), false);\n\n            this.#cursorOffset = this.getUnitsOffsetForTimestamp(this.getTimestampAtIndex(startIndex), nextCursorTimestamp);\n\n            const nextCursorOffset = startIndex + this.#cursorOffset;\n            const clampedNextCursorOffset = clamp(startIndex, nextCursorOffset, endIndex);\n\n            if (clampedNextCursorOffset > nextCursorOffset) {\n                this.#cursorOffset = this.getUnitsForFrameBlockAtIndex(--this.#cursorBlockIndex) + nextCursorOffset - clampedNextCursorOffset;\n                if (this.#cursorBlockIndex >= 0) return this.refreshFrame();\n                this.#cursorBlockIndex = this.#size - 1;\n                return this.shiftFrameByOffset(-1, SHIFT_FRAME);\n            }\n\n            if (clampedNextCursorOffset < nextCursorOffset) {\n                this.#cursorOffset = nextCursorOffset - clampedNextCursorOffset - 1;\n                if (++this.#cursorBlockIndex < this.#size) return this.refreshFrame();\n                this.#cursorBlockIndex = 0;\n                return this.shiftFrameByOffset(1, SHIFT_FRAME);\n            }\n\n            this.#cursorBlockStartIndex = startIndex;\n            this.#cursorBlockEndIndex = endIndex;\n            this.#cursorTimestamp = this.#getContainedTimestamp(this.getTimestampAtIndex(nextCursorOffset), false)[0];\n            this.#cursorOffset = this.getCursorBlockOriginTimestampOffset(this.#cursorTimestamp);\n            this.#cursorIndex = startIndex + this.#cursorOffset;\n\n            const firstBlock = this.#cursorBlockIndex > 0 ? (this.getFrameBlockAtIndex(0) as TimeFrameBlock) : cursorBlock;\n            const lastBlock = this.#cursorBlockIndex < this.#size - 1 ? (this.getFrameBlockAtIndex(this.#size - 1) as TimeFrameBlock) : cursorBlock;\n\n            this.#cursorStartIndex = firstBlock.inner.from;\n            this.#cursorEndIndex = lastBlock.inner.to;\n            this.#numberOfUnits = lastBlock.outer.to + 1;\n        }\n\n        this.withCurrentDayTimestamp();\n        this.#effect?.();\n    }\n\n    shiftFrameByOffset(offset?: number, offsetType?: TimeFrameShift) {\n        if (offset && isBitSafeInteger(offset)) {\n            switch (offsetType) {\n                case SHIFT_BLOCK:\n                    return this.#shiftOrigin(offset);\n                case SHIFT_PERIOD:\n                    return this.#shiftOrigin(offset * 12);\n                case SHIFT_FRAME:\n                default:\n                    return this.#shiftOrigin(offset * this.#size);\n            }\n        }\n    }\n\n    shiftFrameCursor(nextCursorPosition: TimeFrameCursor | number) {\n        switch (nextCursorPosition) {\n            case CURSOR_BACKWARD:\n                return this.#shiftFrameCursorByOffset(-1);\n            case CURSOR_FORWARD:\n                return this.#shiftFrameCursorByOffset(1);\n            case CURSOR_UPWARD:\n                return this.#shiftFrameCursorByOffset(-this.rowspan);\n            case CURSOR_DOWNWARD:\n                return this.#shiftFrameCursorByOffset(this.rowspan);\n            case CURSOR_BLOCK_START:\n                return this.#shiftFrameCursorByOffset(this.#cursorBlockStartIndex - this.#cursorIndex);\n            case CURSOR_BLOCK_END:\n                return this.#shiftFrameCursorByOffset(this.#cursorBlockEndIndex - this.#cursorIndex);\n            case CURSOR_LINE_START:\n                return this.#shiftFrameCursorByOffset(-(this.#cursorIndex % this.rowspan));\n            case CURSOR_LINE_END:\n                return this.#shiftFrameCursorByOffset(this.rowspan - ((this.#cursorIndex % this.rowspan) + 1));\n            case CURSOR_PREV_BLOCK:\n                return this.#shiftFrameCursorByOffset(-this.getUnitsForFrameBlockAtIndex((this.#cursorBlockIndex ?? 0) - 1));\n            case CURSOR_NEXT_BLOCK:\n                return this.#shiftFrameCursorByOffset(this.getUnitsForFrameBlockAtIndex(this.#cursorBlockIndex ?? 0));\n        }\n\n        if (nextCursorPosition < 0) return;\n\n        if (nextCursorPosition >= this.#cursorStartIndex && nextCursorPosition <= this.#cursorEndIndex) {\n            return this.#shiftFrameCursorByOffset(nextCursorPosition - this.#cursorIndex);\n        }\n    }\n\n    shiftFrameToTimestamp(timestamp?: number) {\n        this.#cursorTimestamp = this.originTimestamp = this.#getContainedTimestamp(timestamp, false).reduce((a, b) => a + b);\n        this.#cursorOffset = this.getCursorBlockOriginTimestampOffset(this.#cursorTimestamp);\n        this.reoriginate();\n\n        [this.#fromBlockOffsetFromOrigin, this.#toBlockOffsetFromOrigin] = this.getEdgeBlockOffsetsFromOrigin();\n        this.#shiftOriginIfNecessary();\n        this.refreshFrame();\n\n        this.#shiftFrameCursorByOffset(this.getUnitsOffsetForTimestamp(this.getTimestampAtIndex(this.#cursorIndex), this.#cursorTimestamp));\n    }\n\n    clearSelection() {\n        if (this.blankSelection) return;\n        this.#selectionStartTimestamp = this.#selectionEndTimestamp = undefined;\n        this.refreshFrame(true);\n    }\n\n    updateSelection(time: Time, selection?: TimeFrameSelection) {\n        const currentStart = this.#selectionStartTimestamp as number;\n        const currentEnd = this.#selectionEndTimestamp as number;\n        const timestamp = this.#getContainedTimestamp(time, false).reduce((a, b) => a + b);\n\n        if (selection === SELECTION_FARTHEST) {\n            if (timestamp <= currentStart) selection = SELECTION_TO;\n            else if (timestamp >= currentEnd) selection = SELECTION_FROM;\n        }\n\n        switch (selection) {\n            case SELECTION_FROM:\n                this.#selectionStartTimestamp = timestamp;\n                this.#selectionEndTimestamp = Math.max(this.#selectionStartTimestamp, currentEnd ?? timestamp);\n                break;\n            case SELECTION_TO:\n                this.#selectionEndTimestamp = timestamp;\n                this.#selectionStartTimestamp = Math.min(currentStart ?? timestamp, this.#selectionEndTimestamp);\n                break;\n            case SELECTION_FARTHEST:\n            case SELECTION_NEAREST: {\n                let startDistance = Math.abs(timestamp - (currentStart ?? timestamp));\n                let endDistance = Math.abs(timestamp - (currentEnd ?? timestamp));\n\n                if (selection === SELECTION_NEAREST) {\n                    [startDistance, endDistance] = [endDistance, startDistance];\n                }\n\n                if (startDistance > endDistance) {\n                    this.#selectionStartTimestamp = timestamp;\n                } else this.#selectionEndTimestamp = timestamp;\n\n                break;\n            }\n            case SELECTION_COLLAPSE:\n            default:\n                this.#selectionStartTimestamp = this.#selectionEndTimestamp = timestamp;\n                break;\n        }\n\n        if (this.#selectionStartTimestamp !== currentStart || this.#selectionEndTimestamp !== currentEnd) {\n            this.refreshFrame(true);\n        }\n    }\n}\n","import TimeFrame from './TimeFrame';\nimport { getWeekendDays } from '../common/utils';\nimport { computeTimestampOffset, getEdgesDistance, getMonthDays, getTimezoneDateParts, startOfMonth, startOfWeek, withTimezone } from '../../utils';\nimport { DAY_MS, DAY_OF_WEEK_FORMATS, MAXIMUM_MONTH_UNITS } from '../../constants';\nimport { systemToTimezone, timezoneToSystem } from '../../../../../../core/Localization/datetime/restamper';\nimport createFlagsRecord from '../common/flags';\nimport {\n    enumerable,\n    isBitSafeInteger,\n    isInfinity,\n    isString,\n    isUndefined,\n    struct,\n    structFrom,\n    withFreezeProxyHandlers,\n} from '../../../../../../utils';\nimport {\n    CalendarDayOfWeekData,\n    DayOfWeekLabelFormat,\n    FirstWeekDay,\n    Month,\n    MonthDays,\n    Time,\n    TimeFlag,\n    TimeFrameBlock,\n    TimeFrameSelection,\n    WeekDay,\n} from '../../types';\n\nexport default class MonthFrame extends TimeFrame {\n    #daysInWeek = 7 as const;\n    #daysOfWeekCached: CalendarDayOfWeekData[] = [];\n    #daysOfWeekend: readonly WeekDay[] = getWeekendDays(this.firstWeekDay);\n    #currentDayTimestamp!: number;\n    #fromTimestamp: number = -Infinity;\n    #toTimestamp: number = Infinity;\n    #numberOfBlocks: number = Infinity;\n    #originMonthStartOffset!: WeekDay;\n    #originMonthStartTimestamp!: number;\n    #originYear!: number;\n    #selectionFromTimestamp?: number;\n    #selectionToTimestamp?: number;\n\n    protected daysInWeek: number = this.#daysInWeek;\n    protected declare origin: Month;\n\n    constructor() {\n        super();\n        this.initialize();\n    }\n\n    protected get fromTimestamp() {\n        return this.#fromTimestamp;\n    }\n\n    protected get toTimestamp() {\n        return this.#toTimestamp;\n    }\n\n    protected get numberOfBlocks() {\n        return this.#numberOfBlocks;\n    }\n\n    get currentDayTimestamp() {\n        return this.#currentDayTimestamp;\n    }\n\n    get dynamicBlockHeight(): boolean {\n        return super.dynamicBlockHeight;\n    }\n\n    set dynamicBlockHeight(bool: boolean | null | undefined) {\n        const current = this.dynamicBlockHeight;\n        super.dynamicBlockHeight = bool;\n        if (this.dynamicBlockHeight !== current) this.refreshFrame(true);\n    }\n\n    get rowspan() {\n        return this.#daysInWeek;\n    }\n\n    get firstWeekDay(): FirstWeekDay {\n        return super.firstWeekDay;\n    }\n\n    set firstWeekDay(day: FirstWeekDay | null | undefined) {\n        const current = this.firstWeekDay;\n        super.firstWeekDay = day;\n\n        if (this.firstWeekDay === current) return;\n\n        this.#daysOfWeekCached.length = 0;\n        this.#daysOfWeekend = getWeekendDays(this.firstWeekDay);\n        this.reoriginate();\n        this.refreshFrame();\n    }\n\n    #getBlockTimestampOffsetFromOrigin(timestamp: number) {\n        const offset = getEdgesDistance(timestamp, this.originTimestamp, this.timezone);\n        return timestamp < this.originTimestamp ? 0 - offset : offset;\n    }\n\n    #getDayOffsetTimestamp(fromTimestamp: Date | number, dayOffset = 0) {\n        const restamper = withTimezone(this.timezone);\n        const restampedTimestamp = timezoneToSystem(restamper, fromTimestamp);\n        const timestamp = systemToTimezone(restamper, restampedTimestamp + dayOffset * DAY_MS);\n        let [, , , hrs, mins] = getTimezoneDateParts(timestamp, this.timezone);\n        let timeOffset = 0;\n\n        if (hrs > 0 || mins > 0) {\n            hrs = (hrs > 12 ? 24 : 0) - hrs;\n            mins = (hrs > 1 ? 1 : -1) * mins;\n            timeOffset = hrs * 3600000 + mins * 60000;\n        }\n\n        return timestamp + timeOffset;\n    }\n\n    #getStartForTimestamp(timestamp?: number) {\n        return isUndefined(timestamp) || isInfinity(timestamp) ? timestamp : timestamp - computeTimestampOffset(timestamp, this.timezone);\n    }\n\n    #updateSelectionTimestamps() {\n        this.#selectionFromTimestamp = this.#getStartForTimestamp(this.selectionStart);\n        this.#selectionToTimestamp = this.#getStartForTimestamp(this.selectionEnd);\n    }\n\n    protected getCursorBlockOriginTimestampOffset(timestamp: number): number {\n        return getTimezoneDateParts(timestamp, this.timezone)[2] - 1;\n    }\n\n    protected getDayOfWeekAtIndex(index: number) {\n        if (!this.#daysOfWeekCached[index]) {\n            const date = new Date(this.getTimestampAtIndex(index));\n            let flags = 0;\n\n            if (this.#daysOfWeekend.includes(index as WeekDay)) flags |= TimeFlag.WEEKEND;\n            if (index === 0) flags |= TimeFlag.LINE_START;\n            else if (index === 6) flags |= TimeFlag.LINE_END;\n\n            const labelDescriptors = {} as {\n                [K in DayOfWeekLabelFormat]: {\n                    enumerable: true;\n                    value: string;\n                };\n            };\n\n            for (const format of DAY_OF_WEEK_FORMATS) {\n                labelDescriptors[format] = enumerable(\n                    date.toLocaleDateString(this.locale, { weekday: format, timeZone: this.timezone })\n                ) as (typeof labelDescriptors)[typeof format];\n            }\n\n            this.#daysOfWeekCached[index] = struct({\n                flags: enumerable(createFlagsRecord(flags)),\n                labels: enumerable(struct(labelDescriptors)),\n            }) as CalendarDayOfWeekData;\n        }\n\n        return this.#daysOfWeekCached[index] as CalendarDayOfWeekData;\n    }\n\n    protected getEdgeBlockOffsetsFromOrigin(): [number, number] {\n        return [this.#getBlockTimestampOffsetFromOrigin(this.#fromTimestamp), this.#getBlockTimestampOffsetFromOrigin(this.#toTimestamp)];\n    }\n\n    protected getFormattedDataForBlockCell(time: Time): [string, string] {\n        const [year, month, date] = getTimezoneDateParts(time, this.timezone);\n        return [Number(date).toLocaleString(this.locale), `${year}-${`${month + 1}`.padStart(2, '0')}-${`${date}`.padStart(2, '0')}`];\n    }\n\n    protected getFormattedDataForFrameBlock(time: Time): [string, string] {\n        const [year, month] = getTimezoneDateParts(time, this.timezone);\n        return [\n            new Date(time).toLocaleDateString(this.locale, { month: 'long', year: 'numeric', timeZone: this.timezone }),\n            `${year}-${`${month + 1}`.padStart(2, '0')}`,\n        ];\n    }\n\n    protected getFrameBlockAtIndex(index: number): TimeFrameBlock {\n        const [monthDays, month, year] = getMonthDays(this.origin, this.#originYear, index);\n        const innerStartIndex = index > 0 ? this.getFrameBlockAtIndex(index - 1).inner.to + 1 : this.#originMonthStartOffset;\n        const innerEndIndex = innerStartIndex + monthDays - 1;\n        const outerStartIndex = Math.floor(innerStartIndex / 7) * 7;\n        const outerEndAfterIndex = this.dynamicBlockHeight ? Math.ceil((innerEndIndex + 1) / 7) * 7 : outerStartIndex + MAXIMUM_MONTH_UNITS;\n        const numberOfUnits = this.dynamicBlockHeight ? outerEndAfterIndex - outerStartIndex : MAXIMUM_MONTH_UNITS;\n\n        const proxyForIndexPropertyAccess = new Proxy(\n            struct(),\n            withFreezeProxyHandlers({\n                get: (target: {}, property: string | symbol, receiver: {}) => {\n                    if (isString(property)) {\n                        const offset = +property;\n\n                        if (isBitSafeInteger(offset) && offset >= 0 && offset < numberOfUnits) {\n                            const index = outerStartIndex + offset;\n                            const timestamp = this.getTimestampAtIndex(index);\n                            const weekDay = (index % this.#daysInWeek) as WeekDay;\n\n                            let flags = timestamp === this.currentDayTimestamp ? TimeFlag.CURRENT : 0;\n\n                            if (index === this.cursor) flags |= TimeFlag.CURSOR;\n                            if (this.#daysOfWeekend.includes(weekDay)) flags |= TimeFlag.WEEKEND;\n\n                            if (weekDay === 0) flags |= TimeFlag.LINE_START;\n                            else if (weekDay === this.#daysInWeek - 1) flags |= TimeFlag.LINE_END;\n\n                            if (index >= innerStartIndex && index <= innerEndIndex) {\n                                if (index === innerStartIndex) flags |= TimeFlag.BLOCK_START;\n                                else if (index === innerEndIndex) flags |= TimeFlag.BLOCK_END;\n                                flags |= TimeFlag.WITHIN_BLOCK;\n                            }\n\n                            if (timestamp >= this.fromTimestamp && timestamp <= this.toTimestamp) {\n                                if (timestamp === this.fromTimestamp) flags |= TimeFlag.RANGE_START;\n                                if (timestamp === this.toTimestamp) flags |= TimeFlag.RANGE_END;\n                                flags |= TimeFlag.WITHIN_RANGE;\n                            }\n\n                            if (timestamp >= (this.#selectionFromTimestamp as number) && timestamp <= (this.#selectionToTimestamp as number)) {\n                                if (timestamp === (this.#selectionFromTimestamp as number)) flags |= TimeFlag.SELECTION_START;\n                                if (timestamp === (this.#selectionToTimestamp as number)) flags |= TimeFlag.SELECTION_END;\n                                flags |= TimeFlag.WITHIN_SELECTION;\n                            }\n\n                            return [timestamp, flags] as const;\n                        }\n                    }\n\n                    return Reflect.get(target, property, receiver);\n                },\n            })\n        );\n\n        return structFrom(proxyForIndexPropertyAccess, {\n            inner: {\n                value: struct({\n                    from: { value: innerStartIndex },\n                    to: { value: innerEndIndex },\n                    units: { value: monthDays },\n                }),\n            },\n            month: { value: month },\n            outer: {\n                value: struct({\n                    from: { value: outerStartIndex },\n                    to: { value: outerEndAfterIndex - 1 },\n                    units: { value: numberOfUnits },\n                }),\n            },\n            year: { value: year },\n        }) as TimeFrameBlock;\n    }\n\n    protected getUnitsForFrameBlockAtIndex(index: number): MonthDays {\n        return getMonthDays(this.origin, this.#originYear, index)[0];\n    }\n\n    protected getUnitsOffsetForTimestamp(startTimestamp: number, timestamp: number) {\n        return Math.round((timestamp - startTimestamp) / DAY_MS);\n    }\n\n    protected reoriginate() {\n        this.originTimestamp = startOfMonth(this.originTimestamp, this.timezone);\n        const [originYear, originMonth] = getTimezoneDateParts(this.originTimestamp, this.timezone);\n        const weekStartTimestamp = startOfWeek(this.originTimestamp, this.timezone, this.firstWeekDay);\n\n        this.origin = originMonth as Month;\n        this.#originYear = originYear;\n        this.#originMonthStartOffset = this.getUnitsOffsetForTimestamp(weekStartTimestamp, this.originTimestamp) as WeekDay;\n        this.#originMonthStartTimestamp = this.#getDayOffsetTimestamp(this.originTimestamp, -this.#originMonthStartOffset);\n    }\n\n    protected reslice() {\n        this.#updateSelectionTimestamps();\n        this.#fromTimestamp = this.#getStartForTimestamp(super.fromTimestamp) as number;\n        this.#toTimestamp = this.#getStartForTimestamp(super.toTimestamp) as number;\n        this.#numberOfBlocks = getEdgesDistance(super.fromTimestamp, super.toTimestamp, this.timezone) + 1;\n    }\n\n    protected shiftOrigin(offset: number) {\n        const [year, month] = getTimezoneDateParts(this.originTimestamp, this.timezone);\n        const [, offsetMonth, offsetYear] = getMonthDays(month as Month, year, offset);\n\n        const restamper = withTimezone(this.timezone);\n        const originTimestamp = new Date(timezoneToSystem(restamper, this.originTimestamp)).setFullYear(offsetYear, offsetMonth);\n\n        this.originTimestamp = systemToTimezone(restamper, originTimestamp);\n        this.reoriginate();\n    }\n\n    clearSelection() {\n        super.clearSelection();\n        this.#updateSelectionTimestamps();\n        this.refreshFrame(true);\n    }\n\n    getTimestampAtIndex(indexOffset: number) {\n        return this.#getDayOffsetTimestamp(this.#originMonthStartTimestamp, indexOffset);\n    }\n\n    updateSelection(time: Time, selection?: TimeFrameSelection) {\n        super.updateSelection(time, selection);\n        this.#updateSelectionTimestamps();\n        this.refreshFrame(true);\n    }\n\n    withCurrentDayTimestamp() {\n        this.#currentDayTimestamp = this.#getStartForTimestamp(Date.now()) as number;\n    }\n}\n","import { enumerable, struct } from '../../../utils';\nimport type { EffectStack } from './types';\n\nconst _NO_EXCEPTION = Symbol('<<NO_EXCEPTION>>');\n\nexport const createEffectStack = <Effect extends (...args: any[]) => any>(effect: Effect) => {\n    const _stack: any[] = [];\n\n    const _bindFn: EffectStack<Effect>['bind'] = fn =>\n        function (this: unknown, ...args) {\n            let exception: unknown = _NO_EXCEPTION;\n            try {\n                _stack.push(fn);\n                return fn.call(this, ...args);\n            } catch (ex) {\n                throw (exception = ex);\n            } finally {\n                _stack.pop();\n                if (_stack.length === 0 && exception === _NO_EXCEPTION) effect();\n            }\n        } as typeof fn;\n\n    return struct<EffectStack<Effect>>({\n        bind: enumerable(_bindFn),\n        effect: enumerable(effect),\n    });\n};\n\nexport default createEffectStack;\n","import { InteractionKeyCode } from '../../../../types';\nimport {\n    CALENDAR_CONTROLS,\n    CALENDAR_SELECTIONS,\n    CONTROLS_ALL,\n    CONTROLS_MINIMAL,\n    CONTROLS_NONE,\n    CURSOR_BACKWARD,\n    CURSOR_BLOCK_END,\n    CURSOR_BLOCK_START,\n    CURSOR_DOWNWARD,\n    CURSOR_FORWARD,\n    CURSOR_LINE_END,\n    CURSOR_LINE_START,\n    CURSOR_NEXT_BLOCK,\n    CURSOR_PREV_BLOCK,\n    CURSOR_UPWARD,\n    FIRST_WEEK_DAYS,\n    FRAME_SIZES,\n    SELECT_MANY,\n    SELECT_NONE,\n    SELECT_ONE,\n    SELECTION_COLLAPSE,\n    SELECTION_FROM,\n    SELECTION_TO,\n    SHIFT_BLOCK,\n    SHIFT_FRAME,\n    SHIFT_PERIOD,\n} from '../constants';\nimport { withTimezone } from '../utils';\nimport { MonthFrame, TimeFrame /* , YearFrame */ } from '../timeframe';\nimport { createIndexed } from '../../../../../primitives/auxiliary/indexed';\nimport { createEffectStack, EffectStack } from '../../../../../primitives/reactive/effectStack';\nimport { systemToTimezone, timezoneToSystem } from '../../../../../core/Localization/datetime/restamper';\nimport today from '../../../../../primitives/time/today';\nimport {\n    createWatchlist,\n    isWatchlistUnsubscribeToken,\n    WatchList,\n    WatchListCallable,\n    WatchListSubscriptionCallback,\n} from '../../../../../primitives/reactive/watchlist';\nimport {\n    boolify,\n    boolOrTrue,\n    EMPTY_OBJECT,\n    isBitSafeInteger,\n    isFunction,\n    isNullish,\n    isString,\n    isUndefined,\n    noop,\n    pickFrom,\n    struct,\n    structFrom,\n    withFreezeProxyHandlers,\n} from '../../../../../utils';\nimport {\n    CalendarConfig,\n    CalendarDayOfWeekData,\n    CalendarGrid,\n    CalendarGridControlRecord,\n    CalendarSelection,\n    CalendarShiftControl,\n    CalendarShiftControlFlag,\n    CalendarShiftControlsFlag,\n    CalendarWatchAtoms,\n} from '../types';\n\nexport default class Calendar {\n    grid: CalendarGrid;\n    kill: () => void;\n    #config = EMPTY_OBJECT as CalendarConfig;\n    #destructed = false;\n    #frame?: TimeFrame;\n    #highlightFrom?: number;\n    #highlightTo?: number;\n    #highlightInProgress = false;\n    #highlightSelection?: CalendarSelection = SELECT_NONE;\n    #pendingWatchNotification = false;\n    #rangeOffsets?: [number, number, number, number, number, number];\n    #lastHighlightRange?: string = this.#rangeOffsets?.join(' ');\n\n    #cursorIndexFromEvent?: CalendarGrid['config']['cursorIndex'];\n    #shiftFactorFromEvent?: CalendarGrid['config']['shiftFactor'];\n    #watchCallback?: CalendarGrid['config']['watch'];\n    #watchableEffect?: () => void;\n    #unwatch?: () => void;\n\n    #today = today();\n    #shiftControlsHandles: CalendarGridControlRecord[1][] = [];\n    #shiftControlsList?: CalendarShiftControl[];\n\n    #shiftControls = new Proxy(\n        createIndexed(() => this.#shiftControlsList?.length ?? 0, this.#getShiftControlRecordAtIndex.bind(this)),\n        withFreezeProxyHandlers({\n            get: (target: {}, property: string | symbol, receiver: {}): any => {\n                const index = this.#shiftControlsList?.indexOf(property as CalendarShiftControl) ?? -1;\n                return index >= 0 ? this.#getShiftControlRecordAtIndex(index)?.[1] : Reflect.get(target, property, receiver);\n            },\n        })\n    ) as CalendarGrid['controls'];\n\n    #watchlist?: WatchList<CalendarWatchAtoms> = createWatchlist({\n        blocks: () => this.#frame?.size,\n        cells: () => this.#frame?.units,\n        controls: () => pickFrom(CALENDAR_CONTROLS, this.#config.controls),\n        cursor: () => this.#frame?.cursor,\n        from: () => this.#frame?.selectionStart,\n        highlight: () => this.#highlightSelection,\n        locale: () => this.#frame?.locale,\n        minified: () => boolify(this.#config.minified),\n        origin: () => this.#frame?.getTimestampAtIndex(0),\n        timezone: () => this.#frame?.timezone,\n        to: () => this.#frame?.selectionEnd,\n        today: () => this.#today.timestamp,\n    });\n\n    #lastWatchableSnapshot?: CalendarWatchAtoms = this.#watchlist?.snapshot;\n\n    #chainedNotifyEffectStack?: EffectStack = createEffectStack(() => this.#watchCallback && this.#watchlist?.requestNotification());\n\n    #chainedWatchEffectStack?: EffectStack = createEffectStack(() => this.#watchCallback?.call(this.#currentConfig));\n\n    #grid = structFrom(\n        createIndexed(\n            () => this.#frame?.size ?? 0,\n            index => this.#frame?.frameBlocks[index]\n        ),\n        {\n            config: {\n                value: Object.defineProperties(\n                    (config?: CalendarConfig) => {\n                        config && this.#configure(config);\n                        return this.#currentConfig;\n                    },\n                    {\n                        cursorIndex: {\n                            get: () => this.#cursorIndexFromEvent,\n                            set: (fn: CalendarGrid['config']['cursorIndex'] | null | undefined) => {\n                                if (this.#destructed) return;\n                                if (isNullish(fn)) this.#cursorIndexFromEvent = undefined;\n                                else if (isFunction(fn)) this.#cursorIndexFromEvent = fn;\n                            },\n                        },\n                        shiftFactor: {\n                            get: () => this.#shiftFactorFromEvent,\n                            set: (fn: CalendarGrid['config']['shiftFactor'] | null | undefined) => {\n                                if (this.#destructed) return;\n                                if (isNullish(fn)) this.#shiftFactorFromEvent = undefined;\n                                else if (isFunction(fn)) this.#shiftFactorFromEvent = fn;\n                            },\n                        },\n                        watch: {\n                            get: () => this.#watchCallback,\n                            set: (fn: CalendarGrid['config']['watch'] | null | undefined) => {\n                                if (this.#destructed) return;\n                                if (isFunction(fn)) {\n                                    this.#watchCallback = fn;\n\n                                    if (!this.#watchableEffect) {\n                                        const watchCallback = this.#chainedNotifyEffectStack?.bind(Calendar.#watchableEffectCallback.bind(this));\n\n                                        if (watchCallback) {\n                                            this.#watchableEffect = this.#chainedNotifyEffectStack?.bind(noop);\n                                            this.#unwatch = this.#watchlist?.subscribe(this.#chainedWatchEffectStack?.bind(watchCallback));\n                                            this.#frame && (this.#frame.effect = this.#watchableEffect);\n                                        }\n                                    }\n\n                                    if (!this.#pendingWatchNotification) return;\n\n                                    this.#pendingWatchNotification = false;\n                                    this.#watchableEffect?.();\n                                } else if (isNullish(fn)) this.#watchCallback = undefined;\n                            },\n                        },\n                    }\n                ),\n            },\n            controls: { value: this.#shiftControls },\n            cursor: {\n                value: Object.defineProperties(\n                    (evt?: Event) => Calendar.#withNotifyEffect.call(this, (evt?: Event) => !!(evt && this.#cursorHandle(evt)))(evt),\n                    {\n                        valueOf: { value: () => this.#frame?.cursor ?? -1 },\n                    }\n                ),\n            },\n            highlight: {\n                value: (() => {\n                    const blank = () => this.#highlightFrom === this.#highlightTo && isUndefined(this.#highlightTo);\n\n                    const setter = (selection: typeof SELECTION_FROM | typeof SELECTION_TO) => (time?: number | null) =>\n                        Calendar.#withNotifyEffect.call(this, (time?: number | null) => {\n                            if (this.#destructed || !this.#highlightSelection || this.#highlightSelection === SELECT_NONE) return;\n                            if (isNullish(time)) return this.#clearHighlight();\n\n                            if (!blank()) {\n                                this.#frame?.updateSelection(time, selection);\n                                if (this.#highlightSelection === SELECT_MANY && this.#rangeOffsets) {\n                                    this.#rangeHighlight(time, selection === SELECTION_FROM ? SELECTION_TO : SELECTION_FROM, this.#rangeOffsets);\n                                }\n                            } else this.#frame?.updateSelection(time, SELECTION_COLLAPSE);\n\n                            this.#highlightFrom = this.#frame?.selectionStart;\n                            this.#highlightTo = this.#frame?.selectionEnd;\n                            this.#frame?.shiftFrameToTimestamp(selection === SELECTION_FROM ? this.#highlightFrom : this.#highlightTo);\n                        })(time);\n\n                    return struct({\n                        blank: { get: blank },\n                        from: {\n                            get: () => this.#frame?.selectionStart ?? this.#highlightFrom,\n                            set: setter(SELECTION_FROM),\n                        },\n                        to: {\n                            get: () => this.#frame?.selectionEnd ?? this.#highlightTo,\n                            set: setter(SELECTION_TO),\n                        },\n                    });\n                })(),\n            },\n            rowspan: { get: () => this.#frame?.rowspan ?? 0 },\n            weekdays: { get: () => this.#frame?.daysOfWeek ?? Calendar.#DAYS_OF_WEEK_FALLBACK },\n        }\n    ) as CalendarGrid;\n\n    static #RANGE_OFFSETS_FORMAT_REGEX = /^(?:0|[1-9]\\d*)(\\s+(?:0|[1-9]\\d*)?){0,5}?$/;\n    static #CURSOR_POINTER_INTERACTION_EVENTS = ['click', 'mouseover', 'pointerover'];\n    static #DAYS_OF_WEEK_FALLBACK = createIndexed(0, noop as () => CalendarDayOfWeekData);\n    static #SHIFT_ACTIVATION_KEYS = [InteractionKeyCode.ENTER, InteractionKeyCode.SPACE];\n    static #SHIFT_ALL_CONTROLS = Object.keys(CalendarShiftControlsFlag).filter(control => isNaN(+control)) as CalendarShiftControl[];\n    static #SHIFT_MINIMAL_CONTROLS = ['PREV', 'NEXT'] as CalendarShiftControl[];\n\n    static #getOffsetsFromRange(range?: string): [number, number, number, number, number, number] | undefined {\n        if (!isString(range)) return;\n        if (!Calendar.#RANGE_OFFSETS_FORMAT_REGEX.test(range)) return;\n        const offsets = range.split(/\\s+/);\n        return Array.from({ length: 6 }, (_, index) => parseInt(offsets[index] ?? '0')) as [number, number, number, number, number, number];\n    }\n\n    static #getShiftOffsetType(flags: number) {\n        switch (flags & ~CalendarShiftControlFlag.PREV) {\n            case CalendarShiftControlFlag.FRAME:\n                return SHIFT_FRAME;\n            case CalendarShiftControlFlag.PERIOD:\n                return SHIFT_PERIOD;\n            case CalendarShiftControlFlag.BLOCK:\n            default:\n                return SHIFT_BLOCK;\n        }\n    }\n\n    static #getShiftOffsetUnit(flags: number) {\n        return flags & CalendarShiftControlFlag.PREV ? -1 : 1;\n    }\n\n    static #watchableEffectCallback: WatchListSubscriptionCallback<CalendarWatchAtoms> = function (this: Calendar, snapshot) {\n        if (isWatchlistUnsubscribeToken(snapshot)) return;\n\n        let controlsChanged = false;\n        let highlightChanged = false;\n        let selectionChanged = false;\n        const highlightRange = this.#rangeOffsets?.join(' ');\n\n        for (const key of Object.keys(snapshot) as (keyof typeof snapshot)[]) {\n            if (snapshot[key] === this.#lastWatchableSnapshot?.[key]) continue;\n            if (key === 'controls') controlsChanged = true;\n            else if (key === 'highlight') highlightChanged = true;\n            else if (key === 'from' || key === 'to') selectionChanged = true;\n        }\n\n        if (this.#lastHighlightRange !== highlightRange) {\n            this.#lastHighlightRange = highlightRange;\n            highlightChanged = true;\n        }\n\n        this.#lastWatchableSnapshot = snapshot;\n\n        if (this.#highlightInProgress && !selectionChanged) this.#restoreHighlight();\n        if (controlsChanged) this.#refreshShiftControls();\n        if (highlightChanged) this.#refreshHighlighting();\n    };\n\n    static #withNotifyEffect<T extends WatchListCallable = WatchListCallable>(this: Calendar, fn: T) {\n        return this.#chainedNotifyEffectStack?.bind(fn) ?? fn;\n    }\n\n    constructor() {\n        this.grid = this.#grid;\n        this.kill = this.#destruct.bind(this);\n    }\n\n    get #currentConfig() {\n        return { ...this.#config } as CalendarConfig;\n    }\n\n    get #timeframe() {\n        // return (this.#config.minified as boolean) ? new YearFrame() : new MonthFrame();\n        return new MonthFrame();\n    }\n\n    #canShiftInDirection(shiftDirection: 1 | -1) {\n        return !!this.#frame && !(shiftDirection > 0 ? this.#frame.isAtEnd : this.#frame.isAtStart);\n    }\n\n    #configure(config: CalendarConfig) {\n        if (this.#destructed) return;\n\n        this.#rangeOffsets = undefined;\n\n        const highlight = config?.highlight;\n        const minified = boolify(this.#config.minified);\n\n        if (!isString(highlight)) {\n            this.#highlightSelection = pickFrom(CALENDAR_SELECTIONS, highlight, this.#highlightSelection);\n        } else if ((this.#rangeOffsets = Calendar.#getOffsetsFromRange(highlight))) {\n            this.#highlightSelection = SELECT_MANY;\n        }\n\n        this.#config = {\n            ...this.#config,\n            ...config,\n            blocks: pickFrom(FRAME_SIZES, config?.blocks, this.#config.blocks),\n            controls: pickFrom(CALENDAR_CONTROLS, config?.controls, this.#config.controls),\n            firstWeekDay: pickFrom(FIRST_WEEK_DAYS, config?.firstWeekDay, this.#config.firstWeekDay),\n            fixedBlockHeight: boolify(config?.fixedBlockHeight, this.#config.fixedBlockHeight),\n            highlight: this.#highlightSelection,\n            minified: boolify(config?.minified, this.#config.minified),\n            trackCurrentDay: boolify(config?.trackCurrentDay, this.#config.trackCurrentDay),\n        };\n\n        if (!isFunction(this.#watchCallback)) {\n            if (!this.#frame) {\n                this.#frame = this.#timeframe;\n                this.#reframe();\n                this.#refreshShiftControls();\n                this.#refreshHighlighting();\n            } else this.#pendingWatchNotification = true;\n\n            return;\n        }\n\n        if (!this.#frame || minified !== this.#config.minified) {\n            this.#frame = this.#timeframe;\n            this.#frame.effect = this.#watchableEffect;\n        }\n\n        this.#reframe();\n        this.#watchableEffect?.();\n    }\n\n    #cursorHandle(evt?: Event): true | undefined {\n        if (!(evt && this.#frame && isFunction(this.#watchCallback))) return;\n\n        if (evt instanceof KeyboardEvent) {\n            switch (evt.code) {\n                case InteractionKeyCode.ARROW_LEFT:\n                    this.#frame.shiftFrameCursor(CURSOR_BACKWARD);\n                    break;\n                case InteractionKeyCode.ARROW_RIGHT:\n                    this.#frame.shiftFrameCursor(CURSOR_FORWARD);\n                    break;\n                case InteractionKeyCode.ARROW_UP:\n                    this.#frame.shiftFrameCursor(CURSOR_UPWARD);\n                    break;\n                case InteractionKeyCode.ARROW_DOWN:\n                    this.#frame.shiftFrameCursor(CURSOR_DOWNWARD);\n                    break;\n                case InteractionKeyCode.HOME:\n                    this.#frame.shiftFrameCursor(evt.ctrlKey ? CURSOR_BLOCK_START : CURSOR_LINE_START);\n                    break;\n                case InteractionKeyCode.END:\n                    this.#frame.shiftFrameCursor(evt.ctrlKey ? CURSOR_BLOCK_END : CURSOR_LINE_END);\n                    break;\n                case InteractionKeyCode.PAGE_UP:\n                    evt.shiftKey ? this.#frame.shiftFrameByOffset(-1, SHIFT_PERIOD) : this.#frame.shiftFrameCursor(CURSOR_PREV_BLOCK);\n                    break;\n                case InteractionKeyCode.PAGE_DOWN:\n                    evt.shiftKey ? this.#frame.shiftFrameByOffset(1, SHIFT_PERIOD) : this.#frame.shiftFrameCursor(CURSOR_NEXT_BLOCK);\n                    break;\n                case InteractionKeyCode.SPACE:\n                case InteractionKeyCode.ENTER:\n                    this.#highlight();\n                    return true;\n                default:\n                    return;\n            }\n\n            this.#highlightInProgress && this.#highlight(EMPTY_OBJECT);\n            return true;\n        }\n\n        if (evt instanceof MouseEvent && Calendar.#CURSOR_POINTER_INTERACTION_EVENTS.includes(evt.type) && isFunction(this.#cursorIndexFromEvent)) {\n            const cursorIndex = this.#cursorIndexFromEvent.call(this.#currentConfig, evt);\n\n            if (!isBitSafeInteger(cursorIndex)) return;\n\n            const isClick = evt.type === 'click';\n\n            if (!(isClick || this.#highlightInProgress)) return;\n            this.#frame.shiftFrameCursor(cursorIndex);\n\n            if (this.#frame.cursor === cursorIndex) {\n                isClick ? this.#highlight() : this.#highlight(EMPTY_OBJECT);\n                return true;\n            }\n        }\n    }\n\n    #destruct() {\n        if (this.#destructed) return;\n\n        this.#unwatch?.();\n\n        this.#chainedNotifyEffectStack =\n            this.#chainedWatchEffectStack =\n            this.#cursorIndexFromEvent =\n            this.#frame =\n            this.#highlightSelection =\n            this.#lastHighlightRange =\n            this.#lastWatchableSnapshot =\n            this.#rangeOffsets =\n            this.#shiftFactorFromEvent =\n            this.#unwatch =\n            this.#watchlist =\n            this.#watchableEffect =\n            this.#watchCallback =\n                undefined;\n\n        this.#config = EMPTY_OBJECT;\n        this.#highlightInProgress = this.#pendingWatchNotification = false;\n        this.#destructed = true;\n    }\n\n    #getShiftControlRecordAtIndex(index: number): CalendarGridControlRecord | undefined {\n        if (!this.#shiftControlsList || index < 0 || index >= this.#shiftControlsList.length) return;\n\n        const control = this.#shiftControlsList[index] as CalendarShiftControl;\n\n        if (!this.#shiftControlsHandles[index]) {\n            const flags = CalendarShiftControlsFlag[control];\n            const shiftOffsetType = Calendar.#getShiftOffsetType(flags);\n            const shiftOffsetUnit = Calendar.#getShiftOffsetUnit(flags);\n\n            this.#shiftControlsHandles[index] = (...args: any[]) =>\n                Calendar.#withNotifyEffect.call(this, (...args: any[]) => {\n                    const canShift = this.#canShiftInDirection(shiftOffsetUnit);\n                    if (!(canShift && args.length)) return canShift;\n\n                    const shiftFactor = this.#getShiftFactorFromEvent(control, args[0] as Event);\n                    if (isUndefined(shiftFactor)) return false;\n\n                    this.#frame?.shiftFrameByOffset(shiftOffsetUnit * shiftFactor, shiftOffsetType);\n                    return true;\n                })(...args);\n        }\n\n        return [control, this.#shiftControlsHandles[index] as CalendarGridControlRecord[1]];\n    }\n\n    #getShiftFactorFromEvent(target: CalendarShiftControl, evt?: Event): number | undefined {\n        if (!(this.#frame && isFunction(this.#watchCallback))) return;\n\n        if (evt instanceof MouseEvent) {\n            if (evt.type !== 'click') return;\n        } else if (evt instanceof KeyboardEvent) {\n            if (!Calendar.#SHIFT_ACTIVATION_KEYS.includes(evt.code as InteractionKeyCode)) return;\n        } else return;\n\n        let shiftFactor = 1;\n\n        if (isFunction(this.#shiftFactorFromEvent)) {\n            const factor = Number(this.#shiftFactorFromEvent.call(this.#currentConfig, evt, target));\n            shiftFactor = Number.isInteger(factor) && factor >= 1 ? factor : shiftFactor;\n        }\n\n        return shiftFactor;\n    }\n\n    #highlight(secretFauxHighlightingHint?: any) {\n        if (this.#destructed || !this.#frame) return;\n\n        switch (this.#highlightSelection) {\n            case SELECT_MANY:\n            case SELECT_ONE:\n                break;\n            case SELECT_NONE:\n            default:\n                return;\n        }\n\n        const cursor = this.#frame.cursor;\n        const fromTimestamp = Math.max(this.#frame.getTimestampAtIndex(cursor), this.#frame.timeslice.from);\n        const toTimestamp = Math.min(this.#frame.getTimestampAtIndex(cursor + 1) - 1, this.#frame.timeslice.to);\n        const range = this.#rangeOffsets;\n\n        if (this.#highlightSelection === SELECT_ONE || this.#frame.blankSelection || range) {\n            this.#highlightInProgress = !(this.#highlightSelection === SELECT_ONE || range);\n\n            if (this.#highlightSelection === SELECT_MANY && range) {\n                const selectionDirection = toTimestamp >= (this.#frame.selectionEnd as number) ? SELECTION_FROM : SELECTION_TO;\n\n                selectionDirection === SELECTION_FROM\n                    ? this.#frame.updateSelection(toTimestamp, SELECTION_TO)\n                    : this.#frame.updateSelection(fromTimestamp, SELECTION_FROM);\n\n                this.#rangeHighlight(\n                    (selectionDirection === SELECTION_FROM ? this.#frame.selectionEnd : this.#frame.selectionStart) as number,\n                    selectionDirection,\n                    range\n                );\n            } else {\n                this.#frame.updateSelection(fromTimestamp, SELECTION_FROM);\n                this.#frame.updateSelection(toTimestamp, SELECTION_TO);\n            }\n        } else {\n            const isFauxHighlighting = secretFauxHighlightingHint === EMPTY_OBJECT;\n            const restamper = withTimezone(this.#frame.timezone);\n\n            if (!isFauxHighlighting) this.#highlightInProgress = false;\n\n            if (fromTimestamp <= this.#frame.selectionStart!) {\n                const selectionStartDay = new Date(timezoneToSystem(restamper, this.#frame.selectionStart!));\n                const selectionStartDayEndTimestamp = Math.min(\n                    systemToTimezone(restamper, selectionStartDay.setDate(selectionStartDay.getDate() + 1) - 1),\n                    this.#frame.timeslice.to\n                );\n\n                if (fromTimestamp === this.#frame.selectionStart! && toTimestamp <= selectionStartDayEndTimestamp) {\n                    this.#frame.updateSelection(toTimestamp, SELECTION_TO);\n                }\n\n                this.#frame.updateSelection(fromTimestamp, SELECTION_FROM);\n            } else {\n                const selectionEndDay = new Date(timezoneToSystem(restamper, this.#frame.selectionEnd!));\n                const selectionEndDayStartTimestamp = Math.max(\n                    systemToTimezone(restamper, selectionEndDay.setHours(0, 0, 0, 0)),\n                    this.#frame.timeslice.from\n                );\n\n                if (fromTimestamp <= this.#frame.selectionEnd! && fromTimestamp >= selectionEndDayStartTimestamp) {\n                    this.#frame.updateSelection(fromTimestamp, SELECTION_FROM);\n                }\n\n                this.#frame.updateSelection(toTimestamp, SELECTION_TO);\n            }\n\n            if (isFauxHighlighting) return;\n        }\n\n        this.#highlightFrom = this.#frame.selectionStart;\n        this.#highlightTo = this.#frame.selectionEnd;\n    }\n\n    #clearHighlight() {\n        this.#frame?.clearSelection();\n        this.#highlightInProgress = false;\n        this.#highlightFrom = this.#highlightTo = undefined;\n    }\n\n    #rangeHighlight(\n        time: number,\n        selectionDirection: typeof SELECTION_FROM | typeof SELECTION_TO,\n        rangeOffsets?: [number, number, number, number, number, number]\n    ) {\n        if (!this.#frame) return;\n\n        const restamper = withTimezone(this.#frame?.timezone);\n        const restampedDate = new Date(timezoneToSystem(restamper, time));\n        const direction = selectionDirection === SELECTION_FROM ? -1 : 1;\n        const [years = 0, months = 0, days = 0, hours = 0, minutes = 0, seconds = 0] = rangeOffsets ?? [];\n\n        restampedDate.setFullYear(\n            restampedDate.getFullYear() + years * direction,\n            restampedDate.getMonth() + months * direction,\n            restampedDate.getDate() + days * direction\n        );\n        restampedDate.setHours(\n            restampedDate.getHours() + hours * direction,\n            restampedDate.getMinutes() + minutes * direction,\n            restampedDate.getSeconds() + seconds * direction\n        );\n\n        this.#frame.updateSelection(systemToTimezone(restamper, restampedDate.getTime() - direction), selectionDirection);\n    }\n\n    #restoreHighlight() {\n        this.#highlightFrom && this.#frame?.updateSelection(this.#highlightFrom, SELECTION_FROM);\n        this.#highlightTo && this.#frame?.updateSelection(this.#highlightTo, SELECTION_TO);\n        this.#highlightInProgress = false;\n    }\n\n    #reframe() {\n        if (!this.#frame) return;\n\n        this.#frame.timeslice = this.#config.timeslice;\n        this.#frame.dynamicBlockHeight = !this.#config.fixedBlockHeight;\n        this.#frame.firstWeekDay = this.#config.firstWeekDay;\n        this.#frame.locale = this.#config.locale;\n        this.#frame.size = this.#config.blocks;\n        this.#frame.timezone = this.#config.timezone;\n        this.#frame.trackCurrentDay = this.#config.trackCurrentDay;\n        this.#today = today(this.#frame.timezone);\n\n        this.#restoreHighlight();\n    }\n\n    #refreshHighlighting() {\n        switch (this.#highlightSelection) {\n            case SELECT_MANY:\n                if (!boolOrTrue(this.#frame?.blankSelection) && this.#rangeOffsets) {\n                    this.#rangeHighlight(this.#frame?.selectionStart!, SELECTION_TO, this.#rangeOffsets);\n                }\n                break;\n            case SELECT_ONE:\n                if (!boolOrTrue(this.#frame?.blankSelection)) {\n                    const restamper = withTimezone(this.#frame?.timezone);\n                    const restampedDate = new Date(timezoneToSystem(restamper, this.#frame?.selectionStart!));\n                    this.#frame?.updateSelection(systemToTimezone(restamper, restampedDate.setHours(23, 59, 59, 999)), SELECTION_TO);\n                }\n                break;\n            case SELECT_NONE:\n            default:\n                this.#clearHighlight();\n                return;\n        }\n    }\n\n    #refreshShiftControls() {\n        switch (this.#watchlist?.snapshot.controls) {\n            case CONTROLS_ALL:\n                this.#shiftControlsList = Calendar.#SHIFT_ALL_CONTROLS;\n                break;\n            case CONTROLS_MINIMAL:\n                this.#shiftControlsList = Calendar.#SHIFT_MINIMAL_CONTROLS;\n                break;\n            case CONTROLS_NONE:\n            default:\n                this.#shiftControlsList = undefined;\n        }\n\n        this.#shiftControlsHandles.length = 0;\n        this.#shiftControlsHandles.length = this.#shiftControlsList?.length ?? 0;\n    }\n}\n","import Calendar from './Calendar';\nimport { CONTROLS_ALL, CONTROLS_MINIMAL, CONTROLS_NONE, RANGE_FROM, RANGE_TO, SELECT_MANY, SELECT_NONE, SELECT_ONE } from '../constants';\nimport { ALREADY_RESOLVED_PROMISE, enumerable, isFunction, isNumber, struct } from '../../../../../utils';\nimport timeslice, { sinceNow, UNBOUNDED_SLICE, untilNow } from '../timeslice';\nimport { CalendarFacade } from '../types';\n\nconst calendar = (() => {\n    const calendar = (init => {\n        const { grid, kill } = new Calendar();\n\n        if (isNumber(init)) grid.config({ blocks: init });\n        else if (isFunction(init))\n            ALREADY_RESOLVED_PROMISE.then(() => {\n                grid.config.watch = init;\n            });\n        else grid.config(init);\n\n        return struct({\n            grid: enumerable(grid),\n            kill: enumerable(kill),\n        }) as ReturnType<CalendarFacade>;\n    }) as CalendarFacade;\n\n    return Object.defineProperties(calendar, {\n        controls: {\n            value: struct({\n                ALL: { value: CONTROLS_ALL },\n                MINIMAL: { value: CONTROLS_MINIMAL },\n                NONE: { value: CONTROLS_NONE },\n            }),\n        },\n        highlight: {\n            value: struct({\n                ONE: { value: SELECT_ONE },\n                MANY: { value: SELECT_MANY },\n                NONE: { value: SELECT_NONE },\n            }),\n        },\n        slice: {\n            value: Object.defineProperties(timeslice.bind(null), {\n                FROM: { value: RANGE_FROM },\n                TO: { value: RANGE_TO },\n                UNBOUNDED: { value: UNBOUNDED_SLICE },\n                SINCE_NOW: { get: sinceNow },\n                UNTIL_NOW: { get: untilNow },\n            }),\n        },\n    });\n})();\n\nexport default calendar;\n","import { memo } from 'preact/compat';\nimport { CalendarControlsProps } from './types';\nimport calendar from '../../calendar';\nimport { isFunction } from '../../../../../utils';\n\nconst CalendarControls = ({ config, grid: { controls }, renderer }: CalendarControlsProps) => {\n    if (config.controls === calendar.controls.NONE || !isFunction(renderer)) return null;\n    return <>{controls.map(([control, handle]) => renderer(control, handle))}</>;\n};\n\nexport default memo(CalendarControls);\n","import { useCallback } from 'preact/hooks';\nimport { ALREADY_RESOLVED_PROMISE } from '../../utils';\nimport type { ReflexAction } from '../../primitives/reactive/reflex';\nimport useReflex from '../useReflex';\n\nconst useFocusCursor = (callback?: ReflexAction<Element>) => {\n    const finallyCallback = useCallback(\n        ((current, previous) => {\n            if (previous instanceof Element) previous.setAttribute('tabindex', '-1');\n            if (current instanceof Element) {\n                current.setAttribute('tabindex', '0');\n                // schedule a microtask to focus the current element\n                ALREADY_RESOLVED_PROMISE.then(() => (current as HTMLElement)?.focus());\n            }\n        }) as ReflexAction<Element>,\n        []\n    );\n\n    return useReflex<Element>(\n        useCallback(\n            (current, previous) => {\n                try {\n                    callback?.(current, previous);\n                } finally {\n                    finallyCallback(current, previous);\n                }\n            },\n            [callback]\n        )\n    );\n};\n\nexport default useFocusCursor;\n","import { Ref } from 'preact';\nimport { useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport type { ReflexAction } from '../../../../primitives/reactive/reflex';\nimport { getDateObjectFromTimestamp } from '../calendar/utils';\nimport { EMPTY_OBJECT, isFunction } from '../../../../utils';\nimport { CalendarGridCursorRootProps, CalendarHandle, CalendarProps } from '../types';\nimport useFocusCursor from '../../../../hooks/element/useFocusCursor';\nimport calendar from '../calendar';\n\nconst useCalendar = (\n    {\n        blocks,\n        controls,\n        dynamicBlockRows,\n        firstWeekDay,\n        highlight,\n        locale,\n        onHighlight,\n        originDate,\n        renderControl,\n        sinceDate,\n        timezone,\n        trackCurrentDay,\n        untilDate,\n        useYearView,\n    }: CalendarProps,\n    ref: Ref<unknown>\n) => {\n    const { i18n } = useCoreContext();\n    const [lastMutationTimestamp, setLastMutationTimestamp] = useState<DOMHighResTimeStamp>(performance.now());\n    const timeslice = useMemo(() => calendar.slice(sinceDate, untilDate), [sinceDate, untilDate]);\n    const config = useRef<ReturnType<typeof grid.config>>(EMPTY_OBJECT);\n\n    const activeControls = useMemo(\n        () => controls ?? (isFunction(renderControl) ? calendar.controls.MINIMAL : calendar.controls.NONE),\n        [controls, renderControl]\n    );\n\n    const activeHighlight = useMemo(\n        () => highlight ?? (isFunction(onHighlight) ? calendar.highlight.ONE : calendar.highlight.NONE),\n        [highlight, onHighlight]\n    );\n\n    const { grid, kill } = useMemo(() => {\n        const { grid, kill } = calendar(function () {\n            setLastMutationTimestamp(performance.now());\n            config.current = this;\n\n            if (highlightStart === grid.highlight.from && highlightEnd === grid.highlight.to) return;\n\n            highlightStart = grid.highlight.from;\n            highlightEnd = grid.highlight.to;\n            onHighlight?.(highlightStart, highlightEnd);\n        });\n\n        let { from: highlightStart, to: highlightEnd } = grid.highlight;\n\n        grid.config.cursorIndex = (evt: Event): number | undefined => {\n            let element: HTMLElement | null = evt.target as HTMLElement;\n\n            while (element && element !== evt.currentTarget) {\n                const index = Number(element.dataset.cursorPosition);\n                if (Number.isFinite(index)) return index;\n                element = element.parentNode as HTMLElement;\n            }\n        };\n\n        grid.config.shiftFactor = function (evt: Event) {\n            if (this.controls !== calendar.controls.MINIMAL) return;\n            if ((evt as MouseEvent)?.shiftKey) return 12;\n            if ((evt as MouseEvent)?.altKey) return this.blocks;\n            return 1;\n        };\n\n        return { grid, kill };\n    }, []);\n\n    const cursorRootProps = useMemo(() => {\n        const pointerHandle = (evt: Event) => {\n            grid.cursor(evt);\n        };\n\n        return {\n            onClickCapture: pointerHandle,\n            onMouseOverCapture: pointerHandle,\n            onPointerOverCapture: pointerHandle,\n            onKeyDownCapture: (evt: KeyboardEvent) => {\n                grid.cursor(evt) && evt.preventDefault();\n            },\n        } as CalendarGridCursorRootProps;\n    }, [grid]);\n\n    const cursorElementRef = useFocusCursor(\n        useCallback(\n            ((current, previous) => {\n                if (previous instanceof Element) previous.removeAttribute('aria-selected');\n                if (current instanceof Element) current.setAttribute('aria-selected', 'true');\n            }) as ReflexAction<Element>,\n            []\n        )\n    );\n\n    useImperativeHandle(\n        ref,\n        () => {\n            const { from, to } = grid?.highlight || EMPTY_OBJECT;\n            return {\n                clear: () => {\n                    grid?.highlight && (grid.highlight.from = undefined);\n                },\n                get config() {\n                    return { ...(config.current ?? EMPTY_OBJECT) };\n                },\n                get from() {\n                    return getDateObjectFromTimestamp(from);\n                },\n                set from(date) {\n                    grid?.highlight && date && (grid.highlight.from = date.getTime());\n                },\n                get to() {\n                    return getDateObjectFromTimestamp(to);\n                },\n                set to(date) {\n                    grid?.highlight && date && (grid.highlight.to = date.getTime());\n                },\n            } as CalendarHandle;\n        },\n        [grid, lastMutationTimestamp]\n    );\n\n    useEffect(() => {\n        grid.config({\n            blocks,\n            controls: activeControls,\n            firstWeekDay,\n            fixedBlockHeight: !dynamicBlockRows,\n            highlight: activeHighlight,\n            locale: locale ?? i18n.locale,\n            minified: useYearView,\n            timeslice,\n            timezone,\n            trackCurrentDay,\n        });\n    }, [\n        activeControls,\n        activeHighlight,\n        blocks,\n        dynamicBlockRows,\n        firstWeekDay,\n        grid,\n        i18n,\n        locale,\n        timeslice,\n        timezone,\n        trackCurrentDay,\n        useYearView,\n    ]);\n\n    useEffect(() => {\n        const origins = ([] as number[])\n            .concat(originDate as ConcatArray<number>)\n            .slice(0, 2)\n            .map(Number)\n            .filter(Boolean);\n        if (origins[0]) grid.highlight.from = +origins[0];\n        if (origins[1]) grid.highlight.to = +origins[1];\n        return kill;\n    }, []);\n\n    return { cursorElementRef, cursorRootProps, grid };\n};\n\nexport default useCalendar;\n","import { forwardRef, memo } from 'preact/compat';\nimport CalendarGrid from './components/CalendarGrid';\nimport CalendarControls from './components/CalendarControls';\nimport useCalendar from './hooks/useCalendar';\nimport { CalendarProps } from './types';\nimport './Calendar.scss';\n\nconst Calendar = forwardRef((props: CalendarProps, ref) => {\n    const calendar = useCalendar(props, ref);\n    const config = calendar.grid.config();\n\n    return (\n        <div role=\"none\">\n            <CalendarControls config={config} grid={calendar.grid} renderer={props.renderControl} />\n            <CalendarGrid\n                ref={calendar.cursorElementRef}\n                config={config}\n                cursorRootProps={calendar.cursorRootProps}\n                getGridLabel={props.getGridLabel}\n                grid={calendar.grid}\n                onlyCellsWithin={props.onlyCellsWithin}\n                prepare={props.prepare}\n            />\n        </div>\n    );\n});\n\nexport default memo(Calendar);\n","import { VNode } from 'preact';\nimport { createPortal } from 'preact/compat';\nimport { useMemo, useState } from 'preact/hooks';\nimport type { Reflexable } from '../../primitives/reactive/reflex';\nimport type { Nullable } from '../../utils/types';\nimport useReflex from '../useReflex';\n\nconst useDetachedRender = (callback: (targetElement: Element, ...args: any[]) => VNode | null, targetRef?: Nullable<Reflexable<Element>>) => {\n    const [render, setRender] = useState<(...args: any[]) => VNode | null>();\n\n    const renderTarget = useReflex<Element>(\n        useMemo(() => {\n            const render =\n                (targetElement: Element) =>\n                (...args: any[]) => {\n                    const jsx = callback(targetElement, ...args);\n                    return jsx && createPortal(jsx, targetElement);\n                };\n\n            setRender(undefined);\n\n            return targetElement => setRender(targetElement instanceof Element ? () => render(targetElement) : undefined);\n        }, [callback, targetRef]),\n        targetRef\n    );\n\n    return [render, renderTarget] as const;\n};\n\nexport default useDetachedRender;\n","import { ButtonVariant } from '../../Button/types';\nimport { useCallback } from 'preact/hooks';\nimport { isFunction } from '../../../../utils';\nimport { CalendarControlRenderer, CalendarRenderControl } from '../types';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport useDetachedRender from '../../../../hooks/element/useDetachedRender';\nimport Button from '../../Button';\nimport Icon from '../../Icon';\n\nconst useCalendarControlsRendering = (renderControl?: CalendarRenderControl) => {\n    const { i18n } = useCoreContext();\n\n    return useDetachedRender(\n        useCallback(\n            ((targetElement, control, handle) => {\n                if (!(targetElement instanceof HTMLElement)) return null;\n                if (isFunction(renderControl)) return renderControl(control, handle);\n\n                let directionModifier: string;\n                let labelModifier: 'next' | 'previous';\n                let iconName: 'chevron-left' | 'chevron-right';\n\n                switch (control) {\n                    case 'PREV':\n                        directionModifier = 'prev';\n                        labelModifier = 'previous';\n                        iconName = 'chevron-left';\n                        break;\n                    case 'NEXT':\n                        directionModifier = labelModifier = 'next';\n                        iconName = 'chevron-right';\n                        break;\n                    default:\n                        return null;\n                }\n\n                const shouldRenderControl = handle();\n\n                return shouldRenderControl ? (\n                    <Button\n                        aria-label={i18n.get(`common.filters.types.date.calendar.navigation.${labelModifier}Month`)}\n                        variant={ButtonVariant.TERTIARY}\n                        disabled={!shouldRenderControl}\n                        classNameModifiers={['circle', directionModifier]}\n                        iconButton={true}\n                        key={control}\n                        onClick={handle}\n                    >\n                        <Icon name={iconName} />\n                    </Button>\n                ) : null;\n            }) as CalendarControlRenderer,\n            [i18n, renderControl]\n        )\n    );\n};\n\nexport default useCalendarControlsRendering;\n","import cx from 'classnames';\nimport { forwardRef } from 'preact/compat';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport { Ref } from 'preact';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport { boolOrTrue, EMPTY_OBJECT, noop } from '../../../utils';\nimport useReflex from '../../../hooks/useReflex';\nimport useTimezone from '../Calendar/hooks/useTimezone';\nimport { DEFAULT_FIRST_WEEK_DAY } from '../Calendar/calendar/timerange/presets/shared/offsetWeek';\nimport { DateFilterProps } from '../FilterBar/filters/DateFilter/types';\nimport TimeRangeSelector from './components/TimeRangeSelector';\nimport Calendar from '../Calendar';\nimport calendar from '../Calendar/calendar';\nimport useCalendarControlsRendering from '../Calendar/hooks/useCalendarControlsRendering';\nimport { CalendarHandle, CalendarProps } from '../Calendar/types';\nimport './DatePicker.scss';\n\nexport type DatePickerProps = Omit<CalendarProps, 'getGridLabel'> &\n    Pick<DateFilterProps, 'now' | 'selectedPresetOption' | 'showTimezoneInfo' | 'timeRangePresetOptions' | 'timeRangeSelectorLabel' | 'timezone'> & {\n        onPresetOptionSelected?: (option: string) => any;\n    };\n\nconst DatePicker = forwardRef((props: DatePickerProps, ref) => {\n    const { i18n } = useCoreContext();\n    const [controlsRenderer, controlsContainerRef] = useCalendarControlsRendering(props.renderControl);\n    const [lastUpdatedTimestamp, setLastUpdatedTimestamp] = useState<DOMHighResTimeStamp>(performance.now());\n\n    const withTimezone = useMemo(() => boolOrTrue(props.showTimezoneInfo), [props.showTimezoneInfo]);\n    const { clockTime: time, GMTOffset: offset } = useTimezone({ timezone: props.timezone, withClock: withTimezone });\n\n    const datePickerClassName = useMemo(() => cx([{ 'adyen-pe-datepicker--with-timezone': withTimezone }, 'adyen-pe-datepicker']), [withTimezone]);\n    const timezoneI18nOptions = useMemo(() => (withTimezone ? { values: { offset, time } } : EMPTY_OBJECT), [offset, time, withTimezone]);\n    const calendarRef = useReflex<CalendarHandle>(noop, ref as Ref<CalendarHandle>);\n\n    const getCalendarGridLabel = useCallback<CalendarProps['getGridLabel']>(\n        block => i18n.get('common.filters.types.date.calendar.label', { values: { monthOfYear: block.label } }),\n        [i18n]\n    );\n\n    const onHighlight = useCallback(() => {\n        setLastUpdatedTimestamp(performance.now());\n\n        if (calendarRef.current?.from && calendarRef.current?.to) {\n            props.onHighlight?.(+calendarRef.current?.from, +calendarRef.current?.to);\n        }\n    }, [setLastUpdatedTimestamp, props.onHighlight]);\n\n    return (\n        <div className={datePickerClassName}>\n            <div className={'adyen-pe-datepicker__selector-container'}>\n                <TimeRangeSelector\n                    now={props.now}\n                    calendarRef={calendarRef}\n                    onTimeRangeSelected={props.onPresetOptionSelected}\n                    options={props.timeRangePresetOptions}\n                    selectedOption={props.selectedPresetOption}\n                    timestamp={lastUpdatedTimestamp}\n                    timezone={props.timezone}\n                    aria-label={props.timeRangeSelectorLabel}\n                />\n            </div>\n            <div\n                ref={controlsContainerRef}\n                role=\"group\"\n                className={'adyen-pe-datepicker__controls'}\n                aria-label={i18n.get('common.filters.types.date.calendar.navigation.label')}\n            />\n            <Calendar\n                {...props}\n                ref={calendarRef}\n                firstWeekDay={DEFAULT_FIRST_WEEK_DAY}\n                dynamicBlockRows={true}\n                onlyCellsWithin={true}\n                controls={props.controls ?? calendar.controls.MINIMAL}\n                highlight={props.highlight ?? calendar.highlight.MANY}\n                getGridLabel={getCalendarGridLabel}\n                onHighlight={onHighlight}\n                renderControl={controlsRenderer}\n                trackCurrentDay={true}\n            />\n            {withTimezone && (\n                <div className={'adyen-pe-datepicker__timezone'}>{i18n.get('common.filters.types.date.timezoneInfo', timezoneI18nOptions)}</div>\n            )}\n        </div>\n    );\n});\n\nexport default DatePicker;\n","import useButton from '../../../Button/hooks/useButton';\nimport { TypographyElement, TypographyVariant } from '../../../Typography/types';\nimport Typography from '../../../Typography/Typography';\nimport { fixedForwardRef, parseBooleanProp, parseClassName } from '../../../../../utils/preact';\nimport { ForwardedRef } from 'preact/compat';\nimport { useMemo } from 'preact/hooks';\nimport { FilterButtonProps } from './types';\nimport './FilterButton.scss';\n\nconst DEFAULT_FILTER_BUTTON_CLASSNAME = 'adyen-pe-filter-button';\n\nfunction FilterButton(props: FilterButtonProps, ref: ForwardedRef<HTMLButtonElement>) {\n    const { className, classNameModifiers = [], children, disabled, onClick, ...restAttributes } = props;\n    const classNameValue = useMemo(() => parseClassName('', className) || '', [className]);\n    const disabledValue = useMemo(() => parseBooleanProp(disabled), [disabled]);\n\n    const { allChildren, allProps, click } = useButton(\n        classNameValue,\n        classNameModifiers,\n        DEFAULT_FILTER_BUTTON_CLASSNAME,\n        disabledValue,\n        props,\n        props.type,\n        onClick\n    );\n\n    return (\n        <button ref={ref} onClick={click} {...allProps}>\n            <Typography el={TypographyElement.DIV} variant={TypographyVariant.BODY} stronger={true}>\n                {allChildren}\n            </Typography>\n        </button>\n    );\n}\nexport default fixedForwardRef(FilterButton);\n","import { JSX } from 'preact/jsx-runtime';\nimport { InteractionKeyCode } from '../../types';\n\ninterface FilterDisallowedCharactersProps {\n    event: JSX.TargetedKeyboardEvent<HTMLInputElement>;\n    inputType?: string;\n    onValidInput?: (event: JSX.TargetedKeyboardEvent<HTMLInputElement>) => void;\n}\n\nconst ALLOWED_NAVIGATION_KEYS = [\n    InteractionKeyCode.BACKSPACE,\n    InteractionKeyCode.DELETE,\n    InteractionKeyCode.ARROW_LEFT,\n    InteractionKeyCode.ARROW_RIGHT,\n    InteractionKeyCode.ARROW_UP,\n    InteractionKeyCode.ARROW_DOWN,\n    InteractionKeyCode.TAB,\n];\n\nconst filterDisallowedCharacters = ({ event, inputType, onValidInput }: FilterDisallowedCharactersProps) => {\n    const input = event.currentTarget as HTMLInputElement;\n    const { key } = event;\n\n    // Allow digits, period, comma, and minus\n    const isAllowedChar = /^[0-9.,-]$/.test(key);\n    const hasDecimal = /[.,]/.test(input.value);\n    const isDecimalKey = key === '.' || key === ',';\n\n    const isNavigationKey = ALLOWED_NAVIGATION_KEYS.includes(key as InteractionKeyCode);\n    const isDuplicateDecimal = hasDecimal && isDecimalKey;\n    const isNumberInput = inputType === 'number';\n\n    const shouldBlockInput = isNumberInput && !isNavigationKey && (!isAllowedChar || isDuplicateDecimal);\n\n    if (shouldBlockInput) {\n        event.preventDefault();\n        return;\n    }\n\n    onValidInput?.(event);\n};\n\nexport { filterDisallowedCharacters };\n","import Icon from '../../Icon';\nimport './FieldError.scss';\nimport cx from 'classnames';\n\ninterface FieldErrorProps {\n    id?: string;\n    errorMessage: string;\n    withTopMargin?: boolean;\n}\n\nexport const FieldError = ({ id, errorMessage, withTopMargin }: FieldErrorProps) => {\n    return (\n        <div className={cx('adyen-pe-field-error', { 'adyen-pe-field-error--with-top-margin': withTopMargin })} id={id}>\n            <Icon name=\"cross-circle-fill\" className=\"adyen-pe-field-error__icon\" />\n            <span className=\"adyen-pe-field-error__message\">{errorMessage}</span>\n        </div>\n    );\n};\n","import { ARIA_ERROR_SUFFIX } from '../../../core/Errors/constants';\nimport { hasOwnProperty } from '../../../utils';\nimport classNames from 'classnames';\nimport { h } from 'preact';\nimport { ForwardedRef, forwardRef, TargetedEvent } from 'preact/compat';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { InputBaseProps } from './types';\nimport Select from './Select';\nimport { filterDisallowedCharacters } from './utils';\nimport './FormFields.scss';\nimport { ButtonVariant } from '../Button/types';\nimport { FieldError } from './FieldError/FieldError';\n\nfunction InputBase(\n    {\n        onInput,\n        onKeyUp,\n        trimOnBlur,\n        onBlurHandler,\n        onBlur,\n        onFocusHandler,\n        errorMessage,\n        iconBeforeSlot,\n        iconAfterSlot,\n        dropdown,\n        dropdownPosition = 'start',\n        onDropdownInput,\n        onKeyDown,\n        onUpdateDropdown,\n        ...props\n    }: InputBaseProps,\n    ref: ForwardedRef<HTMLInputElement | null>\n) {\n    const { classNameModifiers, isInvalid, isValid, readonly = false, type, uniqueId, isCollatingErrors, disabled } = props;\n\n    /**\n     * To avoid confusion with misplaced/misdirected onChange handlers - InputBase only accepts onInput, onBlur & onFocus handlers.\n     * The first 2 being the means by which we expect useForm--handleChangeFor validation functionality to be applied.\n     */\n    if (hasOwnProperty(props, 'onChange')) {\n        console.error('Error: Form fields that rely on InputBase may not have an onChange property');\n    }\n\n    const handleInput = useCallback(\n        (event: TargetedEvent<HTMLInputElement, Event>) => {\n            onInput?.(event);\n        },\n        [onInput]\n    );\n\n    const handleKeyUp = useCallback(\n        (event: h.JSX.TargetedKeyboardEvent<HTMLInputElement>) => {\n            if (onKeyUp) onKeyUp(event);\n        },\n        [onKeyUp]\n    );\n\n    const handleBlur = useCallback(\n        (event: h.JSX.TargetedEvent<HTMLInputElement>) => {\n            onBlurHandler?.(event); // From Field component\n\n            if (trimOnBlur) {\n                (event.target as HTMLInputElement).value = (event.target as HTMLInputElement).value.trim(); // needed to trim trailing spaces in field (leading spaces can be done via formatting)\n            }\n\n            onBlur?.(event);\n        },\n        [onBlur, onBlurHandler, trimOnBlur]\n    );\n\n    const handleFocus = useCallback(\n        (event: h.JSX.TargetedEvent<HTMLInputElement>) => {\n            onFocusHandler?.(event); // From Field component\n        },\n        [onFocusHandler]\n    );\n\n    const handleDropdownChange = useCallback(\n        (event: any) => {\n            const selectedValue = event.target?.value;\n            onDropdownInput?.(selectedValue);\n            if (dropdown) {\n                onUpdateDropdown?.({ ...dropdown, value: selectedValue });\n            }\n        },\n        [dropdown, onDropdownInput, onUpdateDropdown]\n    );\n\n    const inputClassNames = classNames(\n        'adyen-pe-input',\n        [`adyen-pe-input--${type}`],\n        props.className,\n        {\n            'adyen-pe-input--invalid': isInvalid,\n            'adyen-pe-input--valid': isValid,\n        },\n        classNameModifiers?.map(m => `adyen-pe-input--${m}`)\n    );\n\n    const handleKeyDown = useCallback(\n        (e: h.JSX.TargetedKeyboardEvent<HTMLInputElement>) => {\n            filterDisallowedCharacters({ event: e, inputType: type, onValidInput: () => onKeyDown?.(e) });\n        },\n        [type, onKeyDown]\n    );\n\n    // Don't spread classNameModifiers etc to input element (it ends up as an attribute on the element itself)\n    const {\n        classNameModifiers: cnm,\n        uniqueId: uid,\n        isInvalid: iiv,\n        isValid: iv,\n        isCollatingErrors: ce,\n        autoFocus,\n        autofocus,\n        ...newProps\n    } = props as any;\n\n    const hasIcons = iconBeforeSlot || iconAfterSlot;\n    const shouldShowDropdown = !!dropdown && dropdown.items.length > 0;\n    const shouldDisplayDropdownAtStart = shouldShowDropdown && dropdownPosition === 'start';\n    const shouldDisplayDropdownAtEnd = shouldShowDropdown && dropdownPosition === 'end';\n    const hasDropdownOrIcons = hasIcons || shouldShowDropdown;\n\n    const isDropdownReadOnly = readonly || dropdown?.readonly;\n\n    const inputElement = (\n        <input\n            id={uniqueId}\n            {...newProps}\n            type={type}\n            className={inputClassNames}\n            readOnly={readonly}\n            aria-describedby={isCollatingErrors ? undefined : `${uniqueId}${ARIA_ERROR_SUFFIX}`}\n            aria-invalid={isInvalid}\n            onInput={handleInput}\n            onBlurCapture={handleBlur}\n            onFocus={handleFocus}\n            onKeyDown={handleKeyDown}\n            onKeyUp={handleKeyUp}\n            disabled={disabled}\n            ref={ref}\n            autoFocus={false}\n        />\n    );\n\n    const selectClassNameModifiers = useMemo(() => {\n        let modifiers = ['input-field'];\n        if (readonly) modifiers = [...modifiers, 'readonly'];\n        return modifiers;\n    }, [readonly]);\n\n    const renderDropdown = useCallback(\n        () =>\n            dropdown ? (\n                <Select\n                    name={dropdown.name}\n                    buttonVariant={ButtonVariant.TERTIARY}\n                    items={dropdown.items}\n                    selected={dropdown.value}\n                    onChange={handleDropdownChange}\n                    readonly={isDropdownReadOnly}\n                    filterable={dropdown.filterable}\n                    aria-label={dropdown['aria-label']}\n                    classNameModifiers={selectClassNameModifiers}\n                    isCollatingErrors={isCollatingErrors}\n                    disableToggleFocusOnClose\n                />\n            ) : null,\n        [dropdown, handleDropdownChange, isCollatingErrors, isDropdownReadOnly]\n    );\n\n    return (\n        <>\n            {hasDropdownOrIcons ? (\n                <div\n                    className={classNames('adyen-pe-input__container', {\n                        ['adyen-pe-input--invalid']: isInvalid,\n                        ['adyen-pe-input__container--readonly']: readonly,\n                    })}\n                >\n                    {shouldDisplayDropdownAtStart && (\n                        <div role=\"presentation\" className=\"adyen-pe-input__dropdown adyen-pe-input__dropdown--start\">\n                            {renderDropdown()}\n                        </div>\n                    )}\n                    {iconBeforeSlot && <span className=\"adyen-pe-input__slot-before\">{iconBeforeSlot}</span>}\n                    {inputElement}\n                    {iconAfterSlot && <span className=\"adyen-pe-input__slot-after\">{iconAfterSlot}</span>}\n                    {shouldDisplayDropdownAtEnd && (\n                        <div role=\"presentation\" className=\"adyen-pe-input__dropdown adyen-pe-input__dropdown--end\">\n                            {renderDropdown()}\n                        </div>\n                    )}\n                </div>\n            ) : (\n                inputElement\n            )}\n            {isInvalid && errorMessage && <FieldError id={uniqueId} errorMessage={errorMessage} />}\n        </>\n    );\n}\n\nInputBase.defaultProps = {\n    type: 'text',\n    classNameModifiers: [],\n    onInput: () => {},\n};\n\nexport default forwardRef(InputBase);\n","import InputBase from './InputBase';\nimport { InputBaseProps } from './types';\nimport { ForwardedRef, forwardRef } from 'preact/compat';\n\nexport default forwardRef(function InputText(props: InputBaseProps, ref: ForwardedRef<HTMLInputElement | null>) {\n    return <InputBase classNameModifiers={props.classNameModifiers} {...props} ref={ref} aria-required={props.required} type=\"text\" />;\n});\n","import { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport FilterButton from '../../components/FilterButton/FilterButton';\nimport Popover from '../../../Popover/Popover';\nimport { PopoverContainerPosition, PopoverContainerVariant } from '../../../Popover/types';\nimport { TypographyElement, TypographyVariant } from '../../../Typography/types';\nimport Typography from '../../../Typography/Typography';\nimport useCommitAction, { CommitAction } from '../../../../../hooks/useCommitAction';\nimport { isEmptyString, isNull } from '../../../../../utils';\nimport { memo } from 'preact/compat';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport useBooleanState from '../../../../../hooks/useBooleanState';\nimport useUniqueId from '../../../../../hooks/useUniqueId';\nimport '../../../FormFields';\nimport InputText from '../../../FormFields/InputText';\nimport { BaseFilterProps, FilterEditModalRenderProps, FilterProps } from './types';\n\nconst isValueEmptyFallback = (value?: string) => {\n    return !value || isEmptyString(value);\n};\n\nconst renderFallback = (() => {\n    const DefaultEditModalBody = <T extends BaseFilterProps>(props: FilterEditModalRenderProps<T>) => {\n        const { editAction, name, onChange, onValueUpdated } = props;\n        const [currentValue, setCurrentValue] = useState(props.value);\n        const inputRef = useRef<HTMLInputElement>(null);\n\n        const handleInput = useCallback(\n            (e: Event) => {\n                const value = (e.target as HTMLInputElement).value.trim();\n                setCurrentValue(value);\n                onValueUpdated(value);\n            },\n            [onValueUpdated]\n        );\n\n        useEffect(() => {\n            (function attemptFocusCapture() {\n                if (inputRef.current) {\n                    inputRef.current.focus();\n                } else requestAnimationFrame(attemptFocusCapture);\n            })();\n        }, [inputRef]);\n\n        useEffect(() => {\n            if (editAction === CommitAction.CLEAR) {\n                const value = '';\n                setCurrentValue(value);\n                onValueUpdated(value);\n                onChange(value);\n            }\n\n            if (editAction === CommitAction.APPLY) {\n                onChange(currentValue ?? '');\n            }\n        }, [currentValue, editAction, onChange, onValueUpdated]);\n\n        return <InputText ref={inputRef} name={name} value={currentValue} onInput={handleInput} />;\n    };\n\n    return <T extends BaseFilterProps>(props: FilterEditModalRenderProps<T>) => <DefaultEditModalBody<T> {...props} />;\n})();\n\nconst BaseFilter = <T extends BaseFilterProps = BaseFilterProps>({ render, ['aria-label']: ariaLabel, ...props }: FilterProps<T>) => {\n    const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n    const [editMode, _updateEditMode] = useBooleanState(false);\n    const [editModalMounting, updateEditModalMounting] = useBooleanState(false);\n    const isValueEmpty = useMemo(() => props.isValueEmpty ?? isValueEmptyFallback, [props.isValueEmpty]);\n    const [hasEmptyValue, updateHasEmptyValue] = useBooleanState(isValueEmpty(props.value));\n    const [hasInitialValue, updateHasInitialValue] = useBooleanState(false);\n    const [valueChanged, updateValueChanged] = useBooleanState(false);\n    const [disabledApply, updateDisabledApply] = useBooleanState(isValueEmpty(props.value));\n    const targetElement = useRef<HTMLButtonElement | null>(null);\n\n    const filterButtonId = `elem-${useUniqueId()}`;\n    const renderModalBody = useMemo(() => render ?? renderFallback<T>, [render]);\n\n    const onValueUpdated = useCallback(\n        (currentValue?: string | null) => {\n            const hasEmptyValue = isValueEmpty(currentValue ?? undefined);\n            updateHasEmptyValue(hasEmptyValue);\n            updateDisabledApply(isNull(currentValue));\n            updateValueChanged(hasInitialValue ? currentValue !== props.value : !hasEmptyValue);\n        },\n        [isValueEmpty, updateHasEmptyValue, updateDisabledApply, updateValueChanged, hasInitialValue, props.value]\n    );\n\n    const { commitAction, commitActionButtons, committing, resetCommitAction } = useCommitAction({\n        applyDisabled: disabledApply || !valueChanged,\n        resetDisabled: hasEmptyValue,\n        onResetAction: props?.onResetAction,\n    });\n\n    const editModeActive = useRef(false);\n\n    const [closeEditDialog, openEditDialog] = useMemo(() => {\n        const updateEditMode = (mode: boolean) => () => {\n            if (mode === editMode || (mode && editModeActive.current)) return;\n\n            if (mode) {\n                resetCommitAction();\n                updateValueChanged(false);\n                updateHasInitialValue(false);\n            }\n\n            _updateEditMode(mode);\n            updateEditModalMounting(mode);\n        };\n\n        return [updateEditMode(false), updateEditMode(true)];\n    }, [_updateEditMode, editMode, resetCommitAction, updateEditModalMounting, updateHasInitialValue, updateValueChanged]);\n\n    useEffect(() => {\n        if (editModalMounting) {\n            const hasEmptyValue = isValueEmpty(props.value);\n            updateEditModalMounting(false);\n            updateHasEmptyValue(hasEmptyValue);\n            updateHasInitialValue(!hasEmptyValue);\n        }\n    }, [props.value, editModalMounting, isValueEmpty, updateEditModalMounting, updateHasEmptyValue, updateHasInitialValue]);\n\n    useEffect(() => {\n        committing && closeEditDialog();\n    }, [committing, closeEditDialog]);\n\n    useEffect(() => {\n        editModeActive.current = editMode;\n    }, [editMode]);\n\n    const isOnlySmContainer = useResponsiveContainer(containerQueries.only.sm);\n    const isOnlyMdContainer = useResponsiveContainer(containerQueries.only.md);\n\n    return (\n        <>\n            <div className={`adyen-pe-filter adyen-pe-filter--${props.type}`}>\n                {useMemo(\n                    () => (\n                        <FilterButton\n                            classNameModifiers={[\n                                ...(props.appliedFilterAmount ? ['with-counter'] : []),\n                                ...(props.classNameModifiers ?? []),\n                                ...(editMode ? ['active'] : []),\n                                ...(hasEmptyValue ? [] : ['has-selection']),\n                            ]}\n                            aria-haspopup=\"dialog\"\n                            aria-expanded={editMode}\n                            aria-label={ariaLabel}\n                            id={filterButtonId}\n                            onClick={editMode ? closeEditDialog : openEditDialog}\n                            ref={targetElement}\n                            tabIndex={0}\n                        >\n                            <div className=\"adyen-pe-filter-button__default-container\">\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} className=\"adyen-pe-filter-button__label\">\n                                    {props.label}\n                                </Typography>\n                                {!!props.appliedFilterAmount && (\n                                    <div className=\"adyen-pe-filter-button__counter-wrapper\">\n                                        <Typography\n                                            el={TypographyElement.SPAN}\n                                            variant={TypographyVariant.BODY}\n                                            stronger={true}\n                                            className=\"adyen-pe-filter-button__counter\"\n                                        >\n                                            {props.appliedFilterAmount}\n                                        </Typography>\n                                    </div>\n                                )}\n                            </div>\n                        </FilterButton>\n                    ),\n                    [\n                        props.appliedFilterAmount,\n                        props.classNameModifiers,\n                        props.label,\n                        editMode,\n                        hasEmptyValue,\n                        closeEditDialog,\n                        openEditDialog,\n                        targetElement,\n                    ]\n                )}\n            </div>\n            {editMode && (\n                <Popover\n                    actions={commitActionButtons}\n                    title={props.title?.trim()}\n                    variant={PopoverContainerVariant.POPOVER}\n                    modifiers={['filter']}\n                    open={editMode}\n                    dismiss={closeEditDialog}\n                    dismissible={false}\n                    withContentPadding={props.withContentPadding ?? true}\n                    divider={true}\n                    targetElement={targetElement}\n                    disableFocusTrap={false}\n                    position={PopoverContainerPosition.BOTTOM}\n                    containerSize={props.containerSize}\n                    showOverlay={isSmContainer}\n                    fitPosition={isOnlySmContainer || isOnlyMdContainer}\n                >\n                    {renderModalBody({ ...props, editAction: commitAction, onValueUpdated })}\n                </Popover>\n            )}\n        </>\n    );\n};\n\nexport default memo(BaseFilter);\n","import { UseTimeRangeSelectionConfig } from '../../../DatePicker/components/TimeRangeSelector';\nimport { BaseFilterProps } from '../BaseFilter/types';\n\nexport const enum DateRangeFilterParam {\n    FROM = 'from',\n    TO = 'to',\n}\n\nexport interface DateFilterProps extends BaseFilterProps {\n    onChange: (params?: { [P in DateRangeFilterParam | 'selectedPresetOption']?: string }) => void;\n    sinceDate?: string;\n    untilDate?: string;\n    now?: UseTimeRangeSelectionConfig['now'];\n    selectedPresetOption?: string;\n    showTimezoneInfo?: boolean;\n    timeRangePresetOptions: UseTimeRangeSelectionConfig['options'];\n    timeRangeSelectorLabel?: string;\n    timezone?: UseTimeRangeSelectionConfig['timezone'];\n    [DateRangeFilterParam.FROM]?: string;\n    [DateRangeFilterParam.TO]?: string;\n}\n","import Localization from '../../../../../core/Localization';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { BASE_LOCALE } from '../../../../../core/Localization/datetime/restamper/constants';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport { CommitAction } from '../../../../../hooks/useCommitAction';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { CalendarHandle } from '../../../Calendar/types';\nimport DatePicker from '../../../DatePicker';\nimport BaseFilter from '../BaseFilter';\nimport { FilterEditModalRenderProps, FilterProps } from '../BaseFilter/types';\nimport { DateFilterProps, DateRangeFilterParam } from './types';\nimport './DateFilterCore.scss';\n\nconst formattingOptions = {\n    month: 'short',\n    day: 'numeric',\n    year: 'numeric',\n} as const;\n\nconst computeDateFilterValue = (i18n: Localization['i18n'], fullDateFormat: Localization['fullDate'], fromDate?: string, toDate?: string) => {\n    const from = fromDate && fullDateFormat(fromDate);\n    const to = toDate && fullDateFormat(toDate);\n\n    if (from && to) return i18n.get('common.filters.types.date.range.between', { values: { fromDate: from, toDate: to } });\n    if (from) return i18n.get('common.filters.types.date.range.since', { values: { date: from } });\n    if (to) return i18n.get('common.filters.types.date.range.until', { values: { date: to } });\n};\n\nconst resolveDate = (date?: any) => {\n    try {\n        return new Date(date || '').toISOString();\n    } catch {\n        return '';\n    }\n};\n\nconst renderDateFilterModalBody = (() => {\n    const DateFilterEditModalBody = ({\n        editAction,\n        from,\n        to,\n        now,\n        onChange,\n        onValueUpdated,\n        showTimezoneInfo,\n        selectedPresetOption,\n        timeRangePresetOptions,\n        timeRangeSelectorLabel,\n        timezone,\n        sinceDate,\n        untilDate,\n    }: FilterEditModalRenderProps<DateFilterProps>) => {\n        const { i18n } = useCoreContext();\n        const { fullDateFormat } = useTimezoneAwareDateFormatting(timezone);\n        const [presetOption, setPresetOption] = useState(selectedPresetOption);\n        const originDate = useMemo(() => [new Date(from as string), new Date(to as string)], [from, to]);\n        const datePickerRef = useRef<CalendarHandle & { selection?: string }>();\n\n        const onHighlight = useCallback(\n            (from?: number, to?: number) => {\n                onValueUpdated(computeDateFilterValue(i18n, fullDateFormat, resolveDate(from), resolveDate(to)));\n            },\n            [i18n, fullDateFormat, onValueUpdated]\n        );\n\n        useEffect(() => {\n            switch (editAction) {\n                case CommitAction.APPLY:\n                    onChange({\n                        selectedPresetOption: presetOption,\n                        [DateRangeFilterParam.FROM]: resolveDate(datePickerRef.current?.from),\n                        [DateRangeFilterParam.TO]: resolveDate(datePickerRef.current?.to),\n                    });\n                    break;\n\n                case CommitAction.CLEAR:\n                    datePickerRef.current?.clear();\n                    onChange();\n            }\n        }, [editAction, onChange, presetOption]);\n\n        return (\n            <DatePicker\n                ref={datePickerRef}\n                now={now}\n                originDate={originDate}\n                onHighlight={onHighlight}\n                onPresetOptionSelected={setPresetOption}\n                selectedPresetOption={selectedPresetOption}\n                timeRangePresetOptions={timeRangePresetOptions}\n                timeRangeSelectorLabel={timeRangeSelectorLabel}\n                timezone={timezone}\n                showTimezoneInfo={showTimezoneInfo}\n                sinceDate={resolveDate(sinceDate)}\n                untilDate={resolveDate(untilDate)}\n            />\n        );\n    };\n\n    return (props: FilterEditModalRenderProps<DateFilterProps>) => <DateFilterEditModalBody {...props} />;\n})();\n\nconst customDateRangeFormat = (formatter: Intl.DateTimeFormat, fromDate: Date, toDate: Date) => {\n    return formatter.formatRange(fromDate, toDate);\n};\n\nexport default function DateFilterCore<T extends DateFilterProps = DateFilterProps>({\n    title,\n    from,\n    to,\n    selectedPresetOption,\n    timeRangeSelectorLabel,\n    ...props\n}: FilterProps<T>) {\n    const { i18n } = useCoreContext();\n    const { fullDateFormat } = useTimezoneAwareDateFormatting(props.timezone);\n    const [selectedPresetOptionValue, setSelectedPresetOption] = useState<string>();\n    const [fromValue, setFrom] = useState<string>();\n    const [toValue, setTo] = useState<string>();\n\n    const onChange = useCallback<NonNullable<typeof props.onChange>>(\n        params => {\n            const { from, to, selectedPresetOption } = params ?? (EMPTY_OBJECT as NonNullable<typeof params>);\n            try {\n                setSelectedPresetOption(selectedPresetOptionValue ?? selectedPresetOption);\n                setFrom(resolveDate(fromValue ?? from));\n                setTo(resolveDate(toValue ?? to));\n            } finally {\n                props.onChange({ from, to, selectedPresetOption });\n            }\n        },\n        [selectedPresetOptionValue, fromValue, toValue, props]\n    );\n\n    const customSelection = useMemo(() => i18n.get('common.filters.types.date.rangeSelect.options.custom'), [i18n]);\n\n    const dateTimeFormatter = useMemo(() => {\n        const _formattingOptions = { ...formattingOptions, timeZone: props.timezone };\n        let formatter = new Intl.DateTimeFormat(BASE_LOCALE, _formattingOptions);\n\n        try {\n            formatter = new Intl.DateTimeFormat(i18n.locale, _formattingOptions);\n        } catch {\n            /* invalid locale: continue with base `en-US` formatter */\n        }\n\n        return formatter;\n    }, [i18n, props.timezone]);\n\n    useEffect(() => setSelectedPresetOption(selectedPresetOption), [selectedPresetOption]);\n    useEffect(() => setFrom(resolveDate(from || Date.now())), [from]);\n    useEffect(() => setTo(resolveDate(to || Date.now())), [to]);\n\n    const label = useMemo(() => {\n        if (selectedPresetOption === customSelection && fromValue && toValue) {\n            return customDateRangeFormat(dateTimeFormatter, new Date(fromValue), new Date(toValue));\n        }\n\n        return selectedPresetOption ?? props.label;\n    }, [customSelection, dateTimeFormatter, fromValue, toValue, selectedPresetOption, props.label]);\n\n    return (\n        <BaseFilter<T>\n            {...(props as FilterProps<T>)}\n            from={from}\n            to={to}\n            type={'date'}\n            label={label}\n            onChange={onChange}\n            render={renderDateFilterModalBody}\n            selectedPresetOption={selectedPresetOption}\n            timeRangeSelectorLabel={timeRangeSelectorLabel ?? i18n.get('common.filters.types.date.rangeSelect.label')}\n            value={computeDateFilterValue(i18n, fullDateFormat, from, to)}\n            withContentPadding={false}\n        />\n    );\n}\n","import { UseTimeRangeSelectionConfig } from '../../../DatePicker/components/TimeRangeSelector';\nimport DateFilterCore from './DateFilterCore';\nimport useDefaultOverviewFilterParams from '../../../../../hooks/useDefaultOverviewFilterParams';\nimport { FilterParam } from '../../../../types';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { DateFilterProps, DateRangeFilterParam } from './types';\nimport { UsePaginatedRecords } from '../../../Pagination/hooks/types';\nimport { EMPTY_OBJECT } from '../../../../../utils';\n\ntype DataOverviewDateFilterProps = Pick<UsePaginatedRecords<any, string, FilterParam>, 'canResetFilters' | 'filters' | 'updateFilters'> &\n    ReturnType<typeof useDefaultOverviewFilterParams> & {\n        timezone?: UseTimeRangeSelectionConfig['timezone'];\n        onResetAction?: () => void;\n    };\n\nconst DateFilter = <T extends DateFilterProps = DateFilterProps>({\n    timezone,\n    canResetFilters,\n    defaultParams,\n    filters,\n    nowTimestamp,\n    refreshNowTimestamp,\n    sinceDate,\n    untilDate,\n    updateFilters,\n}: Pick<T, 'sinceDate' | 'untilDate'> & DataOverviewDateFilterProps) => {\n    const { i18n } = useCoreContext();\n    const label = useMemo(() => i18n.get('common.filters.types.date.label'), [i18n]);\n    const defaultTimeRangePreset = useMemo(() => i18n.get(defaultParams.current.defaultTimeRange), [i18n]);\n    const [selectedTimeRangePreset, setSelectedTimeRangePreset] = useState(defaultTimeRangePreset);\n\n    const updateCreatedDateFilter = useCallback(\n        (params: Parameters<DateFilterProps['onChange']>[0] = EMPTY_OBJECT) => {\n            for (const [param, value] of Object.entries(params) as [keyof typeof params, (typeof params)[keyof typeof params]][]) {\n                switch (param) {\n                    case 'selectedPresetOption':\n                        setSelectedTimeRangePreset(value || defaultTimeRangePreset);\n                        break;\n                    case DateRangeFilterParam.FROM:\n                        updateFilters({\n                            [FilterParam.CREATED_SINCE]: value || defaultParams.current.defaultFilterParams[FilterParam.CREATED_SINCE],\n                        });\n                        break;\n                    case DateRangeFilterParam.TO:\n                        updateFilters({\n                            [FilterParam.CREATED_UNTIL]: value || defaultParams.current.defaultFilterParams[FilterParam.CREATED_UNTIL],\n                        });\n                        break;\n                    default:\n                        return;\n                }\n\n                refreshNowTimestamp();\n            }\n        },\n        [defaultTimeRangePreset, refreshNowTimestamp, updateFilters]\n    );\n\n    useMemo(() => !canResetFilters && setSelectedTimeRangePreset(defaultTimeRangePreset), [canResetFilters, defaultTimeRangePreset]);\n\n    return (\n        <DateFilterCore\n            label={label}\n            aria-label={label}\n            name={FilterParam.CREATED_SINCE}\n            sinceDate={sinceDate}\n            untilDate={untilDate ?? new Date(nowTimestamp).toString()}\n            from={filters[FilterParam.CREATED_SINCE]}\n            to={filters[FilterParam.CREATED_UNTIL]}\n            selectedPresetOption={selectedTimeRangePreset}\n            timeRangePresetOptions={defaultParams.current.timeRangeOptions}\n            timezone={timezone}\n            onChange={updateCreatedDateFilter}\n            showTimezoneInfo={true}\n            now={nowTimestamp}\n        />\n    );\n};\n\nexport default DateFilter;\n","import { TranslationKey } from '../../translations';\nimport { ModalSize } from '../../components/internal/Modal/types';\n\ntype CallbackFunction<T> = (arg: T) => void;\n\ntype DetailsConfig<T> = {\n    showDetails: boolean;\n    callback?: CallbackFunction<T>;\n};\n\nexport type SelectedDetail<Options> = {\n    title?: TranslationKey;\n    selection: { type: keyof Options; data: any };\n    modalSize?: ModalSize;\n};\n\nexport type GetArgsExceptCallback<T extends Required<DetailsConfig<any>>> = Omit<Parameters<T['callback']>[0], 'showModal'>;\n\nexport type ModalDetailsOptions<Options extends string> = {\n    [k in Options]: DetailsConfig<any>;\n};\n\nexport type CallbackIsPresent<\n    Opt extends ModalDetailsOptions<any>,\n    Options extends ModalDetailsOptions<Extract<keyof Opt, string>>,\n    T extends SelectedDetail<Options>\n> = Options[T['selection']['type']] extends {\n    callback: any;\n}\n    ? true\n    : false;\n\nexport type CallbackParams<\n    Opt extends ModalDetailsOptions<any>,\n    Options extends ModalDetailsOptions<Extract<keyof Opt, string>>,\n    T extends SelectedDetail<Options>\n> = {\n    callback: (\n        args: Options[T['selection']['type']] extends { callback: any } ? GetArgsExceptCallback<Required<Options[T['selection']['type']]>> : never\n    ) => void;\n};\nexport function hasCallback(options: any): options is Required<DetailsConfig<any>> {\n    return 'callback' in options;\n}\n","import { useCallback, useMemo, useState } from 'preact/hooks';\nimport { CallbackIsPresent, CallbackParams, GetArgsExceptCallback, hasCallback, ModalDetailsOptions, SelectedDetail } from './types';\n\n/**\n * @param options - This parameter is an object that contains several fields.\n *                  The keys of these fields represent the type of details that will be displayed on a modal.\n *                  - showDetails: An array of values that determine whether the details should be shown on the modal.\n *                                 If this field is undefined, it will be assumed to be true.\n *                  - callback?: An optional function that will be executed at the merchant level.\n *                               This function will receive a 'showModal' function as a parameter,\n *                               which allows the merchant to control when the modal appears.\n */\n\nfunction useModalDetails<Options extends ModalDetailsOptions<any>>(options: Options) {\n    const [selectedDetail, setSelectedDetail] = useState<SelectedDetail<Options> | null>(null);\n    const updateDetails = useCallback(\n        <T extends SelectedDetail<Options>>(\n            state: T\n        ): CallbackIsPresent<Options, Options, T> extends true ? CallbackParams<Options, Options, T> : {} => {\n            if (state && hasCallback(options[state.selection.type])) {\n                return {\n                    callback: options?.[state.selection.type]?.callback\n                        ? (\n                              args: Options[T['selection']['type']] extends { callback: any }\n                                  ? GetArgsExceptCallback<Required<Options[T['selection']['type']]>>\n                                  : never\n                          ) => options[state.selection.type]?.callback?.({ showModal: () => setSelectedDetail(state), ...args })\n                        : () => options[state.selection.type]?.showDetails && setSelectedDetail(state),\n                };\n            }\n            setSelectedDetail(state);\n            return {} as CallbackIsPresent<Options, Options, T> extends true ? CallbackParams<Options, Options, T> : {};\n        },\n        [options]\n    );\n    const resetDetails = useCallback(() => setSelectedDetail(null), []);\n\n    const detailsToShow = useMemo(() => {\n        const details = {} as { [key in keyof Options]: boolean };\n\n        for (const detail in options) {\n            const selectedDetail = options[detail];\n            details[detail] = !selectedDetail?.showDetails || !!selectedDetail.callback;\n        }\n\n        return details;\n    }, [options]);\n\n    return {\n        selectedDetail,\n        updateDetails,\n        detailsToShow,\n        resetDetails,\n    };\n}\n\nexport default useModalDetails;\n","import { memo } from 'preact/compat';\nimport Select from '../../../../internal/FormFields/Select';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport type { SelectProps } from '../../../../internal/FormFields/Select/types';\nimport useMultiSelectionFilter from './useMultiSelectionFilter';\n\nconst MultiSelectionFilter = memo(\n    <FilterParam extends string = string, FilterValue extends string = string>({\n        placeholder,\n        selection,\n        selectionOptions,\n        updateSelection,\n        onResetAction,\n        readonly,\n        isInvalid,\n    }: ReturnType<typeof useMultiSelectionFilter<FilterParam, FilterValue>> &\n        Required<Pick<SelectProps<any>, 'placeholder'>> & { readonly?: boolean; isInvalid?: boolean; onResetAction?: () => void }) => {\n        const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n        const isOnlySmContainer = useResponsiveContainer(containerQueries.only.sm);\n        const isOnlyMdContainer = useResponsiveContainer(containerQueries.only.md);\n\n        const canRenderSelector = (selectionOptions && selectionOptions.length > 1) || readonly;\n\n        return (\n            canRenderSelector && (\n                <Select\n                    readonly={readonly}\n                    isInvalid={isInvalid}\n                    onResetAction={onResetAction}\n                    onChange={updateSelection}\n                    filterable={false}\n                    multiSelect={true}\n                    placeholder={placeholder}\n                    selected={selection}\n                    withoutCollapseIndicator={true}\n                    items={selectionOptions ?? []}\n                    showOverlay={isSmContainer}\n                    fitPosition={isOnlyMdContainer || isOnlySmContainer}\n                    aria-label={placeholder}\n                />\n            )\n        );\n    }\n);\n\nexport default MultiSelectionFilter;\n","import { identity, isFunction } from '../../../../../../utils';\nimport { SelectItem } from '../../../../../internal/FormFields/Select/types';\nimport { SelectionOptionsList } from './types';\n\nexport const selectionOptionsFor = <T extends string = string>(list: SelectionOptionsList<T>, mapOptionName?: (id: T) => string | undefined) => {\n    const mapOption = isFunction(mapOptionName) ? mapOptionName : identity<T>;\n    return Object.freeze(list.map(id => ({ id, name: mapOption(id) ?? id } as SelectItem<T>)));\n};\n","import { useCallback, useMemo, useState } from 'preact/hooks';\nimport { listFrom } from '../../../../../../utils';\nimport { selectionOptionsFor } from './utils';\nimport type { SelectionOptionsList, UseMultiSelectionFilterConfig, UseMultiSelectionFilterConfigWithoutValues } from './types';\nimport type { SelectChangeEvent } from '../../../../../internal/FormFields/Select/types';\n\nexport const useMultiSelectionFilter = <FilterParam extends string = string, FilterValue extends string = string>({\n    filterParam,\n    filterValues,\n    filters,\n    defaultFilters,\n    updateFilters,\n    mapFilterOptionName,\n}: UseMultiSelectionFilterConfig<FilterParam, FilterValue>) => {\n    const selection = useMemo(() => {\n        return listFrom<FilterValue>(filters?.[filterParam] ?? defaultFilters?.[filterParam] ?? '');\n    }, [defaultFilters, filters, filterParam]);\n\n    const selectionOptions = useMemo(\n        () => filterValues && selectionOptionsFor(filterValues, mapFilterOptionName),\n        [filterValues, mapFilterOptionName]\n    );\n\n    const updateSelection = useCallback(\n        ({ target }: SelectChangeEvent) => {\n            updateFilters?.({ [filterParam]: target?.value || '' });\n        },\n        [updateFilters, filterParam]\n    );\n\n    return { selection, selectionOptions, updateSelection } as const;\n};\n\nexport const useMultiSelectionFilterWithoutValues = <FilterParam extends string = string, FilterValue extends string = string>(\n    config: UseMultiSelectionFilterConfigWithoutValues<FilterParam, FilterValue>\n) => {\n    const [filterValues, updateFilterValues] = useState<SelectionOptionsList<FilterValue>>();\n    const useMultiSelectionFilterProperties = useMultiSelectionFilter({ ...config, filterValues });\n\n    return { ...useMultiSelectionFilterProperties, filterValues, updateFilterValues } as const;\n};\n\nexport default useMultiSelectionFilter;\n","import { FilterParam } from '../../../../../types';\nimport type { ITransactionCategory, ITransactionStatus } from '../../../../../../types';\nimport type { TransactionsOverviewMultiSelectionFilterParam } from './types';\n\nexport const TRANSACTIONS_OVERVIEW_MULTI_SELECTION_FILTERS = [FilterParam.CURRENCIES, FilterParam.CATEGORIES, FilterParam.STATUSES] as const;\n\nexport const DEFAULT_TRANSACTIONS_OVERVIEW_MULTI_SELECTION_FILTER_PARAMS = Object.freeze(\n    Object.fromEntries(TRANSACTIONS_OVERVIEW_MULTI_SELECTION_FILTERS.map(param => [param, '']))\n) as Readonly<{ [P in TransactionsOverviewMultiSelectionFilterParam]: string }>;\n\nexport const TRANSACTION_CATEGORIES: readonly ITransactionCategory[] = [\n    'ATM',\n    'Capital',\n    'Chargeback',\n    'Correction',\n    // 'Fee',\n    'Payment',\n    'Refund',\n    'Transfer',\n    'Other',\n] as const;\n\nexport const TRANSACTION_STATUSES: readonly ITransactionStatus[] = ['Booked', 'Pending', 'Reversed'] as const;\n","import useBalanceAccountSelection from './useBalanceAccountSelection';\nimport { MutableRef, useCallback, useEffect, useRef, useState } from 'preact/hooks';\nimport {\n    getTimeRangeSelectionDefaultPresetOptions,\n    TIME_RANGE_SELECTION_PRESET_OPTION_KEYS,\n    TimeRangeOptions,\n    UseTimeRangeSelectionConfig,\n} from '../components/internal/DatePicker/components/TimeRangeSelector';\nimport { DEFAULT_TRANSACTIONS_OVERVIEW_MULTI_SELECTION_FILTER_PARAMS } from '../components/external/TransactionsOverview/components/MultiSelectionFilter';\nimport { FilterParam } from '../components/types';\n\nconst getDefaultFilterParams = (\n    type: 'transactions' | 'payouts' | 'reports' | 'disputes' | 'paymentLinks',\n    timeRange?: TimeRangeOptions,\n    timeRangeOptionsSubset?: Partial<UseTimeRangeSelectionConfig['options']>\n) => {\n    const timeRangeOptions = getTimeRangeSelectionDefaultPresetOptions();\n    const defaultTimeRange = timeRange\n        ? (`common.filters.types.date.rangeSelect.options.${timeRange}` as const)\n        : TIME_RANGE_SELECTION_PRESET_OPTION_KEYS.LAST_30_DAYS;\n\n    const { from, to } = timeRangeOptions[defaultTimeRange]!;\n\n    const defaultFilterParams = {\n        ...(type === 'transactions' && {\n            ...DEFAULT_TRANSACTIONS_OVERVIEW_MULTI_SELECTION_FILTER_PARAMS,\n            [FilterParam.MIN_AMOUNT]: undefined,\n            [FilterParam.MAX_AMOUNT]: undefined,\n        }),\n        ...(type !== 'paymentLinks' && {\n            [FilterParam.BALANCE_ACCOUNT]: undefined,\n        }),\n        ...(type === 'paymentLinks' && {\n            [FilterParam.MERCHANT_REFERENCE]: undefined,\n            [FilterParam.PAYMENT_LINK_ID]: undefined,\n            [FilterParam.MIN_AMOUNT]: undefined,\n            [FilterParam.MAX_AMOUNT]: undefined,\n        }),\n        [FilterParam.CREATED_SINCE]: new Date(from).toISOString(),\n        [FilterParam.CREATED_UNTIL]: new Date(to).toISOString(),\n    } as const;\n\n    return { defaultFilterParams, defaultTimeRange, timeRangeOptions: timeRangeOptionsSubset || timeRangeOptions } as const;\n};\n\nconst useDefaultOverviewFilterParams = (\n    filterType: Parameters<typeof getDefaultFilterParams>[0],\n    balanceAccount?: ReturnType<typeof useBalanceAccountSelection>['activeBalanceAccount'],\n    timeRange?: TimeRangeOptions,\n    timeRangeOptionsSubset?: Partial<UseTimeRangeSelectionConfig['options']>\n) => {\n    const [nowTimestamp, setNowTimestamp] = useState(Date.now());\n    const params = getDefaultFilterParams(filterType, timeRange, timeRangeOptionsSubset);\n    const defaultParams: MutableRef<any> = useRef(params);\n    const refreshNowTimestamp = useCallback(() => setNowTimestamp(Date.now()), [setNowTimestamp]);\n\n    useEffect(() => {\n        refreshNowTimestamp();\n    }, [balanceAccount, refreshNowTimestamp]);\n\n    return { defaultParams, nowTimestamp, refreshNowTimestamp } as const;\n};\n\nexport default useDefaultOverviewFilterParams;\n","import { useMemo } from 'preact/hooks';\nimport DataOverviewDetails from '../../DataOverviewDetails/DataOverviewDetails';\nimport { DetailsComponentProps, PayoutDetailsWithIdProps, SelectedDetail } from '../../DataOverviewDetails/types';\n\n// [TODO]: Consider covering ...restData with type information (added here as a hack to capture extra details)\nfunction ModalContent({ type, data, dataCustomization, ...restData }: SelectedDetail) {\n    const detailProps: DetailsComponentProps | undefined = useMemo(() => {\n        switch (type) {\n            case 'payout':\n                return { ...(data as PayoutDetailsWithIdProps & { balanceAccountDescription?: string }), type, ...restData };\n        }\n    }, [data, restData, type]);\n\n    return detailProps && <DataOverviewDetails {...(detailProps as DetailsComponentProps)} dataCustomization={dataCustomization} />;\n}\n\nexport default ModalContent;\n","import Modal from '../Modal';\nimport { useEffect } from 'preact/hooks';\nimport { FC, PropsWithChildren } from 'preact/compat';\nimport { popoverUtil } from '../Popover/utils/popoverUtil';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport useModalDetails from '../../../hooks/useModalDetails/useModalDetails';\nimport ModalContent from '../Modal/ModalContent/ModalContent';\nimport { DataCustomizationObject } from '../../types';\nimport { TranslationKey } from '../../../translations';\n\nexport interface DataOverviewDisplayProps {\n    ariaLabelKey: TranslationKey;\n    onContactSupport?: () => void;\n    balanceAccountDescription?: string;\n    selectedDetail: ReturnType<typeof useModalDetails>['selectedDetail'];\n    resetDetails: ReturnType<typeof useModalDetails>['resetDetails'];\n    className: string;\n    dataCustomization?: DataCustomizationObject<any, any, any>;\n}\n\nexport const DataDetailsModal: FC<DataOverviewDisplayProps> = ({\n    children,\n    className,\n    ariaLabelKey,\n    selectedDetail,\n    resetDetails,\n    dataCustomization,\n}: PropsWithChildren<DataOverviewDisplayProps>) => {\n    const { i18n } = useCoreContext();\n    const isModalOpen = !!selectedDetail;\n\n    useEffect(() => {\n        if (isModalOpen) {\n            popoverUtil.closeAll();\n        }\n    }, [isModalOpen]);\n\n    return (\n        <div className={className}>\n            {children}\n            {selectedDetail && (\n                <Modal\n                    title={selectedDetail?.title ? i18n.get(selectedDetail.title) : undefined}\n                    isOpen={!!selectedDetail}\n                    aria-label={i18n.get(ariaLabelKey)}\n                    onClose={resetDetails}\n                    isDismissible={true}\n                    headerWithBorder={false}\n                    size={selectedDetail?.modalSize ?? 'large'}\n                >\n                    {selectedDetail && <ModalContent dataCustomization={{ details: dataCustomization }} {...selectedDetail?.selection} />}\n                </Modal>\n            )}\n        </div>\n    );\n};\n","import { useCallback, useEffect, useState } from 'preact/hooks';\nimport { OnDataRetrievedCallback } from '../components/types';\nimport { isFunction } from '../utils';\n\nexport const useCustomColumnsData = <T>({\n    records,\n    hasCustomColumn = false,\n    onDataRetrieve,\n    mergeCustomData,\n}: {\n    records: T[];\n    hasCustomColumn?: boolean;\n    onDataRetrieve?: OnDataRetrievedCallback<T[]> | undefined;\n    mergeCustomData: (args: { retrievedData: Awaited<ReturnType<OnDataRetrievedCallback<T[]>>>; records: T[] }) => (T & Record<string, any>)[];\n}) => {\n    const [customRecords, setCustomRecords] = useState<T[] | (T & Record<string, any>)[]>(records);\n    const [loadingCustomRecords, setLoadingCustomRecords] = useState(false);\n\n    const mergedRecords = useCallback(async () => {\n        try {\n            if (hasCustomColumn && isFunction(onDataRetrieve)) {\n                const retrievedData = await onDataRetrieve(records);\n                if (!Array.isArray(retrievedData)) throw new Error('Retrieved data should be an array');\n                else setCustomRecords(mergeCustomData({ records, retrievedData: retrievedData?.filter(Boolean) || [] }));\n            } else {\n                setCustomRecords(records);\n            }\n        } catch (error) {\n            setCustomRecords(records);\n            console.error(error);\n        } finally {\n            setLoadingCustomRecords(false);\n        }\n    }, [hasCustomColumn, onDataRetrieve, mergeCustomData, records]);\n\n    useEffect(() => {\n        if (hasCustomColumn && onDataRetrieve) {\n            setLoadingCustomRecords(true);\n        }\n        void mergedRecords();\n    }, [hasCustomColumn, mergedRecords, onDataRetrieve]);\n\n    return { customRecords, loadingCustomRecords } as const;\n};\n","import { EMPTY_ARRAY } from '../../../utils';\nimport type { CustomColumn } from '../../types';\n\ntype _Fields<Field extends string> = readonly CustomColumn<Field>[];\n\nexport const hasCustomField = <Field extends string, StandardFields extends readonly string[] = string[]>(\n    preferredFields?: _Fields<Field>,\n    standardFields = EMPTY_ARRAY as unknown as StandardFields\n) => {\n    if (Array.isArray(preferredFields)) {\n        for (const field of preferredFields) {\n            try {\n                // Normalize the field to determine its name (without any leading or trailing whitespaces)\n                const fieldName = typeof field === 'object' ? field?.key?.trim() : false;\n\n                if (\n                    // `fieldName` is expected to be a string (except in a case of misconfiguration)\n                    typeof fieldName === 'string' &&\n                    // `fieldName` should not be an empty string (except in a case of misconfiguration)\n                    fieldName &&\n                    // `field` is a custom field if `fieldName` is not in the `standardFields` list\n                    !standardFields.includes(fieldName as StandardFields[number])\n                ) {\n                    return true;\n                }\n            } catch (ex) {\n                // An exception will only be thrown if there is some misconfiguration of the preferred field.\n                // Only log the exception to console if not in production environment (vite).\n                if (!import.meta.env.PROD) console.error(ex);\n            }\n        }\n    }\n    return false;\n};\n\nexport default hasCustomField;\n","import { EMPTY_OBJECT } from '../../../utils';\n\nexport type MatchRecordCallback<OriginalRecord extends Record<string, any>, ModifiedRecord extends Record<string, any>> = (\n    modifiedRecord: ModifiedRecord,\n    originalRecord: OriginalRecord,\n    recordIndex: number\n) => any;\n\nexport type MergedRecord<OriginalRecord extends Record<string, any>, ModifiedRecord extends Record<string, any>> =\n    | OriginalRecord\n    | (OriginalRecord & Partial<Omit<ModifiedRecord, keyof OriginalRecord>>);\n\nexport const mergeRecords = <OriginalRecord extends Record<string, any>, ModifiedRecord extends Record<string, any>>(\n    originalRecords: OriginalRecord[],\n    modifiedRecords: ModifiedRecord[],\n    matchRecordCallback: MatchRecordCallback<OriginalRecord, ModifiedRecord>\n) => {\n    const mergedRecords: MergedRecord<OriginalRecord, ModifiedRecord>[] = [];\n\n    for (let i = 0; i < originalRecords.length; i++) {\n        const originalRecord = originalRecords[i]!;\n        const modifiedRecord = modifiedRecords.find(record => matchRecordCallback(record, originalRecord, i));\n        mergedRecords[i] = { ...(modifiedRecord ?? EMPTY_OBJECT), ...originalRecord };\n    }\n\n    return mergedRecords;\n};\n\nexport default mergeRecords;\n","import { BASE_CLASS, BASE_CLASS_DETAILS, EARLIEST_PAYOUT_SINCE_DATE } from './constants';\nimport { PAYOUT_TABLE_FIELDS, PayoutsTable } from '../PayoutsTable/PayoutsTable';\nimport FilterBar, { FilterBarMobileSwitch, useFilterBarState } from '../../../../internal/FilterBar';\nimport BalanceAccountSelector from '../../../../internal/FormFields/Select/BalanceAccountSelector';\nimport { DEFAULT_PAGE_LIMIT, LIMIT_OPTIONS } from '../../../../internal/Pagination/constants';\nimport { useCursorPaginatedRecords } from '../../../../internal/Pagination/hooks';\nimport useBalanceAccountSelection from '../../../../../hooks/useBalanceAccountSelection';\nimport DateFilter from '../../../../internal/FilterBar/filters/DateFilter/DateFilter';\nimport useModalDetails from '../../../../../hooks/useModalDetails/useModalDetails';\nimport { IPayout } from '../../../../../types';\nimport useDefaultOverviewFilterParams from '../../../../../hooks/useDefaultOverviewFilterParams';\nimport { PayoutsOverviewComponentProps, ExternalUIComponentProps, FilterParam, CustomDataRetrieved } from '../../../../types';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { IBalanceAccountBase } from '../../../../../types';\nimport { isFunction } from '../../../../../utils';\nimport { useCallback, useEffect, useMemo } from 'preact/hooks';\nimport { DataDetailsModal } from '../../../../internal/DataOverviewDisplay/DataDetailsModal';\nimport { Header } from '../../../../internal/Header';\nimport './PayoutsOverview.scss';\nimport { useCustomColumnsData } from '../../../../../hooks/useCustomColumnsData';\nimport hasCustomField from '../../../../utils/customData/hasCustomField';\nimport mergeRecords from '../../../../utils/customData/mergeRecords';\n\nexport const PayoutsOverview = ({\n    onFiltersChanged,\n    balanceAccounts,\n    allowLimitSelection = true,\n    preferredLimit = DEFAULT_PAGE_LIMIT,\n    onRecordSelection,\n    showDetails,\n    isLoadingBalanceAccount,\n    onContactSupport,\n    hideTitle,\n    dataCustomization,\n}: ExternalUIComponentProps<\n    PayoutsOverviewComponentProps & { balanceAccounts: IBalanceAccountBase[] | undefined; isLoadingBalanceAccount: boolean }\n>) => {\n    const { getPayouts: payoutsEndpointCall } = useConfigContext().endpoints;\n    const { activeBalanceAccount, balanceAccountSelectionOptions, onBalanceAccountSelection } = useBalanceAccountSelection({ balanceAccounts });\n    const { defaultParams, nowTimestamp, refreshNowTimestamp } = useDefaultOverviewFilterParams('payouts', activeBalanceAccount);\n\n    const getPayouts = useCallback(\n        async (pageRequestParams: Record<FilterParam | 'cursor', string>, signal?: AbortSignal) => {\n            const requestOptions = { signal, errorLevel: 'error' } as const;\n\n            return payoutsEndpointCall!(requestOptions, {\n                query: {\n                    ...pageRequestParams,\n                    createdSince:\n                        pageRequestParams[FilterParam.CREATED_SINCE] ?? defaultParams.current.defaultFilterParams[FilterParam.CREATED_SINCE],\n                    createdUntil:\n                        pageRequestParams[FilterParam.CREATED_UNTIL] ?? defaultParams.current.defaultFilterParams[FilterParam.CREATED_UNTIL],\n                    balanceAccountId: activeBalanceAccount?.id ?? '',\n                },\n            });\n        },\n        [activeBalanceAccount?.id, defaultParams, payoutsEndpointCall]\n    );\n\n    // FILTERS\n    const filterBarState = useFilterBarState();\n    const _onFiltersChanged = useMemo(() => (isFunction(onFiltersChanged) ? onFiltersChanged : void 0), [onFiltersChanged]);\n    const preferredLimitOptions = useMemo(() => (allowLimitSelection ? LIMIT_OPTIONS : undefined), [allowLimitSelection]);\n\n    const { canResetFilters, error, fetching, filters, limit, limitOptions, records, resetFilters, updateFilters, updateLimit, ...paginationProps } =\n        useCursorPaginatedRecords<IPayout, 'data', string, FilterParam>({\n            fetchRecords: getPayouts,\n            dataField: 'data',\n            filterParams: defaultParams.current.defaultFilterParams,\n            initialFiltersSameAsDefault: true,\n            onFiltersChanged: _onFiltersChanged,\n            preferredLimit,\n            preferredLimitOptions,\n            enabled: !!activeBalanceAccount?.id && !!payoutsEndpointCall,\n        });\n\n    useEffect(() => {\n        refreshNowTimestamp();\n    }, [filters, refreshNowTimestamp]);\n\n    const payoutDetails = useMemo(\n        () => ({\n            showDetails: showDetails ?? true,\n            callback: onRecordSelection,\n        }),\n        [showDetails, onRecordSelection]\n    );\n\n    const mergeCustomData = useCallback(\n        ({ records, retrievedData }: { records: IPayout[]; retrievedData: CustomDataRetrieved[] }) =>\n            mergeRecords(records, retrievedData, (modifiedRecord, record) => modifiedRecord.createdAt === record.createdAt),\n        []\n    );\n\n    const hasCustomColumn = useMemo(() => hasCustomField(dataCustomization?.list?.fields, PAYOUT_TABLE_FIELDS), [dataCustomization?.list?.fields]);\n    const { customRecords, loadingCustomRecords } = useCustomColumnsData<IPayout>({\n        records,\n        hasCustomColumn,\n        onDataRetrieve: dataCustomization?.list?.onDataRetrieve,\n        mergeCustomData,\n    });\n\n    const modalOptions = useMemo(() => ({ payout: payoutDetails }), [payoutDetails]);\n\n    const { updateDetails, resetDetails, selectedDetail } = useModalDetails(modalOptions);\n\n    const onRowClick = useCallback(\n        (value: IPayout) => {\n            updateDetails({\n                selection: {\n                    type: 'payout',\n                    data: { id: activeBalanceAccount?.id, balanceAccountDescription: activeBalanceAccount?.description || '', date: value.createdAt },\n                },\n                modalSize: 'small',\n            }).callback({ balanceAccountId: activeBalanceAccount?.id || '', date: value.createdAt });\n        },\n        [updateDetails, activeBalanceAccount?.id, activeBalanceAccount?.description]\n    );\n\n    return (\n        <div className={BASE_CLASS}>\n            <Header hideTitle={hideTitle} titleKey=\"payouts.overview.title\" subtitleKey=\"payouts.overview.generateInfo\">\n                <FilterBarMobileSwitch {...filterBarState} />\n            </Header>\n            <FilterBar {...filterBarState} ariaLabelKey=\"payouts.overview.filters.label\">\n                <BalanceAccountSelector\n                    activeBalanceAccount={activeBalanceAccount}\n                    balanceAccountSelectionOptions={balanceAccountSelectionOptions}\n                    onBalanceAccountSelection={onBalanceAccountSelection}\n                />\n                <DateFilter\n                    canResetFilters={canResetFilters}\n                    defaultParams={defaultParams}\n                    filters={filters}\n                    nowTimestamp={nowTimestamp}\n                    refreshNowTimestamp={refreshNowTimestamp}\n                    sinceDate={EARLIEST_PAYOUT_SINCE_DATE}\n                    timezone={'UTC'}\n                    updateFilters={updateFilters}\n                />\n            </FilterBar>\n            <DataDetailsModal\n                ariaLabelKey=\"payouts.details.title\"\n                className={BASE_CLASS_DETAILS}\n                onContactSupport={onContactSupport}\n                selectedDetail={selectedDetail as ReturnType<typeof useModalDetails>['selectedDetail']}\n                resetDetails={resetDetails}\n                dataCustomization={dataCustomization?.details}\n            >\n                <PayoutsTable\n                    loading={fetching || isLoadingBalanceAccount || !balanceAccounts || loadingCustomRecords}\n                    data={dataCustomization?.list?.onDataRetrieve ? customRecords : records}\n                    showPagination={true}\n                    onRowClick={onRowClick}\n                    showDetails={showDetails}\n                    limit={limit}\n                    limitOptions={limitOptions}\n                    onContactSupport={onContactSupport}\n                    onLimitSelection={updateLimit}\n                    error={error as AdyenPlatformExperienceError}\n                    customColumns={dataCustomization?.list?.fields}\n                    {...paginationProps}\n                />\n            </DataDetailsModal>\n        </div>\n    );\n};\n","export const BASE_CLASS = 'adyen-pe-payouts-overview-container';\n","import useBalanceAccounts from '../../../../../hooks/useBalanceAccounts';\nimport DataOverviewContainer from '../../../../internal/DataOverviewContainer/DataOverviewContainer';\nimport type { PayoutsOverviewComponentProps, ExternalUIComponentProps } from '../../../../types';\nimport { PayoutsOverview } from '../PayoutsOverview/PayoutsOverview';\nimport { BASE_CLASS } from './constants';\n\nfunction PayoutsOverviewContainer({ ...props }: ExternalUIComponentProps<PayoutsOverviewComponentProps>) {\n    const { balanceAccounts, isBalanceAccountIdWrong, isFetching, error } = useBalanceAccounts(props.balanceAccountId);\n\n    return (\n        <DataOverviewContainer\n            balanceAccountsError={error}\n            className={BASE_CLASS}\n            errorMessage={'payouts.overview.errors.unavailable'}\n            isBalanceAccountIdWrong={isBalanceAccountIdWrong}\n            onContactSupport={props.onContactSupport}\n        >\n            <PayoutsOverview {...props} balanceAccounts={balanceAccounts} isLoadingBalanceAccount={isFetching} />\n        </DataOverviewContainer>\n    );\n}\nexport default PayoutsOverviewContainer;\n","import { _UIComponentProps, ExternalComponentType, PayoutsOverviewComponentProps } from '../../types';\nimport Payouts from './components/PayoutsOverviewContainer/PayoutsOverviewContainer';\nimport UIElement from '../UIElement/UIElement';\n\nexport class PayoutsElement extends UIElement<PayoutsOverviewComponentProps> {\n    public static type: ExternalComponentType = 'payouts';\n\n    constructor(props: _UIComponentProps<PayoutsOverviewComponentProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n    }\n\n    public componentToRender = () => {\n        return <Payouts {...this.props} />;\n    };\n}\n\nexport default PayoutsElement;\n","import { isFunction } from '../../../utils';\nimport type { CustomColumn } from '../../types';\n\ntype _Fields<Field extends string> = readonly CustomColumn<Field>[];\ntype _RemappedField<Field extends string> = Field | undefined;\n\nexport const normalizeCustomFields = <Field extends string, Context>(\n    customFields?: _Fields<Field>,\n    fieldMappings: Record<string, _RemappedField<Field> | ((context?: Context) => _RemappedField<Field>)> = {},\n    context?: Context\n) => {\n    return customFields?.map(field => {\n        if (typeof field === 'object') {\n            const fieldName = field?.key?.trim();\n            const remappedFieldGetter = fieldName && fieldMappings[fieldName];\n            const remappedFieldName = isFunction(remappedFieldGetter) ? remappedFieldGetter(context) : remappedFieldGetter;\n            if (remappedFieldName) return { ...field, key: remappedFieldName };\n        }\n        return field;\n    });\n};\n\nexport default normalizeCustomFields;\n","import { useEffect, useRef } from 'preact/hooks';\n\nconst useComponentTiming = () => {\n    const duration = useRef<number | undefined>(undefined);\n    const startTime = useRef(0);\n\n    useEffect(() => {\n        // Capture the start time, when component is mounted\n        startTime.current = performance.now();\n        // Compute the duration, when component is unmounting\n        return () => void (duration.current = performance.now() - startTime.current);\n    }, []);\n\n    return { duration } as const;\n};\n\nexport default useComponentTiming;\n","import cx from 'classnames';\nimport { useEffect, useMemo } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { RefundReason, RefundResult } from '../../types';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { ButtonActionsLayoutBasic } from '../../../../internal/Button/ButtonActions/types';\nimport { TX_DATA_ACTION_BAR, TX_DATA_CONTAINER, sharedTransactionDetailsEventProperties } from '../../constants';\nimport ButtonActions from '../../../../internal/Button/ButtonActions/ButtonActions';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport useMutation from '../../../../../hooks/useMutation/useMutation';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\n\nexport interface PaymentRefundActionsProps {\n    beginRefund: () => void;\n    currency: string;\n    disabled: boolean;\n    maxAmount: number;\n    refundAmount: number;\n    refundedAmount: number;\n    refundingAmounts: readonly number[];\n    refundReason: RefundReason;\n    setRefundInProgress: (inProgress: boolean) => void;\n    setRefundResult: (result: RefundResult) => void;\n    showDetails: () => void;\n    transactionId: string;\n}\n\nconst PaymentRefundActions = ({\n    beginRefund,\n    currency,\n    disabled,\n    maxAmount,\n    refundAmount,\n    refundedAmount,\n    refundingAmounts,\n    refundReason,\n    setRefundInProgress,\n    setRefundResult,\n    showDetails,\n    transactionId,\n}: PaymentRefundActionsProps) => {\n    const { initiateRefund } = useConfigContext().endpoints;\n    const { isLoading, mutate: refundTransaction } = useMutation({ queryFn: initiateRefund });\n    const { i18n } = useCoreContext();\n\n    const amountWithinRange = refundAmount > 0 && refundAmount <= maxAmount;\n    const isFullRefundAmount = refundedAmount === 0 && refundingAmounts.length === 0 && refundAmount === maxAmount;\n    const refundDisabled = disabled || isLoading || !amountWithinRange;\n\n    const backButtonLabel = useMemo(() => i18n.get('transactions.details.refund.actions.back'), [i18n]);\n\n    const refundButtonLabelsWithoutAmount = useMemo(\n        () => ({\n            idle: i18n.get('transactions.details.refund.actions.refund.labels.payment'),\n            inProgress: `${i18n.get('transactions.details.refund.actions.refund.labels.inProgress')}..`,\n        }),\n        [i18n]\n    );\n\n    const refundButtonLabelWithAmount = useMemo(() => {\n        const values = { amount: i18n.amount(refundAmount, currency) };\n        return i18n.get('transactions.details.refund.actions.refund.labels.amount', { values });\n    }, [i18n, currency, refundAmount]);\n\n    const refundButtonLabel = isLoading\n        ? refundButtonLabelsWithoutAmount.inProgress\n        : amountWithinRange\n          ? refundButtonLabelWithAmount\n          : refundButtonLabelsWithoutAmount.idle;\n\n    const userEvents = useAnalyticsContext();\n\n    const primaryAction = {\n        disabled: refundDisabled,\n        event: async () => {\n            if (refundDisabled) return;\n\n            beginRefund();\n\n            userEvents.addEvent?.('Completed refund', {\n                ...sharedTransactionDetailsEventProperties,\n                isFullRefund: isFullRefundAmount,\n                refundReason,\n            });\n\n            try {\n                const path = { transactionId };\n                const payload = { amount: { currency, value: refundAmount }, refundReason };\n                await refundTransaction({ contentType: 'application/json', body: payload }, { path });\n                setRefundResult('done');\n            } catch {\n                setRefundResult('error');\n            }\n        },\n        state: isLoading ? 'loading' : undefined,\n        title: refundButtonLabel,\n        variant: ButtonVariant.PRIMARY,\n        ariaLabel: isLoading ? refundButtonLabelWithAmount : refundButtonLabel,\n    } as const;\n\n    const secondaryAction = {\n        disabled: disabled,\n        event: showDetails,\n        title: backButtonLabel,\n        variant: ButtonVariant.SECONDARY,\n    } as const;\n\n    useEffect(() => setRefundInProgress(isLoading), [isLoading, setRefundInProgress]);\n\n    return (\n        <div className={cx(TX_DATA_CONTAINER, TX_DATA_ACTION_BAR)}>\n            <ButtonActions actions={[primaryAction, secondaryAction]} layout={ButtonActionsLayoutBasic.BUTTONS_END} />\n        </div>\n    );\n};\n\nexport default PaymentRefundActions;\n","import {\n    TX_DATA_CONTAINER,\n    TX_DATA_INPUT,\n    TX_DATA_INPUT_CONTAINER,\n    TX_DATA_INPUT_CONTAINER_SHORT,\n    TX_DATA_INPUT_CONTAINER_TEXT,\n    TX_DATA_INPUT_CONTAINER_WITH_ERROR,\n    TX_DATA_INPUT_HEAD,\n} from '../../constants';\nimport cx from 'classnames';\nimport { memo } from 'preact/compat';\nimport { Tag } from '../../../../internal/Tag/Tag';\nimport { TagVariant } from '../../../../internal/Tag/types';\nimport { ARIA_ERROR_SUFFIX } from '../../../../../core/Errors/constants';\nimport { getDecimalAmount, getDivider } from '../../../../../core/Localization/amount/amount-util';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../internal/Typography/Typography';\nimport InputBase from '../../../../internal/FormFields/InputBase';\nimport useUniqueId from '../../../../../hooks/useUniqueId';\nimport Icon from '../../../../internal/Icon';\n\ninterface PaymentRefundAmountProps {\n    currency: string;\n    disabled?: boolean;\n    onChange?: (value: number) => void;\n    value: string | number;\n}\n\nconst PaymentRefundAmount = memo(({ currency, disabled, onChange, value }: PaymentRefundAmountProps) => {\n    const { i18n } = useCoreContext();\n    const inputIdentifier = useUniqueId();\n    const labelIdentifier = useUniqueId();\n\n    const currencyExponent = Math.log10(getDivider(currency));\n    const refundableAmount = parseInt(`${value}`, 10);\n    const formattedAmount = getDecimalAmount(refundableAmount, currency).toFixed(currencyExponent);\n\n    const [refundAmount, setRefundAmount] = useState<string | number>(formattedAmount);\n    const [validationError, setValidationError] = useState<keyof typeof errorMessages>();\n\n    const errorMessages = useMemo(() => {\n        const values = { amount: i18n.amount(refundableAmount, currency) };\n        return {\n            excess: i18n.get('transactions.details.refund.inputs.amount.errors.excess', { values }),\n            negative: i18n.get('transactions.details.refund.inputs.amount.errors.negative'),\n            required: i18n.get('transactions.details.refund.inputs.amount.errors.required'),\n        } as const;\n    }, [i18n, currency, refundableAmount]);\n\n    const errorMessage = validationError && errorMessages[validationError];\n    const inputLabel = useMemo(() => i18n.get('transactions.details.refund.inputs.amount.label'), [i18n]);\n    const inputElementRef = useRef<HTMLInputElement>(null);\n\n    const onInput = useCallback(\n        (target: HTMLInputElement) => {\n            let error: typeof validationError;\n            let value = target.value.trim();\n            const amount = Math.trunc(+`${parseFloat(value)}e${currencyExponent}`) || 0;\n\n            if (amount || value) {\n                if (amount < 0) error = 'negative';\n                if (amount > refundableAmount) error = 'excess';\n            } else error = 'required';\n\n            // Get the decimal separator based on the user's locale\n            const decimalSeparator = (1.1).toLocaleString(i18n.locale).match(/\\d(.*?)\\d/)?.[1] || '.';\n\n            // Split the input value at the decimal separator\n            const parts = value.split(decimalSeparator);\n\n            if (parts.length === 2) {\n                const integerPart = parts[0]!;\n                let decimalPart = parts[1]!;\n\n                if (decimalPart.length >= currencyExponent) {\n                    decimalPart = decimalPart.substring(0, currencyExponent);\n                    value = integerPart + decimalSeparator + decimalPart;\n                    target.value = value;\n                }\n            }\n\n            setRefundAmount(value);\n            setValidationError(error);\n            onChange?.(error ? 0 : amount);\n        },\n        [currencyExponent, refundableAmount, onChange]\n    );\n\n    const cachedRefundableAmount = useRef<number>();\n\n    useEffect(() => {\n        if (cachedRefundableAmount.current !== refundableAmount) {\n            cachedRefundableAmount.current = refundableAmount;\n        } else if (disabled && validationError && inputElementRef.current) {\n            inputElementRef.current.value = formattedAmount;\n        } else return;\n\n        if (inputElementRef.current) {\n            onInput(inputElementRef.current);\n        }\n    }, [onInput, disabled, formattedAmount, refundableAmount]);\n\n    return (\n        <div className={TX_DATA_CONTAINER}>\n            <div className={TX_DATA_INPUT_HEAD}>\n                <div id={labelIdentifier}>\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                        {inputLabel}\n                    </Typography>\n                </div>\n            </div>\n\n            <div\n                className={cx({\n                    [TX_DATA_INPUT_CONTAINER]: true,\n                    [TX_DATA_INPUT_CONTAINER_SHORT]: true,\n                    [TX_DATA_INPUT_CONTAINER_TEXT]: true,\n                    [TX_DATA_INPUT_CONTAINER_WITH_ERROR]: errorMessage,\n                })}\n            >\n                <label htmlFor={inputIdentifier} aria-labelledby={labelIdentifier}>\n                    {currency && <Tag label={currency} variant={TagVariant.DEFAULT} />}\n                    <InputBase\n                        min={0}\n                        type=\"number\"\n                        className={TX_DATA_INPUT}\n                        disabled={disabled}\n                        lang={i18n.locale}\n                        onInput={evt => onInput(evt.currentTarget)}\n                        value={refundAmount}\n                        uniqueId={inputIdentifier}\n                        ref={inputElementRef}\n                    />\n                </label>\n                {errorMessage && (\n                    <div className=\"adyen-pe-input__refund-invalid-value\" id={`${inputIdentifier}${ARIA_ERROR_SUFFIX}`}>\n                        <Icon name=\"cross-circle-fill\" />\n                        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                            {errorMessage}\n                        </Typography>\n                    </div>\n                )}\n            </div>\n        </div>\n    );\n});\n\nexport default PaymentRefundAmount;\n","import cx from 'classnames';\nimport { memo } from 'preact/compat';\nimport { useModalContext } from '../../../../internal/Modal/Modal';\nimport { TX_DATA_CONTAINER, TX_DATA_HEAD_CONTAINER } from '../../constants';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../internal/Typography/Typography';\n\nconst PaymentRefundNotice = memo(() => {\n    const { i18n } = useCoreContext();\n    const { withinModal } = useModalContext();\n    const titleEl = withinModal ? TypographyElement.H2 : TypographyElement.DIV;\n\n    return (\n        <div className={cx(TX_DATA_CONTAINER, TX_DATA_HEAD_CONTAINER)}>\n            <Typography el={titleEl} variant={TypographyVariant.SUBTITLE} stronger>\n                {i18n.get('transactions.details.refund.title')}\n            </Typography>\n            <Typography variant={TypographyVariant.BODY}>{i18n.get('transactions.details.refund.processingInfo')}</Typography>\n        </div>\n    );\n});\n\nexport default PaymentRefundNotice;\n","import { REFUND_REASONS, TX_DATA_CONTAINER, TX_DATA_INPUT_CONTAINER, TX_DATA_INPUT_CONTAINER_SHORT, TX_DATA_INPUT_HEAD } from '../../constants';\nimport { RefundReason } from '../../types';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { getTransactionRefundReason } from '../../../../utils/translation/getters';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../internal/Typography/Typography';\nimport Select from '../../../../internal/FormFields/Select';\nimport useUniqueId from '../../../../../hooks/useUniqueId';\n\nexport interface PaymentRefundReasonProps {\n    disabled: boolean;\n    onChange: (reason: RefundReason) => void;\n    reason: RefundReason;\n}\n\nconst PaymentRefundReason = ({ disabled, onChange, reason }: PaymentRefundReasonProps) => {\n    const { i18n } = useCoreContext();\n    const selectLabelId = useUniqueId();\n    const selectLabel = useMemo(() => i18n.get('transactions.details.refund.inputs.reason.label'), [i18n]);\n\n    const refundReasons = useMemo(\n        () =>\n            REFUND_REASONS.map(reason => ({\n                name: getTransactionRefundReason(i18n, reason) as string,\n                id: reason,\n            })),\n        [i18n]\n    );\n\n    const onReasonChange = useCallback(\n        (evt: { target?: { value: RefundReason } }) => {\n            const reason = evt.target?.value;\n            reason && onChange(reason);\n        },\n        [onChange]\n    );\n\n    return (\n        <div className={TX_DATA_CONTAINER}>\n            <div id={selectLabelId} className={TX_DATA_INPUT_HEAD}>\n                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                    {selectLabel}\n                </Typography>\n            </div>\n\n            <div className={`${TX_DATA_INPUT_CONTAINER} ${TX_DATA_INPUT_CONTAINER_SHORT}`}>\n                <Select\n                    aria-labelledby={selectLabelId}\n                    filterable={false}\n                    multiSelect={false}\n                    readonly={disabled}\n                    items={refundReasons}\n                    onChange={onReasonChange}\n                    selected={reason}\n                />\n            </div>\n        </div>\n    );\n};\n\nexport default PaymentRefundReason;\n","import { ComponentChild, VNode, TargetedMouseEvent } from 'preact';\n\nexport interface AlertAction {\n    label: string;\n    onClick: () => void;\n}\n\nexport interface AlertProps {\n    actions?: AlertAction[];\n    className?: string;\n    closeButton?: boolean;\n    type: AlertTypeOption;\n    title?: VNode<Element> | string;\n    description?: VNode<Element> | string;\n    children?: ComponentChild;\n    onClose?: (event: TargetedMouseEvent<HTMLButtonElement>) => void;\n    variant?: AlertVariantOption;\n}\n\nexport enum AlertTypeOption {\n    WARNING = 'warning',\n    CRITICAL = 'critical',\n    HIGHLIGHT = 'highlight',\n    SUCCESS = 'success',\n}\n\nexport enum AlertVariantOption {\n    DEFAULT = 'default',\n    TIP = 'tip',\n}\n","import Icon from '../Icon';\nimport { AlertTypeOption } from './types';\n\nexport interface AlertIconProps {\n    type: AlertTypeOption;\n    className?: string;\n}\n\nexport const AlertIcon = ({ className, type }: AlertIconProps) => {\n    switch (type) {\n        case AlertTypeOption.WARNING:\n            return <Icon name=\"warning-filled\" className={className} />;\n        case AlertTypeOption.CRITICAL:\n            return <Icon name=\"cross-circle-fill\" className={className} />;\n        case AlertTypeOption.HIGHLIGHT:\n            return <Icon name=\"info-filled\" className={className} />;\n        case AlertTypeOption.SUCCESS:\n        default:\n            return <Icon name=\"checkmark-circle-fill\" className={className} />;\n    }\n};\n","import cx from 'classnames';\nimport Button from '../Button';\nimport { ButtonVariant } from '../Button/types';\nimport Icon from '../Icon';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\nimport Typography from '../Typography/Typography';\nimport { AlertIcon } from './AlertIcon';\nimport { AlertProps, AlertVariantOption } from './types';\nimport './Alert.scss';\n\n//TODO: Revisit the closeButton prop which is adopted from Bento component\nexport const Alert = ({\n    className,\n    description,\n    closeButton,\n    title,\n    type,\n    children,\n    onClose,\n    actions,\n    variant = AlertVariantOption.DEFAULT,\n}: AlertProps) => {\n    const { i18n } = useCoreContext();\n    return (\n        <div className={cx('adyen-pe-alert', `adyen-pe-alert--${type}`, `adyen-pe-alert--${variant}`, className)} role=\"alert\">\n            <AlertIcon type={type} className=\"adyen-pe-alert__icon\" />\n            <div className=\"adyen-pe-alert__content-container\">\n                <div className=\"adyen-pe-alert__content\">\n                    {title && variant !== AlertVariantOption.TIP && (\n                        <Typography className={'adyen-pe-alert__title'} el={TypographyElement.DIV} variant={TypographyVariant.BODY} wide strongest>\n                            {title}\n                        </Typography>\n                    )}\n                    {description && (\n                        <Typography\n                            className={'adyen-pe-alert__description'}\n                            el={TypographyElement.DIV}\n                            variant={variant === AlertVariantOption.TIP ? TypographyVariant.CAPTION : TypographyVariant.BODY}\n                            wide\n                        >\n                            {description}\n                        </Typography>\n                    )}\n                    {children}\n                </div>\n                {!!actions?.length && (\n                    <div className=\"adyen-pe-alert__actions\">\n                        {actions?.map((action, index) => (\n                            <Button key={index} onClick={action.onClick} variant={ButtonVariant.TERTIARY}>\n                                {action.label}\n                            </Button>\n                        ))}\n                    </div>\n                )}\n            </div>\n            {onClose && (variant !== AlertVariantOption.TIP || closeButton) && (\n                <div className=\"adyen-pe-alert__close-button\">\n                    <Button\n                        iconButton\n                        variant={ButtonVariant.TERTIARY}\n                        onClick={onClose}\n                        aria-label={i18n.get('common.actions.dismiss.labels.dismiss')}\n                    >\n                        <Icon name=\"cross\" />\n                    </Button>\n                </div>\n            )}\n        </div>\n    );\n};\n\nexport default Alert;\n","import {\n    REFUND_REASONS,\n    TX_DATA_CLASS,\n    TX_REFUND_RESPONSE,\n    TX_REFUND_RESPONSE_ERROR_ICON,\n    TX_REFUND_RESPONSE_ICON,\n    TX_REFUND_RESPONSE_SUCCESS_ICON,\n    sharedTransactionDetailsEventProperties,\n} from '../../constants';\nimport { memo } from 'preact/compat';\nimport { clamp } from '../../../../../utils';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport useComponentTiming from '../../../../../hooks/useComponentTiming';\n// import useRefundLineItems from '../../hooks/useRefundLineItems';\nimport PaymentRefundActions from './PaymentRefundActions';\nimport PaymentRefundAmount from './PaymentRefundAmount';\nimport PaymentRefundNotice from './PaymentRefundNotice';\nimport PaymentRefundReason from './PaymentRefundReason';\nimport Alert from '../../../../internal/Alert/Alert';\nimport Button from '../../../../internal/Button/Button';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { ActiveView, RefundMode, RefundReason, RefundResult, TransactionDetails } from '../../types';\nimport { TypographyElement, TypographyModifier, TypographyVariant } from '../../../../internal/Typography/types';\nimport { AlertTypeOption, AlertVariantOption } from '../../../../internal/Alert/types';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { ILineItem, IRefundMode } from '../../../../../types';\nimport { TranslationKey } from '../../../../../translations';\nimport { IconName } from '../../../../internal/Icon/Icon';\nimport Icon from '../../../../internal/Icon';\nimport cx from 'classnames';\n\nexport interface PaymentRefundProps {\n    currency: string;\n    disabled: boolean;\n    lineItems: readonly ILineItem[];\n    maxAmount: number;\n    mode: IRefundMode;\n    refreshTransaction: () => void;\n    refundedAmount: number;\n    refundingAmounts: readonly number[];\n    setActiveView: (activeView: ActiveView) => void;\n    setLocked: (locked: boolean) => void;\n    transaction: TransactionDetails;\n}\n\ninterface PaymentRefundFormProps extends Omit<PaymentRefundProps, 'disabled' | 'refreshTransaction' | 'setActiveView' | 'setLocked'> {\n    beginRefund: () => void;\n    setRefundResult: (result: RefundResult) => void;\n    showDetails: () => void;\n}\n\ninterface PaymentRefundResultProps extends Pick<PaymentRefundProps, 'refreshTransaction'> {\n    result: RefundResult;\n    showDetails: () => void;\n}\n\nconst PaymentRefund = ({ disabled, refreshTransaction, setActiveView, setLocked, ...formProps }: PaymentRefundProps) => {\n    const [refundResult, setRefundResult] = useState<RefundResult>();\n    const beginRefund = useCallback(() => void (initiatedRefund.current = true), []);\n    const lockRefunds = useCallback(() => setLocked(true), [setLocked]);\n    const showDetails = useCallback(() => setActiveView(ActiveView.DETAILS), [setActiveView]);\n\n    const { duration } = useComponentTiming();\n    const loggedEntryEvent = useRef(false);\n    const initiatedRefund = useRef(false);\n    const userEvents = useAnalyticsContext();\n\n    useEffect(() => {\n        if (!loggedEntryEvent.current) {\n            loggedEntryEvent.current = true;\n            userEvents.addEvent?.('Switched to refund view', sharedTransactionDetailsEventProperties);\n        }\n    }, [userEvents]);\n\n    useEffect(() => {\n        if (disabled && !refundResult) showDetails();\n        if (refundResult === 'done') lockRefunds();\n    }, [disabled, lockRefunds, refundResult, showDetails]);\n\n    useEffect(() => {\n        return () => {\n            if (duration.current !== undefined && !initiatedRefund.current) {\n                // This component is unmounting (duration.current is defined),\n                // and a refund was not initiated (initiatedRefund.current is false),\n                // indicating an abrupt termination of the refund flow.\n                userEvents.addEvent?.('Cancelled refund', sharedTransactionDetailsEventProperties);\n            }\n        };\n    }, [duration, userEvents]);\n\n    return refundResult ? (\n        <PaymentRefund.Result result={refundResult} refreshTransaction={refreshTransaction} showDetails={showDetails} />\n    ) : (\n        <PaymentRefund.Form {...formProps} beginRefund={beginRefund} setRefundResult={setRefundResult} showDetails={showDetails} />\n    );\n};\n\nPaymentRefund.Form = memo(\n    ({\n        beginRefund,\n        currency,\n        maxAmount,\n        mode,\n        refundedAmount,\n        refundingAmounts,\n        setRefundResult,\n        showDetails,\n        transaction,\n    }: PaymentRefundFormProps) => {\n        const [refundInProgress, setRefundInProgress] = useState(false);\n        const [refundReason, setRefundReason] = useState<RefundReason>(REFUND_REASONS[0]);\n        const [refundAmount, setRefundAmount] = useState(0);\n\n        // const { refundingItems } = useRefundLineItems({ currency, lineItems });\n        const { i18n } = useCoreContext();\n\n        const amount = useMemo(() => {\n            switch (mode) {\n                case RefundMode.FULL_AMOUNT:\n                case RefundMode.PARTIAL_AMOUNT:\n                case RefundMode.PARTIAL_LINE_ITEMS:\n                    return maxAmount;\n                // case RefundMode.PARTIAL_LINE_ITEMS:\n                //     return refundingItems.reduce((total, { amount, quantity }) => total + amount * quantity, 0);\n                default:\n                    return 0;\n            }\n        }, [maxAmount, mode]);\n\n        const maxAmountAlert = useMemo(() => {\n            if (maxAmount > 0) {\n                const values = { amount: i18n.amount(maxAmount, currency) };\n                switch (mode) {\n                    case RefundMode.FULL_AMOUNT:\n                        return i18n.get('transactions.details.refund.alerts.refundableAmount', { values });\n                    case RefundMode.PARTIAL_AMOUNT:\n                        return i18n.get('transactions.details.refund.alerts.refundableMaximum', { values });\n                }\n            }\n        }, [i18n, currency, maxAmount, mode]);\n\n        return (\n            <div className={TX_DATA_CLASS}>\n                <PaymentRefundNotice />\n                <PaymentRefundReason disabled={refundInProgress} reason={refundReason} onChange={setRefundReason} />\n\n                <PaymentRefundAmount\n                    currency={currency}\n                    disabled={refundInProgress || mode !== RefundMode.PARTIAL_AMOUNT}\n                    onChange={value => setRefundAmount(clamp(0, value, amount))}\n                    value={amount}\n                />\n\n                {maxAmountAlert && (\n                    <Alert variant={AlertVariantOption.TIP} type={AlertTypeOption.HIGHLIGHT}>\n                        <Typography className={'adyen-pe-alert__description'} el={TypographyElement.DIV} variant={TypographyVariant.BODY} wide>\n                            {maxAmountAlert}\n                        </Typography>\n                    </Alert>\n                )}\n\n                <PaymentRefundActions\n                    beginRefund={beginRefund}\n                    currency={currency}\n                    disabled={refundInProgress}\n                    maxAmount={maxAmount}\n                    refundAmount={refundAmount}\n                    refundedAmount={refundedAmount}\n                    refundingAmounts={refundingAmounts}\n                    refundReason={refundReason}\n                    setRefundInProgress={setRefundInProgress}\n                    setRefundResult={setRefundResult}\n                    showDetails={showDetails}\n                    transactionId={transaction.id}\n                />\n            </div>\n        );\n    }\n);\n\nPaymentRefund.Result = memo(({ result, refreshTransaction, showDetails }: PaymentRefundResultProps) => {\n    const { i18n } = useCoreContext();\n\n    const { isErrorResult, iconName, titleKey, descriptionKey } = useMemo(() => {\n        let iconName: IconName = 'checkmark-circle-fill';\n        let titleKey: TranslationKey = 'transactions.details.refund.alerts.refundSent';\n        let descriptionKey: TranslationKey = 'transactions.details.refund.alerts.refundSuccess';\n\n        const isErrorResult = result === 'error';\n\n        if (isErrorResult) {\n            iconName = 'cross-circle-fill';\n            titleKey = 'common.errors.somethingWentWrong';\n            descriptionKey = 'transactions.details.refund.alerts.refundFailure';\n        }\n\n        return { isErrorResult, iconName, titleKey, descriptionKey } as const;\n    }, [result]);\n\n    return (\n        <div className={TX_REFUND_RESPONSE}>\n            <Icon\n                className={cx(TX_REFUND_RESPONSE_ICON, {\n                    [TX_REFUND_RESPONSE_ERROR_ICON]: isErrorResult,\n                    [TX_REFUND_RESPONSE_SUCCESS_ICON]: !isErrorResult,\n                })}\n                name={iconName}\n            />\n            <Typography className={TypographyModifier.MEDIUM} variant={TypographyVariant.TITLE}>\n                {i18n.get(titleKey)}\n            </Typography>\n            <Typography variant={TypographyVariant.BODY}>{i18n.get(descriptionKey)}</Typography>\n            <Button\n                onClick={() => {\n                    showDetails();\n                    refreshTransaction();\n                }}\n                variant={ButtonVariant.SECONDARY}\n            >\n                {i18n.get('transactions.details.refund.actions.back')}\n            </Button>\n        </div>\n    );\n});\n\nexport default PaymentRefund;\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { InteractionKeyCode } from '../components/types';\nimport useUniqueId from './useUniqueId';\n\nexport type TabbedControlOptions<OptionId extends string> = readonly { id: OptionId; disabled?: boolean }[];\n\nexport interface TabbedControlConfig<OptionId extends string, Options extends TabbedControlOptions<OptionId>> {\n    onChange?: <ActiveOption extends Options[number]>(activeOption: ActiveOption) => void;\n    activeOption?: OptionId;\n    options: Options;\n}\n\nconst enum TabDirection {\n    BACKWARD = -1,\n    FORWARD = 1,\n}\n\nconst isDisabledOption = <Option extends { disabled?: boolean } | null>(option?: Option) => option?.disabled === true;\n\nconst getNearestActiveOptionIndex = <Options extends readonly ({ disabled?: boolean } | null)[]>(\n    options: Options,\n    index: number,\n    direction: TabDirection\n) => {\n    const numberOfOptions = options.length;\n\n    if (numberOfOptions) {\n        let nearestIndex = index;\n        let unvisitedOptions = numberOfOptions;\n\n        while (unvisitedOptions--) {\n            while (nearestIndex < 0) nearestIndex += numberOfOptions;\n            if (nearestIndex >= numberOfOptions) nearestIndex %= numberOfOptions;\n            if (!isDisabledOption(options[nearestIndex])) return nearestIndex;\n            nearestIndex += direction;\n        }\n    }\n\n    return 0;\n};\n\nconst findActiveOptionIndex = <OptionId extends string, Options extends TabbedControlOptions<OptionId>>(\n    options: TabbedControlConfig<OptionId, Options>['options'],\n    activeOption?: TabbedControlConfig<OptionId, Options>['activeOption'],\n    fallbackActiveOptionIndex = 0\n) => {\n    if (!activeOption) return fallbackActiveOptionIndex;\n\n    const index = options.findIndex(option => option.id === activeOption);\n    const activeOptionIndex = index === -1 ? fallbackActiveOptionIndex : index;\n    const nearestActiveOptionIndex = getNearestActiveOptionIndex(options, activeOptionIndex, TabDirection.FORWARD);\n\n    return activeOptionIndex === nearestActiveOptionIndex ? activeOptionIndex : fallbackActiveOptionIndex;\n};\n\nexport const useTabbedControl = <OptionId extends string, Options extends TabbedControlOptions<OptionId>>({\n    options,\n    activeOption: activeOptionFromProps,\n    onChange,\n}: TabbedControlConfig<OptionId, Options>) => {\n    const [focusPending, setFocusPending] = useState(false);\n    const [activeIndex, setActiveIndex] = useState(findActiveOptionIndex(options, activeOptionFromProps));\n\n    const activeOption: Options[number] = options[activeIndex]!;\n    const activeOptionRef = useRef(activeOption);\n    const activeOptionFromPropsRef = useRef(activeOptionFromProps);\n    const optionElementsRef = useRef<(HTMLButtonElement | null)[]>([]);\n    const uniqueId = useUniqueId();\n\n    const refs = useMemo(() => {\n        const refs = [] as ((el: HTMLButtonElement | null) => any)[];\n        for (let i = 0; i < options.length; i++) {\n            refs[i] = el => (optionElementsRef.current[i] = el);\n        }\n        return refs;\n    }, [options]);\n\n    const onClick = useCallback((event: MouseEvent) => {\n        const clickedOptionIndex = optionElementsRef.current.findIndex(elem => elem === event.currentTarget);\n\n        if (!isDisabledOption(optionElementsRef.current[clickedOptionIndex])) {\n            event.preventDefault();\n            setActiveIndex(clickedOptionIndex);\n        }\n    }, []);\n\n    const onKeyDown = useMemo(() => {\n        const keyMap: Record<KeyboardEvent['key'], () => void> = {\n            [InteractionKeyCode.ARROW_LEFT]: () =>\n                setActiveIndex(activeIndex => getNearestActiveOptionIndex(optionElementsRef.current, activeIndex - 1, TabDirection.BACKWARD)),\n            [InteractionKeyCode.ARROW_RIGHT]: () =>\n                setActiveIndex(activeIndex => getNearestActiveOptionIndex(optionElementsRef.current, activeIndex + 1, TabDirection.FORWARD)),\n            [InteractionKeyCode.HOME]: () => setActiveIndex(getNearestActiveOptionIndex(optionElementsRef.current, 0, TabDirection.FORWARD)),\n            [InteractionKeyCode.END]: () => setActiveIndex(getNearestActiveOptionIndex(optionElementsRef.current, -1, TabDirection.BACKWARD)),\n        };\n\n        return (event: KeyboardEvent) => {\n            if (keyMap[event.key]) {\n                event.preventDefault();\n                keyMap[event.key]?.();\n                setFocusPending(true);\n            }\n        };\n    }, []);\n\n    useEffect(() => {\n        setActiveIndex(activeIndex => findActiveOptionIndex(options, activeOptionFromProps, activeIndex));\n    }, [options, activeOptionFromProps]);\n\n    useEffect(() => {\n        if (focusPending) {\n            const optionElement = optionElementsRef.current[activeIndex];\n            if (!isDisabledOption(optionElement)) optionElement?.focus();\n            setFocusPending(false);\n        }\n    }, [activeIndex, focusPending]);\n\n    useEffect(() => {\n        if (activeOptionFromPropsRef.current !== activeOptionFromProps) {\n            activeOptionFromPropsRef.current = activeOptionFromProps;\n            return;\n        }\n\n        if (activeOptionRef.current !== activeOption) {\n            activeOptionRef.current = activeOption;\n            onChange?.(activeOption);\n        }\n    }, [activeOption, activeOptionFromProps, onChange]);\n\n    return { activeIndex, onClick, onKeyDown, refs, uniqueId } as const;\n};\n\nexport default useTabbedControl;\n","import { TabComponentProps } from './types';\nimport { AriaAttributes } from 'preact/compat';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport useTabbedControl from '../../../hooks/useTabbedControl';\nimport Typography from '../Typography/Typography';\nimport './Tabs.scss';\n\nfunction Tabs<TabId extends string>({\n    ['aria-label']: ariaLabel,\n    activeTab,\n    tabs,\n    onChange,\n}: TabComponentProps<TabId> & Pick<AriaAttributes, 'aria-label'>) {\n    const { activeIndex, onClick, onKeyDown, refs, uniqueId } = useTabbedControl({ onChange, options: tabs, activeOption: activeTab });\n    const { i18n } = useCoreContext();\n    return (\n        <div>\n            <div className=\"adyen-pe-tabs\" role=\"tablist\" aria-orientation=\"horizontal\" aria-label={ariaLabel}>\n                {tabs.map((tab, index) => {\n                    const isActive = activeIndex === index;\n                    return (\n                        <button\n                            role=\"tab\"\n                            name={tab.id}\n                            ref={refs[index]}\n                            key={`tab:${uniqueId}-${tab.id}`}\n                            id={`tab:${uniqueId}-${tab.id}`}\n                            className=\"adyen-pe-tabs__tab\"\n                            aria-controls={`panel:${uniqueId}-${tab.id}`}\n                            aria-selected={isActive}\n                            onClick={isActive ? undefined : onClick}\n                            onKeyDown={onKeyDown}\n                            disabled={tab.disabled}\n                            tabIndex={isActive ? 0 : -1}\n                        >\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} className=\"adyen-pe-tabs__tab-label\" stronger>\n                                {i18n.get(tab.label)}\n                            </Typography>\n                        </button>\n                    );\n                })}\n            </div>\n            <div className=\"adyen-pe-tabpanels\">\n                {tabs.map((tab, index) => (\n                    <div\n                        role=\"tabpanel\"\n                        key={`panel:${uniqueId}-${tab.id}`}\n                        id={`panel:${uniqueId}-${tab.id}`}\n                        className=\"adyen-pe-tabpanels__panel\"\n                        aria-labelledby={`tab:${uniqueId}-${tab.id}`}\n                        hidden={activeIndex !== index}\n                    >\n                        {tab.content}\n                    </div>\n                ))}\n            </div>\n        </div>\n    );\n}\n\nexport default Tabs;\n","import { memo } from 'preact/compat';\nimport { ComponentChild } from 'preact';\nimport { RefundedState } from '../../types';\nimport { useCallback, useEffect, useMemo, useRef } from 'preact/hooks';\nimport { REFUND_STATUSES, TX_REFUND_STATUSES_CONTAINER } from '../../constants';\nimport { AlertProps, AlertTypeOption, AlertVariantOption } from '../../../../internal/Alert/types';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Alert from '../../../../internal/Alert/Alert';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\n\nconst baseAlertProps = {\n    type: AlertTypeOption.HIGHLIGHT,\n    variant: AlertVariantOption.TIP,\n} as const;\n\nexport interface PaymentRefundAlertsProps {\n    fullRefundFailed: boolean;\n    fullRefundInProgress: boolean;\n    refundAmounts: Readonly<Record<(typeof REFUND_STATUSES)[number], readonly number[] | undefined>>;\n    refundCurrency: string;\n    refundedAmount: number;\n    refundedState: RefundedState;\n    refundLocked: boolean;\n}\n\nconst PaymentRefundAlerts = memo(\n    ({\n        fullRefundFailed,\n        fullRefundInProgress,\n        refundAmounts,\n        refundCurrency,\n        refundedAmount,\n        refundedState,\n        refundLocked,\n    }: PaymentRefundAlertsProps) => {\n        const { i18n } = useCoreContext();\n\n        const getFormattedAmountsList = useMemo(() => {\n            const listFormatter = new Intl.ListFormat(i18n.locale, { type: 'conjunction' });\n            return (amounts: readonly number[]) => listFormatter.format(amounts.map(amount => i18n.amount(amount, refundCurrency)));\n        }, [i18n, refundCurrency]);\n\n        const nextAlert = useCallback(<T extends AlertProps>({ description, ...alertProps }: Partial<T>) => {\n            alerts.current.push(\n                <Alert {...baseAlertProps} {...alertProps}>\n                    <Typography className={'adyen-pe-alert__description'} el={TypographyElement.DIV} variant={TypographyVariant.BODY} wide>\n                        {description}\n                    </Typography>\n                </Alert>\n            );\n        }, []);\n\n        const alerts = useRef<ComponentChild[]>([]);\n\n        if (refundedState === RefundedState.FULL) {\n            nextAlert({ description: i18n.get('transactions.details.refund.alerts.refundedFull') });\n        } else {\n            if (refundedAmount > 0) {\n                const values = { amount: getFormattedAmountsList([refundedAmount]) };\n                nextAlert({ description: i18n.get('transactions.details.refund.alerts.refundedAmount', { values }) });\n            }\n\n            if (refundLocked) {\n                nextAlert({ description: i18n.get('transactions.details.refund.alerts.inProgressBlocked') });\n            } else {\n                if (refundAmounts.in_progress && refundAmounts.in_progress.length > 0) {\n                    if (fullRefundInProgress) {\n                        nextAlert({ description: i18n.get('transactions.details.refund.alerts.inProgress') });\n                    } else {\n                        const values = { amount: getFormattedAmountsList(refundAmounts.in_progress) };\n                        nextAlert({ description: i18n.get('transactions.details.refund.alerts.inProgressAmount', { values }) });\n                    }\n                }\n\n                if (refundAmounts.failed && refundAmounts.failed.length > 0) {\n                    const type = AlertTypeOption.WARNING;\n                    if (fullRefundFailed) {\n                        nextAlert({ type, description: i18n.get('transactions.details.refund.alerts.notPossible') });\n                    } else {\n                        const values = { amount: getFormattedAmountsList(refundAmounts.failed) };\n                        nextAlert({ type, description: i18n.get('transactions.details.refund.alerts.notPossibleAmount', { values }) });\n                    }\n                }\n            }\n        }\n\n        useEffect(() => {\n            alerts.current = [];\n        });\n\n        return alerts.current.length > 0 ? <div className={TX_REFUND_STATUSES_CONTAINER}>{alerts.current}</div> : null;\n    }\n);\n\nexport default PaymentRefundAlerts;\n","import cx from 'classnames';\nimport { memo } from 'preact/compat';\nimport { useMemo } from 'preact/hooks';\nimport { ActiveView, TransactionDetails } from '../../types';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { ButtonActionObject, ButtonActionsLayoutBasic, ButtonActionsList } from '../../../../internal/Button/ButtonActions/types';\nimport { TX_DATA_ACTION_BAR, TX_DATA_CONTAINER, sharedTransactionDetailsEventProperties } from '../../constants';\nimport { TransactionDataContentProps } from '../TransactionData/TransactionDataContent';\nimport ButtonActions from '../../../../internal/Button/ButtonActions/ButtonActions';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Icon from '../../../../internal/Icon';\n\nexport interface PaymentDetailsActionsProps {\n    extraFields: Record<string, any> | undefined;\n    refundAvailable: boolean;\n    refundDisabled: boolean;\n    setActiveView: (activeView: ActiveView) => void;\n    transaction: TransactionDetails;\n    transactionNavigator: TransactionDataContentProps['transactionNavigator'];\n}\n\nconst PaymentDetailsActions = ({\n    extraFields,\n    refundAvailable,\n    refundDisabled,\n    setActiveView,\n    transaction,\n    transactionNavigator,\n}: PaymentDetailsActionsProps) => {\n    const userEvents = useAnalyticsContext();\n    const { currentTransaction: currentTransactionId, canNavigateBackward, canNavigateForward, backward, forward } = transactionNavigator;\n    const { i18n } = useCoreContext();\n\n    const actionButtons = useMemo(\n        () => ({\n            backToRefund: { title: i18n.get('transactions.details.actions.backToRefund'), eventLabel: 'Return to refund' } as const,\n            goToPayment: { title: i18n.get('transactions.details.actions.goToPayment'), eventLabel: 'Go to payment' } as const,\n            refund: { title: i18n.get('transactions.details.actions.refund') } as const,\n        }),\n        [i18n]\n    );\n\n    const transactionNavigation = useMemo<'backToRefund' | 'goToPayment' | undefined>(() => {\n        if (currentTransactionId !== transaction.id) return;\n        if (canNavigateBackward) return 'backToRefund' satisfies keyof typeof actionButtons;\n        if (canNavigateForward) return 'goToPayment' satisfies keyof typeof actionButtons;\n    }, [canNavigateBackward, canNavigateForward, currentTransactionId, transaction.id]);\n\n    const primaryAction = useMemo<Readonly<ButtonActionObject> | undefined>(() => {\n        if (refundAvailable) {\n            return {\n                disabled: refundDisabled,\n                event: () => {\n                    if (!refundDisabled) setActiveView(ActiveView.REFUND);\n                },\n                title: actionButtons.refund.title,\n                variant: ButtonVariant.PRIMARY,\n            } as const;\n        }\n    }, [actionButtons, refundAvailable, refundDisabled, setActiveView]);\n\n    const secondaryAction = useMemo<Readonly<ButtonActionObject> | undefined>(() => {\n        if (transactionNavigation) {\n            const actionButton = actionButtons[transactionNavigation];\n            const isBackNavigation = transactionNavigation === 'backToRefund';\n            const transactionNavigationAction = isBackNavigation ? backward : forward;\n            return {\n                disabled: false,\n                event: () => {\n                    try {\n                        transactionNavigationAction();\n                    } finally {\n                        userEvents.addEvent?.('Clicked button', {\n                            ...sharedTransactionDetailsEventProperties,\n                            label: actionButton.eventLabel,\n                        });\n                    }\n                },\n                renderTitle: (title: string) => (\n                    <>\n                        <Icon name=\"angle-right\" style={{ transform: `scaleX(${isBackNavigation ? -1 : 1})` }} />\n                        <span>{title}</span>\n                    </>\n                ),\n                title: actionButton.title,\n                variant: ButtonVariant.SECONDARY,\n            } as const;\n        }\n    }, [actionButtons, backward, forward, transactionNavigation, userEvents]);\n\n    const customActions = useMemo<ButtonActionsList>(\n        () =>\n            Object.values(extraFields || [])\n                .filter(field => field?.type === 'button')\n                .map(action => ({\n                    title: action.value,\n                    variant: ButtonVariant.SECONDARY,\n                    event: action.config?.action,\n                    classNames: action.config?.className ? [action.config.className] : [],\n                })),\n        [extraFields]\n    );\n\n    const actions = useMemo(\n        () => [primaryAction, secondaryAction, ...customActions].filter(Boolean) as ButtonActionsList,\n        [primaryAction, secondaryAction, customActions]\n    );\n\n    return actions.length > 0 ? (\n        <div className={cx(TX_DATA_CONTAINER, TX_DATA_ACTION_BAR)}>\n            <ButtonActions actions={actions} layout={ButtonActionsLayoutBasic.BUTTONS_END} />\n        </div>\n    ) : null;\n};\n\nexport default memo(PaymentDetailsActions);\n","import { memo } from 'preact/compat';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { TranslationKey } from '../../../../../translations';\nimport { TransactionDetails, TransactionDetailsProps } from '../../types';\nimport { StructuredListProps } from '../../../../internal/StructuredList/types';\nimport { getTransactionRefundReason } from '../../../../utils/translation/getters';\nimport { isCustomDataObject } from '../../../../internal/DataGrid/components/TableCells';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { TX_DATA_LABEL, TX_DATA_LIST, TX_DETAILS_FIELDS_REMAPS, sharedTransactionDetailsEventProperties } from '../../constants';\nimport normalizeCustomFields from '../../../../utils/customData/normalizeCustomFields';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport StructuredList from '../../../../internal/StructuredList';\nimport Typography from '../../../../internal/Typography/Typography';\nimport Icon from '../../../../internal/DataGrid/components/Icon';\nimport CopyText from '../../../../internal/CopyText/CopyText';\nimport Link from '../../../../internal/Link/Link';\nimport cx from 'classnames';\n\nconst copyButtonAnalyticsEventProperties = {\n    ...sharedTransactionDetailsEventProperties,\n    sectionName: 'Details',\n    label: 'Copy button',\n} as const;\n\nconst paymentDataKeys = {\n    account: 'transactions.details.fields.account',\n    id: 'transactions.details.fields.referenceID',\n    merchantReference: 'transactions.details.fields.merchantReference',\n    pspReference: 'transactions.details.fields.pspReference',\n    refundPspReference: 'transactions.details.fields.refundPspReference',\n    refundReason: 'transactions.details.fields.refundReason',\n} satisfies Record<string, TranslationKey>;\n\nconst paymentDataCopyButtonKeys = {\n    id: 'transactions.details.actions.copyReferenceID',\n    merchantReference: 'transactions.details.actions.copyMerchantReference',\n    pspReference: 'transactions.details.actions.copyPspReference',\n} satisfies Record<string, TranslationKey>;\n\nconst SKIP_ITEM: StructuredListProps['items'][number] = null!;\n\nexport interface PaymentDetailsPropertiesProps {\n    dataCustomization?: TransactionDetailsProps['dataCustomization'];\n    extraFields: Record<string, any> | undefined;\n    transaction: TransactionDetails;\n}\n\nconst PaymentDetailsProperties = ({ dataCustomization, extraFields, transaction }: PaymentDetailsPropertiesProps) => {\n    const { i18n } = useCoreContext();\n\n    const standardPropertiesList = useMemo<StructuredListProps['items']>(() => {\n        const { balanceAccount, category, id, merchantReference, paymentPspReference, refundMetadata } = transaction;\n        const account = balanceAccount?.description || balanceAccount?.id;\n        const isRefundTransaction = category === 'Refund';\n\n        const customizedFields = normalizeCustomFields(dataCustomization?.details?.fields, TX_DETAILS_FIELDS_REMAPS, transaction);\n\n        const listItems: StructuredListProps['items'] = [\n            // balance account\n            account ? { id: 'account', key: paymentDataKeys.account, value: account } : SKIP_ITEM,\n\n            // refund reason\n            isRefundTransaction && refundMetadata?.refundReason\n                ? {\n                      id: 'refundReason',\n                      key: paymentDataKeys.refundReason,\n                      value: getTransactionRefundReason(i18n, refundMetadata.refundReason),\n                  }\n                : SKIP_ITEM,\n\n            // reference id\n            {\n                id: 'id',\n                key: paymentDataKeys.id,\n                value: (\n                    <PaymentDetailsProperties.CopyText\n                        copyButtonAriaLabelKey={paymentDataCopyButtonKeys.id}\n                        trackingName=\"Reference ID\"\n                        textToCopy={id}\n                    />\n                ),\n            },\n\n            // merchant reference\n            merchantReference\n                ? {\n                      id: 'merchantReference',\n                      key: paymentDataKeys.merchantReference,\n                      value: (\n                          <PaymentDetailsProperties.CopyText\n                              copyButtonAriaLabelKey={paymentDataCopyButtonKeys.merchantReference}\n                              trackingName=\"Merchant reference\"\n                              textToCopy={merchantReference}\n                          />\n                      ),\n                  }\n                : SKIP_ITEM,\n\n            // payment psp reference\n            paymentPspReference\n                ? {\n                      id: 'paymentPspReference',\n                      key: paymentDataKeys.pspReference,\n                      value: (\n                          <PaymentDetailsProperties.CopyText\n                              copyButtonAriaLabelKey={paymentDataCopyButtonKeys.pspReference}\n                              trackingName=\"PSP reference\"\n                              textToCopy={paymentPspReference}\n                          />\n                      ),\n                  }\n                : SKIP_ITEM,\n\n            // refund psp reference\n            isRefundTransaction && refundMetadata?.refundPspReference\n                ? {\n                      id: 'refundPspReference',\n                      key: paymentDataKeys.refundPspReference,\n                      value: refundMetadata.refundPspReference,\n                  }\n                : SKIP_ITEM,\n        ] as const;\n\n        const isVisibleField = customizedFields\n            ? (id: string) => customizedFields.find(field => field.key === id)?.visibility !== 'hidden'\n            : () => true;\n\n        return listItems.filter(item => item?.id && isVisibleField(item.id));\n    }, [i18n, dataCustomization, transaction]);\n\n    const customPropertiesList = useMemo<StructuredListProps['items']>(\n        () =>\n            Object.entries(extraFields || {})\n                .filter(([, value]) => value?.type !== 'button')\n                .map(([key, value]) => ({\n                    key: key as TranslationKey,\n                    value: isCustomDataObject(value) ? value.value : value,\n                    type: isCustomDataObject(value) ? value.type : 'text',\n                    config: isCustomDataObject(value) ? value.config : undefined,\n                })),\n        [extraFields]\n    );\n\n    const listItems = useMemo(() => [...standardPropertiesList, ...customPropertiesList], [customPropertiesList, standardPropertiesList]);\n\n    const renderListPropertyLabel = useCallback<NonNullable<StructuredListProps['renderLabel']>>(\n        label => <div className={TX_DATA_LABEL}>{label}</div>,\n        []\n    );\n\n    const renderListPropertyValue = useCallback<NonNullable<StructuredListProps['renderValue']>>((val, key, type, config) => {\n        if (config) {\n            switch (type) {\n                case 'icon':\n                    return (\n                        <div className={cx(config.className, 'adyen-pe-transaction-data__list-icon-value')}>\n                            <Icon url={config.src} alt={config.alt || val} />\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                {' '}\n                                {val}\n                            </Typography>\n                        </div>\n                    );\n                case 'link':\n                    return (\n                        <Link classNames={[cx(config.className)]} href={config.href} target={config.target || '_blank'}>\n                            {val}\n                        </Link>\n                    );\n            }\n        }\n        return (\n            <Typography el={TypographyElement.DIV} variant={TypographyVariant.BODY} className={cx(config?.className)}>\n                {val}\n            </Typography>\n        );\n    }, []);\n\n    return (\n        <StructuredList\n            align=\"start\"\n            layout=\"5-7\"\n            items={listItems}\n            classNames={TX_DATA_LIST}\n            renderLabel={renderListPropertyLabel}\n            renderValue={renderListPropertyValue}\n        />\n    );\n};\n\ninterface PaymentDetailsPropertiesCopyTextProps {\n    copyButtonAriaLabelKey: TranslationKey;\n    textToCopy: string;\n    trackingName?: string;\n}\n\nPaymentDetailsProperties.CopyText = memo(({ trackingName, ...copyTextProps }: PaymentDetailsPropertiesCopyTextProps) => {\n    const userEvents = useAnalyticsContext();\n\n    const onCopyText = useCallback(() => {\n        if (trackingName) {\n            userEvents.addEvent?.('Clicked button', {\n                ...copyButtonAnalyticsEventProperties,\n                subSectionName: trackingName,\n            });\n        }\n    }, [trackingName, userEvents]);\n\n    return <CopyText {...copyTextProps} onCopyText={onCopyText} showCopyTextTooltip={false} type=\"Default\" />;\n});\n\nexport default memo(PaymentDetailsProperties);\n","export const STATUS_BOX_CLASS = 'adyen-pe-status-box';\nexport const STATUS_BOX_DATA_AMOUNT = `${STATUS_BOX_CLASS}__amount`;\nexport const STATUS_BOX_DATA_LABEL = `${STATUS_BOX_CLASS}__label`;\nexport const STATUS_BOX_DATA_PAY_METHOD = `${STATUS_BOX_CLASS}__payment-method`;\nexport const STATUS_BOX_DATA_PAY_METHOD_DETAIL = `${STATUS_BOX_DATA_PAY_METHOD}-detail`;\nexport const STATUS_BOX_DATA_PAY_METHOD_LOGO = `${STATUS_BOX_DATA_PAY_METHOD}-logo`;\nexport const STATUS_BOX_DATA_PAY_METHOD_LOGO_CONTAINER = `${STATUS_BOX_DATA_PAY_METHOD_LOGO}-container`;\nexport const STATUS_BOX_DATA_TAGS = `${STATUS_BOX_CLASS}__tags`;\n","import { JSX } from 'preact';\nimport cx from 'classnames';\nimport { memo } from 'preact/compat';\nimport './StatusBox.scss';\nimport { Image } from '../Image/Image';\nimport {\n    STATUS_BOX_CLASS,\n    STATUS_BOX_DATA_AMOUNT,\n    STATUS_BOX_DATA_LABEL,\n    STATUS_BOX_DATA_PAY_METHOD,\n    STATUS_BOX_DATA_PAY_METHOD_DETAIL,\n    STATUS_BOX_DATA_PAY_METHOD_LOGO,\n    STATUS_BOX_DATA_PAY_METHOD_LOGO_CONTAINER,\n    STATUS_BOX_DATA_TAGS,\n} from './constants';\nimport useStatusBoxData from './useStatusBox';\n\nexport type StatusBoxProps = ReturnType<typeof useStatusBoxData> & { tag?: JSX.Element };\n\nexport type StatusBoxKeys = keyof StatusBoxProps;\n\ntype StatusBoxOptions = { classNames?: { [K in StatusBoxKeys]?: string } };\n\nconst StatusBox = ({ tag, amount, paymentMethod, paymentMethodType, date, formattedDate, classNames }: StatusBoxProps & StatusBoxOptions) => {\n    return (\n        <div className={STATUS_BOX_CLASS}>\n            {tag && <div className={STATUS_BOX_DATA_TAGS}>{tag}</div>}\n\n            {amount && <div className={cx(STATUS_BOX_DATA_AMOUNT, classNames?.amount)}>{amount}</div>}\n\n            {paymentMethodType && (\n                <div className={STATUS_BOX_DATA_PAY_METHOD}>\n                    <div className={STATUS_BOX_DATA_PAY_METHOD_LOGO_CONTAINER}>\n                        <Image className={STATUS_BOX_DATA_PAY_METHOD_LOGO} name={paymentMethodType} alt={paymentMethodType} folder={'logos/'} />\n                    </div>\n\n                    <div className={STATUS_BOX_DATA_PAY_METHOD_DETAIL}>{paymentMethod}</div>\n                </div>\n            )}\n\n            {date && formattedDate && (\n                <div className={STATUS_BOX_DATA_LABEL}>\n                    <time dateTime={date}>{formattedDate}</time>\n                </div>\n            )}\n        </div>\n    );\n};\n\nexport default memo(StatusBox);\n","import { IBankAccount, IPaymentMethod } from '../../../types';\nimport { parsePaymentMethodType } from '../../external/TransactionsOverview/components/utils';\n\ntype PaymentOptionsType = {\n    paymentMethod?: IPaymentMethod;\n    bankAccount?: IBankAccount;\n};\n\nexport const getPaymentMethodType = (data: PaymentOptionsType) => {\n    return data?.paymentMethod ? data.paymentMethod.type : data?.bankAccount ? 'bankTransfer' : null;\n};\n\nexport const getDisplayablePaymentMethod = (data: PaymentOptionsType) => {\n    return data?.paymentMethod ? parsePaymentMethodType(data.paymentMethod, 'detail') : data?.bankAccount?.accountNumberLastFourDigits;\n};\n","import { useMemo } from 'preact/hooks';\nimport { DATE_FORMAT_TRANSACTION_DETAILS } from '../../../constants';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport useTimezoneAwareDateFormatting from '../../../hooks/useTimezoneAwareDateFormatting';\nimport { IAmount, IBankAccount, IPaymentMethod } from '../../../types';\nimport { getDisplayablePaymentMethod, getPaymentMethodType } from './utils';\n\ntype StatusBoxDataProps = {\n    paymentMethodData?: IPaymentMethod;\n    bankAccount?: IBankAccount;\n    amountData?: IAmount;\n    timezone?: string;\n    createdAt?: string;\n};\n\nconst useStatusBoxData = ({ timezone, paymentMethodData, bankAccount, amountData, createdAt: date }: StatusBoxDataProps) => {\n    const paymentProps = useMemo(() => ({ paymentMethod: paymentMethodData, bankAccount }), [paymentMethodData, bankAccount]);\n\n    const { i18n } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting(timezone);\n\n    const amount = useMemo(() => {\n        if (amountData) {\n            const { currency, value } = amountData;\n            return `${i18n.amount(value, currency, { hideCurrency: true })} ${currency}`;\n        }\n    }, [amountData, i18n]);\n\n    const paymentMethodType = useMemo(() => {\n        return getPaymentMethodType(paymentProps);\n    }, [paymentProps]);\n\n    const paymentMethod = useMemo(() => {\n        return getDisplayablePaymentMethod(paymentProps);\n    }, [paymentProps]);\n\n    const formattedDate = useMemo(() => {\n        return date && dateFormat(date, DATE_FORMAT_TRANSACTION_DETAILS);\n    }, [date, dateFormat]);\n\n    return { amount, date, formattedDate, paymentMethod, paymentMethodType };\n};\n\nexport default useStatusBoxData;\n","import { EMPTY_OBJECT } from '../../../utils';\nimport { RefundType, TransactionDetails } from './types';\nimport { TagVariant } from '../../internal/Tag/types';\n\nexport const getAmountStyleForTransaction = (transaction?: TransactionDetails) => {\n    switch (transaction?.status) {\n        case 'Booked':\n            return 'default';\n        case 'Reversed':\n            return 'error';\n        default:\n            return 'pending';\n    }\n};\n\nexport const getTagVariantForTransaction = (transaction?: TransactionDetails) => {\n    switch (transaction?.status) {\n        case 'Booked':\n            return TagVariant.SUCCESS;\n        case 'Reversed':\n            return TagVariant.ERROR;\n        default:\n            return TagVariant.DEFAULT;\n    }\n};\n\nexport const getRefundTypeForTransaction = (transaction?: TransactionDetails) => {\n    if (transaction?.category === 'Refund') {\n        const { refundType } = transaction.refundMetadata ?? (EMPTY_OBJECT as NonNullable<TransactionDetails['refundMetadata']>);\n        switch (refundType) {\n            case RefundType.FULL:\n                return RefundType.FULL;\n            case RefundType.PARTIAL:\n                return RefundType.PARTIAL;\n        }\n    }\n};\n","import cx from 'classnames';\nimport StatusBox from '../../../../internal/StatusBox/StatusBox';\nimport useStatusBoxData from '../../../../internal/StatusBox/useStatusBox';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { getTransactionCategory } from '../../../../utils/translation/getters';\nimport { getAmountStyleForTransaction, getRefundTypeForTransaction } from '../../utils';\nimport { TX_DATA_AMOUNT, TX_DATA_CONTAINER, TX_DATA_TAGS, TX_STATUS_BOX } from '../../constants';\nimport { RefundedState, RefundType, TransactionDetails } from '../../types';\nimport { TagVariant } from '../../../../internal/Tag/types';\nimport { Tag } from '../../../../internal/Tag/Tag';\nimport { useMemo } from 'preact/hooks';\nimport { memo } from 'preact/compat';\n\nexport interface PaymentDetailsStatusBoxProps {\n    refundedState: RefundedState;\n    transaction: TransactionDetails;\n}\n\nconst PaymentDetailsStatusBox = ({ refundedState, transaction }: PaymentDetailsStatusBoxProps) => {\n    const statusBoxOptions = useStatusBoxData({\n        timezone: transaction.balanceAccount?.timeZone,\n        createdAt: transaction.createdAt,\n        amountData: transaction.netAmount,\n        paymentMethodData: transaction.paymentMethod,\n        bankAccount: transaction.bankAccount,\n    });\n\n    const statusBoxClassNames = useMemo(\n        () => ({\n            amount: `${TX_DATA_AMOUNT}--${getAmountStyleForTransaction(transaction)}`,\n        }),\n        [transaction]\n    );\n\n    const statusBoxTags = useMemo(\n        () => <PaymentDetailsStatusBox.StatusTags transaction={transaction} refundedState={refundedState} />,\n        [transaction, refundedState]\n    );\n\n    return (\n        <div className={cx(TX_DATA_CONTAINER, TX_STATUS_BOX)}>\n            <StatusBox {...statusBoxOptions} classNames={statusBoxClassNames} tag={statusBoxTags} />\n        </div>\n    );\n};\n\nPaymentDetailsStatusBox.StatusTags = memo(({ transaction, refundedState }: PaymentDetailsStatusBoxProps) => {\n    const { i18n } = useCoreContext();\n    const { category } = transaction;\n\n    const refundType = getRefundTypeForTransaction(transaction);\n\n    return (\n        <div className={TX_DATA_TAGS}>\n            {/*{status && <Tag label={getTransactionStatus(i18n, status)} variant={getTagVariantForTransaction(transaction)} />}*/}\n            {category && <Tag label={getTransactionCategory(i18n, category)} variant={TagVariant.DEFAULT} />}\n\n            {/* refund type: only available for transaction.category == Refund */}\n            {refundType && (\n                <>\n                    {refundType === RefundType.FULL && (\n                        <Tag label={i18n.get('transactions.details.common.refundTypes.full')} variant={TagVariant.SUCCESS} />\n                    )}\n                    {refundType === RefundType.PARTIAL && (\n                        <Tag label={i18n.get('transactions.details.common.refundTypes.partial')} variant={TagVariant.BLUE} />\n                    )}\n                </>\n            )}\n\n            {refundedState === RefundedState.FULL && (\n                <Tag label={i18n.get('transactions.details.common.refundedStates.full')} variant={TagVariant.SUCCESS} />\n            )}\n            {refundedState === RefundedState.PARTIAL && (\n                <Tag label={i18n.get('transactions.details.common.refundedStates.partial')} variant={TagVariant.BLUE} />\n            )}\n        </div>\n    );\n});\n\nexport default memo(PaymentDetailsStatusBox);\n","import { memo } from 'preact/compat';\nimport { IAmount } from '../../../../../types';\nimport { isNullish } from '../../../../../utils';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { TransactionDetails } from '../../types';\nimport { TranslationKey } from '../../../../../translations';\nimport { Tooltip } from '../../../../internal/Tooltip/Tooltip';\nimport { TX_DATA_LABEL, TX_DATA_LIST } from '../../constants';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { getTransactionAmountAdjustmentType, getTransactionAmountAdjustmentTypeInformation } from '../../../../utils/translation/getters';\nimport { StructuredListProps } from '../../../../internal/StructuredList/types';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../internal/Typography/Typography';\nimport StructuredList from '../../../../internal/StructuredList';\nimport cx from 'classnames';\n\nconst paymentAmountKeys = {\n    grossAmount: 'transactions.details.summary.fields.grossAmount',\n    netAmount: 'transactions.details.summary.fields.netAmount',\n    originalAmount: 'transactions.details.summary.fields.originalAmount',\n} satisfies Record<string, TranslationKey>;\n\nconst SKIP_ITEM: StructuredListProps['items'][number] = null!;\n\nexport interface PaymentDetailsSummaryProps {\n    transaction: TransactionDetails;\n}\n\nconst PaymentDetailsSummary = ({ transaction }: PaymentDetailsSummaryProps) => {\n    const { i18n } = useCoreContext();\n\n    const summaryListItems = useMemo<StructuredListProps['items']>(() => {\n        const { additions, deductions, amountBeforeDeductions, netAmount, originalAmount } = transaction;\n\n        const getFormattedAmount = (amount?: IAmount) => {\n            if (isNullish(amount)) return null;\n            const { value, currency } = amount;\n            return `${i18n.amount(value, currency, { hideCurrency: true })} ${currency}`;\n        };\n\n        const listItems: StructuredListProps['items'] = [\n            // original amount\n            originalAmount && ((additions && additions.length > 0) || originalAmount.value !== amountBeforeDeductions.value)\n                ? {\n                      id: 'originalAmount',\n                      key: paymentAmountKeys.originalAmount,\n                      value: getFormattedAmount(originalAmount),\n                  }\n                : SKIP_ITEM,\n\n            // additions\n            ...(additions?.map(({ type, ...amount }) => ({\n                key: getTransactionAmountAdjustmentType(i18n, type) as TranslationKey,\n                value: getFormattedAmount(amount),\n            })) ?? []),\n\n            // amountBeforeDeductions\n            {\n                id: 'grossAmount',\n                key: paymentAmountKeys.grossAmount,\n                value: getFormattedAmount(amountBeforeDeductions),\n            },\n\n            // deductions\n            ...(deductions?.map(({ type, ...amount }) => ({\n                key: getTransactionAmountAdjustmentType(i18n, type) as TranslationKey,\n                value: getFormattedAmount(amount),\n                rawValue: getTransactionAmountAdjustmentTypeInformation(i18n, type), // tooltip content\n            })) ?? []),\n\n            // netAmount\n            {\n                id: 'netAmount',\n                key: paymentAmountKeys.netAmount,\n                value: getFormattedAmount(netAmount),\n            },\n        ];\n\n        return listItems.filter(Boolean);\n    }, [i18n, transaction]);\n\n    const renderListPropertyLabel = useCallback<NonNullable<StructuredListProps['renderLabel']>>(\n        (label, key, rawValue) => {\n            if (rawValue) {\n                return (\n                    <Tooltip content={rawValue} isUnderlineVisible>\n                        <span className={cx(TX_DATA_LABEL)}>{label}</span>\n                    </Tooltip>\n                );\n            }\n            return <div className={cx(TX_DATA_LABEL)}>{label}</div>;\n        },\n        [i18n]\n    );\n\n    const renderListPropertyValue = useCallback<NonNullable<StructuredListProps['renderValue']>>((val, key) => {\n        const strongest = key === paymentAmountKeys.netAmount;\n        const variant = TypographyVariant.BODY;\n        return (\n            <Typography el={TypographyElement.DIV} variant={variant} strongest={strongest}>\n                {val}\n            </Typography>\n        );\n    }, []);\n\n    return (\n        <StructuredList\n            classNames={TX_DATA_LIST}\n            items={summaryListItems}\n            layout=\"5-7\"\n            renderLabel={renderListPropertyLabel}\n            renderValue={renderListPropertyValue}\n        />\n    );\n};\n\nexport default memo(PaymentDetailsSummary);\n","import { TagProps } from '../Tag/types';\nimport { TranslationKey } from '../../../translations';\n\nexport type TimelineShowMorePlacement = 'bottom' | 'after-first' | 'before-last';\n\nexport interface TimelineShowMoreObject {\n    limit: number;\n    placement?: TimelineShowMorePlacement;\n}\n\nexport type TimelineGapUnit = 'day';\n\nexport interface TimelineGapObject {\n    thresholdAmount: number;\n    unit: TimelineGapUnit;\n}\n\nexport type TimelineStatus = 'black' | 'blue' | 'green' | 'red' | 'grey' | 'orange' | 'yellow';\n\nexport enum TimelineDateFormat {\n    FULL_DATE = 'full-date',\n    FULL_DATE_EXACT_TIME = 'full-date-exact-time',\n    FULL_DATE_EXACT_TIME_WITHOUT_PERIOD = 'full-date-exact-time-without-period',\n    SHORT_DATE = 'short-date',\n    SHORT_DATE_TIME = 'short-date-time',\n    FULL_DATE_EXACT_TIME_WITHOUT_SECONDS = 'full-date-exact-time-without-seconds',\n}\n\nexport interface TimelineTimestamp {\n    date: Date;\n    format?: TimelineDateFormat;\n    value?: string;\n    timezone?: string;\n}\n\nexport interface TimelineDataListObject {\n    label: string;\n    value: string;\n    key: TranslationKey;\n}\n\nexport type TimelineDataList = TimelineDataListObject[];\n\nexport type TimelineTagProps = TagProps;\n\nexport interface TimelineEntry {\n    title?: string;\n    description?: string;\n    date: Date;\n}\n\nexport type TimelineDateUnit = 'day';\n","import { createContext } from 'preact';\nimport { TimelineEntry, TimelineGapObject } from './types';\n\nexport interface TimelineContextValue {\n    registerTimelineEntry: (entry: TimelineEntry) => () => void;\n    entries: TimelineEntry[];\n    showAll: boolean;\n    showMoreIndex: number | null;\n    hiddenItems: number | null;\n    visibleIndexes: number[] | null;\n    timeGapLimit: TimelineGapObject | null;\n    toggleShowAll: () => void;\n}\n\nexport const TimelineContext = createContext<TimelineContextValue | null>(null);\n","import { useMemo } from 'preact/hooks';\nimport { TimelineDateFormat, TimelineDateUnit } from '../types';\nimport useTimezoneAwareDateFormatting from '../../../../hooks/useTimezoneAwareDateFormatting';\n\ninterface DateTextProps {\n    date: Date;\n    format?: TimelineDateFormat;\n    timezone?: string;\n}\n\nfunction getDateFormatOptions(format?: TimelineDateFormat): Intl.DateTimeFormatOptions {\n    switch (format) {\n        case TimelineDateFormat.FULL_DATE:\n            return {\n                year: 'numeric',\n                month: 'short',\n                day: 'numeric',\n            };\n        case TimelineDateFormat.FULL_DATE_EXACT_TIME:\n        case TimelineDateFormat.FULL_DATE_EXACT_TIME_WITHOUT_PERIOD:\n            return {\n                year: 'numeric',\n                month: 'short',\n                day: 'numeric',\n                hour: '2-digit',\n                minute: '2-digit',\n                second: '2-digit',\n                hour12: false,\n            };\n        case TimelineDateFormat.FULL_DATE_EXACT_TIME_WITHOUT_SECONDS:\n            return {\n                year: 'numeric',\n                month: 'short',\n                day: 'numeric',\n                hour: '2-digit',\n                minute: '2-digit',\n                hour12: false,\n            };\n        case TimelineDateFormat.SHORT_DATE:\n            return {\n                year: 'numeric',\n                month: '2-digit',\n                day: '2-digit',\n            };\n        case TimelineDateFormat.SHORT_DATE_TIME:\n            return {\n                year: 'numeric',\n                month: '2-digit',\n                day: '2-digit',\n                hour: '2-digit',\n                minute: '2-digit',\n                hour12: false,\n            };\n        default:\n            return {\n                year: 'numeric',\n                month: 'short',\n                day: 'numeric',\n                hour: '2-digit',\n                minute: '2-digit',\n                second: '2-digit',\n                hour12: false,\n            };\n    }\n}\n\nexport function DateText({ date, format, timezone }: DateTextProps) {\n    const { dateFormat } = useTimezoneAwareDateFormatting(timezone);\n\n    const formattedDate = useMemo(() => {\n        const options = getDateFormatOptions(format);\n\n        return dateFormat(date, options);\n    }, [date, dateFormat, format]);\n\n    return <>{formattedDate}</>;\n}\n\nexport function formatDistanceStrict(\n    dateLeft: Date,\n    dateRight: Date,\n    options: { unit: TimelineDateUnit }\n): { value: number; unit: TimelineDateUnit } {\n    const leftTime = dateLeft.getTime();\n    const rightTime = dateRight.getTime();\n    const diffMs = Math.abs(leftTime - rightTime);\n\n    const second = 1000;\n    const minute = second * 60;\n    const hour = minute * 60;\n    const day = hour * 24;\n\n    let value: number;\n    let unit: TimelineDateUnit;\n\n    // TODO - Add more supported units\n    switch (options.unit) {\n        case 'day':\n            value = diffMs / day;\n            unit = 'day';\n            break;\n        default:\n            value = diffMs / day;\n            unit = 'day';\n    }\n\n    value = Math.round(value);\n\n    return { value, unit };\n}\n","import { ComponentChildren } from 'preact';\nimport { useContext, useLayoutEffect, useMemo, useRef } from 'preact/hooks';\nimport cx from 'classnames';\nimport { TimelineContext } from '../context';\nimport { TimelineDateUnit, TimelineDataList, TimelineStatus, TimelineTagProps, TimelineTimestamp } from '../types';\nimport { DateText, formatDistanceStrict } from './DateText';\nimport Button from '../../Button';\nimport { ButtonVariant } from '../../Button/types';\nimport Typography from '../../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../Typography/types';\nimport { Tag } from '../../Tag/Tag';\nimport StructuredList from '../../StructuredList/StructuredList';\nimport Icon from '../../Icon';\nimport './TimelineItem.scss';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport { TranslationKey } from '../../../../translations';\nimport useUniqueId from '../../../../hooks/useUniqueId';\n\nconst UNIT_TRANSLATION_KEYS: Record<TimelineDateUnit, TranslationKey> = {\n    day: 'common.timeline.timelineItem.timeGap.unit.day',\n};\n\nexport interface TimelineItemProps {\n    dataList?: TimelineDataList | null;\n    description?: string | null;\n    status?: TimelineStatus;\n    tag?: TimelineTagProps;\n    timestamp: TimelineTimestamp;\n    title?: string | null;\n    children?: ComponentChildren;\n}\n\nexport function TimelineItem({ dataList = null, description = null, status = 'black', tag, timestamp, title = null, children }: TimelineItemProps) {\n    const { i18n } = useCoreContext();\n    const context = useContext(TimelineContext);\n\n    if (!context) {\n        throw new Error('TimelineItem must be used within a Timeline component');\n    }\n\n    const { registerTimelineEntry, entries, showAll, showMoreIndex, hiddenItems, visibleIndexes, timeGapLimit, toggleShowAll } = context;\n\n    const instanceIdRef = useRef<string>(useUniqueId());\n\n    // Register this timeline entry on mount, unregister on unmount\n    useLayoutEffect(() => {\n        const entry = {\n            title: title || undefined,\n            description: description || undefined,\n            date: timestamp.date,\n            _instanceId: instanceIdRef.current,\n        };\n        const unregister = registerTimelineEntry(entry as any);\n        return unregister;\n    }, [registerTimelineEntry, title, description, timestamp.date]);\n\n    // Calculate index by finding this entry using the instance ID\n    const index = useMemo(() => {\n        const foundIndex = entries.findIndex(entry => (entry as any)._instanceId === instanceIdRef.current);\n        return foundIndex;\n    }, [entries]);\n\n    const allItemsShowing = showAll || !visibleIndexes;\n    // If index is -1, component is registering - use allItemsShowing to determine visibility\n    const isVisible = index === -1 ? allItemsShowing : allItemsShowing ? true : visibleIndexes.includes(index);\n\n    const timeGap = useMemo(() => {\n        if (!timeGapLimit || index <= 0) {\n            return null;\n        }\n        const previousEntry = entries[index - 1];\n        if (!previousEntry) {\n            return null;\n        }\n        const isPreviousItemVisible = allItemsShowing || (visibleIndexes && visibleIndexes.includes(index - 1));\n        if (!isPreviousItemVisible) {\n            return null;\n        }\n        const currentDate = timestamp.date;\n        const previousDate = previousEntry.date;\n\n        const timegapInSelectedUnit = formatDistanceStrict(previousDate, currentDate, { unit: timeGapLimit.unit || 'day' });\n\n        const formattedTimeGap = i18n.get(UNIT_TRANSLATION_KEYS[timegapInSelectedUnit.unit], {\n            values: { value: timegapInSelectedUnit.value },\n            count: timegapInSelectedUnit.value,\n        });\n\n        return timeGapLimit.thresholdAmount < timegapInSelectedUnit.value ? formattedTimeGap : null;\n    }, [timeGapLimit, entries, index, allItemsShowing, visibleIndexes, timestamp.date, i18n]);\n\n    const timeGapAriaLabel = timeGap ? i18n.get('common.timeline.timelineItem.timeGap.a11y.label', { values: { timeGap } }) : '';\n\n    const displayShowMoreButton = hiddenItems && showMoreIndex === index;\n\n    const isLastItem = index === entries.length - 1;\n\n    const iconConditionalClasses = cx('adyen-pe-timeline-item__icon', {\n        [`adyen-pe-timeline-item__icon--${status}`]: status,\n    });\n\n    if (!isVisible) {\n        return null;\n    }\n\n    return (\n        <li className={'adyen-pe-timeline-item'}>\n            {timeGap && (\n                <div className=\"adyen-pe-timeline-item__row\">\n                    <div className=\"adyen-pe-timeline-item__marker\" aria-hidden=\"true\">\n                        <div className=\"adyen-pe-timeline-item__icon adyen-pe-timeline-item__icon--timegap\"></div>\n                        <div className=\"adyen-pe-timeline-item__separator\"></div>\n                    </div>\n                    <div className=\"adyen-pe-timeline-item__content\">\n                        <Typography className=\"adyen-pe-timeline-item__timegap\" variant={TypographyVariant.CAPTION} aria-label={timeGapAriaLabel}>\n                            {timeGap}\n                        </Typography>\n                    </div>\n                </div>\n            )}\n            <div className=\"adyen-pe-timeline-item__row\">\n                <div className=\"adyen-pe-timeline-item__marker\" aria-hidden=\"true\">\n                    <Icon name=\"square-small-fill\" className={iconConditionalClasses} />\n                    {!isLastItem && <div className=\"adyen-pe-timeline-item__separator\" data-testid=\"last-timeline-item-separator\"></div>}\n                </div>\n                <div className=\"adyen-pe-timeline-item__content\">\n                    {title && (\n                        <div role=\"heading\" aria-level={2}>\n                            <Typography\n                                el={TypographyElement.DIV}\n                                variant={TypographyVariant.BODY}\n                                strongest\n                                className=\"adyen-pe-timeline-item__title\"\n                            >\n                                <span>{title}</span>\n                            </Typography>\n                        </div>\n                    )}\n\n                    {timestamp && (\n                        <Typography className=\"adyen-pe-timeline-item__timestamp\" el={TypographyElement.DIV} variant={TypographyVariant.CAPTION}>\n                            <DateText date={timestamp.date} format={timestamp.format} timezone={timestamp.timezone} />\n                            {timestamp.value && ` ${timestamp.value}`}\n                        </Typography>\n                    )}\n\n                    {(description || children) && (\n                        <Typography el={TypographyElement.DIV} variant={TypographyVariant.BODY} className=\"adyen-pe-timeline-item__description\">\n                            {children || description}\n                        </Typography>\n                    )}\n\n                    {dataList && (\n                        <div className=\"adyen-pe-timeline-item__data-list\">\n                            <StructuredList\n                                condensed\n                                align=\"start\"\n                                items={dataList.map(entry => ({\n                                    label: entry.label,\n                                    value: entry.value,\n                                    key: entry.key,\n                                    id: entry.key,\n                                }))}\n                            />\n                        </div>\n                    )}\n                    {tag && (\n                        <div className=\"adyen-pe-timeline-item__tag\">\n                            <Tag {...tag} />\n                        </div>\n                    )}\n                </div>\n            </div>\n            {displayShowMoreButton && (\n                <div className=\"adyen-pe-timeline-item__row\">\n                    <div className=\"adyen-pe-timeline-item__marker\" aria-hidden=\"true\">\n                        <div className=\"adyen-pe-timeline-item__separator\"></div>\n                    </div>\n                    <div className=\"adyen-pe-timeline-item__content\">\n                        <Button className=\"adyen-pe-timeline__show-more\" variant={ButtonVariant.TERTIARY} onClick={toggleShowAll}>\n                            {!showAll\n                                ? i18n.get('common.timeline.timelineItem.showMoreItems', { values: { items: hiddenItems } })\n                                : i18n.get('common.timeline.timelineItem.showLess')}\n                        </Button>\n                    </div>\n                </div>\n            )}\n        </li>\n    );\n}\n","import { ComponentChildren } from 'preact';\nimport { useCallback, useMemo, useRef, useState } from 'preact/hooks';\nimport { TimelineContext } from './context';\nimport { TimelineEntry, TimelineGapObject, TimelineShowMoreObject } from './types';\nimport './Timeline.scss';\n\nexport interface TimelineProps {\n    children: ComponentChildren;\n    showMore?: TimelineShowMoreObject | null;\n    timeGapLimit?: TimelineGapObject | null;\n}\n\nexport default function Timeline({ children, showMore = null, timeGapLimit = null }: TimelineProps) {\n    const [entries, setEntries] = useState<TimelineEntry[]>([]);\n    const [showAll, setShowAll] = useState(false);\n    const entryIdCounter = useRef(0);\n\n    const hiddenItems = useMemo(() => {\n        if (showMore && entries.length > showMore.limit) {\n            return entries.length - showMore.limit;\n        }\n        return null;\n    }, [showMore, entries.length]);\n\n    const visibleIndexes = useMemo(() => {\n        if (!showMore || !entries.length) {\n            return null;\n        }\n\n        const timelineIndexes = Array.from(entries.keys());\n\n        if (showMore.placement === 'before-last') {\n            const lastIndex = timelineIndexes[timelineIndexes.length - 1];\n            if (lastIndex === undefined) return timelineIndexes.slice(0, showMore.limit);\n            return [...timelineIndexes.slice(0, showMore.limit - 1), lastIndex];\n        }\n\n        if (showMore.placement === 'after-first') {\n            const firstIndex = timelineIndexes[0];\n            if (firstIndex === undefined) return timelineIndexes.slice(0, showMore.limit);\n            return [firstIndex, ...timelineIndexes.slice(-(showMore.limit - 1))];\n        }\n\n        return timelineIndexes.slice(0, showMore.limit);\n    }, [entries, showMore]);\n\n    const showMoreIndex = useMemo(() => {\n        if (!showMore) {\n            return null;\n        }\n\n        switch (showMore.placement) {\n            case 'before-last':\n                return showMore.limit - 2;\n            case 'after-first':\n                return 0;\n            case 'bottom':\n            default:\n                return showMore.limit - 1;\n        }\n    }, [showMore]);\n\n    const registerTimelineEntry = useCallback((entry: TimelineEntry) => {\n        // Assign unique ID to track this specific entry\n        const entryId = entryIdCounter.current++;\n        const entryWithId = { ...entry, _id: entryId };\n\n        setEntries(prev => [...prev, entryWithId]);\n\n        return () => {\n            setEntries(prev => prev.filter(e => (e as any)._id !== entryId));\n        };\n    }, []);\n\n    const toggleShowAll = useCallback(() => {\n        setShowAll(!showAll);\n    }, [showAll]);\n\n    const contextValue = useMemo(\n        () => ({\n            registerTimelineEntry,\n            entries,\n            showAll,\n            showMoreIndex,\n            hiddenItems,\n            visibleIndexes,\n            timeGapLimit,\n            toggleShowAll,\n        }),\n        [registerTimelineEntry, entries, showAll, showMoreIndex, hiddenItems, visibleIndexes, timeGapLimit, toggleShowAll]\n    );\n\n    return (\n        <TimelineContext.Provider value={contextValue}>\n            <div className=\"adyen-pe-timeline\">\n                <ol className=\"adyen-pe-timeline__items\">{children}</ol>\n            </div>\n        </TimelineContext.Provider>\n    );\n}\n","import { memo } from 'preact/compat';\nimport { useMemo } from 'preact/hooks';\nimport { uniqueId } from '../../../../../utils';\nimport { TransactionDetails } from '../../types';\nimport { TX_TIMELINE_LABEL, TX_TIMELINE_VALUE } from '../../constants';\nimport { getTransactionTimelineTxStatus, getTransactionTimelineTxType } from '../../../../utils/translation/getters';\nimport { StructuredListItem, StructuredListProps } from '../../../../internal/StructuredList/types';\nimport { TimelineDateFormat, TimelineTimestamp } from '../../../../internal/Timeline/types';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { TimelineItem } from '../../../../internal/Timeline/components/TimelineItem';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../internal/Typography/Typography';\nimport StructuredList from '../../../../internal/StructuredList';\nimport Timeline from '../../../../internal/Timeline/Timeline';\n\nexport interface PaymentDetailsTimelineProps {\n    transaction: TransactionDetails;\n}\n\ninterface PaymentDetailsTimelineItemProps {\n    event: NonNullable<TransactionDetails['events']>[number];\n    defaultTimestamp: TimelineTimestamp;\n}\n\nconst PaymentDetailsTimeline = ({ transaction }: PaymentDetailsTimelineProps) => {\n    const createdAt = transaction.createdAt;\n    const events = transaction.events;\n    const timezone = transaction.balanceAccount?.timeZone;\n\n    const defaultTimestamp = useMemo<TimelineTimestamp>(\n        () => ({\n            format: TimelineDateFormat.FULL_DATE_EXACT_TIME_WITHOUT_SECONDS,\n            date: new Date(createdAt),\n            timezone,\n        }),\n        [createdAt, timezone]\n    );\n\n    const eventKeys = useMemo(() => {\n        const map = new WeakMap<NonNullable<typeof events>[number], string>();\n        events?.forEach(event => map.set(event, uniqueId()));\n        return map;\n    }, [events]);\n\n    return events ? (\n        <Timeline showMore={{ limit: 2, placement: 'before-last' }}>\n            {events.map(event => (\n                <PaymentDetailsTimeline.Item key={eventKeys.get(event)} event={event} defaultTimestamp={defaultTimestamp} />\n            ))}\n        </Timeline>\n    ) : null;\n};\n\nconst renderTimelineListPropertyLabel: NonNullable<StructuredListProps['renderLabel']> = label => (\n    <Typography el={TypographyElement.DIV} variant={TypographyVariant.CAPTION} className={TX_TIMELINE_LABEL}>\n        {label}\n    </Typography>\n);\n\nconst renderTimelineListPropertyValue: NonNullable<StructuredListProps['renderValue']> = label => (\n    <Typography el={TypographyElement.DIV} variant={TypographyVariant.CAPTION} className={TX_TIMELINE_VALUE}>\n        {label}\n    </Typography>\n);\n\nPaymentDetailsTimeline.Item = memo(({ defaultTimestamp, event }: PaymentDetailsTimelineItemProps) => {\n    const { amount, createdAt, status, type } = event;\n    const { i18n } = useCoreContext();\n\n    const timestamp = useMemo<TimelineTimestamp>(() => ({ ...defaultTimestamp, date: new Date(createdAt) }), [defaultTimestamp, createdAt]);\n    const formattedType = useMemo(() => getTransactionTimelineTxType(i18n, type)!, [i18n, type]);\n    const items = useMemo<StructuredListItem[]>(() => {\n        const { currency, value } = amount;\n        const formattedAmount = `${i18n.amount(value, currency, { hideCurrency: true })} ${currency}`;\n        const formattedStatus = getTransactionTimelineTxStatus(i18n, status)!;\n        return [\n            { key: 'transactions.details.timeline.fields.amount', value: formattedAmount },\n            { key: 'transactions.details.timeline.fields.status', value: formattedStatus },\n        ] as const;\n    }, [i18n, amount, status]);\n\n    // [TODO] - Remove this harcoded type once the team reviews all statuses and types and have less number of different strings, and more friendly ones.\n    const fixedType = status.toLowerCase().includes('refund') ? 'Refund' : status.toLowerCase().includes('auth') ? 'Capture' : formattedType;\n\n    return (\n        <TimelineItem title={fixedType} timestamp={timestamp}>\n            <StructuredList\n                align=\"start\"\n                layout=\"3-9\"\n                items={items}\n                renderLabel={renderTimelineListPropertyLabel}\n                renderValue={renderTimelineListPropertyValue}\n            />\n        </TimelineItem>\n    );\n});\n\nexport default memo(PaymentDetailsTimeline);\n","import Tabs from '../../../../internal/Tabs/Tabs';\nimport PaymentRefundAlerts from './PaymentRefundAlerts';\nimport PaymentDetailsActions from './PaymentDetailsActions';\nimport PaymentDetailsProperties from './PaymentDetailsProperties';\nimport PaymentDetailsStatusBox from './PaymentDetailsStatusBox';\nimport { TransactionDataContentProps } from '../TransactionData/TransactionDataContent';\nimport PaymentDetailsSummary from './PaymentDetailsSummary';\nimport PaymentDetailsTimeline from './PaymentDetailsTimeline';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { ActiveView, DetailsTab, RefundedState, TransactionDetails, TransactionDetailsProps } from '../../types';\nimport { REFUND_STATUSES, TX_DATA_CLASS, TX_DATA_CONTAINER, TX_DETAILS_TABS } from '../../constants';\nimport { TabProps } from '../../../../internal/Tabs/types';\nimport { useEffect, useMemo, useState } from 'preact/hooks';\n\nexport interface PaymentDetailsProps {\n    dataCustomization?: TransactionDetailsProps['dataCustomization'];\n    extraFields: Record<string, any> | undefined;\n    fullRefundFailed: boolean;\n    fullRefundInProgress: boolean;\n    refundAmounts: Readonly<Record<(typeof REFUND_STATUSES)[number], readonly number[] | undefined>>;\n    refundAvailable: boolean;\n    refundCurrency: string;\n    refundDisabled: boolean;\n    refundedAmount: number;\n    refundedState: RefundedState;\n    refundLocked: boolean;\n    setActiveView: (activeView: ActiveView) => void;\n    transaction: TransactionDetails;\n    transactionNavigator: TransactionDataContentProps['transactionNavigator'];\n}\n\nconst PaymentDetails = ({\n    dataCustomization,\n    extraFields,\n    fullRefundFailed,\n    fullRefundInProgress,\n    refundAmounts,\n    refundAvailable,\n    refundCurrency,\n    refundDisabled,\n    refundedAmount,\n    refundedState,\n    refundLocked,\n    setActiveView,\n    transaction,\n    transactionNavigator,\n}: PaymentDetailsProps) => {\n    const { i18n } = useCoreContext();\n    const [activeTab, setActiveTab] = useState<DetailsTab>();\n\n    const navigationTabs = useMemo(\n        () =>\n            TX_DETAILS_TABS.filter(({ id }) => {\n                switch (id) {\n                    case DetailsTab.SUMMARY:\n                        const { additions, deductions, originalAmount, amountBeforeDeductions, netAmount } = transaction;\n                        return (\n                            (additions && additions.length > 0) ||\n                            (deductions && deductions.length > 0) ||\n                            (originalAmount && originalAmount.value !== amountBeforeDeductions.value) ||\n                            netAmount.value !== amountBeforeDeductions.value\n                        );\n                    case DetailsTab.TIMELINE:\n                        return transaction.events && transaction.events.length > 0;\n                    default:\n                        return true;\n                }\n            }),\n        [transaction]\n    );\n\n    const tabContent = useMemo(\n        () => ({\n            [DetailsTab.DETAILS]: (\n                <PaymentDetailsProperties dataCustomization={dataCustomization} extraFields={extraFields} transaction={transaction} />\n            ),\n            [DetailsTab.SUMMARY]: <PaymentDetailsSummary transaction={transaction} />,\n            [DetailsTab.TIMELINE]: <PaymentDetailsTimeline transaction={transaction} />,\n        }),\n        [dataCustomization, extraFields, transaction]\n    );\n\n    useEffect(() => setActiveTab(navigationTabs[0]?.id), [navigationTabs]);\n\n    return (\n        <div className={TX_DATA_CLASS}>\n            <PaymentDetailsStatusBox refundedState={refundedState} transaction={transaction} />\n\n            <div className={TX_DATA_CONTAINER}>\n                {navigationTabs.length > 1 && (\n                    <Tabs\n                        aria-label={i18n.get('transactions.details.viewSelect.a11y.label')}\n                        onChange={({ id }: TabProps<DetailsTab>) => setActiveTab(id)}\n                        tabs={navigationTabs}\n                        activeTab={activeTab}\n                    />\n                )}\n\n                {activeTab && tabContent[activeTab]}\n            </div>\n\n            <PaymentRefundAlerts\n                fullRefundFailed={fullRefundFailed}\n                fullRefundInProgress={fullRefundInProgress}\n                refundAmounts={refundAmounts}\n                refundCurrency={refundCurrency}\n                refundedAmount={refundedAmount}\n                refundedState={refundedState}\n                refundLocked={refundLocked}\n            />\n\n            <PaymentDetailsActions\n                extraFields={extraFields}\n                refundAvailable={refundAvailable}\n                refundDisabled={refundDisabled}\n                setActiveView={setActiveView}\n                transaction={transaction}\n                transactionNavigator={transactionNavigator}\n            />\n        </div>\n    );\n};\n\nexport default PaymentDetails;\n","import { useMemo } from 'preact/hooks';\nimport { boolOrFalse, isFunction } from '../../../../../utils';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { RefundMode, RefundedState, TransactionDetails } from '../../types';\nimport { IRefundMode } from '../../../../../types';\nimport { REFUND_STATUSES } from '../../constants';\n\nexport const useRefundMetadata = (transaction?: TransactionDetails) => {\n    const details = transaction?.refundDetails;\n    const refundMode: IRefundMode = details?.refundMode ?? RefundMode.FULL_AMOUNT;\n    const refundLocked = boolOrFalse(details?.refundLocked);\n    const refundable = refundMode !== RefundMode.NON_REFUNDABLE;\n\n    const refundableAmount = useMemo(() => (transaction ? Math.max(0, details?.refundableAmount?.value ?? 0) : 0), [details, transaction]);\n\n    const refundAuthorization = isFunction(useConfigContext().endpoints.initiateRefund);\n    const refundAvailable = refundAuthorization && refundable && refundableAmount > 0;\n    const refundCurrency = details?.refundableAmount?.currency ?? transaction?.netAmount.currency ?? '';\n    const refundDisabled = !refundAvailable || refundLocked;\n\n    const refundAmounts = useMemo(() => {\n        let latestNonFailedRefundIndex = -1;\n\n        return (details?.refundStatuses ?? []).reduceRight(\n            (refundAmounts, { amount, status }, index) => {\n                if (amount.value !== 0 && REFUND_STATUSES.includes(status)) {\n                    const isNonFailedRefund = status !== 'failed';\n                    const isMoreRecentRefund = index > latestNonFailedRefundIndex;\n\n                    if (isNonFailedRefund && isMoreRecentRefund) {\n                        latestNonFailedRefundIndex = index;\n                    }\n\n                    if (isNonFailedRefund || isMoreRecentRefund) {\n                        const updatedStatusAmounts = (refundAmounts[status] ?? []).concat(Math.abs(amount.value));\n                        return { ...refundAmounts, [status]: updatedStatusAmounts };\n                    }\n                }\n                return refundAmounts;\n            },\n            {} as Readonly<Record<(typeof REFUND_STATUSES)[number], readonly number[] | undefined>>\n        );\n    }, [details?.refundStatuses]);\n\n    const { fullRefundFailed, fullRefundInProgress, refundedAmount } = useMemo(() => {\n        let fullRefundFailed = false;\n        let fullRefundInProgress = false;\n\n        const refundedAmount = (refundAmounts.completed ?? []).reduce((sum, amount) => sum + amount, 0);\n        const refundingAmounts = refundAmounts.in_progress ?? [];\n        const failedRefundAmounts = refundAmounts.failed ?? [];\n\n        if (refundedAmount === 0) {\n            fullRefundFailed = refundingAmounts.length === 0 && failedRefundAmounts.slice(-1)[0] === refundableAmount;\n            fullRefundInProgress = refundingAmounts.length === 1 && refundingAmounts[0] === refundableAmount;\n        }\n\n        return { fullRefundFailed, fullRefundInProgress, refundedAmount } as const;\n    }, [refundableAmount, refundAmounts]);\n\n    const refundedState = useMemo(() => {\n        if (refundedAmount > 0) {\n            switch (refundMode) {\n                case RefundMode.NON_REFUNDABLE:\n                    if (refundableAmount === 0) return RefundedState.FULL;\n                    break;\n                case RefundMode.PARTIAL_AMOUNT:\n                case RefundMode.PARTIAL_LINE_ITEMS:\n                    if (refundableAmount > 0) return RefundedState.PARTIAL;\n                    break;\n            }\n        }\n        return RefundedState.INDETERMINATE;\n    }, [refundableAmount, refundedAmount, refundMode]);\n\n    return {\n        fullRefundFailed, // whether the last (and only) refund that failed is the full refundable amount\n        fullRefundInProgress, // whether the only refund in progress is the full refundable amount\n        refundableAmount, // the maximum amount still available for refund\n        refundable, // whether the refund mode of the payment allows for refund\n        refundAvailable, // whether a refund can be initiated for the payment\n        refundAuthorization, // whether the authenticated user has sufficient permission to initiate refunds\n        refundCurrency, // the payment currency for any initiated refund\n        refundDisabled, // whether refund action for the payment is disabled (refund view should be prevented)\n        refundAmounts, // lookup of refund amounts by refund statuses\n        refundedAmount, // the total amount already refunded\n        refundedState, // whether the payment is yet to be, partially or fully refunded\n        refundLocked, // whether refund action for the payment is temporarily locked\n        refundMode, // the refund mode of the payment\n    } as const;\n};\n\nexport default useRefundMetadata;\n","import { useEffect, useRef } from 'preact/hooks';\nimport { AdditionalEventProperties } from '../../core/Analytics/analytics/user-events';\nimport useAnalyticsContext from '../../core/Context/analytics/useAnalyticsContext';\n\nexport const useLandedPageEvent = (eventProperties: AdditionalEventProperties) => {\n    const userEvents = useAnalyticsContext();\n    const logEvent = useRef(true);\n\n    useEffect(() => {\n        if (!logEvent.current) return;\n        // Log event only on component mount\n        logEvent.current = false;\n        userEvents.addEvent?.('Landed on page', eventProperties);\n    }, [userEvents, eventProperties]);\n};\n","import PaymentRefund from '../PaymentRefund/PaymentRefund';\nimport PaymentDetails from '../PaymentDetails/PaymentDetails';\nimport useRefundMetadata from '../../hooks/useRefundMetadata';\nimport useTransaction from '../../hooks/useTransaction';\nimport DataOverviewDetailsSkeleton from '../../../../internal/DataOverviewDetails/DataOverviewDetailsSkeleton';\nimport { ActiveView, TransactionDetails, TransactionDetailsProps } from '../../types';\nimport { useLandedPageEvent } from '../../../../../hooks/useAnalytics/useLandedPageEvent';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { useModalContext } from '../../../../internal/Modal/Modal';\nimport { sharedTransactionDetailsEventProperties } from '../../constants';\nimport { EMPTY_ARRAY } from '../../../../../utils';\nimport { ILineItem } from '../../../../../types';\nimport './TransactionData.scss';\n\ntype UseTransactionResult = ReturnType<typeof useTransaction>;\n\nexport interface TransactionDataContentProps extends Omit<UseTransactionResult, 'error' | 'transaction'> {\n    dataCustomization?: TransactionDetailsProps['dataCustomization'];\n    extraFields: Record<string, any> | undefined;\n    transaction: TransactionDetails;\n}\n\nexport const TransactionDataContent = ({\n    dataCustomization,\n    extraFields,\n    fetchingTransaction,\n    refreshTransaction,\n    transaction,\n    transactionNavigator,\n}: TransactionDataContentProps) => {\n    const [activeView, setActiveView] = useState(ActiveView.DETAILS);\n    const [locked, setLocked] = useState(false);\n\n    const { withinModal } = useModalContext();\n\n    const {\n        fullRefundFailed,\n        fullRefundInProgress,\n        refundableAmount,\n        refundAmounts,\n        refundAvailable,\n        refundCurrency,\n        refundDisabled,\n        refundedAmount,\n        refundedState,\n        refundMode,\n        refundLocked,\n    } = useRefundMetadata(transaction);\n\n    const cachedRefundLocked = useRef(refundLocked);\n    const refundIsLocked = useMemo(() => refundLocked || locked, [refundLocked, locked]);\n    const refundIsDisabled = useMemo(() => refundDisabled || refundIsLocked, [refundDisabled, refundIsLocked]);\n\n    const lineItems = useMemo<readonly ILineItem[]>(() => Object.freeze(transaction.lineItems ?? EMPTY_ARRAY), [transaction.lineItems]);\n\n    useLandedPageEvent({\n        ...sharedTransactionDetailsEventProperties,\n        ...(withinModal && { fromPage: 'Transactions overview' }),\n    });\n\n    useEffect(() => {\n        if ((cachedRefundLocked.current = refundLocked)) {\n            // Refund has been locked while a refund is still in progress\n            // Rely only on the refundLocked state\n            // Reset the local locked state\n            setLocked(false);\n        }\n    }, [refundLocked]);\n\n    if (fetchingTransaction) {\n        return <DataOverviewDetailsSkeleton skeletonRowNumber={5} />;\n    }\n\n    switch (activeView) {\n        case ActiveView.REFUND:\n            return (\n                <PaymentRefund\n                    currency={refundCurrency}\n                    disabled={refundIsDisabled}\n                    lineItems={lineItems}\n                    maxAmount={refundableAmount}\n                    mode={refundMode}\n                    refreshTransaction={refreshTransaction}\n                    refundedAmount={refundedAmount}\n                    refundingAmounts={refundAmounts.in_progress ?? EMPTY_ARRAY}\n                    setActiveView={setActiveView}\n                    setLocked={setLocked}\n                    transaction={transaction}\n                />\n            );\n\n        default:\n            return (\n                <PaymentDetails\n                    dataCustomization={dataCustomization}\n                    extraFields={extraFields}\n                    fullRefundFailed={fullRefundFailed}\n                    fullRefundInProgress={fullRefundInProgress}\n                    refundAmounts={refundAmounts}\n                    refundAvailable={refundAvailable}\n                    refundCurrency={refundCurrency}\n                    refundDisabled={refundIsDisabled}\n                    refundedAmount={refundedAmount}\n                    refundedState={refundedState}\n                    refundLocked={refundIsLocked}\n                    setActiveView={setActiveView}\n                    transaction={transaction}\n                    transactionNavigator={transactionNavigator}\n                />\n            );\n    }\n};\n\nexport default TransactionDataContent;\n","import { EMPTY_ARRAY, enumerable, getter, isEmptyString, isFunction, isNullish, struct } from '../../../../../../utils';\nimport type { TransactionNavigation, TransactionNavigationCallback, TransactionNavigator } from './types';\nimport type { ITransaction } from '../../../../../../types';\n\nexport const createDuplexTransactionNavigator = () => {\n    let [currentTransactionId, previousTransactionId, fromTransactionId, toTransactionId] = EMPTY_ARRAY as readonly ITransaction['id'][];\n    const canNavigateBackward = () => !!(currentTransactionId && currentTransactionId === toTransactionId && fromTransactionId);\n    const canNavigateForward = () => !!(currentTransactionId && currentTransactionId === fromTransactionId && toTransactionId);\n\n    let onNavigation: TransactionNavigationCallback | null = null;\n\n    const backward: TransactionNavigator['backward'] = () => {\n        if (canNavigateBackward()) {\n            previousTransactionId = currentTransactionId;\n            currentTransactionId = fromTransactionId;\n            triggerNavigationCallback();\n        }\n    };\n\n    const forward: TransactionNavigator['forward'] = () => {\n        if (canNavigateForward()) {\n            previousTransactionId = currentTransactionId;\n            currentTransactionId = toTransactionId;\n            triggerNavigationCallback();\n        }\n    };\n\n    const reset: TransactionNavigator['reset'] = (_fromTransactionId, _toTransactionId) => {\n        const cachedCurrentTransactionId = currentTransactionId;\n        currentTransactionId = previousTransactionId = fromTransactionId = toTransactionId = undefined;\n\n        if (!isEmptyString(_fromTransactionId) && !isEmptyString(_toTransactionId)) {\n            fromTransactionId = _fromTransactionId;\n            toTransactionId = _toTransactionId;\n\n            currentTransactionId =\n                cachedCurrentTransactionId === fromTransactionId || cachedCurrentTransactionId === toTransactionId\n                    ? cachedCurrentTransactionId\n                    : fromTransactionId;\n\n            if (cachedCurrentTransactionId !== currentTransactionId) triggerNavigationCallback();\n        }\n    };\n\n    const setNavigationCallback = (callback: TransactionNavigationCallback | null | undefined) => {\n        if (isNullish(callback)) {\n            onNavigation = null;\n        } else if (isFunction(callback) && onNavigation !== (onNavigation = callback)) {\n            triggerNavigationCallback();\n        }\n    };\n\n    const triggerNavigationCallback = () => {\n        if (isEmptyString(currentTransactionId)) return;\n\n        const from = previousTransactionId;\n        const to = currentTransactionId!;\n        previousTransactionId = undefined;\n\n        onNavigation?.(\n            struct<TransactionNavigation>({\n                from: getter(() => from),\n                to: getter(() => to),\n            })\n        );\n    };\n\n    return struct<TransactionNavigator>({\n        backward: enumerable(backward),\n        forward: enumerable(forward),\n        canNavigateBackward: getter(canNavigateBackward),\n        canNavigateForward: getter(canNavigateForward),\n        currentTransaction: getter(() => currentTransactionId),\n        onNavigation: { set: setNavigationCallback },\n        reset: enumerable(reset),\n    });\n};\n\nexport default createDuplexTransactionNavigator;\n","import useBalanceAccounts from '../../../../../hooks/useBalanceAccounts';\nimport createDuplexTransactionNavigator from './transactionNavigator/createDuplexTransactionNavigator';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { TransactionNavigator } from './transactionNavigator/types';\nimport { EMPTY_OBJECT, isFunction } from '../../../../../utils';\nimport { useFetch } from '../../../../../hooks/useFetch';\nimport { TransactionDetails } from '../../types';\n\nconst getTransactionNavigatorState = (transactionNavigator: TransactionNavigator) => {\n    const { onNavigation, reset, ...navigatorState } = transactionNavigator;\n    return navigatorState;\n};\n\nexport const useTransaction = (id: string) => {\n    const transactionNavigator = useRef(createDuplexTransactionNavigator()).current;\n\n    const [transactionId, setTransactionId] = useState(id);\n    const [transaction, setTransaction] = useState<TransactionDetails>();\n    const [navigatorState, setNavigatorState] = useState(() => getTransactionNavigatorState(transactionNavigator));\n\n    const { balanceAccounts } = useBalanceAccounts();\n    const { getTransaction } = useConfigContext().endpoints;\n\n    const {\n        data,\n        error,\n        isFetching: fetchingTransaction,\n    } = useFetch(\n        useMemo(() => {\n            const enabled = isFunction(getTransaction) && !!transactionId;\n            const path = { transactionId };\n            return {\n                fetchOptions: { enabled },\n                queryFn: () => getTransaction!(EMPTY_OBJECT, { path }),\n            };\n        }, [getTransaction, transactionId])\n    );\n\n    const cachedFetchingTransaction = useRef(fetchingTransaction);\n    const lastFetchedTransactionId = useRef(transactionId);\n\n    const transactionWithBalanceAccount = useMemo(() => {\n        if (!transaction) return;\n        const balanceAccount = balanceAccounts?.find(account => account.id === transaction.balanceAccountId);\n        return { ...transaction, balanceAccount } as const;\n    }, [balanceAccounts, transaction]);\n\n    const refreshTransaction = useCallback(() => setTransactionId(undefined!), []);\n\n    useEffect(() => {\n        switch (transaction?.id === id && transaction?.category) {\n            case 'Refund': {\n                transactionNavigator.reset(transaction?.id, transaction?.refundMetadata?.originalPaymentId);\n                transactionNavigator.onNavigation = ({ to: id }) => setTransactionId(id);\n                break;\n            }\n        }\n\n        setNavigatorState(getTransactionNavigatorState(transactionNavigator));\n    }, [id, transaction, transactionNavigator]);\n\n    useEffect(() => {\n        if (cachedFetchingTransaction.current === fetchingTransaction) return;\n        if ((cachedFetchingTransaction.current = fetchingTransaction)) return;\n\n        if (!data || error) {\n            setTransactionId(lastFetchedTransactionId.current);\n        } else {\n            setTransaction(data);\n            lastFetchedTransactionId.current = transactionId;\n        }\n    }, [data, error, fetchingTransaction, transactionId]);\n\n    useEffect(() => {\n        if (!transactionId) setTransactionId(lastFetchedTransactionId.current);\n    }, [transaction, transactionId]);\n\n    useEffect(() => {\n        return () => {\n            transactionNavigator.onNavigation = null;\n            transactionNavigator.reset();\n        };\n    }, [transactionNavigator]);\n\n    return {\n        error,\n        fetchingTransaction,\n        refreshTransaction,\n        transaction: transactionWithBalanceAccount,\n        transactionNavigator: navigatorState,\n    } as const;\n};\n\nexport default useTransaction;\n","import { boolOrFalse } from '../../../../../utils';\nimport { CustomColumn } from '../../../../types';\nimport { TX_DETAILS_FIELDS_REMAPS, TX_DETAILS_RESERVED_FIELDS_SET } from '../../constants';\nimport DataOverviewDetailsSkeleton from '../../../../internal/DataOverviewDetails/DataOverviewDetailsSkeleton';\nimport normalizeCustomFields from '../../../../utils/customData/normalizeCustomFields';\nimport TransactionDataContent from './TransactionDataContent';\nimport { TransactionDetails, TransactionDetailsProps } from '../../types';\nimport useTransaction from '../../hooks/useTransaction';\nimport { useModalContext } from '../../../../internal/Modal/Modal';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { Header } from '../../../../internal/Header';\nimport { ErrorMessageDisplay } from '../../../../internal/ErrorMessageDisplay/ErrorMessageDisplay';\nimport { getErrorMessage } from '../../../../utils/getErrorMessage';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\n\nexport const TransactionData = ({ id, dataCustomization, hideTitle, onContactSupport }: TransactionDetailsProps) => {\n    const { error, fetchingTransaction, refreshTransaction, transaction, transactionNavigator } = useTransaction(id);\n    const { withinModal } = useModalContext();\n\n    const [extraFields, setExtraFields] = useState<Record<string, any>>();\n    const [forcedHideTitle, setForcedHideTitle] = useState(false);\n\n    const shouldHideTitle = useMemo(() => forcedHideTitle || boolOrFalse(hideTitle), [forcedHideTitle, hideTitle]);\n    const initialTransaction = useRef(transaction);\n\n    const errorProps = useMemo(\n        () => getErrorMessage(error as AdyenPlatformExperienceError, 'transactions.details.errors.unavailable', onContactSupport),\n        [error, onContactSupport]\n    );\n\n    if (!initialTransaction.current && transaction) {\n        initialTransaction.current = transaction;\n    }\n\n    useEffect(() => {\n        // ensure title is always hidden within transaction details modal\n        setForcedHideTitle(withinModal);\n    }, [withinModal]);\n\n    useEffect(() => {\n        if (transaction && transaction.id === id) {\n            (async () => {\n                const customizedDetails = await dataCustomization?.details?.onDataRetrieve?.(transaction);\n                setExtraFields(\n                    normalizeCustomFields(\n                        dataCustomization?.details?.fields,\n                        TX_DETAILS_FIELDS_REMAPS,\n                        customizedDetails as TransactionDetails\n                    )?.reduce((extraFields, field) => {\n                        return !TX_DETAILS_RESERVED_FIELDS_SET.has(field.key as any) && field?.visibility !== 'hidden'\n                            ? {\n                                  ...extraFields,\n                                  ...(customizedDetails?.[field.key] && { [field.key]: customizedDetails[field.key] }),\n                              }\n                            : extraFields;\n                    }, {} as CustomColumn<any>)\n                );\n            })();\n        } else setExtraFields(undefined);\n    }, [transaction, id, dataCustomization]);\n\n    return (\n        <div className=\"adyen-pe-overview-details\">\n            <Header hideTitle={shouldHideTitle} titleKey=\"transactions.details.title\" forwardedToRoot={!withinModal} />\n\n            {initialTransaction.current ? (\n                <TransactionDataContent\n                    extraFields={extraFields}\n                    dataCustomization={dataCustomization}\n                    fetchingTransaction={fetchingTransaction}\n                    refreshTransaction={refreshTransaction}\n                    transaction={transaction ?? initialTransaction.current}\n                    transactionNavigator={transactionNavigator}\n                />\n            ) : fetchingTransaction ? (\n                <DataOverviewDetailsSkeleton skeletonRowNumber={5} />\n            ) : (\n                error &&\n                errorProps && (\n                    <div className=\"adyen-pe-overview-details--error-container\">\n                        <ErrorMessageDisplay outlined={false} absolutePosition={false} withBackground={false} withImage {...errorProps} />\n                    </div>\n                )\n            )}\n        </div>\n    );\n};\n","import TransactionData from './components/TransactionData';\nimport { _UIComponentProps, ExternalComponentType } from '../../types';\nimport { TransactionDetailsProps } from './types';\nimport UIElement from '../UIElement/UIElement';\n\nexport class TransactionElement extends UIElement<TransactionDetailsProps> {\n    public static type: ExternalComponentType = 'transactionDetails';\n\n    constructor(props: _UIComponentProps<TransactionDetailsProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n    }\n\n    public componentToRender = () => {\n        return <TransactionData {...this.props} />;\n    };\n}\n\nexport default TransactionElement;\n","import { isFunction } from '../../../../utils';\nimport { ITransaction } from '../../../../types';\nimport { TransactionsFilters } from '../types';\nimport { DEFAULT_PAGE_LIMIT, LIMIT_OPTIONS } from '../../../internal/Pagination/constants';\nimport { TRANSACTION_FIELDS, TRANSACTION_FIELDS_REMAPS } from '../components/TransactionsTable/TransactionsTable';\nimport { getTransactionsFilterParams, getTransactionsFilterQueryParams } from '../components/utils';\nimport { CustomDataRetrieved, TransactionOverviewComponentProps } from '../../../types';\nimport { useCursorPaginatedRecords } from '../../../internal/Pagination/hooks';\nimport { useCustomColumnsData } from '../../../../hooks/useCustomColumnsData';\nimport { useConfigContext } from '../../../../core/ConfigContext';\nimport { useCallback, useEffect, useMemo, useRef } from 'preact/hooks';\nimport normalizeCustomFields from '../../../utils/customData/normalizeCustomFields';\nimport hasCustomField from '../../../utils/customData/hasCustomField';\nimport mergeRecords from '../../../utils/customData/mergeRecords';\n\nexport interface UseTransactionsListProps\n    extends Pick<TransactionOverviewComponentProps, 'allowLimitSelection' | 'dataCustomization' | 'onFiltersChanged' | 'preferredLimit'> {\n    fetchEnabled: boolean;\n    filters: Readonly<TransactionsFilters>;\n    now: number;\n}\n\nconst useTransactionsList = ({\n    allowLimitSelection = true,\n    preferredLimit = DEFAULT_PAGE_LIMIT,\n    dataCustomization,\n    fetchEnabled,\n    filters,\n    now,\n    onFiltersChanged,\n}: UseTransactionsListProps) => {\n    const { getTransactions } = useConfigContext().endpoints;\n\n    const filterParams = useMemo(() => getTransactionsFilterParams(filters, now), [filters, now]);\n    const initialFilterParams = useRef(filterParams).current;\n    const cachedFilterParams = useRef(initialFilterParams);\n    const canFetchTransactions = isFunction(getTransactions) && fetchEnabled;\n\n    const fetchTransactions = useCallback(\n        async (requestParams: Pick<Parameters<NonNullable<typeof getTransactions>>[1]['query'], 'limit' | 'cursor'>, signal?: AbortSignal) => {\n            const query: Parameters<NonNullable<typeof getTransactions>>[1]['query'] = {\n                ...requestParams,\n                ...getTransactionsFilterQueryParams(filters, now),\n                sortDirection: 'desc' as const,\n            } as const;\n\n            return getTransactions!({ signal }, { query });\n        },\n        [filters, getTransactions, now]\n    );\n\n    const {\n        canResetFilters,\n        error,\n        fetching,\n        filters: _,\n        limit,\n        limitOptions,\n        records,\n        resetFilters,\n        updateFilters,\n        updateLimit,\n        ...paginationProps\n    } = useCursorPaginatedRecords<ITransaction, 'data', string, keyof typeof filterParams>({\n        dataField: 'data',\n        fetchRecords: fetchTransactions,\n        enabled: canFetchTransactions,\n        filterParams: initialFilterParams,\n        initialFiltersSameAsDefault: true,\n        onFiltersChanged: isFunction(onFiltersChanged) ? onFiltersChanged : void 0,\n        preferredLimitOptions: allowLimitSelection ? LIMIT_OPTIONS : undefined,\n        preferredLimit,\n    });\n\n    const mergeCustomData = useCallback(\n        ({ records, retrievedData }: { records: ITransaction[]; retrievedData: CustomDataRetrieved[] }) =>\n            mergeRecords(records, retrievedData, (modifiedRecord, record) => modifiedRecord.id === record.id),\n        []\n    );\n\n    const { fields, onDataRetrieve } = dataCustomization?.list ?? {};\n\n    const normalizedFields = useMemo<typeof fields>(() => normalizeCustomFields(fields, TRANSACTION_FIELDS_REMAPS), [fields]);\n    const hasCustomColumn = useMemo(() => hasCustomField(normalizedFields, TRANSACTION_FIELDS), [normalizedFields]);\n    const { customRecords, loadingCustomRecords } = useCustomColumnsData<ITransaction>({ hasCustomColumn, mergeCustomData, onDataRetrieve, records });\n\n    useEffect(() => {\n        if (cachedFilterParams.current !== filterParams) {\n            cachedFilterParams.current = filterParams;\n            updateFilters?.(filterParams);\n        }\n    }, [filterParams, updateFilters]);\n\n    return {\n        ...paginationProps,\n        error,\n        fields: normalizedFields,\n        fetching: fetching || loadingCustomRecords,\n        records: customRecords,\n        hasCustomColumn,\n        limit,\n        limitOptions,\n        updateLimit,\n    } as const;\n};\n\nexport default useTransactionsList;\n","import { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { TRANSACTIONS_VIEW_TABS } from '../constants';\nimport { TransactionsView } from '../types';\n\nexport interface UseTransactionsViewSwitcherProps {\n    view?: TransactionsView;\n}\n\nconst useTransactionsViewSwitcher = ({ view }: UseTransactionsViewSwitcherProps = {}) => {\n    const preferredViewTab = useMemo(() => TRANSACTIONS_VIEW_TABS.find(({ id }) => id === view), [view]);\n    const preferredView = useMemo(() => preferredViewTab?.id ?? TransactionsView.TRANSACTIONS, [preferredViewTab]);\n    const viewTabs = useMemo(() => (preferredViewTab ? ([preferredViewTab] as const) : TRANSACTIONS_VIEW_TABS), [preferredViewTab]);\n\n    const [activeView, setActiveView] = useState(preferredView);\n\n    const onViewChange = useCallback(\n        <T extends { id: TransactionsView }>({ id }: T) => {\n            const activeView = viewTabs.find(tab => tab.id === id)?.id;\n            activeView && setActiveView(activeView);\n        },\n        [viewTabs]\n    );\n\n    useEffect(() => {\n        setActiveView(preferredView);\n    }, [preferredView]);\n\n    return { activeView, onViewChange, viewTabs } as const;\n};\n\nexport default useTransactionsViewSwitcher;\n","import { useFetch } from '../../../../hooks/useFetch';\nimport { useConfigContext } from '../../../../core/ConfigContext';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { compareTransactionsFilters, getTransactionsFilterQueryParams } from '../components/utils';\nimport { createAbortable } from '../../../../primitives/async/abortable';\nimport { isFunction } from '../../../../utils';\nimport { ITransactionTotal } from '../../../../types';\nimport { TransactionsFilters } from '../types';\n\ntype AllQueryParams = ReturnType<typeof getTransactionsFilterQueryParams>;\ntype TotalsQueryParams = Partial<AllQueryParams> & Pick<AllQueryParams, 'balanceAccountId'>;\nexport type GetQueryParams = (allQueryParams: AllQueryParams) => TotalsQueryParams;\n\nexport interface UseTransactionsTotalsProps {\n    fetchEnabled: boolean;\n    filters: Readonly<TransactionsFilters>;\n    applicableFilters?: Set<keyof TransactionsFilters>;\n    getQueryParams: GetQueryParams;\n    now: number;\n}\n\nconst useTransactionsTotals = ({ applicableFilters, fetchEnabled, filters, getQueryParams, now }: UseTransactionsTotalsProps) => {\n    const [pendingRefresh, setPendingRefresh] = useState(false);\n    const [fetchTimestamp, setFetchTimestamp] = useState(performance.now());\n    const fetchTimestampRef = useRef<number>();\n\n    const abortable = useRef(createAbortable()).current;\n    const cachedFilters = useRef(filters);\n\n    const { getTransactionTotals } = useConfigContext().endpoints;\n    const canGetTransactionTotals = isFunction(getTransactionTotals);\n    const canFetchTransactionTotals = canGetTransactionTotals && fetchEnabled;\n    const shouldFetchTransactionTotals = canFetchTransactionTotals && fetchTimestampRef.current !== fetchTimestamp;\n\n    const fetchTransactionTotals = useCallback(async () => {\n        if (shouldFetchTransactionTotals) {\n            const { signal } = abortable.refresh(true);\n            try {\n                const query = getQueryParams(getTransactionsFilterQueryParams(filters, now));\n                const json = await getTransactionTotals({ signal }, { query });\n                if (!signal.aborted) return json?.data;\n            } catch (error) {\n                if (!signal.aborted) throw error;\n            }\n        }\n    }, [abortable, filters, getQueryParams, getTransactionTotals, now, shouldFetchTransactionTotals]);\n\n    const { data, error, isFetching } = useFetch({\n        fetchOptions: { enabled: shouldFetchTransactionTotals },\n        queryFn: fetchTransactionTotals,\n    });\n\n    const cachedIsFetching = useRef(isFetching);\n    const canRefresh = !isFetching && canFetchTransactionTotals;\n    const totals = useMemo<readonly Readonly<ITransactionTotal>[]>(() => (Array.isArray(data) ? data : []), [data]);\n\n    const refresh = useCallback(() => {\n        if (canRefresh) setPendingRefresh(true);\n    }, [canRefresh, isFetching]);\n\n    useEffect(() => {\n        if (cachedFilters.current === filters) return;\n\n        const applicableFiltersDidChange = compareTransactionsFilters(filters, cachedFilters.current, applicableFilters);\n\n        if (applicableFiltersDidChange) {\n            // The applicable filters have changed,\n            // hence a new fetch request is required\n            setFetchTimestamp(performance.now());\n            cachedFilters.current = filters;\n        }\n    }, [filters, applicableFilters]);\n\n    useEffect(() => {\n        if (pendingRefresh) {\n            // A new fetch request is required\n            setPendingRefresh(false);\n            setFetchTimestamp(performance.now());\n        }\n    }, [pendingRefresh]);\n\n    useEffect(() => {\n        if (cachedIsFetching.current && !isFetching) {\n            // Last fetch request has finished,\n            // update fetch timestamp\n            fetchTimestampRef.current = fetchTimestamp;\n        }\n        cachedIsFetching.current = isFetching;\n    }, [isFetching, fetchTimestamp]);\n\n    return {\n        totals,\n        error,\n        canRefresh,\n        refresh,\n        isAvailable: canGetTransactionTotals,\n        isWaiting: isFetching || (canGetTransactionTotals && !canFetchTransactionTotals && !data),\n    } as const;\n};\n\nexport default useTransactionsTotals;\n","import { isFunction } from '../utils';\nimport { IBalance, IBalanceAccountBase } from '../types';\nimport { createAbortable } from '../primitives/async/abortable';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { useConfigContext } from '../core/ConfigContext';\nimport { useFetch } from './useFetch';\n\nexport interface UseAccountBalancesProps {\n    balanceAccount?: IBalanceAccountBase;\n}\n\nconst useAccountBalances = ({ balanceAccount }: UseAccountBalancesProps) => {\n    const [pendingRefresh, setPendingRefresh] = useState(false);\n    const [fetchTimestamp, setFetchTimestamp] = useState(performance.now());\n    const fetchTimestampRef = useRef<number>();\n\n    const abortable = useRef(createAbortable()).current;\n    const balanceAccountId = balanceAccount?.id;\n    const fetchEnabled = !!balanceAccountId;\n\n    const { getBalances } = useConfigContext().endpoints;\n    const canGetBalances = isFunction(getBalances);\n    const canFetchBalances = canGetBalances && fetchEnabled;\n    const shouldFetchBalances = canFetchBalances && fetchTimestampRef.current !== fetchTimestamp;\n\n    const fetchBalances = useCallback(async () => {\n        if (shouldFetchBalances) {\n            const { signal } = abortable.refresh(true);\n            try {\n                const path: Parameters<NonNullable<typeof getBalances>>[1]['path'] = { balanceAccountId };\n                const json = await getBalances({ signal }, { path });\n                if (!signal.aborted) return json?.data;\n            } catch (error) {\n                if (!signal.aborted) throw error;\n            }\n        }\n    }, [abortable, balanceAccountId, getBalances, shouldFetchBalances]);\n\n    const { data, error, isFetching } = useFetch({\n        fetchOptions: { enabled: shouldFetchBalances },\n        queryFn: fetchBalances,\n    });\n\n    const cachedIsFetching = useRef(isFetching);\n    const canRefresh = !isFetching && canFetchBalances;\n    const balances = useMemo<readonly Readonly<IBalance>[]>(() => (Array.isArray(data) ? data : []), [data]);\n\n    const refresh = useCallback(() => {\n        if (canRefresh) setPendingRefresh(true);\n    }, [canRefresh, isFetching]);\n\n    useEffect(() => {\n        if (balanceAccountId) {\n            // The balance account ID has changed,\n            // hence a new fetch request is required\n            setFetchTimestamp(performance.now());\n        }\n    }, [balanceAccountId]);\n\n    useEffect(() => {\n        if (pendingRefresh) {\n            // A new fetch request is required\n            setPendingRefresh(false);\n            setFetchTimestamp(performance.now());\n        }\n    }, [pendingRefresh]);\n\n    useEffect(() => {\n        if (cachedIsFetching.current && !isFetching) {\n            // Last fetch request has finished,\n            // update fetch timestamp\n            fetchTimestampRef.current = fetchTimestamp;\n        }\n        cachedIsFetching.current = isFetching;\n    }, [isFetching, fetchTimestamp]);\n\n    return {\n        balances,\n        error,\n        canRefresh,\n        refresh,\n        isAvailable: canGetBalances,\n        isWaiting: isFetching || (canGetBalances && !canFetchBalances && !data),\n    } as const;\n};\n\nexport default useAccountBalances;\n","import { useMemo } from 'preact/hooks';\nimport { IBalance, ITransactionTotal } from '../../../../types';\n\nconst getCurrencyLookupRecord = (currency: string, lookupMap?: Map<string, CurrencyLookupRecord>) => {\n    let lookupRecord = lookupMap?.get(currency);\n\n    if (lookupRecord === undefined) {\n        // Initialize currency lookup record\n        lookupRecord = {\n            balances: { currency, reservedValue: 0, value: 0 },\n            totals: {\n                currency,\n                expenses: 0,\n                incomings: 0,\n                total: 0,\n                breakdown: {\n                    expenses: [] as const,\n                    incomings: [] as const,\n                } as const,\n            },\n        };\n\n        lookupMap?.set(currency, lookupRecord);\n    }\n\n    return lookupRecord;\n};\n\nexport interface CurrencyLookupRecord {\n    balances: Readonly<IBalance>;\n    totals: Readonly<ITransactionTotal>;\n}\n\nexport interface UseCurrencyLookupProps {\n    defaultCurrency?: string;\n    balances: readonly Readonly<IBalance>[];\n    totals: readonly Readonly<ITransactionTotal>[];\n}\n\nconst useCurrenciesLookup = ({ defaultCurrency, balances, totals }: UseCurrencyLookupProps) => {\n    const currenciesDictionary = useMemo(() => {\n        const currenciesLookupMap = new Map<string, CurrencyLookupRecord>(\n            defaultCurrency ? [[defaultCurrency, getCurrencyLookupRecord(defaultCurrency)]] : []\n        );\n\n        for (const _balances of balances) {\n            const lookupRecord = getCurrencyLookupRecord(_balances.currency, currenciesLookupMap);\n            lookupRecord.balances = _balances;\n        }\n\n        for (const _totals of totals) {\n            const lookupRecord = getCurrencyLookupRecord(_totals.currency, currenciesLookupMap);\n            lookupRecord.totals = _totals;\n        }\n\n        const sortedCurrencies = [...currenciesLookupMap.entries()].sort(([firstCurrency], [secondCurrency]) =>\n            firstCurrency.localeCompare(secondCurrency)\n        );\n\n        return Object.freeze(Object.fromEntries(sortedCurrencies));\n    }, [defaultCurrency, balances, totals]);\n\n    const sortedCurrencies = useMemo(() => Object.freeze(Object.keys(currenciesDictionary)), [currenciesDictionary]);\n\n    const defaultCurrencySortedCurrencies = useMemo(\n        () =>\n            Object.freeze(\n                [...sortedCurrencies].sort((firstCurrency, secondCurrency) => {\n                    if (defaultCurrency) {\n                        if (firstCurrency === defaultCurrency) return -1;\n                        if (secondCurrency === defaultCurrency) return 1;\n                    }\n                    return 0; // currencies already sorted alphabetically\n                })\n            ),\n        [sortedCurrencies]\n    );\n\n    return { currenciesDictionary, defaultCurrency, defaultCurrencySortedCurrencies, sortedCurrencies } as const;\n};\n\nexport default useCurrenciesLookup;\n","import { useEffect, useRef } from 'preact/hooks';\nimport { AdditionalEventProperties } from '../../core/Analytics/analytics/user-events';\nimport useAnalyticsContext from '../../core/Context/analytics/useAnalyticsContext';\nimport useComponentTiming from '../useComponentTiming';\n\nexport const useDurationEvent = (eventProperties: AdditionalEventProperties) => {\n    const { duration } = useComponentTiming();\n    const userEvents = useAnalyticsContext();\n    const analyticsEventProperties = useRef(eventProperties);\n\n    useEffect(() => {\n        analyticsEventProperties.current = eventProperties;\n    }, [eventProperties]);\n\n    useEffect(() => {\n        return () => {\n            if (duration.current !== undefined) {\n                userEvents.addEvent?.('Duration', {\n                    ...analyticsEventProperties.current,\n                    duration: Math.floor(duration.current satisfies number),\n                });\n            }\n        };\n    }, [duration, userEvents]);\n};\n","import { useEffect } from 'preact/hooks';\nimport { classes } from '../../constants';\nimport { FC, PropsWithChildren } from 'preact/compat';\nimport { TransactionDetailsProps } from '../../../TransactionDetails';\nimport { popoverUtil } from '../../../../internal/Popover/utils/popoverUtil';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport useModalDetails from '../../../../../hooks/useModalDetails/useModalDetails';\nimport TransactionData from '../../../TransactionDetails/components/TransactionData';\nimport Modal from '../../../../internal/Modal';\n\nexport interface DataOverviewDisplayProps {\n    onContactSupport?: () => void;\n    dataCustomization?: TransactionDetailsProps['dataCustomization'];\n    resetDetails: ReturnType<typeof useModalDetails>['resetDetails'];\n    selectedDetail: ReturnType<typeof useModalDetails>['selectedDetail'];\n}\n\nexport const TransactionDetailsModal: FC<DataOverviewDisplayProps> = ({\n    children,\n    dataCustomization,\n    onContactSupport,\n    selectedDetail,\n    resetDetails,\n}: PropsWithChildren<DataOverviewDisplayProps>) => {\n    const { i18n } = useCoreContext();\n    const isModalOpen = !!selectedDetail;\n\n    useEffect(() => {\n        if (isModalOpen) {\n            popoverUtil.closeAll();\n        }\n    }, [isModalOpen]);\n\n    return (\n        <div className={classes.details}>\n            {children}\n            {selectedDetail && (\n                <Modal\n                    isOpen={isModalOpen}\n                    aria-label={i18n.get('transactions.details.title')}\n                    onClose={resetDetails}\n                    isDismissible={true}\n                    headerWithBorder={false}\n                    size={selectedDetail.modalSize || 'large'}\n                >\n                    <TransactionData\n                        id={selectedDetail.selection.data}\n                        dataCustomization={dataCustomization}\n                        onContactSupport={onContactSupport}\n                        hideTitle\n                    />\n                </Modal>\n            )}\n        </div>\n    );\n};\n","import { useCallback } from 'preact/hooks';\nimport { TransactionsListProps } from './types';\nimport { ITransaction } from '../../../../../types';\nimport { TransactionDetailsModal } from './TransactionDetailsModal';\nimport { TransactionsTable } from '../TransactionsTable/TransactionsTable';\nimport { sharedTransactionDetailsEventProperties } from '../../../TransactionDetails/constants';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport useModalDetails from '../../../../../hooks/useModalDetails/useModalDetails';\n\nconst TransactionsList = ({\n    balanceAccount,\n    currenciesLookupResult,\n    dataCustomization,\n    loadingBalanceAccounts,\n    onContactSupport,\n    onRecordSelection,\n    showDetails,\n    transactionsListResult,\n}: TransactionsListProps) => {\n    const userEvents = useAnalyticsContext();\n    const { sortedCurrencies } = currenciesLookupResult;\n\n    const { updateDetails, resetDetails, selectedDetail } = useModalDetails({\n        transaction: {\n            showDetails: showDetails ?? true,\n            callback: onRecordSelection,\n        },\n    });\n\n    const onRowClick = useCallback(\n        ({ id, category }: ITransaction) => {\n            if (category) {\n                userEvents.addEvent?.('Viewed transaction details', {\n                    ...sharedTransactionDetailsEventProperties,\n                    transactionType: category,\n                });\n            }\n            updateDetails({\n                selection: {\n                    data: id,\n                    type: 'transaction',\n                    balanceAccount,\n                },\n                modalSize: 'small',\n            }).callback({ id });\n        },\n        [balanceAccount, updateDetails, userEvents]\n    );\n\n    const {\n        error: transactionsError,\n        fetching: loadingTransactions,\n        fields: transactionsFields,\n        records: transactions,\n        updateLimit: onLimitSelection,\n        hasCustomColumn,\n        ...paginationProps\n    } = transactionsListResult;\n\n    return (\n        <TransactionDetailsModal\n            dataCustomization={dataCustomization}\n            onContactSupport={onContactSupport}\n            resetDetails={resetDetails}\n            selectedDetail={selectedDetail as ReturnType<typeof useModalDetails>['selectedDetail']}\n        >\n            <TransactionsTable\n                activeBalanceAccount={balanceAccount}\n                availableCurrencies={sortedCurrencies as (typeof sortedCurrencies)[number][]}\n                error={transactionsError as AdyenPlatformExperienceError}\n                hasMultipleCurrencies={sortedCurrencies.length > 1}\n                loading={loadingBalanceAccounts || loadingTransactions}\n                onContactSupport={onContactSupport}\n                onLimitSelection={onLimitSelection}\n                onRowClick={onRowClick}\n                showPagination={true}\n                transactions={transactions}\n                customColumns={transactionsFields}\n                {...paginationProps}\n            />\n        </TransactionDetailsModal>\n    );\n};\n\nexport default TransactionsList;\n","export const DEFAULT_BASE_BUTTON_CLASSNAME = 'adyen-pe-base-button';\n","import useButton from '../Button/hooks/useButton';\nimport { DEFAULT_BASE_BUTTON_CLASSNAME } from './constants';\nimport { fixedForwardRef, parseBooleanProp, parseClassName } from '../../../utils/preact';\nimport { Ref } from 'preact';\nimport { useMemo } from 'preact/hooks';\nimport { ButtonProps } from './types';\nimport './BaseButton.scss';\n\nfunction BaseButton(props: ButtonProps, ref: Ref<HTMLButtonElement>) {\n    const classNameValue = useMemo(() => parseClassName('', props.className) || '', [props.className]);\n    const disabledValue = useMemo(() => parseBooleanProp(props.disabled || false), [props.disabled]);\n\n    const { click, allProps } = useButton(\n        classNameValue,\n        [...(props.classNameModifiers || []), ...(props.fullWidth ? ['full-width'] : [])],\n        DEFAULT_BASE_BUTTON_CLASSNAME,\n        disabledValue,\n        props,\n        props.type,\n        props.onClick\n    );\n\n    return (\n        <button type={props.type || 'button'} onClick={click} ref={ref} {...allProps}>\n            {props.children}\n        </button>\n    );\n}\n\nexport default fixedForwardRef(BaseButton);\n","const NAMESPACE = 'adyen-pe-expandable-card';\n\n// Block classes\nexport const BASE_CLASS = NAMESPACE;\n\n// Element classes\nexport const CONTAINER_CLASS = BASE_CLASS + '__container';\nexport const CONTENT_CLASS = BASE_CLASS + '__content';\nexport const CHEVRON_CLASS = BASE_CLASS + '__chevron';\n\n// Modifier classes\nexport const CONTAINER_BUTTON_CLASS = CONTAINER_CLASS + '--button';\nexport const CONTAINER_FILLED_CLASS = CONTAINER_CLASS + '--filled';\nexport const CONTAINER_HIDDEN_CLASS = CONTAINER_CLASS + '--hidden';\nexport const CONTAINER_IN_FLOW_CLASS = CONTAINER_CLASS + '--in-flow';\nexport const CONTAINER_OVERLAY_CLASS = CONTAINER_CLASS + '--overlay';\nexport const CONTENT_EXPANDABLE_CLASS = CONTENT_CLASS + '--expandable';\n\n// Custom properties\nexport const CARD_HEIGHT_PROPERTY = `--${NAMESPACE}-height`;\n","import classNames from 'classnames';\nimport { isFunction } from '../../../utils';\nimport { PropsWithChildren } from 'preact/compat';\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { ExpandableCardContentRender, ExpandableCardProps } from './types';\nimport { useClickOutside } from '../../../hooks/element/useClickOutside';\nimport useUniqueId from '../../../hooks/useUniqueId';\nimport BaseButton from '../BaseButton';\nimport Icon from '../Icon';\nimport './ExpandableCard.scss';\nimport {\n    BASE_CLASS,\n    CARD_HEIGHT_PROPERTY,\n    CHEVRON_CLASS,\n    CONTAINER_BUTTON_CLASS,\n    CONTAINER_CLASS,\n    CONTAINER_FILLED_CLASS,\n    CONTAINER_HIDDEN_CLASS,\n    CONTAINER_IN_FLOW_CLASS,\n    CONTAINER_OVERLAY_CLASS,\n    CONTENT_CLASS,\n    CONTENT_EXPANDABLE_CLASS,\n} from './constants';\n\nconst ExpandableCard = ({ renderContent, children, filled, fullWidth, inFlow, ...restProps }: PropsWithChildren<ExpandableCardProps>) => {\n    const [isOpen, setIsOpen] = useState(false);\n    const [collapsedCardHeight, setCollapsedCardHeight] = useState(0);\n    const inNormalFlow = useMemo(() => inFlow === true, [inFlow]);\n    const toggleIsOpen = useCallback(() => setIsOpen(isOpen => !isOpen), [setIsOpen]);\n    const expandableCardRef = useRef<HTMLDivElement>(null);\n    const expandButtonRef = useRef<HTMLButtonElement>(null);\n    const expandedContentId = `elem-${useUniqueId()}`;\n    const isClosedFromOutside = useRef(false);\n    const isOpenRef = useRef(isOpen);\n\n    const clickOutsideRef = useClickOutside<HTMLElement>(\n        undefined,\n        useCallback(() => {\n            if (isOpen) {\n                toggleIsOpen();\n                isClosedFromOutside.current = true;\n            }\n        }, [isOpen, toggleIsOpen])\n    );\n\n    const renderCardContent = useMemo<ExpandableCardContentRender>(\n        () =>\n            isFunction(renderContent)\n                ? renderContent\n                : ({ collapsibleContent }) => (\n                      <>\n                          {renderContent}\n                          {collapsibleContent && <div>{collapsibleContent}</div>}\n                      </>\n                  ),\n        [renderContent]\n    );\n\n    useLayoutEffect(() => {\n        const cardElement = expandableCardRef.current;\n        if (!cardElement) return;\n\n        if (inNormalFlow) {\n            // The inNormalFlow value is currently `true`,\n            // Ensure the collapsed card height property is up-to-date\n            cardElement.style.setProperty(CARD_HEIGHT_PROPERTY, `${collapsedCardHeight}px`);\n        } else if (!isOpen) {\n            // The card isn't currently expanded, and the inNormalFlow value is currently `false`\n            // The collapsed card height property is no longer needed\n            cardElement.style.removeProperty(CARD_HEIGHT_PROPERTY);\n        }\n    }, [collapsedCardHeight, inNormalFlow, isOpen]);\n\n    useEffect(() => {\n        if (!inNormalFlow) return void setCollapsedCardHeight(0);\n\n        const element = expandButtonRef.current;\n        if (!element) return;\n\n        const resizeObserver = new ResizeObserver(entries => {\n            for (const entry of entries) {\n                if (entry.target !== element) continue;\n                setCollapsedCardHeight(element.offsetHeight || 0);\n            }\n        });\n\n        resizeObserver.observe(element);\n\n        return () => {\n            resizeObserver.unobserve(element);\n            resizeObserver.disconnect();\n        };\n    }, [inNormalFlow]);\n\n    useEffect(() => {\n        if (isOpen) {\n            clickOutsideRef.current?.focus();\n        } else {\n            // We want to manually focus the expand button only when the card is collapsed by inside clicks\n            // Therefore we skip the manual focus initially when isOpen is false and when we have outside clicks\n            if (isOpenRef.current !== isOpen && !isClosedFromOutside.current) {\n                expandButtonRef.current?.focus();\n            }\n            isClosedFromOutside.current = false;\n        }\n        isOpenRef.current = isOpen;\n    }, [isOpen, clickOutsideRef]);\n\n    return (\n        <div ref={expandableCardRef} className={BASE_CLASS}>\n            {children ? (\n                <>\n                    <BaseButton\n                        className={classNames(CONTAINER_CLASS, CONTAINER_BUTTON_CLASS, { [CONTAINER_FILLED_CLASS]: filled })}\n                        disabled={isOpen}\n                        fullWidth={fullWidth}\n                        onClick={toggleIsOpen}\n                        ref={expandButtonRef}\n                        data-testid={'expand-button'}\n                        {...(isOpen ? { 'aria-hidden': true } : { 'aria-controls': expandedContentId, 'aria-expanded': false })}\n                        {...restProps}\n                    >\n                        <div className={classNames(CONTENT_CLASS, CONTENT_EXPANDABLE_CLASS)}>{renderCardContent({ isExpanded: isOpen })}</div>\n                        <div className={CHEVRON_CLASS}>\n                            <Icon name=\"chevron-down\" />\n                        </div>\n                    </BaseButton>\n                    <BaseButton\n                        id={expandedContentId}\n                        className={classNames(CONTAINER_CLASS, CONTAINER_BUTTON_CLASS, CONTAINER_OVERLAY_CLASS, {\n                            [CONTAINER_FILLED_CLASS]: filled,\n                            [CONTAINER_HIDDEN_CLASS]: !isOpen,\n                            [CONTAINER_IN_FLOW_CLASS]: inNormalFlow,\n                        })}\n                        disabled={!isOpen}\n                        fullWidth={fullWidth}\n                        onClick={toggleIsOpen}\n                        ref={clickOutsideRef}\n                        data-testid={'collapse-button'}\n                        {...(isOpen ? { 'aria-controls': expandedContentId, 'aria-expanded': true } : { role: 'presentation' })}\n                        {...restProps}\n                    >\n                        <div className={classNames(CONTENT_CLASS, CONTENT_EXPANDABLE_CLASS)}>\n                            {renderCardContent({ isExpanded: isOpen, collapsibleContent: children })}\n                        </div>\n                        <div className={CHEVRON_CLASS}>\n                            <Icon name=\"chevron-up\" />\n                        </div>\n                    </BaseButton>\n                </>\n            ) : (\n                <div className={classNames(CONTAINER_CLASS, { [CONTAINER_FILLED_CLASS]: filled })} {...restProps}>\n                    <div className={CONTENT_CLASS}>{renderCardContent({ isExpanded: false })}</div>\n                </div>\n            )}\n        </div>\n    );\n};\n\nexport default ExpandableCard;\n","export const BASE_CLASS = 'adyen-pe-amount-skeleton';\nexport const MARGIN_CLASS = BASE_CLASS + '--has-margin';\nexport const LOADING_CLASS = BASE_CLASS + '--loading';\n","import classNames from 'classnames';\nimport { BASE_CLASS, LOADING_CLASS, MARGIN_CLASS } from './constants';\nimport './AmountSkeleton.scss';\nimport { FC } from 'preact/compat';\nimport { AmountSkeletonProps } from './types';\n\nexport const AmountSkeleton: FC<AmountSkeletonProps> = ({ hasMargin = false, isLoading = false, width }) => {\n    return <span className={classNames(BASE_CLASS, { [LOADING_CLASS]: isLoading, [MARGIN_CLASS]: hasMargin })} style={{ width }}></span>;\n};\n\nexport default AmountSkeleton;\n","export const BASE_CLASS = 'adyen-pe-summary-item';\nexport const LABEL_CONTAINER_CLASS = BASE_CLASS + '__label-container';\nexport const LABEL_CONTAINER_CLASS_LOADING = LABEL_CONTAINER_CLASS + '--loading';\nexport const BODY_CLASS = BASE_CLASS + '--body';\nexport const LABEL_CLASS = BASE_CLASS + '__label';\nexport const PLACEHOLDER_CLASS = BASE_CLASS + '__placeholder';\nexport const AMOUNT_CLASS = BASE_CLASS + '__amount';\n","import { LABEL_CLASS, LABEL_CONTAINER_CLASS, LABEL_CONTAINER_CLASS_LOADING } from './constants';\nimport { SummaryItemLabelProps } from './types';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { fixedForwardRef } from '../../../../../utils/preact';\nimport classNames from 'classnames';\nimport { ForwardedRef } from 'preact/compat';\n\nexport const SummaryItemLabel = fixedForwardRef(\n    ({ config, i18n, isSkeletonVisible, className, ...restArgs }: SummaryItemLabelProps, ref: ForwardedRef<HTMLSpanElement>) => {\n        return (\n            <span\n                className={classNames(LABEL_CONTAINER_CLASS, className, { [LABEL_CONTAINER_CLASS_LOADING]: isSkeletonVisible })}\n                style={{ cursor: 'default' }}\n                ref={ref}\n                {...restArgs}\n            >\n                {config.labelKey && (\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION} className={LABEL_CLASS}>\n                        {i18n.get(config.labelKey)}\n                    </Typography>\n                )}\n            </span>\n        );\n    }\n);\n","import AmountSkeleton from '../AmountSkeleton/AmountSkeleton';\nimport { AMOUNT_CLASS, BASE_CLASS, BODY_CLASS, LABEL_CLASS, PLACEHOLDER_CLASS } from './constants';\nimport { SummaryItemLabel } from './SummaryItemLabel';\nimport { SummaryItemColumnConfig, SummaryItemProps } from './types';\nimport { Tooltip } from '../../../../internal/Tooltip/Tooltip';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport classNames from 'classnames';\nimport { useCallback, useEffect } from 'preact/hooks';\nimport './SummaryItem.scss';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\n\nexport const SummaryItem = ({\n    columnConfigs,\n    isHeader = false,\n    showLabelUnderline = false,\n    isSkeletonVisible = false,\n    isLoading = false,\n    widths,\n    onWidthsSet,\n    isEmpty,\n}: SummaryItemProps) => {\n    const { i18n } = useCoreContext();\n\n    useEffect(() => {\n        const newWidths = columnConfigs.map(config => config.ref?.current?.getBoundingClientRect().width ?? 0);\n        onWidthsSet(newWidths);\n        // We need columnConfigs only for the refs, therefore we don't need to include them in effect dependencies\n        // If we do include it though, we run into an infinite loop of re-rendering\n        // TODO: Check what causes the infinite loop\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, [onWidthsSet]);\n\n    const getColumnStyle = (index: number) => ({ width: widths && widths[index] ? widths[index] : 'auto' });\n\n    const isXsContainer = useResponsiveContainer(containerQueries.only.xs);\n\n    const typographyVariant = useCallback(\n        (config: SummaryItemColumnConfig, isLongValue: boolean) => {\n            if (config.valueHasLabelStyle) {\n                return TypographyVariant.CAPTION;\n            }\n            return isLongValue && !isXsContainer ? TypographyVariant.BODY : TypographyVariant.TITLE;\n        },\n        [isXsContainer]\n    );\n\n    return (\n        <div className={classNames(BASE_CLASS, { [BODY_CLASS]: !isHeader })}>\n            {columnConfigs.map((config, index) => {\n                const value = config.getValue();\n                const isLongValue = !!value && value.length > 15;\n                return (\n                    <div key={index}>\n                        {isHeader && (\n                            <div role=\"presentation\">\n                                {config.tooltipLabel ? (\n                                    <Tooltip content={i18n.get(`${config.tooltipLabel}`)} isUnderlineVisible={showLabelUnderline}>\n                                        <SummaryItemLabel config={config} i18n={i18n} isSkeletonVisible={isSkeletonVisible} />\n                                    </Tooltip>\n                                ) : (\n                                    <SummaryItemLabel config={config} i18n={i18n} isSkeletonVisible={isSkeletonVisible} />\n                                )}\n                            </div>\n                        )}\n                        {isSkeletonVisible ? (\n                            <AmountSkeleton isLoading={isLoading} hasMargin={config.hasSkeletonMargin} width={config.skeletonWidth + 'px'} />\n                        ) : isEmpty ? (\n                            <span className={classNames([BASE_CLASS, PLACEHOLDER_CLASS])}></span>\n                        ) : (\n                            <div id={config.elemId} ref={config.ref} style={getColumnStyle(index)} aria-label={config.ariaLabel} role=\"presentation\">\n                                <Typography\n                                    el={TypographyElement.SPAN}\n                                    variant={typographyVariant(config, isLongValue)}\n                                    className={classNames({ [LABEL_CLASS]: config.valueHasLabelStyle, [AMOUNT_CLASS]: !config.valueHasLabelStyle })}\n                                >\n                                    {value}\n                                </Typography>\n                            </div>\n                        )}\n                    </div>\n                );\n            })}\n        </div>\n    );\n};\n","import useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { useMemo, useRef } from 'preact/hooks';\nimport { TransactionTotalItemProps } from './types';\nimport { SummaryItemColumnConfig } from '../SummaryItem/types';\nimport { SummaryItem } from '../SummaryItem/SummaryItem';\n\nexport const TransactionTotalItem = ({\n    total,\n    hiddenField,\n    isHeader = false,\n    showLabelUnderline = false,\n    isSkeleton = false,\n    isLoading = false,\n    widths,\n    onWidthsSet,\n    expensesElemId,\n    incomingsElemId,\n}: TransactionTotalItemProps) => {\n    const { i18n } = useCoreContext();\n    const incomingRef = useRef<HTMLDivElement>(null);\n    const expenseRef = useRef<HTMLDivElement>(null);\n    const currencyRef = useRef<HTMLDivElement>(null);\n\n    const columnConfigs: SummaryItemColumnConfig[] = useMemo(() => {\n        const incomingsConfig: SummaryItemColumnConfig = {\n            elemId: incomingsElemId,\n            labelKey: 'transactions.overview.totals.tags.incoming',\n            ref: incomingRef,\n            skeletonWidth: 80,\n            getValue: () => total && i18n.amount(total.incomings, total.currency),\n            tooltipLabel: 'transactions.overview.totals.tags.incoming.description',\n            get ariaLabel(): string {\n                return `${i18n.get(this.labelKey!)}: ${this.getValue()}`;\n            },\n        };\n\n        const expensesConfig: SummaryItemColumnConfig = {\n            elemId: expensesElemId,\n            labelKey: 'transactions.overview.totals.tags.outgoing',\n            ref: expenseRef,\n            skeletonWidth: 80,\n            getValue: () => total && i18n.amount(total.expenses, total.currency),\n            tooltipLabel: 'transactions.overview.totals.tags.outgoing.description',\n            get ariaLabel(): string {\n                return `${i18n.get(this.labelKey!)}: ${this.getValue()}`;\n            },\n        };\n\n        return [\n            ...(hiddenField !== 'incomings' ? [incomingsConfig] : []),\n            ...(hiddenField !== 'expenses' ? [expensesConfig] : []),\n            {\n                ref: currencyRef,\n                skeletonWidth: 40,\n                valueHasLabelStyle: true,\n                getValue: () => total?.currency,\n            },\n        ];\n    }, [incomingsElemId, expensesElemId, hiddenField, total, i18n]);\n\n    return (\n        <SummaryItem\n            showLabelUnderline={showLabelUnderline}\n            isEmpty={!total}\n            columnConfigs={columnConfigs}\n            isHeader={isHeader}\n            isSkeletonVisible={isSkeleton}\n            isLoading={isLoading}\n            widths={widths}\n            onWidthsSet={onWidthsSet}\n        />\n    );\n};\n","import { useCallback, useState } from 'preact/hooks';\n\nexport const useMaxWidthsState = (): [number[], (widths: number[]) => void] => {\n    const [maxWidths, setMaxWidths] = useState<number[]>([]);\n    const setMaxWidthsConditionally = useCallback((widths: number[]) => {\n        setMaxWidths(currentMaxWidths =>\n            widths.every(width => !width)\n                ? widths\n                : widths.map((width, index) => {\n                      const currentMaxWidth = currentMaxWidths[index];\n                      return !currentMaxWidth || width > currentMaxWidth ? width : currentMaxWidth;\n                  })\n        );\n    }, []);\n    return [maxWidths, setMaxWidthsConditionally];\n};\n","import { memo } from 'preact/compat';\nimport { useMemo, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport ExpandableCard from '../../../../internal/ExpandableCard/ExpandableCard';\nimport { TransactionTotalItem } from '../TransactionTotalItem/TransactionTotalItem';\nimport { ITransactionTotalWithKey, TotalsCardProps } from './types';\nimport { useMaxWidthsState } from '../../hooks/useMaxWidths';\nimport { uniqueId } from '../../../../../utils';\n\nexport const TotalsCard = memo(({ totals, isLoading, hiddenField, fullWidth, ...ariaAttributes }: TotalsCardProps) => {\n    const { i18n } = useCoreContext();\n    const [maxWidths, setMaxWidths] = useMaxWidthsState();\n    const [isHovered, setIsHovered] = useState(false);\n\n    const localizedPlainCurrencyText = useMemo(() => i18n.get('transactions.overview.totals.currency.label'), [i18n]);\n\n    const [firstTotal, ...restOfTotals] = useMemo<Required<ITransactionTotalWithKey>[]>(() => {\n        return totals.map((t: ITransactionTotalWithKey) => ({\n            ...t,\n            key: t.currency,\n            expensesElemId: uniqueId('elem'),\n            incomingsElemId: uniqueId('elem'),\n        }));\n    }, [totals]);\n\n    const totalsListLabel = useMemo(() => {\n        switch (hiddenField) {\n            case 'expenses':\n                return i18n.get('transactions.overview.totals.lists.incoming');\n            case 'incomings':\n                return i18n.get('transactions.overview.totals.lists.outgoing');\n            default:\n                return i18n.get('transactions.overview.totals.lists.default');\n        }\n    }, [i18n, hiddenField]);\n\n    const renderFirstTotal = useMemo(\n        () => (\n            <div\n                role=\"listitem\"\n                aria-label={firstTotal ? `${localizedPlainCurrencyText}: ${firstTotal.currency}` : undefined}\n                aria-describedby={firstTotal ? `${firstTotal.incomingsElemId} ${firstTotal.expensesElemId}` : undefined}\n            >\n                <TransactionTotalItem\n                    showLabelUnderline={isHovered}\n                    total={firstTotal}\n                    hiddenField={hiddenField}\n                    widths={maxWidths}\n                    isHeader\n                    isSkeleton={isLoading}\n                    isLoading={isLoading}\n                    onWidthsSet={setMaxWidths}\n                    expensesElemId={firstTotal?.expensesElemId}\n                    incomingsElemId={firstTotal?.incomingsElemId}\n                />\n            </div>\n        ),\n        [isHovered, firstTotal, hiddenField, maxWidths, isLoading, setMaxWidths, localizedPlainCurrencyText]\n    );\n\n    const renderRestOfTotals = useMemo(() => {\n        return !isLoading && restOfTotals.length ? (\n            <>\n                {restOfTotals.map(total => (\n                    <div\n                        role=\"listitem\"\n                        key={total.key}\n                        aria-label={`${localizedPlainCurrencyText}: ${total.currency}`}\n                        aria-describedby={`${total.incomingsElemId} ${total.expensesElemId}`}\n                    >\n                        <TransactionTotalItem\n                            showLabelUnderline={isHovered}\n                            total={total}\n                            hiddenField={hiddenField}\n                            widths={maxWidths}\n                            onWidthsSet={setMaxWidths}\n                            expensesElemId={total.expensesElemId}\n                            incomingsElemId={total.incomingsElemId}\n                        />\n                    </div>\n                ))}\n            </>\n        ) : undefined;\n    }, [isLoading, restOfTotals, isHovered, hiddenField, maxWidths, setMaxWidths, localizedPlainCurrencyText]);\n\n    return (\n        <ExpandableCard\n            renderContent={({ collapsibleContent }) => (\n                <div role=\"list\" aria-label={totalsListLabel}>\n                    {renderFirstTotal}\n                    {collapsibleContent}\n                </div>\n            )}\n            fullWidth={fullWidth}\n            onMouseEnter={() => setIsHovered(true)}\n            onFocus={() => setIsHovered(true)}\n            onMouseLeave={() => setIsHovered(false)}\n            onBlur={() => setIsHovered(false)}\n            {...ariaAttributes}\n        >\n            {renderRestOfTotals}\n        </ExpandableCard>\n    );\n});\n","export const BASE_CLASS = 'adyen-pe-transaction-totals';\nexport const ITEM_CLASS = 'adyen-pe-transaction-totals__item';\n","import { memo } from 'preact/compat';\nimport { TotalsCard } from './TotalsCard';\nimport { BASE_CLASS, ITEM_CLASS } from './constants';\nimport { TransactionTotalsProps } from './types';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport './TransactionTotals.scss';\n\nconst TransactionTotals = memo(({ loadingTotals, totals }: TransactionTotalsProps) => {\n    const { i18n } = useCoreContext();\n    const isXsContainer = useResponsiveContainer(containerQueries.only.xs);\n    const isNarrowContainer = useResponsiveContainer(containerQueries.down.sm);\n\n    return (\n        <div className={BASE_CLASS}>\n            {isXsContainer ? (\n                <>\n                    <div className={ITEM_CLASS}>\n                        <TotalsCard\n                            aria-label={i18n.get('transactions.overview.totals.labels.incoming')}\n                            totals={totals}\n                            isLoading={loadingTotals}\n                            hiddenField=\"expenses\"\n                            fullWidth={isNarrowContainer}\n                        />\n                    </div>\n                    <div className={ITEM_CLASS}>\n                        <TotalsCard\n                            aria-label={i18n.get('transactions.overview.totals.labels.outgoing')}\n                            totals={totals}\n                            isLoading={loadingTotals}\n                            hiddenField=\"incomings\"\n                            fullWidth={isNarrowContainer}\n                        />\n                    </div>\n                </>\n            ) : (\n                <TotalsCard\n                    aria-label={i18n.get('transactions.overview.totals.labels.default')}\n                    totals={totals}\n                    isLoading={loadingTotals}\n                    fullWidth={isNarrowContainer}\n                />\n            )}\n        </div>\n    );\n});\n\nexport default TransactionTotals;\n","import useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { useMemo, useRef } from 'preact/hooks';\nimport { BalanceItemProps } from './types';\nimport { SummaryItemColumnConfig } from '../SummaryItem/types';\nimport { SummaryItem } from '../SummaryItem/SummaryItem';\n\nexport const BalanceItem = ({\n    balance,\n    hiddenField,\n    isHeader = false,\n    showLabelUnderline = false,\n    isSkeleton = false,\n    isLoading = false,\n    widths,\n    onWidthsSet,\n    availableBalanceElemId,\n    reservedBalanceElemId,\n}: BalanceItemProps) => {\n    const { i18n } = useCoreContext();\n    const availableAmountRef = useRef<HTMLDivElement>(null);\n    const reservedAmountRef = useRef<HTMLDivElement>(null);\n    const currencyRef = useRef<HTMLDivElement>(null);\n\n    const columnConfigs: SummaryItemColumnConfig[] = useMemo(() => {\n        const availableBalanceConfig: SummaryItemColumnConfig = {\n            elemId: availableBalanceElemId,\n            labelKey: 'transactions.overview.balances.tags.available',\n            ref: availableAmountRef,\n            skeletonWidth: 80,\n            getValue: () => balance && i18n.amount(balance.value, balance.currency),\n            get ariaLabel(): string {\n                return `${i18n.get(this.labelKey!)}: ${this.getValue()}`;\n            },\n        };\n\n        const reservedBalanceConfig: SummaryItemColumnConfig = {\n            elemId: reservedBalanceElemId,\n            labelKey: 'transactions.overview.balances.tags.reserved',\n            ref: reservedAmountRef,\n            skeletonWidth: 80,\n            getValue: () => balance && i18n.amount(balance.reservedValue, balance.currency),\n            tooltipLabel: 'transactions.overview.balances.tags.reserved.description',\n            get ariaLabel(): string {\n                return `${i18n.get(this.labelKey!)}: ${this.getValue()}`;\n            },\n        };\n\n        return [\n            ...(hiddenField !== 'available' ? [availableBalanceConfig] : []),\n            ...(hiddenField !== 'reserved' ? [reservedBalanceConfig] : []),\n            {\n                ref: currencyRef,\n                skeletonWidth: 40,\n                valueHasLabelStyle: true,\n                getValue: () => balance?.currency,\n            },\n        ];\n    }, [balance, hiddenField, i18n]);\n\n    return (\n        <SummaryItem\n            showLabelUnderline={showLabelUnderline}\n            isEmpty={!balance}\n            columnConfigs={columnConfigs}\n            isHeader={isHeader}\n            isSkeletonVisible={isSkeleton}\n            isLoading={isLoading}\n            widths={widths}\n            onWidthsSet={onWidthsSet}\n        />\n    );\n};\n","import { memo } from 'preact/compat';\nimport { useMemo, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport ExpandableCard from '../../../../internal/ExpandableCard/ExpandableCard';\nimport { BalanceItem } from '../BalanceItem/BalanceItem';\nimport { IBalanceWithKey, BalancesCardProps } from './types';\nimport { useMaxWidthsState } from '../../hooks/useMaxWidths';\nimport { uniqueId } from '../../../../../utils';\n\nexport const BalancesCard = memo(({ balances, isLoading, hiddenField, fullWidth, ...ariaAttributes }: BalancesCardProps) => {\n    const { i18n } = useCoreContext();\n    const [maxWidths, setMaxWidths] = useMaxWidthsState();\n    const [isHovered, setIsHovered] = useState(false);\n\n    const localizedPlainCurrencyText = useMemo(() => i18n.get('transactions.overview.balances.currency.label'), [i18n]);\n\n    const [firstBalance, ...restOfBalances] = useMemo<Required<IBalanceWithKey>[]>(() => {\n        return balances.map((t: IBalanceWithKey) => ({\n            ...t,\n            key: t.currency,\n            availableBalanceElemId: uniqueId('elem'),\n            reservedBalanceElemId: uniqueId('elem'),\n        }));\n    }, [balances]);\n\n    const balancesListLabel = useMemo(() => {\n        switch (hiddenField) {\n            case 'available':\n                return i18n.get('transactions.overview.balances.lists.reserved');\n            case 'reserved':\n                return i18n.get('transactions.overview.balances.lists.available');\n            default:\n                return i18n.get('transactions.overview.balances.lists.default');\n        }\n    }, [i18n, hiddenField]);\n\n    const renderFirstBalance = useMemo(\n        () => (\n            <div\n                role=\"listitem\"\n                aria-label={firstBalance ? `${localizedPlainCurrencyText}: ${firstBalance.currency}` : undefined}\n                aria-describedby={firstBalance ? `${firstBalance.availableBalanceElemId} ${firstBalance.reservedBalanceElemId}` : undefined}\n            >\n                <BalanceItem\n                    showLabelUnderline={isHovered}\n                    balance={firstBalance}\n                    hiddenField={hiddenField}\n                    widths={maxWidths}\n                    isHeader\n                    isSkeleton={isLoading}\n                    isLoading={isLoading}\n                    onWidthsSet={setMaxWidths}\n                    reservedBalanceElemId={firstBalance?.reservedBalanceElemId}\n                    availableBalanceElemId={firstBalance?.availableBalanceElemId}\n                />\n            </div>\n        ),\n        [isHovered, firstBalance, hiddenField, maxWidths, isLoading, setMaxWidths, localizedPlainCurrencyText]\n    );\n\n    const renderRestOfBalances = useMemo(() => {\n        return !isLoading && restOfBalances.length ? (\n            <>\n                {restOfBalances.map(total => (\n                    <div\n                        role=\"listitem\"\n                        key={total.key}\n                        aria-label={`${localizedPlainCurrencyText}: ${total.currency}`}\n                        aria-describedby={`${total.availableBalanceElemId} ${total.reservedBalanceElemId}`}\n                    >\n                        <BalanceItem\n                            showLabelUnderline={isHovered}\n                            balance={total}\n                            hiddenField={hiddenField}\n                            widths={maxWidths}\n                            onWidthsSet={setMaxWidths}\n                            reservedBalanceElemId={total.reservedBalanceElemId}\n                            availableBalanceElemId={total.availableBalanceElemId}\n                        />\n                    </div>\n                ))}\n            </>\n        ) : undefined;\n    }, [isLoading, restOfBalances, isHovered, hiddenField, maxWidths, setMaxWidths, localizedPlainCurrencyText]);\n\n    return (\n        <ExpandableCard\n            renderContent={({ collapsibleContent }) => (\n                <div role=\"list\" aria-label={balancesListLabel}>\n                    {renderFirstBalance}\n                    {collapsibleContent}\n                </div>\n            )}\n            fullWidth={fullWidth}\n            onMouseEnter={() => setIsHovered(true)}\n            onFocus={() => setIsHovered(true)}\n            onMouseLeave={() => setIsHovered(false)}\n            onBlur={() => setIsHovered(false)}\n            {...ariaAttributes}\n        >\n            {renderRestOfBalances}\n        </ExpandableCard>\n    );\n});\n","export const BASE_CLASS = 'adyen-pe-balances';\nexport const ITEM_CLASS = 'adyen-pe-balances__item';\n","import { memo } from 'preact/compat';\nimport { BalancesCard } from './BalancesCard';\nimport { BASE_CLASS, ITEM_CLASS } from './constants';\nimport { BalancesProps } from './types';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport './Balances.scss';\n\nconst Balances = memo(({ balances, loadingBalances }: BalancesProps) => {\n    const { i18n } = useCoreContext();\n    const isXsContainer = useResponsiveContainer(containerQueries.only.xs);\n    const isNarrowContainer = useResponsiveContainer(containerQueries.down.sm);\n\n    return (\n        <div className={BASE_CLASS}>\n            {isXsContainer ? (\n                <>\n                    <div className={ITEM_CLASS}>\n                        <BalancesCard\n                            aria-label={i18n.get('transactions.overview.balances.labels.available')}\n                            balances={balances}\n                            isLoading={loadingBalances}\n                            hiddenField=\"reserved\"\n                            fullWidth={isNarrowContainer}\n                        />\n                    </div>\n                    <div className={ITEM_CLASS}>\n                        <BalancesCard\n                            aria-label={i18n.get('transactions.overview.balances.labels.reserved')}\n                            balances={balances}\n                            isLoading={loadingBalances}\n                            hiddenField=\"available\"\n                            fullWidth={isNarrowContainer}\n                        />\n                    </div>\n                </>\n            ) : (\n                <BalancesCard\n                    aria-label={i18n.get('transactions.overview.balances.labels.default')}\n                    balances={balances}\n                    isLoading={loadingBalances}\n                    fullWidth={isNarrowContainer}\n                />\n            )}\n        </div>\n    );\n});\n\nexport default Balances;\n","import { useCallback, useMemo } from 'preact/hooks';\nimport { TransactionOverviewProps } from '../../types';\nimport { IBalanceAccountBase } from '../../../../../types';\nimport { TransactionsListProps } from '../TransactionsList/types';\nimport { classes, TRANSACTION_ANALYTICS_CATEGORY, TRANSACTION_ANALYTICS_SUBCATEGORY_LIST } from '../../constants';\nimport { useLandedPageEvent } from '../../../../../hooks/useAnalytics/useLandedPageEvent';\nimport { useDurationEvent } from '../../../../../hooks/useAnalytics/useDurationEvent';\nimport useAccountBalances from '../../../../../hooks/useAccountBalances';\nimport useTransactionsTotals from '../../hooks/useTransactionsTotals';\nimport useTransactionsList from '../../hooks/useTransactionsList';\nimport useCurrenciesLookup from '../../hooks/useCurrenciesLookup';\nimport TransactionsList from '../TransactionsList/TransactionsList';\nimport TransactionTotals from '../TransactionTotals/TransactionTotals';\nimport Balances from '../Balances/Balances';\nimport Alert from '../../../../internal/Alert/Alert';\nimport Button from '../../../../internal/Button';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { AlertTypeOption } from '../../../../internal/Alert/types';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { TranslationKey } from '../../../../../translations';\n\nconst sharedAnalyticsEventProperties = {\n    category: TRANSACTION_ANALYTICS_CATEGORY,\n    subCategory: TRANSACTION_ANALYTICS_SUBCATEGORY_LIST,\n} as const;\n\ninterface TransactionsOverviewListProps\n    extends Omit<TransactionsListProps, 'loadingBalanceAccounts'>,\n        Pick<TransactionOverviewProps, 'balanceAccounts' | 'isLoadingBalanceAccount'> {\n    balanceAccount?: Readonly<IBalanceAccountBase>;\n    accountBalancesResult: ReturnType<typeof useAccountBalances>;\n    currenciesLookupResult: ReturnType<typeof useCurrenciesLookup>;\n    transactionsListResult: ReturnType<typeof useTransactionsList>;\n    transactionsTotalsResult: ReturnType<typeof useTransactionsTotals>;\n}\n\nconst TransactionsOverviewList = ({\n    accountBalancesResult,\n    balanceAccount,\n    balanceAccounts,\n    currenciesLookupResult,\n    isLoadingBalanceAccount,\n    transactionsListResult,\n    transactionsTotalsResult,\n    ...transactionsListProps\n}: TransactionsOverviewListProps) => {\n    const { i18n } = useCoreContext();\n    const { error: balancesError, isWaiting: loadingBalances } = accountBalancesResult;\n    const { error: totalsError, isWaiting: loadingTotals } = transactionsTotalsResult;\n    const { currenciesDictionary, defaultCurrencySortedCurrencies } = currenciesLookupResult;\n\n    const { sortedBalances, sortedTotals } = useMemo(() => {\n        const sortedBalances = defaultCurrencySortedCurrencies.map(currency => currenciesDictionary[currency]!.balances);\n        const sortedTotals = defaultCurrencySortedCurrencies.map(currency => currenciesDictionary[currency]!.totals);\n        return { sortedBalances, sortedTotals } as const;\n    }, [currenciesDictionary, defaultCurrencySortedCurrencies]);\n\n    const renderErrorAlert = useCallback(\n        <T extends { canRefresh: boolean; refresh: () => void }>({ canRefresh, refresh }: T, titleKey: TranslationKey) => (\n            <Alert\n                className={classes.totalsError}\n                type={AlertTypeOption.WARNING}\n                title={i18n.get(titleKey)}\n                description={\n                    <div>\n                        <Button variant={ButtonVariant.TERTIARY} onClick={refresh} disabled={!canRefresh}>\n                            {i18n.get('common.actions.refresh.labels.default')}\n                        </Button>\n                    </div>\n                }\n            />\n        ),\n        [i18n]\n    );\n\n    useLandedPageEvent(sharedAnalyticsEventProperties);\n    useDurationEvent(sharedAnalyticsEventProperties);\n\n    return (\n        <>\n            <div className={classes.summary}>\n                <div className={classes.summaryItem}>\n                    {totalsError ? (\n                        renderErrorAlert(transactionsTotalsResult, 'transactions.overview.totals.error')\n                    ) : (\n                        <TransactionTotals totals={sortedTotals} loadingTotals={loadingTotals} />\n                    )}\n                </div>\n\n                <div className={classes.summaryItem}>\n                    {balancesError ? (\n                        renderErrorAlert(accountBalancesResult, 'transactions.overview.balances.error')\n                    ) : (\n                        <Balances balances={sortedBalances} loadingBalances={loadingBalances} />\n                    )}\n                </div>\n            </div>\n\n            <TransactionsList\n                balanceAccount={balanceAccount}\n                currenciesLookupResult={currenciesLookupResult}\n                loadingBalanceAccounts={isLoadingBalanceAccount || !balanceAccounts}\n                transactionsListResult={transactionsListResult}\n                {...transactionsListProps}\n            />\n        </>\n    );\n};\n\nexport default TransactionsOverviewList;\n","export const BASE_CLASS = 'adyen-pe-transaction-insights-totals';\n\nexport const classes = {\n    root: BASE_CLASS,\n    breakdowns: BASE_CLASS + '__breakdowns',\n    breakdown: BASE_CLASS + '__breakdown',\n    breakdownList: BASE_CLASS + '__breakdown-list',\n    skeleton: BASE_CLASS + '__skeleton',\n    skeletonLoading: BASE_CLASS + '__skeleton--loading',\n    skeletonAmount: BASE_CLASS + '__skeleton--amount',\n    skeletonAmountLarge: BASE_CLASS + '__skeleton--amount-large',\n    errorContainer: BASE_CLASS + '__error-container',\n};\n","export const BASE_CLASS = 'adyen-pe-transaction-amount-display';\n\nexport const classes = {\n    root: BASE_CLASS,\n    amount: BASE_CLASS + '__amount',\n    amountLarge: BASE_CLASS + '__amount--large',\n    currency: BASE_CLASS + '__currency',\n    label: BASE_CLASS + '__label',\n} as const;\n","import cx from 'classnames';\nimport Icon from '../../../../internal/Icon';\nimport Typography from '../../../../internal/Typography/Typography';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { Tooltip } from '../../../../internal/Tooltip/Tooltip';\nimport { useMemo } from 'preact/hooks';\nimport { classes } from './constants';\nimport './AmountDisplay.scss';\n\nexport interface AmountDisplayProps {\n    amount: number;\n    currency: string;\n    description?: string;\n    label: string;\n    large?: boolean;\n}\n\nconst AmountDisplay = ({ amount, currency, description, label, large }: AmountDisplayProps) => {\n    const { i18n } = useCoreContext();\n\n    const [amountTypographyProps, currencyTypographyProps] = useMemo(() => {\n        const amountTypographyProps = large\n            ? ({ variant: TypographyVariant.TITLE, large: true } as const)\n            : ({ variant: TypographyVariant.SUBTITLE, stronger: true } as const);\n\n        const currencyTypographyProps = large\n            ? ({ variant: TypographyVariant.SUBTITLE, stronger: true } as const)\n            : ({ variant: TypographyVariant.CAPTION, stronger: true } as const);\n\n        return [amountTypographyProps, currencyTypographyProps] as const;\n    }, [large]);\n\n    const formattedAmount = useMemo(() => i18n.amount(amount, currency), [i18n, amount, currency]);\n\n    return (\n        <div className={classes.root}>\n            <div className={classes.label}>\n                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION}>\n                    {label}\n                </Typography>\n\n                {description && (\n                    <Tooltip content={description}>\n                        <span>\n                            <Icon name=\"info\" />\n                        </span>\n                    </Tooltip>\n                )}\n            </div>\n\n            <div className={cx(classes.amount, { [classes.amountLarge]: large })}>\n                <Typography el={TypographyElement.SPAN} {...amountTypographyProps}>\n                    {formattedAmount}\n                </Typography>\n\n                <Typography el={TypographyElement.SPAN} className={classes.currency} {...currencyTypographyProps}>\n                    {currency}\n                </Typography>\n            </div>\n        </div>\n    );\n};\n\nexport default AmountDisplay;\n","import cx from 'classnames';\nimport { memo } from 'preact/compat';\nimport { useMemo } from 'preact/hooks';\nimport { classes } from './constants';\nimport { TranslationKey } from '../../../../../translations';\nimport { ITransactionCategory } from '../../../../../types';\nimport { getTransactionCategory } from '../../../../utils/translation/getters';\nimport { StructuredListItem } from '../../../../internal/StructuredList/types';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { TransactionsOverviewInsightsProps } from '../TransactionsOverview/TransactionsOverviewInsights';\nimport { ErrorMessageDisplay } from '../../../../internal/ErrorMessageDisplay/ErrorMessageDisplay';\nimport AmountDisplay, { AmountDisplayProps } from '../AmountDisplay/AmountDisplay';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../internal/Typography/Typography';\nimport StructuredList from '../../../../internal/StructuredList';\nimport './InsightsTotals.scss';\n\nconst InsightsTotals = ({ currency, currenciesLookupResult, transactionsTotalsResult }: TransactionsOverviewInsightsProps) => {\n    const { i18n } = useCoreContext();\n    const { currenciesDictionary } = currenciesLookupResult;\n\n    const data = (currency && currenciesDictionary[currency]?.totals) || undefined;\n\n    if (transactionsTotalsResult.isWaiting || !data) {\n        const breakdownArray = Array.from({ length: 2 });\n        const breakdownListArray = Array.from({ length: 3 });\n        const className = cx(classes.skeleton, classes.skeletonLoading);\n\n        return (\n            <div className={classes.root}>\n                <span className={cx(className, classes.skeletonAmount, classes.skeletonAmountLarge)} />\n\n                <div className={classes.breakdowns}>\n                    {breakdownArray.map((_, index) => (\n                        <div className={classes.breakdown} key={`breakdown-${index}`}>\n                            <span className={cx(className, classes.skeletonAmount)} />\n\n                            <div className={classes.breakdownList}>\n                                {breakdownListArray.map((_, index) => (\n                                    <span className={className} key={`breakdown-${index}`} />\n                                ))}\n                            </div>\n                        </div>\n                    ))}\n                </div>\n            </div>\n        );\n    }\n\n    return (\n        <div className={classes.root}>\n            {transactionsTotalsResult.error ? (\n                <div className={classes.errorContainer}>\n                    <ErrorMessageDisplay\n                        title={'common.errors.somethingWentWrong'}\n                        message={['common.errors.retry']}\n                        absolutePosition={false}\n                        outlined={false}\n                        withImage\n                        refreshComponent\n                        onRefreshComponent={transactionsTotalsResult.refresh}\n                    />\n                </div>\n            ) : (\n                <>\n                    <AmountDisplay\n                        amount={data.total}\n                        currency={data.currency}\n                        label={i18n.get('transactions.overview.totals.tags.periodResult')}\n                        large\n                    />\n\n                    <div className={classes.breakdowns}>\n                        <InsightsTotals.Breakdown\n                            amount={data.incomings}\n                            breakdown={data.breakdown.incomings}\n                            currency={data.currency}\n                            label={i18n.get('transactions.overview.totals.tags.incoming')}\n                        />\n                        <InsightsTotals.Breakdown\n                            amount={data.expenses}\n                            breakdown={data.breakdown.expenses}\n                            currency={data.currency}\n                            label={i18n.get('transactions.overview.totals.tags.outgoing')}\n                        />\n                    </div>\n                </>\n            )}\n        </div>\n    );\n};\n\ninterface BreakdownProps extends AmountDisplayProps {\n    ariaLabel?: string;\n    breakdown: readonly { category: ITransactionCategory; value: number }[];\n}\n\nInsightsTotals.Breakdown = ({ ariaLabel, breakdown, ...amountDisplayProps }: BreakdownProps) => {\n    const { currency } = amountDisplayProps;\n    const { i18n } = useCoreContext();\n\n    const listItems = useMemo(\n        () =>\n            breakdown.map(\n                ({ category, value }): StructuredListItem => ({\n                    key: getTransactionCategory(i18n, category) as TranslationKey,\n                    value: `${i18n.amount(value, currency)} ${currency}`,\n                })\n            ),\n        [i18n, breakdown, currency]\n    );\n\n    return (\n        <div className={classes.breakdown}>\n            <AmountDisplay {...amountDisplayProps} />\n            <StructuredList\n                items={listItems}\n                aria-label={ariaLabel}\n                classNames={classes.breakdownList}\n                renderLabel={label => (\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION}>\n                        {label}\n                    </Typography>\n                )}\n                renderValue={value => (\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION} stronger>\n                        {value}\n                    </Typography>\n                )}\n            />\n        </div>\n    );\n};\n\nexport default memo(InsightsTotals);\n","import { TRANSACTION_ANALYTICS_CATEGORY, TRANSACTION_ANALYTICS_SUBCATEGORY_INSIGHTS } from '../../constants';\nimport { useDurationEvent } from '../../../../../hooks/useAnalytics/useDurationEvent';\nimport { useLandedPageEvent } from '../../../../../hooks/useAnalytics/useLandedPageEvent';\nimport useTransactionsTotals from '../../hooks/useTransactionsTotals';\nimport useCurrenciesLookup from '../../hooks/useCurrenciesLookup';\nimport InsightsTotals from '../InsightsTotals/InsightsTotals';\n\nconst sharedAnalyticsEventProperties = {\n    category: TRANSACTION_ANALYTICS_CATEGORY,\n    subCategory: TRANSACTION_ANALYTICS_SUBCATEGORY_INSIGHTS,\n} as const;\n\nexport interface TransactionsOverviewInsightsProps {\n    currency?: string;\n    currenciesLookupResult: ReturnType<typeof useCurrenciesLookup>;\n    transactionsTotalsResult: ReturnType<typeof useTransactionsTotals>;\n}\n\nconst TransactionsOverviewInsights = (props: TransactionsOverviewInsightsProps) => {\n    useLandedPageEvent(sharedAnalyticsEventProperties);\n    useDurationEvent(sharedAnalyticsEventProperties);\n    return <InsightsTotals {...props} />;\n};\n\nexport default TransactionsOverviewInsights;\n","import { listFrom } from '../utils';\nimport { useCallback } from 'preact/hooks';\nimport { FilterType } from '../core/Analytics/analytics/user-events';\nimport { SelectItem } from '../components/internal/FormFields/Select/types';\nimport useFilterAnalyticsEvent from './useAnalytics/useFilterAnalyticsEvent';\n\nexport interface UseMultiSelectionFilterPropsConfig<T extends string> {\n    eventCategory?: string;\n    eventSubCategory?: string;\n    eventLabel?: FilterType;\n    onResetFilter?: () => void;\n    onUpdateFilter?: (selection: readonly T[]) => void;\n    selectionOptions: readonly SelectItem<T>[];\n    selection: readonly T[];\n}\n\nconst useMultiSelectionFilterProps = <T extends string>({\n    eventCategory,\n    eventSubCategory,\n    eventLabel,\n    onResetFilter,\n    onUpdateFilter,\n    selectionOptions,\n    selection,\n}: UseMultiSelectionFilterPropsConfig<T>) => {\n    const { logEvent } = useFilterAnalyticsEvent({ category: eventCategory, subCategory: eventSubCategory, label: eventLabel });\n\n    const onResetAction = useCallback(() => {\n        // The reset action clears every existing selection (deselects every option).\n        // If there is no existing selection (nothing is selected), the reset action\n        // is a no-op operation since it does not alter the selection state.\n        if (selection.length > 0) {\n            // Since there was at least one existing selection before this reset,\n            // trigger the reset action callback (if available)\n            logEvent?.('reset');\n            onResetFilter?.();\n        }\n    }, [selection, logEvent, onResetFilter]);\n\n    const updateSelection = useCallback(\n        ({ target }: { target?: { value: string } }) => {\n            const nextSelection = new Set<T>(listFrom(target?.value || ''));\n            const hasDeletions = selection.some(option => !nextSelection.has(option));\n            const selectionChanged = hasDeletions || selection.length !== nextSelection.size;\n\n            if (selectionChanged) {\n                const sortedSelection = Object.freeze([...nextSelection].sort((a, b) => a.localeCompare(b)));\n                logEvent?.('update', String(sortedSelection));\n                onUpdateFilter?.(sortedSelection);\n            }\n        },\n        [selection, logEvent, onUpdateFilter]\n    );\n\n    return { selection, selectionOptions, onResetAction, updateSelection };\n};\n\nexport default useMultiSelectionFilterProps;\n","import MultiSelectionFilter from '../MultiSelectionFilter';\nimport useMultiSelectionFilterProps, { UseMultiSelectionFilterPropsConfig } from '../../../../../hooks/useMultiSelectionFilterProps';\n\nexport interface TransactionMultiSelectionFilterProps<T extends string> extends UseMultiSelectionFilterPropsConfig<T> {\n    placeholder: string;\n}\n\nconst TransactionMultiSelectionFilter = <T extends string>({\n    placeholder,\n    ...useMultiSelectionFilterPropsConfig\n}: TransactionMultiSelectionFilterProps<T>) => {\n    const { selection, ...filterProps } = useMultiSelectionFilterProps(useMultiSelectionFilterPropsConfig);\n    return <MultiSelectionFilter {...filterProps} placeholder={placeholder} selection={selection as (typeof selection)[number][]} />;\n};\n\nexport default TransactionMultiSelectionFilter;\n","import BaseFilter from '../BaseFilter';\nimport { FilterProps } from '../BaseFilter/types';\nimport { TextFilterProps } from './types';\n\nexport default function TextFilter<T extends TextFilterProps = TextFilterProps>(props: FilterProps<T>) {\n    return <BaseFilter<T> {...props} type=\"text\" />;\n}\n","import cx from 'classnames';\nimport { h } from 'preact';\nimport { uniqueId } from '../../../../../utils';\nimport { ARIA_ERROR_SUFFIX } from '../../../../../core/Errors/constants';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { CommitAction } from '../../../../../hooks/useCommitAction';\nimport { TextFilterProps } from '../../../../internal/FilterBar/filters/TextFilter/types';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { FilterEditModalRenderProps } from '../../../../internal/FilterBar/filters/BaseFilter/types';\nimport useFilterAnalyticsEvent from '../../../../../hooks/useAnalytics/useFilterAnalyticsEvent';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport TextFilter from '../../../../internal/FilterBar/filters/TextFilter';\nimport Typography from '../../../../internal/Typography/Typography';\nimport InputBase from '../../../../internal/FormFields/InputBase';\nimport Icon from '../../../../internal/Icon';\nimport './TransactionPspReferenceFilter.scss';\n\nconst BASE_CLASS = 'adyen-pe-psp-reference-filter';\nconst FIXED_CHARACTERS_LENGTH = 16;\n\nconst classes = {\n    root: BASE_CLASS,\n    info: BASE_CLASS + '__info',\n    input: BASE_CLASS + '__input',\n    inputError: BASE_CLASS + '__input-error',\n    inputWithError: BASE_CLASS + '__input--with-error',\n    title: BASE_CLASS + '__title',\n} as const;\n\nexport interface TransactionPspReferenceFilterProps {\n    eventCategory?: string;\n    eventSubCategory?: string;\n    onChange?: (value?: string) => void;\n    value?: string;\n}\n\nconst TransactionPspReferenceFilter = ({ eventCategory, eventSubCategory, onChange, value }: TransactionPspReferenceFilterProps) => {\n    const { i18n } = useCoreContext();\n    const { logEvent } = useFilterAnalyticsEvent({ category: eventCategory, subCategory: eventSubCategory, label: 'PSP reference filter' });\n    const [pendingResetAction, setPendingResetAction] = useState(false);\n\n    const label = useMemo(() => i18n.get('transactions.overview.filters.types.paymentPspReference.label'), [i18n]);\n    const cachedValue = useRef(value);\n\n    const onValueChange = useCallback<NonNullable<typeof onChange>>(\n        value => {\n            if (cachedValue.current !== value) {\n                cachedValue.current = value;\n                logEvent?.('update', null);\n                onChange?.(value);\n            }\n        },\n        [logEvent, onChange]\n    );\n\n    const onResetAction = useCallback(() => setPendingResetAction(true), []);\n\n    useEffect(() => {\n        if (!pendingResetAction) return;\n        setPendingResetAction(false);\n        if (cachedValue.current !== value) logEvent?.('reset');\n    }, [pendingResetAction, value, logEvent]);\n\n    return (\n        <TextFilter\n            aria-label={label}\n            label={value ?? label}\n            onChange={onValueChange}\n            onResetAction={onResetAction}\n            value={value}\n            render={props => <TransactionPspReferenceFilter.EditModal {...props} />}\n            name=\"pspReference\"\n        />\n    );\n};\n\nTransactionPspReferenceFilter.EditModal = ({\n    editAction,\n    onChange,\n    onValueUpdated,\n    name,\n    type,\n    value,\n}: FilterEditModalRenderProps<TextFilterProps>) => {\n    const { i18n } = useCoreContext();\n    const [currentValue, setCurrentValue] = useState(value);\n\n    const firstInputElementRef = useRef<HTMLInputElement | null>(null);\n    const inputId = useMemo(uniqueId, []);\n    const labelId = useMemo(uniqueId, []);\n\n    const invalidLengthError = useMemo(() => {\n        const values = { length: FIXED_CHARACTERS_LENGTH };\n        return i18n.get('transactions.overview.filters.types.paymentPspReference.errors.invalidLength', { values });\n    }, [i18n]);\n\n    const errorMessage = currentValue && currentValue.length < FIXED_CHARACTERS_LENGTH ? invalidLengthError : undefined;\n    const label = useMemo(() => i18n.get('transactions.overview.filters.types.paymentPspReference.label'), [i18n]);\n    const placeholder = useMemo(() => i18n.get('transactions.overview.filters.types.paymentPspReference.placeholder'), [i18n]);\n\n    const handleInput = (evt: h.JSX.TargetedEvent<HTMLInputElement>) => {\n        const inputElement = evt.currentTarget;\n        const selectionEnd = inputElement.selectionEnd;\n        const value = inputElement.value\n            .replace(/[^a-z\\d]/gi, '')\n            .slice(0, FIXED_CHARACTERS_LENGTH)\n            .toUpperCase();\n\n        inputElement.value = value;\n        inputElement.setSelectionRange(selectionEnd, selectionEnd);\n\n        if (value !== currentValue) {\n            setCurrentValue(value || undefined);\n        }\n    };\n\n    useEffect(() => {\n        onValueUpdated(errorMessage ? value || undefined : currentValue);\n    }, [currentValue, errorMessage, onValueUpdated, value]);\n\n    useEffect(() => {\n        switch (editAction) {\n            case CommitAction.APPLY:\n                onChange(currentValue);\n                break;\n            case CommitAction.CLEAR:\n                onChange();\n                break;\n        }\n    }, [editAction, onChange, currentValue]);\n\n    useEffect(() => {\n        if (firstInputElementRef.current) {\n            firstInputElementRef.current.focus();\n        }\n    }, []);\n\n    return (\n        <div className={classes.root}>\n            <div className={classes.title}>\n                <label id={labelId} htmlFor={inputId}>\n                    <Typography el={TypographyElement.DIV} variant={TypographyVariant.BODY} strongest>\n                        {label}\n                    </Typography>\n                </label>\n            </div>\n            <div className={cx(classes.input, { [classes.inputWithError]: errorMessage })}>\n                <InputBase\n                    autoComplete=\"off\"\n                    uniqueId={inputId}\n                    ref={firstInputElementRef}\n                    placeholder={placeholder}\n                    data-testid={name}\n                    name={name}\n                    type={type}\n                    value={currentValue}\n                    onInput={handleInput}\n                />\n            </div>\n            {errorMessage && (\n                <div className={classes.inputError} id={`${inputId}${ARIA_ERROR_SUFFIX}`}>\n                    <Icon name=\"cross-circle-fill\" />\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                        {errorMessage}\n                    </Typography>\n                </div>\n            )}\n        </div>\n    );\n};\n\nexport default TransactionPspReferenceFilter;\n","import useFilterAnalyticsEvent from '../../../../hooks/useAnalytics/useFilterAnalyticsEvent';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport type { FilterType } from '../../../../core/Analytics/analytics/user-events';\nimport type { SelectItem } from '../../../internal/FormFields/Select/types';\n\nexport interface UseCurrencySelectionProps {\n    availableCurrencies?: readonly string[];\n    eventCategory?: string;\n    eventSubCategory?: string;\n    eventLabel?: FilterType;\n    onUpdateSelection?: (currency?: string) => void;\n    selectedCurrency?: string;\n}\n\nconst useCurrencySelection = ({\n    availableCurrencies,\n    eventCategory,\n    eventSubCategory,\n    eventLabel,\n    onUpdateSelection,\n    selectedCurrency,\n}: UseCurrencySelectionProps) => {\n    const { logEvent } = useFilterAnalyticsEvent({ category: eventCategory, subCategory: eventSubCategory, label: eventLabel });\n\n    const currencySelectionOptions = useMemo(\n        () => Object.freeze(availableCurrencies?.map((currency): SelectItem => ({ id: currency, name: currency })) ?? []),\n        [availableCurrencies]\n    );\n\n    const getCurrencyIfAvailable = useCallback(\n        (currency?: string) => {\n            const currencyIndex = currency ? (availableCurrencies?.findIndex(currentCurrency => currentCurrency === currency) ?? -1) : -1;\n            return availableCurrencies?.[currencyIndex];\n        },\n        [availableCurrencies]\n    );\n\n    const [activeCurrency, setActiveCurrency] = useState(() => getCurrencyIfAvailable(selectedCurrency));\n\n    const onCurrencySelection = useCallback(\n        ({ target }: { target?: { value: string } }) => {\n            const selectedCurrency = getCurrencyIfAvailable(target?.value);\n            if (selectedCurrency) {\n                cachedActiveCurrencyRef.current = activeCurrency;\n                setActiveCurrency(selectedCurrency);\n            }\n        },\n        [getCurrencyIfAvailable, activeCurrency]\n    );\n\n    const cachedActiveCurrencyRef = useRef<string | undefined>();\n    const cachedAvailableCurrencies = useRef(availableCurrencies);\n    const cachedSelectedCurrency = useRef(selectedCurrency);\n\n    useEffect(() => {\n        if (cachedAvailableCurrencies.current !== availableCurrencies || cachedSelectedCurrency.current !== selectedCurrency) {\n            cachedAvailableCurrencies.current = availableCurrencies;\n            cachedSelectedCurrency.current = selectedCurrency;\n            cachedActiveCurrencyRef.current = undefined;\n            setActiveCurrency(getCurrencyIfAvailable(selectedCurrency));\n        }\n    }, [getCurrencyIfAvailable, selectedCurrency]);\n\n    useEffect(() => {\n        const cachedActiveCurrency = cachedActiveCurrencyRef.current;\n\n        if (cachedActiveCurrency !== activeCurrency) {\n            // Update the cached active currency with the active one\n            cachedActiveCurrencyRef.current = activeCurrency;\n\n            if (cachedActiveCurrency && activeCurrency) {\n                // Currency selection changed\n                // Log filter modification event\n                logEvent?.('update', activeCurrency);\n            }\n\n            onUpdateSelection?.(activeCurrency);\n        }\n    }, [activeCurrency, logEvent, onUpdateSelection]);\n\n    return { activeCurrency, currencySelectionOptions, onCurrencySelection } as const;\n};\n\nexport default useCurrencySelection;\n","import {\n    TRANSACTION_DATE_RANGE_CUSTOM,\n    TRANSACTION_DATE_RANGE_DEFAULT,\n    TRANSACTION_DATE_RANGE_LAST_180_DAYS,\n    TRANSACTION_DATE_RANGE_LAST_30_DAYS,\n    TRANSACTION_DATE_RANGE_LAST_7_DAYS,\n    TRANSACTION_DATE_RANGE_LAST_MONTH,\n    TRANSACTION_DATE_RANGE_LAST_WEEK,\n    TRANSACTION_DATE_RANGE_MAX_YEARS,\n    TRANSACTION_DATE_RANGE_THIS_MONTH,\n    TRANSACTION_DATE_RANGE_THIS_WEEK,\n    TRANSACTION_DATE_RANGE_YEAR_TO_DATE,\n    TRANSACTION_DATE_RANGES,\n} from '../../constants';\nimport { TransactionsDateRange } from '../../types';\nimport { EMPTY_OBJECT, unreachable } from '../../../../../utils';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { getDateRangeTimestamps } from '../../../../internal/Calendar/calendar/timerange/utils';\nimport { DateFilterProps, DateRangeFilterParam } from '../../../../internal/FilterBar/filters/DateFilter/types';\nimport createRangeTimestampsFactory, { RangeTimestamps } from '../../../../internal/Calendar/calendar/timerange';\nimport DateFilterCore from '../../../../internal/FilterBar/filters/DateFilter/DateFilterCore';\nimport useFilterAnalyticsEvent from '../../../../../hooks/useAnalytics/useFilterAnalyticsEvent';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\n\nexport interface TransactionDateFilterProps {\n    createdDate: RangeTimestamps;\n    eventCategory?: string;\n    eventSubCategory?: string;\n    setCreatedDate: (createdDate: RangeTimestamps) => void;\n    timezone?: string;\n}\n\nconst getDateRangeSelectionEventValue = (dateRangeSelection: TransactionsDateRange) => {\n    switch (dateRangeSelection) {\n        case TRANSACTION_DATE_RANGE_CUSTOM:\n            return 'Custom';\n        case TRANSACTION_DATE_RANGE_LAST_7_DAYS:\n            return 'Last 7 days';\n        case TRANSACTION_DATE_RANGE_LAST_30_DAYS:\n            return 'Last 30 days';\n        case TRANSACTION_DATE_RANGE_LAST_180_DAYS:\n            return 'Last 180 days';\n        case TRANSACTION_DATE_RANGE_THIS_WEEK:\n            return 'This week';\n        case TRANSACTION_DATE_RANGE_LAST_WEEK:\n            return 'Last week';\n        case TRANSACTION_DATE_RANGE_THIS_MONTH:\n            return 'This month';\n        case TRANSACTION_DATE_RANGE_LAST_MONTH:\n            return 'Last month';\n        case TRANSACTION_DATE_RANGE_YEAR_TO_DATE:\n            return 'Year to date';\n        default:\n            return unreachable(dateRangeSelection);\n    }\n};\n\nconst TransactionDateFilter = ({ createdDate, eventCategory, eventSubCategory, setCreatedDate, timezone }: TransactionDateFilterProps) => {\n    const { i18n } = useCoreContext();\n\n    const filterLabel = useMemo(() => i18n.get('common.filters.types.date.label'), [i18n]);\n    const customDateRange = useMemo(() => i18n.get(TRANSACTION_DATE_RANGE_CUSTOM), [i18n]);\n    const defaultDateRange = useMemo(() => i18n.get(TRANSACTION_DATE_RANGE_DEFAULT), [i18n]);\n    const cachedCreatedDate = useRef(createdDate);\n\n    const [selectedDateRange, setSelectedDateRange] = useState(defaultDateRange);\n    const [pendingResetAction, setPendingResetAction] = useState(false);\n\n    const { from, to, since, until, now } = useMemo(() => {\n        const timeShiftMs = 1; // time shift for differentiating equivalent time ranges\n        const currentTime = Date.now() + timeShiftMs;\n        const untilDate = new Date(currentTime);\n        const sinceDate = new Date(untilDate);\n\n        sinceDate.setFullYear(sinceDate.getFullYear() - TRANSACTION_DATE_RANGE_MAX_YEARS);\n\n        const { from, to } = getDateRangeTimestamps(createdDate, currentTime, timezone);\n        const fromDate = new Date(from);\n        const toDate = new Date(to);\n\n        return {\n            from: fromDate.toISOString(),\n            to: toDate.toISOString(),\n            since: sinceDate.toISOString(),\n            until: untilDate.toISOString(),\n            now: currentTime - timeShiftMs, // remove time shift\n        } as const;\n    }, [createdDate, timezone]);\n\n    const { logEvent } = useFilterAnalyticsEvent({ category: eventCategory, subCategory: eventSubCategory, label: 'Date filter' });\n\n    const onFilterChange = useCallback<DateFilterProps['onChange']>(\n        (params = EMPTY_OBJECT) => {\n            const selected = params.selectedPresetOption || defaultDateRange;\n\n            if (selected !== selectedDateRange || selected === customDateRange) {\n                let selectedDateRangeKey: TransactionsDateRange = TRANSACTION_DATE_RANGE_CUSTOM;\n                let nextCreatedDate: RangeTimestamps;\n\n                if (selected === customDateRange) {\n                    const since = params[DateRangeFilterParam.FROM];\n                    const until = params[DateRangeFilterParam.TO];\n\n                    nextCreatedDate = createRangeTimestampsFactory({\n                        from: new Date(since || from).getTime(),\n                        to: new Date(until || to).getTime(),\n                    })();\n                } else {\n                    [selectedDateRangeKey, nextCreatedDate] = (\n                        Object.entries(TRANSACTION_DATE_RANGES) as [TransactionsDateRange, RangeTimestamps][]\n                    ).find(([range]) => i18n.get(range as TransactionsDateRange) === selected)!;\n                }\n\n                const eventValue =\n                    selected === customDateRange\n                        ? String([nextCreatedDate.from, nextCreatedDate.to])\n                        : getDateRangeSelectionEventValue(selectedDateRangeKey);\n\n                setSelectedDateRange(selected);\n                setCreatedDate((cachedCreatedDate.current = nextCreatedDate));\n                logEvent?.('update', eventValue);\n            }\n        },\n        [i18n, from, to, customDateRange, defaultDateRange, selectedDateRange, logEvent]\n    );\n\n    const onFilterResetAction = useCallback(() => setPendingResetAction(true), []);\n\n    useEffect(() => {\n        if (!pendingResetAction) return;\n        setPendingResetAction(false);\n        if (cachedCreatedDate.current !== createdDate) logEvent?.('reset');\n    }, [pendingResetAction, createdDate, logEvent]);\n\n    useEffect(() => {\n        const dateRangeKey = Object.entries(TRANSACTION_DATE_RANGES).find(([_, timestamps]) => timestamps === createdDate)?.[0];\n        setSelectedDateRange(dateRangeKey ? i18n.get(dateRangeKey as TransactionsDateRange) : customDateRange);\n    }, [createdDate, customDateRange, i18n]);\n\n    return (\n        <DateFilterCore\n            name={'createdAt'}\n            now={now}\n            label={filterLabel}\n            aria-label={filterLabel}\n            sinceDate={since}\n            untilDate={until}\n            from={from}\n            to={to}\n            onChange={onFilterChange}\n            onResetAction={onFilterResetAction}\n            selectedPresetOption={selectedDateRange}\n            timeRangePresetOptions={TRANSACTION_DATE_RANGES}\n            timezone={timezone}\n            showTimezoneInfo\n        />\n    );\n};\n\nexport default TransactionDateFilter;\n","import {\n    INITIAL_FILTERS,\n    TRANSACTION_ANALYTICS_CATEGORY,\n    TRANSACTION_ANALYTICS_SUBCATEGORY_INSIGHTS,\n    TRANSACTION_ANALYTICS_SUBCATEGORY_LIST,\n    TRANSACTION_CATEGORIES,\n} from '../../constants';\nimport { compareTransactionsFilters } from '../utils';\nimport { FilterBar } from '../../../../internal/FilterBar';\nimport { selectionOptionsFor } from '../MultiSelectionFilter';\nimport { IBalanceAccountBase } from '../../../../../types';\nimport { TransactionsFilters as Filters } from '../../types';\nimport { FilterBarState } from '../../../../internal/FilterBar/types';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport BalanceAccountSelector from '../../../../internal/FormFields/Select/BalanceAccountSelector';\nimport useBalanceAccountSelection from '../../../../../hooks/useBalanceAccountSelection';\nimport TransactionMultiSelectionFilter from './TransactionMultiSelectionFilter';\nimport TransactionPspReferenceFilter from './TransactionPspReferenceFilter';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport useCurrencySelection from '../../hooks/useCurrencySelection';\nimport TransactionDateFilter from './TransactionDateFilter';\nimport Select from '../../../../internal/FormFields/Select';\n\nconst eventCategory = TRANSACTION_ANALYTICS_CATEGORY;\n\nconst balanceAccountFilterChangedCallback = (() => {\n    const filtersSet = new Set(['balanceAccount'] as const);\n    return () => {\n        let cachedFilters = {} as Readonly<Filters>;\n        return (currentFilters: Readonly<Filters>) => compareTransactionsFilters(cachedFilters, (cachedFilters = currentFilters), filtersSet);\n    };\n})();\n\nexport interface TransactionsFiltersProps extends Omit<FilterBarState, 'setShowingFilters'> {\n    availableCurrencies: readonly string[];\n    balanceAccounts?: IBalanceAccountBase[];\n    isTransactionsView: boolean;\n    insightsCurrency?: string;\n    onChange?: (filters: Readonly<Filters>) => void;\n    setInsightsCurrency?: (currency?: string) => void;\n}\n\nconst TransactionsFilters = ({\n    availableCurrencies,\n    balanceAccounts,\n    isTransactionsView,\n    onChange,\n    insightsCurrency,\n    setInsightsCurrency,\n    ...filterBarProps\n}: TransactionsFiltersProps) => {\n    const { i18n } = useCoreContext();\n\n    const eventSubCategory = isTransactionsView ? TRANSACTION_ANALYTICS_SUBCATEGORY_LIST : TRANSACTION_ANALYTICS_SUBCATEGORY_INSIGHTS;\n    const initialFilters = useRef<Filters>({ ...INITIAL_FILTERS });\n    const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    const [statuses, setStatuses] = useState(initialFilters.current.statuses);\n    const [categories, setCategories] = useState(initialFilters.current.categories);\n    const [currencies, setCurrencies] = useState(initialFilters.current.currencies);\n    const [createdDate, setCreatedDate] = useState(initialFilters.current.createdDate);\n    const [paymentPspReference, setPaymentPspReference] = useState(initialFilters.current.paymentPspReference);\n    const [balanceAccount, setBalanceAccount] = useState(initialFilters.current.balanceAccount);\n\n    const currentFilters = useMemo(\n        () => ({ balanceAccount, categories, createdDate, currencies, paymentPspReference, statuses }) as const,\n        [balanceAccount, categories, createdDate, currencies, paymentPspReference, statuses]\n    );\n\n    const cachedAvailableCurrencies = useRef<typeof availableCurrencies>();\n    const cachedCurrentFilters = useRef<typeof currentFilters>();\n    const canResetFilters = useMemo(() => compareTransactionsFilters(currentFilters, initialFilters.current), [currentFilters]);\n\n    const resetFilters = useCallback(() => {\n        setStatuses(initialFilters.current.statuses);\n        setCategories(initialFilters.current.categories);\n        setCurrencies(initialFilters.current.currencies);\n        setCreatedDate(initialFilters.current.createdDate);\n        setPaymentPspReference(initialFilters.current.paymentPspReference);\n        setBalanceAccount(initialFilters.current.balanceAccount);\n    }, []);\n\n    // const statusesFilterOptions = useMemo(() => selectionOptionsFor(TRANSACTION_STATUSES), []);\n    // const statusesFilterPlaceholder = useMemo(() => i18n.get('transactions.overview.filters.types.status.label'), [i18n]);\n\n    const categoriesFilterOptions = useMemo(() => selectionOptionsFor(TRANSACTION_CATEGORIES), []);\n    const categoriesFilterPlaceholder = useMemo(() => i18n.get('transactions.overview.filters.types.category.label'), [i18n]);\n\n    const currenciesFilterOptions = useMemo(() => selectionOptionsFor(availableCurrencies ?? []), [availableCurrencies]);\n    const currenciesFilterPlaceholder = useMemo(() => i18n.get('transactions.overview.filters.types.currency.label'), [i18n]);\n    const currencyFilterEventLabel = 'Currency filter';\n\n    const balanceAccountFilterChanged = useRef(balanceAccountFilterChangedCallback()).current;\n\n    const { resetBalanceAccountSelection, ...balanceAccountFilterProps } = useBalanceAccountSelection({\n        allowAllSelection: false,\n        onUpdateSelection: setBalanceAccount,\n        balanceAccounts,\n        eventCategory,\n        eventSubCategory,\n    });\n\n    const { activeCurrency, currencySelectionOptions, onCurrencySelection } = useCurrencySelection({\n        eventLabel: currencyFilterEventLabel,\n        onUpdateSelection: setInsightsCurrency,\n        selectedCurrency: insightsCurrency ?? balanceAccount?.defaultCurrencyCode,\n        availableCurrencies,\n        eventCategory,\n        eventSubCategory,\n    });\n\n    useEffect(() => {\n        if (cachedAvailableCurrencies.current === availableCurrencies) return;\n        if (balanceAccountFilterChanged(currentFilters)) {\n            setCurrencies(initialFilters.current.currencies);\n            setInsightsCurrency?.(currentFilters.balanceAccount?.defaultCurrencyCode);\n        }\n        cachedAvailableCurrencies.current = availableCurrencies;\n    }, [availableCurrencies, currentFilters, balanceAccountFilterChanged, setInsightsCurrency]);\n\n    useEffect(() => {\n        if (cachedCurrentFilters.current !== currentFilters) {\n            cachedCurrentFilters.current = currentFilters;\n            onChange?.(currentFilters);\n        }\n    }, [onChange, currentFilters]);\n\n    useEffect(() => {\n        if (!initialFilters.current.balanceAccount && balanceAccount) {\n            // Update initial balance account selection (first selection only)\n            initialFilters.current.balanceAccount = balanceAccount;\n        }\n    }, [balanceAccount]);\n\n    return (\n        <FilterBar\n            {...filterBarProps}\n            ariaLabelKey=\"transactions.overview.filters.label\"\n            canResetFilters={canResetFilters && false} // Prevents resetting all filters at once using `&& false`\n            resetFilters={resetFilters}\n        >\n            <BalanceAccountSelector {...balanceAccountFilterProps} />\n            <TransactionDateFilter\n                createdDate={createdDate}\n                eventCategory={eventCategory}\n                eventSubCategory={eventSubCategory}\n                setCreatedDate={setCreatedDate}\n                timezone={balanceAccountFilterProps.activeBalanceAccount?.timeZone}\n            />\n            {isTransactionsView ? (\n                <>\n                    {/*<TransactionMultiSelectionFilter*/}\n                    {/*    eventLabel=\"Status filter\"*/}\n                    {/*    eventCategory={eventCategory}*/}\n                    {/*    eventSubCategory={eventSubCategory}*/}\n                    {/*    placeholder={statusesFilterPlaceholder}*/}\n                    {/*    selectionOptions={statusesFilterOptions}*/}\n                    {/*    selection={statuses}*/}\n                    {/*    onUpdateFilter={setStatuses}*/}\n                    {/*/>*/}\n                    <TransactionMultiSelectionFilter\n                        eventLabel=\"Category filter\"\n                        eventCategory={eventCategory}\n                        eventSubCategory={eventSubCategory}\n                        placeholder={categoriesFilterPlaceholder}\n                        selectionOptions={categoriesFilterOptions}\n                        selection={categories}\n                        onUpdateFilter={setCategories}\n                    />\n                    <TransactionMultiSelectionFilter\n                        eventCategory={eventCategory}\n                        eventSubCategory={eventSubCategory}\n                        eventLabel={currencyFilterEventLabel}\n                        placeholder={currenciesFilterPlaceholder}\n                        selectionOptions={currenciesFilterOptions}\n                        selection={currencies}\n                        onUpdateFilter={setCurrencies}\n                    />\n                    <TransactionPspReferenceFilter\n                        eventCategory={eventCategory}\n                        eventSubCategory={eventSubCategory}\n                        onChange={setPaymentPspReference}\n                        value={paymentPspReference}\n                    />\n                </>\n            ) : (\n                <>\n                    {currencySelectionOptions.length > 1 ? (\n                        <Select\n                            filterable={false}\n                            multiSelect={false}\n                            items={currencySelectionOptions}\n                            onChange={onCurrencySelection}\n                            selected={activeCurrency}\n                            aria-label={currenciesFilterPlaceholder}\n                            placeholder={activeCurrency || currenciesFilterPlaceholder}\n                            showOverlay={isSmContainer}\n                            withoutCollapseIndicator\n                        />\n                    ) : null}\n                </>\n            )}\n        </FilterBar>\n    );\n};\n\nexport default TransactionsFilters;\n","import { useConfigContext } from '../../../../core/ConfigContext';\nimport { useFetch } from '../../../../hooks/useFetch';\nimport { DownloadStreamEndpoint, EndpointDownloadStreamData } from '../../../../types/api/endpoints';\nimport { EMPTY_OBJECT } from '../../../../utils';\n\nconst useDownload = (\n    endpointName: DownloadStreamEndpoint,\n    queryParam?: any,\n    enabled?: boolean,\n    onSuccess?: (data: EndpointDownloadStreamData) => void\n) => {\n    const downloadEndpoint = useConfigContext().endpoints[endpointName];\n\n    return useFetch({\n        fetchOptions: { enabled: !!downloadEndpoint && enabled, keepPrevData: true, onSuccess },\n        queryFn: async () => {\n            return downloadEndpoint!(EMPTY_OBJECT as any, { ...queryParam });\n        },\n    });\n};\n\nexport default useDownload;\n","const BASE_CLASS = 'adyen-pe-toggle-switch';\n\nexport const classes = {\n    root: BASE_CLASS,\n    disabled: BASE_CLASS + '--disabled',\n    readonly: BASE_CLASS + '--readonly',\n    label: BASE_CLASS + '__label',\n    labelBefore: BASE_CLASS + '__label--before',\n    mark: BASE_CLASS + '__mark',\n    slider: BASE_CLASS + '__slider',\n    switch: BASE_CLASS + '__switch',\n};\n","import { InputHTMLAttributes, TargetedMouseEvent } from 'preact';\nimport { PropsWithChildren } from 'preact/compat';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { fixedForwardRef } from '../../../utils/preact';\nimport { classes } from './constants';\nimport cx from 'classnames';\nimport Icon from '../Icon';\nimport './ToggleSwitch.scss';\n\nexport interface ToggleSwitchProps extends PropsWithChildren<Omit<InputHTMLAttributes, 'readonly'>> {\n    labelBeforeSwitch?: boolean;\n}\n\nconst ToggleSwitch = fixedForwardRef<ToggleSwitchProps, HTMLInputElement>(\n    ({ className, children, labelBeforeSwitch, onClick, readOnly, ...props }, ref) => {\n        const handleClick = useCallback(\n            (evt: TargetedMouseEvent<HTMLInputElement>) => {\n                readOnly ? evt.preventDefault() : onClick?.(evt);\n            },\n            [readOnly, onClick]\n        );\n\n        const renderLabel = useMemo(\n            () => <div className={cx(classes.label, { [classes.labelBefore]: labelBeforeSwitch })}>{children}</div>,\n            [children, labelBeforeSwitch]\n        );\n\n        return (\n            <label\n                data-testid=\"toggle-switch\"\n                className={cx(className, classes.root, { [classes.disabled]: props.disabled, [classes.readonly]: readOnly })}\n            >\n                {labelBeforeSwitch && <>{renderLabel}</>}\n                <div data-testid=\"toggle-switch-control\" className={classes.switch}>\n                    <input {...props} ref={ref} type=\"checkbox\" className=\"adyen-pe-visually-hidden\" aria-readonly={readOnly} onClick={handleClick} />\n                    <span className={classes.slider}>\n                        <Icon className={classes.mark} name=\"checkmark\" />\n                    </span>\n                </div>\n                {!labelBeforeSwitch && <>{renderLabel}</>}\n            </label>\n        );\n    }\n);\n\nexport default ToggleSwitch;\n","const BASE_CLASS = 'adyen-pe-transactions-export';\nconst POPOVER_CLASS = BASE_CLASS + '__popover';\n\nexport const classes = {\n    root: BASE_CLASS,\n    popover: POPOVER_CLASS,\n    button: BASE_CLASS + '__button',\n    errorAlert: BASE_CLASS + '__error-alert',\n    popoverActions: POPOVER_CLASS + '-actions',\n    popoverActionsAlert: POPOVER_CLASS + '-actions-alert',\n    popoverSections: POPOVER_CLASS + '-sections',\n    popoverSection: POPOVER_CLASS + '-section',\n    columnsSection: POPOVER_CLASS + '-section--columns',\n    filtersSection: POPOVER_CLASS + '-section--filters',\n    popoverSectionTitle: POPOVER_CLASS + '-section-title',\n    popoverSectionContent: POPOVER_CLASS + '-section-content',\n    popoverColumnAll: POPOVER_CLASS + '-column--all',\n    popoverColumn: POPOVER_CLASS + '-column',\n} as const;\n","import { h } from 'preact';\nimport cx from 'classnames';\nimport Icon from '../../../../internal/Icon';\nimport Spinner from '../../../../internal/Spinner';\nimport Alert from '../../../../internal/Alert/Alert';\nimport Popover from '../../../../internal/Popover/Popover';\nimport Typography from '../../../../internal/Typography/Typography';\nimport useUniqueId from '../../../../../hooks/useUniqueId';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport useDownload from '../../../../internal/Button/DownloadButton/useDownload';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport ToggleSwitch, { ToggleSwitchProps } from '../../../../internal/ToggleSwitch/ToggleSwitch';\nimport ButtonActions from '../../../../internal/Button/ButtonActions/ButtonActions';\nimport FilterButton from '../../../../internal/FilterBar/components/FilterButton/FilterButton';\nimport { DEFAULT_EXPORT_COLUMNS, EXPORT_COLUMNS, TRANSACTION_ANALYTICS_CATEGORY, TRANSACTION_ANALYTICS_SUBCATEGORY_LIST } from '../../constants';\nimport { ButtonActionObject, ButtonActionsLayoutBasic } from '../../../../internal/Button/ButtonActions/types';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { PopoverContainerPosition, PopoverContainerVariant } from '../../../../internal/Popover/types';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { downloadBlob, EMPTY_ARRAY, isFunction, uniqueId } from '../../../../../utils';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { AlertTypeOption } from '../../../../internal/Alert/types';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { fixedForwardRef } from '../../../../../utils/preact';\nimport { getTransactionsFilterQueryParams } from '../utils';\nimport { TranslationKey } from '../../../../../translations';\nimport { Tag } from '../../../../internal/Tag/Tag';\nimport { TransactionsFilters } from '../../types';\nimport { PropsWithChildren } from 'preact/compat';\nimport { classes } from './constants';\nimport './TransactionsExport.scss';\n\nconst sharedAnalyticsEventProperties = {\n    category: TRANSACTION_ANALYTICS_CATEGORY,\n    subCategory: TRANSACTION_ANALYTICS_SUBCATEGORY_LIST,\n} as const;\n\n/* HELPER COMPONENTS */\nconst Text = ({\n    children,\n    el = TypographyElement.DIV,\n    variant = TypographyVariant.BODY,\n    ...typographyProps\n}: PropsWithChildren<{\n    el?: TypographyElement;\n    variant?: TypographyVariant;\n    stronger?: boolean;\n    className?: string;\n    id?: string;\n}>) => (\n    <Typography {...typographyProps} el={el} variant={variant}>\n        {children}\n    </Typography>\n);\n\nconst ExportColumn = fixedForwardRef<PropsWithChildren<{ className?: string } & ToggleSwitchProps>, HTMLInputElement>(\n    ({ children, className, ...toggleSwitchProps }, ref) => (\n        <ToggleSwitch ref={ref} className={cx([classes.popoverColumn, className])} {...toggleSwitchProps} name=\"columns\">\n            <Text el={TypographyElement.SPAN}>{children}</Text>\n        </ToggleSwitch>\n    )\n);\n\nconst SectionTitle = ({ children, ...textProps }: PropsWithChildren<{ id?: string }>) => (\n    <Text {...textProps} className={classes.popoverSectionTitle} stronger>\n        {children}\n    </Text>\n);\n\nconst TransactionsExport = ({ disabled, filters, now }: { disabled?: boolean; filters: Readonly<TransactionsFilters>; now: number }) => {\n    const { i18n } = useCoreContext();\n    const userEvents = useAnalyticsContext();\n    const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    const [popoverOpen, setPopoverOpen] = useState(false);\n    const [exportError, setExportError] = useState<Error>();\n    const [exportStarted, setExportStarted] = useState(false);\n    const [exportColumns, setExportColumns] = useState([] as readonly (typeof EXPORT_COLUMNS)[number][]);\n\n    const [activeFilters, exportParams] = useMemo(() => {\n        const { balanceAccount, paymentPspReference, createdDate, categories, currencies /*, statuses*/ } = filters;\n\n        const activeFilters: readonly TranslationKey[] = [\n            ...(balanceAccount?.id ? (['transactions.overview.export.filters.types.account'] as const) : EMPTY_ARRAY),\n            ...(createdDate ? (['transactions.overview.export.filters.types.date'] as const) : EMPTY_ARRAY),\n            // ...(statuses.length ? (['transactions.overview.export.filters.types.status'] as const) : EMPTY_ARRAY),\n            ...(categories.length ? (['transactions.overview.export.filters.types.category'] as const) : EMPTY_ARRAY),\n            ...(currencies.length ? (['transactions.overview.export.filters.types.currency'] as const) : EMPTY_ARRAY),\n            ...(paymentPspReference ? (['transactions.overview.export.filters.types.paymentPspReference'] as const) : EMPTY_ARRAY),\n        ] as const;\n\n        const exportParams = {\n            ...getTransactionsFilterQueryParams(filters, now),\n            sortDirection: 'desc' as const,\n        };\n\n        return [activeFilters, exportParams];\n    }, [filters, now]);\n\n    const { downloadTransactions } = useConfigContext().endpoints;\n    const canDownloadTransactions = isFunction(downloadTransactions);\n    const canExportTransactions = canDownloadTransactions && popoverOpen && exportStarted && !!exportColumns.length;\n\n    const { error, isFetching } = useDownload(\n        'downloadTransactions',\n        { query: { ...exportParams, columns: exportColumns } },\n        canExportTransactions,\n        downloadBlob\n    );\n\n    const exportButtonId = `elem-${useUniqueId()}`;\n    const exportButtonRef = useRef<HTMLButtonElement | null>(null);\n    const exportButtonLabel = useMemo(() => i18n.get('transactions.overview.export.button.label'), [i18n]);\n    const exportingButtonLabel = useMemo(() => i18n.get('transactions.overview.export.button.inProgress'), [i18n]);\n    const cancelButtonLabel = useMemo(() => i18n.get('transactions.overview.export.actions.cancel'), [i18n]);\n    const downloadButtonLabel = useMemo(() => i18n.get('transactions.overview.export.actions.download'), [i18n]);\n    const activeFiltersTitle = useMemo(() => i18n.get('transactions.overview.export.filters.title'), [i18n]);\n    const exportColumnsTitle = useMemo(() => i18n.get('transactions.overview.export.columns.title'), [i18n]);\n    const exportColumnsTitleId = useMemo(uniqueId, []);\n\n    const columnSwitches = useMemo(\n        () =>\n            EXPORT_COLUMNS.map(column => ({\n                label: i18n.get(`transactions.overview.export.columns.types.${column}`),\n                id: uniqueId(),\n                value: column,\n            })),\n        [i18n]\n    );\n\n    const masterSwitchLabel = useMemo(() => {\n        return i18n.get('transactions.overview.export.columns.types.all', {\n            values: { count: EXPORT_COLUMNS.length },\n        });\n    }, [i18n]);\n\n    const masterSwitchId = useMemo(uniqueId, []);\n    const masterSwitchRef = useRef<HTMLInputElement | null>(null);\n    const masterSwitchAriaControls = useMemo(() => columnSwitches.map(({ id }) => id).join(' '), [columnSwitches]);\n    const masterSwitchChecked = exportColumns.length === EXPORT_COLUMNS.length;\n\n    const onExportColumnChange = useCallback(\n        (evt: h.JSX.TargetedEvent<HTMLInputElement>) => {\n            const checkbox = evt.currentTarget;\n            const checkedColumn = checkbox.value as (typeof EXPORT_COLUMNS)[number];\n            const checked = checkbox.checked;\n\n            const isMasterSwitch = checkbox.id === masterSwitchId;\n\n            setExportColumns(exportColumns => {\n                if (isMasterSwitch) return checked ? EXPORT_COLUMNS : EMPTY_ARRAY;\n                if (EXPORT_COLUMNS.includes(checkedColumn)) {\n                    const columnIndex = exportColumns.indexOf(checkedColumn);\n                    if (checked) {\n                        // Include checked column\n                        if (columnIndex < 0) return [...exportColumns, checkedColumn];\n                    } else if (columnIndex >= 0) {\n                        // Exclude unchecked column\n                        return [...exportColumns.slice(0, columnIndex), ...exportColumns.slice(columnIndex + 1)];\n                    }\n                }\n                return exportColumns;\n            });\n        },\n        [masterSwitchId]\n    );\n\n    const sendPopoverToggleEvent = useCallback(\n        (popoverOpen: boolean) => {\n            popoverOpen\n                ? userEvents.addEvent?.('Cancelled export', sharedAnalyticsEventProperties)\n                : userEvents.addEvent?.('Clicked button', { ...sharedAnalyticsEventProperties, label: 'Export' });\n        },\n        [userEvents]\n    );\n\n    const dismissPopover = useCallback(\n        (exportCancelled = true) => {\n            setPopoverOpen(false);\n            if (!exportCancelled) return;\n            sendPopoverToggleEvent(true);\n        },\n        [sendPopoverToggleEvent]\n    );\n\n    const togglePopover = useCallback(() => {\n        setPopoverOpen(prev => !prev);\n        sendPopoverToggleEvent(popoverOpen);\n    }, [popoverOpen, sendPopoverToggleEvent]);\n\n    const dismissExportError = useCallback(() => setExportError(undefined), []);\n\n    const cancelAction = useMemo<ButtonActionObject>(\n        () => ({\n            event: () => dismissPopover(),\n            variant: ButtonVariant.SECONDARY,\n            title: cancelButtonLabel,\n        }),\n        [cancelButtonLabel, dismissPopover]\n    );\n\n    const downloadAction = useMemo<ButtonActionObject>(\n        () => ({\n            disabled: !exportColumns.length,\n            event: () => setExportStarted(true),\n            variant: ButtonVariant.PRIMARY,\n            title: downloadButtonLabel,\n        }),\n        [downloadButtonLabel, exportColumns.length]\n    );\n\n    useEffect(() => {\n        setExportError(error);\n    }, [error]);\n\n    useEffect(() => {\n        if (popoverOpen) {\n            dismissExportError();\n        } else {\n            setExportColumns(DEFAULT_EXPORT_COLUMNS);\n        }\n    }, [popoverOpen, dismissExportError]);\n\n    useEffect(() => {\n        if (exportStarted) {\n            setExportStarted(false);\n            dismissPopover(false);\n\n            let exportedFields: 'All' | 'Custom' | 'Default' = 'Custom';\n            let exportingOnlyDefaultFields = true;\n            let exportingAllFields = true;\n\n            EXPORT_COLUMNS.forEach(column => {\n                const isExportedField = exportColumns.includes(column);\n                const isDefaultField = DEFAULT_EXPORT_COLUMNS.includes(column);\n                exportingOnlyDefaultFields &&= isExportedField ? isDefaultField : !isDefaultField;\n                exportingAllFields &&= isExportedField;\n            });\n\n            if (exportingAllFields) {\n                exportedFields = 'All';\n            } else if (exportingOnlyDefaultFields) {\n                exportedFields = 'Default';\n            }\n\n            userEvents.addEvent?.('Completed export', {\n                ...sharedAnalyticsEventProperties,\n                exportedFields,\n            });\n        }\n    }, [exportColumns, exportStarted, dismissPopover, userEvents]);\n\n    useEffect(() => {\n        (function attemptFocusCapture() {\n            if (masterSwitchRef.current) {\n                masterSwitchRef.current.focus();\n            } else requestAnimationFrame(attemptFocusCapture);\n        })();\n    }, []);\n\n    const renderAlertError = useCallback(\n        () => (\n            <Alert onClose={dismissExportError} className={classes.errorAlert} type={AlertTypeOption.CRITICAL}>\n                <Typography variant={TypographyVariant.BODY}>{i18n.get('transactions.overview.export.actions.error')}</Typography>\n            </Alert>\n        ),\n        [i18n, dismissExportError]\n    );\n\n    return canDownloadTransactions ? (\n        <div className={classes.root}>\n            <>\n                <FilterButton\n                    aria-haspopup=\"dialog\"\n                    aria-expanded={popoverOpen}\n                    aria-label={exportButtonLabel}\n                    ref={exportButtonRef}\n                    id={exportButtonId}\n                    className={classes.button}\n                    classNameModifiers={popoverOpen ? ['active'] : undefined}\n                    disabled={disabled || isFetching}\n                    onClick={togglePopover}\n                    tabIndex={0}\n                >\n                    <div className=\"adyen-pe-filter-button__default-container\">\n                        <Text className=\"adyen-pe-filter-button__label\">\n                            {isFetching ? <Spinner size=\"x-small\" /> : <Icon name=\"download\" />}\n                            {!isSmContainer && <span>{isFetching ? exportingButtonLabel : exportButtonLabel}</span>}\n                        </Text>\n                    </div>\n                </FilterButton>\n                {exportError && renderAlertError()}\n            </>\n\n            {popoverOpen && (\n                <Popover\n                    disableFocusTrap={false}\n                    dismissible={false}\n                    dismiss={dismissPopover}\n                    open={popoverOpen}\n                    position={isSmContainer ? PopoverContainerPosition.BOTTOM : PopoverContainerPosition.BOTTOM_RIGHT}\n                    variant={PopoverContainerVariant.POPOVER}\n                    showOverlay={isSmContainer}\n                    targetElement={exportButtonRef}\n                    title={exportButtonLabel}\n                >\n                    <div className={classes.popover}>\n                        <div className={classes.popoverSections}>\n                            <div className={cx(classes.popoverSection, classes.filtersSection)}>\n                                <SectionTitle>{`${activeFiltersTitle}:`}</SectionTitle>\n                                {activeFilters.map(filter => (\n                                    <Tag label={i18n.get(filter)} key={filter} />\n                                ))}\n                            </div>\n\n                            <div className={cx(classes.popoverSection, classes.columnsSection)}>\n                                <div role=\"group\" aria-labelledby={exportColumnsTitleId}>\n                                    <SectionTitle id={exportColumnsTitleId}>{exportColumnsTitle}</SectionTitle>\n                                    <div className={classes.popoverSectionContent}>\n                                        <ExportColumn\n                                            ref={masterSwitchRef}\n                                            className={classes.popoverColumnAll}\n                                            aria-controls={masterSwitchAriaControls}\n                                            checked={masterSwitchChecked}\n                                            onChange={onExportColumnChange}\n                                            id={masterSwitchId}\n                                        >\n                                            {masterSwitchLabel}\n                                        </ExportColumn>\n\n                                        {columnSwitches.map(({ id, label, value }) => (\n                                            <ExportColumn\n                                                checked={exportColumns.includes(value)}\n                                                onChange={onExportColumnChange}\n                                                value={value}\n                                                key={value}\n                                                id={id}\n                                            >\n                                                {label}\n                                            </ExportColumn>\n                                        ))}\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                        <div className={classes.popoverActions}>\n                            <Alert\n                                type={AlertTypeOption.HIGHLIGHT}\n                                className={classes.popoverActionsAlert}\n                                title={i18n.get('transactions.overview.export.actions.download.info')}\n                            />\n                            <ButtonActions actions={[downloadAction, cancelAction]} layout={ButtonActionsLayoutBasic.BUTTONS_END} />\n                        </div>\n                    </div>\n                </Popover>\n            )}\n        </div>\n    ) : null;\n};\n\nexport default TransactionsExport;\n","import { SegmentedControlProps } from './types';\nimport { AriaAttributes } from 'preact/compat';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport useTabbedControl from '../../../hooks/useTabbedControl';\nimport Typography from '../Typography/Typography';\nimport './SegmentedControl.scss';\n\nfunction SegmentedControl<ItemId extends string>({\n    ['aria-label']: ariaLabel,\n    activeItem,\n    items,\n    onChange,\n}: SegmentedControlProps<ItemId> & Pick<AriaAttributes, 'aria-label'>) {\n    const { activeIndex, onClick, onKeyDown, refs, uniqueId } = useTabbedControl({ onChange, options: items, activeOption: activeItem });\n    const { i18n } = useCoreContext();\n    return (\n        <div>\n            <div role=\"radiogroup\" className=\"adyen-pe-segmented-control\" aria-label={ariaLabel}>\n                {items.map((item, index) => {\n                    const isActive = activeIndex === index;\n                    return (\n                        <button\n                            role=\"radio\"\n                            name={item.id}\n                            ref={refs[index]}\n                            key={`item:${uniqueId}-${item.id}`}\n                            id={`item:${uniqueId}-${item.id}`}\n                            className=\"adyen-pe-segmented-control__item\"\n                            aria-checked={isActive}\n                            aria-controls={`segment:${uniqueId}-${item.id}`}\n                            onClick={isActive ? undefined : onClick}\n                            onKeyDown={onKeyDown}\n                            disabled={item.disabled}\n                            tabIndex={isActive ? 0 : -1}\n                        >\n                            <Typography\n                                el={TypographyElement.SPAN}\n                                variant={TypographyVariant.BODY}\n                                className=\"adyen-pe-segmented-control__item-label\"\n                                stronger\n                            >\n                                {i18n.get(item.label)}\n                            </Typography>\n                        </button>\n                    );\n                })}\n            </div>\n            <div className=\"adyen-pe-segmented-content-container\">\n                {items.map((item, index) => (\n                    <div\n                        key={`segment:${uniqueId}-${item.id}`}\n                        id={`segment:${uniqueId}-${item.id}`}\n                        className=\"adyen-pe-segmented-content\"\n                        aria-labelledby={`item:${uniqueId}-${item.id}`}\n                        hidden={activeIndex !== index}\n                    >\n                        {item.content}\n                    </div>\n                ))}\n            </div>\n        </div>\n    );\n}\n\nexport default SegmentedControl;\n","import cx from 'classnames';\nimport useTransactionsList from '../../hooks/useTransactionsList';\nimport useTransactionsViewSwitcher from '../../hooks/useTransactionsViewSwitcher';\nimport useTransactionsTotals, { GetQueryParams } from '../../hooks/useTransactionsTotals';\nimport useAccountBalances from '../../../../../hooks/useAccountBalances';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport useCurrenciesLookup from '../../hooks/useCurrenciesLookup';\nimport TransactionsOverviewList from './TransactionsOverviewList';\nimport TransactionsOverviewInsights from './TransactionsOverviewInsights';\nimport TransactionsFilters from '../TransactionFilters/TransactionFilters';\nimport TransactionsExport from '../TransactionsExport/TransactionsExport';\nimport SegmentedControl from '../../../../internal/SegmentedControl/SegmentedControl';\nimport { FilterBarMobileSwitch, useFilterBarState } from '../../../../internal/FilterBar';\nimport { TransactionOverviewProps, TransactionsFilters as Filters, TransactionsView } from '../../types';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport { classes, INITIAL_FILTERS } from '../../constants';\nimport { Header } from '../../../../internal/Header';\nimport './TransactionsOverview.scss';\n\nconst INSIGHTS_FILTERS_SET = new Set<keyof Filters>(['balanceAccount', 'createdDate']);\nconst getInsightsTotalsQueryParams: GetQueryParams = ({ balanceAccountId, createdSince, createdUntil }) => ({\n    balanceAccountId,\n    createdSince,\n    createdUntil,\n});\nconst getTransactionsTotalsQueryParams: GetQueryParams = allQueryParams => allQueryParams;\n\nexport const TransactionsOverview = ({\n    onFiltersChanged,\n    balanceAccounts,\n    allowLimitSelection,\n    preferredLimit,\n    onRecordSelection,\n    showDetails,\n    isLoadingBalanceAccount,\n    onContactSupport,\n    hideTitle,\n    dataCustomization,\n}: TransactionOverviewProps) => {\n    const [filters, setFilters] = useState(INITIAL_FILTERS);\n    const [lastFiltersChangeTimestamp, setLastFiltersChangeTimestamp] = useState(Date.now());\n    const [insightsCurrency, setInsightsCurrency] = useState<string>();\n\n    const filterBarState = useFilterBarState();\n\n    const { balanceAccount } = filters;\n    const { isMobileContainer } = filterBarState;\n    const { i18n } = useCoreContext();\n\n    const { activeView, onViewChange, viewTabs } = useTransactionsViewSwitcher();\n    const isTransactionsView = activeView !== TransactionsView.INSIGHTS;\n    const hasActiveBalanceAccount = !!balanceAccount?.id;\n\n    const onFiltersChange = useCallback((filters: Readonly<Filters>) => {\n        setLastFiltersChangeTimestamp(Date.now());\n        setFilters(filters);\n    }, []);\n\n    const accountBalancesResult = useAccountBalances({ balanceAccount });\n\n    const insightsTotalsResult = useTransactionsTotals({\n        fetchEnabled: !isTransactionsView && hasActiveBalanceAccount,\n        getQueryParams: getInsightsTotalsQueryParams,\n        applicableFilters: INSIGHTS_FILTERS_SET,\n        now: lastFiltersChangeTimestamp,\n        filters,\n    });\n\n    const transactionsTotalsResult = useTransactionsTotals({\n        fetchEnabled: isTransactionsView && hasActiveBalanceAccount,\n        getQueryParams: getTransactionsTotalsQueryParams,\n        now: lastFiltersChangeTimestamp,\n        filters,\n    });\n\n    const transactionsListResult = useTransactionsList({\n        fetchEnabled: hasActiveBalanceAccount,\n        now: lastFiltersChangeTimestamp,\n        allowLimitSelection,\n        dataCustomization,\n        onFiltersChanged,\n        preferredLimit,\n        filters,\n    });\n\n    const currenciesLookupResult = useCurrenciesLookup({\n        defaultCurrency: balanceAccount?.defaultCurrencyCode,\n        balances: accountBalancesResult.balances,\n        totals: (isTransactionsView ? transactionsTotalsResult : insightsTotalsResult).totals,\n    });\n\n    const exportButton = useMemo(\n        () =>\n            isTransactionsView ? (\n                <TransactionsExport disabled={!transactionsListResult.page} filters={filters} now={lastFiltersChangeTimestamp} />\n            ) : null,\n        [filters, isTransactionsView, lastFiltersChangeTimestamp, transactionsListResult.page]\n    );\n\n    const viewSwitcher = useMemo(\n        () =>\n            viewTabs.length > 1 ? (\n                <SegmentedControl\n                    aria-label={i18n.get('transactions.overview.viewSelect.a11y.label')}\n                    activeItem={activeView}\n                    items={viewTabs}\n                    onChange={onViewChange}\n                />\n            ) : null,\n        [activeView, onViewChange, viewTabs, i18n]\n    );\n\n    return (\n        <div className={cx(classes.root, { [classes.rootSmall]: isMobileContainer })}>\n            <Header hideTitle={hideTitle} titleKey=\"transactions.overview.title\">\n                <div className={cx({ [classes.filterBarSmall]: isMobileContainer })}>\n                    {isMobileContainer && exportButton}\n                    <FilterBarMobileSwitch {...filterBarState} />\n                    {!isMobileContainer && <>{viewSwitcher}</>}\n                </div>\n            </Header>\n\n            {isMobileContainer && <>{viewSwitcher}</>}\n\n            <div role=\"toolbar\" className={classes.toolbar}>\n                <TransactionsFilters\n                    {...filterBarState}\n                    availableCurrencies={currenciesLookupResult.sortedCurrencies}\n                    balanceAccounts={balanceAccounts}\n                    isTransactionsView={isTransactionsView}\n                    insightsCurrency={insightsCurrency}\n                    setInsightsCurrency={setInsightsCurrency}\n                    onChange={onFiltersChange}\n                />\n                {!isMobileContainer && <>{exportButton}</>}\n            </div>\n\n            {isTransactionsView ? (\n                <TransactionsOverviewList\n                    accountBalancesResult={accountBalancesResult}\n                    balanceAccount={balanceAccount}\n                    balanceAccounts={balanceAccounts}\n                    currenciesLookupResult={currenciesLookupResult}\n                    dataCustomization={dataCustomization}\n                    isLoadingBalanceAccount={isLoadingBalanceAccount}\n                    onContactSupport={onContactSupport}\n                    onRecordSelection={onRecordSelection}\n                    showDetails={showDetails}\n                    transactionsListResult={transactionsListResult}\n                    transactionsTotalsResult={transactionsTotalsResult}\n                />\n            ) : (\n                <TransactionsOverviewInsights\n                    currency={insightsCurrency}\n                    currenciesLookupResult={currenciesLookupResult}\n                    transactionsTotalsResult={insightsTotalsResult}\n                />\n            )}\n        </div>\n    );\n};\n","export const BASE_CLASS = 'adyen-pe-transactions-overview-container';\n","import useBalanceAccounts from '../../../../../hooks/useBalanceAccounts';\nimport DataOverviewContainer from '../../../../internal/DataOverviewContainer/DataOverviewContainer';\nimport type { TransactionOverviewComponentProps, ExternalUIComponentProps } from '../../../../types';\nimport { TransactionsOverview } from '../TransactionsOverview/TransactionsOverview';\nimport { BASE_CLASS } from './constants';\n\nfunction TransactionsOverviewContainer({ ...props }: ExternalUIComponentProps<TransactionOverviewComponentProps>) {\n    const { balanceAccounts, isBalanceAccountIdWrong, isFetching, error } = useBalanceAccounts(props.balanceAccountId);\n\n    return (\n        <DataOverviewContainer\n            balanceAccountsError={error}\n            className={BASE_CLASS}\n            errorMessage={'transactions.overview.errors.unavailable'}\n            isBalanceAccountIdWrong={isBalanceAccountIdWrong}\n            onContactSupport={props.onContactSupport}\n        >\n            <TransactionsOverview {...props} balanceAccounts={balanceAccounts} isLoadingBalanceAccount={isFetching} />\n        </DataOverviewContainer>\n    );\n}\n\nexport default TransactionsOverviewContainer;\n","import { _UIComponentProps, ExternalComponentType, TransactionOverviewComponentProps } from '../../types';\nimport Transactions from './components/TransactionsOverviewContainer/TransactionsOverviewContainer';\nimport UIElement from '../UIElement/UIElement';\n\nexport class TransactionsElement extends UIElement<TransactionOverviewComponentProps> {\n    public static type: ExternalComponentType = 'transactions';\n\n    constructor(props: _UIComponentProps<TransactionOverviewComponentProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n    }\n\n    public componentToRender = () => {\n        return <Transactions {...this.props} />;\n    };\n}\n\nexport default TransactionsElement;\n","export const enum SupportedLocation {\n    'AU' = 'AU',\n    'EU' = 'EU',\n    'GB' = 'GB',\n    'US' = 'US',\n    'CA' = 'CA',\n}\n\nexport const supportedCountries: string[] = ['AU', 'GB', 'US', 'CA'];\n\nexport const supportedRegions: string[] = ['EU'];\n","import { TranslationKey } from '../../../translations';\nimport { ILegalEntity } from '../../../types';\nimport { supportedCountries, SupportedLocation, supportedRegions } from './constants';\n\nconst getCapitalRegion = (legalEntity?: ILegalEntity) => {\n    const capitalRegion = legalEntity?.regions?.find(region => region.type === 'capital');\n    return capitalRegion?.value ?? '';\n};\n\nconst getSubtitleByRegion = (region?: string) => {\n    switch (region) {\n        case SupportedLocation.EU:\n            return 'capital.common.loanProviderInfo.EU' satisfies TranslationKey;\n        default:\n            return null;\n    }\n};\n\nconst getSubtitleByCountry = (countryCode?: string) => {\n    switch (countryCode) {\n        case SupportedLocation.AU:\n            return 'capital.common.loanProviderInfo.AU' satisfies TranslationKey;\n        case SupportedLocation.GB:\n            return 'capital.common.loanProviderInfo.GB' satisfies TranslationKey;\n        case SupportedLocation.US:\n            return 'capital.common.loanProviderInfo.US' satisfies TranslationKey;\n        case SupportedLocation.CA:\n            return 'capital.common.loanProviderInfo.CA' satisfies TranslationKey;\n        default:\n            return null;\n    }\n};\n\nexport const getCapitalHeaderSubtitleByLegalEntity = (legalEntity?: ILegalEntity): TranslationKey | null => {\n    const region = getCapitalRegion(legalEntity);\n    const countryCode = legalEntity?.countryCode;\n\n    // Check the country first because it is more specific and first handle the one with a narrow scope\n    return getSubtitleByCountry(countryCode) ?? getSubtitleByRegion(region);\n};\n\nexport const isCapitalRegionSupported = (legalEntity?: ILegalEntity) => {\n    const region = getCapitalRegion(legalEntity);\n    const countryCode = legalEntity?.countryCode ?? '';\n\n    return supportedCountries.includes(countryCode) || supportedRegions.includes(region);\n};\n","import AdyenPlatformExperienceError from '../../../core/Errors/AdyenPlatformExperienceError';\nimport { ErrorMessage, getCommonErrorMessage } from '../getCommonErrorCode';\nimport CopyText from '../../internal/CopyText/CopyText';\n\nexport const COMMON_CAPITAL_ERROR_MESSAGE = {\n    contactSupportForHelp: 'common.errors.contactSupport',\n    couldNotLoadOffers: 'capital.offer.common.errors.unavailable',\n    tryRefreshingThePage: 'common.errors.retry',\n    somethingWentWrong: 'common.errors.somethingWentWrong',\n} as const;\n\nconst UNKNOWN_ERROR = {\n    title: COMMON_CAPITAL_ERROR_MESSAGE.somethingWentWrong,\n    message: [COMMON_CAPITAL_ERROR_MESSAGE.couldNotLoadOffers, COMMON_CAPITAL_ERROR_MESSAGE.tryRefreshingThePage],\n    refreshComponent: true,\n};\n\nexport const getCapitalErrorMessage = (error: AdyenPlatformExperienceError | undefined, onContactSupport?: () => void): ErrorMessage => {\n    if (!error) return UNKNOWN_ERROR;\n\n    const commonError = getCommonErrorMessage(error, onContactSupport);\n    if (commonError) return commonError;\n\n    const errorCodeMessage = onContactSupport ? 'common.errors.errorCode' : 'common.errors.errorCodeSupport';\n\n    switch (error.errorCode) {\n        case undefined:\n            return { ...UNKNOWN_ERROR, ...(onContactSupport ? { onContactSupport } : {}) };\n        case '30_016': {\n            return {\n                title: COMMON_CAPITAL_ERROR_MESSAGE.somethingWentWrong,\n                message: [COMMON_CAPITAL_ERROR_MESSAGE.couldNotLoadOffers, errorCodeMessage],\n                translationValues: {\n                    [errorCodeMessage]: error.requestId ? (\n                        <CopyText isUnderlineVisible copyButtonAriaLabelKey=\"common.actions.copy.labels.errorCode\" textToCopy={error.requestId} />\n                    ) : null,\n                },\n                onContactSupport,\n            };\n        }\n        case '30_011': {\n            return {\n                title: 'capital.offer.common.errors.accountInactive',\n                message: [COMMON_CAPITAL_ERROR_MESSAGE.couldNotLoadOffers, errorCodeMessage],\n                translationValues: {\n                    [errorCodeMessage]: error.requestId ? (\n                        <CopyText isUnderlineVisible copyButtonAriaLabelKey=\"common.actions.copy.labels.errorCode\" textToCopy={error.requestId} />\n                    ) : null,\n                },\n                onContactSupport,\n            };\n        }\n        case '30_600': {\n            return {\n                title: COMMON_CAPITAL_ERROR_MESSAGE.somethingWentWrong,\n                message: ['capital.offer.common.errors.cannotContinue', errorCodeMessage],\n                translationValues: {\n                    [errorCodeMessage]: error.requestId ? (\n                        <CopyText isUnderlineVisible copyButtonAriaLabelKey=\"common.actions.copy.labels.errorCode\" textToCopy={error.requestId} />\n                    ) : null,\n                },\n                onContactSupport,\n            };\n        }\n        case 'EMPTY_CONFIG': {\n            return {\n                title: COMMON_CAPITAL_ERROR_MESSAGE.somethingWentWrong,\n                message: ['capital.offer.common.errors.cannotContinue', COMMON_CAPITAL_ERROR_MESSAGE.contactSupportForHelp],\n            };\n        }\n        case 'UNSUPPORTED_REGION': {\n            return {\n                title: 'capital.common.errors.unsupportedRegion.title',\n                message: 'capital.common.errors.unsupportedRegion',\n            };\n        }\n        default:\n            return { ...UNKNOWN_ERROR, refreshComponent: true };\n    }\n};\n","import { getCapitalErrorMessage } from '../../../../utils/capital/getCapitalErrorMessage';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { ErrorMessageDisplay } from '../../../../internal/ErrorMessageDisplay/ErrorMessageDisplay';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport Button from '../../../../internal/Button/Button';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { AdyenErrorResponse } from '../../../../../core/Http/types';\nimport { ErrorTypes } from '../../../../../core/Http/utils';\n\nexport const CapitalErrorMessageDisplay = ({\n    emptyGrantOffer,\n    error,\n    onContactSupport,\n    onBack,\n    unsupportedRegion,\n}: {\n    emptyGrantOffer?: boolean;\n    error?: Error | AdyenErrorResponse;\n    onBack?: () => void;\n    onContactSupport?: () => void;\n    unsupportedRegion?: boolean;\n}) => {\n    const { i18n } = useCoreContext();\n\n    const renderSecondaryButton = useCallback(\n        () => (\n            <>\n                {onBack && (\n                    <Button variant={ButtonVariant.SECONDARY} onClick={onBack}>\n                        {i18n.get('capital.common.actions.goBack')}\n                    </Button>\n                )}\n            </>\n        ),\n        [i18n, onBack]\n    );\n\n    const capitalError = useMemo(() => {\n        if (unsupportedRegion) {\n            return new AdyenPlatformExperienceError(ErrorTypes.ERROR, 'UnsupportedRegion', 'Unsupported Region Configuration', 'UNSUPPORTED_REGION');\n        }\n        if (emptyGrantOffer) {\n            return new AdyenPlatformExperienceError(ErrorTypes.ERROR, 'EmptyConfig', 'Empty Configuration', 'EMPTY_CONFIG');\n        }\n        return error;\n    }, [emptyGrantOffer, unsupportedRegion, error]);\n    return (\n        <ErrorMessageDisplay\n            absolutePosition={false}\n            withImage\n            onContactSupport={onContactSupport}\n            renderSecondaryButton={renderSecondaryButton}\n            outlined={false}\n            {...getCapitalErrorMessage(capitalError as AdyenPlatformExperienceError, onContactSupport)}\n        />\n    );\n};\n","import { BaseEventProperties } from '../../../../../core/Analytics/analytics/user-events';\n\nexport const CAPITAL_OFFER_CLASS_NAMES = {\n    base: 'adyen-pe-capital-offer',\n    errorContainer: 'adyen-pe-capital-offer__error-container',\n};\n\nexport const sharedCapitalOfferAnalyticsEventProperties = {\n    componentName: 'capitalOffer' satisfies BaseEventProperties['componentName'],\n    category: 'Capital offer component',\n} as const;\n","import { FunctionalComponent } from 'preact';\nimport { useMemo } from 'preact/hooks';\nimport { useConfigContext } from '../../../core/ConfigContext';\nimport { Header, HeaderProps } from '../Header';\nimport { TypographyVariant } from '../Typography/types';\nimport './CapitalHeader.scss';\nimport { getCapitalHeaderSubtitleByLegalEntity } from './helpers';\n\nexport type CapitalHeaderProps = Omit<HeaderProps, 'subtitleKey'>;\n\nexport const CapitalHeader: FunctionalComponent<CapitalHeaderProps> = props => {\n    const legalEntity = useConfigContext().extraConfig?.legalEntity;\n    const subtitle = useMemo(() => {\n        const subtitleKey = getCapitalHeaderSubtitleByLegalEntity(legalEntity);\n        return subtitleKey ? { subtitleKey } : {};\n    }, [legalEntity]);\n\n    return (\n        <Header {...props} {...subtitle} subtitleConfig={{ variant: TypographyVariant.CAPTION, classNames: 'adyen-pe-capital-header__subtitle' }} />\n    );\n};\n","import cx from 'classnames';\nimport './InfoBox.scss';\nimport { ComponentChildren, JSX } from 'preact';\n\ninterface InfoBoxProps {\n    /**\n     * Optional custom class name to apply additional styles to the InfoBox component.\n     */\n    className?: string;\n    /**\n     * The HTML tag to be used for rendering the InfoBox.\n     *\n     * @default 'div'\n     */\n    el?: JSX.ElementType;\n    /**\n     * Children elements to be rendered inside the InfoBox.\n     */\n    children?: ComponentChildren;\n}\n\nconst InfoBox = ({ className, el: InfoBoxTag = 'div', children }: InfoBoxProps) => (\n    <InfoBoxTag className={cx('adyen-pe-info-box', className)}>{children}</InfoBoxTag>\n);\n\nexport default InfoBox;\n","import { DAY_MS } from '../../../../internal/Calendar/calendar/constants';\nimport { parseDate } from '../../../../../utils';\n\nconst dateStartUTCTimestampOffset = (date: Date | number | string, numberOfDays = 0) => {\n    return new Date(new Date(date).setUTCHours(0, 0, 0, 0) + Math.floor(numberOfDays) * DAY_MS);\n};\n\nexport const getExpectedRepaymentDate = (expectedRepaymentPeriodDays: number) => {\n    return parseDate(dateStartUTCTimestampOffset(new Date(), expectedRepaymentPeriodDays));\n};\n\nexport const calculateMaximumRepaymentPeriodInMonths = (days?: number) => (days ? Math.ceil(days / 30) : null);\n\nexport const getPercentage = (rate: number) => {\n    return rate / 100;\n};\n","import { clamp } from '../../../utils';\n\n/**\n * Calculates the progress percentage of a slider based on the current value, min/max range, and step size.\n * This method ensures the value snaps to the nearest step,\n * handles invalid ranges, and clamps the progress between 0% and 100%.\n *\n * @param currentValue - The current value of the slider.\n * @param min - The minimum allowed value of the slider.\n * @param max - The maximum allowed value of the slider.\n * @param step - The step size that defines the increment/decrement of the slider value.\n * @returns The progress percentage (from 0% to 100%) based on the snapped value.\n */\n\nexport function calculateProgress(currentValue: number, min: number, max: number, step: number): number {\n    // If the min is greater than max, return 0% progress as it's an invalid range.\n    if (min >= max) return 0;\n\n    // Handle zero step size\n    const effectiveStep = step > 0 ? step : 1;\n\n    // Check for cases where step cannot be accommodated in the range\n    if (effectiveStep > max - min) return 0;\n\n    // Snap the current value to the nearest step\n    const snappedValue = Math.round((currentValue - min) / effectiveStep) * effectiveStep + min;\n\n    // Calculate the raw progress percentage by checking how far the snapped value is between min and max.\n    const percentage = ((snappedValue - min) * 100) / (max - min);\n\n    // Clamp the percentage between 0% and 100% to handle out-of-bounds values.\n    return Number(clamp(0, percentage, 100).toFixed(2));\n}\n","import { useMemo } from 'preact/hooks';\nimport './Slider.scss';\nimport { JSX } from 'preact';\nimport { calculateProgress } from './calculateProgress';\nimport cx from 'classnames';\n\nexport function calculateSliderAdjustedMidValue(minValue: number, maxValue: number, step: number) {\n    const mid = maxValue / 2;\n    let adjustedMid = Math.round(mid / step) * step;\n\n    if (adjustedMid < minValue) {\n        adjustedMid = minValue;\n    } else if (adjustedMid > maxValue) {\n        adjustedMid = maxValue;\n    }\n\n    return adjustedMid;\n}\n\n/**\n * Props for the Slider component.\n */\ninterface SliderProps {\n    /**\n     * Minimum value of the slider.\n     * @default 0\n     */\n    min?: number;\n\n    /**\n     * Maximum value of the slider.\n     * @default 100\n     */\n    max?: number;\n\n    /**\n     * Step value for the slider.\n     * Defines the increment/decrement amount when the slider is moved.\n     * @default 1\n     */\n    step?: number;\n\n    /**\n     * The current value of the slider.\n     * @default min\n     */\n    value?: number;\n\n    /**\n     * Callback function that is called when the slider value changes.\n     * @param value - The new value of the slider.\n     */\n    onChange?: (event: JSX.TargetedEvent<HTMLInputElement, Event>) => void;\n\n    /**\n     * Optional class name(s) for styling the Slider.\n     */\n    className?: string;\n\n    /**\n     * Any additional attributes or properties that can be passed to the Slider element\n     */\n    [key: string]: any;\n}\n\nconst Slider = ({ min = 0, max = 100, step = 1, value = min, onChange, className, ...restOfProps }: SliderProps) => {\n    const progress = useMemo(() => {\n        return calculateProgress(value, min, max, step);\n    }, [value, min, max, step]);\n\n    return (\n        <input\n            type=\"range\"\n            className={cx('adyen-pe-slider', className)}\n            min={min}\n            max={max}\n            step={step}\n            value={value}\n            onChange={onChange}\n            style={{ backgroundSize: `${progress}% 100%` }}\n            {...restOfProps}\n        />\n    );\n};\n\nexport default Slider;\n","import './CapitalSlider.scss';\nimport Slider from '../Slider';\nimport { JSX } from 'preact';\nimport { useMemo } from 'preact/hooks';\nimport uniqueId from '../../../utils/random/uniqueId';\nimport Typography from '../Typography/Typography';\nimport { TypographyVariant } from '../Typography/types';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport { IDynamicOffersConfig } from '../../../types';\nimport cx from 'classnames';\n\n/**\n * Props for the CapitalSlider component.\n */\ninterface CapitalSliderProps {\n    /**\n     * The dynamic Capital offer\n     */\n    dynamicOffersConfig: IDynamicOffersConfig;\n\n    /**\n     * The current value of the CapitalSlider.\n     * @default dynamicCapitalOffer.minAmount.value\n     */\n    value?: number;\n\n    /**\n     * Callback function that is called when the slider value changes.\n     * @param value - The new value of the slider.\n     */\n    onValueChange?: (value: number) => void;\n\n    /**\n     * Called when the user releases the slider after changing its value.\n     * @param value - The final value of the slider when released.\n     */\n    onRelease?: (value: number) => void;\n\n    /**\n     * Optional class name(s) for styling the Slider.\n     */\n    className?: string;\n}\n\nconst CapitalSlider = ({\n    dynamicOffersConfig,\n    value = dynamicOffersConfig.minAmount.value,\n    onValueChange,\n    onRelease,\n    className,\n}: CapitalSliderProps) => {\n    const labelId = useMemo(() => uniqueId('elem'), []);\n    const sliderId = useMemo(() => uniqueId('elem'), []);\n    const { i18n } = useCoreContext();\n\n    const dynamicOfferAmount = useMemo(\n        () => i18n.amount(value, dynamicOffersConfig.minAmount.currency, { maximumFractionDigits: 0 }),\n        [i18n, value, dynamicOffersConfig.minAmount.currency]\n    );\n\n    const handleValueChange = (event: JSX.TargetedEvent<HTMLInputElement, Event>) => {\n        const value = Number((event.target as HTMLInputElement).value);\n        onValueChange?.(value);\n    };\n\n    const handleRelease = (event: JSX.TargetedKeyboardEvent<HTMLInputElement>) => {\n        const value = Number((event.target as HTMLInputElement).value);\n        onRelease?.(value);\n    };\n\n    return (\n        <div className={cx('adyen-pe-capital-slider', className)}>\n            <label id={labelId} htmlFor={sliderId} className=\"adyen-pe-capital-slider__label\" role=\"presentation\">\n                <Typography variant={TypographyVariant.BODY} stronger>\n                    {i18n.get('capital.offer.selection.slider.a11y.label')}\n                </Typography>\n            </label>\n            <div>\n                <output aria-labelledby={labelId} htmlFor={sliderId} className=\"adyen-pe-capital-slider__value\" aria-live=\"polite\">\n                    <Typography variant={TypographyVariant.TITLE} strongest>\n                        {dynamicOfferAmount}\n                    </Typography>\n                </output>\n                <Slider\n                    id={sliderId}\n                    value={value}\n                    min={dynamicOffersConfig.minAmount.value}\n                    max={dynamicOffersConfig.maxAmount.value}\n                    step={dynamicOffersConfig.step}\n                    onChange={handleValueChange}\n                    onMouseUp={handleRelease}\n                    onTouchEnd={handleRelease}\n                    onKeyUp={handleRelease}\n                    className=\"adyen-pe-capital-slider__input\"\n                    aria-valuetext={dynamicOfferAmount}\n                />\n            </div>\n            <div className=\"adyen-pe-capital-slider__labels\" aria-hidden=\"true\">\n                <div>\n                    <Typography variant={TypographyVariant.CAPTION}>{i18n.get('capital.offer.selection.slider.markers.min')}</Typography>\n                    <Typography variant={TypographyVariant.BODY}>\n                        {i18n.amount(dynamicOffersConfig.minAmount.value, dynamicOffersConfig.minAmount.currency, { maximumFractionDigits: 0 })}\n                    </Typography>\n                </div>\n                <div>\n                    <Typography variant={TypographyVariant.CAPTION}>{i18n.get('capital.offer.selection.slider.markers.max')}</Typography>\n                    <Typography variant={TypographyVariant.BODY}>\n                        {i18n.amount(dynamicOffersConfig.maxAmount.value, dynamicOffersConfig.maxAmount.currency, { maximumFractionDigits: 0 })}\n                    </Typography>\n                </div>\n            </div>\n        </div>\n    );\n};\n\nexport default CapitalSlider;\n","export const CAPITAL_REPAYMENT_FREQUENCY = 30;\nexport const BACKEND_REDACTED_DATA_MARKER = '***REDACTED***';\nexport const FRONTEND_REDACTED_DATA_MARKER = '********';\n","import { UIElementStatus } from '../types';\n\nconst ALLOWED_PROPERTIES = ['action', 'resultCode', 'sessionData', 'order'];\n\nexport function getSanitizedResponse(response: Record<string, any>) {\n    const removedProperties: string[] = [];\n\n    const sanitizedObject = Object.keys(response).reduce(\n        (acc, cur) => {\n            if (!ALLOWED_PROPERTIES.includes(cur)) {\n                removedProperties.push(cur);\n            } else {\n                acc[cur] = response[cur];\n            }\n            return acc;\n        },\n        {} as Record<string, any>\n    );\n\n    if (removedProperties.length) console.warn(`The following properties should not be passed to the client: ${removedProperties.join(', ')}`);\n\n    return sanitizedObject;\n}\n\nexport function resolveFinalResult(result: { resultCode: string } & { [key: string]: any }): [status: UIElementStatus, statusProps?: any] {\n    switch (result.resultCode) {\n        case 'Authorised':\n        case 'Received':\n            return ['success'];\n        case 'Pending':\n            return ['success'];\n        case 'Cancelled':\n        case 'Error':\n        case 'Refused':\n            return ['error'];\n        default:\n            return ['error'];\n    }\n}\n\ninterface DebouncedFunction<T extends (...args: any[]) => any> {\n    (...args: Parameters<T>): void;\n    cancel: () => void;\n}\n\nexport const debounce = <T extends (...args: any[]) => any>(func: T, delay: number): DebouncedFunction<T> => {\n    let timeoutId: ReturnType<typeof setTimeout> | undefined;\n    let lastArgs: Parameters<T> | undefined;\n\n    function debounced(...args: Parameters<T>): void {\n        clearTimeout(timeoutId);\n        lastArgs = args;\n\n        timeoutId = setTimeout(() => {\n            if (lastArgs) {\n                func(...lastArgs);\n            }\n            lastArgs = undefined;\n        }, delay);\n    }\n\n    debounced.cancel = () => {\n        if (timeoutId) {\n            clearTimeout(timeoutId);\n            timeoutId = undefined;\n            lastArgs = undefined;\n        }\n    };\n\n    return debounced;\n};\n","import InfoBox from '../../../../internal/InfoBox';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport StructuredList from '../../../../internal/StructuredList';\nimport Button from '../../../../internal/Button/Button';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport { useDurationEvent } from '../../../../../hooks/useAnalytics/useDurationEvent';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport useMutation from '../../../../../hooks/useMutation/useMutation';\nimport { IDynamicOffersConfig, IGrantOfferResponseDTO } from '../../../../../types';\nimport './CapitalOfferSelection.scss';\nimport { sharedCapitalOfferAnalyticsEventProperties } from '../CapitalOffer/constants';\nimport { getExpectedRepaymentDate, getPercentage } from '../utils/utils';\nimport CapitalSlider from '../../../../internal/CapitalSlider';\nimport { CapitalErrorMessageDisplay } from '../utils/CapitalErrorMessageDisplay';\nimport { calculateSliderAdjustedMidValue } from '../../../../internal/Slider/Slider';\nimport { CAPITAL_REPAYMENT_FREQUENCY } from '../../../../constants';\nimport { debounce } from '../../../../utils/utils';\n\ntype CapitalOfferSelectionProps = {\n    dynamicOffersConfig: IDynamicOffersConfig | undefined;\n    dynamicOffersConfigError?: Error;\n    emptyGrantOffer: boolean;\n    onContactSupport?: () => void;\n    onOfferDismiss?: () => void;\n    onOfferSelect: (data: IGrantOfferResponseDTO) => void;\n    requestedAmount: number | undefined;\n};\n\nconst sharedAnalyticsEventProperties = {\n    ...sharedCapitalOfferAnalyticsEventProperties,\n    subCategory: 'Business financing offer',\n} as const;\n\nconst LoadingSkeleton = () => (\n    <div className=\"adyen-pe-capital-offer-selection__loading-container\">\n        {[...Array(4)].map((_, index) => (\n            <div key={index} className=\"adyen-pe-capital-offer-selection__loading-skeleton\"></div>\n        ))}\n    </div>\n);\n\nconst InformationDisplay = ({ data }: { data: IGrantOfferResponseDTO }) => {\n    const { i18n } = useCoreContext();\n    const expectedRepaymentDate = useMemo(() => {\n        const date = data.expectedRepaymentPeriodDays && getExpectedRepaymentDate(data.expectedRepaymentPeriodDays);\n        if (date) return i18n.date(date, { month: 'long' });\n        return null;\n    }, [data, i18n]);\n    return (\n        <div className=\"adyen-pe-capital-offer-selection__information\">\n            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} wide={true}>\n                {expectedRepaymentDate &&\n                    i18n.get('capital.offer.common.repaymentInfo', {\n                        values: {\n                            amount: i18n.amount(data.thresholdAmount.value, data.thresholdAmount.currency),\n                            days: CAPITAL_REPAYMENT_FREQUENCY,\n                            date: expectedRepaymentDate,\n                        },\n                    })}\n            </Typography>\n            <StructuredList\n                renderValue={val => (\n                    <Typography el={TypographyElement.SPAN} stronger variant={TypographyVariant.CAPTION}>\n                        {val}\n                    </Typography>\n                )}\n                renderLabel={val => (\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION}>\n                        {val}\n                    </Typography>\n                )}\n                items={[\n                    { key: 'capital.common.fields.fees', value: i18n.amount(data.feesAmount.value, data.feesAmount.currency) },\n                    {\n                        key: 'capital.common.fields.dailyRepaymentRate',\n                        value: `${i18n.get('capital.common.values.percentage', {\n                            values: { percentage: getPercentage(data.repaymentRate) },\n                        })}`,\n                    },\n                    {\n                        key: 'capital.common.fields.expectedRepaymentPeriod',\n                        value: i18n.get('capital.common.values.numberOfDays', { values: { days: data.expectedRepaymentPeriodDays } }),\n                    },\n                ]}\n            />\n        </div>\n    );\n};\n\nexport const CapitalOfferSelection = ({\n    dynamicOffersConfig,\n    dynamicOffersConfigError,\n    emptyGrantOffer,\n    onContactSupport,\n    onOfferDismiss,\n    onOfferSelect,\n    requestedAmount,\n}: CapitalOfferSelectionProps) => {\n    const { i18n } = useCoreContext();\n    const userEvents = useAnalyticsContext();\n\n    const initialValue = useMemo(() => {\n        if (dynamicOffersConfig)\n            return calculateSliderAdjustedMidValue(\n                dynamicOffersConfig.minAmount.value,\n                dynamicOffersConfig.maxAmount.value,\n                dynamicOffersConfig.step\n            );\n        return undefined;\n    }, [dynamicOffersConfig]);\n\n    const [requestedValue, setRequestedValue] = useState<number | undefined>(undefined);\n\n    const currency = useMemo(() => dynamicOffersConfig?.minAmount.currency, [dynamicOffersConfig?.minAmount.currency]);\n\n    const { createGrantOffer, getDynamicGrantOffer } = useConfigContext().endpoints;\n    const getDynamicGrantOfferMutation = useMutation({\n        queryFn: getDynamicGrantOffer,\n        options: {\n            retry: 1,\n            shouldRetry: useCallback((error: any) => {\n                return error.status === 500;\n            }, []),\n            onSettled: useCallback(() => {\n                setIsLoading(false);\n            }, []),\n        },\n    });\n\n    const reviewOfferMutation = useMutation({\n        queryFn: createGrantOffer,\n        options: {\n            onSuccess: data => onOfferSelect(data),\n        },\n    });\n\n    const onReview = useCallback(() => {\n        try {\n            void reviewOfferMutation.mutate({\n                body: {\n                    amount: getDynamicGrantOfferMutation.data?.grantAmount.value || requestedValue!,\n                    currency: getDynamicGrantOfferMutation.data?.grantAmount.currency || currency!,\n                },\n                contentType: 'application/json',\n            });\n        } finally {\n            userEvents.addEvent?.('Clicked button', { ...sharedAnalyticsEventProperties, label: 'Review offer' });\n        }\n    }, [currency, getDynamicGrantOfferMutation.data, requestedValue, reviewOfferMutation, userEvents]);\n\n    const getOffer = useCallback(\n        (amount: number) => getDynamicGrantOfferMutation.mutate({}, { query: { amount, currency: currency! } }),\n        [currency, getDynamicGrantOfferMutation]\n    );\n\n    const [isLoading, setIsLoading] = useState(false);\n\n    const debouncedGetOfferCall = useMemo(() => debounce(getOffer, 300), [getOffer]);\n\n    const onChangeHandler = useCallback(\n        (val: number) => {\n            debouncedGetOfferCall.cancel();\n            setIsLoading(true);\n            setRequestedValue(val);\n        },\n        [debouncedGetOfferCall]\n    );\n\n    const handleSliderRelease = useCallback(\n        (val: number) => {\n            try {\n                return debouncedGetOfferCall(val);\n            } finally {\n                userEvents.addEvent?.('Changed capital offer slider', {\n                    ...sharedAnalyticsEventProperties,\n                    label: 'Slider changed',\n                    currency: currency!,\n                    value: val,\n                });\n            }\n        },\n        [debouncedGetOfferCall, userEvents]\n    );\n\n    useEffect(() => {\n        if (dynamicOffersConfig && !getDynamicGrantOfferMutation.data && !requestedValue) {\n            setRequestedValue(prev =>\n                !prev ? (requestedAmount ? Number(requestedAmount) : initialValue || dynamicOffersConfig.minAmount.value) : prev\n            );\n            void getOffer(requestedValue || initialValue || dynamicOffersConfig.minAmount.value);\n        }\n    }, [dynamicOffersConfig, getDynamicGrantOfferMutation.data, getOffer, initialValue, requestedAmount, requestedValue]);\n\n    const loadingButtonState = useMemo(\n        () => reviewOfferMutation.isLoading || getDynamicGrantOfferMutation.isLoading || isLoading,\n        [getDynamicGrantOfferMutation.isLoading, isLoading, reviewOfferMutation.isLoading]\n    );\n\n    useDurationEvent(sharedAnalyticsEventProperties);\n\n    return (\n        <div className=\"adyen-pe-capital-offer-selection\">\n            {reviewOfferMutation.error || getDynamicGrantOfferMutation.error || emptyGrantOffer || dynamicOffersConfigError ? (\n                <CapitalErrorMessageDisplay\n                    error={reviewOfferMutation.error || getDynamicGrantOfferMutation.error || dynamicOffersConfigError}\n                    onBack={onOfferDismiss}\n                    onContactSupport={onContactSupport}\n                    emptyGrantOffer={emptyGrantOffer}\n                />\n            ) : (\n                <>\n                    {dynamicOffersConfig && (\n                        <CapitalSlider\n                            value={requestedValue}\n                            dynamicOffersConfig={dynamicOffersConfig}\n                            onValueChange={onChangeHandler}\n                            onRelease={handleSliderRelease}\n                        />\n                    )}\n                    <InfoBox className=\"adyen-pe-capital-offer-selection__details\">\n                        {!getDynamicGrantOfferMutation.data || getDynamicGrantOfferMutation.isLoading || isLoading ? (\n                            <LoadingSkeleton />\n                        ) : getDynamicGrantOfferMutation.data ? (\n                            <InformationDisplay data={getDynamicGrantOfferMutation.data} />\n                        ) : null}\n                    </InfoBox>\n                    <div className=\"adyen-pe-capital-offer-selection__buttons\">\n                        {onOfferDismiss && (\n                            <Button variant={ButtonVariant.SECONDARY} onClick={onOfferDismiss}>\n                                {i18n.get('capital.common.actions.goBack')}\n                            </Button>\n                        )}\n                        <Button\n                            variant={ButtonVariant.PRIMARY}\n                            state={loadingButtonState ? 'loading' : undefined}\n                            onClick={onReview}\n                            disabled={reviewOfferMutation.isLoading || !dynamicOffersConfig?.minAmount}\n                            aria-label={i18n.get('capital.offer.selection.actions.reviewOffer')}\n                        >\n                            {i18n.get(\n                                loadingButtonState\n                                    ? 'capital.offer.selection.actions.reviewOffer.states.loading'\n                                    : 'capital.offer.selection.actions.reviewOffer'\n                            )}\n                        </Button>\n                    </div>\n                </>\n            )}\n        </div>\n    );\n};\n","import { Ref } from 'preact';\nimport useButton from '../Button/hooks/useButton';\nimport { DEFAULT_BUTTON_CLASSNAME, BUTTON_ANCHOR_CLASSNAME } from '../Button/constants';\nimport { AnchorButtonProps, BaseButtonProps, ButtonVariant } from '../Button/types';\nimport { useMemo } from 'preact/hooks';\nimport { fixedForwardRef, parseBooleanProp, parseClassName } from '../../../utils/preact';\n\nconst AnchorButton = (props: AnchorButtonProps & BaseButtonProps, ref: Ref<HTMLAnchorElement>) => {\n    const { variant = ButtonVariant.PRIMARY, disabled = false, onClick, classNameModifiers = [], className } = props;\n    const classNameValue = useMemo(() => parseClassName('', className) || '', [className]);\n    const disabledValue = useMemo(() => parseBooleanProp(disabled), [disabled]);\n\n    const { click, allChildren, allProps } = useButton(\n        classNameValue,\n        [...classNameModifiers, variant],\n        `${DEFAULT_BUTTON_CLASSNAME} ${BUTTON_ANCHOR_CLASSNAME}`,\n        disabledValue,\n        props,\n        'button',\n        onClick\n    );\n\n    const restProps = useMemo(() => ({ ...allProps, ...(props.onClick && click ? { onClick: click } : {}) }), [click, allProps, props.onClick]);\n\n    return (\n        <a {...restProps} href={props.href} ref={ref as Ref<HTMLAnchorElement>}>\n            {allChildren}\n        </a>\n    );\n};\n\nexport default fixedForwardRef(AnchorButton);\n","export const SUMMARY_TEXT_EMAIL = 'capital-support@adyen.com';\n","import { useConfigContext } from '../../../../../core/ConfigContext';\nimport AnchorButton from '../../../../internal/AnchorButton/AnchorButton';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { SupportedLocation } from '../../../../internal/CapitalHeader/constants';\nimport Card from '../../../../internal/Card/Card';\nimport { Translation } from '../../../../internal/Translation';\nimport { TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { SUMMARY_TEXT_EMAIL } from '../CapitalOfferSummary/constants';\nimport './CapitalOfferLegalNotice.scss';\n\nexport const CapitalOfferLegalNotice = () => {\n    const countryCode = useConfigContext()?.extraConfig?.legalEntity?.countryCode;\n\n    return countryCode === SupportedLocation.US ? (\n        <Card filled noOutline>\n            <Typography variant={TypographyVariant.CAPTION} className={'adyen-pe-capital-offer-legal-notice--title'}>\n                <Translation translationKey={'capital.offer.summary.legalNotice.US.title'} fills={{ break: <br /> }} />\n            </Typography>\n            <br />\n            <Typography variant={TypographyVariant.CAPTION} className={'adyen-pe-capital-offer-legal-notice--description'}>\n                {\n                    <Translation\n                        translationKey={'capital.offer.summary.legalNotice.US.note'}\n                        fills={{\n                            email: (\n                                <AnchorButton\n                                    href={`mailto:${SUMMARY_TEXT_EMAIL}`}\n                                    variant={ButtonVariant.TERTIARY}\n                                    className={'adyen-pe-capital-offer-summary__info--email'}\n                                >\n                                    {SUMMARY_TEXT_EMAIL}\n                                </AnchorButton>\n                            ),\n                            break: (\n                                <>\n                                    <br />\n                                    <br />\n                                </>\n                            ),\n                        }}\n                    />\n                }\n            </Typography>\n        </Card>\n    ) : null;\n};\n","import InfoBox from '../../../../internal/InfoBox';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { IGrant, IGrantOfferResponseDTO } from '../../../../../types';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { calculateMaximumRepaymentPeriodInMonths, getExpectedRepaymentDate, getPercentage } from '../utils/utils';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport StructuredList from '../../../../internal/StructuredList';\nimport './CapitalOfferSummary.scss';\nimport Button from '../../../../internal/Button/Button';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport useMutation from '../../../../../hooks/useMutation/useMutation';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport { useDurationEvent } from '../../../../../hooks/useAnalytics/useDurationEvent';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { Tooltip } from '../../../../internal/Tooltip/Tooltip';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport { AdyenErrorResponse } from '../../../../../core/Http/types';\nimport { AlertTypeOption } from '../../../../internal/Alert/types';\nimport Alert from '../../../../internal/Alert/Alert';\nimport Icon from '../../../../internal/Icon';\nimport { CapitalErrorMessageDisplay } from '../utils/CapitalErrorMessageDisplay';\nimport cx from 'classnames';\nimport { sharedCapitalOfferAnalyticsEventProperties } from '../CapitalOffer/constants';\nimport { StructuredListItem } from '../../../../internal/StructuredList/types';\nimport { CAPITAL_REPAYMENT_FREQUENCY } from '../../../../constants';\nimport { CapitalOfferLegalNotice } from '../CapitalOfferLegalNotice/CapitalOfferLegalNotice';\nimport { Translation } from '../../../../internal/Translation';\n\nconst errorMessageWithAlert = ['30_013'];\n\nconst sharedAnalyticsEventProperties = {\n    ...sharedCapitalOfferAnalyticsEventProperties,\n    subCategory: 'Business financing summary',\n} as const;\n\nexport const CapitalOfferSummary = ({\n    grantOffer,\n    onBack,\n    onFundsRequest,\n    onContactSupport,\n}: {\n    grantOffer: IGrantOfferResponseDTO;\n    onBack: () => void;\n    onFundsRequest?: (data: IGrant) => void;\n    onContactSupport?: () => void;\n}) => {\n    const { i18n } = useCoreContext();\n    const userEvents = useAnalyticsContext();\n\n    const expectedRepaymentDate = useMemo(() => {\n        const date = getExpectedRepaymentDate(grantOffer.expectedRepaymentPeriodDays);\n        return date ? i18n.date(date, { month: 'long' }) : null;\n    }, [grantOffer, i18n]);\n\n    const { requestFunds } = useConfigContext().endpoints;\n\n    const requestFundsMutation = useMutation({\n        queryFn: requestFunds,\n        options: {\n            onSuccess: data => onFundsRequest?.(data),\n        },\n    });\n\n    const requestFundsCallback = useCallback(\n        (id: string) => {\n            void requestFundsMutation.mutate(EMPTY_OBJECT, { path: { grantOfferId: id } });\n        },\n        [requestFundsMutation]\n    );\n\n    const onRequestFundsHandler = useCallback(() => {\n        try {\n            grantOffer.id && requestFundsCallback(grantOffer.id);\n        } finally {\n            userEvents.addEvent?.('Clicked button', { ...sharedAnalyticsEventProperties, label: 'Request funds' });\n        }\n    }, [grantOffer.id, requestFundsCallback, userEvents]);\n\n    const onBackWithTracking = useCallback<typeof onBack>(() => {\n        try {\n            return onBack();\n        } finally {\n            userEvents.addEvent?.('Clicked button', { ...sharedAnalyticsEventProperties, label: 'Back to slider view' });\n        }\n    }, [onBack, userEvents]);\n\n    const maximumRepaymentPeriod = useMemo(\n        () => calculateMaximumRepaymentPeriodInMonths(grantOffer.maximumRepaymentPeriodDays),\n        [grantOffer.maximumRepaymentPeriodDays]\n    );\n\n    const requestErrorAlert = useMemo<{ title: string; message: string; errorCode?: string } | null>(() => {\n        const err = requestFundsMutation.error ? (requestFundsMutation.error as AdyenErrorResponse) : null;\n\n        if (err && errorMessageWithAlert.includes(err.errorCode)) {\n            switch (err.errorCode) {\n                case '30_013':\n                    return {\n                        title: i18n.get('capital.offer.common.errors.noPrimaryAccount'),\n                        message: i18n.get('capital.offer.common.errors.cannotContinueSupport'),\n                        errorCode: '30_013',\n                    };\n                default:\n                    return {\n                        title: i18n.get('common.errors.somethingWentWrong'),\n                        message: i18n.get('capital.offer.common.errors.unavailable'),\n                    };\n            }\n        }\n\n        return null;\n    }, [i18n, requestFundsMutation.error]);\n\n    const structuredListItems = useMemo(() => {\n        const summaryItems: StructuredListItem[] = [\n            {\n                key: 'capital.common.fields.fees',\n                value: i18n.amount(grantOffer.feesAmount.value, grantOffer.feesAmount.currency),\n            },\n            {\n                key: 'capital.common.fields.totalRepaymentAmount',\n                value: i18n.amount(grantOffer.totalAmount.value, grantOffer.totalAmount.currency),\n            },\n            {\n                key: 'capital.common.fields.repaymentThreshold',\n                value: i18n.amount(grantOffer.thresholdAmount.value, grantOffer.thresholdAmount.currency),\n            },\n            {\n                key: 'capital.common.fields.dailyRepaymentRate',\n                value: i18n.get('capital.common.values.percentage', { values: { percentage: getPercentage(grantOffer.repaymentRate) } }),\n            },\n            {\n                key: 'capital.common.fields.expectedRepaymentPeriod',\n                value: i18n.get('capital.common.values.numberOfDays', { values: { days: grantOffer.expectedRepaymentPeriodDays } }),\n            },\n            { key: 'capital.common.fields.account', value: i18n.get('capital.common.values.primaryAccount') },\n        ];\n\n        if (maximumRepaymentPeriod) {\n            summaryItems.splice(4, 0, {\n                key: 'capital.common.fields.maximumRepaymentPeriod',\n                value:\n                    maximumRepaymentPeriod === 1\n                        ? i18n.get('capital.common.values.oneMonth')\n                        : i18n.get('capital.common.values.numberOfMonths', { values: { months: maximumRepaymentPeriod } }),\n            });\n        }\n\n        if (grantOffer.aprBasisPoints) {\n            summaryItems.splice(1, 0, {\n                key: 'capital.common.fields.annualPercentageRate',\n                value: i18n.get('capital.common.values.percentage', { values: { percentage: getPercentage(grantOffer.aprBasisPoints) } }),\n            });\n        }\n\n        return summaryItems;\n    }, [grantOffer, i18n, maximumRepaymentPeriod]);\n\n    useDurationEvent(sharedAnalyticsEventProperties);\n\n    return !requestErrorAlert && requestFundsMutation.error ? (\n        <CapitalErrorMessageDisplay error={requestFundsMutation.error} onBack={onBackWithTracking} onContactSupport={onContactSupport} />\n    ) : (\n        <div className=\"adyen-pe-capital-offer-summary\">\n            <InfoBox className=\"adyen-pe-capital-offer-summary__grant-summary\">\n                <Typography el={TypographyElement.PARAGRAPH} variant={TypographyVariant.BODY}>\n                    <Translation\n                        translationKey=\"capital.offer.common.fundingRequestInfo\"\n                        fills={{\n                            amount: (\n                                <strong>{`${i18n.amount(grantOffer.grantAmount.value, grantOffer.grantAmount.currency, { minimumFractionDigits: 0 })}`}</strong>\n                            ),\n                        }}\n                    />\n                </Typography>\n                <Typography el={TypographyElement.PARAGRAPH} variant={TypographyVariant.CAPTION}>\n                    {i18n.get('capital.offer.common.repaymentInfo', {\n                        values: {\n                            amount: i18n.amount(grantOffer.thresholdAmount.value, grantOffer.thresholdAmount.currency),\n                            days: CAPITAL_REPAYMENT_FREQUENCY,\n                            date: expectedRepaymentDate ?? '',\n                        },\n                    })}\n                </Typography>\n            </InfoBox>\n            <StructuredList\n                classNames=\"adyen-pe-capital-offer-summary__details\"\n                renderLabel={(val, key) => {\n                    if (key === 'capital.common.fields.repaymentThreshold') {\n                        return (\n                            <Tooltip\n                                isUnderlineVisible\n                                content={i18n.get('capital.common.fields.repaymentThreshold.description', {\n                                    values: { days: CAPITAL_REPAYMENT_FREQUENCY },\n                                })}\n                            >\n                                <span>\n                                    <Typography\n                                        className={'adyen-pe-capital-offer-summary__list-label'}\n                                        el={TypographyElement.SPAN}\n                                        variant={TypographyVariant.CAPTION}\n                                    >\n                                        {val}\n                                    </Typography>\n                                </span>\n                            </Tooltip>\n                        );\n                    }\n\n                    if (key === 'capital.common.fields.annualPercentageRate') {\n                        return (\n                            <Tooltip isUnderlineVisible content={i18n.get('capital.common.fields.annualPercentageRate.description')}>\n                                <span>\n                                    <Typography\n                                        className={'adyen-pe-capital-offer-summary__list-label'}\n                                        el={TypographyElement.SPAN}\n                                        variant={TypographyVariant.CAPTION}\n                                    >\n                                        {val}\n                                    </Typography>\n                                </span>\n                            </Tooltip>\n                        );\n                    }\n\n                    return (\n                        <Typography\n                            className={'adyen-pe-capital-offer-summary__list-label'}\n                            el={TypographyElement.SPAN}\n                            variant={TypographyVariant.CAPTION}\n                        >\n                            {val}\n                        </Typography>\n                    );\n                }}\n                renderValue={(val, key) => {\n                    const showWarningIcon =\n                        key === 'capital.common.fields.account' &&\n                        requestFundsMutation.error &&\n                        requestErrorAlert &&\n                        requestErrorAlert.errorCode === '30_013';\n\n                    return (\n                        <Typography\n                            className={cx({\n                                ['adyen-pe-capital-offer-summary__details--error']: showWarningIcon,\n                            })}\n                            el={TypographyElement.SPAN}\n                            variant={TypographyVariant.CAPTION}\n                            stronger\n                        >\n                            {showWarningIcon ? <Icon name={'warning-filled'} data-testid={'primary-account-warning-icon'} /> : null}\n                            {val}\n                        </Typography>\n                    );\n                }}\n                items={structuredListItems}\n            />\n            {requestErrorAlert && (\n                <Alert\n                    className={'adyen-pe-capital-offer-summary__error-alert'}\n                    type={AlertTypeOption.WARNING}\n                    title={requestErrorAlert.title}\n                    description={requestErrorAlert.message}\n                >\n                    {onContactSupport ? (\n                        <Button className={'adyen-pe-capital-offer-summary__error-alert-button'} onClick={onContactSupport}>\n                            {i18n.get('capital.common.actions.contactSupport')}\n                        </Button>\n                    ) : null}\n                </Alert>\n            )}\n            <CapitalOfferLegalNotice />\n            <div className=\"adyen-pe-capital-offer-summary__buttons\">\n                {requestFundsMutation.error && !requestErrorAlert ? null : (\n                    <Button variant={ButtonVariant.SECONDARY} onClick={onBackWithTracking}>\n                        {i18n.get('capital.common.actions.goBack')}\n                    </Button>\n                )}\n                <Button\n                    variant={ButtonVariant.PRIMARY}\n                    state={requestFundsMutation.isLoading ? 'loading' : undefined}\n                    onClick={onRequestFundsHandler}\n                    disabled={requestFundsMutation.isLoading || !!requestFundsMutation.error || !!requestFundsMutation.data}\n                    aria-label={i18n.get('capital.offer.summary.actions.requestFunds')}\n                >\n                    {i18n.get(\n                        requestFundsMutation.isLoading\n                            ? 'capital.offer.summary.actions.requestFunds.states.loading'\n                            : 'capital.offer.summary.actions.requestFunds'\n                    )}\n                </Button>\n            </div>\n        </div>\n    );\n};\n","import { FunctionalComponent } from 'preact';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport { isCapitalRegionSupported } from '../../../../internal/CapitalHeader/helpers';\nimport { ExternalUIComponentProps } from '../../../../types';\nimport { CapitalOfferProps } from '../../types';\nimport { CapitalErrorMessageDisplay } from '../utils/CapitalErrorMessageDisplay';\nimport { CAPITAL_OFFER_CLASS_NAMES, sharedCapitalOfferAnalyticsEventProperties } from './constants';\nimport { CapitalHeader } from '../../../../internal/CapitalHeader';\nimport { CapitalOfferSelection } from '../CapitalOfferSelection/CapitalOfferSelection';\nimport { IDynamicOffersConfig, IGrantOfferResponseDTO } from '../../../../../types';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { useFetch } from '../../../../../hooks/useFetch';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport { CapitalOfferSummary } from '../CapitalOfferSummary/CapitalOfferSummary';\nimport { useDurationEvent } from '../../../../../hooks/useAnalytics/useDurationEvent';\nimport { useLandedPageEvent } from '../../../../../hooks/useAnalytics/useLandedPageEvent';\nimport './CapitalOffer.scss';\n\ntype CapitalOfferState = 'OfferSelection' | 'OfferSummary';\n\nconst sharedAnalyticsEventProperties = {\n    ...sharedCapitalOfferAnalyticsEventProperties,\n    subCategory: 'Capital offer',\n} as const;\n\nconst DynamicCapitalOffer: FunctionalComponent<ExternalUIComponentProps<CapitalOfferProps>> = ({\n    externalDynamicOffersConfig,\n    hideTitle,\n    onContactSupport,\n    onFundsRequest,\n    onOfferDismiss,\n    onOfferSelect,\n}) => {\n    const [emptyGrantOffer, setEmptyGrantOffer] = useState(false);\n    const [requestedAmount, setRequestedAmount] = useState<number>();\n    const [selectedOffer, setSelectedOffer] = useState<IGrantOfferResponseDTO>();\n\n    const { getDynamicGrantOffersConfiguration } = useConfigContext().endpoints;\n\n    const onSuccess = useCallback((data: IDynamicOffersConfig | undefined) => {\n        if (data) {\n            setEmptyGrantOffer(false);\n        } else setEmptyGrantOffer(true);\n    }, []);\n\n    const { data: internalDynamicOffersConfig, error: dynamicOffersConfigError } = useFetch({\n        fetchOptions: {\n            enabled: !externalDynamicOffersConfig && !!getDynamicGrantOffersConfiguration,\n            onSuccess: onSuccess,\n        },\n        queryFn: useCallback(async () => {\n            return getDynamicGrantOffersConfiguration?.(EMPTY_OBJECT);\n        }, [getDynamicGrantOffersConfiguration]),\n    });\n\n    const config = externalDynamicOffersConfig || internalDynamicOffersConfig;\n\n    const onOfferSelectHandler = useCallback(\n        (data: IGrantOfferResponseDTO) => {\n            if (onOfferSelect) {\n                onOfferSelect(data);\n            } else {\n                setRequestedAmount(data?.grantAmount.value);\n                setSelectedOffer(data);\n            }\n        },\n        [onOfferSelect]\n    );\n\n    const capitalOfferState = useMemo<CapitalOfferState>(() => {\n        return selectedOffer ? 'OfferSummary' : 'OfferSelection';\n    }, [selectedOffer]);\n\n    useLandedPageEvent({ ...sharedAnalyticsEventProperties, label: 'Capital offer' });\n    useDurationEvent(sharedAnalyticsEventProperties);\n\n    return (\n        <div className={CAPITAL_OFFER_CLASS_NAMES.base}>\n            <CapitalHeader\n                hasDivider\n                hideTitle={hideTitle}\n                titleKey={capitalOfferState === 'OfferSummary' ? 'capital.offer.summary.title' : 'capital.offer.selection.title'}\n            />\n            {capitalOfferState === 'OfferSelection' && (\n                <CapitalOfferSelection\n                    requestedAmount={requestedAmount}\n                    dynamicOffersConfig={config}\n                    dynamicOffersConfigError={dynamicOffersConfigError}\n                    onOfferDismiss={onOfferDismiss}\n                    onOfferSelect={onOfferSelectHandler}\n                    emptyGrantOffer={emptyGrantOffer}\n                    onContactSupport={onContactSupport}\n                />\n            )}\n            {capitalOfferState === 'OfferSummary' && (\n                <CapitalOfferSummary\n                    grantOffer={selectedOffer!}\n                    onBack={() => setSelectedOffer(undefined)}\n                    onFundsRequest={onFundsRequest}\n                    onContactSupport={onContactSupport}\n                />\n            )}\n        </div>\n    );\n};\n\nexport const CapitalOffer: FunctionalComponent<ExternalUIComponentProps<CapitalOfferProps>> = props => {\n    const legalEntity = useConfigContext()?.extraConfig?.legalEntity;\n    const isRegionSupported = useMemo(() => isCapitalRegionSupported(legalEntity), [legalEntity]);\n\n    if (!isRegionSupported) {\n        return (\n            <div className={CAPITAL_OFFER_CLASS_NAMES.errorContainer}>\n                <CapitalHeader hideTitle={props.hideTitle} titleKey={'capital.common.title'} />\n                <CapitalErrorMessageDisplay unsupportedRegion />\n            </div>\n        );\n    }\n\n    return <DynamicCapitalOffer {...props} />;\n};\n","import { _UIComponentProps, ExternalComponentType } from '../../types';\nimport UIElement from '../UIElement/UIElement';\nimport { CapitalOfferElementProps } from './types';\nimport { CapitalOffer } from './components/CapitalOffer/CapitalOffer';\n\nexport class CapitalOfferElement extends UIElement<CapitalOfferElementProps> {\n    public static type: ExternalComponentType = 'capitalOffer';\n\n    constructor(props: _UIComponentProps<CapitalOfferElementProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n        this.customClassNames = 'adyen-pe-capital-offer-component';\n    }\n\n    public componentToRender = () => {\n        return <CapitalOffer {...this.props} />;\n    };\n}\n\nexport default CapitalOfferElement;\n","import { useCallback, useEffect, useRef, useState } from 'preact/hooks';\n\nexport const useFreezePeriod = (timeout = 1000, initialState = false) => {\n    const [frozen, setFrozen] = useState(initialState);\n    const rafId = useRef<ReturnType<typeof requestAnimationFrame>>();\n    const timeoutId = useRef<ReturnType<typeof setTimeout>>();\n\n    const freeze = useCallback(() => {\n        if (frozen) return;\n\n        timeoutId.current = setTimeout(() => {\n            rafId.current = requestAnimationFrame(() => setFrozen(false));\n        }, timeout);\n\n        setFrozen(true);\n    }, [frozen, timeout]);\n\n    useEffect(() => {\n        return () => {\n            cancelAnimationFrame(rafId.current!);\n            clearTimeout(timeoutId.current!);\n            rafId.current = timeoutId.current = null!;\n        };\n    }, [timeout]);\n\n    return { freeze, frozen } as const;\n};\n\nexport default useFreezePeriod;\n","import classNames from 'classnames';\nimport { VNode } from 'preact';\nimport { AriaAttributes } from 'preact/compat';\nimport { useEffect, useMemo, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport AdyenPlatformExperienceError from '../../../../core/Errors/AdyenPlatformExperienceError';\nimport { DownloadStreamEndpoint } from '../../../../types/api/endpoints';\nimport { containerQueries, useResponsiveContainer } from '../../../../hooks/useResponsiveContainer';\nimport { downloadBlob } from '../../../../utils';\nimport Spinner from '../../Spinner';\nimport Icon from '../../Icon';\nimport Button from '../Button';\nimport { ButtonVariant } from '../types';\nimport useDownload from './useDownload';\nimport './DownloadButton.scss';\n\ninterface DownloadButtonProps {\n    requestParams: any;\n    iconButton?: boolean;\n    endpointName: DownloadStreamEndpoint;\n    className?: string;\n    disabled?: boolean;\n    onDownloadRequested?: () => void;\n    setError?: (error?: AdyenPlatformExperienceError) => any;\n    errorDisplay?: VNode<any>;\n    errorMessage?: (error: any) => VNode<any>;\n}\n\nfunction DownloadButton({\n    className,\n    disabled,\n    endpointName,\n    requestParams,\n    setError,\n    errorDisplay,\n    onDownloadRequested,\n    iconButton = false,\n    errorMessage,\n    ...ariaAttributeProps\n}: DownloadButtonProps & Pick<AriaAttributes, 'aria-describedby' | 'aria-label' | 'aria-labelledby'>) {\n    const { i18n } = useCoreContext();\n    const [fetchData, setFetchData] = useState(false);\n    const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n    const { data, error, isFetching } = useDownload(endpointName, requestParams, fetchData);\n\n    useEffect(() => {\n        if (fetchData) setFetchData(false);\n    }, [fetchData]);\n\n    useEffect(() => {\n        if (data) downloadBlob(data);\n    }, [data]);\n\n    useEffect(() => {\n        if (setError && error) setError(error as AdyenPlatformExperienceError);\n    }, [error, setError]);\n\n    const onClick = () => {\n        setFetchData(true);\n        onDownloadRequested?.();\n    };\n\n    const buttonIcon = useMemo(() => (isFetching ? <Spinner size={'small'} /> : <Icon name=\"download\" />), [isFetching]);\n\n    const buttonLabel = useMemo(() => {\n        if (iconButton) {\n            return buttonIcon;\n        } else {\n            return isFetching ? `${i18n.get('common.actions.download.labels.inProgress')}..` : i18n.get('common.actions.download.labels.default');\n        }\n    }, [buttonIcon, i18n, isFetching, iconButton]);\n\n    return (\n        <>\n            <div\n                className={classNames('adyen-pe-download', {\n                    'adyen-pe-download-icon-button-container': iconButton,\n                })}\n            >\n                {isSmContainer ? (\n                    <Button iconButton={true} variant={ButtonVariant.TERTIARY} onClick={onClick} {...ariaAttributeProps}>\n                        {buttonIcon}\n                    </Button>\n                ) : (\n                    <Button\n                        className={classNames(\n                            'adyen-pe-download__button',\n                            { 'adyen-pe-download__button--loading': isFetching, 'adyen-pe-download__button--icon': iconButton },\n                            className\n                        )}\n                        disabled={disabled || isFetching}\n                        variant={iconButton ? ButtonVariant.TERTIARY : ButtonVariant.SECONDARY}\n                        onClick={onClick}\n                        {...(!iconButton && { iconLeft: buttonIcon })}\n                        {...ariaAttributeProps}\n                    >\n                        {buttonLabel}\n                    </Button>\n                )}\n                {error && errorDisplay && <div className={'adyen-pe-download__error'}>{errorDisplay}</div>}\n            </div>\n            {/* [TODO]: Remove errorMessage prop and rely on errorDisplay for rendering error  */}\n            {error && errorMessage && errorMessage(error)}\n        </>\n    );\n}\n\nexport default DownloadButton;\n","export const DISABLED_BUTTONS_TIMEOUT = 1000; // 1 second\n\nexport const BASE_CLASS = 'adyen-pe-reports-table';\nexport const DATE_TYPE_CLASS = `${BASE_CLASS}-date-report-type`;\nexport const DATE_TYPE_DATE_SECTION_CLASS = `${DATE_TYPE_CLASS}--date`;\n","import { FC } from 'preact/compat';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { TranslationKey } from '../../../../../translations';\nimport { IReport } from '../../../../../types';\nimport useFreezePeriod from '../../../../../hooks/useFreezePeriod';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport Alert from '../../../../internal/Alert/Alert';\nimport Icon from '../../../../internal/Icon';\nimport { AlertTypeOption } from '../../../../internal/Alert/types';\nimport DownloadButton from '../../../../internal/Button/DownloadButton/DownloadButton';\nimport DataGrid from '../../../../internal/DataGrid';\nimport { DATE_FORMAT_REPORTS } from '../../../../../constants';\nimport DataOverviewError from '../../../../internal/DataOverviewError/DataOverviewError';\nimport Pagination from '../../../../internal/Pagination';\nimport { PaginationProps, WithPaginationLimitSelection } from '../../../../internal/Pagination/types';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { BASE_CLASS, DATE_TYPE_CLASS, DATE_TYPE_DATE_SECTION_CLASS, DISABLED_BUTTONS_TIMEOUT } from './constants';\nimport './ReportsTable.scss';\nimport { CustomColumn } from '../../../../types';\nimport { StringWithAutocompleteOptions } from '../../../../../utils/types';\nimport { useTableColumns } from '../../../../../hooks/useTableColumns';\nimport { getReportType } from '../../../../utils/translation/getters';\n\nexport const FIELDS = ['createdAt', 'dateAndReportType', 'reportType', 'reportFile'] as const;\nexport type ReportsTableFields = (typeof FIELDS)[number];\n\nconst FIELDS_KEYS = {\n    createdAt: 'reports.overview.list.fields.createdAt',\n    reportFile: 'reports.overview.list.fields.reportFile',\n    reportType: 'reports.overview.list.fields.reportType',\n} as const satisfies Partial<Record<ReportsTableFields, TranslationKey>>;\n\nexport interface ReportsTableProps extends WithPaginationLimitSelection<PaginationProps> {\n    balanceAccountId: string | undefined;\n    loading: boolean;\n    error?: AdyenPlatformExperienceError;\n    onContactSupport?: () => void;\n    showPagination: boolean;\n    data: IReport[] | undefined;\n    customColumns?: CustomColumn<StringWithAutocompleteOptions<ReportsTableFields>>[];\n}\n\nexport const ReportsTable: FC<ReportsTableProps> = ({\n    error,\n    loading,\n    balanceAccountId,\n    onContactSupport,\n    showPagination,\n    data,\n    customColumns,\n    ...paginationProps\n}) => {\n    const { i18n } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting('UTC');\n    const { freeze, frozen } = useFreezePeriod(DISABLED_BUTTONS_TIMEOUT);\n    const [alert, setAlert] = useState<null | { title: string; description: string }>(null);\n    const { refreshing } = useConfigContext();\n    const isLoading = useMemo(() => loading || refreshing, [loading, refreshing]);\n    const isSmAndUpContainer = useResponsiveContainer(containerQueries.up.sm);\n    const isXsAndDownContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    const columns = useTableColumns({\n        customColumns,\n        fields: FIELDS,\n        fieldsKeys: FIELDS_KEYS,\n        columnConfig: useMemo(\n            () => ({\n                dateAndReportType: { visible: isXsAndDownContainer },\n                createdAt: { visible: isSmAndUpContainer },\n                reportType: { visible: isSmAndUpContainer },\n                reportFile: { visible: true, position: isXsAndDownContainer ? 'right' : undefined },\n            }),\n            [isSmAndUpContainer, isXsAndDownContainer]\n        ),\n    });\n\n    const removeAlert = useCallback(() => {\n        setAlert(null);\n    }, []);\n\n    const EMPTY_TABLE_MESSAGE = {\n        title: 'reports.overview.errors.listEmpty',\n        message: ['common.errors.updateFilters'],\n    } satisfies { title: TranslationKey; message: TranslationKey | TranslationKey[] };\n\n    const errorDisplay = useMemo(\n        () => () => <DataOverviewError error={error} errorMessage={'reports.overview.errors.listUnavailable'} onContactSupport={onContactSupport} />,\n        [error, onContactSupport]\n    );\n\n    const errorIcon = useMemo(() => <Icon name=\"warning\" />, []);\n\n    const onDownloadErrorAlert = useMemo(\n        () => (error?: AdyenPlatformExperienceError) => {\n            const alertDetails: Partial<{ key: number; description: string; title: string }> = {};\n            switch (error?.errorCode) {\n                case '999_429_001':\n                    alertDetails.title = i18n.get('reports.overview.errors.download');\n                    alertDetails.description = i18n.get('reports.overview.errors.tooManyDownloads');\n                    break;\n                case '00_500':\n                default:\n                    alertDetails.title = i18n.get('reports.overview.errors.download');\n                    alertDetails.description = i18n.get('reports.overview.errors.retryDownload');\n                    break;\n            }\n            setAlert(alertDetails as { title: string; description: string });\n        },\n        [i18n]\n    );\n\n    if (loading) setAlert(null);\n\n    return (\n        <div className={BASE_CLASS}>\n            {alert && <Alert onClose={removeAlert} type={AlertTypeOption.WARNING} className={'adyen-pe-reports-table-alert'} {...alert} />}\n            <DataGrid\n                errorDisplay={errorDisplay}\n                error={error}\n                columns={columns}\n                data={data}\n                loading={isLoading}\n                outline={false}\n                emptyTableMessage={EMPTY_TABLE_MESSAGE}\n                customCells={{\n                    createdAt: ({ value }) => {\n                        if (!value) return null;\n                        return (\n                            value && (\n                                <time dateTime={value}>\n                                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                        {dateFormat(value, DATE_FORMAT_REPORTS)}\n                                    </Typography>\n                                </time>\n                            )\n                        );\n                    },\n                    dateAndReportType: ({ item }) => {\n                        return (\n                            <div className={DATE_TYPE_CLASS}>\n                                {item?.type && (\n                                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                                        {getReportType(i18n, item.type)}\n                                    </Typography>\n                                )}\n                                <time dateTime={item.createdAt}>\n                                    <Typography className={DATE_TYPE_DATE_SECTION_CLASS} el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                        {dateFormat(item.createdAt, DATE_FORMAT_REPORTS)}\n                                    </Typography>\n                                </time>\n                            </div>\n                        );\n                    },\n                    reportType: ({ item }) => {\n                        return (\n                            item?.type && (\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                    {getReportType(i18n, item.type)}\n                                </Typography>\n                            )\n                        );\n                    },\n                    reportFile: ({ item }) => {\n                        const queryParam = {\n                            query: { balanceAccountId: balanceAccountId, createdAt: item.createdAt, type: item.type },\n                        };\n                        return (\n                            <DownloadButton\n                                className={'adyen-pe-reports-table--download'}\n                                endpointName={'downloadReport'}\n                                disabled={frozen}\n                                requestParams={queryParam}\n                                onDownloadRequested={freeze}\n                                setError={onDownloadErrorAlert}\n                                errorDisplay={errorIcon}\n                                aria-label={i18n.get('reports.overview.list.controls.downloadReport.label')}\n                            />\n                        );\n                    },\n                }}\n            >\n                {showPagination && (\n                    <DataGrid.Footer>\n                        <Pagination\n                            {...paginationProps}\n                            ariaLabelKey=\"reports.overview.pagination.label\"\n                            limitSelectAriaLabelKey=\"reports.overview.pagination.controls.limitSelect.label\"\n                        />\n                    </DataGrid.Footer>\n                )}\n            </DataGrid>\n        </div>\n    );\n};\n","export const BASE_CLASS = 'adyen-pe-reports-overview';\nexport const EARLIEST_PAYOUT_SINCE_DATE = new Date('2024-04-16T00:00:00.000Z').toString();\n","import { useCallback, useEffect, useMemo } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { IBalanceAccountBase, IReport } from '../../../../../types';\nimport { isFunction } from '../../../../../utils';\nimport useBalanceAccountSelection from '../../../../../hooks/useBalanceAccountSelection';\nimport useDefaultOverviewFilterParams from '../../../../../hooks/useDefaultOverviewFilterParams';\nimport FilterBar, { FilterBarMobileSwitch, useFilterBarState } from '../../../../internal/FilterBar';\nimport DateFilter from '../../../../internal/FilterBar/filters/DateFilter/DateFilter';\nimport BalanceAccountSelector from '../../../../internal/FormFields/Select/BalanceAccountSelector';\nimport { DEFAULT_PAGE_LIMIT, LIMIT_OPTIONS } from '../../../../internal/Pagination/constants';\nimport { useCursorPaginatedRecords } from '../../../../internal/Pagination/hooks';\nimport { Header } from '../../../../internal/Header';\nimport { CustomDataRetrieved, ExternalUIComponentProps, FilterParam, ReportsOverviewComponentProps } from '../../../../types';\nimport { FIELDS, ReportsTable } from '../ReportsTable/ReportsTable';\nimport { BASE_CLASS, EARLIEST_PAYOUT_SINCE_DATE } from './constants';\nimport './ReportsOverview.scss';\nimport { useCustomColumnsData } from '../../../../../hooks/useCustomColumnsData';\nimport hasCustomField from '../../../../utils/customData/hasCustomField';\nimport mergeRecords from '../../../../utils/customData/mergeRecords';\n\nexport const ReportsOverview = ({\n    onFiltersChanged,\n    balanceAccounts,\n    allowLimitSelection = true,\n    preferredLimit = DEFAULT_PAGE_LIMIT,\n    isLoadingBalanceAccount,\n    onContactSupport,\n    hideTitle,\n    dataCustomization,\n}: ExternalUIComponentProps<\n    ReportsOverviewComponentProps & { balanceAccounts: IBalanceAccountBase[] | undefined; isLoadingBalanceAccount: boolean }\n>) => {\n    const { getReports: reportsEndpointCall } = useConfigContext().endpoints;\n    const { activeBalanceAccount, balanceAccountSelectionOptions, onBalanceAccountSelection } = useBalanceAccountSelection({ balanceAccounts });\n    const { defaultParams, nowTimestamp, refreshNowTimestamp } = useDefaultOverviewFilterParams('reports', activeBalanceAccount);\n\n    const getReports = useCallback(\n        async (pageRequestParams: Record<FilterParam | 'cursor', string>, signal?: AbortSignal) => {\n            const requestOptions = { signal, errorLevel: 'error' } as const;\n\n            return reportsEndpointCall!(requestOptions, {\n                query: {\n                    ...pageRequestParams,\n                    type: 'payout',\n                    createdSince:\n                        pageRequestParams[FilterParam.CREATED_SINCE] ?? defaultParams.current.defaultFilterParams[FilterParam.CREATED_SINCE],\n                    createdUntil:\n                        pageRequestParams[FilterParam.CREATED_UNTIL] ?? defaultParams.current.defaultFilterParams[FilterParam.CREATED_UNTIL],\n                    balanceAccountId: activeBalanceAccount?.id ?? '',\n                },\n            });\n        },\n        [activeBalanceAccount?.id, defaultParams, reportsEndpointCall]\n    );\n\n    // FILTERS\n    const filterBarState = useFilterBarState();\n    const _onFiltersChanged = useMemo(() => (isFunction(onFiltersChanged) ? onFiltersChanged : void 0), [onFiltersChanged]);\n    const preferredLimitOptions = useMemo(() => (allowLimitSelection ? LIMIT_OPTIONS : undefined), [allowLimitSelection]);\n\n    const { canResetFilters, error, fetching, filters, limit, limitOptions, records, resetFilters, updateFilters, updateLimit, ...paginationProps } =\n        useCursorPaginatedRecords<IReport, 'data', string, FilterParam>({\n            fetchRecords: getReports,\n            dataField: 'data',\n            filterParams: defaultParams.current.defaultFilterParams,\n            initialFiltersSameAsDefault: true,\n            onFiltersChanged: _onFiltersChanged,\n            preferredLimit,\n            preferredLimitOptions,\n            enabled: !!activeBalanceAccount?.id && !!reportsEndpointCall,\n        });\n\n    const mergeCustomData = useCallback(\n        ({ records, retrievedData }: { records: IReport[]; retrievedData: CustomDataRetrieved[] }) =>\n            mergeRecords(records, retrievedData, (modifiedRecord, record) => modifiedRecord.createdAt === record.createdAt),\n        []\n    );\n\n    const hasCustomColumn = useMemo(() => hasCustomField(dataCustomization?.list?.fields, FIELDS), [dataCustomization?.list?.fields]);\n    const { customRecords: reports, loadingCustomRecords } = useCustomColumnsData<IReport>({\n        records,\n        hasCustomColumn,\n        onDataRetrieve: dataCustomization?.list?.onDataRetrieve,\n        mergeCustomData,\n    });\n\n    useEffect(() => {\n        refreshNowTimestamp();\n    }, [filters, refreshNowTimestamp]);\n\n    return (\n        <div className={BASE_CLASS}>\n            <Header hideTitle={hideTitle} titleKey=\"reports.overview.title\" subtitleKey=\"reports.overview.generateInfo\">\n                <FilterBarMobileSwitch {...filterBarState} />\n            </Header>\n            <FilterBar {...filterBarState} ariaLabelKey=\"reports.overview.filters.label\">\n                <BalanceAccountSelector\n                    activeBalanceAccount={activeBalanceAccount}\n                    balanceAccountSelectionOptions={balanceAccountSelectionOptions}\n                    onBalanceAccountSelection={onBalanceAccountSelection}\n                />\n                <DateFilter\n                    canResetFilters={canResetFilters}\n                    defaultParams={defaultParams}\n                    filters={filters}\n                    nowTimestamp={nowTimestamp}\n                    refreshNowTimestamp={refreshNowTimestamp}\n                    sinceDate={EARLIEST_PAYOUT_SINCE_DATE}\n                    timezone={'UTC'}\n                    updateFilters={updateFilters}\n                />\n            </FilterBar>\n            <ReportsTable\n                balanceAccountId={activeBalanceAccount?.id}\n                loading={fetching || isLoadingBalanceAccount || !balanceAccounts || !activeBalanceAccount || loadingCustomRecords}\n                data={dataCustomization?.list?.onDataRetrieve ? reports : records}\n                showPagination={true}\n                limit={limit}\n                limitOptions={limitOptions}\n                onContactSupport={onContactSupport}\n                onLimitSelection={updateLimit}\n                error={error as AdyenPlatformExperienceError}\n                customColumns={dataCustomization?.list?.fields}\n                {...paginationProps}\n            />\n        </div>\n    );\n};\n","export const BASE_CLASS = 'adyen-pe-reports-overview-container';\n","import useBalanceAccounts from '../../../../../hooks/useBalanceAccounts';\nimport DataOverviewContainer from '../../../../internal/DataOverviewContainer/DataOverviewContainer';\nimport type { ExternalUIComponentProps, ReportsOverviewComponentProps } from '../../../../types';\nimport { ReportsOverview } from '../ReportsOverview/ReportsOverview';\nimport { BASE_CLASS } from './constants';\n\nfunction ReportsOverviewContainer({ ...props }: ExternalUIComponentProps<ReportsOverviewComponentProps>) {\n    const { balanceAccounts, isBalanceAccountIdWrong, isFetching, error } = useBalanceAccounts(props.balanceAccountId);\n\n    return (\n        <DataOverviewContainer\n            balanceAccountsError={error}\n            className={BASE_CLASS}\n            errorMessage={'reports.overview.errors.unavailable'}\n            isBalanceAccountIdWrong={isBalanceAccountIdWrong}\n            onContactSupport={props.onContactSupport}\n        >\n            <ReportsOverview {...props} balanceAccounts={balanceAccounts} isLoadingBalanceAccount={isFetching} />\n        </DataOverviewContainer>\n    );\n}\nexport default ReportsOverviewContainer;\n","import { _UIComponentProps, ExternalComponentType, ReportsOverviewComponentProps } from '../../types';\nimport Reports from './components/ReportsOverviewContainer/ReportsOverviewContainer';\nimport UIElement from '../UIElement/UIElement';\n\nexport class ReportsElement extends UIElement<ReportsOverviewComponentProps> {\n    public static type: ExternalComponentType = 'reports';\n\n    constructor(props: _UIComponentProps<ReportsOverviewComponentProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n    }\n\n    public componentToRender = () => {\n        return <Reports {...this.props} />;\n    };\n}\n\nexport default ReportsElement;\n","import { BaseEventProperties } from '../../../core/Analytics/analytics/user-events';\n\nexport const CAPITAL_OVERVIEW_CLASS_NAMES = {\n    base: 'adyen-pe-capital-overview',\n    title: 'adyen-pe-capital-overview__title',\n    skeleton: 'adyen-pe-capital-overview__skeleton',\n    headerSkeleton: 'adyen-pe-capital-overview__header-skeleton',\n    skeletonContainer: 'adyen-pe-capital-overview__header-skeleton-container',\n    preQualifiedGrant: 'adyen-pe-capital-overview__pre-qualified-grant',\n    preQualifiedGrantButton: 'adyen-pe-capital-overview__pre-qualified-grant-review-button',\n    errorContainer: 'adyen-pe-capital-overview__error-container',\n};\n\nexport const sharedCapitalOverviewAnalyticsEventProperties = {\n    componentName: 'capitalOverview' satisfies BaseEventProperties['componentName'],\n    category: 'Capital overview component',\n} as const;\n","import useCoreContext from '../../../../core/Context/useCoreContext';\nimport Typography from '../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../internal/Typography/types';\nimport { CapitalHeader } from '../../../internal/CapitalHeader';\n\nconst Unqualified = ({ hideTitle }: { hideTitle?: boolean }) => {\n    const { i18n, getImageAsset } = useCoreContext();\n\n    return (\n        <>\n            <CapitalHeader hideTitle={hideTitle} titleKey={'capital.overview.common.titles.qualificationIntro'} />\n            <div className={'adyen-pe-capital-overview__unqualified-state'}>\n                <div className=\"adyen-pe-capital-overview__unqualified-state-img\">\n                    <img srcSet={getImageAsset?.({ name: 'generic-use-first-touch' })} alt=\"\" />\n                </div>\n                <Typography el={TypographyElement.PARAGRAPH} variant={TypographyVariant.BODY} large>\n                    {i18n.get('capital.overview.unqualified.soonQualifyInfo')}\n                </Typography>\n            </div>\n        </>\n    );\n};\n\nexport default Unqualified;\n","import { useCallback } from 'preact/hooks';\nimport { CAPITAL_OVERVIEW_CLASS_NAMES, sharedCapitalOverviewAnalyticsEventProperties } from '../constants';\nimport { useLandedPageEvent } from '../../../../hooks/useAnalytics/useLandedPageEvent';\nimport InfoBox from '../../../internal/InfoBox';\nimport Button from '../../../internal/Button/Button';\nimport useAnalyticsContext from '../../../../core/Context/analytics/useAnalyticsContext';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport { IDynamicOffersConfig } from '../../../../types';\nimport { CapitalHeader } from '../../../internal/CapitalHeader';\nimport Typography from '../../../internal/Typography/Typography';\nimport { TypographyVariant } from '../../../internal/Typography/types';\n\nconst sharedAnalyticsEventProperties = {\n    ...sharedCapitalOverviewAnalyticsEventProperties,\n    subCategory: 'Prequalified',\n} as const;\n\nconst PreQualifiedIntro = ({\n    dynamicOfferConfig,\n    hideTitle,\n    onOfferOptionsRequest,\n}: {\n    dynamicOfferConfig: Required<IDynamicOffersConfig>;\n    hideTitle?: boolean;\n    onOfferOptionsRequest: () => void;\n}) => {\n    const { i18n } = useCoreContext();\n    const userEvents = useAnalyticsContext();\n\n    const onOfferOptionsRequestWithTracking = useCallback<typeof onOfferOptionsRequest>(() => {\n        try {\n            return onOfferOptionsRequest();\n        } finally {\n            userEvents.addEvent?.('Clicked button', { ...sharedAnalyticsEventProperties, label: 'See options' });\n        }\n    }, [onOfferOptionsRequest, userEvents]);\n\n    useLandedPageEvent({ ...sharedAnalyticsEventProperties, label: 'Capital overview' });\n\n    return (\n        <>\n            <CapitalHeader hideTitle={hideTitle} titleKey={'capital.overview.common.titles.qualificationIntro'} />\n            <div className={CAPITAL_OVERVIEW_CLASS_NAMES.preQualifiedGrant}>\n                <InfoBox>\n                    <Typography variant={TypographyVariant.BODY}>\n                        {i18n.get('capital.overview.prequalified.alreadyQualifyInfo.part1')}\n                        <strong>\n                            {i18n.get('capital.overview.prequalified.alreadyQualifyInfo.part2', {\n                                values: {\n                                    amount: i18n.amount(dynamicOfferConfig.maxAmount.value, dynamicOfferConfig.maxAmount.currency, {\n                                        minimumFractionDigits: 0,\n                                    }),\n                                },\n                            })}\n                        </strong>\n                    </Typography>\n                </InfoBox>\n                <Button className={CAPITAL_OVERVIEW_CLASS_NAMES.preQualifiedGrantButton} onClick={onOfferOptionsRequestWithTracking}>\n                    {i18n.get('capital.overview.prequalified.actions.seeOptions')}\n                </Button>\n            </div>\n        </>\n    );\n};\n\nexport default PreQualifiedIntro;\n","import { IDynamicOffersConfig, IGrant } from '../../../../../types';\nimport PreQualifiedIntro from '../PreQualifiedIntro';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport { CapitalOffer } from '../../../CapitalOffer/components/CapitalOffer/CapitalOffer';\n\ntype PreQualifiedProps = {\n    dynamicOffer: Required<IDynamicOffersConfig>;\n    hideTitle: boolean | undefined;\n    onFundsRequest: (data: IGrant) => void;\n    onOfferDismiss?: () => void;\n    onOfferOptionsRequest?: () => void;\n    skipPreQualifiedIntro?: boolean;\n};\n\nexport const PreQualified = ({\n    hideTitle,\n    dynamicOffer,\n    skipPreQualifiedIntro,\n    onOfferOptionsRequest,\n    onFundsRequest,\n    onOfferDismiss,\n}: PreQualifiedProps) => {\n    const [state, setState] = useState<'intro' | 'capitalOffer'>(skipPreQualifiedIntro ? 'capitalOffer' : 'intro');\n\n    const handleOfferOptionsRequest = useCallback(() => {\n        onOfferOptionsRequest ? onOfferOptionsRequest() : setState('capitalOffer');\n    }, [onOfferOptionsRequest]);\n\n    const isOfferDismissButtonVisible = useMemo(() => !skipPreQualifiedIntro || !!onOfferDismiss, [onOfferDismiss, skipPreQualifiedIntro]);\n    const handleOfferDismiss = useCallback(() => {\n        onOfferDismiss ? onOfferDismiss() : setState('intro');\n    }, [onOfferDismiss]);\n\n    return (\n        <>\n            {state === 'intro' ? (\n                <PreQualifiedIntro hideTitle={hideTitle} dynamicOfferConfig={dynamicOffer} onOfferOptionsRequest={handleOfferOptionsRequest} />\n            ) : (\n                <CapitalOffer\n                    onFundsRequest={onFundsRequest}\n                    onOfferDismiss={isOfferDismissButtonVisible ? handleOfferDismiss : undefined}\n                    externalDynamicOffersConfig={dynamicOffer}\n                />\n            )}\n        </>\n    );\n};\n","export const BASE_CLASS = 'adyen-pe-base-list';\n","import './BaseList.scss';\nimport { BASE_CLASS } from './constants';\nimport { FC } from 'preact/compat';\nimport { BaseListProps } from './types';\nimport cx from 'classnames';\n\nexport const BaseList: FC<BaseListProps> = ({ children, classNames }) => {\n    return <ul className={cx(BASE_CLASS, [classNames])}>{children}</ul>;\n};\n","import { useMemo } from 'preact/hooks';\nimport cx from 'classnames';\nimport './ProgressBar.scss';\nimport Typography from '../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\nimport { clamp } from '../../../utils';\nimport { Tooltip } from '../Tooltip/Tooltip';\n\ninterface ProgressBarProps {\n    /**\n     * Maximum value for the progress bar.\n     *\n     * @default 1\n     */\n    max?: number;\n\n    /**\n     * Current value of the progress bar.\n     */\n    value: number;\n\n    /**\n     * Labels for the progress bar\n     */\n    labels?: {\n        /**\n         * The label that describes the current value of the progress bar.\n         */\n        current?: string;\n\n        /**\n         * The label that describes the maximum value of the progress bar.\n         */\n        max?: string;\n\n        /**\n         * Accessible label for the progress bar (optional).\n         */\n        ariaLabel?: string;\n    };\n\n    /**\n     * Tooltips for the progress bar segments.\n     */\n    tooltips?: {\n        /**\n         * Tooltip content to describe the filled portion of the progress bar (progress).\n         */\n        progress?: string;\n\n        /**\n         * Tooltip content to describe the remaining portion of the progress bar.\n         */\n        remaining?: string;\n    };\n\n    /**\n     * Optional custom class name to apply additional styles to the progress bar component.\n     */\n    className?: string;\n}\n\n/**\n * Accessible custom ProgressBar component\n * @param props - ProgressBarProps\n */\nconst ProgressBar = ({ max = 1, value, labels, tooltips, className }: ProgressBarProps) => {\n    const percentage = useMemo(() => clamp(0, (value * 100) / max, 100), [value, max]);\n    const shouldDisplayLegend = !!(labels?.current || labels?.max);\n    const ariaLabel = labels?.ariaLabel ?? (labels?.current ? `${labels.current}: ${value}` : `${value}/${max}`);\n\n    return (\n        <div\n            role=\"progressbar\"\n            aria-valuenow={value}\n            aria-valuemin={0}\n            aria-valuemax={max}\n            aria-valuetext={`${percentage}%`}\n            aria-label={ariaLabel}\n            className={cx('adyen-pe-progress-bar', className)}\n        >\n            <div className=\"adyen-pe-progress-bar__track\" role=\"presentation\">\n                <div className=\"adyen-pe-progress-bar__track-background\"></div>\n                <ProgressBarSegment\n                    tooltipContent={tooltips?.progress}\n                    title={labels?.current}\n                    percentage={percentage}\n                    className=\"adyen-pe-progress-bar__track-fill\"\n                />\n                <ProgressBarSegment\n                    tooltipContent={tooltips?.remaining}\n                    title={labels?.max}\n                    percentage={100 - percentage}\n                    className=\"adyen-pe-progress-bar__track-remaining\"\n                />\n            </div>\n\n            {shouldDisplayLegend && (\n                <div className=\"adyen-pe-progress-bar__legend\" aria-hidden=\"true\">\n                    {labels.current && (\n                        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION} className=\"adyen-pe-progress-bar__legend-label\">\n                            {labels.current}\n                        </Typography>\n                    )}\n                    {labels.max && (\n                        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION} className=\"adyen-pe-progress-bar__legend-label\">\n                            {labels.max}\n                        </Typography>\n                    )}\n                </div>\n            )}\n        </div>\n    );\n};\ninterface ProgressBarSegmentProps {\n    tooltipContent?: string;\n    title?: string;\n    percentage: number;\n    className: string;\n}\nconst ProgressBarSegment = ({ tooltipContent, title, percentage, className }: ProgressBarSegmentProps) => {\n    const getContent = (title?: string) => <div className={className} aria-label={title} style={{ width: `${percentage}%` }} />;\n    return tooltipContent ? <Tooltip content={tooltipContent}>{getContent(title)}</Tooltip> : getContent(title);\n};\n\nexport default ProgressBar;\n","export const GRANT_ITEM_CLASS_NAMES = {\n    base: 'adyen-pe-grant-item',\n    actionsBar: 'adyen-pe-grant-item__actions-bar',\n    alert: 'adyen-pe-grant-item__alert',\n    cardContent: 'adyen-pe-grant-item__card-content',\n    grantID: 'adyen-pe-grant-item__grant-id',\n    mainActionBtn: 'adyen-pe-grant-item__main-action-button',\n    progressBar: 'adyen-pe-grant-item__progress-bar',\n    statusContainer: 'adyen-pe-grant-item__status-container',\n    textSecondary: 'adyen-pe-grant-item__text--secondary',\n};\n","import { IGrant, IGrantStatus } from '../../../../../types';\nimport { TranslationKey } from '../../../../../translations';\nimport { TagVariant } from '../../../../internal/Tag/types';\nimport { GrantConfig } from './types';\n\nconst getHasDetails = (status: IGrantStatus) => status === 'Active';\n\nconst getIsBackgroundFilled = (status: IGrantStatus) => status === 'Repaid';\n\nconst getAmountLabelKey = (status: IGrantStatus): TranslationKey =>\n    status === 'Active' ? 'capital.overview.grants.item.amounts.remaining' : 'capital.overview.grants.item.amounts.requestedFunds';\n\nconst getAmount = (grant: IGrant) => (grant.status === 'Active' ? grant.remainingTotalAmount : grant.grantAmount);\n\nconst getStatusKey = ({ status, missingActions }: IGrant): TranslationKey | undefined => {\n    switch (status) {\n        case 'Active':\n            return undefined;\n        case 'Failed':\n            return 'capital.overview.grants.common.statuses.failed';\n        case 'Pending':\n            return missingActions && missingActions.length\n                ? 'capital.overview.grants.common.statuses.actionNeeded'\n                : 'capital.overview.grants.common.statuses.pending';\n        case 'Repaid':\n            return 'capital.overview.grants.common.statuses.fullyRepaid';\n        case 'Revoked':\n            return 'capital.overview.grants.common.statuses.revoked';\n        case 'WrittenOff':\n            return 'capital.overview.grants.common.statuses.writtenOff';\n    }\n};\n\nconst getStatusTagVariant = ({ status, missingActions }: IGrant): TagVariant => {\n    switch (status) {\n        case 'Failed':\n            return TagVariant.ERROR;\n        case 'Pending':\n            return missingActions?.length ? TagVariant.WARNING : TagVariant.DEFAULT;\n        case 'Repaid':\n            return TagVariant.LIGHT;\n        case 'Revoked':\n        case 'WrittenOff':\n            return TagVariant.WARNING;\n        default:\n            return TagVariant.DEFAULT;\n    }\n};\n\nconst getRepaymentPeriodEndDate = (repaymentPeriodLeft: number) => {\n    const today = new Date();\n    const endDate = new Date();\n    endDate.setDate(today.getDate() + repaymentPeriodLeft);\n    return endDate;\n};\n\nexport const getStatusTooltipKey = (grant: IGrant): TranslationKey | undefined => {\n    const pendingToS = grant.missingActions?.some(action => action.type === 'signToS') || false;\n\n    switch (grant.status) {\n        case 'Pending':\n            return grant.missingActions?.length\n                ? pendingToS\n                    ? 'capital.overview.grants.common.statuses.pending.description.signTerms'\n                    : undefined\n                : 'capital.overview.grants.common.statuses.pending.description.awaitingFunds';\n        case 'Failed':\n            return 'capital.overview.grants.common.statuses.failed.description';\n        case 'WrittenOff':\n            return 'capital.overview.grants.common.statuses.writtenOff.description';\n        case 'Revoked':\n            return 'capital.overview.grants.common.statuses.revoked.description';\n        default:\n            return undefined;\n    }\n};\n\nexport const getGrantConfig = (grant: IGrant): GrantConfig => {\n    const isGrantActive = grant.status === 'Active';\n    const isGrantPending = grant.status === 'Pending';\n\n    return {\n        amount: getAmount(grant),\n        amountLabelKey: getAmountLabelKey(grant.status),\n        hasAlerts: isGrantPending,\n        hasDetails: getHasDetails(grant.status),\n        hasUnscheduledRepaymentDetails: isGrantActive && !!grant.unscheduledRepaymentAccounts?.length,\n        // The grant revocation account details is currently not ready to be rendered.\n        // A future iteration of this component might include revocation account details.\n        // Only then should the following line be uncommented.\n        //\n        // hasRevocationDetails: isGrantActive && grant.revocationAccount !== undefined,\n        isAmountColorSecondary: !isGrantActive,\n        isBackgroundFilled: getIsBackgroundFilled(grant.status),\n        isGrantIdVisible: !isGrantActive,\n        isLabelColorSecondary: isGrantActive,\n        isProgressBarVisible: isGrantActive,\n        repaymentPeriodEndDate: getRepaymentPeriodEndDate(grant.repaymentPeriodLeft),\n        statusKey: getStatusKey(grant),\n        statusTagVariant: getStatusTagVariant(grant),\n        statusTooltipKey: getStatusTooltipKey(grant),\n    };\n};\n","export const GRANT_DETAILS_CLASS_NAMES = {\n    base: 'adyen-pe-grant-details',\n    content: 'adyen-pe-grant-details__content',\n    header: 'adyen-pe-grant-details__header',\n    label: 'adyen-pe-grant-details__label',\n};\n","import { FunctionalComponent } from 'preact';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { GRANT_DETAILS_CLASS_NAMES } from './constants';\nimport { GrantDetailsProps } from './types';\nimport './GrantDetails.scss';\nimport StructuredList from '../../../../internal/StructuredList';\nimport { StructuredListItem } from '../../../../internal/StructuredList/types';\nimport { getPercentage } from '../../../CapitalOffer/components/utils/utils';\nimport { Translation } from '../../../../internal/Translation';\nimport { Tooltip } from '../../../../internal/Tooltip/Tooltip';\nimport { CAPITAL_REPAYMENT_FREQUENCY } from '../../../../constants';\n\nexport const GrantDetails: FunctionalComponent<GrantDetailsProps> = ({ grant }) => {\n    const { i18n } = useCoreContext();\n    const formatAmount = useCallback((amount: { value: number; currency: string }) => i18n.amount(amount.value, amount.currency), [i18n]);\n    const structuredListItems = useMemo<StructuredListItem[]>(() => {\n        const maximumRepaymentPeriodMonths = grant.maximumRepaymentPeriodDays ? Math.ceil(grant.maximumRepaymentPeriodDays / 30) : null;\n        const items: StructuredListItem[] = [\n            {\n                key: 'capital.common.fields.remainingAmount',\n                value: i18n.amount(grant.remainingGrantAmount.value, grant.remainingGrantAmount.currency),\n            },\n            { key: 'capital.common.fields.remainingFees', value: formatAmount(grant.remainingFeesAmount) },\n            { key: 'capital.common.fields.repaidAmount', value: formatAmount(grant.repaidGrantAmount) },\n            { key: 'capital.common.fields.repaidFees', value: formatAmount(grant.repaidFeesAmount) },\n            {\n                key: 'capital.common.fields.dailyRepaymentRate',\n                value: `${i18n.get('capital.common.values.percentage', {\n                    values: { percentage: getPercentage(grant.repaymentRate) },\n                })}`,\n            },\n            {\n                key: 'capital.common.fields.expectedRepaymentPeriod',\n                value: i18n.get('capital.common.values.daysWithDaysLeft', {\n                    values: {\n                        days: grant.expectedRepaymentPeriodDays,\n                        daysLeft: grant.repaymentPeriodLeft,\n                    },\n                }),\n            },\n            { key: 'capital.common.fields.totalFees', value: formatAmount(grant.feesAmount) },\n            { key: 'capital.common.fields.totalRepaymentAmount', value: formatAmount(grant.totalAmount) },\n            { key: 'capital.common.fields.repaymentThreshold', value: formatAmount(grant.thresholdAmount) },\n            { key: 'capital.common.fields.grantID', value: grant.id },\n            { key: 'capital.common.fields.accountDescription', value: grant.balanceAccountDescription },\n            { key: 'capital.common.fields.accountID', value: grant.balanceAccountCode },\n        ];\n\n        if (maximumRepaymentPeriodMonths) {\n            items.splice(5, 0, {\n                key: 'capital.common.fields.maximumRepaymentPeriod',\n                value: i18n.get('capital.common.values.numberOfMonths', { values: { months: maximumRepaymentPeriodMonths } }),\n            });\n        }\n\n        return items;\n    }, [grant, formatAmount, i18n]);\n\n    return (\n        <div className={GRANT_DETAILS_CLASS_NAMES.base}>\n            <div className={GRANT_DETAILS_CLASS_NAMES.content}>\n                <div className={GRANT_DETAILS_CLASS_NAMES.header}>\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                        <Typography el={TypographyElement.PARAGRAPH} variant={TypographyVariant.BODY}>\n                            <Translation\n                                translationKey=\"capital.overview.grants.item.details.requestedFunds\"\n                                fills={{\n                                    amount: (\n                                        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} strongest>\n                                            {i18n.amount(grant.grantAmount.value, grant.grantAmount.currency)}\n                                        </Typography>\n                                    ),\n                                }}\n                            />\n                        </Typography>\n                    </Typography>\n                </div>\n                <StructuredList\n                    renderLabel={(val, key) =>\n                        key === 'capital.common.fields.repaymentThreshold' ? (\n                            <Tooltip\n                                isUnderlineVisible\n                                content={i18n.get('capital.common.fields.repaymentThreshold.description', {\n                                    values: { days: CAPITAL_REPAYMENT_FREQUENCY },\n                                })}\n                            >\n                                <span>\n                                    <Typography\n                                        className={GRANT_DETAILS_CLASS_NAMES.label}\n                                        el={TypographyElement.SPAN}\n                                        variant={TypographyVariant.CAPTION}\n                                    >\n                                        {val}\n                                    </Typography>\n                                </span>\n                            </Tooltip>\n                        ) : (\n                            <Typography className={GRANT_DETAILS_CLASS_NAMES.label} el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION}>\n                                {val}\n                            </Typography>\n                        )\n                    }\n                    renderValue={val => (\n                        <Typography el={TypographyElement.SPAN} stronger variant={TypographyVariant.CAPTION}>\n                            {val}\n                        </Typography>\n                    )}\n                    items={structuredListItems}\n                />\n            </div>\n        </div>\n    );\n};\n","export const GRANT_ACTION_CLASS_NAMES = {\n    button: 'adyen-pe-grant-action__button',\n    buttonLabel: 'adyen-pe-grant-action__button-label',\n    actionsContainer: 'adyen-pe-grant-action__actions-container',\n    actionsInformation: 'adyen-pe-grant-action__actions-information',\n};\n","/**\n * Gets the href from the topmost window (useful when we're inside an iframe).\n *\n * @returns The href from the topmost window\n */\nexport const getTopWindowHref = () => {\n    // To get the top level href\n    return window.top?.location.href || window.location.href;\n};\n\n/**\n * Sets the href of the topmost window (useful when we're inside an iframe)\n *\n * @param href - The href value to be set\n */\nexport const setTopWindowHref = (href: string) => {\n    if (window.top) {\n        // To set the top level href (useful when component is rendered inside an iframe)\n        window.top.location.href = href;\n    } else {\n        window.location.href = href;\n    }\n};\n","import { FunctionalComponent } from 'preact';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport { DATE_FORMAT_MISSING_ACTION } from '../../../../../constants';\nimport { GRANT_ACTION_CLASS_NAMES } from './constants';\nimport './GrantActions.scss';\nimport Alert from '../../../../internal/Alert/Alert';\nimport { AlertTypeOption } from '../../../../internal/Alert/types';\nimport Button from '../../../../internal/Button';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport { getTopWindowHref, setTopWindowHref } from './utils';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { IGrant } from '../../../../../types';\nimport useMutation from '../../../../../hooks/useMutation/useMutation';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { sharedCapitalOverviewAnalyticsEventProperties } from '../../constants';\n\ntype ActionType = NonNullable<IGrant['missingActions']>[number]['type'];\n\nexport const GrantActions: FunctionalComponent<{ missingActions: IGrant['missingActions']; offerExpiresAt?: string; className?: string }> = ({\n    missingActions = [],\n    offerExpiresAt,\n    className,\n}) => {\n    const { i18n, updateCore } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting();\n    const { endpoints } = useConfigContext();\n\n    const userEvents = useAnalyticsContext();\n\n    const ACTION_CONFIG = useMemo(\n        () =>\n            ({\n                signToS: {\n                    getTitle: (formattedDate: string | undefined) =>\n                        formattedDate\n                            ? i18n.get('capital.overview.grants.item.alerts.signTermsAndConditionsBy', {\n                                  values: { date: formattedDate },\n                              })\n                            : i18n.get('capital.overview.grants.item.alerts.signTermsAndConditions'),\n                    buttonLabelKey: 'capital.overview.grants.item.actions.viewTermsAndConditions',\n                    eventLabel: 'Go to terms & conditions button clicked',\n                },\n                AnaCredit: {\n                    getTitle: (formattedDate: string | undefined) =>\n                        formattedDate\n                            ? i18n.get('capital.overview.grants.item.alerts.actionNeededBy', {\n                                  values: { date: formattedDate },\n                              })\n                            : i18n.get('capital.overview.grants.item.alerts.actionNeeded'),\n                    buttonLabelKey: 'capital.overview.grants.item.actions.submitInformation',\n                    eventLabel: 'Submit information for AnaCredit button',\n                },\n            }) as const,\n        [i18n]\n    );\n\n    // Use local state to track which action is loading\n    const [loadingAction, setLoadingAction] = useState<ActionType | null>(null);\n\n    const onRedirect = useCallback((data: { url: string } | undefined) => {\n        if (data?.url) {\n            setTopWindowHref(data.url);\n        } else {\n            // If the request was successful but no URL was returned, reset loading state.\n            setLoadingAction(null);\n        }\n    }, []);\n\n    const actionMutation = useMutation({\n        queryFn: (actionType: ActionType) => {\n            let endpointByAction = null;\n\n            switch (actionType) {\n                case 'signToS':\n                    endpointByAction = endpoints.signToSActionDetails;\n                    break;\n                case 'AnaCredit':\n                    endpointByAction = endpoints.anaCreditActionDetails;\n                    break;\n                default:\n                    break;\n            }\n\n            const endpoint = endpointByAction;\n\n            const callbackQuery = {\n                query: { redirectUrl: getTopWindowHref(), locale: i18n.locale },\n            };\n\n            return endpoint?.(EMPTY_OBJECT, callbackQuery);\n        },\n        options: {\n            onSuccess: onRedirect,\n            // Reset the loading state when the mutation finishes (success or error)\n            onError: () => {\n                setLoadingAction(null);\n            },\n        },\n    });\n\n    const formattedExpiryDate = useMemo(\n        () => (offerExpiresAt ? dateFormat(offerExpiresAt, DATE_FORMAT_MISSING_ACTION) : undefined),\n        [dateFormat, offerExpiresAt]\n    );\n\n    const logMissingActionEvent = useCallback(\n        (label: string) => {\n            userEvents.addEvent?.('Clicked link', {\n                ...sharedCapitalOverviewAnalyticsEventProperties,\n                subCategory: 'Missing action',\n                label,\n            });\n        },\n        [userEvents]\n    );\n\n    if (actionMutation.error) {\n        return (\n            <Alert\n                className={className}\n                type={AlertTypeOption.CRITICAL}\n                title={i18n.get('capital.overview.grants.item.alerts.somethingWentWrong')}\n                description={\n                    <Button className={GRANT_ACTION_CLASS_NAMES.button} onClick={updateCore}>\n                        {i18n.get('common.actions.refresh.labels.default')}\n                    </Button>\n                }\n            />\n        );\n    }\n\n    if (!missingActions.length) {\n        return null;\n    }\n\n    if (missingActions.length > 1) {\n        return (\n            <Alert\n                className={className}\n                type={AlertTypeOption.WARNING}\n                title={i18n.get('capital.overview.grants.item.alerts.actionNeededMany')}\n                description={\n                    <div className={GRANT_ACTION_CLASS_NAMES.actionsInformation}>\n                        <ol className={GRANT_ACTION_CLASS_NAMES.actionsContainer}>\n                            {missingActions.map(action => {\n                                const config = ACTION_CONFIG[action.type];\n                                const isLoading = loadingAction === action.type;\n                                return (\n                                    <li key={action.type}>\n                                        <Button\n                                            className={GRANT_ACTION_CLASS_NAMES.button}\n                                            // Set the loading action before mutating\n                                            onClick={() => {\n                                                try {\n                                                    setLoadingAction(action.type);\n                                                    void actionMutation.mutate(action.type);\n                                                } finally {\n                                                    logMissingActionEvent(config.eventLabel);\n                                                }\n                                            }}\n                                            // Disable all if any is loading\n                                            disabled={isLoading || actionMutation.isLoading}\n                                            state={isLoading ? 'loading' : undefined}\n                                            variant={ButtonVariant.TERTIARY}\n                                            aria-label={i18n.get(config.buttonLabelKey)}\n                                        >\n                                            <span className={GRANT_ACTION_CLASS_NAMES.buttonLabel}>{i18n.get(config.buttonLabelKey)}</span>\n                                        </Button>\n                                    </li>\n                                );\n                            })}\n                        </ol>\n                        {formattedExpiryDate ? (\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} strongest>\n                                {i18n.get('capital.overview.grants.item.alerts.offerExpiration', { values: { date: formattedExpiryDate } })}\n                            </Typography>\n                        ) : null}\n                    </div>\n                }\n            />\n        );\n    }\n\n    const singleAction = missingActions[0]!;\n    const config = ACTION_CONFIG[singleAction.type];\n\n    return (\n        <Alert\n            className={className}\n            type={AlertTypeOption.WARNING}\n            title={config.getTitle(formattedExpiryDate)}\n            description={\n                <Button\n                    className={GRANT_ACTION_CLASS_NAMES.button}\n                    onClick={() => {\n                        try {\n                            setLoadingAction(singleAction.type);\n                            void actionMutation.mutate(singleAction.type);\n                        } finally {\n                            logMissingActionEvent(config.eventLabel);\n                        }\n                    }}\n                    disabled={!!loadingAction}\n                    state={loadingAction ? 'loading' : undefined}\n                    variant={ButtonVariant.TERTIARY}\n                    aria-label={i18n.get(config.buttonLabelKey)}\n                >\n                    <span className={GRANT_ACTION_CLASS_NAMES.buttonLabel}>{i18n.get(config.buttonLabelKey)}</span>\n                </Button>\n            }\n        />\n    );\n};\n","import { FunctionalComponent } from 'preact';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport cx from 'classnames';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { Tag } from '../../../../internal/Tag/Tag';\nimport ProgressBar from '../../../../internal/ProgressBar';\nimport { DATE_FORMAT_CAPITAL_OVERVIEW } from '../../../../../constants';\nimport { GRANT_ITEM_CLASS_NAMES } from './constants';\nimport { getGrantConfig } from './utils';\nimport { GrantItemProps } from './types';\nimport './GrantItem.scss';\nimport { GrantDetails } from '../GrantDetails/GrantDetails';\nimport CopyText from '../../../../internal/CopyText/CopyText';\nimport { Tooltip } from '../../../../internal/Tooltip/Tooltip';\nimport Alert from '../../../../internal/Alert/Alert';\nimport Button from '../../../../internal/Button';\nimport { AlertTypeOption } from '../../../../internal/Alert/types';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport ExpandableCard from '../../../../internal/ExpandableCard/ExpandableCard';\nimport { GrantActions } from '../GrantActions/GrantActions';\nimport { sharedCapitalOverviewAnalyticsEventProperties } from '../../constants';\nimport { uniqueId } from '../../../../../utils';\nimport { Translation } from '../../../../internal/Translation';\n\nexport const GrantItem: FunctionalComponent<GrantItemProps> = ({ grant, showDetails }) => {\n    const { i18n } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting();\n    const userEvents = useAnalyticsContext();\n\n    const grantConfig = useMemo(() => getGrantConfig(grant), [grant]);\n\n    const showUnscheduledRepaymentAccounts = useCallback(() => {\n        try {\n            return showDetails?.('unscheduledRepayment');\n        } finally {\n            userEvents.addEvent?.('Clicked button', {\n                ...sharedCapitalOverviewAnalyticsEventProperties,\n                subCategory: 'Grant active',\n                label: 'Send repayment',\n            });\n        }\n    }, [showDetails, userEvents]);\n\n    const elementIds = useMemo(\n        () =>\n            ({\n                grantAmount: uniqueId('elem'),\n                grantAmountLabel: uniqueId('elem'),\n                grantStatus: uniqueId('elem'),\n                termEnds: uniqueId('elem'),\n            }) as const,\n        []\n    );\n\n    const grantOverview = useMemo(\n        () => (\n            <div className={GRANT_ITEM_CLASS_NAMES.cardContent}>\n                <div className={GRANT_ITEM_CLASS_NAMES.statusContainer}>\n                    <Typography\n                        id={elementIds.grantAmountLabel}\n                        variant={TypographyVariant.CAPTION}\n                        className={cx({ [GRANT_ITEM_CLASS_NAMES.textSecondary]: grantConfig.isLabelColorSecondary })}\n                        testId={'grant-amount-label'}\n                    >\n                        {i18n.get(grantConfig.amountLabelKey)}\n                    </Typography>\n                    <div id={elementIds.grantStatus}>\n                        {grant.status === 'Active' ? (\n                            <>\n                                <Typography id={elementIds.termEnds} variant={TypographyVariant.CAPTION} el={TypographyElement.SPAN}>\n                                    <Translation\n                                        translationKey=\"capital.overview.grants.item.termEnds\"\n                                        fills={{\n                                            date: (\n                                                <time\n                                                    aria-labelledBy={elementIds.termEnds}\n                                                    dateTime={grantConfig.repaymentPeriodEndDate.toISOString()}\n                                                >\n                                                    <Typography variant={TypographyVariant.CAPTION} stronger el={TypographyElement.SPAN}>\n                                                        {dateFormat(grantConfig.repaymentPeriodEndDate, DATE_FORMAT_CAPITAL_OVERVIEW)}\n                                                    </Typography>\n                                                </time>\n                                            ),\n                                        }}\n                                    />\n                                </Typography>\n                            </>\n                        ) : grantConfig.statusKey ? (\n                            grantConfig.statusTooltipKey ? (\n                                <Tooltip content={i18n.get(grantConfig.statusTooltipKey)}>\n                                    <div>\n                                        <Tag label={i18n.get(grantConfig.statusKey)} variant={grantConfig.statusTagVariant} />\n                                    </div>\n                                </Tooltip>\n                            ) : (\n                                <Tag label={i18n.get(grantConfig.statusKey)} variant={grantConfig.statusTagVariant} />\n                            )\n                        ) : null}\n                    </div>\n                </div>\n                <Typography\n                    id={elementIds.grantAmount}\n                    variant={TypographyVariant.TITLE}\n                    medium\n                    className={cx({\n                        [GRANT_ITEM_CLASS_NAMES.textSecondary]: grantConfig.isAmountColorSecondary,\n                    })}\n                >\n                    {i18n.amount(grantConfig.amount.value, grantConfig.amount.currency)}\n                </Typography>\n                {grantConfig.isProgressBarVisible && (\n                    <ProgressBar\n                        className={GRANT_ITEM_CLASS_NAMES.progressBar}\n                        value={grant.repaidTotalAmount.value}\n                        max={grant.totalAmount.value}\n                        labels={{\n                            ariaLabel: i18n.get('capital.overview.grants.item.progressBar.a11y.label'),\n                            current: i18n.get('capital.overview.grants.item.amounts.repaid'),\n                            max: i18n.get('capital.overview.grants.item.amounts.remaining'),\n                        }}\n                        tooltips={{\n                            remaining: `${i18n.amount(grant.remainingTotalAmount.value, grant.remainingTotalAmount.currency)} ${i18n\n                                .get('capital.overview.grants.item.amounts.remaining')\n                                ?.toLowerCase()}`,\n                            progress: `${i18n.amount(grant.repaidTotalAmount.value, grant.repaidTotalAmount.currency)} ${i18n\n                                .get('capital.overview.grants.item.amounts.repaid')\n                                ?.toLowerCase()}`,\n                        }}\n                    />\n                )}\n                {grantConfig.isGrantIdVisible ? (\n                    <div className={GRANT_ITEM_CLASS_NAMES.grantID}>\n                        <CopyText\n                            textToCopy={grant.id}\n                            visibleText={i18n.get('capital.common.fields.grantID')}\n                            copyButtonAriaLabelKey=\"capital.overview.grants.item.actions.copyGrantID\"\n                            isUnderlineVisible\n                            type={'Text' as const}\n                            data-testid=\"grant-id-copy-text\"\n                        />\n                    </div>\n                ) : null}\n                {grantConfig.hasAlerts ? (\n                    <>\n                        {grant.missingActions && grant.missingActions.length ? (\n                            <GrantActions\n                                missingActions={grant.missingActions}\n                                className={GRANT_ITEM_CLASS_NAMES.alert}\n                                offerExpiresAt={grant.offerExpiresAt}\n                            />\n                        ) : (\n                            <Alert\n                                className={GRANT_ITEM_CLASS_NAMES.alert}\n                                type={AlertTypeOption.HIGHLIGHT}\n                                title={i18n.get('capital.overview.grants.item.alerts.processingRequest')}\n                            />\n                        )}\n                    </>\n                ) : (\n                    grantConfig.hasUnscheduledRepaymentDetails && (\n                        <div className={GRANT_ITEM_CLASS_NAMES.actionsBar}>\n                            <Button\n                                onClick={showUnscheduledRepaymentAccounts}\n                                className={GRANT_ITEM_CLASS_NAMES.mainActionBtn}\n                                variant={ButtonVariant.SECONDARY}\n                                fullWidth\n                            >\n                                {i18n.get('capital.overview.grants.item.actions.sendRepayment')}\n                            </Button>\n                        </div>\n                    )\n                )}\n            </div>\n        ),\n        [i18n, dateFormat, grant, grantConfig, showUnscheduledRepaymentAccounts]\n    );\n\n    return (\n        <div className={GRANT_ITEM_CLASS_NAMES.base}>\n            <ExpandableCard\n                aria-describedby={`${elementIds.grantAmountLabel} ${elementIds.grantAmount} ${elementIds.grantStatus}`}\n                aria-label={i18n.get('capital.overview.grants.item.details.a11y.label')}\n                filled={grantConfig.isBackgroundFilled}\n                renderContent={grantOverview}\n                inFlow\n            >\n                {grantConfig.hasDetails && <GrantDetails grant={grant} />}\n            </ExpandableCard>\n        </div>\n    );\n};\n","export const GRANT_ADJUSTMENT_DETAILS = {\n    revocation: 'revocation',\n    unscheduledRepayment: 'unscheduledRepayment',\n} as const;\n","import { FunctionalComponent, h } from 'preact';\nimport CopyText from '../../../../internal/CopyText/CopyText';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { TranslationKey } from '../../../../../translations';\nimport cx from 'classnames';\n\ntype _ClassNameProp = h.JSX.HTMLAttributes['className'];\n\nexport type AccountDetailProps = {\n    className?: _ClassNameProp;\n    content: string;\n    contentClassName?: _ClassNameProp;\n    copyButtonLabel?: TranslationKey;\n    isPrimary?: boolean;\n    textToCopy?: string;\n    label: TranslationKey;\n    labelClassName?: _ClassNameProp;\n};\n\nexport const AccountDetail: FunctionalComponent<AccountDetailProps> = ({\n    className,\n    content,\n    contentClassName,\n    copyButtonLabel,\n    isPrimary,\n    textToCopy,\n    label,\n    labelClassName,\n}) => {\n    const { i18n } = useCoreContext();\n    return (\n        <div className={className}>\n            <dt className={labelClassName}>\n                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION}>\n                    {i18n.get(label)}\n                </Typography>\n            </dt>\n            <dd className={cx(contentClassName, { 'adyen-pe-capital-account-details__detail-content--primary': isPrimary })}>\n                {textToCopy ? (\n                    <CopyText\n                        copyButtonAriaLabelKey={copyButtonLabel}\n                        visibleText={content}\n                        textToCopy={textToCopy}\n                        showCopyTextTooltip={false}\n                        type={'Text' as const}\n                    />\n                ) : (\n                    <Typography\n                        el={TypographyElement.SPAN}\n                        variant={isPrimary ? TypographyVariant.SUBTITLE : TypographyVariant.BODY}\n                        stronger={isPrimary}\n                    >\n                        {content}\n                    </Typography>\n                )}\n            </dd>\n        </div>\n    );\n};\n","import { TranslationKey } from '../../../../../translations';\n\nconst getHumanReadableIban = (iban: string, useNonBreakingSpaces = true) => {\n    const spaceSeparator = useNonBreakingSpaces ? ' ' : ' ';\n    const ibanWithoutSpaces = iban.replace(/\\s+/g, '');\n    return ibanWithoutSpaces.replace(/([A-Z\\d]{4}(?!$))/gi, `$1${spaceSeparator}`);\n};\n\nconst isCopyableAccountField = (field: string): boolean => {\n    switch (field) {\n        // Explicit list of copyable account fields\n        case 'accountNumber':\n        case 'beneficiaryName':\n        case 'iban':\n        case 'routingNumber':\n        case 'sortCode':\n            return true;\n\n        // Explicit list of non-copyable account fields\n        // Items can be moved from this list to the list of copyable fields if necessary\n        // The `region` field and other unknown fields (default case) are also considered non-copyable\n        case 'region':\n        default:\n            return false;\n    }\n};\n\nexport const getAccountFieldTextToCopy = (field: string, value?: string): string | undefined => {\n    return isCopyableAccountField(field) ? value : undefined;\n};\n\nexport const getAccountFieldFormattedValue = (field: string, value?: string) => {\n    switch (field) {\n        case 'iban':\n            return value && getHumanReadableIban(value);\n        default:\n            return value;\n    }\n};\n\nexport const getAccountFieldCopyButtonLabelKey = (field: string): TranslationKey | undefined => {\n    switch (field) {\n        // Explicit list of copyable account fields\n        case 'accountNumber':\n            return 'capital.overview.repayment.actions.copyAccountNumber';\n        case 'beneficiaryName':\n            return 'capital.overview.repayment.actions.copyBeneficiaryName';\n        case 'iban':\n            return 'capital.overview.repayment.actions.copyIban';\n        case 'routingNumber':\n            return 'capital.overview.repayment.actions.copyRoutingNumber';\n        case 'sortCode':\n            return 'capital.overview.repayment.actions.copySortCode';\n    }\n};\n\nexport const getAccountFieldTranslationKey = (field: string): TranslationKey => {\n    switch (field) {\n        case 'accountNumber':\n            return 'capital.overview.repayment.accountDetails.fields.accountNumber';\n        case 'beneficiaryName':\n            return 'capital.overview.repayment.accountDetails.fields.beneficiaryName';\n        case 'iban':\n            return 'capital.overview.repayment.accountDetails.fields.iban';\n        case 'region':\n            return 'capital.overview.repayment.accountDetails.fields.countryOrRegion';\n        case 'routingNumber':\n            return 'capital.overview.repayment.accountDetails.fields.routingNumber';\n        case 'sortCode':\n            return 'capital.overview.repayment.accountDetails.fields.sortCode';\n        default:\n            return field as TranslationKey;\n    }\n};\n\nexport const isAccountFieldPrimary = (field: string): boolean => {\n    switch (field) {\n        case 'accountNumber':\n        case 'iban':\n        case 'routingNumber':\n        case 'sortCode':\n            return true;\n\n        case 'beneficiaryName':\n        case 'region':\n        default:\n            return false;\n    }\n};\n","import cx from 'classnames';\nimport { Fragment } from 'preact';\nimport { useMemo } from 'preact/hooks';\nimport { AccountDetail } from './AccountDetail';\nimport { AccountDetailsProps, BankAccountField } from './types';\nimport {\n    getAccountFieldCopyButtonLabelKey,\n    getAccountFieldFormattedValue,\n    getAccountFieldTextToCopy,\n    getAccountFieldTranslationKey,\n    isAccountFieldPrimary,\n} from './utils';\nimport './AccountDetails.scss';\n\nconst BASE_CLASS = 'adyen-pe-capital-account-details';\n\nconst CLASS_NAMES = {\n    detail: `${BASE_CLASS}__detail`,\n    detailContent: `${BASE_CLASS}__detail-content`,\n    detailLabel: `${BASE_CLASS}__detail-label`,\n};\n\nexport const AccountDetails = ({ bankAccount, className, ...ariaAttributes }: AccountDetailsProps) => {\n    const orderedBankAccountFields = useMemo(() => {\n        const { accountNumber, iban, order, region, ...accountDetails } = bankAccount;\n        const accountFields = Object.keys({ iban, accountNumber, ...accountDetails, region });\n        const orderedFields = Array.isArray(order) ? order.filter(field => accountFields.includes(field)) : accountFields;\n        return [...new Set(orderedFields)];\n    }, [bankAccount]);\n\n    return (\n        <dl className={cx(BASE_CLASS, className)} {...ariaAttributes}>\n            {orderedBankAccountFields.map(field => {\n                const fieldValue = bankAccount[field as BankAccountField];\n                return fieldValue ? (\n                    <Fragment key={field}>\n                        <AccountDetail\n                            className={CLASS_NAMES.detail}\n                            contentClassName={CLASS_NAMES.detailContent}\n                            isPrimary={isAccountFieldPrimary(field)}\n                            labelClassName={CLASS_NAMES.detailLabel}\n                            label={getAccountFieldTranslationKey(field)}\n                            copyButtonLabel={getAccountFieldCopyButtonLabelKey(field)}\n                            content={getAccountFieldFormattedValue(field, fieldValue)!}\n                            textToCopy={getAccountFieldTextToCopy(field, fieldValue)}\n                        />\n                    </Fragment>\n                ) : null;\n            })}\n        </dl>\n    );\n};\n","import cx from 'classnames';\nimport { FunctionalComponent, h } from 'preact';\nimport type { TranslationKey } from '../../../../../translations';\nimport type { GrantAdjustmentDetailsProps } from './types';\nimport './GrantAdjustmentDetails.scss';\nimport { Header } from '../../../../internal/Header';\nimport Button from '../../../../internal/Button/Button';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport Icon from '../../../../internal/Icon';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\n\nexport interface GrantAdjustmentDetailsComponentProps\n    extends Pick<GrantAdjustmentDetailsProps, 'onDetailsClose'>,\n        Pick<h.JSX.HTMLAttributes, 'className'> {\n    headerTitleKey?: TranslationKey;\n    headerSubtitleKey?: TranslationKey;\n}\n\nexport const GrantAdjustmentDetails: FunctionalComponent<GrantAdjustmentDetailsComponentProps> = ({\n    children,\n    className,\n    headerTitleKey,\n    headerSubtitleKey,\n    onDetailsClose,\n}) => {\n    const { i18n } = useCoreContext();\n\n    return (\n        <div className={cx('adyen-pe-grant-adjustment-details', className)}>\n            <Header titleKey={headerTitleKey} subtitleKey={headerSubtitleKey}>\n                <Button\n                    onClick={onDetailsClose}\n                    variant={ButtonVariant.TERTIARY}\n                    iconButton\n                    classNameModifiers={['circle']}\n                    aria-label={i18n.get('common.actions.dismiss.labels.dismiss')}\n                >\n                    <Icon name=\"cross\" />\n                </Button>\n            </Header>\n            {children}\n        </div>\n    );\n};\n","import { FunctionalComponent } from 'preact';\nimport { useMemo } from 'preact/hooks';\nimport useUniqueId from '../../../../../hooks/useUniqueId';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport type { GrantAdjustmentDetailsProps } from '../GrantAdjustmentDetails/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { AccountDetails } from '../AccountDetails/AccountDetails';\nimport { GrantAdjustmentDetails } from '../GrantAdjustmentDetails/GrantAdjustmentDetails';\nimport './GrantRepaymentDetails.scss';\nimport { Divider } from '../../../../internal/Divider/Divider';\nimport { Translation } from '../../../../internal/Translation';\n\nconst BASE_CLASS = 'adyen-pe-grant-repayment-details';\n\nconst CLASS_NAMES = {\n    instructionList: `${BASE_CLASS}__instruction-list`,\n    notice: `${BASE_CLASS}__notice`,\n    repaymentAccount: `${BASE_CLASS}__repayment-account`,\n    transferInstrumentItem: `${BASE_CLASS}__transfer-instrument-item`,\n    transferInstrumentList: `${BASE_CLASS}__transfer-instrument-list`,\n    verifiedBankAccountDetails: `${BASE_CLASS}__verified-bank-account-details`,\n};\n\nexport const GrantRepaymentDetails: FunctionalComponent<GrantAdjustmentDetailsProps> = ({ grant, onDetailsClose }) => {\n    const { i18n } = useCoreContext();\n\n    const repaymentAccountDetailsLabelElemId = `list-${useUniqueId()}`;\n    const repaymentInstructionsLabelElemId = `list-${useUniqueId()}`;\n    const transferInstrumentsLabelElemId = `list-${useUniqueId()}`;\n\n    const bankAccount = useMemo(() => {\n        // There can be more than one unscheduled repayment account, however, we are only showing the first one.\n        // If there be any need to show the rest of them in the future, some updates will be required.\n        return grant.unscheduledRepaymentAccounts?.[0];\n    }, [grant.unscheduledRepaymentAccounts]);\n\n    return bankAccount ? (\n        <GrantAdjustmentDetails\n            className={BASE_CLASS}\n            onDetailsClose={onDetailsClose}\n            headerTitleKey=\"capital.overview.repayment.title\"\n            headerSubtitleKey=\"capital.overview.repayment.subtitle\"\n        >\n            <div className={CLASS_NAMES.repaymentAccount}>\n                <Typography id={repaymentAccountDetailsLabelElemId} el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                    {i18n.get('capital.overview.repayment.accountDetails.title')}\n                </Typography>\n                <AccountDetails bankAccount={bankAccount} aria-labelledby={repaymentAccountDetailsLabelElemId} />\n            </div>\n            <div className={CLASS_NAMES.notice}>\n                {!!grant.transferInstruments?.length && (\n                    <>\n                        <div>\n                            <Typography id={transferInstrumentsLabelElemId} el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION} stronger>\n                                {i18n.get('capital.overview.repayment.transferInstruments')}\n                            </Typography>\n\n                            <ul className={CLASS_NAMES.transferInstrumentList} aria-labelledby={transferInstrumentsLabelElemId}>\n                                {grant.transferInstruments?.map(({ accountIdentifier }) => (\n                                    <li key={accountIdentifier} className={CLASS_NAMES.transferInstrumentItem}>\n                                        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION}>\n                                            {accountIdentifier}\n                                        </Typography>\n                                    </li>\n                                ))}\n                            </ul>\n                        </div>\n                        <Divider />\n                    </>\n                )}\n                <div>\n                    <Typography id={repaymentInstructionsLabelElemId} el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION} stronger>\n                        {i18n.get('capital.overview.repayment.instructions.title')}\n                    </Typography>\n                    <ol className={CLASS_NAMES.instructionList} aria-labelledby={repaymentInstructionsLabelElemId}>\n                        <li>\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION}>\n                                <Translation\n                                    translationKey={'capital.overview.repayment.instructions.addingBeneficiary'}\n                                    fills={{\n                                        beneficiaryName: (\n                                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION} stronger>\n                                                {bankAccount.beneficiaryName}\n                                            </Typography>\n                                        ),\n                                    }}\n                                />\n                            </Typography>\n                        </li>\n                        <li>\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION}>\n                                {i18n.get('capital.overview.repayment.instructions.sendingPayment')}\n                            </Typography>\n                        </li>\n                        <li>\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION}>\n                                {i18n.get('capital.overview.repayment.instructions.waiting')}\n                            </Typography>\n                        </li>\n                    </ol>\n                </div>\n                <Typography className={CLASS_NAMES.verifiedBankAccountDetails} el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION}>\n                    {i18n.get('capital.overview.repayment.instructions.verifiedAccount')}\n                </Typography>\n            </div>\n        </GrantAdjustmentDetails>\n    ) : null;\n};\n","import { IGrant } from '../../../../../types';\nimport { BaseList } from '../../../../internal/BaseList/BaseList';\nimport { GrantItem } from '../GrantItem/GrantItem';\nimport { getGrantConfig } from '../GrantItem/utils';\nimport { FunctionalComponent } from 'preact';\nimport { GrantsProps } from './types';\nimport { GRANT_ADJUSTMENT_DETAILS } from '../GrantAdjustmentDetails/constants';\nimport { GrantAdjustmentDetail, GrantAdjustmentDetailCallback } from '../GrantAdjustmentDetails/types';\nimport { GrantRepaymentDetails } from '../GrantRepaymentDetails/GrantRepaymentDetails';\nimport { sharedCapitalOverviewAnalyticsEventProperties } from '../../constants';\nimport { useLandedPageEvent } from '../../../../../hooks/useAnalytics/useLandedPageEvent';\nimport SegmentedControl from '../../../../internal/SegmentedControl/SegmentedControl';\nimport useAnalyticsContext from '../../../../../core/Context/analytics/useAnalyticsContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport { CapitalHeader } from '../../../../internal/CapitalHeader';\nimport Button from '../../../../internal/Button/Button';\nimport { ButtonVariant } from '../../../../internal/Button/types';\n\nconst sharedAnalyticsEventProperties = {\n    ...sharedCapitalOverviewAnalyticsEventProperties,\n    subCategory: 'Grants overview',\n} as const;\n\nconst List = ({ grants, showDetails }: { grants: IGrant[]; showDetails: GrantAdjustmentDetailCallback }) => {\n    return (\n        <BaseList classNames={'adyen-pe-grant-list__items'}>\n            {grants.map(grant => (\n                <li key={grant.id}>\n                    <GrantItem grant={grant} showDetails={showDetails.bind(null, grant)} />\n                </li>\n            ))}\n        </BaseList>\n    );\n};\n\nexport const GrantsDisplay: FunctionalComponent<GrantsProps> = ({ grantList, hideTitle, newOfferAvailable, onNewOfferRequest }) => {\n    const [selectedGrantDetail, setSelectedGrantDetail] = useState<GrantAdjustmentDetail>();\n    const [selectedGrant, setSelectedGrant] = useState<IGrant>();\n    const { i18n } = useCoreContext();\n\n    const userEvents = useAnalyticsContext();\n\n    const [activeGrants, inactiveGrants] = useMemo(() => {\n        const active: IGrant[] = [];\n        const inactive: IGrant[] = [];\n\n        grantList?.forEach(grant => {\n            if (grant.status === 'Active' || grant.status === 'Pending') {\n                active.push(grant);\n            } else {\n                inactive.push(grant);\n            }\n        });\n\n        return [active, inactive];\n    }, [grantList]);\n\n    const displayMode = useMemo<'UnifiedGrants' | 'SegmentedGrants'>(() => {\n        if (grantList.length > 1 && activeGrants.length && inactiveGrants.length) return 'SegmentedGrants';\n        return 'UnifiedGrants';\n    }, [activeGrants.length, grantList.length, inactiveGrants.length]);\n\n    const showNewOfferButton = useMemo(() => {\n        return newOfferAvailable && !activeGrants.some(grant => grant.status === 'Pending');\n    }, [activeGrants, newOfferAvailable]);\n\n    const onNewOfferRequestWithTracking = useCallback<typeof onNewOfferRequest>(() => {\n        try {\n            return onNewOfferRequest();\n        } finally {\n            userEvents.addEvent?.('Clicked button', { ...sharedAnalyticsEventProperties, label: 'See new offer' });\n        }\n    }, [onNewOfferRequest, userEvents]);\n\n    const selectedGrantConfig = useMemo(() => selectedGrant && getGrantConfig(selectedGrant), [selectedGrant]);\n\n    const hideGrantDetails = useCallback(() => setSelectedGrantDetail(undefined), []);\n\n    const showGrantDetails = useCallback<GrantAdjustmentDetailCallback>((grant, detail) => {\n        setSelectedGrantDetail(detail);\n        setSelectedGrant(grant);\n    }, []);\n\n    useLandedPageEvent({ ...sharedAnalyticsEventProperties, label: 'Capital overview' });\n\n    if (selectedGrant) {\n        switch (selectedGrantDetail) {\n            case GRANT_ADJUSTMENT_DETAILS.unscheduledRepayment: {\n                if (selectedGrantConfig?.hasUnscheduledRepaymentDetails) {\n                    return <GrantRepaymentDetails grant={selectedGrant} onDetailsClose={hideGrantDetails} />;\n                }\n                break;\n            }\n\n            // The grant revocation account details is currently not ready to be rendered.\n            // A future iteration of this component might include revocation account details.\n            // Only then should the following lines be uncommented.\n            //\n            // case GRANT_DETAILS_VIEWS.revocation:\n            //     if (selectedGrantConfig?.hasRevocationDetails) {\n            //         return <GrantRevocationDetails grant={selectedGrant} onDetailsClose={hideGrantDetailsView} />;\n            //     }\n            //     break;\n        }\n    }\n\n    return (\n        <div className=\"adyen-pe-grant-list\">\n            <div className=\"adyen-pe-grant-list__header-container\">\n                <CapitalHeader hideTitle={hideTitle} titleKey={'capital.common.title'} />\n                {showNewOfferButton ? (\n                    <Button onClick={onNewOfferRequestWithTracking} className={'adyen-pe-grant-list__offer-button'} variant={ButtonVariant.SECONDARY}>\n                        {i18n.get('capital.overview.grants.list.actions.newOffer')}\n                    </Button>\n                ) : null}\n            </div>\n\n            {displayMode === 'UnifiedGrants' && <List grants={grantList} showDetails={showGrantDetails} />}\n            {displayMode === 'SegmentedGrants' && (\n                <SegmentedControl\n                    items={[\n                        {\n                            label: 'capital.overview.grants.list.tabs.labels.inProgress',\n                            content: <List grants={activeGrants} showDetails={showGrantDetails} />,\n                            id: 'active',\n                        },\n                        {\n                            label: 'capital.overview.grants.list.tabs.labels.closed',\n                            content: <List grants={inactiveGrants} showDetails={showGrantDetails} />,\n                            id: 'inactive',\n                        },\n                    ]}\n                    activeItem={'active'}\n                    aria-label={i18n.get('capital.overview.grants.list.tabs.a11y.label')}\n                />\n            )}\n        </div>\n    );\n};\n","import { FunctionalComponent } from 'preact';\nimport { GrantListProps } from './types';\nimport './GrantList.scss';\nimport { useCallback, useState } from 'preact/hooks';\nimport { CapitalOffer } from '../../../CapitalOffer/components/CapitalOffer/CapitalOffer';\nimport { GrantsDisplay } from './GrantsDisplay';\nimport { IGrant } from '../../../../../types';\n\nexport const GrantList: FunctionalComponent<GrantListProps> = ({\n    externalDynamicOffersConfig,\n    grantList,\n    newOfferAvailable,\n    onFundsRequest,\n    onGrantListUpdateRequest,\n    onOfferDismiss,\n}) => {\n    const [isCapitalOfferVisible, setIsCapitalOfferVisible] = useState<boolean>(false);\n\n    const goBackToPreviousStep = useCallback(() => setIsCapitalOfferVisible(false), []);\n    const goToNextStep = useCallback(() => setIsCapitalOfferVisible(true), []);\n\n    const goBackToList = useCallback(() => {\n        onOfferDismiss ? onOfferDismiss(goBackToPreviousStep) : goBackToPreviousStep();\n    }, [goBackToPreviousStep, onOfferDismiss]);\n\n    const handleFundsRequest = useCallback(\n        (data: IGrant) => {\n            if (onFundsRequest) {\n                onFundsRequest(data);\n            } else {\n                onGrantListUpdateRequest(data);\n                setIsCapitalOfferVisible(false);\n            }\n        },\n        [onFundsRequest, onGrantListUpdateRequest]\n    );\n\n    return (\n        <>\n            {isCapitalOfferVisible ? (\n                <CapitalOffer\n                    externalDynamicOffersConfig={externalDynamicOffersConfig}\n                    onFundsRequest={handleFundsRequest}\n                    onOfferDismiss={goBackToList}\n                />\n            ) : (\n                <GrantsDisplay grantList={grantList} newOfferAvailable={newOfferAvailable} onNewOfferRequest={goToNextStep} />\n            )}\n        </>\n    );\n};\n","import { useCallback, useMemo, useState } from 'preact/hooks';\nimport { isCapitalRegionSupported } from '../../../../internal/CapitalHeader/helpers';\nimport { ExternalUIComponentProps } from '../../../../types';\nimport { CapitalErrorMessageDisplay } from '../../../CapitalOffer/components/utils/CapitalErrorMessageDisplay';\nimport { CapitalOverviewProps } from '../../types';\nimport { CAPITAL_OVERVIEW_CLASS_NAMES } from '../../constants';\nimport { FunctionalComponent } from 'preact';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { useFetch } from '../../../../../hooks/useFetch';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport { CapitalHeader } from '../../../../internal/CapitalHeader';\nimport { IGrant } from '../../../../../types';\nimport './CapitalOverview.scss';\nimport Unqualified from '../Unqualified';\nimport { PreQualified } from '../PreQualified/PreQualified';\nimport { GrantList } from '../GrantList/GrantList';\nimport { ErrorMessageDisplay } from '../../../../internal/ErrorMessageDisplay/ErrorMessageDisplay';\nimport { getCapitalErrorMessage } from '../../../../utils/capital/getCapitalErrorMessage';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\n\ntype CapitalOverviewState = 'Loading' | 'Error' | 'Unqualified' | 'PreQualified' | 'GrantList' | 'UnsupportedRegion';\n\nexport const CapitalOverview: FunctionalComponent<ExternalUIComponentProps<CapitalOverviewProps>> = ({\n    hideTitle,\n    onContactSupport,\n    onFundsRequest,\n    onOfferDismiss,\n    onOfferOptionsRequest,\n    skipPreQualifiedIntro,\n}) => {\n    const legalEntity = useConfigContext()?.extraConfig?.legalEntity;\n    const isRegionSupported = useMemo(() => isCapitalRegionSupported(legalEntity), [legalEntity]);\n\n    const { getGrants: grantsEndpointCall, getDynamicGrantOffersConfiguration: dynamicConfigurationEndpointCall } = useConfigContext().endpoints;\n\n    const grantsQuery = useFetch({\n        fetchOptions: { enabled: !!grantsEndpointCall && isRegionSupported },\n        queryFn: useCallback(async () => {\n            return grantsEndpointCall?.(EMPTY_OBJECT);\n        }, [grantsEndpointCall]),\n    });\n\n    const dynamicOfferQuery = useFetch({\n        fetchOptions: { enabled: !!dynamicConfigurationEndpointCall && isRegionSupported },\n        queryFn: useCallback(async () => {\n            return dynamicConfigurationEndpointCall?.(EMPTY_OBJECT);\n        }, [dynamicConfigurationEndpointCall]),\n    });\n\n    const dynamicOffer = dynamicOfferQuery.data;\n\n    const [requestedGrant, setRequestedGrant] = useState<IGrant>();\n    const grantList = useMemo(\n        () => (requestedGrant ? [requestedGrant, ...(grantsQuery.data?.data || [])] : grantsQuery.data?.data),\n        [grantsQuery.data?.data, requestedGrant]\n    );\n\n    const handlePreQualifiedFundsRequest = useCallback(\n        (data: IGrant) => {\n            onFundsRequest ? onFundsRequest(data) : setRequestedGrant(data);\n        },\n        [onFundsRequest]\n    );\n\n    const showError = useMemo(() => {\n        if (dynamicOfferQuery.error && grantsQuery.error) return true;\n        if (dynamicOfferQuery.error && !grantList?.length) return true;\n        return false;\n    }, [dynamicOfferQuery.error, grantList?.length, grantsQuery.error]);\n\n    const state = useMemo<CapitalOverviewState>(() => {\n        if (!isRegionSupported) {\n            return 'UnsupportedRegion';\n        } else if (showError) {\n            return 'Error';\n        } else if (\n            (!grantsEndpointCall && !dynamicConfigurationEndpointCall) ||\n            (!dynamicOffer && !grantList) ||\n            grantsQuery.isFetching ||\n            dynamicOfferQuery.isFetching\n        ) {\n            return 'Loading';\n        } else if (grantList?.length) {\n            return 'GrantList';\n        } else if (dynamicOffer?.maxAmount && dynamicOffer?.minAmount) {\n            return 'PreQualified';\n        }\n        return 'Unqualified';\n    }, [\n        dynamicConfigurationEndpointCall,\n        dynamicOffer,\n        dynamicOfferQuery.isFetching,\n        grantList,\n        grantsEndpointCall,\n        grantsQuery.isFetching,\n        showError,\n        isRegionSupported,\n    ]);\n\n    const newOfferAvailable = useMemo(() => !!(dynamicOffer && dynamicOffer.minAmount && dynamicOffer.maxAmount), [dynamicOffer]);\n\n    return (\n        <div className={CAPITAL_OVERVIEW_CLASS_NAMES.base}>\n            {(() => {\n                switch (state) {\n                    case 'Loading':\n                        return (\n                            <div className={CAPITAL_OVERVIEW_CLASS_NAMES.skeletonContainer}>\n                                <div className={CAPITAL_OVERVIEW_CLASS_NAMES.headerSkeleton}></div>\n                                <div className={CAPITAL_OVERVIEW_CLASS_NAMES.skeleton}></div>\n                            </div>\n                        );\n                    case 'Error':\n                        return (\n                            <div className={CAPITAL_OVERVIEW_CLASS_NAMES.errorContainer}>\n                                <CapitalHeader hideTitle={hideTitle} titleKey={'capital.common.title'} />\n                                <ErrorMessageDisplay\n                                    absolutePosition={false}\n                                    outlined={false}\n                                    withImage\n                                    onContactSupport={onContactSupport}\n                                    {...getCapitalErrorMessage(dynamicOfferQuery.error as AdyenPlatformExperienceError, onContactSupport)}\n                                />\n                            </div>\n                        );\n                    case 'GrantList':\n                        return (\n                            grantList && (\n                                <GrantList\n                                    externalDynamicOffersConfig={dynamicOffer}\n                                    grantList={grantList}\n                                    hideTitle={hideTitle}\n                                    newOfferAvailable={newOfferAvailable}\n                                    onFundsRequest={onFundsRequest}\n                                    onGrantListUpdateRequest={setRequestedGrant}\n                                    onOfferDismiss={onOfferDismiss}\n                                />\n                            )\n                        );\n                    case 'PreQualified':\n                        return (\n                            <PreQualified\n                                onOfferDismiss={onOfferDismiss}\n                                onOfferOptionsRequest={onOfferOptionsRequest}\n                                skipPreQualifiedIntro={skipPreQualifiedIntro}\n                                hideTitle={hideTitle}\n                                dynamicOffer={dynamicOffer!}\n                                onFundsRequest={handlePreQualifiedFundsRequest}\n                            />\n                        );\n                    case 'Unqualified':\n                        return <Unqualified hideTitle={hideTitle} />;\n                    case 'UnsupportedRegion':\n                        return (\n                            <div className={CAPITAL_OVERVIEW_CLASS_NAMES.errorContainer}>\n                                <CapitalHeader hideTitle={hideTitle} titleKey={'capital.common.title'} />\n                                <CapitalErrorMessageDisplay unsupportedRegion />\n                            </div>\n                        );\n                    default:\n                        return null;\n                }\n            })()}\n        </div>\n    );\n};\n","import { isCapitalRegionSupported } from '../../internal/CapitalHeader/helpers';\nimport { _UIComponentProps, ExternalComponentType } from '../../types';\nimport UIElement from '../UIElement/UIElement';\nimport { CapitalComponentState, CapitalOverviewProps } from './types';\nimport { CapitalOverview } from './components/CapitalOverview/CapitalOverview';\nimport { EMPTY_OBJECT, noop } from '../../../utils';\nimport sessionReady from '../../../core/ConfigContext/session/utils/sessionReady';\n\nexport class CapitalOverviewElement extends UIElement<CapitalOverviewProps> {\n    public static type: ExternalComponentType = 'capitalOverview';\n\n    constructor(props: _UIComponentProps<CapitalOverviewProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n        this.customClassNames = 'adyen-pe-capital-overview-component';\n    }\n\n    public componentToRender = () => {\n        return <CapitalOverview {...this.props} />;\n    };\n\n    public async getState(): Promise<CapitalComponentState> {\n        const { session } = this.props.core;\n        await sessionReady(session);\n\n        const { getDynamicGrantOffersConfiguration, getGrants } = session.context.endpoints;\n        const legalEntity = session.context.extraConfig?.legalEntity;\n\n        if (!isCapitalRegionSupported(legalEntity)) {\n            return { state: 'isInUnsupportedRegion' };\n        }\n\n        const [config, grants] = await Promise.all([\n            getDynamicGrantOffersConfiguration?.(EMPTY_OBJECT).catch(noop as () => undefined),\n            getGrants?.(EMPTY_OBJECT).catch(noop as () => undefined),\n        ]);\n\n        let state: CapitalComponentState['state'] = 'isUnqualified';\n\n        if (grants && grants.data?.length > 0) {\n            state = 'hasRequestedGrants';\n        } else if (config && config.minAmount) {\n            state = 'isPreQualified';\n        }\n\n        return { state };\n    }\n}\n\nexport default CapitalOverviewElement;\n","export const BASE_CLASS = 'adyen-pe-disputes-overview';\nexport const BASE_XS_CLASS = `${BASE_CLASS}--xs`;\nexport const TABS_CONTAINER_CLASS = `${BASE_CLASS}__tabs-container`;\n\nexport const EARLIEST_DISPUTES_SINCE_DATE = '2025-05-22T00:00:00.000Z';\n","import { DISPUTE_ACTION_NEEDED_URGENTLY_THRESHOLD_DAYS } from './constants';\nimport { IDisputeStatus } from '../../../types/api/models/disputes';\nimport { parseDate } from '../../../utils';\n\nexport interface WithDisputeStatus {\n    dueDate?: string;\n    status: IDisputeStatus;\n}\n\nexport const enum DisputeActionNeededLevel {\n    NEVER = 0, // 3-bits (0 0 0)\n    SOON = 1, // 3-bits (0 0 1)\n    URGENTLY = 3, // 3-bits (0 1 1)\n    NOW = 7, // 3-bits (1 1 1)\n}\n\nexport const getDisputeActionNeededLevel = <T extends WithDisputeStatus>(disputeData: T): DisputeActionNeededLevel => {\n    switch (disputeData.status) {\n        case 'UNDEFENDED':\n        case 'UNRESPONDED': {\n            const deadlineTimestamp = parseDate(disputeData.dueDate);\n\n            if (deadlineTimestamp != undefined) {\n                const now = Date.now();\n                const deadline = new Date(deadlineTimestamp);\n                const actionNeededNowThresholdTimestamp = new Date(deadline).setHours(deadline.getHours() - 24);\n\n                if (actionNeededNowThresholdTimestamp <= now) {\n                    return DisputeActionNeededLevel.NOW;\n                }\n\n                const actionNeededUrgentlyThresholdTimestamp = new Date(deadline).setDate(\n                    deadline.getDate() - DISPUTE_ACTION_NEEDED_URGENTLY_THRESHOLD_DAYS\n                );\n\n                if (actionNeededUrgentlyThresholdTimestamp <= now) {\n                    return DisputeActionNeededLevel.URGENTLY;\n                }\n            }\n\n            return DisputeActionNeededLevel.SOON;\n        }\n    }\n\n    return DisputeActionNeededLevel.NEVER;\n};\n\nexport const isDisputeActionNeeded = <T extends WithDisputeStatus>(disputeData: T): boolean => {\n    return getDisputeActionNeededLevel(disputeData) > DisputeActionNeededLevel.NEVER;\n};\n\nexport const isDisputeActionNeededUrgently = <T extends WithDisputeStatus>(disputeData: T): boolean => {\n    return getDisputeActionNeededLevel(disputeData) > DisputeActionNeededLevel.SOON;\n};\n\nexport const isDisputeActionNeededNow = <T extends WithDisputeStatus>(disputeData: T): boolean => {\n    return getDisputeActionNeededLevel(disputeData) === DisputeActionNeededLevel.NOW;\n};\n","export const BASE_CLASS = 'adyen-pe-disputes-table';\n","import { useMemo } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { getDisputeStatus } from '../../../../utils/translation/getters';\nimport { IDispute, IDisputeListItem } from '../../../../../types/api/models/disputes';\nimport { isDisputeActionNeededUrgently } from '../../../../utils/disputes/actionNeeded';\nimport { Tag } from '../../../../internal/Tag/Tag';\nimport { TagVariant } from '../../../../internal/Tag/types';\nimport { PropsWithChildren } from 'preact/compat';\n\nconst DisputeStatusTag = ({ dispute }: PropsWithChildren<{ dispute: IDisputeListItem | IDispute }>) => {\n    const { i18n } = useCoreContext();\n    const disputeStatus = useMemo(() => getDisputeStatus(i18n, dispute.status), [i18n, dispute]);\n\n    const variant = useMemo<TagVariant>(() => {\n        if (dispute.status === 'WON') return TagVariant.SUCCESS;\n        if ((dispute as any)?.defensibility === 'NOT_ACTIONABLE') return TagVariant.DEFAULT;\n        if (isDisputeActionNeededUrgently(dispute)) return TagVariant.ERROR;\n        return TagVariant.DEFAULT;\n    }, [dispute]);\n\n    return <Tag variant={variant} label={disputeStatus} />;\n};\n\nexport default DisputeStatusTag;\n","import cx from 'classnames';\nimport { FC } from 'preact/compat';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { TranslationKey } from '../../../../../translations';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport Alert from '../../../../internal/Alert/Alert';\nimport Icon from '../../../../internal/Icon';\nimport { AlertTypeOption } from '../../../../internal/Alert/types';\nimport DataGrid from '../../../../internal/DataGrid';\nimport { DAY_MS } from '../../../../internal/Calendar/calendar/constants';\nimport { getDisputeReason } from '../../../../utils/translation/getters';\nimport { isDisputeActionNeededUrgently } from '../../../../utils/disputes/actionNeeded';\nimport { DATE_FORMAT_DISPUTES, DATE_FORMAT_RESPONSE_DEADLINE } from '../../../../../constants';\nimport DataOverviewError from '../../../../internal/DataOverviewError/DataOverviewError';\nimport Pagination from '../../../../internal/Pagination';\nimport { PaginationProps, WithPaginationLimitSelection } from '../../../../internal/Pagination/types';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { BASE_CLASS } from './constants';\nimport { CustomColumn } from '../../../../types';\nimport { StringWithAutocompleteOptions } from '../../../../../utils/types';\nimport { useTableColumns } from '../../../../../hooks/useTableColumns';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { IDisputeListItem, IDisputeStatusGroup } from '../../../../../types/api/models/disputes';\nimport PaymentMethodCell from '../../../TransactionsOverview/components/TransactionsTable/PaymentMethodCell';\nimport type { IBalanceAccountBase } from '../../../../../types';\nimport DisputeStatusTag from './DisputeStatusTag';\nimport { Tag } from '../../../../internal/Tag/Tag';\nimport { Tooltip } from '../../../../internal/Tooltip/Tooltip';\nimport { Translation } from '../../../../internal/Translation';\nimport './DisputesTable.scss';\n\nexport type DisputesTableFields = keyof typeof FIELD_KEYS;\n\nexport const FIELD_KEYS = {\n    status: 'disputes.overview.common.fields.status',\n    respondBy: 'disputes.overview.common.fields.respondBy',\n    createdAt: 'disputes.overview.common.fields.openedOn',\n    paymentMethod: 'disputes.overview.common.fields.paymentMethod',\n    disputeReason: 'disputes.overview.common.fields.disputeReason',\n    reason: 'disputes.overview.common.fields.reason',\n    currency: 'disputes.overview.common.fields.currency',\n    disputedAmount: 'disputes.overview.common.fields.disputedAmount',\n    totalPaymentAmount: 'disputes.overview.common.fields.totalPaymentAmount',\n} as const satisfies Record<string, TranslationKey>;\n\nexport const EMPTY_TABLE_MESSAGE_KEYS = {\n    CHARGEBACKS: { title: 'disputes.overview.chargebacks.errors.listEmpty', message: 'disputes.overview.chargebacks.errors.updateFilters' },\n    FRAUD_ALERTS: { title: 'disputes.overview.fraudAlerts.errors.listEmpty', message: 'disputes.overview.fraudAlerts.errors.updateFilters' },\n    ONGOING_AND_CLOSED: {\n        title: 'disputes.overview.ongoingAndClosed.errors.listEmpty',\n        message: 'disputes.overview.ongoingAndClosed.errors.updateFilters',\n    },\n} as const satisfies Record<IDisputeStatusGroup, { title: TranslationKey; message: TranslationKey }>;\n\nexport const FIELDS = Object.keys(FIELD_KEYS) as readonly DisputesTableFields[];\n\nconst classes = {\n    cellContent: `${BASE_CLASS}__cell-content`,\n    cellContentVStack: `${BASE_CLASS}__cell-content--vstack`,\n    cellTextGrey: `${BASE_CLASS}__cell-text--grey`,\n    dateContentUrgent: `${BASE_CLASS}__date-content--urgent`,\n    statusContent: `${BASE_CLASS}__status-content`,\n    statusContentUrgent: `${BASE_CLASS}__status-content--urgent`,\n};\n\nexport interface DisputesTableProps extends WithPaginationLimitSelection<PaginationProps> {\n    balanceAccountId: string | undefined;\n    loading: boolean;\n    error?: AdyenPlatformExperienceError;\n    onContactSupport?: () => void;\n    showPagination: boolean;\n    data: IDisputeListItem[] | undefined;\n    activeBalanceAccount?: IBalanceAccountBase;\n    onRowClick: (value: IDisputeListItem) => void;\n    customColumns?: CustomColumn<StringWithAutocompleteOptions<DisputesTableFields>>[];\n    statusGroup: IDisputeStatusGroup;\n}\n\nexport const DisputesTable: FC<DisputesTableProps> = ({\n    error,\n    loading,\n    balanceAccountId,\n    onContactSupport,\n    showPagination,\n    onRowClick,\n    data,\n    customColumns,\n    activeBalanceAccount,\n    statusGroup,\n    ...paginationProps\n}) => {\n    const { i18n } = useCoreContext();\n    const { refreshing } = useConfigContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting(activeBalanceAccount?.timeZone);\n\n    const [alert, setAlert] = useState<null | { title: string; description: string }>(null);\n    const isLoading = useMemo(() => loading || refreshing, [loading, refreshing]);\n    const isMobileContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    let limitSelectAriaLabelKey: TranslationKey | undefined = undefined;\n\n    if (showPagination) {\n        switch (statusGroup) {\n            case 'CHARGEBACKS':\n                limitSelectAriaLabelKey = 'disputes.overview.chargebacks.limitSelect.a11y.label';\n                break;\n            case 'FRAUD_ALERTS':\n                limitSelectAriaLabelKey = 'disputes.overview.fraudAlerts.limitSelect.a11y.label';\n                break;\n            case 'ONGOING_AND_CLOSED':\n                limitSelectAriaLabelKey = 'disputes.overview.ongoingAndClosed.limitSelect.a11y.label';\n                break;\n        }\n    }\n\n    const columns = useTableColumns({\n        fields: FIELDS,\n        fieldsKeys: FIELD_KEYS,\n        customColumns,\n        columnConfig: useMemo(\n            () => ({\n                status: {\n                    visible: statusGroup === 'ONGOING_AND_CLOSED',\n                },\n                reason: {\n                    visible: statusGroup === 'FRAUD_ALERTS' && !isMobileContainer,\n                    flex: 2,\n                },\n                respondBy: {\n                    visible: statusGroup === 'CHARGEBACKS',\n                },\n                currency: {\n                    visible: !isMobileContainer,\n                    flex: 0.5,\n                },\n                disputedAmount: {\n                    visible: statusGroup !== 'FRAUD_ALERTS',\n                    position: 'right',\n                },\n                createdAt: {\n                    visible: !isMobileContainer || statusGroup === 'FRAUD_ALERTS',\n                },\n                paymentMethod: {\n                    visible: !isMobileContainer,\n                },\n                disputeReason: {\n                    visible: statusGroup !== 'FRAUD_ALERTS' && !isMobileContainer,\n                },\n                totalPaymentAmount: {\n                    visible: statusGroup === 'FRAUD_ALERTS',\n                    position: 'right',\n                },\n            }),\n            [isMobileContainer, statusGroup]\n        ),\n    });\n\n    const removeAlert = useCallback(() => setAlert(null), []);\n\n    const getTimeToDeadline = useCallback(\n        (dueDate: string) => {\n            if (!dueDate) return '';\n            const deadline = new Date(dueDate).getTime();\n            const diffInMs = deadline - Date.now();\n            const diffInDays = Math.ceil(diffInMs / DAY_MS);\n            const formattedDate = dateFormat(dueDate, { ...DATE_FORMAT_RESPONSE_DEADLINE, weekday: undefined });\n\n            return diffInDays <= 1\n                ? i18n.get('disputes.overview.common.actionNeeded.respondToday', { values: { date: formattedDate } })\n                : i18n.get('disputes.overview.common.actionNeeded.respondDays', { values: { days: diffInDays, date: formattedDate } });\n        },\n        [dateFormat, i18n]\n    );\n\n    const EMPTY_TABLE_MESSAGE = {\n        title: EMPTY_TABLE_MESSAGE_KEYS[statusGroup].title,\n        message: [EMPTY_TABLE_MESSAGE_KEYS[statusGroup].message],\n    } satisfies { title: TranslationKey; message: TranslationKey | TranslationKey[] };\n\n    const errorDisplay = useMemo(\n        () => () => (\n            <DataOverviewError error={error} errorMessage={'disputes.overview.common.errors.listUnavailable'} onContactSupport={onContactSupport} />\n        ),\n        [error, onContactSupport]\n    );\n\n    useEffect(() => {\n        if (isLoading) removeAlert();\n    }, [isLoading, removeAlert]);\n\n    return (\n        <div className={BASE_CLASS}>\n            {alert && <Alert onClose={removeAlert} type={AlertTypeOption.WARNING} className={'adyen-pe-disputes-table-alert'} {...alert} />}\n            <DataGrid\n                autoFitColumns={isMobileContainer}\n                errorDisplay={errorDisplay}\n                error={error}\n                columns={columns}\n                data={data}\n                loading={isLoading}\n                outline={false}\n                onRowClick={{ callback: onRowClick }}\n                emptyTableMessage={EMPTY_TABLE_MESSAGE}\n                customCells={{\n                    status: ({ item }) => {\n                        return (\n                            <div className={cx(classes.cellContent, { [classes.cellContentVStack]: isMobileContainer })}>\n                                <DisputeStatusTag dispute={item} />\n                                {isMobileContainer && <PaymentMethodCell paymentMethod={item.paymentMethod} />}\n                            </div>\n                        );\n                    },\n                    reason: ({ item }) => {\n                        return item.reason.title;\n                    },\n                    respondBy: ({ item }) => {\n                        const isUrgent = isDisputeActionNeededUrgently(item);\n                        const formattedDate = dateFormat(item.dueDate!, DATE_FORMAT_DISPUTES);\n                        // TODO - Check if the API can send the defensibility field in a next iteration\n                        const isActionableDispute = true; /* isDisputeActionNeeded(item) && item.defensibility !== 'NOT_ACTIONABLE' */\n\n                        const renderDueDate = () =>\n                            isUrgent && isActionableDispute ? (\n                                <Tooltip content={getTimeToDeadline(item.dueDate!)}>\n                                    <span className={classes.dateContentUrgent}>\n                                        <time dateTime={item.dueDate!}>{formattedDate}</time>\n                                        {<Icon name={'warning-filled'} />}\n                                    </span>\n                                </Tooltip>\n                            ) : (\n                                <time dateTime={item.dueDate!}>{formattedDate}</time>\n                            );\n\n                        return (\n                            <div className={cx(classes.cellContent, { [classes.cellContentVStack]: isMobileContainer })}>\n                                {item.dueDate ? (\n                                    <Typography\n                                        el={TypographyElement.SPAN}\n                                        variant={TypographyVariant.BODY}\n                                        className={cx(classes.statusContent, {\n                                            [classes.cellTextGrey]: isMobileContainer && !isUrgent,\n                                            [classes.statusContentUrgent]: isUrgent,\n                                        })}\n                                    >\n                                        {isMobileContainer ? (\n                                            <Translation\n                                                translationKey=\"disputes.overview.common.actionNeeded.dueDate\"\n                                                fills={{ dueDate: renderDueDate }}\n                                            />\n                                        ) : (\n                                            renderDueDate()\n                                        )}\n                                    </Typography>\n                                ) : null}\n                                {isMobileContainer && <PaymentMethodCell paymentMethod={item.paymentMethod} />}\n                            </div>\n                        );\n                    },\n                    currency: ({ item }) => {\n                        return <Tag>{item.amount.currency}</Tag>;\n                    },\n                    disputedAmount: ({ item }) => {\n                        return (\n                            item.amount && (\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                                    {i18n.amount(item.amount.value, item.amount.currency, { hideCurrency: false })}\n                                </Typography>\n                            )\n                        );\n                    },\n                    createdAt: ({ item }) => {\n                        return (\n                            <div className={cx(classes.cellContent, { [classes.cellContentVStack]: isMobileContainer })}>\n                                <time\n                                    dateTime={item.createdAt}\n                                    className={cx(classes.statusContent, {\n                                        [classes.cellTextGrey]: isMobileContainer,\n                                    })}\n                                >\n                                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                        {dateFormat(item.createdAt, DATE_FORMAT_DISPUTES)}\n                                    </Typography>\n                                </time>\n                                {isMobileContainer && <PaymentMethodCell paymentMethod={item.paymentMethod} />}\n                            </div>\n                        );\n                    },\n                    paymentMethod: ({ item }) => <PaymentMethodCell paymentMethod={item.paymentMethod} />,\n                    disputeReason: ({ item }) => <span>{getDisputeReason(i18n, item.reason.category)}</span>,\n                    totalPaymentAmount: ({ item }) => {\n                        return (\n                            item && (\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                                    {i18n.amount(item.amount.value, item.amount.currency, { hideCurrency: false })}\n                                </Typography>\n                            )\n                        );\n                    },\n                }}\n            >\n                {showPagination && (\n                    <DataGrid.Footer>\n                        <Pagination\n                            {...paginationProps}\n                            ariaLabelKey=\"disputes.overview.common.pagination.a11y.label\"\n                            limitSelectAriaLabelKey={limitSelectAriaLabelKey}\n                        />\n                    </DataGrid.Footer>\n                )}\n            </DataGrid>\n        </div>\n    );\n};\n","import { createContext } from 'preact';\nimport { memo, PropsWithChildren, useEffect } from 'preact/compat';\nimport { useCallback, useContext, useState } from 'preact/hooks';\nimport { IDisputeDefenseDocument, IDisputeDetail } from '../../../../../types/api/models/disputes';\nimport { TranslationConfigItem } from '../../utils';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport localDefenseDocumentConfig from '../../../../../config/disputes/defenseDocumentConfig.json';\nimport localDefenseReasonConfig from '../../../../../config/disputes/defenseReasonConfig.json';\n\nexport type DisputeFlowState = 'details' | 'accept' | 'defendReasonSelectionView' | 'uploadDefenseFilesView' | 'defenseSubmitResponseView';\n\ninterface DisputeFlowContextValue {\n    flowState: DisputeFlowState;\n    setFlowState: (state: DisputeFlowState) => void;\n    goBack: () => void;\n    dispute: IDisputeDetail | undefined;\n    setDispute: (dispute: IDisputeDetail | undefined) => void;\n    selectedDefenseReason: string | null;\n    setSelectedDefenseReason: (selectedDefenseReason: string) => void;\n    applicableDocuments: IDisputeDefenseDocument[] | null;\n    setApplicableDocuments: (documents: IDisputeDefenseDocument[] | null) => void;\n    clearFiles: () => void;\n    clearStates: () => void;\n    defendDisputePayload: FormData | null;\n    addFileToDefendPayload: (name: string, file: File) => void;\n    moveFieldInDefendPayload: (from: string, to: string) => void;\n    removeFieldFromDefendPayload: (field: string) => void;\n    defendResponse: 'error' | 'success' | null;\n    onDefendSubmit: (response: 'success' | 'error') => void;\n    getDisputesConfig: () => Promise<void>;\n    defenseReasonConfig: Record<string, TranslationConfigItem>;\n    defenseDocumentConfig: Record<string, TranslationConfigItem>;\n}\n\ninterface DisputeProviderProps {\n    dispute: IDisputeDetail | undefined;\n    setDispute: (dispute: IDisputeDetail | undefined) => void;\n}\n\nconst cloneFormData = (formData: FormData) => {\n    const formDataClone = new FormData();\n    for (const [field, value] of formData.entries()) {\n        if (value instanceof File) {\n            formDataClone.set(field, value, value.name);\n        } else formDataClone.set(field, value);\n    }\n    return formDataClone;\n};\n\nexport const DisputeFlowContext = createContext<DisputeFlowContextValue | undefined>(undefined);\n\nexport const DisputeContextProvider = memo(({ dispute, setDispute, children }: PropsWithChildren<DisputeProviderProps>) => {\n    const [flowState, setFlowState] = useState<DisputeFlowState>('details');\n    const [selectedDefenseReason, setSelectedDefenseReason] = useState<string | null>(null);\n    const [applicableDocuments, setApplicableDocuments] = useState<IDisputeDefenseDocument[] | null>([]);\n    const [defendDisputePayload, setDefendDisputePayload] = useState<FormData | null>(null);\n    const [defendResponse, setDefendResponse] = useState<'error' | 'success' | null>(null);\n\n    const clearFiles = useCallback(() => {\n        setDefendDisputePayload(previousFormData => {\n            if (previousFormData) {\n                const fileFields = [...previousFormData.keys()].filter(field => field !== 'defenseReason');\n\n                if (fileFields.length > 0) {\n                    const nextFormData = cloneFormData(previousFormData);\n                    fileFields.forEach(field => nextFormData.delete(field));\n                    return nextFormData;\n                }\n            }\n            return previousFormData;\n        });\n    }, []);\n\n    const goBack = useCallback(() => {\n        switch (flowState) {\n            case 'defendReasonSelectionView':\n                setFlowState('details');\n                break;\n            case 'accept':\n                setFlowState('details');\n                break;\n            case 'uploadDefenseFilesView':\n                clearFiles();\n                setFlowState('defendReasonSelectionView');\n                break;\n            default:\n                setFlowState('details');\n                break;\n        }\n    }, [clearFiles, flowState]);\n\n    const clearStates = useCallback(() => {\n        setSelectedDefenseReason(null);\n        setApplicableDocuments(null);\n        setDefendDisputePayload(null);\n        setDefendResponse(null);\n        setDispute(undefined);\n    }, [setDispute]);\n\n    const addFileToDefendPayload = useCallback((field: string, file: File) => {\n        setDefendDisputePayload(previousFormData => {\n            const nextFormData = previousFormData ? cloneFormData(previousFormData) : new FormData();\n            nextFormData.set(field, file, file.name);\n            return nextFormData;\n        });\n    }, []);\n\n    const moveFieldInDefendPayload = useCallback((fromField: string, toField: string) => {\n        setDefendDisputePayload(previousFormData => {\n            if (previousFormData && previousFormData.has(fromField)) {\n                const fromFieldValue = previousFormData.get(fromField)!;\n                const nextFormData = cloneFormData(previousFormData);\n\n                nextFormData.delete(fromField);\n\n                if (fromFieldValue instanceof File) {\n                    nextFormData.set(toField, fromFieldValue, fromFieldValue.name);\n                } else nextFormData.set(toField, fromFieldValue);\n\n                return nextFormData;\n            }\n            return previousFormData;\n        });\n    }, []);\n\n    const removeFieldFromDefendPayload = useCallback((field: string) => {\n        setDefendDisputePayload(previousFormData => {\n            if (previousFormData && previousFormData.has(field)) {\n                const nextFormData = cloneFormData(previousFormData);\n                nextFormData.delete(field);\n                return nextFormData;\n            }\n            return previousFormData;\n        });\n    }, []);\n\n    const onDefendSubmit = useCallback((response: 'success' | 'error') => {\n        setDefendResponse(response);\n    }, []);\n\n    useEffect(() => {\n        setDefendDisputePayload(() => {\n            if (selectedDefenseReason) {\n                const nextFormData = new FormData();\n                nextFormData.set('defenseReason', selectedDefenseReason);\n                return nextFormData;\n            }\n            return null;\n        });\n    }, [selectedDefenseReason]);\n\n    const { getCdnConfig } = useCoreContext();\n\n    const [defenseReasonConfig, setDefenseReasonConfig] = useState<Record<string, TranslationConfigItem>>(localDefenseReasonConfig);\n    const [defenseDocumentConfig, setDefenseDocumentConfig] = useState<Record<string, TranslationConfigItem>>(localDefenseDocumentConfig);\n\n    const getDisputesConfig = useCallback(async () => {\n        const defenseReasonConfig = await getCdnConfig?.<Record<string, TranslationConfigItem>>({\n            subFolder: 'disputes',\n            name: 'defenseReasonConfig',\n            fallback: localDefenseReasonConfig,\n        });\n        const defenseDocumentConfig = await getCdnConfig?.<Record<string, TranslationConfigItem>>({\n            subFolder: 'disputes',\n            name: 'defenseDocumentConfig',\n            fallback: localDefenseDocumentConfig,\n        });\n\n        setDefenseReasonConfig(defenseReasonConfig ?? localDefenseReasonConfig);\n        setDefenseDocumentConfig(defenseDocumentConfig ?? localDefenseDocumentConfig);\n    }, [getCdnConfig]);\n\n    return (\n        <DisputeFlowContext.Provider\n            value={{\n                addFileToDefendPayload,\n                applicableDocuments,\n                clearFiles,\n                clearStates,\n                defendResponse,\n                dispute,\n                flowState,\n                goBack,\n                setApplicableDocuments,\n                setFlowState,\n                setDispute,\n                selectedDefenseReason,\n                setSelectedDefenseReason,\n                defendDisputePayload,\n                onDefendSubmit,\n                moveFieldInDefendPayload,\n                removeFieldFromDefendPayload,\n                getDisputesConfig,\n                defenseReasonConfig,\n                defenseDocumentConfig,\n            }}\n        >\n            {children}\n        </DisputeFlowContext.Provider>\n    );\n});\n\nexport const useDisputeFlow = () => {\n    const context = useContext(DisputeFlowContext);\n    if (!context) throw new Error('useDisputeFlow must be used within DisputeFlowProvider');\n    return context;\n};\n","import Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { useModalContext } from '../../../../internal/Modal/Modal';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport ButtonActions from '../../../../internal/Button/ButtonActions/ButtonActions';\nimport { ButtonActionsList } from '../../../../internal/Button/ButtonActions/types';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { useDisputeFlow } from '../../context/dispute/context';\nimport useMutation from '../../../../../hooks/useMutation/useMutation';\nimport { EMPTY_OBJECT, isFunction, uniqueId } from '../../../../../utils';\nimport { TranslationKey } from '../../../../../translations';\nimport { DisputeManagementProps } from '../../types';\nimport Button from '../../../../internal/Button';\nimport Icon from '../../../../internal/Icon';\nimport './AcceptDisputeFlow.scss';\n\nexport const AcceptDisputeFlow = ({ onDisputeAccept }: Pick<DisputeManagementProps, 'onDisputeAccept'>) => {\n    const { i18n } = useCoreContext();\n    const { acceptDispute } = useConfigContext().endpoints;\n    const { dispute, clearStates, goBack } = useDisputeFlow();\n    const { withinModal } = useModalContext();\n\n    const cachedDispute = useRef(dispute).current ?? dispute;\n    const titleEl = withinModal ? TypographyElement.H2 : TypographyElement.DIV;\n\n    const disputePspReference = cachedDispute?.dispute.pspReference;\n    const disputeType = cachedDispute?.dispute.type;\n    const isRequestForInformation = disputeType === 'REQUEST_FOR_INFORMATION';\n\n    const acceptedLabel = useRef<TranslationKey>('disputes.management.accept.chargeback.accepted');\n    const acceptDisclaimer = useRef<TranslationKey>('disputes.management.accept.chargeback.disclaimer');\n    const acceptTitle = useRef<TranslationKey>('disputes.management.accept.chargeback.title');\n    const acceptButtonTitle = useRef<TranslationKey>('disputes.management.accept.chargeback.actions.accept');\n    const isRFI = useRef(isRequestForInformation);\n\n    if ((isRFI.current ||= isRequestForInformation)) {\n        acceptedLabel.current = 'disputes.management.accept.requestForInformation.accepted';\n        acceptDisclaimer.current = 'disputes.management.accept.requestForInformation.disclaimer';\n        acceptTitle.current = 'disputes.management.accept.requestForInformation.title';\n        acceptButtonTitle.current = 'disputes.management.accept.requestForInformation.actions.accept';\n    }\n\n    const [termsAgreed, setTermsAgreed] = useState(false);\n    const [disputeAccepted, setDisputeAccepted] = useState(false);\n\n    const acceptDisputeMutation = useMutation({\n        queryFn: acceptDispute,\n        options: {\n            onSuccess: useCallback(() => {\n                clearStates();\n                setDisputeAccepted(true);\n            }, [clearStates]),\n        },\n    });\n\n    const interactionsDisabled = acceptDisputeMutation.isLoading || disputeAccepted;\n    const canAcceptDispute = termsAgreed && !interactionsDisabled;\n\n    const acceptDisputeCallback = useCallback(() => {\n        if (!canAcceptDispute) return;\n        void acceptDisputeMutation.mutate(EMPTY_OBJECT, { path: { disputePspReference: disputePspReference! } });\n    }, [canAcceptDispute, disputePspReference, acceptDisputeMutation]);\n\n    const toggleTermsAgreement = useCallback(() => {\n        if (interactionsDisabled) return;\n        setTermsAgreed(prev => !prev);\n    }, [interactionsDisabled]);\n\n    const actionButtons = useMemo<ButtonActionsList>(() => {\n        return [\n            {\n                title: i18n.get(acceptButtonTitle.current),\n                disabled: !canAcceptDispute,\n                state: acceptDisputeMutation.isLoading ? 'loading' : 'default',\n                variant: ButtonVariant.PRIMARY,\n                event: acceptDisputeCallback,\n                classNames: disputeAccepted ? ['adyen-pe-accept-dispute__accepted-btn'] : undefined,\n                renderTitle: title => {\n                    if (disputeAccepted) {\n                        return (\n                            <>\n                                <Icon name=\"checkmark-circle-fill\" className=\"adyen-pe-accept-dispute__accepted-icon\" />\n                                {i18n.get('disputes.management.accept.common.accepted')}\n                            </>\n                        );\n                    }\n                    return title;\n                },\n            },\n            {\n                title: i18n.get('disputes.management.common.actions.goBack'),\n                disabled: acceptDisputeMutation.isLoading,\n                variant: ButtonVariant.SECONDARY,\n                event: goBack,\n            },\n        ];\n    }, [i18n, acceptDisputeCallback, acceptDisputeMutation.isLoading, canAcceptDispute, goBack, disputeAccepted]);\n\n    const acceptCallbackHasBeenCalled = useRef(false);\n    const termsAgreementInputId = useRef(uniqueId()).current;\n\n    useEffect(() => {\n        if (acceptCallbackHasBeenCalled.current) return;\n\n        if (disputeAccepted && disputePspReference && isFunction(onDisputeAccept)) {\n            acceptCallbackHasBeenCalled.current = true;\n            onDisputeAccept({ id: disputePspReference });\n        }\n    }, [disputeAccepted, disputePspReference, onDisputeAccept]);\n\n    return (\n        <div className=\"adyen-pe-accept-dispute__container\">\n            {disputeAccepted ? (\n                <div className=\"adyen-pe-accept-dispute__success\">\n                    <Icon name=\"checkmark-circle-fill\" className=\"adyen-pe-accept-dispute__success-icon\" />\n                    <Typography variant={TypographyVariant.TITLE}>{i18n.get(acceptedLabel.current)}</Typography>\n                    <Button variant={ButtonVariant.SECONDARY} onClick={goBack}>\n                        {i18n.get('disputes.management.common.actions.showDetails')}\n                    </Button>\n                </div>\n            ) : (\n                <>\n                    <Typography className=\"adyen-pe-accept-dispute__title\" el={titleEl} variant={TypographyVariant.TITLE} medium>\n                        {i18n.get(acceptTitle.current)}\n                    </Typography>\n                    <Typography variant={TypographyVariant.BODY} medium>\n                        {i18n.get(acceptDisclaimer.current)}\n                    </Typography>\n                    <div className=\"adyen-pe-accept-dispute__input\">\n                        <input\n                            type=\"checkbox\"\n                            disabled={interactionsDisabled}\n                            className=\"adyen-pe-visually-hidden\"\n                            id={termsAgreementInputId}\n                            onInput={toggleTermsAgreement}\n                        />\n\n                        <label className=\"adyen-pe-accept-dispute__label\" htmlFor={termsAgreementInputId}>\n                            {termsAgreed ? <Icon name=\"checkmark-square-fill\" /> : <Icon name=\"square\" />}\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                {i18n.get('disputes.management.accept.common.agree')}\n                            </Typography>\n                        </label>\n                    </div>\n\n                    <div className=\"adyen-pe-accept-dispute__actions\">\n                        <ButtonActions actions={actionButtons} />\n                    </div>\n                </>\n            )}\n        </div>\n    );\n};\n","export const BASE_CLASS = 'adyen-pe-file-input';\nexport const DEFAULT_FILE_TYPES = ['application/pdf', 'image/jpeg', 'image/jpg', 'image/png'] as const;\nexport const DEFAULT_MAX_FILE_SIZE = 2097152; // 2MB\n\nexport const validationErrors = {\n    DISALLOWED_FILE_TYPE: 'disallowed_file_type',\n    FILE_REQUIRED: 'file_required',\n    TOO_MANY_FILES: 'too_many_files',\n    VERY_LARGE_FILE: 'very_large_file',\n    MAX_FILE_SIZE: 'max_file_size',\n    MAX_DIMENSIONS: 'max_dimensions',\n} as const;\n","import Icon from '../../../Icon';\nimport Button from '../../../Button/Button';\nimport Typography from '../../../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../Typography/types';\nimport { getHumanReadableFileSize } from '../../../../../utils';\nimport { ButtonVariant } from '../../../Button/types';\nimport { Translation } from '../../../Translation';\nimport { UploadedFileProps } from '../types';\nimport { BASE_CLASS } from '../constants';\nimport { useMemo } from 'preact/hooks';\nimport '../FileInput.scss';\n\nconst classes = {\n    fileBase: `${BASE_CLASS}__file`,\n    fileButton: `${BASE_CLASS}__file-button`,\n    fileDetails: `${BASE_CLASS}__file-details`,\n    fileIcon: `${BASE_CLASS}__file-icon`,\n    fileName: `${BASE_CLASS}__file-name`,\n    fileSize: `${BASE_CLASS}__file-size`,\n};\n\nexport function UploadedFile({ file, deleteFile, disabled }: UploadedFileProps) {\n    const fileSize = useMemo(() => getHumanReadableFileSize(file.size), [file.size]);\n    return (\n        <div className={classes.fileBase}>\n            <div className={classes.fileDetails}>\n                <Icon name=\"checkmark-circle-fill\" className={classes.fileIcon} />\n                <div className={classes.fileName} title={file.name}>\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                        {file.name}\n                    </Typography>\n                </div>\n                <Typography className={classes.fileSize} el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                    {fileSize}\n                </Typography>\n            </div>\n            <Button className={classes.fileButton} disabled={disabled} variant={ButtonVariant.TERTIARY} onClick={deleteFile}>\n                <Icon name=\"trash-can\" />\n                {/* The content of this span is used as accessible name for the delete (icon) button. */}\n                {/* However, it is visually hidden (not visible), but available to assistive technology. */}\n                <span className=\"adyen-pe-visually-hidden\">\n                    <Translation translationKey=\"common.inputs.file.actions.delete\" fills={{ filename: file.name }} />\n                </span>\n            </Button>\n        </div>\n    );\n}\n\nexport default UploadedFile;\n","import { Ref, RefCallback, RefObject } from 'preact';\nimport { useMemo } from 'preact/hooks';\nimport { isFunction, noop } from '../utils';\n\nexport interface TrackedRef<T> {\n    (instance: T | null): void;\n    get current(): T | null;\n    set current(instance: T | null);\n}\n\nexport const useTrackedRef = <T>(ref?: Ref<T>) => {\n    return useMemo<TrackedRef<T>>(() => {\n        let currentInstance: TrackedRef<T>['current'] = (ref as RefObject<T>)?.current ?? null;\n        let updateRef: RefCallback<T> = noop;\n\n        if (ref) {\n            // prettier-ignore\n            updateRef = isFunction(ref)\n                ? ref // ref is a ref callback (will be used as is)\n\n                // ref is a ref object (with current property)\n                // use a callback that takes the next ref instance and updates ref\n                : instance => void (ref.current = instance);\n        }\n\n        // ref callback that takes next ref instance,\n        // and updates both currentInstance and ref\n        const trackedRef: RefCallback<T> = instance => {\n            currentInstance = instance;\n            updateRef(instance);\n        };\n\n        return Object.defineProperty(trackedRef as TrackedRef<T>, 'current', {\n            enumerable: true,\n            get: () => currentInstance,\n            set: trackedRef,\n        });\n    }, [ref]);\n};\n\nexport default useTrackedRef;\n","import cx from 'classnames';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport { fixedForwardRef } from '../../../../../utils/preact';\nimport Typography from '../../../Typography/Typography';\nimport useTrackedRef from '../../../../../hooks/useTrackedRef';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { BASE_CLASS, DEFAULT_FILE_TYPES, DEFAULT_MAX_FILE_SIZE, validationErrors } from '../constants';\nimport { getUploadedFilesFromSource, isFunction, uniqueId, UploadedFileSource } from '../../../../../utils';\nimport { TypographyElement, TypographyVariant } from '../../../Typography/types';\nimport { TranslationKey } from '../../../../../translations';\nimport { DropzoneProps, ValidationError } from '../types';\nimport Icon from '../../../Icon';\nimport '../FileInput.scss';\n\nconst classes = {\n    dropzone: `${BASE_CLASS}__dropzone`,\n    dropzoneDisabled: `${BASE_CLASS}__dropzone--disabled`,\n    dropzoneDragOver: `${BASE_CLASS}__dropzone--dragover`,\n    dropzoneError: `${BASE_CLASS}__dropzone--error`,\n    label: `${BASE_CLASS}__label`,\n    labelDefault: `${BASE_CLASS}__label-default-content`,\n    labelIcon: `${BASE_CLASS}__label-icon`,\n    labelText: `${BASE_CLASS}__label-text`,\n    error: `${BASE_CLASS}__error`,\n    errorIcon: `${BASE_CLASS}__error-icon`,\n    errorText: `${BASE_CLASS}__error-text`,\n};\n\nexport const Dropzone = fixedForwardRef<DropzoneProps, HTMLInputElement>((props, ref) => {\n    const {\n        id,\n        name,\n        children,\n        disabled = false,\n        required = false,\n        maxDimensions,\n        maxFileSize = DEFAULT_MAX_FILE_SIZE,\n        allowedFileTypes = DEFAULT_FILE_TYPES,\n        mapError,\n        uploadFiles,\n    } = props;\n\n    const { i18n } = useCoreContext();\n    const [inputError, setInputError] = useState<ValidationError | ''>('');\n    const [largeFileErrorContext, setLargeFileErrorContext] = useState<{ type: string; limit: number } | undefined>();\n    const [dragOver, setDragOver] = useState(false);\n\n    const isInvalid = !!inputError;\n    const inputName = name?.trim();\n    const inputId = useMemo(() => id || uniqueId(), [id]);\n    const inputRef = useTrackedRef(ref);\n\n    const handleDragOver = (event: DragEvent) => {\n        const hasFiles = Array.from(event.dataTransfer?.types ?? []).some(type => type === 'Files');\n        if (hasFiles) {\n            event.preventDefault();\n            setDragOver(true);\n        }\n    };\n\n    const handleDragLeave = (event: DragEvent) => {\n        event.preventDefault();\n        setDragOver(false);\n    };\n\n    const handleDrop = (event: DragEvent) => {\n        event.preventDefault();\n        setDragOver(false);\n        updateFiles(event.dataTransfer);\n    };\n\n    const handleFileChange = (event: Event) => {\n        largeFileErrorContext && setLargeFileErrorContext(undefined);\n        updateFiles(event.target as HTMLInputElement);\n    };\n\n    const handleInputBlur = async (event: FocusEvent) => {\n        if (event.target !== document.activeElement) {\n            (event.target as HTMLInputElement)?.checkValidity();\n        }\n    };\n\n    const handleInputInvalid = async (event: Event) => {\n        if (!inputError && (event.target as HTMLInputElement).validity.valueMissing) {\n            // Since there is currently no other custom input validation message,\n            // Replace the default \"required\" constraint validation message (if necessary)\n            updateInputValidationError(validationErrors.FILE_REQUIRED);\n        }\n    };\n\n    const updateInputValidationError = useCallback(\n        (error: string) => {\n            const inputElement = inputRef.current;\n\n            if (inputElement) {\n                const currentRequired = inputElement.required;\n\n                // Temporarily mark input as optional before accessing validation message,\n                // to evade the default \"required\" constraint validation message.\n                inputElement.required = false;\n                inputElement.setCustomValidity(error);\n                setInputError((inputElement.validationMessage as ValidationError) ?? '');\n\n                // Restore the required state of the input\n                inputElement.required = currentRequired;\n            }\n        },\n        [inputRef]\n    );\n\n    const getImageDimensions = async (file: File): Promise<{ width: number; height: number }> => {\n        return new Promise((resolve, reject) => {\n            const image = new Image();\n            const url = URL.createObjectURL(file);\n            image.src = url;\n            image.onerror = reject;\n            image.onload = function () {\n                resolve({ width: image.width, height: image.height });\n            };\n        });\n    };\n\n    const updateFiles = useCallback(\n        async <T extends UploadedFileSource>(source?: T | null): Promise<void> => {\n            const uploadedFiles = getUploadedFilesFromSource(source);\n\n            if (uploadedFiles.length > 1) {\n                return updateInputValidationError(validationErrors.TOO_MANY_FILES);\n            }\n\n            try {\n                const dimensionFilteredFiles = await Promise.all(\n                    uploadedFiles.map(async file => {\n                        if (!maxDimensions || !maxDimensions?.width || !maxDimensions?.height) return file;\n                        const dimensions = await getImageDimensions(file);\n                        if (!(maxDimensions?.width === dimensions.width) || !(maxDimensions?.height === dimensions.height)) {\n                            throw validationErrors.MAX_DIMENSIONS;\n                        }\n                        return file;\n                    })\n                );\n                const allowedFiles = dimensionFilteredFiles.filter(file => {\n                    if (!allowedFileTypes.includes(file.type)) {\n                        throw validationErrors.DISALLOWED_FILE_TYPE;\n                    }\n\n                    // Determine the current max file size for the file type\n                    const currentMaxFileSize = isFunction(maxFileSize) ? (maxFileSize(file.type) ?? DEFAULT_MAX_FILE_SIZE) : maxFileSize;\n                    if (file.size > currentMaxFileSize) {\n                        setLargeFileErrorContext({ type: file.type, limit: currentMaxFileSize });\n                        throw validationErrors.VERY_LARGE_FILE;\n                    }\n                    return true;\n                });\n\n                updateInputValidationError('');\n                uploadFiles(allowedFiles);\n            } catch (ex) {\n                switch (ex) {\n                    case validationErrors.DISALLOWED_FILE_TYPE:\n                    case validationErrors.VERY_LARGE_FILE:\n                    case validationErrors.MAX_DIMENSIONS:\n                        return updateInputValidationError(ex);\n                }\n            }\n        },\n        [allowedFileTypes, maxFileSize, updateInputValidationError, uploadFiles, maxDimensions]\n    );\n\n    return (\n        <>\n            <div\n                role=\"region\"\n                className={cx(classes.dropzone, {\n                    [classes.dropzoneDisabled]: disabled,\n                    [classes.dropzoneDragOver]: dragOver,\n                    [classes.dropzoneError]: isInvalid,\n                })}\n                onDragOver={disabled ? undefined : handleDragOver}\n                onDragLeave={disabled ? undefined : handleDragLeave}\n                onDrop={disabled ? undefined : handleDrop}\n            >\n                <input\n                    type=\"file\"\n                    className=\"adyen-pe-visually-hidden\"\n                    id={inputId}\n                    ref={inputRef}\n                    name={inputName}\n                    disabled={disabled}\n                    required={required}\n                    accept={String(allowedFileTypes)}\n                    onBlur={handleInputBlur}\n                    onChange={handleFileChange}\n                    onInvalid={handleInputInvalid}\n                    aria-invalid={isInvalid}\n                    data-testId=\"dropzone-input\"\n                />\n\n                {/* Using the label element here to expose a user interaction surface for the file input element. */}\n                {/* The input element itself is visually hidden (not visible), but available to assistive technology. */}\n                {/* To preserve proper focus styling, this label element should always come after the input element. */}\n                <label className={classes.label} htmlFor={inputId}>\n                    {children ?? (\n                        <div className={cx(classes.labelDefault)}>\n                            {\n                                // prettier-ignore\n                                isInvalid\n                                    ? <Icon name=\"warning-filled\" className={classes.labelIcon} />\n                                    : <Icon name=\"upload\" className={classes.labelIcon} />\n                            }\n                            <Typography className={classes.labelText} el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                                {i18n.get('common.inputs.file.labels.default')}\n                            </Typography>\n                        </div>\n                    )}\n                </label>\n            </div>\n            {isInvalid && (\n                <div className={classes.error}>\n                    <Icon name=\"cross-circle-fill\" className={classes.errorIcon} />\n                    <Typography className={classes.errorText} el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                        {isFunction(mapError)\n                            ? mapError(\n                                  inputError,\n                                  largeFileErrorContext ? { size: largeFileErrorContext.limit, type: largeFileErrorContext.type } : undefined\n                              )\n                            : i18n.get(inputError as TranslationKey)}\n                    </Typography>\n                </div>\n            )}\n        </>\n    );\n});\n\nexport default Dropzone;\n","import useCoreContext from '../../../../core/Context/useCoreContext';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { fixedForwardRef } from '../../../../utils/preact';\nimport UploadedFile from './components/UploadedFile';\nimport Dropzone from './components/Dropzone';\nimport { isFunction } from '../../../../utils';\nimport { BASE_CLASS, validationErrors } from './constants';\nimport { FileInputProps, ValidationError } from './types';\nimport './FileInput.scss';\n\nexport const FileInput = fixedForwardRef<FileInputProps, HTMLInputElement>(({ onChange, mapError, onDelete, ...restProps }, ref) => {\n    const [files, setFiles] = useState<File[]>([]);\n    const uploadedFiles = useRef(files);\n    const uploadedFile = files[0];\n    const { i18n } = useCoreContext();\n    const { disabled } = restProps;\n\n    const defaultMapError = useCallback(\n        (error: ValidationError): string => {\n            switch (error) {\n                case validationErrors.DISALLOWED_FILE_TYPE:\n                    return i18n.get('common.inputs.file.errors.disallowedType');\n                case validationErrors.FILE_REQUIRED:\n                    return i18n.get('common.inputs.file.errors.required');\n                case validationErrors.TOO_MANY_FILES:\n                    return i18n.get('common.inputs.file.errors.tooMany');\n                case validationErrors.VERY_LARGE_FILE:\n                    return i18n.get('common.inputs.file.errors.tooLarge');\n                case validationErrors.MAX_DIMENSIONS:\n                    return i18n.get('common.inputs.file.errors.maxDimensions');\n            }\n            return '';\n        },\n        [i18n]\n    );\n\n    const mapErrorWithFallback = useMemo(() => (isFunction(mapError) ? mapError : defaultMapError), [mapError]);\n\n    const deleteFile = useCallback(\n        (fileToDelete: File) => {\n            if (disabled) return;\n            setFiles(currentFiles => {\n                const fileIndex = currentFiles.findIndex(file => file === fileToDelete);\n\n                if (fileIndex < 0) {\n                    // Negative fileIndex means the file isn't in the array\n                    // Nothing to delete, return currentFiles (state did not change)\n                    return currentFiles;\n                }\n\n                // Modify and return a clone (instead of the original currentFiles array),\n                // so that state is considered to have changed\n                const [...currentFilesCopy] = currentFiles;\n                currentFilesCopy.splice(fileIndex, 1);\n                return currentFilesCopy;\n            });\n\n            onDelete?.();\n        },\n        [disabled, onDelete]\n    );\n\n    const uploadFiles = useCallback(\n        (files: File[]) => {\n            if (disabled) return;\n            setFiles(currentFiles => {\n                if (currentFiles.length === 0 && files.length === 0) {\n                    // No uploaded files currently, and no files will be uploaded,\n                    // Nothing to upload, return currentFiles (state did not change)\n                    return currentFiles;\n                } else {\n                    return files;\n                }\n            });\n        },\n        [disabled]\n    );\n\n    useEffect(() => {\n        // Skip calling onChange callback if the uploaded files haven't changed\n        if (uploadedFiles.current === files) return;\n\n        // Uploaded files array changed (update the tracking ref)\n        uploadedFiles.current = files;\n\n        // Attempt calling onChange callback\n        // Pass a clone of the files array (to avoid unexpected mutation)\n        onChange?.([...files]);\n    }, [files, onChange]);\n\n    return (\n        <div className={BASE_CLASS}>\n            {\n                // prettier-ignore\n                uploadedFile\n                    ? <UploadedFile disabled={disabled} file={uploadedFile} deleteFile={() => deleteFile(uploadedFile)} />\n                    : <Dropzone {...restProps} ref={ref} mapError={mapErrorWithFallback} uploadFiles={uploadFiles} />\n            }\n        </div>\n    );\n});\n\nexport default FileInput;\n","import Localization from '../../../../core/Localization';\n\nexport type TranslationConfigItem = {\n    title: string;\n    help?: string | string[];\n    helpitems?: string[];\n};\n\nexport type Content = {\n    title: string;\n    primaryDescriptionItems?: string[];\n    secondaryDescriptionItems?: string[];\n};\n\nconst getTranslationIfExists = (i18n: Localization['i18n'], prefix: string, key: string): string | undefined => {\n    const prefixedKey = `${prefix}.${key}`;\n    return i18n.has(prefixedKey) ? i18n.get(prefixedKey) : undefined;\n};\n\nconst getContent = (\n    i18n: Localization['i18n'],\n    config: Record<string, TranslationConfigItem>,\n    configItemKey: string,\n    translationPrefix: string\n): Content | undefined => {\n    const configItem = config[configItemKey];\n    if (!configItem) return undefined;\n\n    const title = getTranslationIfExists(i18n, translationPrefix, configItem.title);\n\n    const descriptionKeys = configItem.help ? (Array.isArray(configItem.help) ? configItem.help : [configItem.help]) : undefined;\n    const primaryDescriptionItems: string[] | undefined = descriptionKeys\n        ?.map(key => getTranslationIfExists(i18n, translationPrefix, key))\n        .filter((k): k is string => k !== undefined);\n\n    const secondaryDescriptionItems: string[] = [];\n\n    if (configItem.helpitems) {\n        configItem.helpitems.forEach(item => {\n            const translation = getTranslationIfExists(i18n, translationPrefix, item);\n            if (translation) secondaryDescriptionItems.push(translation);\n        });\n    }\n\n    return {\n        title: title || '',\n        ...(primaryDescriptionItems?.length ? { primaryDescriptionItems } : {}),\n        ...(secondaryDescriptionItems?.length ? { secondaryDescriptionItems } : {}),\n    };\n};\n\nexport const getDefenseDocumentContent = (\n    defenseDocumentConfig: Record<string, TranslationConfigItem>,\n    i18n: Localization['i18n'],\n    defenseDocumentKey: string\n) => {\n    return getContent(i18n, defenseDocumentConfig, defenseDocumentKey, 'disputes.management.common.defenseDocuments');\n};\n\nexport const getDefenseReasonContent = (\n    defenseReasonConfig: Record<string, TranslationConfigItem>,\n    i18n: Localization['i18n'],\n    defenseReasonKey: string\n) => {\n    return getContent(i18n, defenseReasonConfig, defenseReasonKey, 'disputes.management.common.defenseReasons');\n};\n","const UPLOAD_DOCUMENT_MAX_SIZE = {\n    '2MB': 2097152,\n    '10MB': 10485760,\n};\n\nexport const ALLOWED_FILE_TYPES = ['application/pdf', 'image/jpeg', 'image/jpg', 'image/tiff'] as const;\n\nexport const DOCUMENT_MAX_SIZE: { [k in (typeof ALLOWED_FILE_TYPES)[number]]: number } = {\n    'application/pdf': UPLOAD_DOCUMENT_MAX_SIZE['2MB'],\n    'image/jpeg': UPLOAD_DOCUMENT_MAX_SIZE['10MB'],\n    'image/jpg': UPLOAD_DOCUMENT_MAX_SIZE['10MB'],\n    'image/tiff': UPLOAD_DOCUMENT_MAX_SIZE['10MB'],\n};\n","import FileInput from '../../../../internal/FormFields/FileInput/FileInput';\nimport { getDefenseDocumentContent } from '../../utils';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { useMemo } from 'preact/hooks';\nimport { useDisputeFlow } from '../../context/dispute/context';\nimport { ALLOWED_FILE_TYPES, DOCUMENT_MAX_SIZE } from './constants';\nimport { MapErrorCallback } from './types';\n\nexport const DefendDocumentUpload = ({\n    document,\n    disabled,\n    required,\n    mapError,\n}: {\n    document: string;\n    disabled?: boolean;\n    required: boolean;\n    mapError: MapErrorCallback;\n}) => {\n    const { i18n } = useCoreContext();\n    const { removeFieldFromDefendPayload, addFileToDefendPayload, defenseDocumentConfig } = useDisputeFlow();\n    const { title, primaryDescriptionItems } =\n        useMemo(() => getDefenseDocumentContent(defenseDocumentConfig, i18n, document), [defenseDocumentConfig, i18n, document]) || {};\n    return (\n        <div className=\"adyen-pe-defend-dispute-document-upload\">\n            <div>\n                <Typography\n                    strongest\n                    className=\"adyen-pe-defend-dispute-document-upload__title\"\n                    variant={TypographyVariant.BODY}\n                    el={TypographyElement.DIV}\n                >\n                    {title || document}\n                </Typography>\n                {primaryDescriptionItems && primaryDescriptionItems.length > 0\n                    ? primaryDescriptionItems.map((desc, i) => {\n                          return (\n                              <Typography\n                                  key={`${i}-description`}\n                                  className=\"adyen-pe-defend-dispute-document-upload__description\"\n                                  variant={TypographyVariant.BODY}\n                              >\n                                  {desc}\n                              </Typography>\n                          );\n                      })\n                    : null}\n            </div>\n            <FileInput\n                allowedFileTypes={ALLOWED_FILE_TYPES}\n                maxFileSize={type => {\n                    return DOCUMENT_MAX_SIZE[type as keyof typeof DOCUMENT_MAX_SIZE];\n                }}\n                mapError={mapError}\n                onDelete={() => {\n                    document && removeFieldFromDefendPayload(document);\n                }}\n                key={document}\n                disabled={disabled}\n                required={required}\n                onChange={files => {\n                    files[0] ? addFileToDefendPayload(document, files[0]) : removeFieldFromDefendPayload(document);\n                }}\n            />\n        </div>\n    );\n};\n","import cx from 'classnames';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Select from '../../../../internal/FormFields/Select';\nimport FileInput from '../../../../internal/FormFields/FileInput/FileInput';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { SelectItem } from '../../../../internal/FormFields/Select/types';\nimport { useDisputeFlow } from '../../context/dispute/context';\nimport { getDefenseDocumentContent } from '../../utils';\nimport { useCallback, useEffect, useMemo } from 'preact/hooks';\nimport Button from '../../../../internal/Button/Button';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport Icon from '../../../../internal/Icon';\nimport { ALLOWED_FILE_TYPES, DOCUMENT_MAX_SIZE } from './constants';\nimport { MapErrorCallback } from './types';\n\nconst BASE_CLASS = 'adyen-pe-defend-dispute-document-upload-box';\n\nconst classes = {\n    deleteButton: BASE_CLASS + '__delete-button-container',\n    dropdownList: BASE_CLASS + '__dropdown-list',\n    dropdownListMobile: BASE_CLASS + '__dropdown-list--mobile',\n    extraDocuments: BASE_CLASS + '__extra-documents-selector',\n    extraDocumentsTitle: BASE_CLASS + '__extra-documents-selector-title',\n};\n\nconst SelectAndUploadOptionalDoc = ({\n    items,\n    selection,\n    setSelection,\n    disabled,\n    required,\n    title,\n    index,\n    onRemoveOption,\n    mapError,\n}: {\n    items: SelectItem[];\n    selection: string | undefined;\n    setSelection: (val: string, index?: number) => void;\n    disabled?: boolean;\n    required: boolean;\n    title: string;\n    index?: number;\n    onRemoveOption?: (index: number) => void;\n    mapError: MapErrorCallback;\n}) => {\n    const { i18n } = useCoreContext();\n    const { addFileToDefendPayload, moveFieldInDefendPayload, removeFieldFromDefendPayload, defenseDocumentConfig } = useDisputeFlow();\n    const documentSelectLabel = useMemo(() => i18n.get('disputes.management.defend.common.inputs.documentSelect.a11y.label'), [i18n]);\n    const isMobileContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    const getDocInfo = useCallback(\n        (document: string) => getDefenseDocumentContent(defenseDocumentConfig, i18n, document),\n        [defenseDocumentConfig, i18n]\n    );\n\n    const updateDocumentSelection = useCallback(\n        (documentSelection: string) => {\n            selection && moveFieldInDefendPayload(selection, documentSelection);\n            setSelection(documentSelection, index);\n        },\n        [index, moveFieldInDefendPayload, selection, setSelection]\n    );\n\n    useEffect(() => {\n        const activeSelectItems = items.filter(({ disabled }) => disabled !== true);\n        if (activeSelectItems.length === 1 && !selection) {\n            updateDocumentSelection(activeSelectItems[0]!.id);\n        }\n    }, [items, selection, updateDocumentSelection]);\n\n    return (\n        <div className={classes.extraDocuments}>\n            <div className={classes.deleteButton}>\n                <Typography strongest className={classes.extraDocumentsTitle} variant={TypographyVariant.BODY} el={TypographyElement.DIV}>\n                    {title}\n                </Typography>\n                {onRemoveOption && (\n                    <Button\n                        disabled={disabled}\n                        aria-label={i18n.get('disputes.management.defend.common.actions.deleteOptionalDocument')}\n                        onClick={() => index !== undefined && !disabled && onRemoveOption(index)}\n                        variant={ButtonVariant.TERTIARY}\n                        fullWidth={false}\n                        align=\"center\"\n                    >\n                        <Icon name=\"trash-can\" />\n                    </Button>\n                )}\n            </div>\n            <div>\n                <Select\n                    onChange={val => {\n                        const documentSelection = val.target.value;\n                        updateDocumentSelection(documentSelection);\n                    }}\n                    items={items}\n                    filterable={false}\n                    multiSelect={false}\n                    showOverlay={false}\n                    selected={selection}\n                    readonly={disabled}\n                    aria-label={documentSelectLabel}\n                    placeholder={documentSelectLabel}\n                    popoverClassNameModifiers={[cx(classes.dropdownList, { [classes.dropdownListMobile]: isMobileContainer })]}\n                />\n                {selection &&\n                    getDocInfo(selection)?.primaryDescriptionItems?.map(desc => {\n                        return (\n                            <Typography\n                                key={desc}\n                                className=\"adyen-pe-defend-dispute-document-upload__description\"\n                                variant={TypographyVariant.BODY}\n                                el={TypographyElement.PARAGRAPH}\n                            >\n                                {desc}\n                            </Typography>\n                        );\n                    })}\n            </div>\n            <FileInput\n                maxFileSize={type => {\n                    return DOCUMENT_MAX_SIZE[type as keyof typeof DOCUMENT_MAX_SIZE];\n                }}\n                allowedFileTypes={ALLOWED_FILE_TYPES}\n                mapError={mapError}\n                onDelete={() => {\n                    selection && removeFieldFromDefendPayload(selection);\n                }}\n                disabled={disabled || !selection}\n                required={required}\n                onChange={files => {\n                    if (selection) {\n                        files[0] ? addFileToDefendPayload(selection, files[0]) : removeFieldFromDefendPayload(selection);\n                    }\n                }}\n            />\n        </div>\n    );\n};\n\nexport default SelectAndUploadOptionalDoc;\n","import { useCallback, useMemo, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport useMutation from '../../../../../hooks/useMutation/useMutation';\nimport { TranslationKey } from '../../../../../translations';\nimport ButtonActions from '../../../../internal/Button/ButtonActions/ButtonActions';\nimport Card from '../../../../internal/Card/Card';\nimport { TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { useDisputeFlow } from '../../context/dispute/context';\nimport { DefendDocumentUpload } from './DefendDocumentUpload';\nimport { SelectItem } from '../../../../internal/FormFields/Select/types';\nimport SelectAndUploadOptionalDoc from './SelectAndUploadOptionalDoc';\nimport Button from '../../../../internal/Button';\nimport Icon from '../../../../internal/Icon';\nimport { ButtonActionsList } from '../../../../internal/Button/ButtonActions/types';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { getDefenseDocumentContent } from '../../utils';\nimport { validationErrors } from '../../../../internal/FormFields/FileInput/constants';\nimport { getHumanReadableFileSize } from '../../../../../utils';\nimport { MapErrorCallback } from './types';\nimport './DefendDisputeFlow.scss';\n\nconst documentRequirements: TranslationKey[] = [\n    'disputes.management.defend.common.documentRequirements.language',\n    'disputes.management.defend.common.documentRequirements.recommendedSize',\n    'disputes.management.defend.common.documentRequirements.formatAndSize',\n];\n\nexport const DefendDisputeFileUpload = () => {\n    const { i18n } = useCoreContext();\n    const { defendDispute } = useConfigContext().endpoints;\n    const {\n        clearFiles,\n        clearStates,\n        dispute,\n        applicableDocuments,\n        goBack,\n        defendDisputePayload,\n        defendResponse,\n        onDefendSubmit,\n        removeFieldFromDefendPayload,\n        setFlowState,\n        defenseDocumentConfig,\n    } = useDisputeFlow();\n\n    const disputePspReference = dispute?.dispute.pspReference;\n\n    const [oneOrMoreSelectedDocument, setOneOrMoreSelectedDocument] = useState<string | undefined>(undefined);\n    const [optionalSelectedDocuments, setOptionalSelectedDocuments] = useState<(string | undefined)[]>([]);\n\n    const goBackToDetails = useCallback(() => {\n        clearStates();\n        setFlowState('details');\n    }, [clearStates, setFlowState]);\n\n    const mapError: MapErrorCallback = useCallback(\n        (error, file) => {\n            switch (error) {\n                case validationErrors.DISALLOWED_FILE_TYPE:\n                    return i18n.get('common.inputs.file.errors.disallowedType');\n                case validationErrors.FILE_REQUIRED:\n                    return i18n.get('disputes.management.defend.common.inputs.file.errors.required');\n                case validationErrors.TOO_MANY_FILES:\n                    return i18n.get('common.inputs.file.errors.tooMany');\n                case validationErrors.VERY_LARGE_FILE:\n                    return i18n.get('disputes.management.defend.common.inputs.file.errors.tooLarge', {\n                        values: {\n                            size: file?.size === undefined ? undefined : getHumanReadableFileSize(file.size),\n                            type: file?.type?.replace(/^([^/]+\\/)*/gi, '')?.toUpperCase(),\n                        },\n                    });\n                default:\n                    return i18n.get('disputes.management.defend.common.inputs.file.errors.default');\n            }\n        },\n        [i18n]\n    );\n\n    const { requiredDocuments, optionalDocuments, oneOrMoreDocuments } = useMemo(() => {\n        const docs: { requiredDocuments: string[]; optionalDocuments: SelectItem<string>[]; oneOrMoreDocuments: SelectItem<string>[] } = {\n            requiredDocuments: [],\n            optionalDocuments: [],\n            oneOrMoreDocuments: [],\n        };\n\n        (applicableDocuments ?? []).forEach(({ documentTypeCode, requirementLevel }) => {\n            const name = getDefenseDocumentContent(defenseDocumentConfig, i18n, documentTypeCode)?.title || documentTypeCode;\n            switch (requirementLevel) {\n                case 'REQUIRED':\n                    docs.requiredDocuments.push(documentTypeCode);\n                    break;\n                case 'OPTIONAL':\n                    docs.optionalDocuments.push({\n                        id: documentTypeCode,\n                        name,\n                    });\n                    break;\n                case 'ONE_OR_MORE':\n                    docs.oneOrMoreDocuments.push({\n                        id: documentTypeCode,\n                        name,\n                    });\n                    break;\n            }\n            return docs;\n        });\n\n        return docs;\n    }, [applicableDocuments, i18n]);\n\n    const requiredDocumentsUploaded = useMemo(() => {\n        if (!defendDisputePayload) return false;\n\n        let requiredDocumentsPresent = requiredDocuments.every(d => defendDisputePayload.get(d) instanceof File);\n\n        if (oneOrMoreDocuments.length > 0) {\n            requiredDocumentsPresent &&= oneOrMoreDocuments.some(d => defendDisputePayload.get(d.id) instanceof File);\n        }\n        return requiredDocumentsPresent;\n    }, [defendDisputePayload, oneOrMoreDocuments, requiredDocuments]);\n\n    const defendDisputeMutation = useMutation({\n        queryFn: defendDispute,\n        options: {\n            onSuccess: useCallback(() => {\n                clearFiles();\n                onDefendSubmit('success');\n                setFlowState('defenseSubmitResponseView');\n            }, [clearFiles, onDefendSubmit, setFlowState]),\n            onError: useCallback(() => {\n                clearFiles();\n                onDefendSubmit('error');\n                setFlowState('defenseSubmitResponseView');\n            }, [clearFiles, onDefendSubmit, setFlowState]),\n        },\n    });\n\n    const disputeDefended = defendResponse === 'success';\n    const interactionsDisabled = defendDisputeMutation.isLoading || disputeDefended;\n    const canSubmitDocuments = defendDisputePayload && requiredDocumentsUploaded && !interactionsDisabled;\n\n    const defendDisputeCallback = useCallback(() => {\n        if (canSubmitDocuments) {\n            void defendDisputeMutation.mutate(\n                { contentType: 'multipart/form-data', body: defendDisputePayload },\n                { path: { disputePspReference: disputePspReference! } }\n            );\n        }\n    }, [canSubmitDocuments, disputePspReference, defendDisputeMutation, defendDisputePayload]);\n\n    const actionButtons = useMemo<ButtonActionsList>(() => {\n        return [\n            {\n                title: i18n.get('disputes.management.defend.common.actions.submit'),\n                disabled: !canSubmitDocuments,\n                state: defendDisputeMutation.isLoading ? 'loading' : 'default',\n                variant: ButtonVariant.PRIMARY,\n                event: defendDisputeCallback,\n                classNames: disputeDefended ? ['adyen-pe-defend-dispute__defended-btn'] : undefined,\n                renderTitle: title => {\n                    if (disputeDefended) {\n                        return (\n                            <>\n                                <Icon name=\"checkmark-circle-fill\" className=\"adyen-pe-defend-dispute__defended-icon\" />\n                                {i18n.get('disputes.management.defend.common.defended')}\n                            </>\n                        );\n                    }\n                    return title;\n                },\n            },\n            {\n                title: i18n.get('disputes.management.common.actions.goBack'),\n                disabled: defendDisputeMutation.isLoading,\n                variant: ButtonVariant.SECONDARY,\n                event: disputeDefended ? goBackToDetails : goBack,\n            },\n        ];\n    }, [i18n, canSubmitDocuments, defendDisputeMutation.isLoading, defendDisputeCallback, disputeDefended, goBackToDetails, goBack]);\n\n    const addOptionalDocument = useCallback((documentType?: string, index?: number) => {\n        if (documentType === undefined) {\n            setOptionalSelectedDocuments(prev => [...prev, documentType]);\n        } else if (index !== undefined) {\n            setOptionalSelectedDocuments(prev => {\n                if (prev[index] === documentType) {\n                    return prev;\n                }\n                const newDocs = [...prev];\n                newDocs[index] = documentType;\n                return newDocs;\n            });\n        }\n    }, []);\n\n    const canAddOptionalDocument = useMemo(() => {\n        if (interactionsDisabled) return false;\n        const optionalDocumentsCount = optionalDocuments.length + Math.max(0, oneOrMoreDocuments.length - 1);\n        return Boolean(optionalDocumentsCount && optionalDocumentsCount !== optionalSelectedDocuments.length);\n    }, [interactionsDisabled, oneOrMoreDocuments, optionalDocuments, optionalSelectedDocuments]);\n\n    const addEmptyOptionalDocument = useCallback(() => {\n        if (canAddOptionalDocument) addOptionalDocument();\n    }, [canAddOptionalDocument, addOptionalDocument]);\n\n    const availableOptionalDocuments = useMemo(() => {\n        const additionalOptionalDocs = oneOrMoreDocuments.filter(doc => doc.id !== oneOrMoreSelectedDocument);\n\n        return [...additionalOptionalDocs, ...optionalDocuments].map(doc => {\n            return { ...doc, disabled: optionalSelectedDocuments.includes(doc.id) };\n        });\n    }, [oneOrMoreDocuments, oneOrMoreSelectedDocument, optionalDocuments, optionalSelectedDocuments]);\n\n    const removeSelectedOptionalDocument = useCallback(\n        (indexToRemove: number) => {\n            setOptionalSelectedDocuments(prevDocs => {\n                if (indexToRemove < 0 || indexToRemove >= prevDocs.length) {\n                    return prevDocs;\n                }\n                const docToRemove = prevDocs[indexToRemove];\n\n                // If removeFileFromDefendPayload exists and a document type was actually selected for this slot\n                if (docToRemove) {\n                    removeFieldFromDefendPayload(docToRemove);\n                }\n                return prevDocs.filter((_, index) => index !== indexToRemove);\n            });\n        },\n        [removeFieldFromDefendPayload]\n    );\n\n    return (\n        <>\n            <>\n                <Typography className=\"adyen-pe-defend-dispute-file-uploader__subtitle\" variant={TypographyVariant.BODY}>\n                    {i18n.get('disputes.management.defend.common.documentUploadInfo')}\n                </Typography>\n                <Card\n                    renderHeader={\n                        <Typography variant={TypographyVariant.BODY} stronger className={'adyen-pe-defend-dispute-document-requirements'}>\n                            {i18n.get('disputes.management.defend.common.documentRequirements')}\n                        </Typography>\n                    }\n                    filled\n                    expandable\n                    compact\n                >\n                    <ul className={'adyen-pe-defend-dispute-document-requirements--list'}>\n                        {documentRequirements.map((item, index) => (\n                            <li className={'adyen-pe-defend-dispute-document-requirements--item'} key={`${item}-${index}`}>\n                                <Typography variant={TypographyVariant.BODY}>{i18n.get(item)}</Typography>\n                            </li>\n                        ))}\n                    </ul>\n                </Card>\n                <div className={'adyen-pe-defend-dispute-file-uploader__container'}>\n                    {requiredDocuments.length || oneOrMoreDocuments.length ? (\n                        <div className=\"adyen-pe-defend-dispute-document-upload-box\">\n                            {requiredDocuments.length ? (\n                                <div className=\"adyen-pe-defend-dispute-document-upload-box__required-documents\">\n                                    {requiredDocuments?.map(document => {\n                                        return (\n                                            <DefendDocumentUpload\n                                                mapError={mapError}\n                                                disabled={interactionsDisabled}\n                                                key={document}\n                                                document={document}\n                                                required\n                                            />\n                                        );\n                                    })}\n                                </div>\n                            ) : null}\n\n                            {oneOrMoreDocuments.length ? (\n                                <SelectAndUploadOptionalDoc\n                                    mapError={mapError}\n                                    disabled={interactionsDisabled}\n                                    selection={oneOrMoreSelectedDocument}\n                                    setSelection={(val: string) => setOneOrMoreSelectedDocument(val)}\n                                    items={oneOrMoreDocuments}\n                                    title={i18n.get('disputes.management.defend.common.documentTypes.required')}\n                                    required\n                                />\n                            ) : null}\n                        </div>\n                    ) : null}\n                    {optionalSelectedDocuments.length\n                        ? optionalSelectedDocuments.map((doc, index) => {\n                              return (\n                                  <div key={`optional-doc-${index}`} className=\"adyen-pe-defend-dispute-document-upload-box\">\n                                      <SelectAndUploadOptionalDoc\n                                          mapError={mapError}\n                                          disabled={interactionsDisabled}\n                                          onRemoveOption={removeSelectedOptionalDocument}\n                                          selection={doc}\n                                          setSelection={addOptionalDocument}\n                                          index={index}\n                                          items={availableOptionalDocuments}\n                                          title={i18n.get('disputes.management.defend.common.documentTypes.optional')}\n                                          required\n                                      />\n                                  </div>\n                              );\n                          })\n                        : null}\n                    {canAddOptionalDocument && (\n                        <Button align=\"center\" onClick={addEmptyOptionalDocument} variant={ButtonVariant.SECONDARY} fullWidth>\n                            <Icon name=\"plus\" />\n                            {i18n.get('disputes.management.defend.common.actions.addOptionalDocument')}\n                        </Button>\n                    )}\n                </div>\n                <div className={'adyen-pe-defend-file-uploader__actions'}>\n                    <ButtonActions actions={actionButtons} />\n                </div>\n            </>\n        </>\n    );\n};\n","import cx from 'classnames';\nimport { useEffect } from 'preact/compat';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { useFetch } from '../../../../../hooks/useFetch';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { IDisputeDefenseDocument } from '../../../../../types/api/models/disputes';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport Alert from '../../../../internal/Alert/Alert';\nimport { AlertTypeOption, AlertVariantOption } from '../../../../internal/Alert/types';\nimport ButtonActions from '../../../../internal/Button/ButtonActions/ButtonActions';\nimport Select from '../../../../internal/FormFields/Select';\nimport { SelectChangeEvent } from '../../../../internal/FormFields/Select/types';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { useDisputeFlow } from '../../context/dispute/context';\nimport { getDefenseReasonContent } from '../../utils';\n\nconst BASE_CLASS = 'adyen-pe-defend-dispute-reason';\n\nconst classes = {\n    selector: BASE_CLASS + '__selector',\n    description: BASE_CLASS + '__description',\n    dropdownList: BASE_CLASS + '__dropdown-list',\n    dropdownListMobile: BASE_CLASS + '__dropdown-list--mobile',\n};\n\nexport const DefendDisputeReason = () => {\n    const { i18n } = useCoreContext();\n    const {\n        applicableDocuments,\n        dispute,\n        goBack,\n        setFlowState,\n        setSelectedDefenseReason,\n        selectedDefenseReason,\n        setApplicableDocuments,\n        defenseReasonConfig,\n    } = useDisputeFlow();\n\n    const allowedDefenseReasons = dispute?.dispute?.allowedDefenseReasons;\n    const disputePspReference = dispute?.dispute?.pspReference;\n    const [isReasonSubmitted, setIsReasonSubmitted] = useState<boolean>(false);\n    const isMobileContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    //TODO: Add the translations for defend reason\n    const defenseReasons: Readonly<{ id: string; name: string }[] | null> = useMemo(\n        () =>\n            Object.freeze(\n                allowedDefenseReasons?.map(reason => ({\n                    id: reason,\n                    disabled: allowedDefenseReasons.length === 1,\n                    name: getDefenseReasonContent(defenseReasonConfig, i18n, reason)?.title ?? reason,\n                }))\n            ) ?? [],\n        [i18n, allowedDefenseReasons, defenseReasonConfig]\n    );\n\n    const selected = useMemo(\n        () => (selectedDefenseReason ? defenseReasons.find(reason => reason.id === selectedDefenseReason)?.id : (defenseReasons?.[0]?.id ?? null)),\n        [selectedDefenseReason, defenseReasons]\n    );\n\n    useEffect(() => {\n        if (selected) {\n            setSelectedDefenseReason(selected);\n        }\n    }, [selected, isReasonSubmitted]);\n\n    const { getApplicableDefenseDocuments } = useConfigContext().endpoints;\n\n    const fetchCallback = useCallback(async () => {\n        return getApplicableDefenseDocuments?.(EMPTY_OBJECT, {\n            query: {\n                defenseReason: selectedDefenseReason!,\n            },\n            path: {\n                disputePspReference: disputePspReference!,\n            },\n        });\n    }, [selectedDefenseReason, disputePspReference, getApplicableDefenseDocuments]);\n\n    const { error, isFetching } = useFetch({\n        queryFn: fetchCallback,\n        fetchOptions: {\n            enabled: isReasonSubmitted,\n            onSuccess: useCallback(\n                (response: { data: IDisputeDefenseDocument[] } | undefined) => {\n                    setIsReasonSubmitted(false);\n                    setApplicableDocuments(response?.data ?? null);\n                    if (response?.data && response?.data.length > 0) setFlowState('uploadDefenseFilesView');\n                },\n                [setApplicableDocuments, setIsReasonSubmitted, setFlowState]\n            ),\n        },\n    });\n\n    useEffect(() => {\n        setIsReasonSubmitted(false);\n    }, [error]);\n\n    const onDefenseReasonSubmit = useCallback(() => {\n        if (applicableDocuments?.length) return setFlowState('uploadDefenseFilesView');\n\n        setIsReasonSubmitted(true);\n    }, [applicableDocuments, setFlowState]);\n\n    const onChange = useCallback(\n        (param: SelectChangeEvent) => {\n            if (selectedDefenseReason !== param.target.value && applicableDocuments?.length) setApplicableDocuments([]);\n            if (param?.target?.value) setSelectedDefenseReason(param.target.value);\n        },\n        [applicableDocuments, selectedDefenseReason, setApplicableDocuments, setSelectedDefenseReason]\n    );\n\n    const actionButtons = useMemo(() => {\n        return [\n            {\n                title: i18n.get('disputes.management.defend.common.actions.continue'),\n                disabled: isReasonSubmitted || isFetching,\n                event: onDefenseReasonSubmit,\n            },\n            {\n                title: i18n.get('disputes.management.common.actions.goBack'),\n                disabled: isReasonSubmitted || isFetching,\n                event: goBack,\n            },\n        ];\n    }, [isFetching, isReasonSubmitted, i18n, goBack, onDefenseReasonSubmit]);\n\n    const isRequestForInformation = useMemo(() => dispute?.dispute.type === 'REQUEST_FOR_INFORMATION', [dispute?.dispute.type]);\n\n    const [showAlert, setShowAlert] = useState(!isRequestForInformation);\n    const closeAlert = useCallback(() => {\n        setShowAlert(false);\n    }, []);\n\n    const defenseReasonContent = useMemo(\n        () => (selected ? getDefenseReasonContent(defenseReasonConfig, i18n, selected) : undefined),\n        [defenseReasonConfig, i18n, selected]\n    );\n\n    const defendDisputeLabel = useMemo(\n        () =>\n            isRequestForInformation\n                ? i18n.get('disputes.management.defend.requestForInformation.selectDefenseReason')\n                : i18n.get('disputes.management.defend.chargeback.selectDefenseReason'),\n        [i18n, isRequestForInformation]\n    );\n\n    if (!defenseReasons || !selected) {\n        return null;\n    }\n\n    return (\n        <>\n            <div className={classes.selector}>\n                <Typography className=\"adyen-pe-defend-dispute__reason-description\" variant={TypographyVariant.BODY}>\n                    {defendDisputeLabel}\n                </Typography>\n                <Select\n                    items={defenseReasons}\n                    onChange={onChange}\n                    selected={selected}\n                    aria-label={i18n.get('disputes.management.defend.common.inputs.reasonSelect.a11y.label')}\n                    popoverClassNameModifiers={[cx(classes.dropdownList, { [classes.dropdownListMobile]: isMobileContainer })]}\n                />\n                {defenseReasonContent?.primaryDescriptionItems?.map((description, i) => (\n                    <Typography\n                        el={TypographyElement.PARAGRAPH}\n                        key={`description-${i}`}\n                        className={classes.description}\n                        variant={TypographyVariant.BODY}\n                    >\n                        {description}\n                    </Typography>\n                ))}\n                {defenseReasonContent?.secondaryDescriptionItems?.length && (\n                    <ul className=\"adyen-pe-defend-dispute-reason__secondary-description-items-container\">\n                        {defenseReasonContent.secondaryDescriptionItems.map((description, i) => (\n                            <li className=\"adyen-pe-defend-dispute-reason__secondary-description-item\" key={`description-item-${i}`}>\n                                <Typography\n                                    el={TypographyElement.PARAGRAPH}\n                                    className=\"adyen-pe-defend-dispute-reason__description\"\n                                    variant={TypographyVariant.BODY}\n                                >\n                                    {description}\n                                </Typography>\n                            </li>\n                        ))}\n                    </ul>\n                )}\n            </div>\n            {showAlert && (\n                <Alert onClose={closeAlert} type={AlertTypeOption.HIGHLIGHT} variant={AlertVariantOption.TIP} closeButton>\n                    <Typography className={'adyen-pe-alert__description'} el={TypographyElement.DIV} variant={TypographyVariant.CAPTION} wide>\n                        {i18n.get('disputes.management.defend.chargeback.feeInfo')}\n                    </Typography>\n                </Alert>\n            )}\n            <div className={'adyen-pe-defend-dispute__actions'}>\n                <ButtonActions actions={actionButtons} />\n            </div>\n        </>\n    );\n};\n","import { useCallback, useEffect, useRef } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Button from '../../../../internal/Button/Button';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport Icon from '../../../../internal/Icon';\nimport { TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { useDisputeFlow } from '../../context/dispute/context';\nimport { isFunction } from '../../../../../utils';\nimport { DisputeManagementProps } from '../../types';\nimport './DefendDisputeFlow.scss';\n\nexport const DefendDisputeResponse = ({ onDisputeDefend }: Pick<DisputeManagementProps, 'onDisputeDefend'>) => {\n    const { i18n } = useCoreContext();\n    const { clearFiles, clearStates, dispute, setFlowState, defendResponse } = useDisputeFlow();\n\n    const goBackToDetails = useCallback(() => {\n        clearStates();\n        setFlowState('details');\n    }, [clearStates, setFlowState]);\n\n    const goBackToFileUploadView = useCallback(() => {\n        clearFiles();\n        setFlowState('uploadDefenseFilesView');\n    }, [clearFiles, setFlowState]);\n\n    const defendCallbackHasBeenCalled = useRef(false);\n\n    useEffect(() => {\n        if (defendCallbackHasBeenCalled.current) return;\n\n        if (defendResponse === 'success' && isFunction(onDisputeDefend)) {\n            const disputePspReference = dispute?.dispute.pspReference;\n\n            if (disputePspReference) {\n                defendCallbackHasBeenCalled.current = true;\n                onDisputeDefend({ id: disputePspReference });\n            }\n        }\n    }, [defendResponse, dispute, onDisputeDefend]);\n\n    //TODO: For this view create an internal component\n    return (\n        <div className={'adyen-pe-defend-dispute__response'}>\n            {defendResponse === 'success' ? (\n                <div className=\"adyen-pe-defend-dispute__success\">\n                    <Icon name=\"checkmark-circle-fill\" className=\"adyen-pe-defend-dispute__success-icon\" />\n                    <Typography variant={TypographyVariant.TITLE}>{i18n.get('disputes.management.defend.common.evidenceSubmitted')}</Typography>\n                    <Typography variant={TypographyVariant.BODY} className=\"adyen-pe-defend-dispute__success-description\">\n                        {i18n.get('disputes.management.defend.chargeback.submitSuccessInfo')}\n                    </Typography>\n                    <div className=\"adyen-pe-defend-dispute__success-buttons\">\n                        <Button variant={ButtonVariant.SECONDARY} onClick={goBackToDetails}>\n                            {i18n.get('disputes.management.common.actions.showDetails')}\n                        </Button>\n                    </div>\n                </div>\n            ) : (\n                <div className=\"adyen-pe-defend-dispute__error\">\n                    <Icon name=\"cross-circle-fill\" className=\"adyen-pe-defend-dispute__error-icon\" />\n                    <Typography variant={TypographyVariant.TITLE} medium>\n                        {i18n.get('disputes.management.defend.common.errors.somethingWentWrong')}\n                    </Typography>\n                    <Typography variant={TypographyVariant.BODY}>{i18n.get('disputes.management.defend.common.errors.defenseFailed')}</Typography>\n                    <Button variant={ButtonVariant.SECONDARY} onClick={goBackToFileUploadView}>\n                        {i18n.get('disputes.management.common.actions.goBack')}\n                    </Button>\n                </div>\n            )}\n        </div>\n    );\n};\n","import useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { useModalContext } from '../../../../internal/Modal/Modal';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { useDisputeFlow } from '../../context/dispute/context';\nimport { DefendDisputeFileUpload } from './DefendDisputeFileUpload';\nimport { DefendDisputeReason } from './DefendDisputeReason';\nimport { DefendDisputeResponse } from './DefendDisputeResponse';\nimport { DisputeManagementProps } from '../../types';\nimport './DefendDisputeFlow.scss';\nimport { useMemo } from 'preact/hooks';\n\nexport const DefendDisputeFlow = ({ onDisputeDefend }: Pick<DisputeManagementProps, 'onDisputeDefend'>) => {\n    const { i18n } = useCoreContext();\n    const { applicableDocuments, flowState, dispute } = useDisputeFlow();\n    const { withinModal } = useModalContext();\n\n    const titleEl = withinModal ? TypographyElement.H2 : TypographyElement.DIV;\n\n    const defendDisputeTitle = useMemo(\n        () =>\n            dispute?.dispute.type === 'REQUEST_FOR_INFORMATION'\n                ? i18n.get('disputes.management.defend.requestForInformation.title')\n                : i18n.get('disputes.management.defend.chargeback.title'),\n        [dispute?.dispute.type, i18n]\n    );\n\n    return (\n        <div className=\"adyen-pe-defend-dispute__container\">\n            {flowState !== 'defenseSubmitResponseView' && (\n                <Typography className={'adyen-pe-defend-dispute__title'} el={titleEl} variant={TypographyVariant.TITLE} medium>\n                    {defendDisputeTitle}\n                </Typography>\n            )}\n            {flowState === 'defendReasonSelectionView' && <DefendDisputeReason />}\n            {flowState === 'uploadDefenseFilesView' && !!applicableDocuments?.length && <DefendDisputeFileUpload />}\n            {flowState === 'defenseSubmitResponseView' && <DefendDisputeResponse onDisputeDefend={onDisputeDefend} />}\n        </div>\n    );\n};\n","export const DISPUTE_DATA_CLASS = 'adyen-pe-dispute-data';\nexport const DISPUTE_DATA_MOBILE_CLASS = 'adyen-pe-dispute-data--mobile';\nexport const DISPUTE_STATUS_BOX = `${DISPUTE_DATA_CLASS}__status-box`;\nexport const DISPUTE_DATA_ACTION_BAR = `${DISPUTE_DATA_CLASS}__action-bar`;\nexport const DISPUTE_DATA_LABEL = `${DISPUTE_DATA_CLASS}__label`;\nexport const DISPUTE_DATA_LIST = `${DISPUTE_DATA_CLASS}__list`;\nexport const DISPUTE_DATA_LIST_EVIDENCE = `${DISPUTE_DATA_CLASS}__list--evidence`;\nexport const DISPUTE_DATA_LIST_EVIDENCE_ERROR_MESSAGE = `${DISPUTE_DATA_CLASS}__list-evidence-error-message`;\nexport const DISPUTE_DATA_ISSUER_COMMENT = `${DISPUTE_DATA_CLASS}__issuer-comment`;\nexport const DISPUTE_DATA_ISSUER_COMMENTS = `${DISPUTE_DATA_CLASS}__issuer-comments`;\nexport const DISPUTE_DATA_ISSUER_COMMENTS_EXPANDED = `${DISPUTE_DATA_ISSUER_COMMENTS}--expanded`;\nexport const DISPUTE_DATA_ISSUER_COMMENTS_TRUNCATED = `${DISPUTE_DATA_ISSUER_COMMENTS}--truncated`;\nexport const DISPUTE_DATA_ISSUER_COMMENTS_ALERT = `${DISPUTE_DATA_CLASS}__issuer-comments-alert`;\nexport const DISPUTE_DATA_ISSUER_COMMENTS_GROUP = `${DISPUTE_DATA_CLASS}__issuer-comments-group`;\nexport const DISPUTE_DATA_ALERT = 'adyen-pe-dispute-data-alert';\nexport const DISPUTE_DATA_ERROR_CONTAINER = 'adyen-pe-dispute-data__error-container';\nexport const DISPUTE_DATA_STATUS_BOX_SKELETON = 'adyen-pe-dispute-data__status-box-skeleton';\nexport const DISPUTE_DATA_PROPERTIES_SKELETON = 'adyen-pe-dispute-data__properties-skeleton';\nexport const DISPUTE_DATA_PROPERTIES_SKELETON_ELEMENT = 'adyen-pe-dispute-data__properties-skeleton-element';\nexport const DISPUTE_DATA_PROPERTIES_SKELETON_CONTAINER = 'adyen-pe-dispute-data__properties-skeleton-container';\nexport const DISPUTE_DATA_STATUS_BOX_STATUS_CONTAINER = 'adyen-pe-dispute-data__status-box-status-container';\nexport const DISPUTE_DATA_STATUS_BOX_STATUS = 'adyen-pe-dispute-data__status-box-status';\nexport const DISPUTE_DATA_STATUS_BOX_AMOUNT = 'adyen-pe-dispute-data__status-box-amount';\nexport const DISPUTE_DATA_STATUS_BOX_PAYMENT_METHOD = 'adyen-pe-dispute-data__status-box-payment-method';\nexport const DISPUTE_DATA_SKELETON_CONTAINER = 'adyen-pe-dispute-data__skeleton-container';\nexport const DISPUTE_DATA_STATUS_BOX_PAYMENT_METHOD_CONTAINER = 'adyen-pe-dispute-data__status-box-payment-method-container';\n\nexport const DISPUTE_DETAILS_RESERVED_FIELDS_SET = new Set([\n    'allowedDefenseReasons',\n    'balanceAccount',\n    'amount',\n    'createdAt',\n    'defensibility',\n    'dueDate',\n    'id',\n    'latestDefense',\n    'paymentMerchantReference',\n    'paymentMethod',\n    'paymentPspReference',\n    'reasonCode',\n    'reasonGroup',\n    'status',\n] as const);\n","import cx from 'classnames';\nimport { useLayoutEffect, useRef, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Alert from '../../../../internal/Alert/Alert';\nimport Button from '../../../../internal/Button';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { AlertTypeOption, AlertVariantOption } from '../../../../internal/Alert/types';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport {\n    DISPUTE_DATA_ISSUER_COMMENT,\n    DISPUTE_DATA_ISSUER_COMMENTS,\n    DISPUTE_DATA_ISSUER_COMMENTS_ALERT,\n    DISPUTE_DATA_ISSUER_COMMENTS_EXPANDED,\n    DISPUTE_DATA_ISSUER_COMMENTS_GROUP,\n    DISPUTE_DATA_ISSUER_COMMENTS_TRUNCATED,\n} from './constants';\nimport './DisputeData.scss';\n\nexport const DisputeIssuerComments = ({ issuerComments }: { issuerComments: string[] }) => {\n    const { i18n } = useCoreContext();\n    const [minimumHeight, setMinimumHeight] = useState(0);\n    const [maximumHeight, setMaximumHeight] = useState(0);\n    const [isTruncated, setIsTruncated] = useState(false);\n    const [isExpanded, setIsExpanded] = useState(false);\n\n    const commentsGroupRef = useRef<HTMLUListElement>(null);\n\n    const onButtonClick = (evt: MouseEvent) => {\n        evt.preventDefault();\n        setIsExpanded(!isExpanded);\n        commentsGroupRef.current?.style.setProperty('max-height', `${isExpanded ? minimumHeight : maximumHeight}px`);\n    };\n\n    useLayoutEffect(() => {\n        if (commentsGroupRef.current) {\n            const commentsGroup = commentsGroupRef.current;\n            const firstComment = commentsGroup.querySelector(`:scope .${DISPUTE_DATA_ISSUER_COMMENT}`);\n            const lineHeight = firstComment ? parseInt(getComputedStyle(firstComment).getPropertyValue('line-height')) : 0;\n\n            const minimumHeight = Math.min(firstComment?.clientHeight || Infinity, lineHeight * 3); // first 3 lines\n            const maximumHeight = commentsGroup.scrollHeight;\n\n            setMinimumHeight(minimumHeight);\n            setMaximumHeight(maximumHeight);\n            setIsTruncated(maximumHeight > minimumHeight);\n\n            commentsGroupRef.current?.style.setProperty('max-height', `${minimumHeight}px`);\n        }\n    }, []);\n\n    return (\n        <Alert\n            type={AlertTypeOption.HIGHLIGHT}\n            description={\n                <div className={DISPUTE_DATA_ISSUER_COMMENTS_ALERT}>\n                    <Typography el={TypographyElement.DIV} variant={TypographyVariant.BODY} strongest>\n                        {i18n.get('disputes.management.details.issuerComment')}\n                    </Typography>\n\n                    <div\n                        className={cx(DISPUTE_DATA_ISSUER_COMMENTS, {\n                            [DISPUTE_DATA_ISSUER_COMMENTS_EXPANDED]: isExpanded,\n                            [DISPUTE_DATA_ISSUER_COMMENTS_TRUNCATED]: isTruncated,\n                        })}\n                    >\n                        <ul ref={commentsGroupRef} className={DISPUTE_DATA_ISSUER_COMMENTS_GROUP}>\n                            {issuerComments.map((issuerComment, index) => (\n                                <li key={index}>\n                                    <Typography\n                                        className={DISPUTE_DATA_ISSUER_COMMENT}\n                                        el={TypographyElement.PARAGRAPH}\n                                        variant={TypographyVariant.BODY}\n                                    >\n                                        {/* [NOTE]: Issuer comments are not translated at the moment (maybe never) */}\n                                        {issuerComment}\n                                    </Typography>\n                                </li>\n                            ))}\n                        </ul>\n                    </div>\n\n                    {isTruncated && (\n                        <Button variant={ButtonVariant.TERTIARY} onClick={onButtonClick}>\n                            {i18n.get(\n                                isExpanded\n                                    ? 'disputes.management.details.issuerComment.showLess'\n                                    : 'disputes.management.details.issuerComment.showMore'\n                            )}\n                        </Button>\n                    )}\n                </div>\n            }\n        />\n    );\n};\n","import cx from 'classnames';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { DATE_FORMAT_DISPUTE_DETAILS } from '../../../../../constants';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport { TranslationKey } from '../../../../../translations';\nimport { IDisputeDetail, IDisputeStatus } from '../../../../../types/api/models/disputes';\nimport DownloadButton from '../../../../internal/Button/DownloadButton/DownloadButton';\nimport CopyText from '../../../../internal/CopyText/CopyText';\nimport Icon from '../../../../internal/DataGrid/components/Icon';\nimport { isCustomDataObject } from '../../../../internal/DataGrid/components/TableCells';\nimport Link from '../../../../internal/Link/Link';\nimport StructuredList from '../../../../internal/StructuredList';\nimport { StructuredListProps } from '../../../../internal/StructuredList/types';\nimport { Tag } from '../../../../internal/Tag/Tag';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { CustomColumn } from '../../../../types';\nimport { DisputeDetailsCustomization } from '../../types';\nimport { isDisputeActionNeeded } from '../../../../utils/disputes/actionNeeded';\nimport {\n    DISPUTE_DATA_LABEL,\n    DISPUTE_DATA_LIST,\n    DISPUTE_DATA_LIST_EVIDENCE,\n    DISPUTE_DETAILS_RESERVED_FIELDS_SET,\n    DISPUTE_DATA_LIST_EVIDENCE_ERROR_MESSAGE,\n} from './constants';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport SVGIcon from '../../../../internal/Icon';\nimport { getDisputeReason } from '../../../../utils/translation/getters';\nimport { getDefenseDocumentContent, getDefenseReasonContent, TranslationConfigItem } from '../../utils';\nimport { useDisputeFlow } from '../../context/dispute/context';\n\ntype DisputeDataPropertiesProps = {\n    dispute: IDisputeDetail;\n    dataCustomization?: { details?: DisputeDetailsCustomization };\n    extraFields?: Record<any, any>;\n    defenseReasonConfig: Record<string, TranslationConfigItem>;\n};\n\nconst disputeDataKeys = {\n    acceptedOn: 'disputes.management.details.fields.acceptedOn',\n    account: 'disputes.management.details.fields.account',\n    defendedOn: 'disputes.management.details.fields.defendedOn',\n    defenseReason: 'disputes.management.details.fields.defenseReason',\n    disputeEvidence: 'disputes.management.details.fields.evidence',\n    disputeReason: 'disputes.management.details.fields.disputeReason',\n    disputeReference: 'disputes.management.details.fields.disputeReference',\n    expiredOn: 'disputes.management.details.fields.expiredOn',\n    merchantReference: 'disputes.management.details.fields.merchantReference',\n    openedOn: 'disputes.management.details.fields.openedOn',\n    paymentReference: 'disputes.management.details.fields.paymentReference',\n    reasonCode: 'disputes.management.details.fields.reasonCode',\n    respondBy: 'disputes.management.details.fields.respondBy',\n} satisfies Record<string, TranslationKey>;\n\nconst DISPUTE_STATUSES_WITH_ACCEPTED_DATE: IDisputeStatus[] = ['ACCEPTED', 'EXPIRED'];\n\nconst DisputeDataProperties = ({ dispute, dataCustomization, defenseReasonConfig }: DisputeDataPropertiesProps) => {\n    const { i18n } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting(dispute.payment.balanceAccount.timeZone);\n    const { defenseDocumentConfig } = useDisputeFlow();\n\n    const [extraFields, setExtraFields] = useState<Record<string, any>>();\n\n    const getExtraFields = useCallback(async () => {\n        if (dispute) {\n            const detailsData = await dataCustomization?.details?.onDataRetrieve?.(dispute);\n\n            setExtraFields(\n                dataCustomization?.details?.fields.reduce((acc, field) => {\n                    return DISPUTE_DETAILS_RESERVED_FIELDS_SET.has(field.key as any) || field?.visibility === 'hidden'\n                        ? acc\n                        : { ...acc, ...(detailsData?.[field.key] ? { [field.key]: detailsData[field.key] } : {}) };\n                }, {} as CustomColumn<any>)\n            );\n        }\n    }, [dispute, dataCustomization]);\n\n    useEffect(() => {\n        void getExtraFields();\n    }, [getExtraFields]);\n\n    return useMemo(() => {\n        const { pspReference: disputeReference, reason: disputeReason, acceptedDate, createdAt, dueDate, status, type } = dispute.dispute;\n        const { pspReference: paymentReference, merchantReference, balanceAccount } = dispute.payment;\n        const { reason: defenseReason, defendedOn, suppliedDocuments } = dispute.defense || {};\n\n        const isFraudNotification = type === 'NOTIFICATION_OF_FRAUD';\n        const isExpiredDispute = status === 'EXPIRED' || (status === 'LOST' && !isFraudNotification && !defendedOn);\n        const isActionableDispute = isDisputeActionNeeded(dispute.dispute) && dispute.dispute.defensibility !== 'NOT_ACTIONABLE';\n\n        const SKIP_ITEM: StructuredListProps['items'][number] = null!;\n\n        const listItems: StructuredListProps['items'] = [\n            // dispute reason\n            {\n                key: disputeDataKeys.disputeReason,\n                value: `${getDisputeReason(i18n, disputeReason.category)} - ${disputeReason.title}`, // [NOTE]: Not translated at the moment (maybe in the future)\n                id: 'disputeReason',\n            },\n\n            // reason code\n            !isFraudNotification\n                ? {\n                      key: disputeDataKeys.reasonCode,\n                      value: disputeReason.code,\n                      id: 'reasonCode',\n                  }\n                : SKIP_ITEM,\n\n            // created at\n            {\n                key: disputeDataKeys.openedOn,\n                value: <time dateTime={createdAt}>{dateFormat(createdAt, DATE_FORMAT_DISPUTE_DETAILS)}</time>,\n                id: 'openedOn',\n            },\n\n            // respond by\n            dueDate && isActionableDispute\n                ? {\n                      key: disputeDataKeys.respondBy,\n                      value: <time dateTime={dueDate}>{dateFormat(dueDate, DATE_FORMAT_DISPUTE_DETAILS)}</time>,\n                      id: 'respondBy',\n                  }\n                : SKIP_ITEM,\n\n            // dispute reference\n            {\n                key: disputeDataKeys.disputeReference,\n                value: (\n                    <CopyText\n                        copyButtonAriaLabelKey=\"disputes.management.details.actions.copyDisputeReference\"\n                        type={'Default' as const}\n                        textToCopy={disputeReference}\n                        showCopyTextTooltip={false}\n                    />\n                ),\n                id: 'disputeId',\n            },\n\n            // balance account\n            {\n                key: disputeDataKeys.account,\n                value: balanceAccount.description,\n                id: 'account',\n            },\n\n            // psp reference\n            {\n                key: disputeDataKeys.paymentReference,\n                value: (\n                    <CopyText\n                        copyButtonAriaLabelKey=\"disputes.management.details.actions.copyPaymentReference\"\n                        type={'Default' as const}\n                        textToCopy={paymentReference}\n                        showCopyTextTooltip={false}\n                    />\n                ),\n                id: 'paymentPspReference',\n            },\n\n            // merchant reference\n            merchantReference\n                ? {\n                      key: disputeDataKeys.merchantReference,\n                      value: (\n                          <CopyText\n                              copyButtonAriaLabelKey=\"disputes.management.details.actions.copyMerchantReference\"\n                              type={'Default' as const}\n                              textToCopy={merchantReference}\n                              showCopyTextTooltip={false}\n                          />\n                      ),\n                      id: 'paymentMerchantReference',\n                  }\n                : SKIP_ITEM,\n\n            // defense reason\n            defenseReason\n                ? {\n                      key: disputeDataKeys.defenseReason,\n                      value: getDefenseReasonContent(defenseReasonConfig, i18n, defenseReason)?.title ?? defenseReason,\n                      id: 'defenseReason',\n                  }\n                : SKIP_ITEM,\n\n            // defended on\n            defendedOn\n                ? {\n                      key: disputeDataKeys.defendedOn,\n                      value: <time dateTime={defendedOn}>{dateFormat(defendedOn, DATE_FORMAT_DISPUTE_DETAILS)}</time>,\n                      id: 'defendedOn',\n                  }\n                : SKIP_ITEM,\n\n            // evidence\n            suppliedDocuments && suppliedDocuments.length > 0\n                ? {\n                      key: disputeDataKeys.disputeEvidence,\n                      value: (\n                          <>\n                              {suppliedDocuments.map((document, index) => {\n                                  const queryParam = {\n                                      path: { disputePspReference: disputeReference },\n                                      query: { documentType: document },\n                                  };\n                                  return (\n                                      <div key={`${document}-${index}`} className={DISPUTE_DATA_LIST_EVIDENCE}>\n                                          <Tag label={getDefenseDocumentContent(defenseDocumentConfig, i18n, document)?.title ?? document} />\n                                          <DownloadButton\n                                              className={'adyen-pe-dispute-document-download'}\n                                              endpointName={'downloadDefenseDocument'}\n                                              disabled={false}\n                                              requestParams={queryParam}\n                                              iconButton={true}\n                                              errorMessage={() => {\n                                                  return (\n                                                      <div className={DISPUTE_DATA_LIST_EVIDENCE_ERROR_MESSAGE}>\n                                                          <SVGIcon name=\"info-filled\" />\n                                                          <Typography variant={TypographyVariant.CAPTION} el={TypographyElement.SPAN}>\n                                                              {i18n.get('disputes.management.details.errors.downloadFailure')}\n                                                          </Typography>\n                                                      </div>\n                                                  );\n                                              }}\n                                              setError={() => console.warn('Download failed for', document)}\n                                              aria-label={i18n.get('disputes.management.details.actions.downloadEvidence')}\n                                          />\n                                      </div>\n                                  );\n                              })}\n                          </>\n                      ),\n                      id: 'disputeEvidence',\n                  }\n                : SKIP_ITEM,\n\n            // accepted on\n            acceptedDate && DISPUTE_STATUSES_WITH_ACCEPTED_DATE.includes(status)\n                ? {\n                      key: disputeDataKeys.acceptedOn,\n                      value: <time dateTime={acceptedDate}>{dateFormat(acceptedDate, DATE_FORMAT_DISPUTE_DETAILS)}</time>,\n                      id: 'acceptedOn',\n                  }\n                : SKIP_ITEM,\n\n            // expired on\n            dueDate && isExpiredDispute\n                ? {\n                      key: disputeDataKeys.expiredOn,\n                      value: <time dateTime={dueDate}>{dateFormat(dueDate, DATE_FORMAT_DISPUTE_DETAILS)}</time>,\n                      id: 'expiredOn',\n                  }\n                : SKIP_ITEM,\n        ]\n            .filter(Boolean)\n            .filter(val => !dataCustomization?.details?.fields?.some(field => field.key === val.id && field.visibility === 'hidden'));\n\n        // Add custom data\n        const itemsWithExtraFields = [\n            ...listItems,\n            ...(Object.entries(extraFields || {})\n                .filter(\n                    ([key, value]) => !DISPUTE_DETAILS_RESERVED_FIELDS_SET.has(key as any) && value.type !== 'button' && value.visibility !== 'hidden'\n                )\n                .map(([key, value]) => ({\n                    key: key as TranslationKey,\n                    value: isCustomDataObject(value) ? value.value : value,\n                    type: isCustomDataObject(value) ? value.type : 'text',\n                    config: isCustomDataObject(value) ? value.config : undefined,\n                })) || {}),\n        ];\n\n        return (\n            <StructuredList\n                classNames={DISPUTE_DATA_LIST}\n                items={itemsWithExtraFields}\n                layout=\"4-8\"\n                align=\"start\"\n                renderLabel={label => <div className={DISPUTE_DATA_LABEL}>{label}</div>}\n                renderValue={(val, key, type, config) => {\n                    if (type === 'link' && config) {\n                        return (\n                            <Link classNames={[cx(config?.className)]} href={config.href} target={config.target || '_blank'}>\n                                {val}\n                            </Link>\n                        );\n                    }\n                    if (type === 'icon' && config) {\n                        const icon = { url: config?.src, alt: config.alt || val };\n                        return (\n                            <div className={cx('adyen-pe-dispute-data__list-icon-value', config?.className)}>\n                                <Icon {...icon} />\n                                <Typography variant={TypographyVariant.BODY}>{val}</Typography>\n                            </div>\n                        );\n                    }\n                    return (\n                        <Typography className={cx(config?.className)} variant={TypographyVariant.BODY}>\n                            {val}\n                        </Typography>\n                    );\n                }}\n            />\n        );\n    }, [\n        dispute.dispute,\n        dispute.payment,\n        dispute.defense,\n        i18n,\n        dateFormat,\n        defenseReasonConfig,\n        extraFields,\n        defenseDocumentConfig,\n        dataCustomization?.details?.fields,\n    ]);\n};\n\nexport default DisputeDataProperties;\n","import AdyenPlatformExperienceError from '../../../core/Errors/AdyenPlatformExperienceError';\nimport { TranslationKey } from '../../../translations';\nimport { ErrorMessage, UNDEFINED_ERROR } from '../getCommonErrorCode';\nimport CopyText from '../../internal/CopyText/CopyText';\n\nexport const getDisputesErrorMessage = (\n    error: AdyenPlatformExperienceError | undefined,\n    errorMessage: TranslationKey,\n    onContactSupport?: () => void\n): ErrorMessage => {\n    if (!error) return UNDEFINED_ERROR;\n\n    switch (error.errorCode) {\n        case undefined:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: [errorMessage, 'common.errors.retry'],\n                refreshComponent: true,\n            };\n        case '00_500': {\n            const secondaryErrorMessage = onContactSupport ? 'common.errors.errorCode' : 'common.errors.errorCodeSupport';\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: [errorMessage, secondaryErrorMessage],\n                translationValues: {\n                    [secondaryErrorMessage]: error.requestId ? (\n                        <CopyText isUnderlineVisible copyButtonAriaLabelKey=\"common.actions.copy.labels.errorCode\" textToCopy={error.requestId} />\n                    ) : null,\n                },\n                onContactSupport,\n            };\n        }\n        case '30_112':\n            return {\n                title: 'common.errors.notFound',\n                message: ['disputes.management.common.errors.notFound'],\n                onContactSupport,\n            };\n        default:\n            return UNDEFINED_ERROR;\n    }\n};\n","import cx from 'classnames';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { useFetch } from '../../../../../hooks/useFetch';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { IDisputeDetail } from '../../../../../types/api/models/disputes';\nimport { EMPTY_OBJECT, isFunction } from '../../../../../utils';\nimport './DisputeData.scss';\nimport Alert from '../../../../internal/Alert/Alert';\nimport { AlertTypeOption, AlertVariantOption } from '../../../../internal/Alert/types';\nimport ButtonActions from '../../../../internal/Button/ButtonActions/ButtonActions';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport StatusBox from '../../../../internal/StatusBox/StatusBox';\nimport useStatusBoxData from '../../../../internal/StatusBox/useStatusBox';\nimport { Tag } from '../../../../internal/Tag/Tag';\nimport { Translation } from '../../../../internal/Translation';\nimport DisputeStatusTag from '../../../DisputesOverview/components/DisputesTable/DisputeStatusTag';\nimport { useDisputeFlow } from '../../context/dispute/context';\nimport { DisputeDetailsCustomization, DisputeManagementProps } from '../../types';\nimport { isDisputeActionNeeded } from '../../../../utils/disputes/actionNeeded';\nimport { DisputeIssuerComments } from './DisputeIssuerComments';\nimport DisputeDataProperties from './DisputeDataProperties';\nimport {\n    DISPUTE_DATA_ACTION_BAR,\n    DISPUTE_DATA_CLASS,\n    DISPUTE_DATA_ERROR_CONTAINER,\n    DISPUTE_DATA_MOBILE_CLASS,\n    DISPUTE_STATUS_BOX,\n    DISPUTE_DATA_STATUS_BOX_SKELETON,\n    DISPUTE_DATA_SKELETON_CONTAINER,\n    DISPUTE_DATA_STATUS_BOX_STATUS,\n    DISPUTE_DATA_STATUS_BOX_AMOUNT,\n    DISPUTE_DATA_STATUS_BOX_PAYMENT_METHOD,\n    DISPUTE_DATA_STATUS_BOX_STATUS_CONTAINER,\n    DISPUTE_DATA_STATUS_BOX_PAYMENT_METHOD_CONTAINER,\n    DISPUTE_DATA_PROPERTIES_SKELETON,\n    DISPUTE_DATA_PROPERTIES_SKELETON_CONTAINER,\n    DISPUTE_DATA_PROPERTIES_SKELETON_ELEMENT,\n} from './constants';\nimport Button from '../../../../internal/Button';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport { DATE_FORMAT_RESPONSE_DEADLINE } from '../../../../../constants';\nimport { getDisputeType } from '../../../../utils/translation/getters';\nimport { ErrorMessageDisplay } from '../../../../internal/ErrorMessageDisplay/ErrorMessageDisplay';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { getDisputesErrorMessage } from '../../../../utils/disputes/getDisputesErrorMessage';\nimport { CustomButtonObject } from '../../../../types';\n\ntype DisputeDataAlertMode = 'contactSupport' | 'autoDefended' | 'notDefended' | 'notDefendable';\n\nconst _isButtonType = (item: any): item is CustomButtonObject => {\n    return !!item && typeof item === 'object' && item.type === 'button';\n};\nconst DisputeDataAlert = ({\n    alertMode,\n    dispute,\n    timeZone,\n}: {\n    alertMode?: DisputeDataAlertMode;\n    dispute: IDisputeDetail['dispute'];\n    timeZone: string | undefined;\n}) => {\n    const { i18n } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting(timeZone);\n\n    switch (alertMode) {\n        case 'contactSupport': {\n            const { dueDate, type } = dispute;\n            const translationKey =\n                type === 'REQUEST_FOR_INFORMATION'\n                    ? 'disputes.management.details.alerts.contactSupport.requestForInformation'\n                    : type === 'NOTIFICATION_OF_FRAUD'\n                      ? 'disputes.management.details.alerts.contactSupport.notificationOfFraud'\n                      : 'disputes.management.details.alerts.contactSupport.chargeback';\n\n            return (\n                <Alert\n                    type={AlertTypeOption.WARNING}\n                    variant={AlertVariantOption.TIP}\n                    description={\n                        <>\n                            {i18n.get(translationKey)}\n                            {type !== 'NOTIFICATION_OF_FRAUD' && !!dueDate && (\n                                <>\n                                    {' '}\n                                    <Translation\n                                        translationKey={'disputes.management.details.alerts.responseDeadline'}\n                                        fills={{\n                                            date: (\n                                                <time dateTime={dueDate}>\n                                                    <Typography variant={TypographyVariant.CAPTION} el={TypographyElement.SPAN} stronger>\n                                                        {dateFormat(dueDate, DATE_FORMAT_RESPONSE_DEADLINE)}\n                                                    </Typography>\n                                                </time>\n                                            ),\n                                        }}\n                                    />\n                                </>\n                            )}\n                        </>\n                    }\n                />\n            );\n        }\n        case 'autoDefended':\n            return (\n                <Alert\n                    type={AlertTypeOption.HIGHLIGHT}\n                    variant={AlertVariantOption.TIP}\n                    description={i18n.get('disputes.management.details.alerts.autoDefended')}\n                />\n            );\n        case 'notDefended': {\n            const translationKey =\n                dispute.status === 'EXPIRED'\n                    ? 'disputes.management.details.alerts.notDefendedExpired'\n                    : 'disputes.management.details.alerts.notDefendedLost';\n            return <Alert type={AlertTypeOption.HIGHLIGHT} variant={AlertVariantOption.TIP} description={i18n.get(translationKey)} />;\n        }\n        case 'notDefendable':\n            return (\n                <Alert\n                    type={AlertTypeOption.HIGHLIGHT}\n                    variant={AlertVariantOption.TIP}\n                    description={i18n.get('disputes.management.details.alerts.notDefendable')}\n                />\n            );\n    }\n\n    return null;\n};\n\nexport const DisputeData = ({\n    disputeId,\n    dataCustomization,\n    onContactSupport,\n    onDismiss,\n}: {\n    disputeId: string;\n    dataCustomization?: { details?: DisputeDetailsCustomization };\n    onContactSupport?: () => void;\n    onDismiss: DisputeManagementProps['onDismiss'];\n}) => {\n    const { i18n } = useCoreContext();\n    const { dispute: storedDispute, setDispute, setFlowState, defenseReasonConfig } = useDisputeFlow();\n\n    const { getDisputeDetail, getApplicableDefenseDocuments, acceptDispute } = useConfigContext().endpoints;\n\n    //TODO: Also check if /defend endpoint has been returned from setup call which relates to submit button action\n    const acceptAuthorization = isFunction(acceptDispute);\n    const defendAuthorization = isFunction(getApplicableDefenseDocuments);\n    const isSmAndUpContainer = useResponsiveContainer(containerQueries.up.sm);\n\n    const { data, isFetching, error } = useFetch(\n        useMemo(\n            () => ({\n                fetchOptions: {\n                    enabled: !!disputeId && !!getDisputeDetail && !storedDispute,\n                    onSuccess: ((dispute: IDisputeDetail) => {\n                        setDispute(dispute);\n                    }) as any,\n                },\n                queryFn: async () => {\n                    return getDisputeDetail!(EMPTY_OBJECT, {\n                        path: {\n                            disputePspReference: disputeId,\n                        },\n                    });\n                },\n            }),\n            [storedDispute, disputeId, getDisputeDetail, setDispute]\n        )\n    );\n\n    const dispute = storedDispute || data;\n    const defensibility = dispute?.dispute?.defensibility;\n\n    const statusBoxOptions = useStatusBoxData({\n        amountData: dispute?.dispute.amount,\n        paymentMethodData: dispute?.payment.paymentMethod,\n    } as const);\n\n    const issuerComments = useMemo(() => {\n        const { chargeback, preArbitration } = dispute?.dispute.issuerExtraData ?? {};\n        const comments = [] as string[];\n\n        [preArbitration, chargeback].forEach(commentGroup => {\n            if (!commentGroup) return;\n            ['LIABILITY_NOT_ACCEPTED_FULLY', 'PRE_ARB_REASON', 'NOTE'].forEach(commentKey => {\n                const raw = commentGroup[commentKey];\n                const trimmed = raw?.trim();\n                if (trimmed) comments.push(trimmed);\n            });\n        });\n\n        return comments.filter(Boolean);\n    }, [dispute]);\n\n    const disputeType = useMemo(() => getDisputeType(i18n, dispute?.dispute.type), [i18n, dispute]);\n\n    const showContactSupport =\n        (!!defensibility && ['ACCEPTABLE', 'DEFENDABLE_EXTERNALLY'].includes(defensibility)) || dispute?.dispute.type === 'NOTIFICATION_OF_FRAUD';\n    const isDefendable = !!defensibility && defensibility === 'DEFENDABLE' && defendAuthorization;\n    const isAcceptable = !!defensibility && ['ACCEPTABLE', 'DEFENDABLE'].includes(defensibility) && acceptAuthorization;\n\n    const onAcceptClick = useCallback(() => {\n        setFlowState('accept');\n    }, [setFlowState]);\n\n    const onDefendClick = useCallback(() => {\n        setFlowState('defendReasonSelectionView');\n    }, [setFlowState]);\n\n    const [extraButtons, setExtraButtons] = useState<CustomButtonObject[]>([]);\n\n    const getCustomButtons = useCallback(async () => {\n        const customData = data && (await dataCustomization?.details?.onDataRetrieve?.(data));\n        if (customData) {\n            return setExtraButtons(\n                Object.values(customData).filter(config => {\n                    return _isButtonType(config);\n                }) as CustomButtonObject[]\n            );\n        }\n    }, [data, dataCustomization?.details]);\n\n    useEffect(() => {\n        void getCustomButtons();\n    }, [getCustomButtons]);\n\n    const defendButtonLabel = useMemo(() => {\n        return storedDispute?.dispute.type === 'REQUEST_FOR_INFORMATION'\n            ? i18n.get('disputes.management.details.actions.submitInformation')\n            : i18n.get('disputes.management.details.actions.defendChargeback');\n    }, [i18n, storedDispute?.dispute.type]);\n\n    const actionButtons = useMemo(() => {\n        const ctaButtons = [];\n        if (isDefendable)\n            ctaButtons.push({\n                title: defendButtonLabel,\n                event: onDefendClick,\n            });\n        if (isAcceptable) {\n            ctaButtons.push({\n                title: i18n.get('disputes.management.details.actions.accept'),\n                event: onAcceptClick,\n                variant: ButtonVariant.SECONDARY,\n            });\n        }\n        if (showContactSupport && isFunction(onContactSupport)) {\n            ctaButtons.push({\n                title: i18n.get('disputes.management.details.actions.contactSupport'),\n                event: onContactSupport,\n                variant: ButtonVariant.SECONDARY,\n            });\n        }\n\n        if (extraButtons && extraButtons.length) {\n            extraButtons.forEach((config: CustomButtonObject) => {\n                ctaButtons.push({\n                    title: config?.value,\n                    event: config?.config?.action,\n                    variant: ButtonVariant.SECONDARY,\n                    classNames: config?.config?.className ? [config?.config?.className] : [],\n                });\n            });\n        }\n        return ctaButtons;\n    }, [isDefendable, defendButtonLabel, onDefendClick, isAcceptable, showContactSupport, onContactSupport, extraButtons, i18n, onAcceptClick]);\n\n    const actionNeeded = useMemo(() => !!dispute && isDisputeActionNeeded(dispute.dispute), [dispute]);\n\n    const renderBackButton = useCallback(() => {\n        return (\n            <Button variant={ButtonVariant.SECONDARY} onClick={onDismiss}>\n                {i18n.get('disputes.management.common.actions.goBack')}\n            </Button>\n        );\n    }, [i18n, onDismiss]);\n\n    if ((!dispute && !error) || isFetching) {\n        const skeletonRows = Array.from({ length: 5 });\n\n        return (\n            <div className={cx(DISPUTE_DATA_CLASS, { [DISPUTE_DATA_MOBILE_CLASS]: !isSmAndUpContainer })}>\n                <div className={DISPUTE_DATA_SKELETON_CONTAINER}>\n                    <div className={DISPUTE_DATA_STATUS_BOX_SKELETON}>\n                        <div className={DISPUTE_DATA_STATUS_BOX_STATUS_CONTAINER}>\n                            <span className={DISPUTE_DATA_STATUS_BOX_STATUS}></span>\n                            <span className={DISPUTE_DATA_STATUS_BOX_STATUS}></span>\n                        </div>\n                        <span className={DISPUTE_DATA_STATUS_BOX_AMOUNT}></span>\n                        <div className={DISPUTE_DATA_STATUS_BOX_PAYMENT_METHOD_CONTAINER}>\n                            <span className={DISPUTE_DATA_STATUS_BOX_PAYMENT_METHOD}></span>\n                            <span className={DISPUTE_DATA_STATUS_BOX_PAYMENT_METHOD}></span>\n                        </div>\n                    </div>\n                    <div className={DISPUTE_DATA_PROPERTIES_SKELETON_CONTAINER}>\n                        {skeletonRows.map((_, index) => (\n                            <div className={DISPUTE_DATA_PROPERTIES_SKELETON} key={`skeleton-${index}`}>\n                                <span className={DISPUTE_DATA_PROPERTIES_SKELETON_ELEMENT} />\n                                <span className={DISPUTE_DATA_PROPERTIES_SKELETON_ELEMENT} />\n                            </div>\n                        ))}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n\n    const isFraudNotification = dispute?.dispute.type === 'NOTIFICATION_OF_FRAUD';\n    const isDefended = !!(dispute?.defense && dispute.defense.defendedOn);\n\n    let disputeAlertMode: DisputeDataAlertMode | undefined = undefined;\n\n    if (dispute?.defense?.autodefended === true) {\n        disputeAlertMode = 'autoDefended';\n    } else if (actionNeeded && defensibility === 'NOT_ACTIONABLE') {\n        disputeAlertMode = 'notDefendable';\n    } else if ((actionNeeded && showContactSupport) || (showContactSupport && isFraudNotification)) {\n        disputeAlertMode = 'contactSupport';\n    } else if (dispute?.dispute.status === 'EXPIRED') {\n        disputeAlertMode = 'notDefended';\n    } else if (dispute?.dispute.status === 'LOST' && !(isFraudNotification || isDefended)) {\n        disputeAlertMode = 'notDefended';\n    }\n\n    const errorProps = getDisputesErrorMessage(\n        error as AdyenPlatformExperienceError,\n        'disputes.management.common.errors.unavailable',\n        onContactSupport\n    );\n\n    return (\n        <div className={cx(DISPUTE_DATA_CLASS, { [DISPUTE_DATA_MOBILE_CLASS]: !isSmAndUpContainer })}>\n            {error ? (\n                <div className={DISPUTE_DATA_ERROR_CONTAINER}>\n                    <ErrorMessageDisplay\n                        renderSecondaryButton={onDismiss ? renderBackButton : undefined}\n                        withImage\n                        outlined={false}\n                        absolutePosition={false}\n                        withBackground={false}\n                        {...errorProps}\n                    />\n                </div>\n            ) : dispute ? (\n                <>\n                    <div className={DISPUTE_STATUS_BOX}>\n                        <StatusBox\n                            {...statusBoxOptions}\n                            tag={\n                                <>\n                                    {disputeType && <Tag label={disputeType} />}\n                                    {!isFraudNotification && <DisputeStatusTag dispute={dispute.dispute} />}\n                                </>\n                            }\n                        />\n                    </div>\n\n                    {issuerComments.length > 0 && <DisputeIssuerComments issuerComments={issuerComments} />}\n\n                    {disputeAlertMode && (\n                        <DisputeDataAlert\n                            alertMode={disputeAlertMode}\n                            dispute={dispute.dispute}\n                            timeZone={dispute.payment.balanceAccount?.timeZone}\n                        />\n                    )}\n\n                    <DisputeDataProperties dispute={dispute} dataCustomization={dataCustomization} defenseReasonConfig={defenseReasonConfig} />\n\n                    {actionButtons.length > 0 ? (\n                        <div className={DISPUTE_DATA_ACTION_BAR}>\n                            <ButtonActions actions={actionButtons} />\n                        </div>\n                    ) : null}\n                </>\n            ) : null}\n        </div>\n    );\n};\n\nexport default DisputeData;\n","import cx from 'classnames';\nimport { PropsWithChildren } from 'preact/compat';\nimport type { ExternalUIComponentProps } from '../../../../types';\nimport { useModalContext } from '../../../../internal/Modal/Modal';\nimport { useDisputeFlow } from '../../context/dispute/context';\nimport { Header } from '../../../../internal/Header';\nimport { DisputeManagementProps } from '../../types';\nimport { AcceptDisputeFlow } from '../AcceptDisputeFlow/AcceptDisputeFlow';\nimport { DefendDisputeFlow } from '../DefendDisputeFlow/DefendDisputeFlow';\nimport DisputeData from '../DisputesData/DisputeData';\nimport { useEffect } from 'preact/hooks';\n\nconst DisputeDetailsContainer = ({ children, hideTitle }: PropsWithChildren<Pick<ExternalUIComponentProps<DisputeManagementProps>, 'hideTitle'>>) => {\n    const { flowState } = useDisputeFlow();\n    const { withinModal } = useModalContext();\n    return (\n        <>\n            <div className={cx({ ['adyen-pe-visually-hidden']: flowState !== 'details' })}>\n                <Header hideTitle={hideTitle} forwardedToRoot={!withinModal} titleKey=\"disputes.management.common.title\" />\n            </div>\n            {children}\n        </>\n    );\n};\n\nexport const DisputeDetails = ({\n    id,\n    hideTitle,\n    dataCustomization,\n    onContactSupport,\n    onDisputeAccept,\n    onDisputeDefend,\n    onDismiss,\n}: ExternalUIComponentProps<DisputeManagementProps>) => {\n    const { flowState, getDisputesConfig } = useDisputeFlow();\n\n    useEffect(() => {\n        void getDisputesConfig();\n    }, [getDisputesConfig]);\n\n    switch (flowState) {\n        case 'details':\n            return (\n                <DisputeDetailsContainer hideTitle={hideTitle}>\n                    <DisputeData disputeId={id} dataCustomization={dataCustomization} onContactSupport={onContactSupport} onDismiss={onDismiss} />\n                </DisputeDetailsContainer>\n            );\n        case 'accept':\n            return (\n                <DisputeDetailsContainer hideTitle={hideTitle}>\n                    <AcceptDisputeFlow onDisputeAccept={onDisputeAccept} />\n                </DisputeDetailsContainer>\n            );\n        case 'defendReasonSelectionView':\n        case 'defenseSubmitResponseView':\n        case 'uploadDefenseFilesView':\n            return (\n                <DisputeDetailsContainer hideTitle={hideTitle}>\n                    <DefendDisputeFlow onDisputeDefend={onDisputeDefend} />\n                </DisputeDetailsContainer>\n            );\n        default:\n            return null;\n    }\n};\n","import { useCallback, useState } from 'preact/hooks';\nimport { DisputeContextProvider } from '../../context/dispute/context';\nimport { DisputeDetails } from '../DisputeDetails/DisputeDetails';\nimport type { ExternalUIComponentProps } from '../../../../types';\nimport { DisputeManagementProps } from '../../types';\nimport { IDisputeDetail } from '../../../../../types/api/models/disputes';\nimport './DisputeDetailsContainer.scss';\n\nexport const DisputeDetailsContainer = (props: ExternalUIComponentProps<DisputeManagementProps>) => {\n    const [dispute, setDispute] = useState<IDisputeDetail | undefined>();\n\n    const setDisputeCallback = useCallback((dispute: IDisputeDetail | undefined) => {\n        setDispute(dispute);\n    }, []);\n\n    return (\n        <DisputeContextProvider dispute={dispute} setDispute={setDisputeCallback}>\n            <div className=\"adyen-pe-dispute__container\">\n                <DisputeDetails {...props} />\n            </div>\n        </DisputeContextProvider>\n    );\n};\n","import { useCallback, useEffect, useState } from 'preact/hooks';\nimport { FC, PropsWithChildren } from 'preact/compat';\nimport Modal from '../../../../internal/Modal';\nimport { DisputeDetailsCustomization } from '../../../DisputeManagement';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { popoverUtil } from '../../../../internal/Popover/utils/popoverUtil';\nimport useModalDetails from '../../../../../hooks/useModalDetails';\nimport { IDisputeStatusGroup } from '../../../../../types/api/models/disputes';\nimport { DisputeDetailsContainer } from '../../../DisputeManagement/components/DisputeDetailsContainer/DisputeDetailsContainer';\n\nexport interface DisputeManagementModalProps {\n    setModalVisible: (modalVisible: boolean) => void;\n    refreshDisputesList: (statusGroup?: IDisputeStatusGroup) => void;\n    selectedDetail: ReturnType<typeof useModalDetails>['selectedDetail'];\n    resetDetails: ReturnType<typeof useModalDetails>['resetDetails'];\n    dataCustomization?: { details: DisputeDetailsCustomization };\n    onContactSupport?: () => void;\n}\n\nexport const DisputeManagementModal: FC<DisputeManagementModalProps> = ({\n    children,\n    selectedDetail,\n    resetDetails,\n    dataCustomization,\n    onContactSupport,\n    refreshDisputesList,\n    setModalVisible,\n}: PropsWithChildren<DisputeManagementModalProps>) => {\n    const { i18n } = useCoreContext();\n    const [disputeManagementSuccessful, setDisputeManagementSuccessful] = useState(false);\n    const isModalOpen = !!selectedDetail;\n\n    const onCloseCallback = useCallback(() => {\n        if (disputeManagementSuccessful) {\n            setDisputeManagementSuccessful(false);\n            refreshDisputesList('CHARGEBACKS');\n        }\n        setModalVisible(false);\n        resetDetails();\n    }, [disputeManagementSuccessful, refreshDisputesList, resetDetails, setModalVisible]);\n\n    const onDisputeManagementSuccessful = useCallback(() => {\n        setDisputeManagementSuccessful(true);\n    }, []);\n\n    useEffect(() => {\n        if (isModalOpen) {\n            setModalVisible(true);\n            popoverUtil.closeAll();\n        }\n    }, [isModalOpen, setModalVisible]);\n\n    return (\n        <div>\n            {children}\n            {selectedDetail && (\n                <Modal\n                    isOpen={isModalOpen}\n                    aria-label={i18n.get('disputes.management.common.title')}\n                    onClose={onCloseCallback}\n                    isDismissible={true}\n                    headerWithBorder={false}\n                    size={selectedDetail.modalSize || 'large'}\n                >\n                    <DisputeDetailsContainer\n                        id={selectedDetail.selection.data}\n                        dataCustomization={dataCustomization}\n                        onDisputeAccept={onDisputeManagementSuccessful}\n                        onDisputeDefend={onDisputeManagementSuccessful}\n                        onContactSupport={onContactSupport}\n                        onDismiss={resetDetails}\n                        hideTitle\n                    />\n                </Modal>\n            )}\n        </div>\n    );\n};\n","import cx from 'classnames';\nimport { h } from 'preact';\nimport { AriaAttributes } from 'preact/compat';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport useModalDetails from '../../../../../hooks/useModalDetails';\nimport { IBalanceAccountBase } from '../../../../../types';\nimport { isFunction, listFrom, noop } from '../../../../../utils';\nimport useBalanceAccountSelection, { ALL_BALANCE_ACCOUNTS_SELECTION_ID } from '../../../../../hooks/useBalanceAccountSelection';\nimport useDefaultOverviewFilterParams from '../../../../../hooks/useDefaultOverviewFilterParams';\nimport FilterBar, { FilterBarMobileSwitch, useFilterBarState } from '../../../../internal/FilterBar';\nimport DateFilter from '../../../../internal/FilterBar/filters/DateFilter/DateFilter';\nimport BalanceAccountSelector from '../../../../internal/FormFields/Select/BalanceAccountSelector';\nimport MultiSelectionFilter, { useMultiSelectionFilter } from '../../../TransactionsOverview/components/MultiSelectionFilter';\nimport { BASE_CLASS, BASE_XS_CLASS, EARLIEST_DISPUTES_SINCE_DATE, TABS_CONTAINER_CLASS } from './constants';\nimport { DEFAULT_PAGE_LIMIT, LIMIT_OPTIONS } from '../../../../internal/Pagination/constants';\nimport { DISPUTE_PAYMENT_SCHEMES, DISPUTE_REASON_CATEGORIES, DISPUTE_STATUS_GROUPS } from '../../../../utils/disputes/constants';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { useCursorPaginatedRecords } from '../../../../internal/Pagination/hooks';\nimport { Header } from '../../../../internal/Header';\nimport { DisputeOverviewComponentProps, ExternalUIComponentProps, FilterParam } from '../../../../types';\nimport { DisputesTable } from '../DisputesTable/DisputesTable';\nimport { IDisputeListItem, IDisputeStatusGroup } from '../../../../../types/api/models/disputes';\nimport { DisputeManagementModal } from '../DisputeManagementModal/DisputeManagementModal';\nimport { TabComponentProps } from '../../../../internal/Tabs/types';\nimport Select from '../../../../internal/FormFields/Select';\nimport Tabs from '../../../../internal/Tabs/Tabs';\nimport './DisputesOverview.scss';\n\nconst DEFAULT_DISPUTE_STATUS_GROUP: IDisputeStatusGroup = 'CHARGEBACKS';\nconst DISPUTE_SCHEMES_FILTER_PARAM = 'schemeCodes';\nconst DISPUTE_REASONS_FILTER_PARAM = 'reasonCategories';\nconst LAST_REFRESH_TIMESTAMP_PARAM = '_t';\n\ntype DisputeScheme = keyof typeof DISPUTE_PAYMENT_SCHEMES;\ntype DisputeReason = keyof typeof DISPUTE_REASON_CATEGORIES;\n\nconst DISPUTE_SCHEMES_FILTER_VALUES = Object.keys(DISPUTE_PAYMENT_SCHEMES) as DisputeScheme[];\nconst DISPUTE_REASONS_FILTER_VALUES = Object.keys(DISPUTE_REASON_CATEGORIES) as DisputeReason[];\nconst DISPUTE_STATUS_GROUPS_VALUES = Object.keys(DISPUTE_STATUS_GROUPS) as IDisputeStatusGroup[];\n\nconst DISPUTE_STATUS_GROUPS_TABS = Object.entries(DISPUTE_STATUS_GROUPS).map(([statusGroup, labelTranslationKey]) => ({\n    id: statusGroup as IDisputeStatusGroup,\n    label: labelTranslationKey,\n    content: null,\n})) satisfies TabComponentProps<IDisputeStatusGroup>['tabs'];\n\nconst DisputesOverviewTabsDropdown = ({\n    ['aria-label']: ariaLabel,\n    activeTab,\n    onChange,\n}: {\n    activeTab: IDisputeStatusGroup;\n    onChange: NonNullable<TabComponentProps<IDisputeStatusGroup>['onChange']>;\n} & Pick<AriaAttributes, 'aria-label'>) => {\n    const { i18n } = useCoreContext();\n    const [statusGroup, setStatusGroup] = useState(activeTab);\n\n    const selectItems = useMemo(() => {\n        return Object.entries(DISPUTE_STATUS_GROUPS).map(([statusGroup, labelTranslationKey]) => ({\n            id: statusGroup as IDisputeStatusGroup,\n            name: i18n.get(labelTranslationKey),\n        }));\n    }, [i18n]);\n\n    useEffect(() => {\n        const currentTab = DISPUTE_STATUS_GROUPS_TABS.find(tab => tab.id === statusGroup);\n        currentTab && onChange(currentTab);\n    }, [onChange, statusGroup]);\n\n    useEffect(() => setStatusGroup(activeTab), [activeTab]);\n\n    return (\n        <Select\n            aria-label={ariaLabel}\n            items={selectItems}\n            selected={statusGroup}\n            onChange={({ target }) => setStatusGroup(target.value as IDisputeStatusGroup)}\n            showOverlay={true}\n            multiSelect={false}\n            filterable={false}\n        />\n    );\n};\n\ninterface DisputesPageRequestParams extends Record<FilterParam | 'cursor' | 'reasonCategories' | 'schemeCodes', string> {\n    [LAST_REFRESH_TIMESTAMP_PARAM]: DOMHighResTimeStamp;\n    statusGroup: IDisputeStatusGroup;\n}\n\nexport const DisputesOverview = ({\n    onFiltersChanged,\n    balanceAccounts,\n    allowLimitSelection = true,\n    preferredLimit = DEFAULT_PAGE_LIMIT,\n    isLoadingBalanceAccount,\n    onContactSupport,\n    hideTitle,\n    onRecordSelection,\n    showDetails,\n    dataCustomization,\n}: ExternalUIComponentProps<\n    DisputeOverviewComponentProps & { balanceAccounts: IBalanceAccountBase[] | undefined; isLoadingBalanceAccount: boolean }\n>) => {\n    const { i18n } = useCoreContext();\n    const { getDisputeList: getDisputesCall } = useConfigContext().endpoints;\n    const { activeBalanceAccount, balanceAccountSelectionOptions, onBalanceAccountSelection } = useBalanceAccountSelection({\n        balanceAccounts,\n        allowAllSelection: true,\n    });\n    const { defaultParams, nowTimestamp, refreshNowTimestamp } = useDefaultOverviewFilterParams('disputes', activeBalanceAccount, 'last90Days');\n\n    const [modalVisible, setModalVisible] = useState(false);\n    const [mobileStyleOverrides, setMobileStyleOverrides] = useState<h.JSX.CSSProperties | undefined>();\n    const [statusGroup, setStatusGroup] = useState<IDisputeStatusGroup>(DEFAULT_DISPUTE_STATUS_GROUP);\n    const [statusGroupFetchPending, setStatusGroupFetchPending] = useState(false);\n\n    // The statusGroupActiveTab state externally updates the active status group tab,\n    // which is useful for programmatic status group tab navigation. Its value can be\n    // set to undefined, in which case it has no effect on the status group tab state\n    // (will not cause the active status group tab to change).\n    const [statusGroupActiveTab, setStatusGroupActiveTab] = useState<IDisputeStatusGroup | undefined>(statusGroup);\n\n    const statusGroupAriaLabel = useMemo(() => i18n.get('disputes.overview.common.filters.types.statusGroup'), [i18n]);\n\n    const disputeDetails = useMemo(\n        () => ({\n            showDetails: showDetails ?? true,\n            callback: onRecordSelection,\n        }),\n        [showDetails, onRecordSelection]\n    );\n\n    const modalOptions = useMemo(() => ({ dispute: disputeDetails }), [disputeDetails]);\n\n    const getDisputes = useCallback(\n        async ({ [LAST_REFRESH_TIMESTAMP_PARAM]: _, ...pageRequestParams }: DisputesPageRequestParams, signal?: AbortSignal) => {\n            const requestOptions = { signal, errorLevel: 'error' } as const;\n\n            return getDisputesCall!(requestOptions, {\n                query: {\n                    ...pageRequestParams,\n                    ...(activeBalanceAccount?.id !== ALL_BALANCE_ACCOUNTS_SELECTION_ID && {\n                        balanceAccountId: activeBalanceAccount?.id ?? '',\n                    }),\n                    reasonCategories: listFrom(pageRequestParams[DISPUTE_REASONS_FILTER_PARAM]),\n                    schemeCodes: listFrom(pageRequestParams[DISPUTE_SCHEMES_FILTER_PARAM]),\n                    createdSince:\n                        pageRequestParams[FilterParam.CREATED_SINCE] ?? defaultParams.current.defaultFilterParams[FilterParam.CREATED_SINCE],\n                    createdUntil:\n                        pageRequestParams[FilterParam.CREATED_UNTIL] ?? defaultParams.current.defaultFilterParams[FilterParam.CREATED_UNTIL],\n                },\n            });\n        },\n        [activeBalanceAccount?.id, defaultParams, getDisputesCall]\n    );\n\n    // FILTERS\n    const filterBarState = useFilterBarState();\n    const _onFiltersChanged = useMemo(() => (isFunction(onFiltersChanged) ? onFiltersChanged : void 0), [onFiltersChanged]);\n    const preferredLimitOptions = useMemo(() => (allowLimitSelection ? LIMIT_OPTIONS : undefined), [allowLimitSelection]);\n\n    const defaultFilters = Object.assign(defaultParams.current.defaultFilterParams, {\n        [DISPUTE_REASONS_FILTER_PARAM]: undefined,\n        [DISPUTE_SCHEMES_FILTER_PARAM]: undefined,\n        [LAST_REFRESH_TIMESTAMP_PARAM]: performance.now(),\n        statusGroup: DEFAULT_DISPUTE_STATUS_GROUP,\n    });\n\n    const { canResetFilters, error, fetching, filters, limit, limitOptions, records, resetFilters, updateFilters, updateLimit, ...paginationProps } =\n        useCursorPaginatedRecords<IDisputeListItem, 'data', string, FilterParam>({\n            fetchRecords: getDisputes,\n            dataField: 'data',\n            filterParams: defaultFilters,\n            initialFiltersSameAsDefault: true,\n            onFiltersChanged: _onFiltersChanged,\n            preferredLimit,\n            preferredLimitOptions,\n            enabled: !!activeBalanceAccount?.id && !!getDisputesCall,\n        });\n\n    const cachedDisputeReasonsFilter = useRef<string | undefined>(undefined);\n\n    const disputeReasonsFilter = useMultiSelectionFilter({\n        mapFilterOptionName: useCallback((reason: DisputeReason) => i18n.get(DISPUTE_REASON_CATEGORIES[reason]), [i18n]),\n        filterParam: DISPUTE_REASONS_FILTER_PARAM,\n        filterValues: DISPUTE_REASONS_FILTER_VALUES,\n        defaultFilters: { ...defaultFilters, [DISPUTE_REASONS_FILTER_PARAM]: cachedDisputeReasonsFilter.current },\n        updateFilters,\n        filters,\n    });\n\n    const disputeSchemesFilter = useMultiSelectionFilter({\n        mapFilterOptionName: useCallback((scheme: DisputeScheme) => DISPUTE_PAYMENT_SCHEMES[scheme], []),\n        filterParam: DISPUTE_SCHEMES_FILTER_PARAM,\n        filterValues: DISPUTE_SCHEMES_FILTER_VALUES,\n        defaultFilters,\n        updateFilters,\n        filters,\n    });\n\n    const { updateDetails, resetDetails, selectedDetail } = useModalDetails(modalOptions);\n\n    const onRowClick = useCallback(\n        ({ disputePspReference }: IDisputeListItem) => {\n            updateDetails({\n                selection: {\n                    type: 'dispute',\n                    data: disputePspReference,\n                },\n                modalSize: 'small',\n            }).callback({ id: disputePspReference });\n        },\n        [updateDetails]\n    );\n\n    const sinceDate = useMemo(() => {\n        const date = new Date(nowTimestamp);\n        const oneYearUntilNow = date.setFullYear(date.getFullYear() - 1);\n        const earliestTimestamp = new Date(EARLIEST_DISPUTES_SINCE_DATE).getTime();\n        return new Date(Math.max(earliestTimestamp, oneYearUntilNow)).toString();\n    }, [nowTimestamp]);\n\n    const debounceTimeoutIdRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n    const onStatusGroupChange = useCallback<NonNullable<TabComponentProps<IDisputeStatusGroup>['onChange']>>(\n        ({ id: statusGroup }) => {\n            debounceTimeoutIdRef.current && clearTimeout(debounceTimeoutIdRef.current);\n\n            debounceTimeoutIdRef.current = setTimeout(() => {\n                requestAnimationFrame(() => setStatusGroupFetchPending(false));\n\n                const reasonsFilterParam = DISPUTE_REASONS_FILTER_PARAM as FilterParam;\n                const filterUpdates = { statusGroup, [reasonsFilterParam]: undefined } as any;\n\n                if (statusGroup !== 'FRAUD_ALERTS') {\n                    filterUpdates[reasonsFilterParam] = cachedDisputeReasonsFilter.current;\n                }\n\n                updateFilters(filterUpdates);\n                debounceTimeoutIdRef.current = null;\n            }, 500);\n\n            setStatusGroup(statusGroup);\n            setStatusGroupFetchPending(true);\n\n            // Resetting statusGroupActiveTab to undefined here to allow for subsequent\n            // programmatic status group tab navigation (will not change the active tab).\n            setStatusGroupActiveTab(undefined);\n        },\n        [updateFilters]\n    );\n\n    const refreshDisputesList = useCallback(\n        (gotoStatusGroup?: IDisputeStatusGroup) => {\n            gotoStatusGroup && DISPUTE_STATUS_GROUPS_VALUES.includes(gotoStatusGroup) && gotoStatusGroup !== statusGroup\n                ? setStatusGroupActiveTab(gotoStatusGroup)\n                : // Refresh the current disputes list status group,\n                  // by updating the last refresh timestamp filter parameter\n                  updateFilters({ [LAST_REFRESH_TIMESTAMP_PARAM]: performance.now() } as any);\n        },\n        [statusGroup, updateFilters]\n    );\n\n    const isMobileContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    useEffect(() => {\n        setMobileStyleOverrides(isMobileContainer && modalVisible ? { maxHeight: 0, overflowY: 'hidden' } : undefined);\n    }, [isMobileContainer, modalVisible]);\n\n    useEffect(() => {\n        refreshNowTimestamp();\n\n        if ((filters['statusGroup' as FilterParam]! as IDisputeStatusGroup) !== 'FRAUD_ALERTS') {\n            cachedDisputeReasonsFilter.current = filters[DISPUTE_REASONS_FILTER_PARAM as FilterParam];\n        }\n    }, [filters, refreshNowTimestamp]);\n\n    return (\n        <div style={mobileStyleOverrides} className={cx(BASE_CLASS, { [BASE_XS_CLASS]: isMobileContainer })}>\n            <Header hideTitle={hideTitle} titleKey=\"disputes.overview.common.title\">\n                <FilterBarMobileSwitch {...filterBarState} />\n            </Header>\n\n            <div>\n                <div>\n                    <div className={TABS_CONTAINER_CLASS}>\n                        {isMobileContainer ? (\n                            <DisputesOverviewTabsDropdown\n                                aria-label={statusGroupAriaLabel}\n                                activeTab={statusGroupActiveTab ?? statusGroup}\n                                onChange={onStatusGroupChange}\n                            />\n                        ) : (\n                            <Tabs\n                                aria-label={statusGroupAriaLabel}\n                                tabs={DISPUTE_STATUS_GROUPS_TABS}\n                                activeTab={statusGroupActiveTab}\n                                onChange={onStatusGroupChange}\n                            />\n                        )}\n                    </div>\n\n                    <FilterBar {...filterBarState} ariaLabelKey=\"disputes.overview.common.filters.a11y.label\">\n                        <BalanceAccountSelector\n                            activeBalanceAccount={activeBalanceAccount}\n                            balanceAccountSelectionOptions={balanceAccountSelectionOptions}\n                            onBalanceAccountSelection={onBalanceAccountSelection}\n                        />\n                        <DateFilter\n                            canResetFilters={canResetFilters}\n                            defaultParams={defaultParams}\n                            filters={filters}\n                            nowTimestamp={nowTimestamp}\n                            refreshNowTimestamp={refreshNowTimestamp}\n                            sinceDate={sinceDate}\n                            timezone={activeBalanceAccount?.timeZone}\n                            updateFilters={updateFilters}\n                        />\n                        <MultiSelectionFilter\n                            {...disputeSchemesFilter}\n                            placeholder={i18n.get('disputes.overview.common.filters.types.paymentMethod')}\n                            onResetAction={noop}\n                        />\n                        {statusGroup !== 'FRAUD_ALERTS' && (\n                            <MultiSelectionFilter\n                                {...disputeReasonsFilter}\n                                placeholder={i18n.get('disputes.overview.common.filters.types.disputeReason')}\n                                onResetAction={noop}\n                            />\n                        )}\n                    </FilterBar>\n                </div>\n\n                <DisputeManagementModal\n                    dataCustomization={dataCustomization?.details && { details: dataCustomization?.details }}\n                    selectedDetail={selectedDetail as ReturnType<typeof useModalDetails>['selectedDetail']}\n                    resetDetails={resetDetails}\n                    onContactSupport={onContactSupport}\n                    refreshDisputesList={refreshDisputesList}\n                    setModalVisible={setModalVisible}\n                >\n                    <DisputesTable\n                        activeBalanceAccount={activeBalanceAccount}\n                        balanceAccountId={activeBalanceAccount?.id}\n                        loading={statusGroupFetchPending || fetching || isLoadingBalanceAccount || !balanceAccounts || !activeBalanceAccount}\n                        data={records}\n                        showPagination={true}\n                        limit={limit}\n                        limitOptions={limitOptions}\n                        onContactSupport={onContactSupport}\n                        onLimitSelection={updateLimit}\n                        error={error as AdyenPlatformExperienceError}\n                        onRowClick={onRowClick}\n                        statusGroup={statusGroup}\n                        {...paginationProps}\n                    />\n                </DisputeManagementModal>\n            </div>\n        </div>\n    );\n};\n","import useBalanceAccounts from '../../../../../hooks/useBalanceAccounts';\nimport DataOverviewContainer from '../../../../internal/DataOverviewContainer/DataOverviewContainer';\nimport { DisputeOverviewComponentProps, ExternalUIComponentProps } from '../../../../types';\nimport { DisputesOverview } from '../DisputesOverview/DisputesOverview';\n\nfunction DisputesOverviewContainer({ ...props }: ExternalUIComponentProps<DisputeOverviewComponentProps>) {\n    const { balanceAccounts, isBalanceAccountIdWrong, isFetching, error } = useBalanceAccounts(props.balanceAccountId);\n\n    return (\n        <DataOverviewContainer\n            balanceAccountsError={error}\n            className=\"adyen-pe-disputes-overview-container\"\n            errorMessage={'disputes.overview.common.errors.unavailable'}\n            isBalanceAccountIdWrong={isBalanceAccountIdWrong}\n            onContactSupport={props.onContactSupport}\n        >\n            <DisputesOverview {...props} balanceAccounts={balanceAccounts} isLoadingBalanceAccount={isFetching} />\n        </DataOverviewContainer>\n    );\n}\nexport default DisputesOverviewContainer;\n","import { _UIComponentProps, DisputeOverviewComponentProps, ExternalComponentType } from '../../types';\nimport Disputes from './components/DisputesContainer/DisputesContainer';\nimport UIElement from '../UIElement/UIElement';\n\nexport class DisputesOverviewElement extends UIElement<DisputeOverviewComponentProps> {\n    public static type: ExternalComponentType = 'disputes';\n\n    constructor(props: _UIComponentProps<DisputeOverviewComponentProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n    }\n\n    public componentToRender = () => {\n        return <Disputes {...this.props} />;\n    };\n}\n\nexport default DisputesOverviewElement;\n","import { _UIComponentProps, ExternalComponentType } from '../../types';\nimport UIElement from '../UIElement/UIElement';\nimport { DisputeManagementProps } from './types';\nimport { DisputeDetailsContainer } from './components/DisputeDetailsContainer/DisputeDetailsContainer';\n\nexport class DisputeManagementElement extends UIElement<DisputeManagementProps> {\n    public static type: ExternalComponentType = 'disputesManagement';\n\n    constructor(props: _UIComponentProps<DisputeManagementProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n    }\n\n    public componentToRender = () => {\n        return <DisputeDetailsContainer {...this.props} />;\n    };\n}\n\nexport default DisputeManagementElement;\n","import { TranslationKey } from '../../../../translations';\nimport { IPaymentLinkFilterStatusGroup, IPaymentLinkStatus, IPaymentLinkStatusGroup, IPaymentLinkType } from '../../../../types';\nimport { TabComponentProps } from '../../../internal/Tabs/types';\n\nexport const BASE_CLASS = 'adyen-pe-payment-links-overview';\nexport const BASE_DETAILS_CLASS = 'adyen-pe-payment-link-details';\nexport const BASE_TABLE_GRID_CLASS = 'adyen-pe-payment-link-table';\nexport const BASE_XS_CLASS = `${BASE_CLASS}--xs`;\nexport const BASE_ACTIONS_CLASS = `${BASE_CLASS}__actions-container`;\nexport const TABS_CONTAINER_CLASS = `${BASE_CLASS}__tabs-container`;\nexport const MOBILE_TABLE_CELL_CLASS = `${BASE_TABLE_GRID_CLASS}__mobile-cell`;\nexport const MOBILE_AMOUNT_CELL_CLASS = `${BASE_TABLE_GRID_CLASS}__mobile-amount-cell`;\nexport const MOBILE_EXPIRE_DATE_CELL_CLASS = `${BASE_TABLE_GRID_CLASS}__mobile-expire-date-cell`;\nexport const FILTERS_CONTAINER_CLASS = `${BASE_CLASS}__filters-container`;\nexport const ACTION_BUTTONS_CONTAINER_CLASS = `${BASE_CLASS}__action-buttons-container`;\nexport const FILTERS_ALERT_CONTAINER_CLASS = `${BASE_CLASS}__filters-alert-container`;\nexport const ACTION_BUTTON_CLASS = `${BASE_CLASS}__action-button`;\nexport const ACTION_BUTTON_MOBILE_CLASS = `${BASE_CLASS}__action-button--xs`;\n\nexport const EARLIEST_PAYMENT_LINK_DATE = 90;\n\nexport const DEFAULT_PAYMENT_LINK_STATUS_GROUP: IPaymentLinkStatusGroup = 'active';\n\nexport const PAYMENT_LINK_STATUS_GROUPS = {\n    active: 'payByLink.overview.list.statusGroups.active',\n    inactive: 'payByLink.overview.list.statusGroups.inactive',\n} satisfies Record<keyof IPaymentLinkFilterStatusGroup, TranslationKey>;\n\nexport const PAYMENT_LINK_STATUS_GROUPS_TABS = Object.entries(PAYMENT_LINK_STATUS_GROUPS).map(([statusGroup, labelTranslationKey]) => ({\n    id: statusGroup as IPaymentLinkStatusGroup,\n    label: labelTranslationKey,\n    content: null,\n})) satisfies TabComponentProps<IPaymentLinkStatusGroup>['tabs'];\n\nexport const PAYMENT_LINK_STATUS_GROUPS_FILTER_MAPPING = {\n    active: 'active',\n    inactive: 'inactive',\n} as const satisfies Record<IPaymentLinkStatusGroup, keyof IPaymentLinkFilterStatusGroup>;\n\nexport const PAYMENT_LINK_STATUSES = {\n    active: 'payByLink.common.status.active',\n    expired: 'payByLink.common.status.expired',\n    completed: 'payByLink.common.status.completed',\n    paymentPending: 'payByLink.common.status.paymentPending',\n} as const satisfies Record<IPaymentLinkStatus, TranslationKey>;\n\nexport const PAYMENT_LINK_TYPES = {\n    open: 'payByLink.common.linkType.open',\n    singleUse: 'payByLink.common.linkType.singleUse',\n} as const satisfies Record<IPaymentLinkType, TranslationKey>;\n","import { parseDate } from '../../../utils';\n\nexport const ACTION_NEEDED_URGENTLY_THRESHOLD_DAYS = 10;\n\nexport const enum ActionNeededLevel {\n    NEVER = 0, // 3-bits (0 0 0)\n    SOON = 1, // 3-bits (0 0 1)\n    URGENTLY = 3, // 3-bits (0 1 1)\n    NOW = 7, // 3-bits (1 1 1)\n}\n\nexport const getActionNeededLevel = (date: string): ActionNeededLevel => {\n    const deadlineTimestamp = parseDate(date);\n\n    if (deadlineTimestamp != undefined) {\n        const now = Date.now();\n        const deadline = new Date(deadlineTimestamp);\n        const actionNeededNowThresholdTimestamp = new Date(deadline).setHours(deadline.getHours() - 24);\n\n        if (actionNeededNowThresholdTimestamp <= now) {\n            return ActionNeededLevel.NOW;\n        }\n\n        const actionNeededUrgentlyThresholdTimestamp = new Date(deadline).setDate(deadline.getDate() - ACTION_NEEDED_URGENTLY_THRESHOLD_DAYS);\n\n        if (actionNeededUrgentlyThresholdTimestamp <= now) {\n            return ActionNeededLevel.URGENTLY;\n        }\n    }\n\n    return ActionNeededLevel.SOON;\n};\n\nexport const isDisputeActionNeeded = (date: string): boolean => {\n    return getActionNeededLevel(date) > ActionNeededLevel.NEVER;\n};\n\nexport const isActionNeededUrgently = (date: string): boolean => {\n    return getActionNeededLevel(date) > ActionNeededLevel.SOON;\n};\n\nexport const isDisputeActionNeededNow = (date: string): boolean => {\n    return getActionNeededLevel(date) === ActionNeededLevel.NOW;\n};\n","import AdyenPlatformExperienceError from '../../../../core/Errors/AdyenPlatformExperienceError';\nimport { TranslationKey } from '../../../../translations';\nimport { ErrorMessage, UNDEFINED_ERROR } from '../../../utils/getCommonErrorCode';\nimport CopyText from '../../../internal/CopyText/CopyText';\nimport { AssetOptions } from '../../../../core/Assets/Assets';\n\nexport const ACCOUNT_MISCONFIGURATION = 'ACCOUNT_MISCONFIGURATION';\nexport const WRONG_STORE_IDS = 'WRONG_STORE_IDS';\n\nexport const getPaymentLinksErrorMessage = (\n    error: AdyenPlatformExperienceError | undefined,\n    errorMessage: TranslationKey,\n    onContactSupport?: () => void,\n    getImageAsset?: (props: AssetOptions) => string\n): ErrorMessage => {\n    if (!error) return UNDEFINED_ERROR;\n\n    const secondaryErrorMessage = onContactSupport ? 'common.errors.errorCode' : 'common.errors.errorCodeSupport';\n    const translationValues = {\n        [secondaryErrorMessage]: error.requestId ? (\n            <CopyText copyButtonAriaLabelKey=\"common.actions.copy.labels.errorCode\" textToCopy={error.requestId} />\n        ) : null,\n    };\n\n    switch (error.errorCode) {\n        case ACCOUNT_MISCONFIGURATION:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: ['payByLink.common.errors.accountConfiguration', 'common.errors.contactSupport'],\n                translationValues,\n                onContactSupport,\n            };\n        case WRONG_STORE_IDS:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: ['payByLink.common.errors.storeID', 'common.errors.contactSupport'],\n                translationValues,\n                onContactSupport,\n            };\n        case '29_001':\n            if (error.invalidFields?.some(field => field.name === 'paymentLinkId')) {\n                return {\n                    title: 'payByLink.overview.errors.listEmpty',\n                    message: ['payByLink.overview.errors.listEmpty.message'],\n                    images: {\n                        desktop: getImageAsset?.({ name: 'no-results-found' }),\n                        mobile: getImageAsset?.({ name: 'no-results-found', subFolder: 'images/small' }),\n                    },\n                };\n            }\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: ['payByLink.overview.errors.couldNotLoadLinks', 'common.errors.retry'],\n                onContactSupport,\n            };\n        case '00_500':\n        case undefined:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: ['payByLink.overview.errors.couldNotLoadLinks', secondaryErrorMessage],\n                translationValues,\n                refreshComponent: true,\n            };\n        default:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: [errorMessage, secondaryErrorMessage],\n                translationValues,\n                onContactSupport,\n                refreshComponent: true,\n            };\n    }\n};\n","import { ErrorMessageDisplay } from '../../../internal/ErrorMessageDisplay/ErrorMessageDisplay';\nimport { getPaymentLinksErrorMessage } from '../utils/getPaymentLinksErrorMessage';\nimport { TranslationKey } from '../../../../translations';\nimport AdyenPlatformExperienceError from '../../../../core/Errors/AdyenPlatformExperienceError';\nimport { AssetOptions } from '../../../../core/Assets/Assets';\n\nexport const PaymentLinksErrors = ({\n    error,\n    errorMessage,\n    onContactSupport,\n    getImageAsset,\n}: {\n    error: AdyenPlatformExperienceError | undefined;\n    errorMessage: TranslationKey;\n    onContactSupport?: () => void;\n    getImageAsset?: (props: AssetOptions) => string;\n}) => {\n    const {\n        title,\n        message,\n        refreshComponent,\n        translationValues,\n        onContactSupport: ContactSupport,\n        images,\n    } = getPaymentLinksErrorMessage(error, errorMessage, onContactSupport, getImageAsset);\n    return (\n        <ErrorMessageDisplay\n            imageDesktop={images?.desktop}\n            imageMobile={images?.mobile}\n            withHeaderOffset\n            title={title}\n            message={message}\n            translationValues={translationValues}\n            withImage\n            centered\n            refreshComponent={refreshComponent}\n            onContactSupport={ContactSupport}\n        />\n    );\n};\n","import { FC } from 'preact/compat';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport useTimezoneAwareDateFormatting from '../../../../hooks/useTimezoneAwareDateFormatting';\nimport { containerQueries, useResponsiveContainer } from '../../../../hooks/useResponsiveContainer';\nimport { useTableColumns } from '../../../../hooks/useTableColumns';\nimport { TranslationKey } from '../../../../translations';\nimport DataGrid from '../../../internal/DataGrid';\nimport Pagination from '../../../internal/Pagination';\nimport { PaymentLinkTableProps } from './types';\nimport {\n    BASE_TABLE_GRID_CLASS,\n    MOBILE_AMOUNT_CELL_CLASS,\n    MOBILE_EXPIRE_DATE_CELL_CLASS,\n    MOBILE_TABLE_CELL_CLASS,\n    PAYMENT_LINK_STATUSES,\n} from './constants';\nimport { Tag } from '../../../internal/Tag/Tag';\nimport { TagVariant } from '../../../internal/Tag/types';\nimport Typography from '../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../internal/Typography/types';\nimport { IPaymentLinkStatus } from '../../../../types';\nimport {\n    DATE_FORMAT_PAYMENT_LINKS_OVERVIEW,\n    DATE_FORMAT_PAYMENT_LINKS_OVERVIEW_EXPIRATION_DATE,\n    DATE_FORMAT_RESPONSE_DEADLINE,\n} from '../../../../constants';\nimport { DAY_MS } from '../../../internal/Calendar/calendar/constants';\nimport { Tooltip } from '../../../internal/Tooltip/Tooltip';\nimport { isActionNeededUrgently } from '../../../utils/payByLink/actionLevel';\nimport classNames from 'classnames';\nimport { PaymentLinksErrors } from './PaymentLinksErrors';\nimport AdyenPlatformExperienceError from '../../../../core/Errors/AdyenPlatformExperienceError';\nimport { BACKEND_REDACTED_DATA_MARKER, FRONTEND_REDACTED_DATA_MARKER } from '../../../constants';\nimport { ACCOUNT_MISCONFIGURATION, WRONG_STORE_IDS } from '../utils/getPaymentLinksErrorMessage';\n\nconst getTagVariantForStatus = (status: IPaymentLinkStatus) => {\n    switch (status) {\n        case 'completed':\n            return TagVariant.SUCCESS;\n        case 'expired':\n            return TagVariant.DEFAULT;\n        case 'paymentPending':\n            return TagVariant.WARNING;\n        case 'active':\n            return TagVariant.BLUE;\n        default:\n            return TagVariant.DEFAULT;\n    }\n};\n\nexport const PAYMENT_LINKS_TABLE_FIELDS = [\n    'paymentLinkId',\n    'merchantReference',\n    'storeCode',\n    'currency',\n    'amount',\n    'status',\n    'expirationDate',\n    'creationDate',\n    'linkType',\n    'shopperEmail',\n] as const;\n\nconst FIELDS_KEYS = {\n    paymentLinkId: 'payByLink.overview.list.fields.id',\n    amount: 'payByLink.overview.list.fields.amount',\n    currency: 'payByLink.overview.list.fields.currency',\n    status: 'payByLink.overview.list.fields.status',\n    expirationDate: 'payByLink.overview.list.fields.expirationDate',\n    creationDate: 'payByLink.overview.list.fields.createdAt',\n    linkType: 'payByLink.overview.list.fields.linkType',\n    merchantReference: 'payByLink.overview.list.fields.merchantReference',\n    shopperEmail: 'payByLink.overview.list.fields.shopperEmail',\n    storeCode: 'payByLink.overview.list.fields.store',\n} as const satisfies Record<(typeof PAYMENT_LINKS_TABLE_FIELDS)[number], TranslationKey>;\n\nconst ERROR_MESSAGE_KEY = 'payByLink.overview.errors.couldNotLoadLinks' as const;\n\nexport const PaymentLinksTable: FC<PaymentLinkTableProps> = ({\n    error,\n    loading,\n    onContactSupport,\n    onRowClick,\n    showDetails,\n    showPagination,\n    paymentLinks,\n    stores,\n    allStores,\n    storeError,\n    ...paginationProps\n}) => {\n    const { i18n, getImageAsset } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting();\n    const isSmAndUpContainer = useResponsiveContainer(containerQueries.up.sm);\n\n    const getTimeToDeadline = useCallback(\n        (dueDate: string) => {\n            if (!dueDate) return '';\n            const deadline = new Date(dueDate).getTime();\n            const diffInMs = deadline - Date.now();\n            const diffInDays = Math.ceil(diffInMs / DAY_MS);\n            const formattedDate = dateFormat(dueDate, { ...DATE_FORMAT_RESPONSE_DEADLINE, weekday: undefined });\n\n            return diffInDays <= 1\n                ? i18n.get('payByLink.overview.common.actionNeeded.expiresToday', { values: { date: formattedDate } })\n                : i18n.get('payByLink.overview.common.actionNeeded.expiresDays', { values: { days: diffInDays, date: formattedDate } });\n        },\n        [dateFormat, i18n]\n    );\n\n    const isMobileContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    const columns = useTableColumns({\n        fields: PAYMENT_LINKS_TABLE_FIELDS,\n        fieldsKeys: FIELDS_KEYS,\n        columnConfig: {\n            amount: {\n                position: 'right',\n                flex: isSmAndUpContainer ? 1.5 : undefined,\n            },\n            linkType: {\n                label: i18n.get(FIELDS_KEYS.linkType),\n                visible: !isMobileContainer,\n            },\n            storeCode: {\n                visible: stores && stores?.length > 1 && !isMobileContainer,\n            },\n            merchantReference: {\n                visible: !isMobileContainer,\n            },\n            currency: {\n                visible: !isMobileContainer,\n            },\n            status: {\n                visible: !isMobileContainer,\n            },\n            expirationDate: {\n                visible: !isMobileContainer,\n            },\n            creationDate: {\n                visible: !isMobileContainer,\n            },\n            shopperEmail: {\n                visible: !isMobileContainer,\n            },\n        },\n    });\n\n    const EMPTY_TABLE_MESSAGE = {\n        title: 'payByLink.overview.errors.listEmpty',\n        message: ['payByLink.overview.errors.listEmpty.message'],\n    } satisfies { title: TranslationKey; message: TranslationKey | TranslationKey[] };\n\n    const noStoresError = useMemo(() => {\n        if (allStores?.length !== 0 || storeError) return undefined;\n        return {\n            message: 'No stores configured',\n            name: 'Account misconfiguration',\n            errorCode: ACCOUNT_MISCONFIGURATION,\n            type: 'error',\n            requestId: '',\n        } as AdyenPlatformExperienceError;\n    }, [allStores, storeError]);\n\n    const storesFilteredError = useMemo(() => {\n        if (allStores && allStores?.length > 0 && stores?.length !== 0) return undefined;\n        return {\n            errorCode: WRONG_STORE_IDS,\n            type: 'error',\n            requestId: '',\n        } as AdyenPlatformExperienceError;\n    }, [allStores, stores]);\n\n    const errorDisplay = useMemo(\n        () => () => {\n            return (\n                <PaymentLinksErrors\n                    getImageAsset={getImageAsset}\n                    error={noStoresError || error || storesFilteredError}\n                    onContactSupport={onContactSupport}\n                    errorMessage={ERROR_MESSAGE_KEY}\n                />\n            );\n        },\n        [error, getImageAsset, onContactSupport, noStoresError, storesFilteredError]\n    );\n\n    return (\n        <div className={BASE_TABLE_GRID_CLASS}>\n            <DataGrid\n                narrowColumns={isMobileContainer}\n                errorDisplay={errorDisplay}\n                error={noStoresError || error || storesFilteredError}\n                columns={columns}\n                data={paymentLinks}\n                loading={loading}\n                outline={false}\n                onRowClick={{ callback: onRowClick }}\n                emptyTableMessage={EMPTY_TABLE_MESSAGE}\n                customCells={{\n                    currency: ({ item }) => {\n                        if (!item?.amount?.currency) return;\n                        return <Tag label={`${item.amount.currency}`} variant={TagVariant.DEFAULT} />;\n                    },\n                    amount: ({ value, item }) => {\n                        const amount = i18n.amount(value.value, value.currency, { hideCurrency: true });\n\n                        if (isMobileContainer) {\n                            return (\n                                <div className={classNames(MOBILE_TABLE_CELL_CLASS, MOBILE_AMOUNT_CELL_CLASS)}>\n                                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} strongest>\n                                        {amount}\n                                    </Typography>\n                                    <span>\n                                        {item.status && (\n                                            <Tag label={i18n.get(PAYMENT_LINK_STATUSES[item.status])} variant={getTagVariantForStatus(item.status)} />\n                                        )}\n                                    </span>\n                                </div>\n                            );\n                        }\n\n                        return (\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                {amount}\n                            </Typography>\n                        );\n                    },\n                    status: ({ value }) => {\n                        if (!value) return;\n                        return <Tag label={i18n.get(`${PAYMENT_LINK_STATUSES[value]}`)} variant={getTagVariantForStatus(value)} />;\n                    },\n                    linkType: ({ item }) => {\n                        if (!item?.linkType) return null;\n                        const value = item?.linkType === 'open' ? 'payByLink.common.linkType.open' : 'payByLink.common.linkType.singleUse';\n                        return (\n                            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                {i18n.get(value)}\n                            </Typography>\n                        );\n                    },\n                    creationDate: ({ value }) => {\n                        return (\n                            <time dateTime={value}>\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                    {dateFormat(value, DATE_FORMAT_PAYMENT_LINKS_OVERVIEW)}\n                                </Typography>\n                            </time>\n                        );\n                    },\n                    expirationDate: ({ value }) => {\n                        const isUrgent = isActionNeededUrgently(value);\n\n                        return isUrgent ? (\n                            <Tooltip content={getTimeToDeadline(value)}>\n                                <span>\n                                    <time dateTime={value}>{dateFormat(value, DATE_FORMAT_PAYMENT_LINKS_OVERVIEW_EXPIRATION_DATE)}</time>\n                                </span>\n                            </Tooltip>\n                        ) : (\n                            <time dateTime={value}>\n                                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                    {dateFormat(value, DATE_FORMAT_PAYMENT_LINKS_OVERVIEW_EXPIRATION_DATE)}\n                                </Typography>\n                            </time>\n                        );\n                    },\n                    paymentLinkId: ({ item }) => {\n                        if (isMobileContainer) {\n                            return (\n                                <div className={MOBILE_TABLE_CELL_CLASS}>\n                                    <Typography strongest el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                                        {item.paymentLinkId}\n                                    </Typography>\n                                    <time dateTime={item.expirationDate}>\n                                        <Typography\n                                            className={MOBILE_EXPIRE_DATE_CELL_CLASS}\n                                            el={TypographyElement.SPAN}\n                                            variant={TypographyVariant.CAPTION}\n                                        >\n                                            {i18n.get('payByLink.overview.common.actionNeeded.expiresAt', {\n                                                values: { date: dateFormat(item.expirationDate, DATE_FORMAT_PAYMENT_LINKS_OVERVIEW_EXPIRATION_DATE) },\n                                            })}\n                                        </Typography>\n                                    </time>\n                                </div>\n                            );\n                        }\n                        return <>{item.paymentLinkId}</>;\n                    },\n                    shopperEmail: ({ item }) => (\n                        <>{item.shopperEmail === BACKEND_REDACTED_DATA_MARKER ? FRONTEND_REDACTED_DATA_MARKER : item.shopperEmail}</>\n                    ),\n                }}\n            >\n                {showPagination && (\n                    <DataGrid.Footer>\n                        <Pagination\n                            {...paginationProps}\n                            ariaLabelKey=\"payByLink.overview.pagination.label\"\n                            limitSelectAriaLabelKey=\"payByLink.overview.pagination.controls.limitSelect.label\"\n                        />\n                    </DataGrid.Footer>\n                )}\n            </DataGrid>\n        </div>\n    );\n};\n","import { useMemo } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport Card from '../../../../internal/Card/Card';\nimport { Tag } from '../../../../internal/Tag/Tag';\nimport { TagVariant } from '../../../../internal/Tag/types';\nimport { TypographyVariant, TypographyElement } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { DATE_FORMAT_PAYMENT_LINK_DETAILS_SUMMARY } from '../../../../../constants';\nimport { IPaymentLinkStatus, IPaymentLinkDetails } from '../../../../../types';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport './PaymentLinkSummary.scss';\n\nconst CLASSNAMES = {\n    root: 'adyen-pe-payment-link-summary',\n    content: 'adyen-pe-payment-link-summary__content',\n    expiresLabel: 'adyen-pe-payment-link-summary__expires-label',\n};\n\ntype PaymentLinkSummaryProps = {\n    paymentLink: IPaymentLinkDetails;\n};\n\nexport const PaymentLinkSummary = ({ paymentLink }: PaymentLinkSummaryProps) => {\n    const { i18n } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting();\n    const status = paymentLink?.linkInformation.status;\n    const getStatusVariant = (status: IPaymentLinkStatus): TagVariant => {\n        switch (status) {\n            case 'active':\n                return TagVariant.BLUE;\n            case 'completed':\n                return TagVariant.SUCCESS;\n            case 'expired':\n                return TagVariant.DEFAULT;\n            case 'paymentPending':\n                return TagVariant.WARNING;\n            default:\n                return TagVariant.DEFAULT;\n        }\n    };\n\n    const formattedAmount = useMemo(() => {\n        if (!paymentLink?.linkInformation.amount) return null;\n        const { value, currency } = paymentLink.linkInformation.amount;\n        return `${i18n.amount(value, currency, { hideCurrency: true })} ${currency}`;\n    }, [i18n, paymentLink?.linkInformation.amount]);\n\n    return (\n        <Card classNameModifiers={[CLASSNAMES.root]}>\n            <div className={CLASSNAMES.content}>\n                <Tag variant={getStatusVariant(status)}>\n                    {i18n.has(`payByLink.common.status.${status}`)\n                        ? i18n.get(`payByLink.common.status.${status}`)\n                        : paymentLink?.linkInformation.status}\n                </Tag>\n                <Typography variant={TypographyVariant.TITLE} large>\n                    {formattedAmount}\n                </Typography>\n                <div>\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} className={CLASSNAMES.expiresLabel}>\n                        {`${i18n.get('payByLink.details.fields.expiresOn')}: `}\n                    </Typography>\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                        {dateFormat(paymentLink.linkInformation.expirationDate, DATE_FORMAT_PAYMENT_LINK_DETAILS_SUMMARY)}\n                    </Typography>\n                </div>\n            </div>\n        </Card>\n    );\n};\n","import { TranslationKey } from '../../../../../translations';\nimport { TimelineStatus } from '../../../../internal/Timeline/types';\nimport { IPaymentLinkActivity } from '../../../../../types';\n\nexport const getTitleKey = (activity: IPaymentLinkActivity): TranslationKey | undefined => {\n    switch (activity.type) {\n        case 'createdAction':\n            return 'payByLink.details.activity.created';\n        case 'expiredAction':\n            return 'payByLink.details.activity.expired';\n        case 'paymentAttempt':\n            return 'payByLink.details.activity.paymentAttempt';\n        default:\n            return undefined;\n    }\n};\n\nexport const getDescriptionKey = (activity: IPaymentLinkActivity): TranslationKey | undefined => {\n    switch (activity.expirationReason) {\n        case 'maximumAttemptsReached':\n            return 'payByLink.details.activity.expirationReason.maximumAttemptsReached';\n        case 'manuallyExpired':\n            return 'payByLink.details.activity.expirationReason.manuallyExpired';\n        case 'expirationDateReached':\n            return 'payByLink.details.activity.expirationReason.expirationDateReached';\n        default:\n            return undefined;\n    }\n};\n\nexport const getStatus = (activity: IPaymentLinkActivity): TimelineStatus => {\n    switch (activity.type) {\n        case 'createdAction':\n            return 'green';\n        case 'expiredAction':\n            return 'red';\n        case 'paymentAttempt':\n            return 'blue';\n        default:\n            return 'black';\n    }\n};\n","import { useMemo } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { TimelineItem } from '../../../../internal/Timeline/components/TimelineItem';\nimport Timeline from '../../../../internal/Timeline/Timeline';\nimport { TimelineDateFormat } from '../../../../internal/Timeline/types';\nimport { IPaymentLinkActivity } from '../../../../../types';\nimport { getTitleKey, getDescriptionKey, getStatus } from './utils';\n\ntype PaymentLinkActivityProps = {\n    activities: IPaymentLinkActivity[];\n};\n\nexport const PaymentLinkActivity = ({ activities }: PaymentLinkActivityProps) => {\n    const { i18n } = useCoreContext();\n\n    const timelineItems = useMemo(\n        () =>\n            activities.map(activity => ({\n                titleKey: getTitleKey(activity),\n                descriptionKey: getDescriptionKey(activity),\n                date: activity.date,\n                status: getStatus(activity),\n            })),\n        [activities]\n    );\n\n    return (\n        <Timeline>\n            {timelineItems.map(({ titleKey, date, status, descriptionKey }: any) => (\n                <TimelineItem\n                    key={date}\n                    title={i18n.get(titleKey)}\n                    timestamp={{\n                        date: new Date(date),\n                        format: TimelineDateFormat.FULL_DATE_EXACT_TIME,\n                    }}\n                    status={status}\n                    description={i18n.get(descriptionKey)}\n                />\n            ))}\n        </Timeline>\n    );\n};\n","import useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport StructuredList from '../../../../internal/StructuredList';\nimport { ListValue, StructuredListItem, StructuredListItemType } from '../../../../internal/StructuredList/types';\nimport Tabs from '../../../../internal/Tabs/Tabs';\nimport { DATE_FORMAT_PAYMENT_LINK_DETAILS_TABS } from '../../../../../constants';\nimport useTimezoneAwareDateFormatting from '../../../../../hooks/useTimezoneAwareDateFormatting';\nimport { IPaymentLinkDetails, IPaymentLinkShopperAddress } from '../../../../../types';\nimport { TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../../components/internal/Typography/Typography';\nimport { PaymentLinkActivity } from '../PaymentLinkActivity/PaymentLinkActivity';\nimport { TabProps } from 'src/components/internal/Tabs/types';\nimport './PaymentLinkTabs.scss';\nimport { TranslationKey } from '../../../../../translations';\nimport CopyText from '../../../../internal/CopyText/CopyText';\nimport { BACKEND_REDACTED_DATA_MARKER, FRONTEND_REDACTED_DATA_MARKER } from '../../../../constants';\nimport Link from '../../../../internal/Link/Link';\n\nconst CLASSNAMES = {\n    root: 'adyen-pe-payment-link-tabs',\n    list: 'adyen-pe-payment-link-tabs__list',\n    listHeading: 'adyen-pe-payment-link-tabs__list-heading',\n    listLabel: 'adyen-pe-payment-link-tabs__list-label',\n    listValue: 'adyen-pe-payment-link-tabs__list-value',\n};\n\ntype PaymentLinkTabsProps = {\n    paymentLink: IPaymentLinkDetails;\n};\n\ntype ListItems = Record<'linkInformation' | 'shopperInformation' | 'shippingAddress' | 'billingAddress', StructuredListItem[]>;\n\nexport const PaymentLinkTabs = ({ paymentLink }: PaymentLinkTabsProps) => {\n    const { i18n } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting();\n\n    const isAddressRedacted = useCallback((address: IPaymentLinkShopperAddress) => {\n        return Object.values(address).some(value => value === BACKEND_REDACTED_DATA_MARKER);\n    }, []);\n\n    const listItems = useMemo<ListItems>(() => {\n        const linkType = paymentLink.linkInformation.linkType;\n        const items: ListItems = {\n            linkInformation: [\n                {\n                    key: 'payByLink.details.fields.paymentLinkId',\n                    value: paymentLink.linkInformation.paymentLinkId,\n                    config: { isCopyable: true, linkUrl: paymentLink.linkInformation.paymentLink },\n                },\n                {\n                    key: 'payByLink.details.fields.store',\n                    value: paymentLink.linkInformation.storeCode,\n                },\n                {\n                    key: 'payByLink.details.fields.merchantReference',\n                    value: paymentLink.linkInformation.merchantReference,\n                },\n                {\n                    key: 'payByLink.details.fields.createdOn',\n                    value: dateFormat(paymentLink.linkInformation.creationDate, DATE_FORMAT_PAYMENT_LINK_DETAILS_TABS),\n                },\n                {\n                    key: 'payByLink.details.fields.expiresOn',\n                    value: dateFormat(paymentLink.linkInformation.expirationDate, DATE_FORMAT_PAYMENT_LINK_DETAILS_TABS),\n                },\n                {\n                    key: 'payByLink.details.fields.linkType',\n                    value: i18n.has(`payByLink.common.linkType.${linkType}`) ? i18n.get(`payByLink.common.linkType.${linkType}`) : linkType,\n                },\n                {\n                    key: 'payByLink.details.fields.description',\n                    value: paymentLink.linkInformation.description,\n                },\n            ],\n            shopperInformation: [\n                {\n                    key: 'payByLink.details.fields.shopper.reference',\n                    value: paymentLink.shopperInformation?.shopperReference,\n                },\n                {\n                    key: 'payByLink.details.fields.shopper.fullName',\n                    value: [paymentLink.shopperInformation?.shopperName?.firstName, paymentLink.shopperInformation?.shopperName?.lastName]\n                        .filter(Boolean)\n                        .join(' '),\n                    config: { isCopyable: true },\n                },\n                {\n                    key: 'payByLink.details.fields.shopper.email',\n                    value: paymentLink.shopperInformation?.shopperEmail,\n                    config: { isCopyable: true },\n                },\n                {\n                    key: 'payByLink.details.fields.shopper.phone',\n                    value: paymentLink.shopperInformation?.telephoneNumber,\n                    config: { isCopyable: true },\n                },\n                {\n                    key: 'payByLink.details.fields.shopper.country',\n                    value: paymentLink.shopperInformation?.shopperCountry,\n                },\n                ...(paymentLink.shopperInformation?.shippingAddress && isAddressRedacted(paymentLink.shopperInformation?.shippingAddress)\n                    ? [\n                          {\n                              key: 'payByLink.details.fields.shippingAddress.title' as TranslationKey,\n                              value: FRONTEND_REDACTED_DATA_MARKER,\n                          },\n                      ]\n                    : []),\n                ...(paymentLink.shopperInformation?.billingAddress && isAddressRedacted(paymentLink.shopperInformation?.billingAddress)\n                    ? [\n                          {\n                              key: 'payByLink.details.fields.billingAddress.title' as TranslationKey,\n                              value: FRONTEND_REDACTED_DATA_MARKER,\n                          },\n                      ]\n                    : []),\n            ],\n            shippingAddress:\n                !paymentLink.shopperInformation?.shippingAddress || isAddressRedacted(paymentLink.shopperInformation?.shippingAddress)\n                    ? []\n                    : [\n                          {\n                              key: 'payByLink.details.fields.shippingAddress.street',\n                              value: paymentLink.shopperInformation?.shippingAddress?.street,\n                              config: { isCopyable: true },\n                          },\n                          {\n                              key: 'payByLink.details.fields.shippingAddress.houseNumberOrName',\n                              value: paymentLink.shopperInformation?.shippingAddress?.houseNumberOrName,\n                              config: { isCopyable: true },\n                          },\n                          {\n                              key: 'payByLink.details.fields.shippingAddress.country',\n                              value: paymentLink.shopperInformation?.shippingAddress?.country,\n                          },\n                          {\n                              key: 'payByLink.details.fields.shippingAddress.city',\n                              value: paymentLink.shopperInformation?.shippingAddress?.city,\n                              config: { isCopyable: true },\n                          },\n                          {\n                              key: 'payByLink.details.fields.shippingAddress.postalCode',\n                              value: paymentLink.shopperInformation?.shippingAddress?.postalCode,\n                              config: { isCopyable: true },\n                          },\n                      ],\n            billingAddress:\n                !paymentLink.shopperInformation?.billingAddress || isAddressRedacted(paymentLink.shopperInformation?.billingAddress)\n                    ? []\n                    : [\n                          {\n                              key: 'payByLink.details.fields.billingAddress.street',\n                              value: paymentLink.shopperInformation?.billingAddress?.street,\n                              config: { isCopyable: true },\n                          },\n                          {\n                              key: 'payByLink.details.fields.billingAddress.houseNumberOrName',\n                              value: paymentLink.shopperInformation?.billingAddress?.houseNumberOrName,\n                              config: { isCopyable: true },\n                          },\n                          {\n                              key: 'payByLink.details.fields.billingAddress.country',\n                              value: paymentLink.shopperInformation?.billingAddress?.country,\n                          },\n                          {\n                              key: 'payByLink.details.fields.billingAddress.city',\n                              value: paymentLink.shopperInformation?.billingAddress?.city,\n                              config: { isCopyable: true },\n                          },\n                          {\n                              key: 'payByLink.details.fields.billingAddress.postalCode',\n                              value: paymentLink.shopperInformation?.billingAddress?.postalCode,\n                              config: { isCopyable: true },\n                          },\n                      ],\n        };\n\n        // Filter out items with empty values from each group\n        return Object.fromEntries(\n            Object.entries(items).map(([category, categoryItems]) => [\n                category,\n                categoryItems.filter(item => item.value != null && item.value !== '' && item.value !== undefined),\n            ])\n        ) as ListItems;\n    }, [paymentLink, dateFormat, i18n, isAddressRedacted]);\n\n    const renderListItemLabel = useCallback((label: string) => <div className={CLASSNAMES.listLabel}>{label}</div>, []);\n    const renderListItemValue = useCallback((value: ListValue, key: TranslationKey, type: StructuredListItemType | undefined, config: any) => {\n        let transformedValue;\n        if (value && value.toString().includes(BACKEND_REDACTED_DATA_MARKER)) {\n            transformedValue = FRONTEND_REDACTED_DATA_MARKER;\n        } else if (config?.isCopyable && value && value !== '') {\n            const visibleText = config?.linkUrl ? (\n                <Link href={config.linkUrl} target=\"_blank\">\n                    {value.toString()}\n                </Link>\n            ) : undefined;\n            transformedValue = <CopyText textToCopy={value.toString()} visibleText={visibleText} type={'Default'} />;\n        } else {\n            transformedValue = value;\n        }\n\n        return <div className={CLASSNAMES.listValue}>{transformedValue}</div>;\n    }, []);\n\n    const tabs = useMemo<TabProps<string>[]>(\n        () =>\n            [\n                {\n                    id: 'linkInformation',\n                    label: 'payByLink.details.tabs.linkInformation',\n                    content: (\n                        <StructuredList\n                            classNames={CLASSNAMES.list}\n                            items={listItems.linkInformation}\n                            align=\"start\"\n                            layout=\"4-8\"\n                            renderLabel={renderListItemLabel}\n                            renderValue={renderListItemValue}\n                        />\n                    ),\n                },\n                {\n                    id: 'shopperInformation',\n                    label: 'payByLink.details.tabs.shopperInformation',\n                    content: (\n                        <>\n                            <StructuredList\n                                classNames={CLASSNAMES.list}\n                                items={listItems.shopperInformation}\n                                align=\"start\"\n                                layout=\"4-8\"\n                                renderLabel={renderListItemLabel}\n                                renderValue={renderListItemValue}\n                            />\n\n                            {listItems.shippingAddress.length > 0 && (\n                                <>\n                                    <Typography variant={TypographyVariant.CAPTION} stronger className={CLASSNAMES.listHeading}>\n                                        {i18n.get('payByLink.details.fields.shippingAddress.title')}\n                                    </Typography>\n                                    <StructuredList\n                                        classNames={CLASSNAMES.list}\n                                        items={listItems.shippingAddress}\n                                        align=\"start\"\n                                        layout=\"4-8\"\n                                        renderLabel={renderListItemLabel}\n                                        renderValue={renderListItemValue}\n                                    />\n                                </>\n                            )}\n\n                            {listItems.billingAddress.length > 0 && (\n                                <>\n                                    <Typography variant={TypographyVariant.CAPTION} stronger className={CLASSNAMES.listHeading}>\n                                        {i18n.get('payByLink.details.fields.billingAddress.title')}\n                                    </Typography>\n                                    <StructuredList\n                                        classNames={CLASSNAMES.list}\n                                        items={listItems.billingAddress}\n                                        align=\"start\"\n                                        layout=\"4-8\"\n                                        renderLabel={renderListItemLabel}\n                                        renderValue={renderListItemValue}\n                                    />\n                                </>\n                            )}\n                        </>\n                    ),\n                },\n                {\n                    id: 'activity',\n                    label: 'payByLink.details.tabs.activity',\n                    content: <PaymentLinkActivity activities={paymentLink.paymentLinkActivities ?? []} />,\n                },\n            ] as TabProps<string>[],\n        [listItems, renderListItemLabel, renderListItemValue, i18n, paymentLink.paymentLinkActivities]\n    );\n\n    return (\n        <div className={CLASSNAMES.root}>\n            <Tabs tabs={tabs} />\n        </div>\n    );\n};\n","import { useCallback, useMemo } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { IPaymentLinkDetails } from '../../../../../types';\nimport ButtonActions from '../../../../../components/internal/Button/ButtonActions/ButtonActions';\nimport useMutation from '../../../../../hooks/useMutation/useMutation';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport { useModalContext } from '../../../../internal/Modal/Modal';\nimport { ButtonActionsList } from '../../../../internal/Button/ButtonActions/types';\nimport './PaymentLinkExpiration.scss';\nimport Alert from '../../../../internal/Alert/Alert';\nimport { AlertTypeOption } from '../../../../internal/Alert/types';\n\nconst CLASSNAMES = {\n    root: 'adyen-pe-payment-link-expiration',\n    title: 'adyen-pe-payment-link-expiration__title',\n};\n\ntype PaymentLinkExpirationProps = {\n    paymentLink: IPaymentLinkDetails;\n    onCancel: () => void;\n    onExpirationSuccess: () => void;\n};\n\nexport const PaymentLinkExpiration = ({ paymentLink, onCancel, onExpirationSuccess }: PaymentLinkExpirationProps) => {\n    const { i18n } = useCoreContext();\n    const { withinModal } = useModalContext();\n    const titleEl = withinModal ? TypographyElement.H2 : TypographyElement.DIV;\n\n    const { expirePayByLinkPaymentLink } = useConfigContext().endpoints;\n    const expirePaymentLinkMutation = useMutation({\n        queryFn: expirePayByLinkPaymentLink,\n        options: {\n            onSuccess: onExpirationSuccess,\n        },\n    });\n\n    const handleConfirmExpire = useCallback(\n        () => expirePaymentLinkMutation.mutate(EMPTY_OBJECT, { path: { paymentLinkId: paymentLink.linkInformation.paymentLinkId } }),\n        [expirePaymentLinkMutation, paymentLink.linkInformation.paymentLinkId]\n    );\n\n    const actionButtons: ButtonActionsList = useMemo(\n        () => [\n            {\n                title: i18n.get('payByLink.details.expiration.actions.confirmExpiration'),\n                event: handleConfirmExpire,\n                variant: ButtonVariant.PRIMARY,\n                disabled: expirePaymentLinkMutation.isLoading,\n                state: expirePaymentLinkMutation.isLoading ? 'loading' : 'default',\n            },\n            {\n                title: i18n.get('payByLink.details.expiration.actions.goBack'),\n                event: onCancel,\n                variant: ButtonVariant.SECONDARY,\n                disabled: expirePaymentLinkMutation.isLoading,\n            },\n        ],\n        [expirePaymentLinkMutation.isLoading, handleConfirmExpire, i18n, onCancel]\n    );\n\n    return (\n        <div className={CLASSNAMES.root}>\n            <Typography el={titleEl} variant={TypographyVariant.SUBTITLE} stronger>\n                {i18n.get('payByLink.details.expiration.title')}\n            </Typography>\n            <Typography variant={TypographyVariant.BODY}>{i18n.get('payByLink.details.expiration.description')}</Typography>\n            {expirePaymentLinkMutation.error && (\n                <Alert\n                    type={AlertTypeOption.CRITICAL}\n                    title={i18n.get('payByLink.details.expiration.errorTitle')}\n                    description={i18n.get('payByLink.details.expiration.errorDescription')}\n                />\n            )}\n            <ButtonActions actions={actionButtons} />\n        </div>\n    );\n};\n","import './PaymentLinkSkeleton.scss';\n\nconst CLASSNAMES = {\n    root: 'adyen-pe-payment-link-skeleton',\n    summaryContainer: 'adyen-pe-payment-link-skeleton__summary-container',\n    status: 'adyen-pe-payment-link-skeleton__status',\n    amount: 'adyen-pe-payment-link-skeleton__amount',\n    expirationDate: 'adyen-pe-payment-link-skeleton__expiration-date',\n    tabsContainer: 'adyen-pe-payment-link-skeleton__tabs-container',\n    tabLabelsContainer: 'adyen-pe-payment-link-skeleton__tab-labels-container',\n    tabLabel: 'adyen-pe-payment-link-skeleton__tab-label',\n    fieldsContainer: 'adyen-pe-payment-link-skeleton__fields-container',\n    fieldContainer: 'adyen-pe-payment-link-skeleton__field-container',\n    fieldLabel: 'adyen-pe-payment-link-skeleton__field-label',\n    fieldValue: 'adyen-pe-payment-link-skeleton__field-value',\n};\n\nexport const PaymentLinkSkeleton = () => {\n    return (\n        <div className={CLASSNAMES.root}>\n            <div className={CLASSNAMES.summaryContainer}>\n                <div className={CLASSNAMES.status}></div>\n                <div className={CLASSNAMES.amount}></div>\n                <div className={CLASSNAMES.expirationDate}></div>\n            </div>\n            <div className={CLASSNAMES.tabsContainer}>\n                <div className={CLASSNAMES.tabLabelsContainer}>\n                    {[...Array(3)].map((_, index) => (\n                        <div key={index} className={CLASSNAMES.tabLabel}></div>\n                    ))}\n                </div>\n                <div className={CLASSNAMES.fieldsContainer}>\n                    {[...Array(6)].map((_, index) => (\n                        <div key={index} className={CLASSNAMES.fieldContainer}>\n                            <div className={CLASSNAMES.fieldLabel}></div>\n                            <div className={CLASSNAMES.fieldValue}></div>\n                        </div>\n                    ))}\n                </div>\n            </div>\n        </div>\n    );\n};\n","import AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { TranslationKey } from '../../../../../translations';\nimport { ErrorMessage, UNDEFINED_ERROR } from '../../../../utils/getCommonErrorCode';\nimport CopyText from '../../../../internal/CopyText/CopyText';\n\nexport const getPaymentLinkErrorMessage = (\n    error: AdyenPlatformExperienceError,\n    errorMessage: TranslationKey,\n    onContactSupport?: () => void\n): ErrorMessage => {\n    if (!error) return UNDEFINED_ERROR;\n\n    switch (error.errorCode) {\n        case undefined:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: [errorMessage, 'common.errors.retry'],\n                refreshComponent: true,\n            };\n        case '500': {\n            const secondaryErrorMessage = onContactSupport ? 'common.errors.errorCode' : 'common.errors.errorCodeSupport';\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: [errorMessage, secondaryErrorMessage],\n                translationValues: {\n                    [secondaryErrorMessage]: error.requestId ? (\n                        <CopyText isUnderlineVisible copyButtonAriaLabelKey=\"common.actions.copy.labels.errorCode\" textToCopy={error.requestId} />\n                    ) : null,\n                },\n                onContactSupport,\n            };\n        }\n        default:\n            return UNDEFINED_ERROR;\n    }\n};\n","import useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { ErrorMessageDisplay } from '../../../../internal/ErrorMessageDisplay/ErrorMessageDisplay';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport Button from '../../../../internal/Button/Button';\nimport { getPaymentLinkErrorMessage } from './getPaymentLinkErrorMessage';\n\ntype PaymentLinkErrorProps = {\n    error?: AdyenPlatformExperienceError;\n    onContactSupport?: () => void;\n    onDismiss?: () => void;\n};\n\nexport const PaymentLinkError = ({ error, onContactSupport, onDismiss }: PaymentLinkErrorProps) => {\n    const { i18n } = useCoreContext();\n\n    const renderBackButton = useCallback(() => {\n        return (\n            <Button variant={ButtonVariant.SECONDARY} onClick={onDismiss}>\n                {i18n.get('payByLink.common.actions.goBack')}\n            </Button>\n        );\n    }, [i18n, onDismiss]);\n\n    const errorProps = useMemo(\n        () => getPaymentLinkErrorMessage(error as AdyenPlatformExperienceError, 'payByLink.details.errors.unavailable', onContactSupport),\n        [error, onContactSupport]\n    );\n\n    return (\n        <ErrorMessageDisplay\n            renderSecondaryButton={onDismiss ? renderBackButton : undefined}\n            withImage\n            outlined={false}\n            absolutePosition={false}\n            withBackground={false}\n            {...errorProps}\n        />\n    );\n};\n","import cx from 'classnames';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport ButtonActions from '../../../../../components/internal/Button/ButtonActions/ButtonActions';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { useFetch } from '../../../../../hooks/useFetch';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport Header from '../../../../../components/internal/Header';\nimport { PaymentLinkDetailsProps as PaymentLinkDetailsElementProps } from '../../types';\nimport { ExternalUIComponentProps } from 'src/components/types';\nimport { useModalContext } from '../../../../internal/Modal/Modal';\nimport { PaymentLinkSummary } from '../PaymentLinkSummary/PaymentLinkSummary';\nimport { PaymentLinkTabs } from '../PaymentLinkTabs/PaymentLinkTabs';\nimport { ButtonActionsList } from '../../../../internal/Button/ButtonActions/types';\nimport { PaymentLinkExpiration } from '../PaymentLinkExpiration/PaymentLinkExpiration';\nimport './PaymentLinkDetails.scss';\nimport { PaymentLinkSkeleton } from '../PaymentLinkSkeleton/PaymentLinkSkeleton';\nimport { PaymentLinkError } from '../PaymentLinkError/PaymentLinkError';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport Icon from '../../../../internal/Icon';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyVariant } from '../../../../internal/Typography/types';\n\nconst CLASSNAMES = {\n    root: 'adyen-pe-payment-link-details',\n    content: 'adyen-pe-payment-link-details__content',\n    expirationSuccessContainer: 'adyen-pe-payment-link-details__expiration-success-container',\n    expirationSuccessIcon: 'adyen-pe-payment-link-details__expiration-success-icon',\n};\n\ntype PaymentLinkDetailsProps = ExternalUIComponentProps<PaymentLinkDetailsElementProps> & {\n    isDismissButtonHidden?: boolean;\n};\n\nexport const PaymentLinkDetails = ({ id, onUpdate, hideTitle, onContactSupport, onDismiss, isDismissButtonHidden }: PaymentLinkDetailsProps) => {\n    const { i18n, getCdnDataset } = useCoreContext();\n    const { getPayByLinkPaymentLinkById } = useConfigContext().endpoints;\n    const {\n        data: paymentLinkData,\n        isFetching: isFetchingPaymentLinkData,\n        error: paymentLinkDataError,\n        refetch,\n    } = useFetch(\n        useMemo(\n            () => ({\n                fetchOptions: {\n                    enabled: !!id && !!getPayByLinkPaymentLinkById,\n                },\n                queryFn: async () => {\n                    return getPayByLinkPaymentLinkById!(EMPTY_OBJECT, {\n                        path: {\n                            paymentLinkId: id,\n                        },\n                    });\n                },\n            }),\n            [getPayByLinkPaymentLinkById, id]\n        )\n    );\n\n    const { data: countries, isFetching: isFetchingCountries } = useFetch({\n        queryFn: useCallback(async () => {\n            const fileName = `${i18n.locale ?? 'en-US'}`;\n            if (getCdnDataset) {\n                return (\n                    (await getCdnDataset<Array<{ id: string; name: string }>>({\n                        name: fileName,\n                        extension: 'json',\n                        subFolder: 'countries',\n                        fallback: [] as Array<{ id: string; name: string }>,\n                    })) ?? []\n                );\n            }\n            return [] as Array<{ id: string; name: string }>;\n        }, [getCdnDataset, i18n.locale]),\n    });\n\n    const getCountryName = useCallback(\n        (countryCode: string) => {\n            const country = countries?.find(country => country.id === countryCode);\n            return country?.name || countryCode;\n        },\n        [countries]\n    );\n\n    const isFetching = isFetchingPaymentLinkData || isFetchingCountries;\n    const paymentLink = useMemo(\n        () =>\n            paymentLinkData && {\n                ...paymentLinkData,\n                ...(paymentLinkData.shopperInformation\n                    ? {\n                          shopperInformation: {\n                              ...paymentLinkData?.shopperInformation,\n                              ...(paymentLinkData?.shopperInformation?.shopperCountry\n                                  ? {\n                                        shopperCountry:\n                                            paymentLinkData?.shopperInformation?.shopperCountry &&\n                                            getCountryName(paymentLinkData?.shopperInformation.shopperCountry),\n                                    }\n                                  : {}),\n                              ...(paymentLinkData?.shopperInformation?.billingAddress\n                                  ? {\n                                        billingAddress: paymentLinkData?.shopperInformation?.billingAddress && {\n                                            ...paymentLinkData?.shopperInformation.billingAddress,\n                                            country:\n                                                paymentLinkData?.shopperInformation?.billingAddress?.country &&\n                                                getCountryName(paymentLinkData?.shopperInformation.billingAddress.country),\n                                        },\n                                    }\n                                  : {}),\n                              ...(paymentLinkData?.shopperInformation?.shippingAddress\n                                  ? {\n                                        shippingAddress: paymentLinkData?.shopperInformation?.shippingAddress && {\n                                            ...paymentLinkData?.shopperInformation.shippingAddress,\n                                            country:\n                                                paymentLinkData?.shopperInformation?.shippingAddress?.country &&\n                                                getCountryName(paymentLinkData?.shopperInformation.shippingAddress.country),\n                                        },\n                                    }\n                                  : {}),\n                          },\n                      }\n                    : {}),\n            },\n        [paymentLinkData, getCountryName]\n    );\n    const [activeScreen, setActiveScreen] = useState<'details' | 'expirationConfirmation' | 'expirationSuccess'>('details');\n    const [isCopiedIndicatorVisible, setCopiedIndicatorVisible] = useState(false);\n\n    useEffect(() => {\n        let timeout: ReturnType<typeof setTimeout> | undefined;\n        if (isCopiedIndicatorVisible) {\n            timeout = setTimeout(() => setCopiedIndicatorVisible(false), 3000);\n        }\n\n        return () => clearTimeout(timeout);\n    }, [isCopiedIndicatorVisible]);\n\n    const handleCopyLink = useCallback(async () => {\n        if (!paymentLink) return;\n\n        try {\n            await navigator.clipboard.writeText(paymentLink.linkInformation.paymentLink);\n            setCopiedIndicatorVisible(true);\n        } catch (error) {\n            console.error('Failed to copy link:', error);\n        }\n    }, [paymentLink]);\n\n    const handleExpireNow = useCallback(() => {\n        setActiveScreen('expirationConfirmation');\n    }, []);\n\n    const handleExpirationSuccess = useCallback(() => {\n        setActiveScreen('expirationSuccess');\n        onUpdate?.();\n    }, [onUpdate]);\n\n    const handleNavigationToDetailsAfterExpiration = useCallback(() => {\n        setActiveScreen('details');\n        refetch();\n    }, [refetch]);\n\n    const handleNavigationToListAfterExpiration = useCallback(() => {\n        onDismiss?.();\n    }, [onDismiss]);\n\n    const { withinModal } = useModalContext();\n\n    const renderContent = useCallback(() => {\n        if (isFetching) {\n            return <PaymentLinkSkeleton />;\n        }\n\n        if (!paymentLink || paymentLinkDataError) {\n            return (\n                <PaymentLinkError\n                    error={paymentLinkDataError as AdyenPlatformExperienceError}\n                    onDismiss={onDismiss}\n                    onContactSupport={onContactSupport}\n                />\n            );\n        }\n\n        if (activeScreen === 'expirationConfirmation') {\n            return (\n                <PaymentLinkExpiration\n                    paymentLink={paymentLink}\n                    onCancel={() => setActiveScreen('details')}\n                    onExpirationSuccess={handleExpirationSuccess}\n                />\n            );\n        }\n\n        if (activeScreen === 'expirationSuccess') {\n            const actionButtons: ButtonActionsList = [\n                ...(onDismiss\n                    ? [\n                          {\n                              title: i18n.get('payByLink.details.expirationSuccess.actions.goBackToList'),\n                              event: handleNavigationToListAfterExpiration,\n                              variant: ButtonVariant.SECONDARY,\n                          },\n                      ]\n                    : []),\n                {\n                    title: i18n.get('payByLink.details.expirationSuccess.actions.showDetails'),\n                    event: handleNavigationToDetailsAfterExpiration,\n                    variant: ButtonVariant.SECONDARY,\n                },\n            ];\n            return (\n                <div className={CLASSNAMES.expirationSuccessContainer}>\n                    <Icon name=\"checkmark-circle-fill\" className={CLASSNAMES.expirationSuccessIcon} />\n                    <Typography variant={TypographyVariant.TITLE}>{i18n.get('payByLink.details.expirationSuccess.title')}</Typography>\n                    <Typography variant={TypographyVariant.BODY}>{i18n.get('payByLink.details.expirationSuccess.description')}</Typography>\n                    <ButtonActions actions={actionButtons} />\n                </div>\n            );\n        }\n\n        if (activeScreen === 'details') {\n            const actionButtons: ButtonActionsList = [\n                {\n                    title: i18n.get(isCopiedIndicatorVisible ? 'payByLink.details.actions.copied' : 'payByLink.details.actions.copyLink'),\n                    event: handleCopyLink,\n                    variant: ButtonVariant.PRIMARY,\n                    iconLeft: (\n                        <Icon\n                            className=\"adyen-pe-payment-link-creation-form-success__button-icon\"\n                            name={isCopiedIndicatorVisible ? 'checkmark' : 'copy'}\n                        />\n                    ),\n                },\n                ...(paymentLink.linkInformation.status !== 'expired' && paymentLink.linkInformation.status !== 'completed'\n                    ? [\n                          {\n                              title: i18n.get('payByLink.details.actions.expire'),\n                              event: handleExpireNow,\n                              variant: ButtonVariant.SECONDARY,\n                          },\n                      ]\n                    : []),\n                ...(!isDismissButtonHidden && onDismiss\n                    ? [\n                          {\n                              title: i18n.get('payByLink.common.actions.goBack'),\n                              event: onDismiss,\n                              variant: ButtonVariant.SECONDARY,\n                          },\n                      ]\n                    : []),\n            ];\n\n            return (\n                <>\n                    <PaymentLinkSummary paymentLink={paymentLink} />\n                    <PaymentLinkTabs paymentLink={paymentLink} />\n                    <ButtonActions actions={actionButtons} />\n                </>\n            );\n        }\n    }, [\n        isFetching,\n        paymentLink,\n        paymentLinkDataError,\n        activeScreen,\n        onDismiss,\n        onContactSupport,\n        handleExpirationSuccess,\n        i18n,\n        handleNavigationToListAfterExpiration,\n        handleNavigationToDetailsAfterExpiration,\n        isCopiedIndicatorVisible,\n        handleCopyLink,\n        handleExpireNow,\n        isDismissButtonHidden,\n    ]);\n\n    return (\n        <div className={CLASSNAMES.root}>\n            <div className={cx({ ['adyen-pe-visually-hidden']: activeScreen !== 'details' })}>\n                <Header hideTitle={hideTitle} forwardedToRoot={!withinModal} titleKey={'payByLink.details.title'} />\n            </div>\n            <div className={CLASSNAMES.content}>{renderContent()}</div>\n        </div>\n    );\n};\n","import { useCallback, useState } from 'preact/hooks';\nimport { FC, PropsWithChildren } from 'preact/compat';\nimport Modal from '../../../../internal/Modal';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport useModalDetails from '../../../../../hooks/useModalDetails';\nimport { PaymentLinkDetails } from '../../../PaymentLinkDetails/components/PaymentLinkDetails/PaymentLinkDetails';\n\nexport interface PaymentLinkDetailsModalProps {\n    onUpdate: () => void;\n    selectedDetail: ReturnType<typeof useModalDetails>['selectedDetail'];\n    resetDetails: ReturnType<typeof useModalDetails>['resetDetails'];\n}\n\nexport const PaymentLinkDetailsModal: FC<PaymentLinkDetailsModalProps> = ({\n    children,\n    selectedDetail,\n    resetDetails,\n    onUpdate,\n}: PropsWithChildren<PaymentLinkDetailsModalProps>) => {\n    const { i18n } = useCoreContext();\n    const [isPaymentLinkUpdated, setIsPaymentLinkUpdated] = useState(false);\n    const isModalOpen = !!selectedDetail;\n\n    const handleDismiss = useCallback(() => {\n        if (isPaymentLinkUpdated) {\n            setIsPaymentLinkUpdated(false);\n            onUpdate();\n        }\n        resetDetails();\n    }, [isPaymentLinkUpdated, onUpdate, resetDetails]);\n\n    const handlePaymentLinkUpdate = useCallback(() => {\n        setIsPaymentLinkUpdated(true);\n    }, []);\n\n    return (\n        <div>\n            {children}\n            {selectedDetail && (\n                <Modal\n                    isOpen={isModalOpen}\n                    aria-label={i18n.get('payByLink.details.title')}\n                    onClose={handleDismiss}\n                    isDismissible={true}\n                    headerWithBorder={false}\n                    size={selectedDetail.modalSize || 'large'}\n                >\n                    <PaymentLinkDetails\n                        id={selectedDetail.selection.data}\n                        onUpdate={handlePaymentLinkUpdate}\n                        onDismiss={handleDismiss}\n                        hideTitle\n                        isDismissButtonHidden\n                    />\n                </Modal>\n            )}\n        </div>\n    );\n};\n","import { forwardRef } from 'preact/compat';\nimport cx from 'classnames';\nimport { StepProps } from './types';\nimport Icon from '../Icon';\nimport Typography from '../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\n\nconst DefaultRenderStep = ({ completed, index }: { completed: boolean; index: number }) => {\n    if (completed) {\n        return <Icon name=\"checkmark-circle-fill\" />;\n    }\n    return <span className=\"adyen-pe-step__number\">{index + 1}</span>;\n};\n\nexport const Step = forwardRef<HTMLButtonElement, StepProps>(({ index, active, completed, disabled, onClick, children, totalSteps }, ref) => {\n    return (\n        <li\n            className={cx('adyen-pe-step__item', {\n                'adyen-pe-step--active': active,\n                'adyen-pe-step--completed': completed,\n                'adyen-pe-step--disabled': disabled,\n            })}\n        >\n            <button\n                aria-disabled={disabled}\n                aria-current={active ? 'step' : undefined}\n                tabIndex={active ? 0 : -1}\n                ref={ref}\n                type=\"button\"\n                className=\"adyen-pe-step__button\"\n                onClick={onClick}\n                disabled={disabled}\n            >\n                <div className=\"adyen-pe-step__icon\" aria-hidden=\"true\">\n                    <DefaultRenderStep completed={completed} index={index} />\n                </div>\n                <Typography variant={TypographyVariant.BODY} el={TypographyElement.SPAN} className=\"adyen-pe-step__label\">\n                    {children}\n                </Typography>\n            </button>\n        </li>\n    );\n});\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport cx from 'classnames';\nimport { InteractionKeyCode } from '../../types';\nimport { StepperProps } from './types';\nimport { Step } from './Step';\nimport './Stepper.scss';\n\nexport const Stepper = ({ activeIndex, onChange, variant = 'vertical', children, nextStepDisabled, ariaLabel }: StepperProps) => {\n    const [latestActiveStep, setLatestActiveStep] = useState(activeIndex);\n    const listRef = useRef<HTMLOListElement>(null);\n    const stepRefs = useRef<(HTMLButtonElement | null)[]>([]);\n    const [focusedStep, setFocusedStep] = useState(activeIndex);\n\n    const steps = useMemo(() => {\n        const childrenArray = Array.isArray(children) ? children : [children];\n        return childrenArray.filter(Boolean);\n    }, [children]);\n\n    const totalSteps = steps.length;\n    const isHorizontal = variant === 'horizontal';\n\n    useEffect(() => {\n        if (activeIndex > latestActiveStep) {\n            setLatestActiveStep(activeIndex);\n        }\n\n        // Scroll parent container to show active step\n        const stepElement = stepRefs.current[activeIndex];\n        const container = listRef.current;\n        if (stepElement && container) {\n            if (isHorizontal) {\n                const scrollLeft = stepElement.offsetLeft - container.offsetLeft;\n                container.scrollTo({ left: scrollLeft, behavior: 'smooth' });\n            } else {\n                const scrollTop = stepElement.offsetTop - container.offsetTop;\n                container.scrollTo({ top: scrollTop, behavior: 'smooth' });\n            }\n        }\n    }, [activeIndex, latestActiveStep]);\n\n    const canActivate = useCallback(\n        (nextIndex: number) => {\n            if (nextStepDisabled && nextIndex > latestActiveStep) return false;\n            return nextIndex <= latestActiveStep + 1;\n        },\n        [latestActiveStep, nextStepDisabled]\n    );\n\n    const handleStepClick = useCallback(\n        (stepIndex: number) => {\n            if (canActivate(stepIndex)) {\n                setFocusedStep(stepIndex);\n                onChange(stepIndex);\n            }\n        },\n        [canActivate, onChange]\n    );\n\n    const focusStep = useCallback((stepIndex: number) => {\n        setFocusedStep(stepIndex);\n        const stepElement = stepRefs.current[stepIndex];\n        if (stepElement) {\n            stepElement.focus();\n        }\n    }, []);\n\n    const focusNext = useCallback(() => {\n        const nextIndex = Math.min(focusedStep + 1, totalSteps - 1);\n        if (canActivate(nextIndex)) {\n            focusStep(nextIndex);\n        }\n    }, [canActivate, focusStep, focusedStep, totalSteps]);\n\n    const focusPrev = useCallback(() => {\n        const prevIndex = Math.max(focusedStep - 1, 0);\n        focusStep(prevIndex);\n    }, [focusStep, focusedStep]);\n\n    const activateFocused = useCallback(() => {\n        const focusedElement = document.activeElement as HTMLButtonElement;\n        const stepIndex = stepRefs.current.indexOf(focusedElement);\n        if (stepIndex !== -1 && canActivate(stepIndex)) {\n            onChange(stepIndex);\n        }\n    }, [canActivate, onChange]);\n\n    const handleKeyDown = useCallback(\n        (event: KeyboardEvent) => {\n            switch (event.code) {\n                case InteractionKeyCode.ARROW_RIGHT:\n                    if (isHorizontal) {\n                        event.preventDefault();\n                        focusNext();\n                    }\n                    break;\n                case InteractionKeyCode.ARROW_LEFT:\n                    if (isHorizontal) {\n                        event.preventDefault();\n                        focusPrev();\n                    }\n                    break;\n                case InteractionKeyCode.ARROW_DOWN:\n                    if (!isHorizontal) {\n                        event.preventDefault();\n                        focusNext();\n                    }\n                    break;\n                case InteractionKeyCode.ARROW_UP:\n                    if (!isHorizontal) {\n                        event.preventDefault();\n                        focusPrev();\n                    }\n                    break;\n                case InteractionKeyCode.TAB:\n                    setFocusedStep(activeIndex);\n                    break;\n                case InteractionKeyCode.ENTER:\n                case InteractionKeyCode.SPACE:\n                    event.preventDefault();\n                    activateFocused();\n                    break;\n            }\n        },\n        [isHorizontal, activeIndex, activateFocused, focusNext, focusPrev]\n    );\n\n    return (\n        <div className=\"adyen-pe-stepper\">\n            <ol\n                aria-label={ariaLabel}\n                ref={listRef}\n                role=\"toolbar\"\n                aria-orientation={variant}\n                className={cx('adyen-pe-stepper__list', {\n                    'adyen-pe-stepper__list--horizontal': isHorizontal,\n                })}\n                onKeyDown={handleKeyDown}\n            >\n                {steps.map((step, stepIndex) => (\n                    <Step\n                        totalSteps={totalSteps}\n                        key={stepIndex}\n                        index={stepIndex}\n                        active={stepIndex === activeIndex}\n                        completed={stepIndex < activeIndex}\n                        disabled={!canActivate(stepIndex)}\n                        onClick={() => handleStepClick(stepIndex)}\n                        ref={(el: HTMLButtonElement | null) => {\n                            if (el) {\n                                stepRefs.current[stepIndex] = el;\n                            }\n                        }}\n                    >\n                        {/* Warning: Nested children without a wrapper may cause the first element to be skipped.\n                        Use <></> or a plain <div> as a wrapper for multiple children elements. */}\n                        {step.props?.children || step}\n                    </Step>\n                ))}\n            </ol>\n        </div>\n    );\n};\n","import { createContext, ComponentChildren } from 'preact';\nimport { useContext } from 'preact/hooks';\nimport { WizardFormContextValue } from './types';\n\nconst WizardFormContext = createContext<WizardFormContextValue<any> | null>(null);\n\nexport function useWizardFormContext<TFieldValues>(): WizardFormContextValue<TFieldValues> {\n    const context = useContext(WizardFormContext);\n    if (!context) {\n        throw new Error('useWizardFormContext must be used within a WizardFormProvider');\n    }\n    return context as WizardFormContextValue<TFieldValues>;\n}\n\ninterface WizardFormProviderProps<TFieldValues> extends WizardFormContextValue<TFieldValues> {\n    children: ComponentChildren;\n}\n\nexport function WizardFormProvider<TFieldValues>({ children, ...methods }: WizardFormProviderProps<TFieldValues>) {\n    return <WizardFormContext.Provider value={methods as WizardFormContextValue<TFieldValues>}>{children}</WizardFormContext.Provider>;\n}\n\nexport { WizardFormContext };\n","import Localization, { TranslationKey } from '../../../core/Localization';\nimport { FieldValues } from '../../../hooks/form/types';\nimport { IPaymentLinkConfiguration, IPaymentLinkConfigurationElement } from '../../../types/api/models/payByLink';\nimport { PaymentLinkCreationFormValues } from './components/types';\nimport { PaymentLinkFieldsVisibilityConfig } from '../../types';\n\ninterface FormFieldConfig {\n    fieldName: FieldValues<PaymentLinkCreationFormValues>;\n    required: boolean;\n    visible: boolean;\n    includeInApiPayload: boolean;\n    readOnly?: boolean;\n    label?: TranslationKey;\n    options?: IPaymentLinkConfigurationElement['options'];\n}\n\nexport interface FormStepConfig {\n    id: string;\n    title?: string;\n    fields: FormFieldConfig[];\n    isOptional?: boolean;\n}\n\nexport const scrollToFirstErrorField = (errorFields: string[], visibilityOffset: number, scope?: ParentNode | null): void => {\n    if (errorFields.length === 0) return;\n\n    const queryScope = scope ?? document;\n\n    const errorFieldsSelector = errorFields.map(field => `[name=\"${field}\"]`).join(',');\n    const elements = queryScope.querySelectorAll<HTMLElement>(`:scope ${errorFieldsSelector}`);\n\n    const firstElement = Array.from(elements).reduce<HTMLElement | null>((topmost, el) => {\n        if (!topmost) return el;\n        return el.getBoundingClientRect().top < topmost.getBoundingClientRect().top ? el : topmost;\n    }, null);\n\n    if (!firstElement) return;\n\n    const rect = firstElement.getBoundingClientRect();\n    const isVisible = rect.top >= visibilityOffset && rect.bottom <= window.innerHeight;\n\n    if (!isVisible) {\n        firstElement.style.scrollMarginTop = `${visibilityOffset}px`;\n        firstElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n};\n\nexport const getFormSteps = ({\n    i18n,\n    getFieldConfig,\n    visibilityConfig,\n}: {\n    i18n: Localization['i18n'];\n    getFieldConfig: (field: keyof IPaymentLinkConfiguration) => IPaymentLinkConfigurationElement | undefined;\n    visibilityConfig?: PaymentLinkFieldsVisibilityConfig;\n}): ReadonlyArray<FormStepConfig> => {\n    const getFieldVisibility = (fieldName: FieldValues<PaymentLinkCreationFormValues>, isFieldInConfigResponse: boolean) => {\n        // Check for direct field config first (e.g., 'description', 'reference')\n        const configVisibility = visibilityConfig?.[fieldName as keyof typeof visibilityConfig];\n        if (typeof configVisibility === 'string') {\n            return {\n                visible: configVisibility !== 'hidden' && isFieldInConfigResponse,\n                includeInApiPayload: isFieldInConfigResponse,\n                readOnly: configVisibility === 'readOnly',\n            };\n        }\n\n        // Check for parent field config (e.g., 'amount' for 'amount.value')\n        const [parentField, childField] = fieldName.split('.') as [keyof typeof visibilityConfig, string | undefined];\n        const parentVisibility = visibilityConfig?.[parentField];\n\n        if (parentVisibility) {\n            // Parent visibility as string applies to all children (e.g., { amount: 'readOnly' })\n            if (typeof parentVisibility === 'string') {\n                return {\n                    visible: parentVisibility !== 'hidden' && isFieldInConfigResponse,\n                    includeInApiPayload: isFieldInConfigResponse,\n                    readOnly: parentVisibility === 'readOnly',\n                };\n            }\n\n            // Parent visibility as object with child config (e.g., { amount: { currency: 'readOnly' } })\n            if (childField && typeof parentVisibility === 'object') {\n                const childVisibility = (parentVisibility as Record<string, string>)[childField];\n                if (childVisibility) {\n                    // Address fields cannot be hidden individually (only readOnly) because\n                    // when any address field is filled, all address fields become required.\n                    // Hiding individual fields would prevent proper validation.\n                    // The entire address section can still be hidden at the parent level.\n                    const isAddressField = parentField === 'billingAddress' || parentField === 'deliveryAddress';\n                    const canBeHidden = !isAddressField;\n\n                    return {\n                        visible: (canBeHidden ? childVisibility !== 'hidden' : true) && isFieldInConfigResponse,\n                        includeInApiPayload: isFieldInConfigResponse,\n                        readOnly: childVisibility === 'readOnly',\n                    };\n                }\n            }\n        }\n\n        return {\n            visible: isFieldInConfigResponse,\n            includeInApiPayload: isFieldInConfigResponse,\n            readOnly: false,\n        };\n    };\n\n    return [\n        {\n            id: 'store',\n            fields: [\n                {\n                    fieldName: 'store',\n                    required: true,\n                    visible: true,\n                    includeInApiPayload: true,\n                    label: 'payByLink.creation.summary.fields.store',\n                },\n            ],\n            isOptional: false,\n        },\n        {\n            id: 'payment',\n            fields: [\n                {\n                    fieldName: 'linkValidity.quantity',\n                    required: !!getFieldConfig('linkValidity')?.required,\n                    ...getFieldVisibility('linkValidity.quantity', !!getFieldConfig('linkValidity')),\n                    label: 'payByLink.creation.summary.fields.linkValidity',\n                },\n                {\n                    fieldName: 'linkValidity.durationUnit',\n                    required: !!getFieldConfig('linkValidity')?.required,\n                    ...getFieldVisibility('linkValidity.durationUnit', !!getFieldConfig('linkValidity')),\n                },\n                {\n                    fieldName: 'amount.value',\n                    required: !!getFieldConfig('amountValue')?.required,\n                    ...getFieldVisibility('amount.value', !!getFieldConfig('amountValue')),\n                    label: 'payByLink.creation.summary.fields.amountValue',\n                },\n                {\n                    fieldName: 'amount.currency',\n                    required: !!getFieldConfig('currency')?.required,\n                    ...getFieldVisibility('amount.currency', !!getFieldConfig('currency')),\n                    label: 'payByLink.creation.summary.fields.currency',\n                    options: getFieldConfig('currency')?.options,\n                },\n                {\n                    fieldName: 'reference',\n                    required: !!getFieldConfig('merchantReference')?.required,\n                    ...getFieldVisibility('reference', !!getFieldConfig('merchantReference')),\n                    label: 'payByLink.creation.summary.fields.merchantReference',\n                },\n                {\n                    fieldName: 'linkType',\n                    required: !!getFieldConfig('linkType')?.required,\n                    ...getFieldVisibility('linkType', !!getFieldConfig('linkType')),\n                    label: 'payByLink.creation.summary.fields.linkType',\n                },\n                {\n                    fieldName: 'description',\n                    required: !!getFieldConfig('description')?.required,\n                    ...getFieldVisibility('description', !!getFieldConfig('description')),\n                    label: 'payByLink.creation.summary.fields.description',\n                },\n                {\n                    fieldName: 'deliverAt',\n                    required: !!getFieldConfig('deliveryDate')?.required,\n                    ...getFieldVisibility('deliverAt', !!getFieldConfig('deliveryDate')),\n                },\n            ],\n            isOptional: false,\n        },\n        {\n            id: 'customer',\n            fields: [\n                {\n                    fieldName: 'shopperReference',\n                    required: !!getFieldConfig('shopperReference')?.required,\n                    ...getFieldVisibility('shopperReference', !!getFieldConfig('shopperReference')),\n                    label: 'payByLink.creation.summary.fields.shopperReference',\n                },\n                {\n                    fieldName: 'shopperName.firstName',\n                    required: !!getFieldConfig('shopperName')?.required,\n                    ...getFieldVisibility('shopperName.firstName', !!getFieldConfig('shopperName')),\n                    label: 'payByLink.creation.summary.fields.shopperName',\n                },\n                {\n                    fieldName: 'shopperName.lastName',\n                    required: !!getFieldConfig('shopperName')?.required,\n                    ...getFieldVisibility('shopperName.lastName', !!getFieldConfig('shopperName')),\n                    label: 'payByLink.creation.summary.fields.shopperLastName',\n                },\n                {\n                    fieldName: 'shopperEmail',\n                    required: !!getFieldConfig('emailAddress')?.required,\n                    ...getFieldVisibility('shopperEmail', !!getFieldConfig('emailAddress')),\n                    label: 'payByLink.creation.summary.fields.emailAddress',\n                },\n                {\n                    fieldName: 'sendSuccessEmailToShopper',\n                    required: !!getFieldConfig('sendSuccessEmailToShopper')?.required,\n                    ...getFieldVisibility('sendSuccessEmailToShopper', !!getFieldConfig('sendSuccessEmailToShopper')),\n                },\n                {\n                    fieldName: 'sendLinkToShopper',\n                    required: !!getFieldConfig('sendLinkToShopper')?.required,\n                    ...getFieldVisibility('sendLinkToShopper', !!getFieldConfig('sendLinkToShopper')),\n                    label: 'payByLink.creation.summary.fields.emailAddress',\n                },\n                {\n                    fieldName: 'telephoneNumber',\n                    required: !!getFieldConfig('phoneNumber')?.required,\n                    ...getFieldVisibility('telephoneNumber', !!getFieldConfig('phoneNumber')),\n                    label: 'payByLink.creation.summary.fields.phoneNumber',\n                },\n                {\n                    fieldName: 'countryCode',\n                    required: !!getFieldConfig('countryCode')?.required,\n                    ...getFieldVisibility('countryCode', !!getFieldConfig('countryCode')),\n                    label: 'payByLink.creation.summary.fields.countryCode',\n                    options: getFieldConfig('countryCode')?.options,\n                },\n                {\n                    fieldName: 'deliveryAddress.street',\n                    required: !!getFieldConfig('deliveryAddress')?.required,\n                    ...getFieldVisibility('deliveryAddress.street', !!getFieldConfig('deliveryAddress')),\n                    label: 'payByLink.creation.summary.fields.deliveryAddress.street',\n                },\n                {\n                    fieldName: 'deliveryAddress.houseNumberOrName',\n                    required: !!getFieldConfig('deliveryAddress')?.required,\n                    ...getFieldVisibility('deliveryAddress.houseNumberOrName', !!getFieldConfig('deliveryAddress')),\n                    label: 'payByLink.creation.summary.fields.deliveryAddress.houseNumberOrName',\n                },\n                {\n                    fieldName: 'deliveryAddress.postalCode',\n                    required: !!getFieldConfig('deliveryAddress')?.required,\n                    ...getFieldVisibility('deliveryAddress.postalCode', !!getFieldConfig('deliveryAddress')),\n                    label: 'payByLink.creation.summary.fields.deliveryAddress.postalCode',\n                },\n                {\n                    fieldName: 'deliveryAddress.city',\n                    required: !!getFieldConfig('deliveryAddress')?.required,\n                    ...getFieldVisibility('deliveryAddress.city', !!getFieldConfig('deliveryAddress')),\n                    label: 'payByLink.creation.summary.fields.deliveryAddress.city',\n                },\n                {\n                    fieldName: 'deliveryAddress.country',\n                    required: !!getFieldConfig('deliveryAddress')?.required,\n                    ...getFieldVisibility('deliveryAddress.country', !!getFieldConfig('deliveryAddress')),\n                    label: 'payByLink.creation.summary.fields.deliveryAddress.country',\n                },\n                {\n                    fieldName: 'billingAddress.street',\n                    required: !!getFieldConfig('billingAddress')?.required,\n                    ...getFieldVisibility('billingAddress.street', !!getFieldConfig('billingAddress')),\n                    label: 'payByLink.creation.summary.fields.billingAddress.street',\n                },\n                {\n                    fieldName: 'billingAddress.houseNumberOrName',\n                    required: !!getFieldConfig('billingAddress')?.required,\n                    ...getFieldVisibility('billingAddress.houseNumberOrName', !!getFieldConfig('billingAddress')),\n                    label: 'payByLink.creation.summary.fields.billingAddress.houseNumberOrName',\n                },\n                {\n                    fieldName: 'billingAddress.postalCode',\n                    required: !!getFieldConfig('billingAddress')?.required,\n                    ...getFieldVisibility('billingAddress.postalCode', !!getFieldConfig('billingAddress')),\n                    label: 'payByLink.creation.summary.fields.billingAddress.postalCode',\n                },\n                {\n                    fieldName: 'billingAddress.city',\n                    required: !!getFieldConfig('billingAddress')?.required,\n                    ...getFieldVisibility('billingAddress.city', !!getFieldConfig('billingAddress')),\n                    label: 'payByLink.creation.summary.fields.billingAddress.city',\n                },\n                {\n                    fieldName: 'billingAddress.country',\n                    required: !!getFieldConfig('billingAddress')?.required,\n                    ...getFieldVisibility('billingAddress.country', !!getFieldConfig('billingAddress')),\n                    label: 'payByLink.creation.summary.fields.billingAddress.country',\n                },\n                {\n                    fieldName: 'shopperLocale',\n                    required: !!getFieldConfig('shopperLocale')?.required,\n                    ...getFieldVisibility('shopperLocale', !!getFieldConfig('shopperLocale')),\n                    options: getFieldConfig('shopperLocale')?.options,\n                },\n            ],\n            isOptional: false,\n        },\n        {\n            id: 'summary',\n            title: i18n.get('payByLink.creation.form.steps.customer'),\n            fields: [],\n            isOptional: true,\n        },\n    ];\n};\n","import { useRef, useCallback } from 'preact/hooks';\nimport { UseFormOptions, UseFormReturn, InternalFormControl, FormState, FieldValue, FieldError, ValidationRules, FieldValues } from './types';\nimport Localization from '../../core/Localization';\n\nexport function getNestedValue(obj: any, path: string): any {\n    const keys = path.split('.');\n    let result = obj;\n    for (const key of keys) {\n        if (result == null) return undefined;\n        result = result[key];\n    }\n    return result;\n}\n\nexport function setNestedValue(obj: any, path: string, value: any): void {\n    if (!path) {\n        return;\n    }\n    const keys = path.split('.');\n    const lastKey = keys.pop()!;\n    let current = obj;\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i]!;\n        if (typeof current[key] !== 'object' || current[key] === null) {\n            const nextKey = keys[i + 1];\n            // Create an array if the next key is a number, otherwise an object\n            current[key] = nextKey !== undefined && /^\\d+$/.test(nextKey) ? [] : {};\n        }\n        current = current[key];\n    }\n    current[lastKey] = value;\n}\n\nfunction purgeEmptyValues<T>(obj: T): T {\n    if (obj === null || obj === undefined) return obj;\n    if (typeof obj !== 'object') return obj;\n    if (Array.isArray(obj)) return obj.filter(item => item !== '' && item !== null) as T;\n\n    const result: Record<string, any> = {};\n    for (const [key, value] of Object.entries(obj)) {\n        if (value === '' || value === null || value === undefined) continue;\n        if (typeof value === 'object' && !Array.isArray(value)) {\n            const cleaned = purgeEmptyValues(value);\n            if (Object.keys(cleaned as object).length > 0) {\n                result[key] = cleaned;\n            }\n        } else {\n            result[key] = value;\n        }\n    }\n    return result as T;\n}\n\nfunction flattenObject(obj: any, prefix = ''): Record<string, any> {\n    const result: Record<string, any> = {};\n\n    for (const key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            const value = obj[key];\n            const newKey = prefix ? `${prefix}.${key}` : key;\n\n            if (\n                value &&\n                typeof value === 'object' &&\n                !Array.isArray(value) &&\n                !(value instanceof Date) &&\n                !(value instanceof File) &&\n                !(value instanceof FileList)\n            ) {\n                // Recursively flatten nested objects\n                Object.assign(result, flattenObject(value, newKey));\n            } else {\n                result[newKey] = value;\n            }\n        }\n    }\n\n    return result;\n}\n\nasync function validateField(value: FieldValue, rules: ValidationRules | undefined, i18n: Localization['i18n']): Promise<FieldError> {\n    if (!rules) return undefined;\n\n    if (rules.required) {\n        const isEmpty = value == null || value === '' || (Array.isArray(value) && value.length === 0);\n        if (isEmpty) {\n            const message = typeof rules.required === 'string' ? rules.required : i18n.get('common.errors.fieldRequired');\n            return { type: 'required', message };\n        }\n    }\n\n    if (rules.validate) {\n        try {\n            const result = await rules.validate(value);\n            if (!result.valid) {\n                return { message: result.message, type: 'validation' };\n            }\n        } catch (error) {\n            console.error('A custom validation function threw an error:', error);\n            return { type: 'validation', message: 'Validation error occurred' };\n        }\n    }\n\n    return undefined;\n}\n\nexport function useForm<TFieldValues>(options: UseFormOptions<TFieldValues>): UseFormReturn<TFieldValues> {\n    const { defaultValues = {} as Partial<TFieldValues>, i18n } = options;\n\n    const controlRef = useRef<InternalFormControl<TFieldValues>>();\n\n    if (!controlRef.current) {\n        const control: InternalFormControl<TFieldValues> = {\n            _values: new Map(),\n            _errors: new Map(),\n            _touched: new Map(),\n            _dirty: new Map(),\n            _subscribers: new Set(),\n            _validationCounters: new Map(),\n            _fieldRules: new Map(),\n            _options: options,\n            _defaultValues: defaultValues,\n            _isSubmitting: false,\n            _computedErrors: {},\n            _computedTouchedFields: {},\n            _computedDirtyFields: {},\n            subscribe: (callback: () => void) => {\n                control._subscribers.add(callback);\n                return () => control._subscribers.delete(callback);\n            },\n            notify: () => {\n                control._subscribers.forEach(cb => cb());\n            },\n            setValue: (\n                name: FieldValues<TFieldValues>,\n                value: FieldValue,\n                options?: { shouldValidate?: boolean; shouldDirty?: boolean; shouldTouch?: boolean }\n            ) => {\n                const defaultValue = getNestedValue(control._defaultValues, name as string);\n                const isDirty = value !== defaultValue;\n\n                control._values.set(name, value);\n\n                if (options?.shouldDirty !== false) {\n                    control._dirty.set(name, isDirty);\n                    if (isDirty) {\n                        control._computedDirtyFields[name] = true;\n                    } else {\n                        delete control._computedDirtyFields[name];\n                    }\n                }\n\n                if (options?.shouldTouch) {\n                    control._touched.set(name, true);\n                    control._computedTouchedFields[name] = true;\n                }\n\n                const modeToUse = control._options.mode || 'onBlur';\n                if (options?.shouldValidate !== false && (modeToUse === 'onInput' || modeToUse === 'all' || options?.shouldValidate)) {\n                    void validateFieldWithRaceConditionHandling({ control, name, value, rules: control._fieldRules.get(name), i18n });\n                }\n\n                control.notify();\n            },\n            setTouched: (name: FieldValues<TFieldValues>, touched: boolean) => {\n                control._touched.set(name, touched);\n                if (touched) {\n                    control._computedTouchedFields[name] = true;\n                } else {\n                    delete control._computedTouchedFields[name];\n                }\n                control.notify();\n            },\n            getValue: (name: FieldValues<TFieldValues>) => {\n                return control._values.get(name);\n            },\n            getFieldState: (name: FieldValues<TFieldValues>) => {\n                return {\n                    error: control._errors.get(name),\n                    isTouched: control._touched.get(name) || false,\n                    isDirty: control._dirty.get(name) || false,\n                };\n            },\n            getFormState: () => {\n                const hasErrors = Object.keys(control._computedErrors).length > 0;\n                const isValid = !hasErrors && !control._isSubmitting;\n                return {\n                    dirtyFields: control._computedDirtyFields,\n                    touchedFields: control._computedTouchedFields,\n                    isSubmitting: control._isSubmitting,\n                    isValid,\n                    errors: control._computedErrors,\n                } as FormState<TFieldValues>;\n            },\n            register: (name: FieldValues<TFieldValues>, rules: ValidationRules) => {\n                control._fieldRules.set(name, rules);\n                return () => {\n                    control._fieldRules.delete(name);\n                    control._validationCounters.delete(name);\n                };\n            },\n            trigger: async (name?: FieldValues<TFieldValues> | FieldValues<TFieldValues>[]) => {\n                const fieldsToValidate = name ? (Array.isArray(name) ? name : [name]) : Array.from(control._values.keys());\n\n                let hasTouchedChanged = false;\n                fieldsToValidate.forEach(fieldName => {\n                    if (!control._touched.has(fieldName)) {\n                        control._touched.set(fieldName, true);\n                        control._computedTouchedFields[fieldName as FieldValues<TFieldValues>] = true;\n                        hasTouchedChanged = true;\n                    }\n                });\n\n                if (hasTouchedChanged) {\n                    control.notify();\n                }\n\n                const validationPromises = fieldsToValidate.map(async fieldName => {\n                    const value = control._values.get(fieldName)!;\n                    const rules = control._fieldRules.get(fieldName);\n\n                    if (rules) {\n                        await validateFieldWithRaceConditionHandling({ control, name: fieldName, value, rules, i18n });\n                    }\n\n                    return !control._errors.has(fieldName);\n                });\n\n                const results = await Promise.all(validationPromises);\n                return results.every(result => result);\n            },\n        };\n\n        // Flatten defaultValues to support nested objects\n        const flattenedDefaults = flattenObject(defaultValues);\n        Object.entries(flattenedDefaults).forEach(([key, value]) => {\n            control._values.set(key as FieldValues<TFieldValues>, value);\n        });\n\n        controlRef.current = control;\n    }\n\n    const control = controlRef.current;\n\n    const errors = control._computedErrors;\n    const dirtyFields = control._computedDirtyFields;\n    const touchedFields = control._computedTouchedFields;\n\n    const hasErrors = Object.keys(errors).length > 0;\n    const isValid = !hasErrors && !control._isSubmitting;\n\n    const formState: FormState<TFieldValues> = {\n        dirtyFields,\n        touchedFields,\n        isSubmitting: control._isSubmitting,\n        isValid,\n        errors,\n    };\n\n    const setValue = useCallback(\n        (\n            name: FieldValues<TFieldValues>,\n            value: FieldValue,\n            options?: { shouldValidate?: boolean; shouldDirty?: boolean; shouldTouch?: boolean }\n        ) => {\n            control.setValue(name, value, options);\n        },\n        [control]\n    );\n\n    const getValues = useCallback(\n        (name?: FieldValues<TFieldValues>): any => {\n            if (name) {\n                return control._values.get(name);\n            }\n\n            const values = {} as TFieldValues;\n            control._values.forEach((value, key) => {\n                setNestedValue(values, key as string, value);\n            });\n            return values;\n        },\n        [control]\n    );\n\n    const getValueMap = useCallback(() => {\n        return control._values;\n    }, [control]);\n\n    const reset = useCallback(\n        (values?: Partial<TFieldValues>) => {\n            const resetValues = values || control._defaultValues;\n\n            // If custom values provided, update defaultValues so dirty checks compare to new baseline\n            if (values) {\n                control._defaultValues = values;\n            }\n\n            control._values.clear();\n            control._errors.clear();\n            control._touched.clear();\n            control._dirty.clear();\n            control._validationCounters.clear();\n\n            // Clear computed state objects\n            control._computedErrors = {};\n            control._computedTouchedFields = {};\n            control._computedDirtyFields = {};\n\n            // Flatten resetValues to support nested objects\n            const flattenedResetValues = flattenObject(resetValues);\n            Object.entries(flattenedResetValues).forEach(([key, value]) => {\n                control._values.set(key as FieldValues<TFieldValues>, value);\n            });\n\n            control._isSubmitting = false;\n            control.notify();\n        },\n        [control]\n    );\n\n    const trigger = useCallback(\n        async (name?: FieldValues<TFieldValues> | FieldValues<TFieldValues>[]): Promise<boolean> => {\n            return control.trigger(name);\n        },\n        [control]\n    );\n\n    const handleSubmit = useCallback(\n        (onValid: (data: TFieldValues) => void | Promise<void>, onInvalid?: (errors: Record<string, FieldError>) => void) => {\n            return async (e?: Event) => {\n                if (e && e.preventDefault) {\n                    e.preventDefault();\n                }\n\n                control._isSubmitting = true;\n                control.notify();\n\n                try {\n                    // Trigger validation for all fields\n                    const isValid = await trigger();\n\n                    if (isValid) {\n                        const data = purgeEmptyValues(getValues());\n                        await onValid(data);\n                    } else if (onInvalid) {\n                        onInvalid(control._computedErrors);\n                    }\n                } finally {\n                    control._isSubmitting = false;\n                    control.notify();\n                }\n            };\n        },\n        [control, trigger, getValues]\n    );\n\n    return {\n        control,\n        handleSubmit,\n        setValue,\n        getValues,\n        getValueMap,\n        reset,\n        formState,\n        trigger,\n    };\n}\n\nexport async function validateFieldWithRaceConditionHandling<TFieldValues>({\n    control,\n    i18n,\n    name,\n    value,\n    rules,\n}: {\n    control: InternalFormControl<TFieldValues>;\n    i18n: Localization['i18n'];\n    name: FieldValues<TFieldValues>;\n    value: FieldValue;\n    rules?: ValidationRules;\n}): Promise<void> {\n    const currentCounter = (control._validationCounters.get(name) || 0) + 1;\n    control._validationCounters.set(name, currentCounter);\n\n    try {\n        const error = await validateField(value, rules, i18n);\n\n        if (control._validationCounters.get(name) === currentCounter) {\n            if (error) {\n                control._errors.set(name, error);\n                control._computedErrors[name] = error;\n            } else {\n                control._errors.delete(name);\n                delete control._computedErrors[name];\n            }\n            control.notify();\n        }\n    } catch (err) {\n        if (control._validationCounters.get(name) === currentCounter) {\n            const errorObj = { type: 'validation', message: 'Validation error' } as const;\n            control._errors.set(name, errorObj);\n            control._computedErrors[name] = errorObj;\n            control.notify();\n        }\n    }\n}\n","import { useReducer, useCallback, useMemo } from 'preact/hooks';\nimport { getNestedValue, setNestedValue, useForm } from '../useForm';\nimport { UseWizardFormOptions, UseWizardFormReturn, WizardState, WizardAction, WizardStep, WizardSummaryData } from './types';\nimport { FieldValues } from '../types';\n\nfunction wizardReducer(state: WizardState, action: WizardAction): WizardState {\n    switch (action.type) {\n        case 'SET_STEP':\n            return {\n                ...state,\n                currentStep: action.payload.step,\n                visitedSteps: new Set([...state.visitedSteps, action.payload.step]),\n            };\n\n        case 'NEXT_STEP': {\n            const nextStep = state.currentStep + 1;\n            return {\n                ...state,\n                currentStep: nextStep,\n                visitedSteps: new Set([...state.visitedSteps, nextStep]),\n                completedSteps: new Set([...state.completedSteps, state.currentStep]),\n            };\n        }\n\n        case 'PREVIOUS_STEP':\n            return {\n                ...state,\n                currentStep: Math.max(0, state.currentStep - 1),\n            };\n\n        case 'MARK_STEP_COMPLETED':\n            return {\n                ...state,\n                completedSteps: new Set([...state.completedSteps, action.payload.step]),\n            };\n\n        case 'MARK_STEP_VISITED':\n            return {\n                ...state,\n                visitedSteps: new Set([...state.visitedSteps, action.payload.step]),\n            };\n\n        case 'SET_STEP_VALIDATION': {\n            const newValidation = new Map(state.stepValidation);\n            newValidation.set(action.payload.step, action.payload.isValid);\n            return {\n                ...state,\n                stepValidation: newValidation,\n            };\n        }\n\n        case 'SET_TRANSITIONING':\n            return {\n                ...state,\n                isTransitioning: action.payload,\n            };\n\n        case 'RESET_WIZARD':\n            return {\n                currentStep: 0,\n                completedSteps: new Set(),\n                visitedSteps: new Set([0]),\n                stepValidation: new Map(),\n                isTransitioning: false,\n                displayValues: new Map(),\n            };\n\n        case 'SET_DISPLAY_VALUE': {\n            const next = new Map(state.displayValues);\n            const { field, displayValue } = action.payload;\n            if (displayValue === undefined) {\n                next.delete(field);\n            } else {\n                next.set(field, displayValue);\n            }\n            return { ...state, displayValues: next };\n        }\n\n        case 'RESET_DISPLAY_VALUES':\n            return { ...state, displayValues: new Map() };\n\n        default:\n            return state;\n    }\n}\n\nexport function useWizardForm<TFieldValues>(options: UseWizardFormOptions<TFieldValues>): UseWizardFormReturn<TFieldValues> {\n    const { i18n, steps, defaultValues, mode = 'onBlur', onStepChange, validateBeforeNext = true } = options;\n\n    const [wizardState, dispatch] = useReducer(wizardReducer, {\n        currentStep: 0,\n        completedSteps: new Set<number>(),\n        visitedSteps: new Set<number>([0]),\n        stepValidation: new Map<number, boolean>(),\n        isTransitioning: false,\n        displayValues: new Map<string, string>(),\n    });\n\n    const form = useForm<TFieldValues>({\n        defaultValues,\n        i18n,\n        mode,\n    });\n\n    const { trigger, getValues, getValueMap } = form;\n\n    const totalSteps = steps.length;\n    const currentStepConfig = steps[wizardState.currentStep]!;\n    const isFirstStep = wizardState.currentStep === 0;\n    const isLastStep = wizardState.currentStep === totalSteps - 1;\n    const canGoPrevious = !isFirstStep && !wizardState.isTransitioning;\n    const canGoNext = !isLastStep && !wizardState.isTransitioning;\n    const fieldsConfig: Record<FieldValues<TFieldValues>, WizardStep<TFieldValues>['fields'][number]> = useMemo(() => {\n        return steps\n            .flatMap(step => step.fields)\n            .reduce(\n                (prev, currentValue) => ({ ...prev, [currentValue.fieldName]: currentValue }),\n                {} as Record<FieldValues<TFieldValues>, WizardStep<TFieldValues>['fields'][number]>\n            );\n    }, [steps]);\n\n    const validateStep = useCallback(\n        async (stepIndex: number): Promise<boolean> => {\n            const step = steps[stepIndex];\n            if (!step) return false;\n\n            // Skip validation for optional steps if no fields are filled\n            if (step.isOptional) {\n                const values = getValues();\n                const hasValues = step.fields.some(({ fieldName }) => {\n                    const value = getNestedValue(values, fieldName as string);\n                    return value !== undefined && value !== '' && value !== null;\n                });\n                if (!hasValues) return true;\n            }\n\n            // Trigger validation for all fields in this step\n            const enabledFieldNames = step.fields.filter(({ visible }) => visible).map(({ fieldName }) => fieldName);\n            const validationResults = await trigger(enabledFieldNames);\n\n            // Run custom step validation if provided\n            if (validationResults && step.validate) {\n                const values = getValues();\n                const customValid = await step.validate(values);\n                return customValid;\n            }\n\n            return validationResults;\n        },\n        [steps, getValues, trigger]\n    );\n\n    const validateCurrentStep = useCallback(async (): Promise<boolean> => {\n        const isValid = await validateStep(wizardState.currentStep);\n        dispatch({\n            type: 'SET_STEP_VALIDATION',\n            payload: { step: wizardState.currentStep, isValid },\n        });\n        return isValid;\n    }, [wizardState.currentStep, validateStep]);\n\n    const isStepValid = useCallback(\n        (stepIndex: number): boolean => {\n            return wizardState.stepValidation.get(stepIndex) ?? false;\n        },\n        [wizardState.stepValidation]\n    );\n\n    const isStepComplete = useCallback(\n        (stepIndex: number): boolean => {\n            return wizardState.completedSteps.has(stepIndex);\n        },\n        [wizardState.completedSteps]\n    );\n\n    const goToStep = useCallback(\n        async (stepIndex: number, options?: { skipValidation?: boolean }): Promise<boolean> => {\n            if (stepIndex < 0 || stepIndex >= totalSteps) {\n                throw new Error(`Invalid step index: ${stepIndex}`);\n            }\n\n            if (!options?.skipValidation && validateBeforeNext && stepIndex > wizardState.currentStep) {\n                dispatch({ type: 'SET_TRANSITIONING', payload: true });\n\n                try {\n                    const isValid = await validateCurrentStep();\n                    if (!isValid) {\n                        dispatch({ type: 'SET_TRANSITIONING', payload: false });\n                        return false;\n                    }\n\n                    dispatch({ type: 'MARK_STEP_COMPLETED', payload: { step: wizardState.currentStep } });\n                } catch (error) {\n                    dispatch({ type: 'SET_TRANSITIONING', payload: false });\n                    console.error('Wizard step validation failed:', error);\n                    return false;\n                }\n            }\n\n            const previousStep = wizardState.currentStep;\n            dispatch({ type: 'SET_STEP', payload: { step: stepIndex } });\n            dispatch({ type: 'SET_TRANSITIONING', payload: false });\n\n            if (onStepChange) {\n                onStepChange(stepIndex, previousStep);\n            }\n\n            return true;\n        },\n        [totalSteps, validateBeforeNext, wizardState.currentStep, validateCurrentStep, onStepChange]\n    );\n\n    const nextStep = useCallback(async (): Promise<boolean> => {\n        if (!canGoNext) return false;\n\n        dispatch({ type: 'SET_TRANSITIONING', payload: true });\n\n        if (validateBeforeNext) {\n            try {\n                const isValid = await validateCurrentStep();\n                if (!isValid) {\n                    dispatch({ type: 'SET_TRANSITIONING', payload: false });\n                    return false;\n                }\n            } catch (error) {\n                console.error('Wizard step validation failed on nextStep:', error);\n                dispatch({ type: 'SET_TRANSITIONING', payload: false });\n                return false;\n            }\n        }\n\n        const previousStep = wizardState.currentStep;\n        dispatch({ type: 'NEXT_STEP' });\n        dispatch({ type: 'SET_TRANSITIONING', payload: false });\n\n        if (onStepChange) {\n            onStepChange(previousStep + 1, previousStep);\n        }\n\n        return true;\n    }, [canGoNext, validateBeforeNext, validateCurrentStep, wizardState.currentStep, onStepChange]);\n\n    const previousStep = useCallback((): void => {\n        if (!canGoPrevious) return;\n\n        const previousStepIndex = wizardState.currentStep;\n        dispatch({ type: 'PREVIOUS_STEP' });\n\n        if (onStepChange) {\n            onStepChange(previousStepIndex - 1, previousStepIndex);\n        }\n    }, [canGoPrevious, wizardState.currentStep, onStepChange]);\n\n    const resetWizard = useCallback((): void => {\n        dispatch({ type: 'RESET_WIZARD' });\n    }, []);\n\n    const setFieldDisplayValue = useCallback((name: FieldValues<TFieldValues>, displayValue?: string): void => {\n        dispatch({ type: 'SET_DISPLAY_VALUE', payload: { field: name, displayValue } });\n    }, []);\n\n    const resetFieldDisplayValues = useCallback((): void => {\n        dispatch({ type: 'RESET_DISPLAY_VALUES' });\n    }, []);\n\n    const getSummaryData = useCallback((): WizardSummaryData<TFieldValues> => {\n        const values = getValues();\n        const summary: WizardSummaryData<TFieldValues> = {};\n\n        steps.forEach(step => {\n            const stepFields = step.fields\n                .filter(field => field.visible !== false)\n                .map(field => ({\n                    label: field.label,\n                    value: getNestedValue(values, field.fieldName as string),\n                    id: field.fieldName,\n                    displayValue: wizardState.displayValues.get(field.fieldName as string),\n                }))\n                .filter(field => field.value !== undefined && field.value !== null && field.value !== '');\n\n            if (stepFields.length > 0) {\n                summary[step.id] = {\n                    title: step.title,\n                    fields: stepFields,\n                };\n            }\n        });\n\n        return summary;\n    }, [steps, getValues, wizardState.displayValues]);\n\n    const getApiPayloadValues = useCallback((): Partial<TFieldValues> => {\n        const valueMap = getValueMap();\n        const result = {} as TFieldValues;\n\n        // Collect fields explicitly excluded from API payload\n        const excludedFields = new Set<string>();\n        steps.forEach(step => {\n            step.fields.forEach(field => {\n                if (field.includeInApiPayload === false) {\n                    excludedFields.add(field.fieldName as string);\n                }\n            });\n        });\n\n        // Include values that exist in form state but are not represented in wizard steps\n        // (e.g. values set through defaults when a step is dynamically omitted)\n        for (const [fieldName, value] of valueMap) {\n            if (excludedFields.has(fieldName)) continue;\n            if (value !== undefined && value !== null && value !== '') {\n                setNestedValue(result, fieldName, value);\n            }\n        }\n\n        return result;\n    }, [steps, getValueMap]);\n\n    const getDisplayValue = useCallback(\n        (name: FieldValues<TFieldValues>): string | undefined => {\n            return wizardState.displayValues.get(name);\n        },\n        [wizardState.displayValues]\n    );\n\n    return {\n        ...form,\n        // Wizard state\n        currentStep: wizardState.currentStep,\n        currentStepConfig,\n        isFirstStep,\n        isLastStep,\n        canGoNext,\n        canGoPrevious,\n        fieldsConfig,\n\n        // Navigation methods\n        goToStep,\n        nextStep,\n        previousStep,\n        resetWizard,\n\n        // Validation methods\n        validateStep,\n        isStepValid,\n        isStepComplete,\n\n        // Summary data\n        getSummaryData,\n        getApiPayloadValues,\n\n        // Display values\n        getDisplayValue,\n        setFieldDisplayValue,\n        resetFieldDisplayValues,\n    };\n}\n","import { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { useFetch } from '../../../../../hooks/useFetch';\nimport { useConfigContext } from '../../../../../core/ConfigContext';\nimport { EMPTY_OBJECT } from '../../../../../utils';\nimport { IPaymentLinkStore, IPaymentLinkConfiguration } from '../../../../../types/api/models/payByLink';\nimport { getFormSteps } from '../../utils';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { TranslationKey } from '../../../../../translations';\nimport { useWizardForm } from '../../../../../hooks/form/wizard/useWizardForm';\nimport { PaymentLinkCreationFormValues } from '../types';\nimport { DeepPartial, PaymentLinkFieldsVisibilityConfig } from '../../../../types';\nimport { StoreIds } from '../../../PaymentLinksOverview/types';\n\ntype UsePaymentLinkFormDataProps = {\n    storeIds?: StoreIds;\n    defaultValues?: DeepPartial<PaymentLinkCreationFormValues>;\n    visibilityConfig?: PaymentLinkFieldsVisibilityConfig;\n};\n\nexport const usePaymentLinkFormData = ({ storeIds, defaultValues, visibilityConfig }: UsePaymentLinkFormDataProps) => {\n    const [selectedStore, setSelectedStore] = useState<string>('');\n    const { i18n, getCdnDataset } = useCoreContext();\n    const {\n        countries: getCountries,\n        getPayByLinkConfiguration,\n        createPBLPaymentLink,\n        getPayByLinkSettings,\n        getPayByLinkStores,\n    } = useConfigContext().endpoints;\n\n    // Stores query\n    const { data: storesData, isFetching: isFetchingStores } = useFetch({\n        fetchOptions: { enabled: !!getPayByLinkStores },\n        queryFn: useCallback(async () => {\n            return getPayByLinkStores?.(EMPTY_OBJECT, {});\n        }, [getPayByLinkStores]),\n    });\n\n    const storesSelectorItems = useMemo(() => {\n        const stores: IPaymentLinkStore[] = storesData?.data ?? [];\n        return stores\n            .filter(({ storeId }) => {\n                if (!storeIds) {\n                    return true;\n                }\n                if (Array.isArray(storeIds) && storeId) {\n                    return storeIds.includes(storeId);\n                }\n                return storeIds === storeId;\n            })\n            .map(({ storeCode, storeId }) => ({\n                id: storeId || '',\n                name: storeCode || '',\n            }));\n    }, [storesData, storeIds]);\n\n    // Configuration query (depends on selected store)\n    const {\n        data: configurationData,\n        isFetching: isFetchingConfiguration,\n        error: configurationError,\n    } = useFetch({\n        fetchOptions: { enabled: !!getPayByLinkConfiguration && !!selectedStore },\n        queryFn: useCallback(async () => {\n            return getPayByLinkConfiguration?.(EMPTY_OBJECT, { path: { storeId: selectedStore } });\n        }, [getPayByLinkConfiguration, selectedStore]),\n    });\n\n    // Settings query (depends on selected store)\n    const {\n        data: settingsData,\n        isFetching: isFetchingSettings,\n        error: settingsError,\n    } = useFetch({\n        fetchOptions: { enabled: !!getPayByLinkSettings && !!selectedStore },\n        queryFn: useCallback(async () => {\n            return getPayByLinkSettings?.(EMPTY_OBJECT, { path: { storeId: selectedStore } });\n        }, [getPayByLinkSettings, selectedStore]),\n    });\n\n    const termsAndConditionsProvisioned = useMemo(() => {\n        return !!settingsData?.termsOfServiceUrl;\n    }, [settingsData?.termsOfServiceUrl]);\n\n    const getFieldConfig = useCallback(\n        (field: keyof IPaymentLinkConfiguration) => {\n            return configurationData?.[field];\n        },\n        [configurationData]\n    );\n\n    const isCountriesQueryEnabled = useMemo(() => {\n        return Boolean(getFieldConfig('deliveryAddress') || getFieldConfig('billingAddress') || getFieldConfig('countryCode'));\n    }, [getFieldConfig('deliveryAddress'), getFieldConfig('billingAddress'), getFieldConfig('countryCode')]);\n\n    const { data: countriesData, isFetching: isFetchingCountries } = useFetch({\n        fetchOptions: { enabled: isCountriesQueryEnabled && !!getCountries },\n        queryFn: useCallback(async () => {\n            return getCountries?.(EMPTY_OBJECT);\n        }, [getCountries]),\n    });\n\n    const { data: countryDatasetData, isFetching: isFetchingCountryDataset } = useFetch({\n        fetchOptions: { enabled: isCountriesQueryEnabled },\n        queryFn: useCallback(async () => {\n            const fileName = `${i18n.locale ?? 'en-US'}`;\n            if (getCdnDataset) {\n                return (\n                    (await getCdnDataset<Array<{ id: string; name: string }>>({\n                        name: fileName,\n                        extension: 'json',\n                        subFolder: 'countries',\n                        fallback: [] as Array<{ id: string; name: string }>,\n                    })) ?? []\n                );\n            }\n            return [] as Array<{ id: string; name: string }>;\n        }, [getCdnDataset, i18n.locale, isCountriesQueryEnabled]),\n    });\n\n    // Form steps configuration\n    const formSteps = useMemo(() => {\n        const skipStoreStep = storesSelectorItems.length === 1 && termsAndConditionsProvisioned;\n        return getFormSteps({ i18n, getFieldConfig, visibilityConfig }).filter(step => !(step.id === 'store' && skipStoreStep));\n    }, [getFieldConfig, i18n, storesSelectorItems, termsAndConditionsProvisioned, visibilityConfig]);\n\n    const stepperItems = useMemo(() => {\n        return formSteps.map(step => ({\n            id: step.id,\n            label: i18n.get(`payByLink.creation.form.steps.${step.id}` as TranslationKey),\n        }));\n    }, [formSteps, i18n]);\n\n    const formStepsAriaLabel = useMemo(() => i18n.get('payByLink.creation.steps.a11y.label'), [i18n]);\n\n    // Wizard form setup\n    const wizardForm = useWizardForm<PaymentLinkCreationFormValues>({\n        i18n,\n        steps: formSteps,\n        defaultValues: {\n            ...defaultValues,\n            store: selectedStore || defaultValues?.store || '',\n        } as Partial<PaymentLinkCreationFormValues>,\n        mode: 'all',\n        validateBeforeNext: true,\n    });\n\n    // Auto-select store when only one is available\n    useEffect(() => {\n        if (storesSelectorItems.length === 1) {\n            wizardForm.setValue('store', storesSelectorItems[0]?.id);\n            wizardForm.setFieldDisplayValue('store', storesSelectorItems[0]?.name);\n        }\n    }, [storesSelectorItems]);\n\n    // Sync selected store with form value\n    useEffect(() => {\n        const unsubscribe = wizardForm.control.subscribe(() => {\n            const storeValue = wizardForm.control.getValue('store');\n            if (storeValue && storeValue !== selectedStore) {\n                setSelectedStore(storeValue);\n            }\n        });\n        return unsubscribe;\n    }, [wizardForm.control, selectedStore]);\n\n    const isDataLoading = isFetchingConfiguration || isFetchingSettings || isFetchingStores;\n    const shouldSkipStoreSelection = storesSelectorItems.length === 1;\n    const isConfigReady = !isDataLoading && (configurationData || configurationError);\n    const isSettingReady = !isDataLoading && (settingsData || settingsError);\n\n    const isFirstLoadDone = Boolean(!isFetchingStores && (!shouldSkipStoreSelection || (isConfigReady && isSettingReady)));\n\n    return {\n        // Query data\n        storesData,\n        configurationData,\n        settingsData,\n        // Store data\n        selectedStore,\n        storesSelectorItems,\n        termsAndConditionsProvisioned,\n        // Countries data\n        countriesData,\n        isFetchingCountries,\n        // Countries dataset\n        countryDatasetData,\n        isFetchingCountryDataset,\n        // Form steps\n        formSteps,\n        stepperItems,\n        formStepsAriaLabel,\n        // Wizard form\n        wizardForm,\n        // Endpoints\n        createPaymentLink: createPBLPaymentLink,\n        // Loading state\n        isDataLoading,\n        isFirstLoadDone,\n        setSelectedStore,\n    };\n};\n","import { PropsWithChildren } from 'preact/compat';\nimport useCoreContext from '../../../core/Context/useCoreContext';\nimport Typography from '../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\nimport cx from 'classnames';\n\nconst FormField = ({\n    label,\n    optional,\n    supportText,\n    children,\n    className,\n}: PropsWithChildren<{ label: string; optional: boolean; supportText?: string; className?: string }>) => {\n    const { i18n } = useCoreContext();\n\n    return (\n        <div className={cx('adyen-pe-payment-link-creation-form__field-container', className)}>\n            <div className=\"adyen-pe-payment-link-creation-form__field-label-container\">\n                <Typography\n                    el={TypographyElement.SPAN}\n                    variant={TypographyVariant.BODY}\n                    stronger\n                    className=\"adyen-pe-payment-link-creation-form__field-label\"\n                >\n                    {label}\n                </Typography>\n                {optional && (\n                    <Typography\n                        el={TypographyElement.SPAN}\n                        variant={TypographyVariant.BODY}\n                        className=\"adyen-pe-payment-link-creation-form__field-label-optional\"\n                    >\n                        {`(${i18n.get('payByLink.common.fields.optional.label')})`}\n                    </Typography>\n                )}\n            </div>\n\n            {children}\n\n            {supportText && (\n                <div>\n                    <Typography\n                        el={TypographyElement.SPAN}\n                        variant={TypographyVariant.BODY}\n                        className=\"adyen-pe-payment-link-creation-form__field-support-text\"\n                    >\n                        {supportText}\n                    </Typography>\n                </div>\n            )}\n        </div>\n    );\n};\n\nexport default FormField;\n","import { useEffect, useReducer, useCallback, useRef } from 'preact/hooks';\nimport { ControllerProps, ControllerFieldState, FormState } from './types';\n\nexport function Controller<TFieldValues>({ name, control, rules, render }: ControllerProps<TFieldValues>) {\n    const [, rerender] = useReducer<number, void>(x => x + 1, 0);\n    const { required } = rules ?? {};\n    const prevRequiredRef = useRef(required);\n\n    useEffect(() => {\n        const unsubscribe = control.subscribe(() => {\n            // Trigger re-render when control state changes\n            rerender();\n        });\n\n        let unregister = () => {};\n        if (rules) {\n            unregister = control.register(name, rules);\n        }\n\n        // Re-validate if `required` changed and field was touched\n        if (prevRequiredRef.current !== required) {\n            prevRequiredRef.current = required;\n            const fieldState = control.getFieldState(name);\n            if (fieldState.isTouched && fieldState.error) {\n                control.trigger(name);\n            }\n        }\n\n        return () => {\n            unsubscribe();\n            unregister();\n        };\n    }, [control, name, rules, required]);\n\n    const value = control.getValue(name);\n\n    const fieldState: ControllerFieldState = control.getFieldState(name);\n\n    const formState: FormState<TFieldValues> = control.getFormState();\n\n    const handleChange = useCallback(\n        (value: any) => {\n            let newValue = value;\n            if (value && typeof value === 'object' && 'target' in value) {\n                const target = value.target as any;\n                switch (target.type) {\n                    case 'checkbox':\n                        newValue = target.checked;\n                        break;\n                    case 'file':\n                        newValue = target.files;\n                        break;\n                    case 'select-multiple':\n                        newValue = Array.from(target.selectedOptions, (option: HTMLOptionElement) => option.value);\n                        break;\n                    default:\n                        newValue = target.value;\n                }\n            }\n\n            control.setValue(name, newValue);\n        },\n        [control, name]\n    );\n\n    const handleBlur = useCallback(() => {\n        control.setTouched(name, true);\n        void control.trigger(name);\n    }, [control, name]);\n\n    const triggerValidation = useCallback(() => {\n        void control.trigger(name);\n    }, [control, name]);\n\n    const field = {\n        name,\n        value,\n        onInput: handleChange,\n        onBlur: handleBlur,\n        triggerValidation,\n    };\n\n    return render({\n        field,\n        fieldState,\n        formState,\n    });\n}\n","import { useCallback, useEffect, useRef, useState } from 'preact/hooks';\nimport { FieldValues, FormControl } from './types';\n\nexport function useWatch<TFieldValues>(control: FormControl<TFieldValues>, name: FieldValues<TFieldValues>) {\n    const getCurrent = useCallback(() => control.getValue(name), [control, name]);\n    const [value, setValue] = useState<any>(() => getCurrent());\n    const prevRef = useRef<any>(value);\n\n    useEffect(() => {\n        const handleUpdate = () => {\n            const next = getCurrent();\n            if (prevRef.current !== next) {\n                prevRef.current = next;\n                setValue(next);\n            }\n        };\n        handleUpdate();\n        return control.subscribe(handleUpdate);\n    }, [control, getCurrent, name]);\n\n    return value;\n}\n","import { ComponentChildren } from 'preact';\nimport { FieldValues } from '../../../hooks/form/types';\nimport { useWizardFormContext } from '../../../hooks/form/wizard/WizardFormContext';\n\ninterface VisibleFieldProps<TFieldValues> {\n    name: FieldValues<TFieldValues>;\n    children: ComponentChildren;\n}\n\nexport function VisibleField<TFieldValues>({ name, children }: VisibleFieldProps<TFieldValues>) {\n    const { fieldsConfig } = useWizardFormContext<TFieldValues>();\n    return fieldsConfig[name]?.visible ? <>{children}</> : null;\n}\n","import { h } from 'preact';\nimport { useCallback, useEffect, useMemo } from 'preact/hooks';\nimport { useWizardFormContext } from '../../../hooks/form/wizard/WizardFormContext';\nimport FormField from './FormField';\nimport { Controller } from '../../../hooks/form';\nimport InputBase from '../FormFields/InputBase';\nimport { FieldValues, ValidationRules } from '../../../hooks/form/types';\nimport { InputFieldDropdownProps } from '../FormFields/types';\nimport { VisibleField } from './VisibleField';\nimport { TargetedEvent } from 'preact/compat';\nimport useCoreContext from '../../../core/Context/useCoreContext';\n\ninterface FormTextInputProps<TFieldValues> {\n    fieldName: FieldValues<TFieldValues>;\n    label: string;\n    dropdown?: InputFieldDropdownProps;\n    className?: string;\n    isRequired?: boolean;\n    isReadOnly?: boolean;\n    min?: number;\n    onInput?: (e: TargetedEvent<HTMLInputElement, Event>) => void;\n    onDropdownInput?: (value: string) => void;\n    supportText?: string;\n    type?: string;\n    validate?: ValidationRules['validate'];\n    maxLength?: number;\n    minLength?: number;\n    dropdownPosition?: 'start' | 'end';\n    hideOptionalLabel?: boolean;\n}\n\nexport function FormTextInput<TFieldValues>({\n    className,\n    dropdown,\n    fieldName,\n    isRequired: isRequiredProp,\n    isReadOnly: isReadOnlyProp,\n    label,\n    onDropdownInput,\n    onInput,\n    supportText,\n    type,\n    validate,\n    min,\n    maxLength,\n    minLength,\n    dropdownPosition,\n    hideOptionalLabel,\n}: FormTextInputProps<TFieldValues>) {\n    const { control, fieldsConfig } = useWizardFormContext<TFieldValues>();\n    const { i18n } = useCoreContext();\n\n    const isRequired = useMemo(() => isRequiredProp ?? fieldsConfig[fieldName]?.required, [fieldsConfig, fieldName, isRequiredProp]);\n    const isReadOnly = useMemo(() => isReadOnlyProp ?? fieldsConfig[fieldName]?.readOnly, [fieldsConfig, fieldName, isReadOnlyProp]);\n\n    const handleInput = useCallback(\n        (e: TargetedEvent<HTMLInputElement, Event>, onInputHandler: (value: string) => void) => {\n            onInput?.(e);\n            onInputHandler(e.currentTarget.value);\n        },\n        [onInput]\n    );\n\n    const handleValidate: ValidationRules['validate'] = useCallback(\n        (value: string) => {\n            const isBelowMinLength = minLength && value?.length < minLength;\n\n            if (!value && !isRequired) {\n                return { valid: true };\n            }\n            if (isBelowMinLength) {\n                return { valid: false, message: i18n.get('common.errors.minLength', { values: { minLength } }) };\n            }\n            return validate?.(value) ?? { valid: true };\n        },\n        [i18n, isRequired, minLength, validate]\n    );\n\n    return (\n        <VisibleField name={fieldName}>\n            <FormField label={label} optional={!isRequired && !hideOptionalLabel} supportText={supportText} className={className}>\n                <Controller<TFieldValues>\n                    name={fieldName}\n                    control={control}\n                    rules={{\n                        validate: handleValidate,\n                        required: isRequired,\n                    }}\n                    render={({ field, fieldState }) => {\n                        const isInvalid = !!fieldState.error && fieldState.isTouched;\n\n                        return (\n                            <InputBase\n                                {...field}\n                                value={field.value}\n                                maxLength={maxLength}\n                                minLength={minLength}\n                                name={fieldName}\n                                isValid={!fieldState.error}\n                                isInvalid={isInvalid}\n                                errorMessage={fieldState.error?.message}\n                                onDropdownInput={(...params) => {\n                                    onDropdownInput?.(...params);\n                                    if (isInvalid) {\n                                        field.triggerValidation();\n                                    }\n                                }}\n                                onInput={e => handleInput(e, field.onInput)}\n                                type={type}\n                                min={min}\n                                dropdown={dropdown}\n                                dropdownPosition={dropdownPosition}\n                                readonly={isReadOnly}\n                            />\n                        );\n                    }}\n                />\n            </FormField>\n        </VisibleField>\n    );\n}\n","import { IPaymentLinkValidity } from '../../../types/api/models/payByLink';\n\nexport const PAYMENT_LINK_CREATION_FIELD_LENGTHS = {\n    emailAddress: {\n        max: 500,\n    },\n    merchantReference: {\n        min: 3,\n        max: 256,\n    },\n    shopperEmail: {\n        max: 500,\n    },\n    shopperName: {\n        firstName: {\n            max: 80,\n        },\n        lastName: {\n            max: 80,\n        },\n    },\n    telephoneNumber: {\n        max: 32,\n    },\n    billingAddress: {\n        street: {\n            max: 3000,\n        },\n        houseNumberOrName: {\n            max: 3000,\n        },\n        postalCode: {\n            max: 10,\n        },\n        city: {\n            max: 3000,\n        },\n    },\n    deliveryAddress: {\n        street: {\n            max: 3000,\n        },\n        houseNumberOrName: {\n            max: 3000,\n        },\n        postalCode: {\n            max: 10,\n        },\n        city: {\n            max: 3000,\n        },\n    },\n    shopperReference: {\n        min: 3,\n        max: 256,\n    },\n    description: {\n        max: 280,\n    },\n    shopperLocale: {\n        max: 32,\n    },\n} as const;\n\nexport const LINK_VALIDITY_DURATION_UNITS = ['hour', 'minute', 'day', 'week'] as IPaymentLinkValidity['durationUnit'][];\n","import useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { FormTextInput } from '../../../../../../internal/FormWrappers/FormTextInput';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../../constants';\nimport { PaymentLinkCreationFormValues } from '../../../types';\n\nexport const ShopperEmailField = () => {\n    const { i18n } = useCoreContext();\n\n    const invalidEMailObject = useMemo(\n        () => ({\n            valid: false,\n            message: i18n.get('payByLink.creation.fields.shopperEmail.error.validEmail'),\n        }),\n        [i18n]\n    );\n    const validateEmail = useCallback(\n        (email: string) => {\n            email = String(email).toLowerCase().trim();\n\n            // Check for basic structure\n            const parts = email.split('@');\n            if (parts.length !== 2) {\n                return invalidEMailObject;\n            }\n\n            const [localPart, domain] = parts;\n\n            if (!localPart || !domain) return invalidEMailObject;\n\n            // Validate local part (before @)\n            if (localPart.length === 0 || localPart.startsWith('.') || localPart.endsWith('.') || localPart.includes('..')) {\n                return invalidEMailObject;\n            }\n\n            // Validate domain part\n            if (domain.length === 0 || domain.startsWith('.') || domain.endsWith('.') || domain.includes('..') || !domain.includes('.')) {\n                return invalidEMailObject;\n            }\n\n            // Final regex check\n            const emailRegex =\n                // eslint-disable-next-line max-len\n                /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n\n            if (!emailRegex.test(email)) {\n                return invalidEMailObject;\n            }\n\n            return { valid: true };\n        },\n        [invalidEMailObject]\n    );\n\n    return (\n        <FormTextInput<PaymentLinkCreationFormValues>\n            fieldName=\"shopperEmail\"\n            label={i18n.get('payByLink.creation.fields.shopperEmail.label')}\n            validate={validateEmail}\n            maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.emailAddress.max}\n        />\n    );\n};\n","import { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { Controller } from '../../../../../../../hooks/form';\nimport { PaymentLinkCreationFormValues } from '../../../types';\nimport { useWizardFormContext } from '../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useFetch } from '../../../../../../../hooks/useFetch';\nimport { VisibleField } from '../../../../../../internal/FormWrappers/VisibleField';\nimport InputBase from '../../../../../../internal/FormFields/InputBase';\nimport FormField from '../../../../../../internal/FormWrappers/FormField';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../../constants';\nimport { filterDisallowedCharacters } from '../../../../../../internal/FormFields/utils';\nimport { JSX } from 'preact/jsx-runtime';\n\nexport const ShopperPhoneField = () => {\n    const { i18n, getCdnDataset } = useCoreContext();\n    const { control, fieldsConfig, getValues, setValue, setFieldDisplayValue, getDisplayValue, trigger, formState } =\n        useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const displayValue = useMemo(() => getDisplayValue('telephoneNumber'), [getDisplayValue]);\n    const currentValue = useMemo(() => getValues('telephoneNumber'), [getValues]);\n\n    const [phoneCode, phoneNumberWithoutPhoneCode] = useMemo(() => {\n        if (displayValue) {\n            const [code, ...rest] = displayValue.split(' ');\n            return [code, rest.join(' ')] as const;\n        }\n        if (currentValue) {\n            const [code, ...rest] = currentValue.split(' ');\n            return [code, rest.join(' ')] as const;\n        }\n        return [undefined, undefined] as const;\n    }, [displayValue, currentValue]);\n\n    // Initialize display value from default value on first render\n    useEffect(() => {\n        if (!displayValue && currentValue) {\n            const [code, ...rest] = currentValue.split(' ');\n            const number = rest.join(' ');\n            setValue('telephoneNumber', `${code}${number}`);\n            setFieldDisplayValue('telephoneNumber', `${code} ${number}`);\n        }\n    }, [displayValue, currentValue, setValue, setFieldDisplayValue]);\n\n    const phonesDatasetQuery = useFetch({\n        fetchOptions: { enabled: true },\n        queryFn: useCallback(async () => {\n            if (getCdnDataset) {\n                return (\n                    (await getCdnDataset<Array<{ id: string; prefix: string }>>({\n                        name: 'phonenumbers',\n                        extension: 'json',\n                        fallback: [] as Array<{ id: string; prefix: string }>,\n                    })) ?? []\n                );\n            }\n            return [] as Array<{ id: string; prefix: string }>;\n        }, [getCdnDataset]),\n    });\n\n    const phoneCodesDropdown = useMemo(() => {\n        const phones = phonesDatasetQuery.data ?? [];\n        return phones.map(({ id, prefix }) => ({ id: prefix, name: `${id} (${prefix})` })).sort(({ name: a }, { name: b }) => a.localeCompare(b));\n    }, [phonesDatasetQuery.data]);\n\n    // We use some state variables for validation, so it has to happen in an effect to get accurate values\n    useEffect(() => {\n        if (phoneCode && formState.touchedFields['telephoneNumber'] && formState.errors['telephoneNumber']) {\n            trigger('telephoneNumber');\n        }\n    }, [phoneCode, phoneNumberWithoutPhoneCode, trigger, formState.errors, formState.touchedFields]);\n\n    const isRequired = useMemo(() => fieldsConfig['telephoneNumber']?.required, [fieldsConfig]);\n    const isReadOnly = useMemo(() => fieldsConfig['telephoneNumber']?.readOnly, [fieldsConfig]);\n\n    const shouldHideField = useMemo(() => {\n        const hasDataset = (phonesDatasetQuery.data?.length ?? 0) > 0;\n        const hasValue = !!displayValue || !!currentValue;\n\n        return !phonesDatasetQuery.isFetching && !hasDataset && !isRequired && !hasValue;\n    }, [phonesDatasetQuery.data?.length, phonesDatasetQuery.isFetching, isRequired, displayValue, currentValue]);\n\n    const validate = useCallback(() => {\n        if (!isRequired && !phoneCode && !phoneNumberWithoutPhoneCode) return { valid: true };\n        if (!phoneCode) {\n            return { valid: false, message: i18n.get('payByLink.creation.fields.phoneNumber.errors.requiredPhoneCode') };\n        }\n        const number = phoneNumberWithoutPhoneCode;\n        if (!number) {\n            return { valid: false, message: i18n.get('payByLink.creation.fields.phoneNumber.errors.requiredPhoneNumber') };\n        }\n        return { valid: true };\n    }, [phoneCode, phoneNumberWithoutPhoneCode]);\n\n    if (shouldHideField) return null;\n\n    return (\n        <VisibleField<PaymentLinkCreationFormValues> name=\"telephoneNumber\">\n            <FormField label={i18n.get('payByLink.creation.fields.shopperPhone.label')} optional={!isRequired}>\n                <Controller<PaymentLinkCreationFormValues>\n                    name=\"telephoneNumber\"\n                    control={control}\n                    rules={{\n                        required: isRequired,\n                        validate,\n                    }}\n                    render={({ field, fieldState }) => {\n                        const isInvalid = !!fieldState.error && fieldState.isTouched;\n                        return (\n                            <InputBase\n                                {...field}\n                                onKeyDown={e => {\n                                    filterDisallowedCharacters({\n                                        event: e as JSX.TargetedKeyboardEvent<HTMLInputElement>,\n                                        inputType: 'number',\n                                    });\n                                }}\n                                onInput={e => {\n                                    const numberValue = (e.target as HTMLInputElement).value;\n                                    setValue('telephoneNumber', `${phoneCode ?? ''}${numberValue}`);\n                                    setFieldDisplayValue('telephoneNumber', `${phoneCode ?? ''} ${numberValue}`);\n                                }}\n                                value={phoneNumberWithoutPhoneCode}\n                                type=\"text\"\n                                dropdown={{\n                                    filterable: true,\n                                    items: phoneCodesDropdown,\n                                    value: phoneCode,\n                                    placeholder: i18n.get('payByLink.creation.fields.shopperPhone.phonePrefix.placeholder'),\n                                    readonly: phonesDatasetQuery.isFetching || isReadOnly,\n                                }}\n                                onDropdownInput={val => {\n                                    const currentNumber = phoneNumberWithoutPhoneCode || '';\n                                    setValue('telephoneNumber', `${val}${currentNumber}`);\n                                    setFieldDisplayValue('telephoneNumber', `${val} ${currentNumber}`);\n                                }}\n                                isValid={!fieldState.error && !!field.value}\n                                isInvalid={isInvalid}\n                                errorMessage={fieldState.error?.message}\n                                maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.telephoneNumber.max}\n                                readonly={isReadOnly}\n                            />\n                        );\n                    }}\n                />\n            </FormField>\n        </VisibleField>\n    );\n};\n","import { useEffect, useMemo } from 'preact/hooks';\nimport { Controller } from '../../../hooks/form';\nimport Select from '../FormFields/Select';\nimport { useWizardFormContext } from '../../../hooks/form/wizard/WizardFormContext';\nimport { FieldValues, ValidationRules } from '../../../hooks/form/types';\nimport FormField from './FormField';\nimport { VisibleField } from './VisibleField';\nimport { SelectChangeEvent } from '../FormFields/Select/types';\nimport { FieldError } from '../FormFields/FieldError/FieldError';\n\ninterface FormSelectProps<TFieldValues> {\n    fieldName: FieldValues<TFieldValues>;\n    label: string;\n    items: { id: string; name: string }[];\n    readonly?: boolean;\n    filterable?: boolean;\n    hideOptionalLabel?: boolean;\n    className?: string;\n    isRequired?: boolean;\n    isReadOnly?: boolean;\n    validate?: ValidationRules['validate'];\n    onChange?: (e: SelectChangeEvent) => void;\n    clearable?: boolean;\n    preventInvalidState?: boolean;\n}\n\nexport function FormSelect<TFieldValues>({\n    className,\n    clearable,\n    fieldName,\n    filterable,\n    hideOptionalLabel,\n    isRequired: isRequiredProp,\n    isReadOnly: isReadOnlyProp,\n    items,\n    label,\n    onChange,\n    preventInvalidState,\n    readonly,\n    validate,\n}: FormSelectProps<TFieldValues>) {\n    const { control, fieldsConfig, getValues, setValue } = useWizardFormContext<TFieldValues>();\n    const isRequired = useMemo(() => isRequiredProp ?? fieldsConfig[fieldName]?.required, [fieldsConfig, fieldName, isRequiredProp]);\n    const isReadOnly = useMemo(() => isReadOnlyProp ?? fieldsConfig[fieldName]?.readOnly, [fieldsConfig, fieldName, isReadOnlyProp]);\n\n    useEffect(() => {\n        if (!items.length) return;\n        const currentValue = getValues(fieldName);\n\n        if (currentValue && !items.some(item => item.id === currentValue)) {\n            setValue(fieldName, '');\n        }\n    }, [getValues, setValue, items]);\n\n    useEffect(() => {\n        if (items && items.length === 1) {\n            setValue(fieldName, items[0]?.id);\n        }\n    }, [items, setValue, fieldName]);\n\n    return (\n        <VisibleField name={fieldName}>\n            <FormField label={label} optional={!isRequired && !hideOptionalLabel} className={className}>\n                <Controller<TFieldValues>\n                    name={fieldName}\n                    control={control}\n                    rules={{\n                        required: isRequired,\n                        validate,\n                    }}\n                    render={({ field, fieldState }) => {\n                        const handleChange = (e: SelectChangeEvent) => {\n                            const value = (e.target as HTMLSelectElement).value;\n                            field.onInput(value);\n                            onChange?.(e);\n                        };\n                        const isInvalid = !!fieldState.error && fieldState.isTouched;\n\n                        return (\n                            <div>\n                                <Select\n                                    {...field}\n                                    isInvalid={preventInvalidState ? false : isInvalid}\n                                    isValid={!fieldState.error}\n                                    items={items}\n                                    filterable={filterable}\n                                    clearable={clearable}\n                                    name={fieldName}\n                                    onChange={handleChange}\n                                    readonly={readonly || isReadOnly}\n                                    selected={field.value as string}\n                                    fitPosition\n                                />\n                                {isInvalid && fieldState.error?.message && <FieldError errorMessage={fieldState.error?.message} withTopMargin />}\n                            </div>\n                        );\n                    }}\n                />\n            </FormField>\n        </VisibleField>\n    );\n}\n","import useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport { useMemo } from 'preact/hooks';\nimport { FormSelect } from '../../../../../../internal/FormWrappers/FormSelect';\nimport { PaymentLinkCreationFormValues } from '../../../types';\nimport { useWizardFormContext } from '../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { IPaymentLinkCountry } from '../../../../../../../types';\n\ninterface CountryRegionFieldProps {\n    countriesData?: { data?: IPaymentLinkCountry[] };\n    isFetchingCountries: boolean;\n    countryDatasetData?: Array<{ id: string; name: string }>;\n    isFetchingCountryDataset: boolean;\n}\n\nexport const CountryRegionField = ({ countriesData, isFetchingCountries, countryDatasetData, isFetchingCountryDataset }: CountryRegionFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const countriesListItems = useMemo(() => {\n        const allowedCodes = new Set(fieldsConfig?.['countryCode']?.options ?? countriesData?.data?.map(({ countryCode }) => countryCode) ?? []);\n        const countries = countryDatasetData?.length\n            ? countryDatasetData\n            : (countriesData?.data?.map(({ countryCode, countryName }) => ({ id: countryCode, name: countryName })) ?? []);\n\n        const allowedCountries = countries.filter(({ id }) => !allowedCodes.size || allowedCodes.has(id));\n\n        return allowedCountries.sort((a, b) => a.name.localeCompare(b.name));\n    }, [countriesData?.data, countryDatasetData, fieldsConfig]);\n\n    return (\n        <FormSelect<PaymentLinkCreationFormValues>\n            clearable\n            filterable\n            fieldName=\"countryCode\"\n            label={i18n.get('payByLink.creation.fields.country.label')}\n            items={countriesListItems}\n            readonly={isFetchingCountries || isFetchingCountryDataset}\n        />\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../types';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { useFetch } from '../../../../../../../hooks/useFetch';\nimport { FormSelect } from '../../../../../../internal/FormWrappers/FormSelect';\nimport { useWizardFormContext } from '../../../../../../../hooks/form/wizard/WizardFormContext';\n\nexport const LanguageField = () => {\n    const { i18n, getCdnDataset } = useCoreContext();\n    const { fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const configCountryList = useMemo(() => {\n        return fieldsConfig?.['shopperLocale']?.options as string[] | undefined;\n    }, [fieldsConfig]);\n\n    const languagesQuery = useFetch({\n        fetchOptions: { enabled: true },\n        queryFn: useCallback(async () => {\n            if (getCdnDataset) {\n                return (\n                    (await getCdnDataset<Array<{ text: string; value: string | null }>>({\n                        name: 'languages',\n                        extension: 'json',\n                        fallback: [] as Array<{ text: string; value: string | null }>,\n                    })) ?? []\n                );\n            }\n            return [] as Array<{ text: string; value: string | null }>;\n        }, [getCdnDataset]),\n    });\n\n    const localeListItems = useMemo(() => {\n        const langs = languagesQuery.data ?? [];\n\n        return langs\n            .filter(({ value }) => {\n                return configCountryList?.length ? configCountryList?.includes(value as string) : true;\n            })\n            .map(({ text, value }) => {\n                return {\n                    // TODO - Handle 'auto detect' option when submitting information to the BE\n                    id: value === null ? 'auto' : value,\n                    name: text,\n                };\n            })\n            .sort(({ name: a }, { name: b }) => a.localeCompare(b));\n    }, [languagesQuery.data, configCountryList]);\n\n    const isRequired = useMemo(() => fieldsConfig['shopperLocale']?.required, [fieldsConfig]);\n\n    const shouldHideField = useMemo(() => {\n        const hasItems = localeListItems.length > 0;\n\n        return !languagesQuery.isFetching && !hasItems && !isRequired;\n    }, [languagesQuery.isFetching, localeListItems.length, isRequired]);\n\n    if (shouldHideField) return null;\n\n    return (\n        <FormSelect<PaymentLinkCreationFormValues>\n            filterable\n            fieldName=\"shopperLocale\"\n            label={i18n.get('payByLink.creation.fields.language.label')}\n            items={localeListItems}\n            readonly={languagesQuery.isFetching}\n        />\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../types';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport { useWizardFormContext } from '../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { StateUpdater, useCallback } from 'preact/hooks';\nimport { Dispatch } from 'preact/compat';\nimport Icon from '../../../../../../internal/Icon';\nimport Typography from '../../../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../../../internal/Typography/types';\nimport { uuid } from '../../../../../../../utils';\n\ninterface BillingAndShippingCheckboxFieldProps {\n    isSameAddress: boolean;\n    setIsSameAddress: Dispatch<StateUpdater<boolean>>;\n    showBillingFirst?: boolean;\n}\n\nexport const BillingAndShippingCheckboxField = ({\n    isSameAddress,\n    setIsSameAddress,\n    showBillingFirst = false,\n}: BillingAndShippingCheckboxFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setValue, getValues } = useWizardFormContext<PaymentLinkCreationFormValues>();\n    const isSameAddressInputId = uuid();\n\n    const toggleBillingAndDeliveryAddress = useCallback(() => {\n        setIsSameAddress(prev => {\n            if (showBillingFirst) {\n                // When billing is shown first, copy billing to delivery when checking (same address)\n                setValue('deliveryAddress.street', prev ? undefined : getValues('billingAddress.street'));\n                setValue('deliveryAddress.houseNumberOrName', prev ? undefined : getValues('billingAddress.houseNumberOrName'));\n                setValue('deliveryAddress.postalCode', prev ? undefined : getValues('billingAddress.postalCode'));\n                setValue('deliveryAddress.city', prev ? undefined : getValues('billingAddress.city'));\n                setValue('deliveryAddress.country', prev ? undefined : getValues('billingAddress.country'));\n            } else {\n                // Default behavior: copy delivery to billing when checking (same address)\n                setValue('billingAddress.street', prev ? undefined : getValues('deliveryAddress.street'));\n                setValue('billingAddress.houseNumberOrName', prev ? undefined : getValues('deliveryAddress.houseNumberOrName'));\n                setValue('billingAddress.postalCode', prev ? undefined : getValues('deliveryAddress.postalCode'));\n                setValue('billingAddress.city', prev ? undefined : getValues('deliveryAddress.city'));\n                setValue('billingAddress.country', prev ? undefined : getValues('deliveryAddress.country'));\n            }\n            return !prev;\n        });\n    }, [getValues, setIsSameAddress, setValue, showBillingFirst]);\n\n    return (\n        <div>\n            <input type=\"checkbox\" className=\"adyen-pe-visually-hidden\" id={isSameAddressInputId} onInput={toggleBillingAndDeliveryAddress} />\n            <label className=\"adyen-pe-payment-link-creation-form__field-checkbox\" htmlFor={isSameAddressInputId}>\n                {isSameAddress ? <Icon name=\"checkmark-square-fill\" /> : <Icon name=\"square\" />}\n                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                    {i18n.get('payByLink.creation.fields.shippingAndBillingSameAddress.label')}\n                </Typography>\n            </label>\n        </div>\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../../types';\nimport useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport { useWizardFormContext } from '../../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useCallback } from 'preact/hooks';\nimport { TargetedEvent } from 'preact';\nimport { FormTextInput } from '../../../../../../../internal/FormWrappers/FormTextInput';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../../../constants';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\n\ninterface ShippingStreetFieldProps {\n    isSameAddress: boolean;\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    isSameAddressCopyEnabled?: boolean;\n}\n\nexport const ShippingStreetField = ({ isSameAddress, isAddressFieldRequired, isSameAddressCopyEnabled = false }: ShippingStreetFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setValue, fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const onInput = useCallback(\n        (e: TargetedEvent<HTMLInputElement, Event>) => {\n            // Only copy when the same-address checkbox is enabled.\n            // Prevents unintended copying when no address is prefilled and target fields are readOnly\n            if (isSameAddressCopyEnabled && isSameAddress) {\n                setValue('billingAddress.street', e.currentTarget.value);\n            }\n        },\n        [isSameAddress, setValue, isSameAddressCopyEnabled]\n    );\n\n    const isRequired = fieldsConfig['deliveryAddress.street']?.required || isAddressFieldRequired('deliveryAddress.street');\n\n    return (\n        <FormTextInput<PaymentLinkCreationFormValues>\n            maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.deliveryAddress.street.max}\n            fieldName=\"deliveryAddress.street\"\n            label={i18n.get('payByLink.creation.fields.deliveryAddress.street.label')}\n            onInput={onInput}\n            className=\"adyen-pe-payment-link-creation-form__shipping-address-field--large\"\n            hideOptionalLabel\n            isRequired={isRequired}\n        />\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../../types';\nimport useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport { useWizardFormContext } from '../../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useCallback } from 'preact/hooks';\nimport { TargetedEvent } from 'preact';\nimport { FormTextInput } from '../../../../../../../internal/FormWrappers/FormTextInput';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../../../constants';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\n\ninterface ShippingHouseNumberFieldProps {\n    isSameAddress: boolean;\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    isSameAddressCopyEnabled?: boolean;\n}\n\nexport const ShippingHouseNumberField = ({\n    isSameAddress,\n    isAddressFieldRequired,\n    isSameAddressCopyEnabled = false,\n}: ShippingHouseNumberFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setValue, fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const onInput = useCallback(\n        (e: TargetedEvent<HTMLInputElement, Event>) => {\n            // Only copy when the same-address checkbox is enabled.\n            // Prevents unintended copying when no address is prefilled and target fields are readOnly\n            if (isSameAddressCopyEnabled && isSameAddress) {\n                setValue('billingAddress.houseNumberOrName', e.currentTarget.value);\n            }\n        },\n        [isSameAddress, setValue, isSameAddressCopyEnabled]\n    );\n\n    const isRequired = fieldsConfig['deliveryAddress.houseNumberOrName']?.required || isAddressFieldRequired('deliveryAddress.houseNumberOrName');\n\n    return (\n        <FormTextInput<PaymentLinkCreationFormValues>\n            maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.deliveryAddress.houseNumberOrName.max}\n            fieldName=\"deliveryAddress.houseNumberOrName\"\n            label={i18n.get('payByLink.creation.fields.deliveryAddress.houseNumberOrName.label')}\n            onInput={onInput}\n            className=\"adyen-pe-payment-link-creation-form__shipping-address-field--small\"\n            hideOptionalLabel\n            isRequired={isRequired}\n        />\n    );\n};\n","import useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport { useMemo, useCallback } from 'preact/hooks';\nimport { FormSelect } from '../../../../../../../internal/FormWrappers/FormSelect';\nimport { PaymentLinkCreationFormValues } from '../../../../types';\nimport { useWizardFormContext } from '../../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { IPaymentLinkCountry } from '../../../../../../../../types';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\nimport { SelectChangeEvent } from '../../../../../../../internal/FormFields/Select/types';\n\ninterface ShippingCountryFieldProps {\n    countriesData?: { data?: IPaymentLinkCountry[] };\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    isFetchingCountries: boolean;\n    isSameAddress: boolean;\n    isSameAddressCopyEnabled?: boolean;\n    countryDatasetData?: Array<{ id: string; name: string }>;\n    isFetchingCountryDataset: boolean;\n}\n\nexport const ShippingCountryField = ({\n    countriesData,\n    isAddressFieldRequired,\n    isFetchingCountries,\n    isSameAddress,\n    isSameAddressCopyEnabled = false,\n    countryDatasetData,\n    isFetchingCountryDataset,\n}: ShippingCountryFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setValue, fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const countriesListItems = useMemo(() => {\n        const allowedCodes = new Set((countriesData?.data ?? []).map(({ countryCode }: IPaymentLinkCountry) => countryCode).filter(Boolean));\n        const countries = countryDatasetData?.length\n            ? countryDatasetData\n            : (countriesData?.data?.map(({ countryCode, countryName }) => ({ id: countryCode, name: countryName })) ?? []);\n\n        const allowedCountries = countries.filter(({ id }) => !allowedCodes.size || allowedCodes.has(id));\n\n        return allowedCountries.sort((a, b) => a.name.localeCompare(b.name));\n    }, [countriesData?.data, countryDatasetData]);\n\n    const handleChange = useCallback(\n        (e: SelectChangeEvent) => {\n            // Only copy when the same-address checkbox is enabled.\n            // Prevents unintended copying when no address is prefilled and target fields are readOnly\n            if (isSameAddressCopyEnabled && isSameAddress) {\n                setValue('billingAddress.country', (e.target as HTMLSelectElement).value);\n            }\n        },\n        [isSameAddress, setValue, isSameAddressCopyEnabled]\n    );\n\n    const isRequired = fieldsConfig['deliveryAddress.country']?.required || isAddressFieldRequired('deliveryAddress.country');\n\n    return (\n        <FormSelect<PaymentLinkCreationFormValues>\n            clearable\n            filterable\n            fieldName=\"deliveryAddress.country\"\n            label={i18n.get('payByLink.creation.fields.deliveryAddress.country.label')}\n            items={countriesListItems}\n            readonly={isFetchingCountries || isFetchingCountryDataset}\n            className=\"adyen-pe-payment-link-creation-form__shipping-address-field--medium\"\n            onChange={handleChange}\n            hideOptionalLabel\n            isRequired={isRequired}\n        />\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../../types';\nimport useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport { useWizardFormContext } from '../../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useCallback } from 'preact/hooks';\nimport { TargetedEvent } from 'preact';\nimport { FormTextInput } from '../../../../../../../internal/FormWrappers/FormTextInput';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../../../constants';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\n\ninterface ShippingCityFieldProps {\n    isSameAddress: boolean;\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    isSameAddressCopyEnabled?: boolean;\n}\n\nexport const ShippingCityField = ({ isSameAddress, isAddressFieldRequired, isSameAddressCopyEnabled = false }: ShippingCityFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setValue, fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const onInput = useCallback(\n        (e: TargetedEvent<HTMLInputElement, Event>) => {\n            // Only copy when the same-address checkbox is enabled.\n            // Prevents unintended copying when no address is prefilled and target fields are readOnly\n            if (isSameAddressCopyEnabled && isSameAddress) {\n                setValue('billingAddress.city', e.currentTarget.value);\n            }\n        },\n        [isSameAddress, setValue, isSameAddressCopyEnabled]\n    );\n\n    const isRequired = fieldsConfig['deliveryAddress.city']?.required || isAddressFieldRequired('deliveryAddress.city');\n\n    return (\n        <FormTextInput<PaymentLinkCreationFormValues>\n            maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.deliveryAddress.city.max}\n            fieldName=\"deliveryAddress.city\"\n            label={i18n.get('payByLink.creation.fields.deliveryAddress.city.label')}\n            onInput={onInput}\n            className=\"adyen-pe-payment-link-creation-form__shipping-address-field--medium\"\n            hideOptionalLabel\n            isRequired={isRequired}\n        />\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../../types';\nimport useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport { useWizardFormContext } from '../../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useCallback } from 'preact/hooks';\nimport { TargetedEvent } from 'preact';\nimport { FormTextInput } from '../../../../../../../internal/FormWrappers/FormTextInput';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../../../constants';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\n\ninterface ShippingPostalCodeFieldProps {\n    isSameAddress: boolean;\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    isSameAddressCopyEnabled?: boolean;\n}\n\nexport const ShippingPostalCodeField = ({\n    isSameAddress,\n    isAddressFieldRequired,\n    isSameAddressCopyEnabled = false,\n}: ShippingPostalCodeFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setValue, fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const onInput = useCallback(\n        (e: TargetedEvent<HTMLInputElement, Event>) => {\n            // Only copy when the same-address checkbox is enabled.\n            // Prevents unintended copying when no address is prefilled and target fields are readOnly\n            if (isSameAddressCopyEnabled && isSameAddress) {\n                setValue('billingAddress.postalCode', e.currentTarget.value);\n            }\n        },\n        [isSameAddress, setValue, isSameAddressCopyEnabled]\n    );\n\n    const isRequired = fieldsConfig['deliveryAddress.postalCode']?.required || isAddressFieldRequired('deliveryAddress.postalCode');\n\n    return (\n        <FormTextInput<PaymentLinkCreationFormValues>\n            maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.deliveryAddress.postalCode.max}\n            fieldName=\"deliveryAddress.postalCode\"\n            label={i18n.get('payByLink.creation.fields.deliveryAddress.postalCode.label')}\n            onInput={onInput}\n            className=\"adyen-pe-payment-link-creation-form__shipping-address-field--small\"\n            hideOptionalLabel\n            isRequired={isRequired}\n        />\n    );\n};\n","import useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../../../../internal/Typography/types';\nimport { ShippingStreetField } from './ShippingStreetField';\nimport { ShippingHouseNumberField } from './ShippingHouseNumberField';\nimport { ShippingCountryField } from './ShippingCountryField';\nimport { ShippingCityField } from './ShippingCityField';\nimport { ShippingPostalCodeField } from './ShippingPostalCodeField';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\nimport { IPaymentLinkCountry } from '../../../../../../../../types';\n\ninterface DeliveryAddressSectionProps {\n    isSameAddress: boolean;\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    isOptional?: boolean;\n    isSameAddressCopyEnabled?: boolean;\n    countriesData?: { data?: IPaymentLinkCountry[] };\n    isFetchingCountries: boolean;\n    countryDatasetData?: Array<{ id: string; name: string }>;\n    isFetchingCountryDataset: boolean;\n}\n\nexport const DeliveryAddressSection = ({\n    isSameAddress,\n    isAddressFieldRequired,\n    isOptional = false,\n    isSameAddressCopyEnabled = false,\n    countriesData,\n    isFetchingCountries,\n    countryDatasetData,\n    isFetchingCountryDataset,\n}: DeliveryAddressSectionProps) => {\n    const { i18n } = useCoreContext();\n\n    return (\n        <div className=\"adyen-pe-payment-link-creation-form__shipping-address-container\">\n            <div className=\"adyen-pe-payment-link-creation-form__shipping-address-title-container\">\n                <Typography\n                    el={TypographyElement.SPAN}\n                    variant={TypographyVariant.SUBTITLE}\n                    stronger\n                    className=\"adyen-pe-payment-link-creation-form__billing-address-title\"\n                >\n                    {i18n.get('payByLink.creation.sections.deliveryAddress.label')}\n                </Typography>\n                {isOptional && (\n                    <Typography\n                        el={TypographyElement.SPAN}\n                        variant={TypographyVariant.BODY}\n                        className=\"adyen-pe-payment-link-creation-form__field-label-optional\"\n                    >\n                        {`(${i18n.get('payByLink.common.fields.optional.label')})`}\n                    </Typography>\n                )}\n            </div>\n            <div>\n                <ShippingStreetField\n                    isSameAddress={isSameAddress}\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                />\n                <ShippingHouseNumberField\n                    isSameAddress={isSameAddress}\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                />\n            </div>\n            <div>\n                <ShippingCountryField\n                    countriesData={countriesData}\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    isFetchingCountries={isFetchingCountries}\n                    isSameAddress={isSameAddress}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                    countryDatasetData={countryDatasetData}\n                    isFetchingCountryDataset={isFetchingCountryDataset}\n                />\n                <ShippingCityField\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    isSameAddress={isSameAddress}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                />\n                <ShippingPostalCodeField\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    isSameAddress={isSameAddress}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                />\n            </div>\n        </div>\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../../types';\nimport useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport { useWizardFormContext } from '../../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useCallback } from 'preact/hooks';\nimport { TargetedEvent } from 'preact';\nimport { FormTextInput } from '../../../../../../../internal/FormWrappers/FormTextInput';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../../../constants';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\n\ninterface BillingStreetFieldProps {\n    isSameAddress: boolean;\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    showBillingFirst?: boolean;\n    isSameAddressCopyEnabled?: boolean;\n}\n\nexport const BillingStreetField = ({\n    isSameAddress,\n    isAddressFieldRequired,\n    showBillingFirst = false,\n    isSameAddressCopyEnabled = false,\n}: BillingStreetFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setValue, fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const onInput = useCallback(\n        (e: TargetedEvent<HTMLInputElement, Event>) => {\n            // Only copy when the same-address checkbox is enabled.\n            // Prevents unintended copying when no address is prefilled and target fields are readOnly\n            if (showBillingFirst && isSameAddressCopyEnabled && isSameAddress) {\n                setValue('deliveryAddress.street', e.currentTarget.value);\n            }\n        },\n        [isSameAddress, setValue, showBillingFirst, isSameAddressCopyEnabled]\n    );\n\n    const isRequired = fieldsConfig['billingAddress.street']?.required || isAddressFieldRequired('billingAddress.street');\n\n    return (\n        <FormTextInput<PaymentLinkCreationFormValues>\n            maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.billingAddress.street.max}\n            fieldName=\"billingAddress.street\"\n            label={i18n.get('payByLink.creation.fields.billingAddress.street.label')}\n            onInput={onInput}\n            className=\"adyen-pe-payment-link-creation-form__billing-address-field--large\"\n            hideOptionalLabel\n            isRequired={isRequired}\n        />\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../../types';\nimport useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport { useWizardFormContext } from '../../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useCallback } from 'preact/hooks';\nimport { TargetedEvent } from 'preact';\nimport { FormTextInput } from '../../../../../../../internal/FormWrappers/FormTextInput';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../../../constants';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\n\ninterface BillingHouseNumberFieldProps {\n    isSameAddress: boolean;\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    showBillingFirst?: boolean;\n    isSameAddressCopyEnabled?: boolean;\n}\n\nexport const BillingHouseNumberField = ({\n    isSameAddress,\n    isAddressFieldRequired,\n    showBillingFirst = false,\n    isSameAddressCopyEnabled = false,\n}: BillingHouseNumberFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setValue, fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const onInput = useCallback(\n        (e: TargetedEvent<HTMLInputElement, Event>) => {\n            // Only copy when the same-address checkbox is enabled.\n            // Prevents unintended copying when no address is prefilled and target fields are readOnly\n            if (showBillingFirst && isSameAddressCopyEnabled && isSameAddress) {\n                setValue('deliveryAddress.houseNumberOrName', e.currentTarget.value);\n            }\n        },\n        [isSameAddress, setValue, showBillingFirst, isSameAddressCopyEnabled]\n    );\n\n    const isRequired = fieldsConfig['billingAddress.houseNumberOrName']?.required || isAddressFieldRequired('billingAddress.houseNumberOrName');\n\n    return (\n        <FormTextInput<PaymentLinkCreationFormValues>\n            maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.billingAddress.houseNumberOrName.max}\n            fieldName=\"billingAddress.houseNumberOrName\"\n            label={i18n.get('payByLink.creation.fields.billingAddress.houseNumberOrName.label')}\n            onInput={onInput}\n            className=\"adyen-pe-payment-link-creation-form__billing-address-field--small\"\n            hideOptionalLabel\n            isRequired={isRequired}\n        />\n    );\n};\n","import useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport { useMemo, useCallback } from 'preact/hooks';\nimport { FormSelect } from '../../../../../../../internal/FormWrappers/FormSelect';\nimport { PaymentLinkCreationFormValues } from '../../../../types';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\nimport { IPaymentLinkCountry } from '../../../../../../../../types';\nimport { useWizardFormContext } from '../../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { SelectChangeEvent } from '../../../../../../../internal/FormFields/Select/types';\n\ninterface BillingCountryFieldProps {\n    countriesData?: { data?: IPaymentLinkCountry[] };\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    isFetchingCountries: boolean;\n    countryDatasetData?: Array<{ id: string; name: string }>;\n    isFetchingCountryDataset: boolean;\n    isSameAddress?: boolean;\n    showBillingFirst?: boolean;\n    isSameAddressCopyEnabled?: boolean;\n}\n\nexport const BillingCountryField = ({\n    countriesData,\n    isAddressFieldRequired,\n    isFetchingCountries,\n    countryDatasetData,\n    isFetchingCountryDataset,\n    isSameAddress = false,\n    showBillingFirst = false,\n    isSameAddressCopyEnabled = false,\n}: BillingCountryFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { fieldsConfig, setValue } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const countriesListItems = useMemo(() => {\n        const allowedCodes = new Set((countriesData?.data ?? []).map(({ countryCode }: IPaymentLinkCountry) => countryCode).filter(Boolean));\n        const countries = countryDatasetData?.length\n            ? countryDatasetData\n            : (countriesData?.data?.map(({ countryCode, countryName }) => ({ id: countryCode, name: countryName })) ?? []);\n\n        const allowedCountries = countries.filter(({ id }) => !allowedCodes.size || allowedCodes.has(id));\n\n        return allowedCountries.sort((a, b) => a.name.localeCompare(b.name));\n    }, [countriesData?.data, countryDatasetData]);\n\n    const handleChange = useCallback(\n        (e: SelectChangeEvent) => {\n            // Only copy when the same-address checkbox is enabled.\n            // Prevents unintended copying when no address is prefilled and target fields are readOnly\n            if (showBillingFirst && isSameAddressCopyEnabled && isSameAddress) {\n                setValue('deliveryAddress.country', (e.target as HTMLSelectElement).value);\n            }\n        },\n        [isSameAddress, setValue, showBillingFirst, isSameAddressCopyEnabled]\n    );\n\n    const isRequired = fieldsConfig['billingAddress.country']?.required || isAddressFieldRequired('billingAddress.country');\n\n    return (\n        <FormSelect<PaymentLinkCreationFormValues>\n            clearable\n            filterable\n            className=\"adyen-pe-payment-link-creation-form__billing-address-field--medium\"\n            fieldName=\"billingAddress.country\"\n            label={i18n.get('payByLink.creation.fields.billingAddress.country.label')}\n            items={countriesListItems}\n            readonly={isFetchingCountries || isFetchingCountryDataset}\n            onChange={handleChange}\n            hideOptionalLabel\n            isRequired={isRequired}\n        />\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../../types';\nimport useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport { useWizardFormContext } from '../../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useCallback } from 'preact/hooks';\nimport { TargetedEvent } from 'preact';\nimport { FormTextInput } from '../../../../../../../internal/FormWrappers/FormTextInput';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../../../constants';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\n\ninterface BillingCityFieldProps {\n    isSameAddress: boolean;\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    showBillingFirst?: boolean;\n    isSameAddressCopyEnabled?: boolean;\n}\n\nexport const BillingCityField = ({\n    isSameAddress,\n    isAddressFieldRequired,\n    showBillingFirst = false,\n    isSameAddressCopyEnabled = false,\n}: BillingCityFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setValue, fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const onInput = useCallback(\n        (e: TargetedEvent<HTMLInputElement, Event>) => {\n            // Only copy when the same-address checkbox is enabled.\n            // Prevents unintended copying when no address is prefilled and target fields are readOnly\n            if (showBillingFirst && isSameAddressCopyEnabled && isSameAddress) {\n                setValue('deliveryAddress.city', e.currentTarget.value);\n            }\n        },\n        [isSameAddress, setValue, showBillingFirst, isSameAddressCopyEnabled]\n    );\n\n    const isRequired = fieldsConfig['billingAddress.city']?.required || isAddressFieldRequired('billingAddress.city');\n\n    return (\n        <FormTextInput<PaymentLinkCreationFormValues>\n            maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.billingAddress.city.max}\n            fieldName=\"billingAddress.city\"\n            label={i18n.get('payByLink.creation.fields.billingAddress.city.label')}\n            onInput={onInput}\n            className=\"adyen-pe-payment-link-creation-form__billing-address-field--medium\"\n            hideOptionalLabel\n            isRequired={isRequired}\n        />\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../../types';\nimport useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport { useWizardFormContext } from '../../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useCallback } from 'preact/hooks';\nimport { TargetedEvent } from 'preact';\nimport { FormTextInput } from '../../../../../../../internal/FormWrappers/FormTextInput';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../../../constants';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\n\ninterface BillingPostalCodeFieldProps {\n    isSameAddress: boolean;\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    showBillingFirst?: boolean;\n    isSameAddressCopyEnabled?: boolean;\n}\n\nexport const BillingPostalCodeField = ({\n    isSameAddress,\n    isAddressFieldRequired,\n    showBillingFirst = false,\n    isSameAddressCopyEnabled = false,\n}: BillingPostalCodeFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setValue, fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const onInput = useCallback(\n        (e: TargetedEvent<HTMLInputElement, Event>) => {\n            // Only copy when the same-address checkbox is enabled.\n            // Prevents unintended copying when no address is prefilled and target fields are readOnly\n            if (showBillingFirst && isSameAddressCopyEnabled && isSameAddress) {\n                setValue('deliveryAddress.postalCode', e.currentTarget.value);\n            }\n        },\n        [isSameAddress, setValue, showBillingFirst, isSameAddressCopyEnabled]\n    );\n\n    const isRequired = fieldsConfig['billingAddress.postalCode']?.required || isAddressFieldRequired('billingAddress.postalCode');\n\n    return (\n        <FormTextInput<PaymentLinkCreationFormValues>\n            maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.billingAddress.postalCode.max}\n            fieldName=\"billingAddress.postalCode\"\n            label={i18n.get('payByLink.creation.fields.billingAddress.postalCode.label')}\n            onInput={onInput}\n            className=\"adyen-pe-payment-link-creation-form__billing-address-field--small\"\n            hideOptionalLabel\n            isRequired={isRequired}\n        />\n    );\n};\n","import useCoreContext from '../../../../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../../../../internal/Typography/types';\nimport { BillingStreetField } from './BillingStreetField';\nimport { BillingHouseNumberField } from './BillingHouseNumberField';\nimport { BillingCountryField } from './BillingCountryField';\nimport { BillingCityField } from './BillingCityField';\nimport { BillingPostalCodeField } from './BillingPostalCodeField';\nimport type { AddressFieldRequiredChecker } from '../../useAddressChecker';\nimport { IPaymentLinkCountry } from '../../../../../../../../types';\n\ninterface BillingAddressSectionProps {\n    isSameAddress: boolean;\n    isAddressFieldRequired: AddressFieldRequiredChecker;\n    isOptional?: boolean;\n    showBillingFirst?: boolean;\n    isSameAddressCopyEnabled?: boolean;\n    countriesData?: { data?: IPaymentLinkCountry[] };\n    isFetchingCountries: boolean;\n    countryDatasetData?: Array<{ id: string; name: string }>;\n    isFetchingCountryDataset: boolean;\n}\n\nexport const BillingAddressSection = ({\n    isSameAddress,\n    isAddressFieldRequired,\n    isOptional = false,\n    showBillingFirst = false,\n    isSameAddressCopyEnabled = false,\n    countriesData,\n    isFetchingCountries,\n    countryDatasetData,\n    isFetchingCountryDataset,\n}: BillingAddressSectionProps) => {\n    const { i18n } = useCoreContext();\n\n    return (\n        <div className=\"adyen-pe-payment-link-creation-form__billing-address-container\">\n            <div className=\"adyen-pe-payment-link-creation-form__billing-address-title-container\">\n                <Typography\n                    el={TypographyElement.SPAN}\n                    variant={TypographyVariant.SUBTITLE}\n                    stronger\n                    className=\"adyen-pe-payment-link-creation-form__billing-address-title\"\n                >\n                    {i18n.get('payByLink.creation.sections.billingAddress.label')}\n                </Typography>\n                {isOptional && (\n                    <Typography\n                        el={TypographyElement.SPAN}\n                        variant={TypographyVariant.BODY}\n                        className=\"adyen-pe-payment-link-creation-form__field-label-optional\"\n                    >\n                        {`(${i18n.get('payByLink.common.fields.optional.label')})`}\n                    </Typography>\n                )}\n            </div>\n            <div>\n                <BillingStreetField\n                    isSameAddress={isSameAddress}\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    showBillingFirst={showBillingFirst}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                />\n                <BillingHouseNumberField\n                    isSameAddress={isSameAddress}\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    showBillingFirst={showBillingFirst}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                />\n            </div>\n            <div>\n                <BillingCountryField\n                    countriesData={countriesData}\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    isFetchingCountries={isFetchingCountries}\n                    countryDatasetData={countryDatasetData}\n                    isFetchingCountryDataset={isFetchingCountryDataset}\n                    isSameAddress={isSameAddress}\n                    showBillingFirst={showBillingFirst}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                />\n                <BillingCityField\n                    isSameAddress={isSameAddress}\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    showBillingFirst={showBillingFirst}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                />\n                <BillingPostalCodeField\n                    isSameAddress={isSameAddress}\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    showBillingFirst={showBillingFirst}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                />\n            </div>\n        </div>\n    );\n};\n","import { useCallback } from 'preact/hooks';\nimport { useWizardFormContext } from '../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useWatch } from '../../../../../../hooks/form';\nimport { PaymentLinkCreationFormValues } from '../../types';\nimport { FieldValues } from '../../../../../../hooks/form/types';\n\nconst DELIVERY_ADDRESS_FIELDS = [\n    'deliveryAddress.street',\n    'deliveryAddress.houseNumberOrName',\n    'deliveryAddress.country',\n    'deliveryAddress.city',\n    'deliveryAddress.postalCode',\n] as const;\n\nconst BILLING_ADDRESS_FIELDS = [\n    'billingAddress.street',\n    'billingAddress.houseNumberOrName',\n    'billingAddress.country',\n    'billingAddress.city',\n    'billingAddress.postalCode',\n] as const;\n\nexport type AddressFieldRequiredChecker = (fieldName: FieldValues<PaymentLinkCreationFormValues>) => boolean;\n\nexport const useAddressChecker = () => {\n    const { control } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const deliveryStreet = useWatch(control, 'deliveryAddress.street' as FieldValues<PaymentLinkCreationFormValues>);\n    const deliveryHouseNumber = useWatch(control, 'deliveryAddress.houseNumberOrName' as FieldValues<PaymentLinkCreationFormValues>);\n    const deliveryCountry = useWatch(control, 'deliveryAddress.country' as FieldValues<PaymentLinkCreationFormValues>);\n    const deliveryCity = useWatch(control, 'deliveryAddress.city' as FieldValues<PaymentLinkCreationFormValues>);\n    const deliveryPostalCode = useWatch(control, 'deliveryAddress.postalCode' as FieldValues<PaymentLinkCreationFormValues>);\n\n    const billingStreet = useWatch(control, 'billingAddress.street' as FieldValues<PaymentLinkCreationFormValues>);\n    const billingHouseNumber = useWatch(control, 'billingAddress.houseNumberOrName' as FieldValues<PaymentLinkCreationFormValues>);\n    const billingCountry = useWatch(control, 'billingAddress.country' as FieldValues<PaymentLinkCreationFormValues>);\n    const billingCity = useWatch(control, 'billingAddress.city' as FieldValues<PaymentLinkCreationFormValues>);\n    const billingPostalCode = useWatch(control, 'billingAddress.postalCode' as FieldValues<PaymentLinkCreationFormValues>);\n\n    const deliveryValues = {\n        'deliveryAddress.street': deliveryStreet,\n        'deliveryAddress.houseNumberOrName': deliveryHouseNumber,\n        'deliveryAddress.country': deliveryCountry,\n        'deliveryAddress.city': deliveryCity,\n        'deliveryAddress.postalCode': deliveryPostalCode,\n    };\n\n    const billingValues = {\n        'billingAddress.street': billingStreet,\n        'billingAddress.houseNumberOrName': billingHouseNumber,\n        'billingAddress.country': billingCountry,\n        'billingAddress.city': billingCity,\n        'billingAddress.postalCode': billingPostalCode,\n    };\n\n    const isAddressFieldRequired = useCallback(\n        (fieldName: FieldValues<PaymentLinkCreationFormValues>) => {\n            const isDeliveryField = DELIVERY_ADDRESS_FIELDS.includes(fieldName as (typeof DELIVERY_ADDRESS_FIELDS)[number]);\n            if (isDeliveryField) {\n                return DELIVERY_ADDRESS_FIELDS.some(field => {\n                    const value = deliveryValues[field];\n                    return value !== undefined && value !== '';\n                });\n            }\n\n            const isBillingField = BILLING_ADDRESS_FIELDS.includes(fieldName as (typeof BILLING_ADDRESS_FIELDS)[number]);\n            if (isBillingField) {\n                return BILLING_ADDRESS_FIELDS.some(field => {\n                    const value = billingValues[field];\n                    return value !== undefined && value !== '';\n                });\n            }\n\n            return false;\n        },\n        [deliveryValues, billingValues]\n    );\n\n    return { isAddressFieldRequired };\n};\n","import { useMemo } from 'preact/hooks';\nimport { useWizardFormContext } from '../../../../../../hooks/form/wizard/WizardFormContext';\nimport { PaymentLinkCreationFormValues } from '../../types';\n\nconst BILLING_ADDRESS_FIELDS = [\n    'billingAddress.street',\n    'billingAddress.houseNumberOrName',\n    'billingAddress.postalCode',\n    'billingAddress.city',\n    'billingAddress.country',\n] as const;\n\nconst DELIVERY_ADDRESS_FIELDS = [\n    'deliveryAddress.street',\n    'deliveryAddress.houseNumberOrName',\n    'deliveryAddress.postalCode',\n    'deliveryAddress.city',\n    'deliveryAddress.country',\n] as const;\n\ninterface AddressSectionState {\n    isVisible: boolean;\n    isRequired: boolean;\n    allFieldsReadOnly: boolean;\n    hasAnyReadOnlyField: boolean;\n}\n\ninterface UseSameAddressCheckboxResult {\n    isSameAddressCopyEnabled: boolean;\n    showBillingFirst: boolean;\n}\n\n/**\n * Hook to determine if the \"same address\" checkbox should be displayed.\n *\n * The checkbox allows users to copy address data between billing and delivery sections.\n * It should be hidden when:\n * - Only one address section is visible (no need to copy)\n * - Both sections have all fields locked/readOnly (user can't modify anything)\n * - The \"target\" section has any readOnly field (copying would partially fail)\n *\n * Display order logic:\n * - Default: Delivery (shipping) shows first, billing receives the copy\n * - When billing is required AND delivery is optional: Billing shows first, delivery receives the copy\n */\nexport const useSameAddressCheckbox = (): UseSameAddressCheckboxResult => {\n    const { fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    return useMemo(() => {\n        const getAddressSectionState = (fields: readonly string[]): AddressSectionState => {\n            const fieldConfigs = fields.map(field => fieldsConfig[field as keyof typeof fieldsConfig]);\n            const visibleFields = fieldConfigs.filter(config => config?.visible);\n            const readOnlyFields = fieldConfigs.filter(config => config?.readOnly);\n\n            return {\n                isVisible: visibleFields.length > 0,\n                isRequired: fieldConfigs.some(config => config?.required),\n                allFieldsReadOnly: visibleFields.length > 0 && visibleFields.every(config => config?.readOnly),\n                hasAnyReadOnlyField: readOnlyFields.length > 0,\n            };\n        };\n\n        const billingState = getAddressSectionState(BILLING_ADDRESS_FIELDS);\n        const deliveryState = getAddressSectionState(DELIVERY_ADDRESS_FIELDS);\n\n        // Checkbox requires both sections to be visible\n        if (!billingState.isVisible || !deliveryState.isVisible) {\n            return { isSameAddressCopyEnabled: false, showBillingFirst: false };\n        }\n\n        // Determine display order: billing first when billing is required and delivery is optional\n        const showBillingFirst = billingState.isRequired && !deliveryState.isRequired;\n\n        // Determine which section is the \"target\" (receives copied values)\n        // - When showBillingFirst is false (default): billing is the target\n        // - When showBillingFirst is true: delivery is the target\n        const targetState = showBillingFirst ? deliveryState : billingState;\n        const sourceState = showBillingFirst ? billingState : deliveryState;\n\n        // Hide checkbox if:\n        // 1. Both sections have all fields locked - no interaction possible\n        // 2. Target section has any readOnly field - copying would partially fail\n        if (targetState.allFieldsReadOnly && sourceState.allFieldsReadOnly) {\n            return { isSameAddressCopyEnabled: false, showBillingFirst };\n        }\n\n        if (targetState.hasAnyReadOnlyField) {\n            return { isSameAddressCopyEnabled: false, showBillingFirst };\n        }\n\n        // Show checkbox: both visible and target has no readOnly fields\n        return { isSameAddressCopyEnabled: true, showBillingFirst };\n    }, [fieldsConfig]);\n};\n","import { ShopperEmailField } from './Fields/ShopperEmailField';\nimport { ShopperPhoneField } from './Fields/ShopperPhoneField';\nimport { CountryRegionField } from './Fields/CountryRegionField';\nimport { LanguageField } from './Fields/LanguageField';\nimport { BillingAndShippingCheckboxField } from './Fields/BillingAndShippingCheckboxField';\nimport { StateUpdater } from 'preact/hooks';\nimport { FormTextInput } from '../../../../../internal/FormWrappers/FormTextInput';\nimport { PaymentLinkCreationFormValues } from '../../types';\n// import { EmailDependentCheckboxField } from './Fields/EmailDependentCheckboxField';\nimport { DeliveryAddressSection } from './Fields/Address/DeliveryAddressSection';\nimport { BillingAddressSection } from './Fields/Address/BillingAddressSection';\nimport useCoreContext from '../../../../../../core/Context/useCoreContext';\nimport './CustomerDetailsForm.scss';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../constants';\nimport { useWizardFormContext } from '../../../../../../hooks/form/wizard/WizardFormContext';\nimport { Dispatch } from 'preact/compat';\nimport { IPaymentLinkCountry } from '../../../../../../types';\nimport { useAddressChecker } from './useAddressChecker';\nimport { useSameAddressCheckbox } from './useSameAddressCheckbox';\n\ninterface CustomerDetailsFormProps {\n    isSameAddress: boolean;\n    setIsSameAddress: Dispatch<StateUpdater<boolean>>;\n    countriesData?: { data?: IPaymentLinkCountry[] };\n    isFetchingCountries: boolean;\n    countryDatasetData?: Array<{ id: string; name: string }>;\n    isFetchingCountryDataset: boolean;\n}\n\nexport const CustomerDetailsForm = ({\n    isSameAddress,\n    setIsSameAddress,\n    countriesData,\n    isFetchingCountries,\n    countryDatasetData,\n    isFetchingCountryDataset,\n}: CustomerDetailsFormProps) => {\n    const { i18n } = useCoreContext();\n    const { fieldsConfig } = useWizardFormContext<PaymentLinkCreationFormValues>();\n    const { isAddressFieldRequired } = useAddressChecker();\n    const { isSameAddressCopyEnabled, showBillingFirst } = useSameAddressCheckbox();\n\n    const isNameVisible = fieldsConfig['shopperName.firstName']?.visible || fieldsConfig['shopperName.lastName']?.visible;\n    const isBillingAddressOptional = !fieldsConfig['billingAddress.street']?.required;\n    const isDeliveryAddressOptional = !fieldsConfig['deliveryAddress.street']?.required;\n    const isBillingAddressVisible = fieldsConfig['billingAddress.street']?.visible;\n    const isDeliveryAddressVisible = fieldsConfig['deliveryAddress.street']?.visible;\n\n    return (\n        <div className=\"adyen-pe-payment-link-creation-form__fields-container\">\n            <FormTextInput<PaymentLinkCreationFormValues>\n                fieldName={'shopperReference'}\n                label={i18n.get('payByLink.creation.fields.shopperReference.label')}\n                maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.shopperReference.max}\n                minLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.shopperReference.min}\n            />\n            {isNameVisible && (\n                <div className=\"adyen-pe-payment-link-creation-form__shopper-name-container\">\n                    <FormTextInput<PaymentLinkCreationFormValues>\n                        fieldName={'shopperName.firstName'}\n                        label={i18n.get('payByLink.creation.fields.shopperName.label')}\n                        maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.shopperName.firstName.max}\n                    />\n                    <FormTextInput<PaymentLinkCreationFormValues>\n                        maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.shopperName.lastName.max}\n                        fieldName={'shopperName.lastName'}\n                        label={i18n.get('payByLink.creation.fields.shopperLastName.label')}\n                    />\n                </div>\n            )}\n            <ShopperEmailField />\n            {/* TODO: Pending discussion on whether we want to show this functionality                 \n                <div className=\"adyen-pe-payment-link-creation-form__email-checkbox-container\">\n                    <EmailDependentCheckboxField name=\"sendLinkToShopper\" label={i18n.get('payByLink.creation.fields.sendLinkToShopper.label')} />\n                    <EmailDependentCheckboxField\n                        name=\"sendPaymentSuccessToShopper\"\n                        label={i18n.get('payByLink.creation.fields.sendPaymentSuccessToShopper.label')}\n                    />\n                </div> */}\n\n            <ShopperPhoneField />\n            <CountryRegionField\n                countriesData={countriesData}\n                isFetchingCountries={isFetchingCountries}\n                countryDatasetData={countryDatasetData}\n                isFetchingCountryDataset={isFetchingCountryDataset}\n            />\n            {/* Delivery address shown first (default case: delivery required or both optional/required equally) */}\n            {isDeliveryAddressVisible && !showBillingFirst && (\n                <>\n                    <DeliveryAddressSection\n                        isSameAddress={isSameAddress}\n                        isAddressFieldRequired={isAddressFieldRequired}\n                        isOptional={isDeliveryAddressOptional}\n                        isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                        countriesData={countriesData}\n                        isFetchingCountries={isFetchingCountries}\n                        countryDatasetData={countryDatasetData}\n                        isFetchingCountryDataset={isFetchingCountryDataset}\n                    />\n                    {isSameAddressCopyEnabled && (\n                        <BillingAndShippingCheckboxField isSameAddress={isSameAddress} setIsSameAddress={setIsSameAddress} />\n                    )}\n                </>\n            )}\n            {/* Billing address shown in default case (when !isSameAddress, only billing visible, or checkbox hidden due to readOnly) */}\n            {!showBillingFirst && isBillingAddressVisible && (!isSameAddressCopyEnabled || !isSameAddress || !isDeliveryAddressVisible) && (\n                <BillingAddressSection\n                    isSameAddress={isSameAddress}\n                    isAddressFieldRequired={isAddressFieldRequired}\n                    isOptional={isBillingAddressOptional}\n                    isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                    countriesData={countriesData}\n                    isFetchingCountries={isFetchingCountries}\n                    countryDatasetData={countryDatasetData}\n                    isFetchingCountryDataset={isFetchingCountryDataset}\n                />\n            )}\n            {/* Billing address shown first (when billing required and delivery optional) */}\n            {showBillingFirst && (\n                <>\n                    <BillingAddressSection\n                        isSameAddress={isSameAddress}\n                        isAddressFieldRequired={isAddressFieldRequired}\n                        showBillingFirst={showBillingFirst}\n                        isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                        countriesData={countriesData}\n                        isFetchingCountries={isFetchingCountries}\n                        countryDatasetData={countryDatasetData}\n                        isFetchingCountryDataset={isFetchingCountryDataset}\n                    />\n                    {isSameAddressCopyEnabled && (\n                        <BillingAndShippingCheckboxField\n                            isSameAddress={isSameAddress}\n                            setIsSameAddress={setIsSameAddress}\n                            showBillingFirst={showBillingFirst}\n                        />\n                    )}\n                    {(!isSameAddressCopyEnabled || !isSameAddress) && (\n                        <DeliveryAddressSection\n                            isSameAddress={isSameAddress}\n                            isAddressFieldRequired={isAddressFieldRequired}\n                            isOptional\n                            isSameAddressCopyEnabled={isSameAddressCopyEnabled}\n                            countriesData={countriesData}\n                            isFetchingCountries={isFetchingCountries}\n                            countryDatasetData={countryDatasetData}\n                            isFetchingCountryDataset={isFetchingCountryDataset}\n                        />\n                    )}\n                </>\n            )}\n            <LanguageField />\n        </div>\n    );\n};\n","import useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport { useMemo, useCallback, useState, useEffect } from 'preact/hooks';\nimport { FunctionalComponent, JSX } from 'preact';\nimport { IPaymentLinkValidity, IPaymentLinkConfiguration } from '../../../../../../../types/api/models/payByLink';\nimport { TranslationKey } from '../../../../../../../translations';\nimport { PaymentLinkCreationFormValues } from '../../../types';\nimport { useWizardFormContext } from '../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { VisibleField } from '../../../../../../internal/FormWrappers/VisibleField';\nimport FormField from '../../../../../../internal/FormWrappers/FormField';\nimport { Controller } from '../../../../../../../hooks/form';\nimport Select from '../../../../../../internal/FormFields/Select';\nimport { LINK_VALIDITY_DURATION_UNITS } from '../../../../constants';\nimport InputBase from '../../../../../../internal/FormFields/InputBase';\nimport { transformToMS } from '../../../../../../../utils';\nimport { SelectChangeEvent } from '../../../../../../internal/FormFields/Select/types';\nimport { FieldError } from '../../../../../../internal/FormFields/FieldError/FieldError';\n\nexport type ValidityFieldProps = {\n    configuration?: IPaymentLinkConfiguration;\n};\n\nconst MAX_VALIDITY_DAYS = 70;\nconst FLEXIBLE_ID = 'flexible';\n\nexport const ValidityField: FunctionalComponent<ValidityFieldProps> = ({ configuration }) => {\n    const [customDurationUnit, setCustomDurationUnit] = useState('');\n    const [customDurationQuantity, setCustomDurationQuantity] = useState<number | undefined>(undefined);\n    const [validityValue, setValidityValue] = useState('');\n    const { i18n } = useCoreContext();\n    const { control, fieldsConfig, setValue, getValues, trigger } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const getValidityFromFormState = useCallback(\n        () => [getValues('linkValidity.durationUnit'), getValues('linkValidity.quantity')] as const,\n        [getValues]\n    );\n\n    const validitySelectItems = useMemo(() => {\n        const options: IPaymentLinkValidity[] = configuration?.linkValidity?.options ?? [];\n        return options.map(({ quantity, durationUnit, type }) => {\n            if (type === FLEXIBLE_ID) {\n                return { id: FLEXIBLE_ID, name: i18n.get('payByLink.creation.fields.validity.linkValidityUnit.custom') };\n            }\n            const key: TranslationKey = `payByLink.creation.fields.validity.linkValidityUnit.${durationUnit}`;\n            return { id: `${quantity} ${durationUnit}` || '', name: i18n.get(key, { values: { quantity }, count: quantity }) };\n        });\n    }, [configuration, i18n]);\n\n    const initializeDefaultValidity = useCallback(() => {\n        if (!validitySelectItems.length) return;\n        const [durationUnit, quantity] = getValidityFromFormState();\n        if (!quantity || !durationUnit) {\n            const [qty, unit] = `${validitySelectItems[0]?.id}`.split(' ');\n            setValue('linkValidity.quantity', qty);\n            setValue('linkValidity.durationUnit', unit);\n        }\n    }, [validitySelectItems, setValue, getValidityFromFormState]);\n\n    const findCurrentOption = useCallback(() => {\n        const [durationUnit, quantity] = getValidityFromFormState();\n        if (!quantity || !durationUnit) return validitySelectItems[0];\n        return validitySelectItems.find(item => item.id === `${quantity} ${durationUnit}`) || { id: FLEXIBLE_ID };\n    }, [validitySelectItems, getValidityFromFormState]);\n\n    useEffect(() => {\n        const [durationUnit, quantity] = getValidityFromFormState();\n        setCustomDurationUnit(durationUnit || '');\n        setCustomDurationQuantity(quantity || '');\n        setValidityValue(findCurrentOption()?.id || '');\n        initializeDefaultValidity();\n    }, [getValidityFromFormState, validitySelectItems, findCurrentOption, initializeDefaultValidity]);\n\n    const isDurationUnitRequired = fieldsConfig['linkValidity.durationUnit']?.required;\n    const isDurationQuantityRequired = fieldsConfig['linkValidity.quantity']?.required;\n    const isReadOnly = fieldsConfig['linkValidity.durationUnit']?.readOnly || fieldsConfig['linkValidity.quantity']?.readOnly;\n\n    const handleCustomDurationQuantityChange = useCallback(\n        (e: JSX.TargetedEvent<HTMLInputElement>) => {\n            const eventValue = (e.target as HTMLInputElement)?.value;\n            const newQuantity = parseInt(eventValue, 10);\n            setValue('linkValidity.quantity', newQuantity);\n            setCustomDurationQuantity(newQuantity);\n            trigger('linkValidity.durationUnit');\n        },\n        [setValue, trigger]\n    );\n\n    const handleCustomDurationUnitChange = useCallback(\n        (selectedValue: string) => {\n            setValue('linkValidity.durationUnit', selectedValue);\n            setCustomDurationUnit(selectedValue);\n            trigger('linkValidity.quantity');\n        },\n        [setValue, trigger]\n    );\n\n    const dropdownItems = useMemo(\n        () =>\n            LINK_VALIDITY_DURATION_UNITS.map(unit => ({\n                id: unit,\n                name: i18n.get(`payByLink.creation.fields.validity.linkValidityUnit.${unit}__plural`),\n            })),\n        [i18n]\n    );\n\n    const validate = useCallback(() => {\n        if (validityValue !== FLEXIBLE_ID) return { valid: true };\n\n        const [durationUnit, durationQuantity] = getValidityFromFormState();\n        const qty = parseInt(durationQuantity, 10);\n\n        if (!durationQuantity) {\n            return { valid: false, message: i18n.get('payByLink.creation.fields.validity.customDuration.error.missingDurationValue') };\n        }\n        if (isNaN(qty) || qty <= 0) {\n            return { valid: false, message: i18n.get('payByLink.creation.fields.validity.customDuration.error.invalidDurationValue') };\n        }\n        if (!durationUnit) {\n            return { valid: false, message: i18n.get('payByLink.creation.fields.validity.customDuration.error.missingDurationUnit') };\n        }\n        // TODO: Change to use config\n        if (transformToMS(durationUnit, qty) > transformToMS('day', MAX_VALIDITY_DAYS)) {\n            return {\n                valid: false,\n                message: i18n.get('payByLink.creation.fields.validity.customDuration.error.durationTooLong', {\n                    values: { maxDays: MAX_VALIDITY_DAYS },\n                }),\n            };\n        }\n        return { valid: true };\n    }, [validityValue, i18n, getValidityFromFormState]);\n\n    return (\n        <VisibleField<PaymentLinkCreationFormValues> name=\"linkValidity.durationUnit\">\n            <Controller<PaymentLinkCreationFormValues>\n                name=\"linkValidity.durationUnit\"\n                control={control}\n                rules={{\n                    required: isDurationUnitRequired,\n                    validate,\n                }}\n                render={({ field: durationUnitField, fieldState: durationUnitFieldState }) => (\n                    <Controller<PaymentLinkCreationFormValues>\n                        name=\"linkValidity.quantity\"\n                        control={control}\n                        rules={{ required: isDurationQuantityRequired, validate }}\n                        render={({ field: durationQuantityField, fieldState: durationQuantityFieldState }) => {\n                            const onSelectInput = (e: SelectChangeEvent) => {\n                                const newValue = (e.target as HTMLSelectElement)?.value;\n                                if (newValue !== FLEXIBLE_ID) {\n                                    const [value, durationUnit] = newValue?.split(' ') || [];\n                                    durationQuantityField.onInput(value);\n                                    durationUnitField.onInput(durationUnit);\n                                    durationQuantityField.triggerValidation();\n                                    durationUnitField.triggerValidation();\n                                } else {\n                                    durationUnitField.onInput('');\n                                    durationQuantityField.onInput('');\n                                    setCustomDurationQuantity(undefined);\n                                    setCustomDurationUnit('');\n                                }\n                                setValidityValue(newValue);\n                            };\n\n                            const isInvalid =\n                                (durationQuantityFieldState.error || durationUnitFieldState.error) &&\n                                durationQuantityFieldState.isTouched &&\n                                durationUnitFieldState.isTouched;\n                            const isValid = !durationQuantityFieldState.error || !durationUnitFieldState.error;\n                            const errorMessage = durationQuantityFieldState.error?.message || durationUnitFieldState.error?.message;\n\n                            return (\n                                <div>\n                                    <div className=\"adyen-pe-payment-link-creation-form__validity-container\">\n                                        <FormField\n                                            label={i18n.get('payByLink.creation.fields.validity.label')}\n                                            supportText={i18n.get('payByLink.creation.fields.validity.supportText')}\n                                            optional={!isDurationUnitRequired && !isDurationQuantityRequired}\n                                        >\n                                            <Select\n                                                selected={validityValue}\n                                                onChange={onSelectInput}\n                                                items={validitySelectItems}\n                                                isValid={isValid}\n                                                isInvalid={!validityValue}\n                                                readonly={isReadOnly}\n                                            />\n                                        </FormField>\n                                        {validityValue === FLEXIBLE_ID && (\n                                            <FormField label={i18n.get('payByLink.creation.fields.validity.customDuration.label')} optional={false}>\n                                                <InputBase\n                                                    {...durationQuantityField}\n                                                    dropdown={{\n                                                        ...durationUnitField,\n                                                        items: dropdownItems,\n                                                        value: customDurationUnit || '',\n                                                        readonly: isReadOnly,\n                                                    }}\n                                                    onDropdownInput={handleCustomDurationUnitChange}\n                                                    dropdownPosition=\"end\"\n                                                    value={customDurationQuantity}\n                                                    type=\"number\"\n                                                    onInput={handleCustomDurationQuantityChange}\n                                                    isValid={isValid}\n                                                    isInvalid={isInvalid}\n                                                    readonly={isReadOnly}\n                                                />\n                                            </FormField>\n                                        )}\n                                    </div>\n                                    {isInvalid && errorMessage && <FieldError errorMessage={errorMessage} withTopMargin />}\n                                </div>\n                            );\n                        }}\n                    />\n                )}\n            />\n        </VisibleField>\n    );\n};\n","export const CURRENCY_INPUT_BASE_CLASS = 'adyen-pe-currency-input';\n","import { getDecimalAmount, getDivider } from '../../core/Localization/amount/amount-util';\n\nexport const formatAmount = (amount: number, currency: string) => getDecimalAmount(amount, currency).toFixed(getCurrencyExponent(currency));\nexport const getCurrencyExponent = (currency: string) => Math.log10(getDivider(currency));\n","import { h } from 'preact';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport InputBase from '../InputBase';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport { EMPTY_OBJECT, uniqueId } from '../../../../utils';\nimport { CURRENCY_INPUT_BASE_CLASS } from './constants';\nimport { useFetch } from '../../../../hooks/useFetch';\nimport { useConfigContext } from '../../../../core/ConfigContext';\nimport { IPaymentLinkCurrency } from '../../../../types';\nimport { formatAmount, getCurrencyExponent } from '../../../../utils/currency/main';\n\nconst PRIORITIZED_CURRENCY_CODES = ['EUR', 'GBP', 'USD'] as const;\n\nconst sortCurrencyItems = <T extends { id: string; name: string }>(items: readonly T[]): T[] => {\n    const priorityIndexByCode = new Map<string, number>(PRIORITIZED_CURRENCY_CODES.map((code, index) => [code, index]));\n\n    return [...items].sort((a, b) => {\n        const aCode = a.id.toUpperCase();\n        const bCode = b.id.toUpperCase();\n        const aPriorityIndex = priorityIndexByCode.get(aCode);\n        const bPriorityIndex = priorityIndexByCode.get(bCode);\n\n        if (aPriorityIndex !== undefined || bPriorityIndex !== undefined) {\n            if (aPriorityIndex === undefined) return 1;\n            if (bPriorityIndex === undefined) return -1;\n            return aPriorityIndex - bPriorityIndex;\n        }\n\n        return aCode.localeCompare(bCode);\n    });\n};\n\ninterface CurrencyInputProps {\n    amount?: number;\n    currency: string;\n    currencyItems?: { id: string; name: string }[];\n    hideCurrencySelector?: boolean;\n    interactionsDisabled?: boolean;\n    isInvalid?: boolean;\n    maxValue?: number;\n    name?: string;\n    onAmountChange: (amount: number) => void;\n    onCurrencyChange: (value: string) => void;\n    readonly?: {\n        amount?: boolean;\n        currency?: boolean;\n    };\n    selectedCurrencyCode?: string;\n}\n\nexport const CurrencyInput = ({\n    amount,\n    currency,\n    currencyItems,\n    hideCurrencySelector,\n    interactionsDisabled,\n    isInvalid = false,\n    maxValue,\n    name,\n    onAmountChange,\n    onCurrencyChange,\n    readonly,\n    selectedCurrencyCode,\n}: CurrencyInputProps) => {\n    const prevCurrency = useRef(currency);\n    const { i18n } = useCoreContext();\n    const { currencies: getCurrencies } = useConfigContext().endpoints;\n    const [displayValue, setDisplayValue] = useState(amount ? `${formatAmount(amount, currency)}` : '');\n\n    const computedNumberAmount = useCallback(\n        (value: string) => {\n            const decimalSeparator = (1.1).toLocaleString(i18n.locale).match(/\\d(.*?)\\d/)?.[1] || '.';\n            const normalizedValue = decimalSeparator === '.' ? value : value.replace(decimalSeparator, '.');\n            const exponent = getCurrencyExponent(currency);\n            return Math.trunc(+`${parseFloat(normalizedValue)}e${exponent}`) || 0;\n        },\n        [currency, i18n.locale]\n    );\n\n    useEffect(() => {\n        if (currency !== prevCurrency.current) {\n            setDisplayValue(amount ? `${formatAmount(amount, currency)}` : '');\n            prevCurrency.current = currency;\n        }\n    }, [amount, currency]);\n\n    const onInput = (evt: h.JSX.TargetedEvent<HTMLInputElement>) => {\n        let value = evt.currentTarget.value.trim();\n\n        // Get the decimal separator based on the user's locale\n        const decimalSeparator = (1.1).toLocaleString(i18n.locale).match(/\\d(.*?)\\d/)?.[1] || '.';\n        // Split the input value at the decimal separator\n        const parts = value.split(decimalSeparator);\n\n        if (parts.length === 2) {\n            const exponent = getCurrencyExponent(currency);\n\n            const integerPart = parts[0]!;\n            let decimalPart = parts[1]!;\n\n            if (decimalPart.length >= exponent) {\n                decimalPart = decimalPart.substring(0, exponent);\n                value = integerPart + decimalSeparator + decimalPart;\n                evt.currentTarget.value = value;\n            }\n        }\n\n        if (value.endsWith(decimalSeparator)) {\n            value = value.slice(0, -decimalSeparator.length);\n            evt.currentTarget.value = value;\n        }\n\n        if (typeof maxValue === 'number') {\n            const normalizedValue = decimalSeparator === '.' ? value : value.replace(decimalSeparator, '.');\n            const parsed = parseFloat(normalizedValue);\n\n            if (Number.isFinite(parsed) && parsed > maxValue) {\n                const exponent = getCurrencyExponent(currency);\n                const fixed = maxValue.toFixed(exponent);\n                value = decimalSeparator === '.' ? fixed : fixed.replace('.', decimalSeparator);\n                evt.currentTarget.value = value;\n            }\n        }\n\n        setDisplayValue(value);\n        onAmountChange(computedNumberAmount(value));\n    };\n\n    const currenciesQuery = useFetch({\n        fetchOptions: { enabled: !!getCurrencies && !currencyItems?.length },\n        queryFn: useCallback(async () => {\n            return getCurrencies?.(EMPTY_OBJECT);\n        }, [getCurrencies]),\n    });\n\n    const currencyDropdownItems = useMemo(() => {\n        const currencies: IPaymentLinkCurrency = currenciesQuery.data?.data ?? [];\n        const items = currencies.map(currency => {\n            return {\n                id: currency,\n                name: currency,\n            };\n        });\n        return items;\n    }, [currenciesQuery.data]);\n\n    const sortedCurrencyItems = useMemo(() => {\n        const items = currencyItems?.length ? currencyItems : currencyDropdownItems;\n        return sortCurrencyItems(items);\n    }, [currencyDropdownItems, currencyItems]);\n\n    const inputIdentifier = useRef(uniqueId());\n    const labelIdentifier = useRef(uniqueId());\n\n    const dropdownProps = useMemo(() => {\n        if (hideCurrencySelector) {\n            return {};\n        }\n\n        return {\n            onDropdownInput: onCurrencyChange,\n            dropdown: {\n                items: sortedCurrencyItems,\n                value: selectedCurrencyCode,\n                readonly: currenciesQuery.isFetching || readonly?.currency,\n            },\n        };\n    }, [hideCurrencySelector, sortedCurrencyItems, selectedCurrencyCode, currenciesQuery.isFetching, onCurrencyChange]);\n\n    return (\n        <div className=\"adyen-pe-currency-input__container\">\n            <label htmlFor={inputIdentifier.current} aria-labelledby={labelIdentifier.current}>\n                {/* {currency && <Tag label={currency} variant={TagVariant.DEFAULT} />} */}\n                <InputBase\n                    {...dropdownProps}\n                    type=\"number\"\n                    className={CURRENCY_INPUT_BASE_CLASS}\n                    disabled={interactionsDisabled || currenciesQuery.isFetching}\n                    isInvalid={isInvalid}\n                    lang={i18n.locale}\n                    min={0}\n                    name={name}\n                    onInput={onInput}\n                    uniqueId={inputIdentifier.current}\n                    value={displayValue}\n                    readonly={readonly?.amount}\n                />\n            </label>\n        </div>\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../types';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport { useCallback, useEffect, useMemo } from 'preact/hooks';\nimport { useWizardFormContext } from '../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { CurrencyInput } from '../../../../../../internal/FormFields/CurrencyInput/CurrencyInput';\nimport { VisibleField } from '../../../../../../internal/FormWrappers/VisibleField';\nimport FormField from '../../../../../../internal/FormWrappers/FormField';\nimport { Controller } from '../../../../../../../hooks/form';\nimport { FieldError } from '../../../../../../internal/FormFields/FieldError/FieldError';\n\nconst VALUE_FIELD_NAME = 'amount.value';\nconst CURRENCY_FIELD_NAME = 'amount.currency';\nconst MAX_AMOUNT = 10_000_000_000_000; // 10 billion\n\nexport const AmountField = () => {\n    const { i18n } = useCoreContext();\n    const { control, setValue, getValues, fieldsConfig, trigger } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const currencyCodeFieldVisible = useMemo(() => fieldsConfig?.[CURRENCY_FIELD_NAME]?.visible ?? false, [fieldsConfig]);\n\n    const validate = useCallback(\n        (value: string) => {\n            if (Number(value) < 0) {\n                return { valid: false, message: i18n.get('payByLink.creation.fields.amountValue.error.negativeNumber') };\n            }\n            if (currencyCodeFieldVisible && !getValues(CURRENCY_FIELD_NAME)) {\n                return { valid: false, message: i18n.get('payByLink.creation.fields.amountValue.error.currency') };\n            }\n            if (!value || Number(value) === 0) {\n                return { valid: false, message: i18n.get('common.errors.fieldRequired') };\n            }\n            return { valid: true };\n        },\n        [i18n, getValues, currencyCodeFieldVisible]\n    );\n\n    const handleCurrencyChange = useCallback(\n        (value: string, isInvalid: boolean) => {\n            setValue(CURRENCY_FIELD_NAME, value);\n            if (isInvalid) {\n                trigger(VALUE_FIELD_NAME);\n            }\n        },\n        [setValue, trigger, getValues]\n    );\n\n    const isRequired = useMemo(() => fieldsConfig?.amount?.required, [fieldsConfig]);\n    const isAmountReadOnly = useMemo(() => fieldsConfig?.['amount.value']?.readOnly, [fieldsConfig]);\n    const isCurrencyReadOnly = useMemo(() => fieldsConfig?.['amount.currency']?.readOnly, [fieldsConfig]);\n\n    const currencyItems = useMemo(() => {\n        const options = fieldsConfig?.[CURRENCY_FIELD_NAME]?.options as string[] | undefined;\n        return options?.map(option => ({ id: option, name: option }));\n    }, [fieldsConfig]);\n\n    useEffect(() => {\n        if (currencyItems?.length === 1) {\n            setValue(CURRENCY_FIELD_NAME, currencyItems[0]?.id);\n        }\n    }, [currencyItems]);\n\n    return (\n        <VisibleField<PaymentLinkCreationFormValues> name={VALUE_FIELD_NAME}>\n            <FormField label={i18n.get('payByLink.creation.fields.amount.label')} optional={false} supportText={undefined} className={undefined}>\n                <Controller<PaymentLinkCreationFormValues>\n                    name={VALUE_FIELD_NAME}\n                    control={control}\n                    rules={{\n                        validate,\n                        required: isRequired,\n                    }}\n                    render={({ field, fieldState }) => {\n                        const isInvalid = !!fieldState.error && fieldState.isTouched;\n                        const errorMessage = fieldState.error?.message;\n                        return (\n                            <>\n                                <CurrencyInput\n                                    {...field}\n                                    hideCurrencySelector={!currencyCodeFieldVisible}\n                                    selectedCurrencyCode={getValues(CURRENCY_FIELD_NAME)}\n                                    onCurrencyChange={value => handleCurrencyChange(value, isInvalid)}\n                                    currency={getValues(CURRENCY_FIELD_NAME)}\n                                    currencyItems={currencyItems}\n                                    isInvalid={isInvalid}\n                                    name={VALUE_FIELD_NAME}\n                                    amount={field.value ? Number(field.value) : undefined}\n                                    onAmountChange={field.onInput}\n                                    maxValue={MAX_AMOUNT}\n                                    readonly={{ amount: isAmountReadOnly, currency: isCurrencyReadOnly }}\n                                />\n                                {isInvalid && errorMessage && <FieldError errorMessage={errorMessage} />}\n                            </>\n                        );\n                    }}\n                />\n            </FormField>\n        </VisibleField>\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../types';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport { useMemo } from 'preact/hooks';\nimport { FunctionalComponent } from 'preact';\nimport { IPaymentLinkConfiguration, IPaymentLinkType } from '../../../../../../../types/api/models/payByLink';\nimport { TranslationKey } from '../../../../../../../translations';\nimport { FormSelect } from '../../../../../../internal/FormWrappers/FormSelect';\n\nexport type LinkTypeFieldProps = {\n    configuration?: IPaymentLinkConfiguration;\n};\n\nconst LINK_TYPE_FALLBACK = ['open', 'singleUse'] satisfies IPaymentLinkType[];\n\nexport const LinkTypeField: FunctionalComponent<LinkTypeFieldProps> = ({ configuration }) => {\n    const { i18n } = useCoreContext();\n\n    const linkTypes = useMemo(() => {\n        const options = configuration?.linkType?.options?.length ? configuration?.linkType?.options : LINK_TYPE_FALLBACK;\n        return options.map((type: IPaymentLinkType) => {\n            const key: TranslationKey = `payByLink.creation.form.linkTypes.${type}`;\n            return {\n                id: type,\n                name: i18n.get(key),\n            };\n        });\n    }, [configuration, i18n]);\n\n    return (\n        <FormSelect<PaymentLinkCreationFormValues>\n            fieldName=\"linkType\"\n            label={i18n.get('payByLink.creation.fields.linkType.label')}\n            items={linkTypes}\n        />\n    );\n};\n","import { InteractionKeyCode } from '../../../../types';\nimport Button from '../../../Button';\nimport { ButtonVariant } from '../../../Button/types';\nimport Icon from '../../../Icon';\nimport cx from 'classnames';\nimport { MutableRef } from 'preact/hooks';\n\ninterface CalendarInputButtonProps {\n    label: string;\n    isOpen: boolean;\n    isInvalid?: boolean;\n    onClick: () => void;\n    onClear?: (e?: Event) => void;\n    showClearButton?: boolean;\n    buttonRef: MutableRef<HTMLButtonElement | null>;\n    isReadOnly?: boolean;\n}\n\nexport function CalendarInputButton({\n    label,\n    isOpen,\n    isInvalid,\n    onClick,\n    onClear,\n    showClearButton,\n    buttonRef,\n    isReadOnly,\n}: CalendarInputButtonProps) {\n    return (\n        <Button\n            ref={buttonRef}\n            onClick={e => {\n                e.preventDefault();\n                onClick();\n            }}\n            variant={ButtonVariant.SECONDARY}\n            aria-haspopup=\"dialog\"\n            aria-expanded={isOpen}\n            aria-invalid={isInvalid ? 'true' : undefined}\n            disabled={isReadOnly}\n            className={cx('adyen-pe-button adyen-pe-dropdown__button', {\n                ['adyen-pe-button--invalid']: isInvalid,\n            })}\n            iconRight={\n                showClearButton ? (\n                    <>\n                        <span\n                            role=\"button\"\n                            tabIndex={0}\n                            className=\"adyen-pe-dropdown__button-clear\"\n                            onClick={e => {\n                                e.preventDefault();\n                                e.stopPropagation();\n                                onClear?.(e as unknown as Event);\n                            }}\n                            onKeyDown={e => {\n                                if (e.code === InteractionKeyCode.ENTER || e.code === InteractionKeyCode.SPACE) {\n                                    e.preventDefault();\n                                    e.stopPropagation();\n                                    onClear?.(e as unknown as Event);\n                                }\n                            }}\n                        >\n                            <Icon name=\"cross-circle-fill\" />\n                        </span>\n                    </>\n                ) : (\n                    <Icon className=\"adyen-pe-dropdown__button-collapse-indicator\" name=\"chevron-down\" />\n                )\n            }\n        >\n            <span>{label}</span>\n        </Button>\n    );\n}\n","import Popover from '../../../Popover/Popover';\nimport { PopoverContainerPosition, PopoverContainerSize, PopoverContainerVariant } from '../../../Popover/types';\nimport Calendar from '../../../Calendar';\nimport { DEFAULT_FIRST_WEEK_DAY } from '../../../Calendar/calendar/timerange/presets/shared/offsetWeek';\nimport calendar from '../../../Calendar/calendar';\nimport { CalendarProps } from '../../../Calendar/types';\nimport useCalendarControlsRendering from '../../../Calendar/hooks/useCalendarControlsRendering';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { MutableRef } from 'preact/hooks';\n\ninterface CalendarInputPopoverProps {\n    isOpen: boolean;\n    onClose: () => void;\n    originDate?: Date[];\n    onHighlight: (from?: number) => void;\n    getGridLabel: CalendarProps['getGridLabel'];\n    targetElement: MutableRef<Element | null>;\n}\n\nexport function CalendarInputPopover({ isOpen, onClose, originDate, onHighlight, getGridLabel, targetElement }: CalendarInputPopoverProps) {\n    const { i18n } = useCoreContext();\n    const [controlsRenderer, controlsContainerRef] = useCalendarControlsRendering();\n\n    return (\n        <Popover\n            containerSize={PopoverContainerSize.MEDIUM}\n            dismiss={() => {\n                onClose();\n            }}\n            dismissible={false}\n            divider\n            fitPosition\n            open={isOpen}\n            position={PopoverContainerPosition.BOTTOM}\n            targetElement={targetElement}\n            withContentPadding\n            variant={PopoverContainerVariant.POPOVER}\n        >\n            <div\n                ref={controlsContainerRef}\n                role=\"group\"\n                className={'adyen-pe-datepicker__controls'}\n                aria-label={i18n.get('common.filters.types.date.calendar.navigation.label')}\n            />\n            <div>\n                <Calendar\n                    getGridLabel={getGridLabel}\n                    firstWeekDay={DEFAULT_FIRST_WEEK_DAY}\n                    controls={calendar.controls.MINIMAL}\n                    highlight={calendar.highlight.ONE}\n                    dynamicBlockRows={true}\n                    onlyCellsWithin={true}\n                    originDate={originDate}\n                    onHighlight={onHighlight}\n                    renderControl={controlsRenderer}\n                    trackCurrentDay={true}\n                />\n            </div>\n        </Popover>\n    );\n}\n","import { useState, useRef, useCallback, useMemo } from 'preact/hooks';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport { CalendarProps } from '../../Calendar/types';\nimport { DATE_FORMAT_DELIVERY_DATE } from '../../../../constants';\nimport useTimezoneAwareDateFormatting from '../../../../hooks/useTimezoneAwareDateFormatting';\nimport { CalendarInputButton } from './components/CalendarInputButton';\nimport { CalendarInputPopover } from './components/CalendarInputPopover';\n\ninterface CalendarInputProps {\n    clearable?: boolean;\n    value?: string;\n    onInput: (val: any) => void;\n    isInvalid?: boolean;\n    timezone?: string;\n    isReadOnly?: boolean;\n}\n\nexport function CalendarInput({ clearable, value, onInput, isInvalid, timezone, isReadOnly }: CalendarInputProps) {\n    const { i18n } = useCoreContext();\n    const { dateFormat } = useTimezoneAwareDateFormatting(timezone);\n    const [open, setOpen] = useState(false);\n    const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n    const originDate = useMemo(() => (value ? [new Date(value)] : undefined), [value]);\n    const label = useMemo(\n        () => (value ? dateFormat(value, DATE_FORMAT_DELIVERY_DATE) : i18n.get('common.inputs.select.placeholder')),\n        [dateFormat, i18n, value]\n    );\n    const [lastUpdatedTimestamp, setLastUpdatedTimestamp] = useState<string | undefined>(value);\n    const getGridLabel = useCallback<CalendarProps['getGridLabel']>(\n        block => i18n.get('common.filters.types.date.calendar.label', { values: { monthOfYear: block.label } }),\n        [i18n]\n    );\n\n    const onHighlight = useCallback(\n        (from?: number) => {\n            if (from) {\n                const iso = new Date(from).toISOString();\n                onInput(iso);\n                setLastUpdatedTimestamp(iso);\n                if (iso !== lastUpdatedTimestamp) setOpen(false);\n            }\n        },\n        [lastUpdatedTimestamp, onInput]\n    );\n\n    const showClearButton = useMemo(() => !!clearable && !!value, [clearable, value]);\n\n    const onClear = useCallback(\n        (e?: Event) => {\n            e?.preventDefault?.();\n            e?.stopPropagation?.();\n            onInput('');\n            setLastUpdatedTimestamp(undefined);\n            setOpen(false);\n        },\n        [onInput]\n    );\n\n    return (\n        <div>\n            <CalendarInputButton\n                label={label}\n                isOpen={open}\n                isInvalid={isInvalid}\n                onClick={() => setOpen(prev => !prev)}\n                showClearButton={showClearButton}\n                onClear={onClear}\n                buttonRef={buttonRef}\n                isReadOnly={isReadOnly}\n            />\n            <CalendarInputPopover\n                isOpen={open}\n                onClose={() => setOpen(false)}\n                originDate={originDate}\n                onHighlight={onHighlight}\n                getGridLabel={getGridLabel}\n                targetElement={buttonRef}\n            />\n        </div>\n    );\n}\n","import { useMemo } from 'preact/hooks';\nimport { Controller } from '../../../hooks/form';\nimport { FieldValues } from '../../../hooks/form/types';\nimport { useWizardFormContext } from '../../../hooks/form/wizard/WizardFormContext';\nimport FormField from './FormField';\nimport { CalendarInput } from '../FormFields/CalendarInput/CalendarInput';\nimport { VisibleField } from './VisibleField';\nimport { FieldError } from '../FormFields/FieldError/FieldError';\n\ninterface FormCalendarInputProps<TFieldValues> {\n    clearable?: boolean;\n    fieldName: FieldValues<TFieldValues>;\n    label: string;\n    isReadOnly?: boolean;\n}\n\nexport function FormCalendarInput<TFieldValues>({ clearable, fieldName, label, isReadOnly: isReadOnlyProp }: FormCalendarInputProps<TFieldValues>) {\n    const { control, fieldsConfig } = useWizardFormContext<TFieldValues>();\n\n    const isRequired = useMemo(() => fieldsConfig[fieldName]?.required, [fieldsConfig, fieldName]);\n    const isReadOnly = useMemo(() => isReadOnlyProp ?? fieldsConfig[fieldName]?.readOnly, [fieldsConfig, fieldName, isReadOnlyProp]);\n\n    return (\n        <VisibleField name={fieldName}>\n            <FormField label={label} optional={!isRequired}>\n                <Controller<TFieldValues>\n                    name={fieldName}\n                    control={control}\n                    rules={{\n                        required: isRequired,\n                    }}\n                    render={({ field, fieldState }) => {\n                        return (\n                            <div>\n                                <CalendarInput\n                                    value={field.value as string}\n                                    onInput={field.onInput}\n                                    isInvalid={!!fieldState.error && fieldState.isTouched}\n                                    clearable={clearable}\n                                    isReadOnly={isReadOnly}\n                                />\n                                {fieldState.error?.message && <FieldError errorMessage={fieldState.error?.message} withTopMargin />}\n                            </div>\n                        );\n                    }}\n                />\n            </FormField>\n        </VisibleField>\n    );\n}\n","import { ValidityField } from './Fields/ValidityField';\nimport { AmountField } from './Fields/AmountField';\nimport { LinkTypeField } from './Fields/LinkTypeField';\nimport { FormTextInput } from '../../../../../internal/FormWrappers/FormTextInput';\nimport { PaymentLinkCreationFormValues } from '../../types';\nimport useCoreContext from '../../../../../../core/Context/useCoreContext';\nimport { FormCalendarInput } from '../../../../../internal/FormWrappers/FormCalendarInput';\nimport { PAYMENT_LINK_CREATION_FIELD_LENGTHS } from '../../../constants';\nimport './PaymentDetailsForm.scss';\nimport { IPaymentLinkConfiguration } from '../../../../../../types/api/models/payByLink';\n\ninterface PaymentDetailsFormProps {\n    configuration?: IPaymentLinkConfiguration;\n}\n\nexport const PaymentDetailsForm = ({ configuration }: PaymentDetailsFormProps) => {\n    const { i18n } = useCoreContext();\n    return (\n        <div className=\"adyen-pe-payment-link-creation-form__fields-container\">\n            <ValidityField configuration={configuration} />\n            <AmountField />\n            <FormTextInput<PaymentLinkCreationFormValues>\n                minLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.merchantReference.min}\n                maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.merchantReference.max}\n                fieldName=\"reference\"\n                label={i18n.get('payByLink.creation.fields.merchantReference.label')}\n            />\n            <LinkTypeField configuration={configuration} />\n            <FormTextInput<PaymentLinkCreationFormValues>\n                maxLength={PAYMENT_LINK_CREATION_FIELD_LENGTHS.description.max}\n                fieldName=\"description\"\n                label={i18n.get('payByLink.creation.fields.description.label')}\n                supportText={i18n.get('payByLink.creation.fields.description.supportText')}\n            />\n            <FormCalendarInput<PaymentLinkCreationFormValues>\n                clearable\n                fieldName=\"deliverAt\"\n                label={i18n.get('payByLink.creation.fields.deliverAt.label')}\n            />\n        </div>\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../types';\nimport { FieldValues } from '../../../../../../hooks/form/types';\n\nexport const invisibleFields: FieldValues<PaymentLinkCreationFormValues>[] = [\n    'amount.currency',\n    'linkValidity.durationUnit',\n    'deliverAt',\n    'shopperLocale',\n    'sendSuccessEmailToShopper',\n    'sendLinkToShopper',\n];\n","import cx from 'classnames';\nimport Alert from '../../../../../internal/Alert/Alert';\nimport useCoreContext from '../../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../../internal/Typography/Typography';\nimport StructuredList from '../../../../../internal/StructuredList';\nimport { AlertTypeOption, AlertVariantOption } from '../../../../../internal/Alert/types';\nimport { containerQueries, useResponsiveContainer } from '../../../../../../hooks/useResponsiveContainer';\nimport { Divider } from '../../../../../internal/Divider/Divider';\nimport { TypographyElement, TypographyVariant } from '../../../../../internal/Typography/types';\nimport { invisibleFields } from './constants';\nimport { useWizardFormContext } from '../../../../../../hooks/form/wizard/WizardFormContext';\nimport { PaymentLinkCreationFormValues } from '../../types';\nimport { StructuredListItem } from '../../../../../internal/StructuredList/types';\nimport { useMemo } from 'preact/hooks';\nimport { Tag } from '../../../../../internal/Tag/Tag';\nimport { IPaymentLinkType } from '../../../../../../types';\nimport type { TranslationKey } from '../../../../../../translations';\nimport './FormSummary.scss';\n\ninterface FormSummaryProps {\n    countryDatasetData?: { id: string; name: string }[];\n}\n\nexport const FormSummary = ({ countryDatasetData }: FormSummaryProps) => {\n    const { getSummaryData, getValues, getDisplayValue } = useWizardFormContext<PaymentLinkCreationFormValues>();\n    const formValues = getSummaryData();\n    const { i18n } = useCoreContext();\n    const isMobile = useResponsiveContainer(containerQueries.down.xs);\n\n    const paymentListItems = useMemo<StructuredListItem[]>(() => {\n        const { payment } = formValues;\n        const visibleFields = payment?.fields.filter(({ id }) => !invisibleFields.includes(id));\n\n        // Store step does not exist when only one store is available, so we create it manually\n        // Also, we want to show it under the payment details section\n        const storeField = {\n            id: 'store',\n            label: 'payByLink.creation.summary.fields.store',\n            value: getValues('store'),\n            displayValue: getDisplayValue('store'),\n        };\n\n        const jointFields = [...(storeField ? [storeField] : []), ...(visibleFields || [])];\n\n        const items: StructuredListItem[] | undefined = jointFields?.map(({ label, value, id, displayValue }) => ({\n            key: (label || id) as TranslationKey,\n            value: displayValue || value,\n            id,\n            render: item => {\n                switch (item.id) {\n                    case 'linkValidity.quantity': {\n                        const durationUnit = payment?.fields?.find(field => field.id === 'linkValidity.durationUnit');\n                        return i18n.get(`payByLink.creation.fields.validity.linkValidityUnit.${durationUnit?.value}` as TranslationKey, {\n                            values: { quantity: item.value },\n                            count: Number(item.value),\n                        });\n                    }\n                    case 'amount.value': {\n                        const currencyField = payment?.fields?.find(field => field.id === 'amount.currency');\n                        return i18n.amount(item.value, currencyField?.value);\n                    }\n                    case 'linkType':\n                        return i18n.get(`payByLink.creation.form.linkTypes.${item.value as IPaymentLinkType}`);\n                    default:\n                        return item.value;\n                }\n            },\n        }));\n\n        return items || [];\n    }, [formValues, getDisplayValue, getValues, i18n]);\n\n    const customerListItems = useMemo(() => {\n        const { customer } = formValues;\n        const visibleFields = customer?.fields.filter(({ id }) => !invisibleFields.includes(id));\n        const createListItem = ({\n            label,\n            value,\n            id,\n            displayValue,\n        }: {\n            label?: string;\n            value: string;\n            id?: string;\n            displayValue?: string;\n        }): StructuredListItem => ({\n            key: (label || id) as TranslationKey,\n            value: displayValue || value,\n            id,\n            render: item => {\n                switch (item.id) {\n                    case 'countryCode':\n                    case 'deliveryAddress.country':\n                    case 'billingAddress.country':\n                        return countryDatasetData?.find(countryData => countryData.id === item.value)?.name;\n                    default:\n                        return item.value;\n                }\n            },\n        });\n\n        const deliveryAddressItems = visibleFields?.filter(field => field.id?.startsWith('deliveryAddress.'))?.map(createListItem);\n        const billingAddressItems = visibleFields?.filter(field => field.id?.startsWith('billingAddress.'))?.map(createListItem);\n        const nonAddressItems = visibleFields\n            ?.filter(field => !field?.id?.startsWith('deliveryAddress.') && !field?.id?.startsWith('billingAddress.'))\n            ?.map(createListItem);\n\n        const sendLinkToShopper = customer?.fields.find(field => field.id === 'sendLinkToShopper' && field.value === true);\n        const sendPaymentSuccessToShopper = customer?.fields.find(field => field.id === 'sendSuccessEmailToShopper' && field.value === true);\n\n        if (sendLinkToShopper || sendPaymentSuccessToShopper) {\n            nonAddressItems?.splice(3, 0, {\n                key: 'payByLink.creation.summary.fields.emailNotifications',\n                value: [sendPaymentSuccessToShopper, sendLinkToShopper].filter(Boolean),\n                render: () => (\n                    <div className=\"adyen-pe-payment-link-creation-form-summary__tags-container\">\n                        {sendLinkToShopper && (\n                            <Tag>\n                                <Typography variant={TypographyVariant.CAPTION} el={TypographyElement.SPAN} stronger>\n                                    {i18n.get('payByLink.creation.summary.fields.emailNotifications.emailCreation')}\n                                </Typography>\n                            </Tag>\n                        )}\n                        {sendPaymentSuccessToShopper && (\n                            <Tag>\n                                <Typography variant={TypographyVariant.CAPTION} el={TypographyElement.SPAN} stronger>\n                                    {i18n.get('payByLink.creation.summary.fields.emailNotifications.paymentSuccess')}\n                                </Typography>\n                            </Tag>\n                        )}\n                    </div>\n                ),\n            });\n        }\n\n        return { nonAddressItems, deliveryAddressItems, billingAddressItems };\n    }, [countryDatasetData, formValues, i18n]);\n\n    return (\n        <section className={cx('adyen-pe-payment-link-creation-form-summary', { 'adyen-pe-payment-link-creation-form-summary--mobile': isMobile })}>\n            <section className=\"adyen-pe-payment-link-creation-form-summary__section\">\n                <Typography variant={TypographyVariant.SUBTITLE} className=\"adyen-pe-payment-link-creation-form-summary__section-title\">\n                    {i18n.get('payByLink.creation.summary.paymentDetails')}\n                </Typography>\n                <div>\n                    <StructuredList layout={'5-7'} align={'start'} condensed={false} items={paymentListItems} />\n                </div>\n            </section>\n            {customerListItems.nonAddressItems?.length && (\n                <>\n                    <Divider />\n                    <section className=\"adyen-pe-payment-link-creation-form-summary__section\">\n                        <Typography variant={TypographyVariant.SUBTITLE} className=\"adyen-pe-payment-link-creation-form-summary__section-title\">\n                            {i18n.get('payByLink.creation.summary.shopperInformation')}\n                        </Typography>\n                        <div>\n                            <StructuredList layout={'5-7'} align={'start'} condensed={false} items={customerListItems.nonAddressItems} />\n                        </div>\n                    </section>\n                </>\n            )}\n            {!!customerListItems.deliveryAddressItems?.length && (\n                <section className=\"adyen-pe-payment-link-creation-form-summary__section\">\n                    <Typography variant={TypographyVariant.BODY} className=\"adyen-pe-payment-link-creation-form-summary__section-title\">\n                        {i18n.get('payByLink.creation.summary.deliveryAddress')}\n                    </Typography>\n                    <div>\n                        <StructuredList layout={'5-7'} align={'start'} condensed={false} items={customerListItems.deliveryAddressItems || []} />\n                    </div>\n                </section>\n            )}\n            {!!customerListItems.billingAddressItems?.length && (\n                <section className=\"adyen-pe-payment-link-creation-form-summary__section\">\n                    <Typography variant={TypographyVariant.BODY} className=\"adyen-pe-payment-link-creation-form-summary__section-title\">\n                        {i18n.get('payByLink.creation.summary.billingAddress')}\n                    </Typography>\n                    <div>\n                        <StructuredList layout={'5-7'} align={'start'} condensed={false} items={customerListItems.billingAddressItems || []} />\n                    </div>\n                </section>\n            )}\n            <Alert\n                className=\"adyen-pe-payment-link-creation-form-summary__alert\"\n                variant={AlertVariantOption.TIP}\n                type={AlertTypeOption.HIGHLIGHT}\n                description={i18n.get('payByLink.creation.summary.alertDescription')}\n            />\n        </section>\n    );\n};\n","import { PaymentLinkCreationFormValues } from '../../../types';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\n\nimport { FormSelect } from '../../../../../../internal/FormWrappers/FormSelect';\nimport { SelectChangeEvent } from '../../../../../../internal/FormFields/Select/types';\nimport { useWizardFormContext } from '../../../../../../../hooks/form/wizard/WizardFormContext';\nimport { useCallback } from 'preact/hooks';\n\ninterface StoreFieldProps {\n    items: { id: string; name: string }[];\n}\n\nconst StoreField = ({ items }: StoreFieldProps) => {\n    const { i18n } = useCoreContext();\n    const { setFieldDisplayValue } = useWizardFormContext<PaymentLinkCreationFormValues>();\n\n    const handleChange = useCallback(\n        (event: SelectChangeEvent) => {\n            const displayValue = items.find(item => item.id === event.target.value)?.name;\n            setFieldDisplayValue('store', displayValue);\n        },\n        [items]\n    );\n\n    return (\n        <FormSelect<PaymentLinkCreationFormValues>\n            fieldName={'store'}\n            label={i18n.get('payByLink.creation.fields.store.label')}\n            items={items}\n            onChange={handleChange}\n            preventInvalidState\n        />\n    );\n};\n\nexport default StoreField;\n","import useCoreContext from '../../../../../../core/Context/useCoreContext';\nimport Alert from '../../../../../internal/Alert/Alert';\nimport { AlertTypeOption } from '../../../../../internal/Alert/types';\nimport StoreField from './Fields/StoreField';\n\nimport { StateUpdater, useMemo } from 'preact/hooks';\nimport { useConfigContext } from '../../../../../../core/ConfigContext';\nimport { PaymentLinkCreationFormValues } from '../../types';\nimport { useWizardFormContext } from '../../../../../../hooks/form/wizard/WizardFormContext';\nimport { IPaymentLinkSettings, IPaymentLinkStore } from '../../../../../../types';\nimport { Dispatch } from 'preact/compat';\nimport { StoreIds } from '../../../../PaymentLinksOverview/types';\nimport './StoreForm.scss';\n\ninterface StoreFormProps {\n    setShowTermsAndConditions: Dispatch<StateUpdater<boolean>>;\n    storeIds?: StoreIds;\n    settingsData?: IPaymentLinkSettings;\n    storesData?: IPaymentLinkStore[];\n    selectItems: { id: string; name: string }[];\n    termsAndConditionsProvisioned: boolean;\n}\n\nexport const StoreForm = ({ setShowTermsAndConditions, settingsData, storesData, selectItems, termsAndConditionsProvisioned }: StoreFormProps) => {\n    const { i18n } = useCoreContext();\n    const { savePayByLinkSettings } = useConfigContext().endpoints;\n    const { getValues } = useWizardFormContext<PaymentLinkCreationFormValues>();\n    const canModifySettings = !!savePayByLinkSettings;\n\n    const selectedStoreId = getValues('store');\n\n    const alertLabel = useMemo(() => {\n        if (!termsAndConditionsProvisioned) {\n            if (canModifySettings) {\n                return 'payByLink.creation.storeForm.alerts.tcSetupRequired';\n            }\n            return 'payByLink.creation.storeForm.alerts.tcSetupRequiredWithoutPermissions';\n        }\n    }, [termsAndConditionsProvisioned, canModifySettings]);\n\n    const alertActions = useMemo(() => {\n        if (!canModifySettings) {\n            return [];\n        }\n        return [\n            {\n                label: i18n.get('payByLink.creation.storeForm.alerts.tcSetupRequiredAction'),\n                onClick: () => {\n                    setShowTermsAndConditions(true);\n                },\n            },\n        ];\n    }, [canModifySettings, setShowTermsAndConditions, i18n]);\n\n    return (\n        <div className=\"adyen-pe-payment-link-creation-form__fields-container\">\n            <StoreField items={selectItems} />\n            {settingsData && storesData && selectedStoreId && !termsAndConditionsProvisioned && (\n                <Alert\n                    className=\"adyen-pe-payment-link-creation-form__tc-alert\"\n                    title={i18n.get('payByLink.creation.storeForm.alerts.tcSetupRequiredTitle')}\n                    type={AlertTypeOption.WARNING}\n                    description={alertLabel && i18n.get(alertLabel)}\n                    actions={alertActions}\n                />\n            )}\n        </div>\n    );\n};\n","import { LinkCreationFormStep } from '../types';\nimport { CustomerDetailsForm } from '../Form/CustomerDetailsForm/CustomerDetailsForm';\nimport { PaymentDetailsForm } from '../Form/PaymentDetailsForm/PaymentDetailsForm';\nimport { FormSummary } from '../Form/Summary/FormSummary';\nimport { StoreForm } from '../Form/StoreForm/StoreForm';\nimport { Dispatch, SetStateAction } from 'preact/compat';\nimport { IPaymentLinkSettings, IPaymentLinkStore, IPaymentLinkConfiguration, IPaymentLinkCountry } from '../../../../../types/api/models/payByLink';\nimport { StateUpdater } from 'preact/hooks';\nimport { StoreIds } from '../../../PaymentLinksOverview/types';\n\ntype FormStepRendererProps = {\n    setShowTermsAndConditions: Dispatch<StateUpdater<boolean>>;\n    currentFormStep: LinkCreationFormStep;\n    settingsData?: IPaymentLinkSettings;\n    storeIds?: StoreIds;\n    storesData?: {\n        data: IPaymentLinkStore[];\n    };\n    selectItems: {\n        id: string;\n        name: string;\n    }[];\n    termsAndConditionsProvisioned: boolean;\n    configurationData?: IPaymentLinkConfiguration;\n    isSameAddress: boolean;\n    setIsSameAddress: Dispatch<SetStateAction<boolean>>;\n    countriesData?: {\n        data: IPaymentLinkCountry[];\n    };\n    isFetchingCountries: boolean;\n    countryDatasetData?: Array<{ id: string; name: string }>;\n    isFetchingCountryDataset: boolean;\n};\n\nexport const FormStepRenderer = ({\n    setShowTermsAndConditions,\n    currentFormStep,\n    settingsData,\n    storeIds,\n    storesData,\n    selectItems,\n    termsAndConditionsProvisioned,\n    configurationData,\n    isSameAddress,\n    setIsSameAddress,\n    countriesData,\n    isFetchingCountries,\n    countryDatasetData,\n    isFetchingCountryDataset,\n}: FormStepRendererProps) => {\n    switch (currentFormStep) {\n        case 'store':\n            return (\n                <StoreForm\n                    setShowTermsAndConditions={setShowTermsAndConditions}\n                    settingsData={settingsData}\n                    storeIds={storeIds}\n                    storesData={storesData?.data}\n                    selectItems={selectItems}\n                    termsAndConditionsProvisioned={termsAndConditionsProvisioned}\n                />\n            );\n        case 'payment':\n            return <PaymentDetailsForm configuration={configurationData} />;\n        case 'customer':\n            return (\n                <CustomerDetailsForm\n                    isSameAddress={isSameAddress}\n                    setIsSameAddress={setIsSameAddress}\n                    countriesData={countriesData}\n                    isFetchingCountries={isFetchingCountries}\n                    countryDatasetData={countryDatasetData}\n                    isFetchingCountryDataset={isFetchingCountryDataset}\n                />\n            );\n        case 'summary':\n            return <FormSummary countryDatasetData={countryDatasetData} />;\n        default:\n            return <PaymentDetailsForm configuration={configurationData} />;\n    }\n};\n","import { PaymentLinkSettingsItem, PaymentLinkSettingsMenuItem } from './types';\n\nexport const MenuItem = {\n    theme: 'theme',\n    termsAndConditions: 'termsAndConditions',\n} as const;\n\nexport const MENU_ITEMS = [\n    { value: MenuItem.theme, label: 'payByLink.settings.navigation.theme' },\n    { value: MenuItem.termsAndConditions, label: 'payByLink.settings.navigation.termsAndConditions' },\n] as PaymentLinkSettingsMenuItem[];\n\nexport const DEFAULT_MENU_ITEM = MenuItem.theme as PaymentLinkSettingsItem;\n","import { useEffect, useMemo, useState } from 'preact/hooks';\nimport { useConfigContext } from '../core/ConfigContext';\nimport { useFetch } from './useFetch';\nimport { EMPTY_OBJECT } from '../utils';\nimport AdyenPlatformExperienceError from '../core/Errors/AdyenPlatformExperienceError';\n\nexport const useStores = (storeIds?: string | string[], preselect = true) => {\n    const [selectedStore, setSelectedStore] = useState<string | undefined>(undefined);\n    const { getPayByLinkStores } = useConfigContext().endpoints;\n\n    //TODO: Add error cases and loading cases\n    const { data, error, isFetching } = useFetch(\n        useMemo(\n            () => ({\n                fetchOptions: {\n                    enabled: !!getPayByLinkStores,\n                },\n                queryFn: async () => getPayByLinkStores?.(EMPTY_OBJECT, EMPTY_OBJECT),\n            }),\n            [getPayByLinkStores]\n        )\n    );\n\n    const filteredStores = useMemo(\n        () =>\n            data?.data\n                ?.filter(store => {\n                    if (!store.storeId) return false;\n                    return !storeIds || (typeof storeIds === 'string' ? store.storeId === storeIds : storeIds?.includes(store.storeId));\n                })\n                .map(store => ({\n                    id: store.storeId || '',\n                    name: store.storeCode || '',\n                    storeCode: store.storeCode || '',\n                    description: store.description || '',\n                })),\n        [data, storeIds]\n    );\n\n    const allStores = useMemo(\n        () =>\n            data?.data?.map(store => ({\n                id: store.storeId || '',\n                name: store.storeCode || '',\n                storeCode: store.storeCode || '',\n                description: store.description || '',\n            })),\n        [data]\n    );\n\n    useEffect(() => {\n        if (!selectedStore && filteredStores && filteredStores?.length > 0 && preselect) {\n            setSelectedStore(filteredStores?.[0]?.id);\n        }\n    }, [filteredStores, selectedStore, preselect]);\n\n    const storesError = error as AdyenPlatformExperienceError;\n\n    return { filteredStores, selectedStore, setSelectedStore, isFetching, error: storesError, allStores };\n};\n","import { IPaymentLinkTheme } from '../../../../../../types';\n\nexport const cloneFormData = (formData: FormData) => {\n    const formDataClone = new FormData();\n    for (const [field, value] of formData.entries()) {\n        if (value instanceof File) {\n            formDataClone.set(field, value, value.name);\n        } else formDataClone.set(field, value);\n    }\n    return formDataClone;\n};\n\nexport const getThemePayload = (theme: IPaymentLinkTheme): FormData => {\n    const formData = new FormData();\n    for (const [key, value] of Object.entries(theme)) {\n        if (value) {\n            formData.set(key, value);\n        }\n    }\n    return cloneFormData(formData);\n};\n","import { StateUpdater, useEffect, useMemo } from 'preact/hooks';\nimport { EMPTY_OBJECT } from '../../../../utils';\nimport { useFetch } from '../../../../hooks/useFetch';\nimport { useConfigContext } from '../../../../core/ConfigContext';\nimport { Dispatch } from 'preact/compat';\nimport { getThemePayload } from '../components/PaymentLinkSettingsContainer/utils/getThemePayload';\nimport { IPaymentLinkTheme } from '../../../../types';\nimport { PaymentLinkSettingsPayload } from '../components/PaymentLinkSettingsContainer/context/types';\nimport AdyenPlatformExperienceError from '../../../../core/Errors/AdyenPlatformExperienceError';\n\nexport const useStoreTheme = (\n    selectedStore: string | undefined,\n    enabled: boolean,\n    setEnabled: Dispatch<StateUpdater<boolean>>,\n    setPayload: (payload: PaymentLinkSettingsPayload) => void,\n    setLoading: Dispatch<StateUpdater<boolean>>\n) => {\n    const { getPayByLinkTheme } = useConfigContext().endpoints;\n\n    //TODO: Add error cases and loading cases\n    const { data, error, isFetching } = useFetch(\n        useMemo(\n            () => ({\n                fetchOptions: {\n                    enabled: !!getPayByLinkTheme && enabled && !!selectedStore,\n                    onSuccess: () => {\n                        setEnabled(false);\n                        setLoading(false);\n                    },\n                },\n                queryFn: async () => getPayByLinkTheme?.(EMPTY_OBJECT, { path: { storeId: selectedStore! } }),\n            }),\n            [getPayByLinkTheme, selectedStore, enabled, setEnabled, setLoading]\n        )\n    );\n\n    //TODO: Add IDs for Select component compatibility\n    const theme = useMemo(() => {\n        if (!data && !isFetching && !error) return {};\n        return {\n            ...(data?.brandName ? { brandName: data?.brandName } : {}),\n            ...(data?.logoUrl ? { logo: data?.logoUrl } : {}),\n            ...(data?.fullWidthLogoUrl ? { fullWidthLogo: data?.fullWidthLogoUrl } : {}),\n        };\n    }, [data, isFetching, error]);\n\n    useEffect(() => {\n        setPayload(getThemePayload(theme as IPaymentLinkTheme));\n    }, [theme, setPayload]);\n\n    const themeError = error as AdyenPlatformExperienceError;\n\n    return { theme, isFetching, error: themeError };\n};\n","import { useEffect, useMemo } from 'preact/hooks';\nimport { EMPTY_OBJECT } from '../../../../utils';\nimport { useFetch } from '../../../../hooks/useFetch';\nimport { useConfigContext } from '../../../../core/ConfigContext';\nimport { Dispatch } from 'preact/compat';\nimport { StateUpdater } from 'preact/hooks';\nimport { PaymentLinkSettingsPayload } from '../components/PaymentLinkSettingsContainer/context/types';\nimport AdyenPlatformExperienceError from '../../../../core/Errors/AdyenPlatformExperienceError';\n\nexport const useStoreTermsAndConditions = (\n    selectedStore: string | undefined,\n    enabled: boolean,\n    setEnabled: Dispatch<StateUpdater<boolean>>,\n    setPayload: (payload: PaymentLinkSettingsPayload) => void,\n    setLoading: Dispatch<StateUpdater<boolean>>\n) => {\n    const { getPayByLinkSettings } = useConfigContext().endpoints;\n\n    //TODO: Add error cases and loading cases\n    const { data, isFetching, error } = useFetch(\n        useMemo(\n            () => ({\n                fetchOptions: {\n                    enabled: !!getPayByLinkSettings && enabled && !!selectedStore,\n                    onSuccess: () => {\n                        setEnabled(false);\n                        setLoading(false);\n                    },\n                },\n                queryFn: async () => getPayByLinkSettings?.(EMPTY_OBJECT, { path: { storeId: selectedStore! } }),\n            }),\n            [getPayByLinkSettings, selectedStore, enabled, setEnabled, setLoading]\n        )\n    );\n\n    const termsAndConditions = useMemo(() => {\n        if ((!data || !data?.termsOfServiceUrl) && !isFetching && !error) return { termsOfServiceUrl: '' };\n        return data;\n    }, [data, isFetching, error]);\n\n    useEffect(() => {\n        setPayload(termsAndConditions);\n    }, [termsAndConditions, setPayload]);\n\n    const termsAndConditionsError = error as AdyenPlatformExperienceError;\n\n    return { data: termsAndConditions, isFetching, error: termsAndConditionsError };\n};\n","import { IPaymentLinkTermsAndConditions } from '../../../../../types';\nimport { PaymentLinkSettingsData, PaymentLinkSettingsPayload, ThemeFormData } from '../PaymentLinkSettingsContainer/context/types';\nimport { hasOwnProperty } from '../../../../../utils';\n\nexport type LogoTypes = 'logo' | 'fullWidthLogo';\n\nexport interface ThemeFormProps {\n    theme: ThemeFormData;\n    initialPayload?: FormData;\n}\n\nexport const ThemeFormDataRequest = {\n    BRAND: 'brandName',\n    LOGO: 'logo',\n    FULL_WIDTH_LOGO: 'fullWidthLogo',\n};\n\nexport const isTermsAndConditionsData = (data: PaymentLinkSettingsData): data is IPaymentLinkTermsAndConditions => {\n    const dataObj = typeof data === 'object' ? data : {};\n    return hasOwnProperty(dataObj, 'termsOfServiceUrl');\n};\n\nexport const isThemeData = (data: PaymentLinkSettingsData): data is ThemeFormData => {\n    const dataObj = typeof data === 'object' ? data : {};\n    return hasOwnProperty(dataObj, 'brandName');\n};\n\nexport const isThemePayload = (data: PaymentLinkSettingsPayload): data is FormData => {\n    return data instanceof FormData;\n};\n","import { useConfigContext } from '../../../../core/ConfigContext';\nimport useMutation from '../../../../hooks/useMutation/useMutation';\nimport { StateUpdater, useCallback, useEffect, useRef } from 'preact/hooks';\nimport { MenuItem } from '../components/PaymentLinkSettingsContainer/context/constants';\nimport { isFunction, isUndefined } from '../../../../utils';\nimport {\n    PaymentLinkSettingsData,\n    PaymentLinkSettingsItem,\n    PaymentLinkSettingsPayload,\n} from '../components/PaymentLinkSettingsContainer/context/types';\nimport { getThemePayload } from '../components/PaymentLinkSettingsContainer/utils/getThemePayload';\nimport { Dispatch } from 'preact/compat';\nimport { isThemePayload } from '../components/PaymentLinkThemeContainer/types';\n\nexport const useSaveAction = (\n    setIsSaving: Dispatch<StateUpdater<boolean>>,\n    setIsSaveError: Dispatch<StateUpdater<boolean>>,\n    setIsSaveSuccess: Dispatch<StateUpdater<boolean>>,\n    selectedStore: string | undefined,\n    payload: PaymentLinkSettingsPayload,\n    activeMenuItem: PaymentLinkSettingsItem | null,\n    getIsValid: () => boolean,\n    setSaveActionCalled: Dispatch<StateUpdater<boolean | undefined>>,\n    setSavedData: (data: PaymentLinkSettingsData) => void,\n    setPayload: (payload: PaymentLinkSettingsPayload) => void,\n    navigateBack?: () => void\n) => {\n    const { updatePayByLinkTheme, savePayByLinkSettings } = useConfigContext().endpoints;\n    const navigationTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n    useEffect(() => {\n        return () => {\n            if (navigationTimeoutRef.current) {\n                clearTimeout(navigationTimeoutRef.current);\n            }\n        };\n    }, []);\n\n    const onSaveComplete = useCallback(() => {\n        if (navigateBack && isFunction(navigateBack)) {\n            navigationTimeoutRef.current = setTimeout(() => {\n                navigateBack();\n            }, 500);\n        } else {\n            setIsSaving(false);\n        }\n    }, [navigateBack, setIsSaving]);\n\n    const savePayByLinkTheme = useMutation({\n        queryFn: updatePayByLinkTheme,\n        options: {\n            onSuccess: data => {\n                const themeData = { brandName: data?.brandName, logo: data?.logoUrl, fullWidthLogo: data?.fullWidthLogoUrl };\n                setSavedData(themeData);\n                setPayload(getThemePayload(themeData));\n                setIsSaveError(false);\n                setIsSaveSuccess(true);\n                setIsSaving(false);\n            },\n            onError: () => {\n                setIsSaveError(true);\n                setIsSaveSuccess(false);\n                setIsSaving(false);\n            },\n        },\n    });\n\n    const onSaveTheme = useCallback(() => {\n        if (!selectedStore || isUndefined(payload) || !getIsValid()) return;\n        if (!isThemePayload(payload)) return;\n        setIsSaving(true);\n        savePayByLinkTheme.mutate({ contentType: 'multipart/form-data', body: payload }, { path: { storeId: selectedStore! } });\n    }, [savePayByLinkTheme, selectedStore, payload, getIsValid, setIsSaving]);\n\n    const updatePayByLinkTermsAndConditions = useMutation({\n        queryFn: savePayByLinkSettings,\n        options: {\n            onSuccess: data => {\n                const savedData = !data || !data?.termsOfServiceUrl ? { termsOfServiceUrl: '' } : data;\n                setSavedData(savedData);\n                setPayload(savedData);\n                setIsSaveError(false);\n                setIsSaveSuccess(true);\n                onSaveComplete();\n            },\n            onError: () => {\n                setIsSaveError(true);\n                setIsSaveSuccess(false);\n                setIsSaving(false);\n            },\n        },\n    });\n\n    const onSaveTermsAndConditions = useCallback(() => {\n        if (!selectedStore || isUndefined(payload) || !getIsValid()) return;\n        if (isThemePayload(payload)) return;\n        setIsSaving(true);\n        updatePayByLinkTermsAndConditions.mutate(\n            {\n                contentType: 'application/json',\n                body: payload,\n            },\n            { path: { storeId: selectedStore! } }\n        );\n    }, [updatePayByLinkTermsAndConditions, selectedStore, payload, getIsValid, setIsSaving]);\n\n    const onSave = useCallback(() => {\n        if (!activeMenuItem) return;\n        setSaveActionCalled(true);\n        if (activeMenuItem === MenuItem.theme) return onSaveTheme();\n        if (activeMenuItem === MenuItem.termsAndConditions) return onSaveTermsAndConditions();\n    }, [activeMenuItem, onSaveTermsAndConditions, onSaveTheme, setSaveActionCalled]);\n\n    return { onSave };\n};\n","import { useConfigContext } from '../../../../core/ConfigContext';\n\nexport const useSettingsPermission = () => {\n    const { savePayByLinkSettings, getPayByLinkSettings, getPayByLinkTheme, updatePayByLinkTheme } = useConfigContext().endpoints;\n\n    return {\n        themeEnabled: !!getPayByLinkTheme && !!updatePayByLinkTheme,\n        termsAndConditionsEnabled: !!getPayByLinkSettings && !!savePayByLinkSettings,\n    };\n};\n","import { memo, PropsWithChildren } from 'preact/compat';\nimport { createContext } from 'preact';\nimport { useCallback, useContext, useRef, useState, useEffect, useMemo } from 'preact/hooks';\nimport { noop } from '../../../../../../utils';\nimport { IPaymentLinkSettingsContext, MenuItemType, PaymentLinkSettingsData, PaymentLinkSettingsItem, PaymentLinkSettingsPayload } from './types';\nimport { DEFAULT_MENU_ITEM, MenuItem } from './constants';\nimport { useStores } from '../../../../../../hooks/useStores';\nimport { SecondaryNavItem } from '../../../../../internal/SecondaryNav';\nimport { useStoreTheme } from '../../../hooks/useStoreTheme';\nimport { useStoreTermsAndConditions } from '../../../hooks/useStoreTermsAndConditions';\nimport { useSaveAction } from '../../../hooks/useSaveAction';\nimport { containerQueries, useResponsiveContainer } from '../../../../../../hooks/useResponsiveContainer';\nimport { useSettingsPermission } from '../../../hooks/useSettingsPermission';\n\nexport const PaymentLinkSettingsContext = createContext<IPaymentLinkSettingsContext>({\n    activeMenuItem: MenuItem.theme,\n    payload: undefined,\n    setPayload: noop,\n    selectedStore: undefined,\n    setSelectedMenuItem: noop,\n    saveActionCalled: undefined,\n    setIsValid: noop,\n    getIsValid: () => false,\n    setSaveActionCalled: noop,\n    filteredStores: undefined,\n    allStores: undefined,\n    setSelectedStore: noop,\n    savedData: undefined,\n    setSavedData: () => undefined,\n    menuItems: undefined,\n    isLoadingContent: true,\n    isSaveError: undefined,\n    isSaveSuccess: undefined,\n    isSaving: undefined,\n    isShowingRequirements: false,\n    onSave: noop,\n    setIsSaveError: noop,\n    setIsSaveSuccess: noop,\n    setIsShowingRequirements: noop,\n    isLoadingStores: false,\n    storesError: undefined,\n    termsAndConditionsError: undefined,\n    themeError: undefined,\n});\n\nexport const PaymentLinkSettingsProvider = memo(\n    ({\n        children,\n        selectedMenuItems,\n        storeIds,\n        embeddedInOverview,\n        navigateBack,\n    }: PropsWithChildren<{\n        selectedMenuItems: MenuItemType[];\n        storeIds?: string | string[];\n        embeddedInOverview?: boolean;\n        navigateBack?: () => void;\n    }>) => {\n        const [isShowingRequirements, setIsShowingRequirements] = useState(false);\n        const [menuItems] = useState<MenuItemType[]>(selectedMenuItems);\n        const [loading, setLoading] = useState<boolean>(false);\n        const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n        const { themeEnabled, termsAndConditionsEnabled } = useSettingsPermission();\n\n        const menuItemPreSelect = useMemo(() => {\n            if (isSmContainer && menuItems.length > 1) return;\n            return menuItems.length > 0 && menuItems[0] ? menuItems[0].value : DEFAULT_MENU_ITEM;\n        }, [menuItems, isSmContainer]);\n\n        const [activeMenuItem, setActiveMenuItem] = useState<PaymentLinkSettingsItem | null>(null);\n        const [payload, setPayload] = useState<PaymentLinkSettingsPayload>(undefined);\n        const [savedData, setSavedData] = useState<PaymentLinkSettingsData>(undefined);\n        const isValid = useRef(false);\n        const [saveActionCalled, setSaveActionCalled] = useState<boolean | undefined>(false);\n        const { filteredStores, selectedStore, setSelectedStore, isFetching: isLoadingStores, error: storesError, allStores } = useStores(storeIds);\n        const [isSaving, setIsSaving] = useState(false);\n        const [isSaveError, setIsSaveError] = useState(false);\n        const [isSaveSuccess, setIsSaveSuccess] = useState(false);\n\n        useEffect(() => {\n            if (menuItemPreSelect) {\n                setActiveMenuItem(menuItemPreSelect);\n            }\n        }, [menuItemPreSelect]);\n\n        const getIsValid = useCallback(() => {\n            return isValid.current;\n        }, []);\n\n        const { onSave } = useSaveAction(\n            setIsSaving,\n            setIsSaveError,\n            setIsSaveSuccess,\n            selectedStore,\n            payload,\n            activeMenuItem,\n            getIsValid,\n            setSaveActionCalled,\n            setSavedData,\n            setPayload,\n            navigateBack\n        );\n\n        const [fetchThemeEnabled, setFetchThemeEnabled] = useState<boolean>(false);\n        const [fetchTermsAndConditionsEnabled, setFetchTermsAndConditionsEnabled] = useState<boolean>(false);\n\n        const resetState = useCallback(() => {\n            setIsSaving(false);\n            setIsSaveError(false);\n            setIsSaveSuccess(false);\n            setSaveActionCalled(false);\n            setSavedData(undefined);\n            setPayload(undefined);\n        }, []);\n\n        useEffect(() => {\n            resetState();\n            switch (activeMenuItem) {\n                case MenuItem.theme:\n                    setLoading(true);\n                    selectedStore && setFetchThemeEnabled(true);\n                    break;\n                case MenuItem.termsAndConditions:\n                    setLoading(true);\n                    selectedStore && setFetchTermsAndConditionsEnabled(true);\n                    break;\n            }\n        }, [activeMenuItem, selectedStore, resetState]);\n\n        const onPayloadChange = useCallback(\n            (payload: PaymentLinkSettingsPayload) => {\n                if (payload) {\n                    setPayload(payload);\n                }\n            },\n            [setPayload]\n        );\n\n        const {\n            theme,\n            isFetching: loadingThemes,\n            error: themeError,\n        } = useStoreTheme(selectedStore, fetchThemeEnabled, setFetchThemeEnabled, onPayloadChange, setLoading);\n        const {\n            data: termsAndConditions,\n            isFetching: loadingTermsAndConditions,\n            error: termsAndConditionsError,\n        } = useStoreTermsAndConditions(selectedStore, fetchTermsAndConditionsEnabled, setFetchTermsAndConditionsEnabled, onPayloadChange, setLoading);\n\n        const activeData = useMemo(() => {\n            switch (activeMenuItem) {\n                case MenuItem.theme:\n                    if (loadingThemes) return;\n                    return theme;\n                case MenuItem.termsAndConditions:\n                    if (loadingTermsAndConditions) return;\n                    return termsAndConditions;\n                default:\n                    return;\n            }\n        }, [activeMenuItem, theme, termsAndConditions, loadingThemes, loadingTermsAndConditions]);\n\n        useEffect(() => {\n            if (activeData) {\n                setSavedData(activeData);\n            }\n        }, [activeData, setSavedData]);\n\n        useEffect(() => {\n            if (!selectedStore) setSelectedStore(filteredStores?.[0]?.id);\n        }, [filteredStores, selectedStore, setSelectedStore]);\n\n        const onDataSave = useCallback(\n            (data: PaymentLinkSettingsData) => {\n                setSavedData(data);\n            },\n            [setSavedData]\n        );\n\n        useEffect(() => {\n            if (themeError || termsAndConditionsError) setLoading(false);\n        }, [themeError, termsAndConditionsError]);\n\n        const setIsValid = useCallback((validity: boolean) => {\n            if (isValid.current !== validity) {\n                isValid.current = validity;\n            }\n        }, []);\n\n        const setSelectedMenuItem = useCallback(\n            (item: SecondaryNavItem<PaymentLinkSettingsItem>) => {\n                if (activeMenuItem !== item.value) {\n                    setLoading(true);\n                    setActiveMenuItem(item.value);\n                }\n            },\n            [activeMenuItem]\n        );\n\n        const hasPermission = useMemo(() => {\n            if (!activeMenuItem) return false;\n            return activeMenuItem === MenuItem.theme ? themeEnabled : termsAndConditionsEnabled;\n        }, [activeMenuItem, termsAndConditionsEnabled, themeEnabled]);\n\n        const contentLoading = useMemo(() => {\n            if (!hasPermission) return false;\n            return loading || loadingThemes || loadingTermsAndConditions || isLoadingStores;\n        }, [loading, loadingThemes, loadingTermsAndConditions, isLoadingStores, hasPermission]);\n\n        return (\n            <PaymentLinkSettingsContext.Provider\n                value={{\n                    isLoadingContent: contentLoading,\n                    setPayload: onPayloadChange,\n                    menuItems,\n                    payload,\n                    activeMenuItem,\n                    selectedStore,\n                    setSelectedMenuItem,\n                    getIsValid,\n                    setIsValid,\n                    saveActionCalled: saveActionCalled,\n                    setSaveActionCalled: setSaveActionCalled,\n                    filteredStores,\n                    setSelectedStore,\n                    savedData,\n                    setSavedData: onDataSave,\n                    isSaveError,\n                    isSaveSuccess,\n                    isSaving,\n                    isShowingRequirements,\n                    setIsShowingRequirements,\n                    setIsSaveError,\n                    setIsSaveSuccess,\n                    onSave: onSave,\n                    allStores,\n                    isLoadingStores,\n                    storesError,\n                    embeddedInOverview,\n                    themeError,\n                    termsAndConditionsError,\n                }}\n            >\n                {!activeMenuItem && !isSmContainer ? null : children}\n            </PaymentLinkSettingsContext.Provider>\n        );\n    }\n);\n\nexport const usePaymentLinkSettingsContext = () => useContext(PaymentLinkSettingsContext);\nexport default usePaymentLinkSettingsContext;\n","import './SecondaryNav.scss';\nimport cx from 'classnames';\nimport { Divider } from '../Divider/Divider';\nimport { containerQueries, useResponsiveContainer } from '../../../hooks/useResponsiveContainer';\nimport { useCallback } from 'preact/hooks';\nimport { VNode } from 'preact';\nimport Icon from '../Icon';\nimport Button from '../Button/Button';\nimport Typography from '../Typography/Typography';\nimport { TypographyVariant } from '../Typography/types';\n\ninterface SecondaryNavProps<T> {\n    className?: string;\n    items: T[];\n    activeValue: string | null;\n    onValueChange: (value: T) => void;\n    renderContent: (activeMenu: string) => VNode<any>;\n    renderLoadingContent: (activeMenu: string | null) => VNode<any>;\n    renderHeader: () => VNode<any>;\n    onContentVisibilityChange: (contentVisible: boolean) => void;\n    loading?: boolean;\n    contentVisible?: boolean;\n}\n\nexport interface SecondaryNavItem<T extends string = string> {\n    value: T;\n    label: string;\n}\n\nconst LoadingSkeleton = ({ rowNumber, className }: { rowNumber: number; className?: string }) => (\n    <div className={cx('adyen-pe-secondary-nav__skeleton', className)}>\n        {[...Array(rowNumber)].map((_, index) => (\n            <div key={index} className=\"adyen-pe-secondary-nav__skeleton-item\"></div>\n        ))}\n    </div>\n);\n\nexport const SecondaryNav = <T extends SecondaryNavItem>({\n    renderHeader,\n    className,\n    items,\n    activeValue,\n    onValueChange,\n    loading,\n    onContentVisibilityChange,\n    renderContent,\n    contentVisible,\n    renderLoadingContent,\n}: SecondaryNavProps<T>) => {\n    const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    const onClick = useCallback(\n        (item: T) => {\n            onValueChange(item);\n            if (isSmContainer) {\n                onContentVisibilityChange(true);\n            }\n        },\n        [isSmContainer, onValueChange, onContentVisibilityChange]\n    );\n\n    if (loading) {\n        return !isSmContainer ? (\n            <div className={cx('adyen-pe-secondary-nav')}>\n                <div className={'adyen-pe-secondary-nav__container'}>\n                    <div className={'adyen-pe-secondary-nav__skeleton--aside'}>\n                        <LoadingSkeleton rowNumber={1} />\n                        <div className={'adyen-pe-secondary-nav__list'}>\n                            <LoadingSkeleton rowNumber={2} />\n                        </div>\n                    </div>\n                    <Divider variant=\"vertical\" />\n                    <div className={'adyen-pe-secondary-nav__loading-content'}>{renderLoadingContent(activeValue)}</div>\n                </div>\n            </div>\n        ) : (\n            <LoadingSkeleton rowNumber={3} className={'adyen-pe-secondary-nav__skeleton--content'} />\n        );\n    }\n\n    return (\n        <div className={cx('adyen-pe-secondary-nav', className, { 'adyen-pe-secondary-nav--mobile': isSmContainer })}>\n            <div className={cx('adyen-pe-secondary-nav__container', { 'adyen-pe-secondary-nav__container-mobile': isSmContainer })}>\n                {(!contentVisible || !isSmContainer) && (\n                    <aside className={cx('adyen-pe-secondary-nav--sidebar', { 'adyen-pe-secondary-nav--sidebar-mobile': isSmContainer })}>\n                        {renderHeader()}\n                        <ul className={cx('adyen-pe-secondary-nav__list', 'adyen-pe-secondary-nav__menu-list')}>\n                            {items.map(item => (\n                                <li key={item.label} className=\"adyen-pe-secondary-nav__list-item\">\n                                    <Button\n                                        aria-selected={item.value === activeValue}\n                                        className={cx('adyen-pe-secondary-nav__item', {\n                                            'adyen-pe-secondary-nav__item--active': item.value === activeValue,\n                                            'adyen-pe-secondary-nav__item--mobile': isSmContainer,\n                                        })}\n                                        iconRight={isSmContainer ? <Icon name=\"chevron-right\" /> : undefined}\n                                        onClick={onClick.bind(null, item)}\n                                    >\n                                        <Typography\n                                            variant={TypographyVariant.BODY}\n                                            stronger\n                                            data-testid=\"typography\"\n                                            className=\"adyen-pe-secondary-nav__item-label\"\n                                        >\n                                            {item.label}\n                                        </Typography>\n                                    </Button>\n                                </li>\n                            ))}\n                        </ul>\n                    </aside>\n                )}\n                {!isSmContainer && <Divider variant=\"vertical\" />}\n                {contentVisible && activeValue && renderContent(activeValue)}\n            </div>\n        </div>\n    );\n};\n","export const BASE_CLASS_NAME = 'adyen-pe-payment-link-settings';\nexport const CONTAINER_CLASS_NAME = BASE_CLASS_NAME + '__content';\nexport const CONTENT_CONTAINER_CLASS_NAME = BASE_CLASS_NAME + '__content-container';\nexport const CONTENT_CONTAINER_MOBILE_CLASS_NAME = BASE_CLASS_NAME + '__container-container-item--mobile';\nexport const SIDEBAR_CONTAINER_CLASS_NAME = BASE_CLASS_NAME + '__sidebar-container';\nexport const SECONDARY_NAV_CLASS_NAME = BASE_CLASS_NAME + '__secondary-nav';\n","import Typography from '../../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../Typography/types';\nimport Icon from '../../Icon';\nimport './StoreSelectorButton.scss';\n\ninterface StoreSelectorButtonContentProps {\n    name?: string;\n    description?: string;\n}\n\nexport const StoreSelectorButtonContent = ({ name, description }: StoreSelectorButtonContentProps) => (\n    <div className=\"adyen-pe-store-selector-button\">\n        <div className=\"adyen-pe-store-selector-button__labels\">\n            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} className=\"adyen-pe-store-selector-button__name\">\n                {name}\n            </Typography>\n            <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION} className=\"adyen-pe-store-selector-button__description\">\n                {description}\n            </Typography>\n        </div>\n\n        <Icon name=\"chevron-up-down\" size=\"medium\" className=\"adyen-pe-store-selector-button__icon\" />\n    </div>\n);\n","import Typography from '../../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../Typography/types';\nimport './StoreSelectorItem.scss';\n\ninterface StoreSelectorItemProps {\n    name?: string;\n    description?: string;\n}\n\nexport const StoreSelectorItem = ({ name, description }: StoreSelectorItemProps) => (\n    <div className=\"adyen-pe-store-selector-item\">\n        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} className=\"adyen-pe-store-selector-item__name\">\n            {name}\n        </Typography>\n        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.CAPTION} className=\"adyen-pe-store-selector-item__description\">\n            {description}\n        </Typography>\n    </div>\n);\n","import { useCallback } from 'preact/hooks';\nimport Select from '../FormFields/Select';\nimport { StoreSelectorButtonContent } from './StoreSelectorButton/StoreSelectorButton';\nimport { StoreSelectorItem } from './StoreSelectorItem/StoreSelectorItem';\nimport { StoreSelectorItemParams, StoreSelectorProps } from './types';\nimport { SelectChangeEvent } from '../FormFields/Select/types';\nimport { containerQueries, useResponsiveContainer } from '../../../hooks/useResponsiveContainer';\nimport './StoreSelector.scss';\n\nexport const StoreSelector = ({ stores = [], selectedStoreId, setSelectedStoreId }: StoreSelectorProps) => {\n    const isMobileContainer = useResponsiveContainer(containerQueries.down.xs);\n    const handleStoreChange = useCallback(\n        ({ target }: SelectChangeEvent) => {\n            setSelectedStoreId(target.value);\n        },\n        [setSelectedStoreId]\n    );\n\n    const renderButtonContent = (data: { item?: StoreSelectorItemParams }) => {\n        if (!data.item) {\n            return null;\n        }\n        return <StoreSelectorButtonContent name={data.item.storeCode} description={data.item.description} />;\n    };\n\n    if (!stores || !stores.length || stores.length === 1) {\n        return null;\n    }\n\n    return (\n        <Select\n            className={'adyen-pe-dropdown__store'}\n            filterable={false}\n            items={stores}\n            multiSelect={false}\n            onChange={handleStoreChange}\n            renderButtonContent={renderButtonContent}\n            renderListItem={data => <StoreSelectorItem name={data.item.name} description={data.item.description} />}\n            selected={selectedStoreId}\n            setToTargetWidth={isMobileContainer}\n            showOverlay={false}\n            withoutCollapseIndicator={true}\n        />\n    );\n};\n","import cx from 'classnames';\nimport { useEffect, useState, useRef, useCallback } from 'preact/hooks';\n\nimport { CheckboxProps } from './types';\nimport './Checkbox.scss';\nimport Icon from '../Icon';\nimport Typography from '../Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../Typography/types';\nimport { uniqueId } from '../../../utils';\nimport { h } from 'preact';\n\nexport const Checkbox = ({ checked, error, description, disabled, id, label, name, value, onInput, className, ...props }: CheckboxProps) => {\n    const [checkedInternal, setCheckedInternal] = useState(checked);\n    const inputRef = useRef(uniqueId());\n\n    const inputId = id || inputRef.current;\n\n    const handleInput = useCallback(\n        (event: h.JSX.TargetedEvent<HTMLInputElement>) => {\n            onInput?.(event);\n            if (checked === undefined) {\n                setCheckedInternal(event?.currentTarget?.checked ?? false);\n            }\n        },\n        [checked, onInput]\n    );\n\n    useEffect(() => {\n        setCheckedInternal(checked);\n    }, [checked]);\n\n    return (\n        <div className={cx('adyen-pe-checkbox', className)}>\n            <input\n                name={name}\n                type=\"checkbox\"\n                checked={checkedInternal}\n                disabled={disabled}\n                className={cx('adyen-pe-visually-hidden adyen-pe-checkbox__input')}\n                id={inputId}\n                onInput={handleInput}\n                {...props}\n            />\n            <label className=\"adyen-pe-checkbox__label\" htmlFor={inputId}>\n                {checkedInternal ? (\n                    <Icon name=\"checkmark-square-fill\" className=\"adyen-pe-checkbox__icon\" />\n                ) : (\n                    <Icon name=\"square\" className={cx('adyen-pe-checkbox__icon', { 'adyen-pe-checkbox__icon--error': error })} />\n                )}\n                <div className=\"adyen-pe-checkbox__label-content\">\n                    <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY}>\n                        {label}\n                    </Typography>\n                    {description && (\n                        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} className=\"adyen-pe-checkbox__description\">\n                            {description}\n                        </Typography>\n                    )}\n                </div>\n            </label>\n        </div>\n    );\n};\n","export const isValidURL = (termsAndConditionsURL: string) => {\n    if (termsAndConditionsURL === '') return true;\n    try {\n        new URL(termsAndConditionsURL);\n        return true;\n    } catch {\n        return false;\n    }\n};\n","import { useCallback, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../../../core/Context/useCoreContext';\nimport localTermsRequirementsConfig from '../../../../../../config/payByLink/termsRequirementsConfig.json';\nimport { TranslationKey } from '../../../../../../translations';\n\nexport interface TermsRequirementItem {\n    key: TranslationKey;\n}\n\nexport interface TermsRequirementSection {\n    id: string;\n    titleKey: TranslationKey;\n    descriptionKey: TranslationKey;\n    items: TermsRequirementItem[];\n}\n\nexport interface TermsRequirementsConfig {\n    titleKey: TranslationKey;\n    sections: TermsRequirementSection[];\n}\n\nexport const useTermsRequirementsConfig = () => {\n    const { getCdnConfig } = useCoreContext();\n\n    const localTerms = localTermsRequirementsConfig as unknown as TermsRequirementsConfig;\n    const [termsRequirementsConfig, setTermsRequirementsConfig] = useState<TermsRequirementsConfig>(localTerms);\n\n    const getTermsRequirementsConfig = useCallback(async () => {\n        const config = await getCdnConfig?.<TermsRequirementsConfig>({\n            subFolder: 'payByLink',\n            name: 'termsRequirementsConfig',\n            fallback: localTerms,\n        });\n\n        setTermsRequirementsConfig(config ?? localTerms);\n    }, [getCdnConfig, localTerms]);\n\n    return {\n        termsRequirementsConfig,\n        getTermsRequirementsConfig,\n    };\n};\n","import { useCallback, useEffect } from 'preact/hooks';\nimport useCoreContext from '../../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../../internal/Typography/Typography';\nimport { TypographyVariant } from '../../../../../internal/Typography/types';\nimport { useTermsRequirementsConfig } from './useTermsRequirementsConfig';\nimport './Requirements.scss';\nimport Button from '../../../../../internal/Button';\nimport { ButtonVariant } from '../../../../../internal/Button/types';\nimport Modal from '../../../../../internal/Modal';\n\nexport const Requirements = ({\n    onGoBack,\n    acceptRequirements,\n    termsAndConditionsURL,\n    embeddedInOverview = false,\n}: {\n    onGoBack: () => void;\n    acceptRequirements: () => void;\n    termsAndConditionsURL?: string;\n    embeddedInOverview?: boolean;\n}) => {\n    const { termsRequirementsConfig, getTermsRequirementsConfig } = useTermsRequirementsConfig();\n    const { i18n } = useCoreContext();\n\n    const onAcceptRequirements = useCallback(() => {\n        acceptRequirements();\n        onGoBack();\n    }, [acceptRequirements, onGoBack]);\n\n    useEffect(() => {\n        void getTermsRequirementsConfig();\n    }, [getTermsRequirementsConfig]);\n\n    const content = (\n        <div className=\"adyen-pe-payment-link-requirements\">\n            <Typography variant={TypographyVariant.SUBTITLE} stronger>\n                {i18n.get(termsRequirementsConfig.titleKey)}\n            </Typography>\n            <div className=\"adyen-pe-payment-link-requirements__sections-container\">\n                {termsRequirementsConfig.sections.map(section => (\n                    <div key={section.id} className=\"adyen-pe-payment-link-requirements__section\">\n                        <Typography variant={TypographyVariant.SUBTITLE} stronger>\n                            {i18n.get(section.titleKey)}\n                        </Typography>\n                        <div className=\"adyen-pe-payment-link-requirements__section-content\">\n                            <Typography className=\"adyen-pe-payment-link-requirements__description\" variant={TypographyVariant.BODY}>\n                                {i18n.get(section.descriptionKey)}\n                            </Typography>\n                            <ul className=\"adyen-pe-payment-link-requirements__list\">\n                                {section.items.map(item => (\n                                    <li key={item.key}>\n                                        <Typography variant={TypographyVariant.BODY}>{i18n.get(item.key)}</Typography>\n                                    </li>\n                                ))}\n                            </ul>\n                        </div>\n                    </div>\n                ))}\n            </div>\n            <div className=\"adyen-pe-payment-link-requirements__buttons-container\">\n                <Button variant={ButtonVariant.SECONDARY} onClick={onGoBack}>\n                    {i18n.get('payByLink.settings.terms.requirements.actions.goBack')}\n                </Button>\n                {termsAndConditionsURL && (\n                    <Button variant={ButtonVariant.PRIMARY} onClick={onAcceptRequirements}>\n                        {i18n.get('payByLink.settings.terms.requirements.actions.confirmRequirements')}\n                    </Button>\n                )}\n            </div>\n        </div>\n    );\n\n    if (embeddedInOverview) {\n        return content;\n    }\n\n    return (\n        <Modal isOpen onClose={onGoBack} isDismissible={true} headerWithBorder={false} size=\"large\">\n            {content}\n        </Modal>\n    );\n};\n","import { uniqueId } from '../../../../../utils';\nimport './TermsAndConditions.scss';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { h } from 'preact';\nimport { Checkbox } from '../../../../internal/Checkbox';\nimport InputText from '../../../../internal/FormFields/InputText';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { AlertTypeOption, AlertVariantOption } from '../../../../internal/Alert/types';\nimport Alert from '../../../../internal/Alert/Alert';\nimport Icon from '../../../../internal/Icon';\nimport { IPaymentLinkTermsAndConditions } from '../../../../../types';\nimport usePaymentLinkSettingsContext from '../PaymentLinkSettingsContainer/context/context';\nimport { isTermsAndConditionsData } from '../PaymentLinkThemeContainer/types';\nimport { Translation } from '../../../../internal/Translation';\nimport { isValidURL } from '../PaymentLinkSettingsContainer/utils/validateTermsAndConditionsURL';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport Button from '../../../../internal/Button';\nimport { Requirements } from './Requirements/Requirements';\nimport cx from 'classnames';\n\nexport const TermsAndConditions = ({ data, initialData }: { data: IPaymentLinkTermsAndConditions; initialData: IPaymentLinkTermsAndConditions }) => {\n    const { i18n } = useCoreContext();\n    const checkboxIdentifier = useRef(uniqueId());\n    const [termsAndConditionsURL, setTermsAndConditionsURL] = useState<string>(data?.termsOfServiceUrl ?? '');\n    const [isRequirementsChecked, setIsRequirementsChecked] = useState<boolean | undefined>(undefined);\n    const [showNotCheckedRequirementsError, setShowNotCheckedRequirementsError] = useState(false);\n    const [showInvalidURL, setShowInvalidURL] = useState(false);\n    const [isTermsAndConditionsChanged, setIsTermsAndConditionsChanged] = useState(false);\n    const [disabled, setDisabled] = useState(false);\n    const userRequirementsInput = useRef(false);\n    const {\n        savedData,\n        setPayload,\n        saveActionCalled,\n        setIsValid,\n        isSaving,\n        setSaveActionCalled,\n        setIsSaveError,\n        setIsSaveSuccess,\n        isShowingRequirements,\n        embeddedInOverview,\n        setIsShowingRequirements,\n    } = usePaymentLinkSettingsContext();\n\n    useEffect(() => {\n        if (isRequirementsChecked && isValidURL(termsAndConditionsURL)) {\n            setIsValid(true);\n        } else {\n            setIsValid(false);\n        }\n    }, [isRequirementsChecked, termsAndConditionsURL, setIsValid, setPayload]);\n\n    useEffect(() => {\n        userRequirementsInput.current = false;\n    }, [savedData]);\n\n    useEffect(() => {\n        if (saveActionCalled) {\n            setShowInvalidURL(Boolean(termsAndConditionsURL && !isValidURL(termsAndConditionsURL)));\n            setShowNotCheckedRequirementsError(!isRequirementsChecked);\n            setSaveActionCalled(false);\n            setIsSaveSuccess(false);\n            setIsSaveError(false);\n        }\n    }, [termsAndConditionsURL, isRequirementsChecked, saveActionCalled, setSaveActionCalled, setPayload, setIsSaveError, setIsSaveSuccess]);\n\n    useEffect(() => {\n        let data = isTermsAndConditionsData(savedData) ? (savedData as IPaymentLinkTermsAndConditions) : undefined;\n        if (!data) data = initialData;\n        const hasEmptyInitialValue = !data || !data.termsOfServiceUrl;\n        const isSameWithInitialValue =\n            data && (data?.termsOfServiceUrl === termsAndConditionsURL || (!data.termsOfServiceUrl && termsAndConditionsURL === ''));\n        if (isSameWithInitialValue) {\n            if (!hasEmptyInitialValue) {\n                setDisabled(true);\n                setIsRequirementsChecked(true);\n            }\n            setIsTermsAndConditionsChanged(false);\n        } else {\n            setDisabled(false);\n            setIsTermsAndConditionsChanged(true);\n            setIsRequirementsChecked(userRequirementsInput.current);\n        }\n    }, [termsAndConditionsURL, savedData, initialData]);\n\n    const onTermsAndConditionsURLInput = useCallback(\n        (e: h.JSX.TargetedEvent<HTMLInputElement>) => {\n            e.preventDefault();\n            setShowInvalidURL(false);\n            setTermsAndConditionsURL(e?.currentTarget?.value);\n            if (isValidURL(e?.currentTarget?.value)) {\n                setPayload({ termsOfServiceUrl: e?.currentTarget?.value });\n            }\n        },\n        [setPayload]\n    );\n\n    const [requirementsOpenedOnce, setRequirementsOpenedOnce] = useState<boolean>(false);\n\n    const onCheckboxInput = useCallback(\n        (e: h.JSX.TargetedEvent<HTMLInputElement>) => {\n            e.preventDefault();\n            if (e.currentTarget?.checked) setShowNotCheckedRequirementsError(false);\n            if (!userRequirementsInput.current && e.currentTarget?.checked && !requirementsOpenedOnce) {\n                setIsShowingRequirements(true);\n                setRequirementsOpenedOnce(true);\n            }\n            userRequirementsInput.current = e.currentTarget?.checked;\n            setIsRequirementsChecked(e.currentTarget?.checked);\n        },\n        [requirementsOpenedOnce, setIsShowingRequirements]\n    );\n\n    const openRequirements = useCallback(() => {\n        setIsShowingRequirements(true);\n        setRequirementsOpenedOnce(true);\n    }, [setIsShowingRequirements]);\n\n    const checkboxLabel = useMemo(() => {\n        return (\n            <Translation\n                translationKey={'payByLink.settings.termsAndConditions.requirement.checkbox.part1'}\n                fills={{\n                    requirements: (\n                        <Button\n                            className=\"adyen-pe-payment-link-settings-terms-and-conditions__requirements-link\"\n                            variant={ButtonVariant.TERTIARY}\n                            onClick={openRequirements}\n                        >\n                            {i18n.get('payByLink.settings.termsAndConditions.requirement.checkbox.part2')}\n                        </Button>\n                    ),\n                }}\n            />\n        );\n    }, [i18n, openRequirements]);\n\n    const closeModal = useCallback(() => setIsShowingRequirements(false), [setIsShowingRequirements]);\n\n    const acceptRequirements = useCallback(() => setIsRequirementsChecked(true), []);\n\n    return (\n        <section className=\"adyen-pe-payment-link-settings-terms-and-conditions\">\n            <div\n                className={cx('adyen-pe-payment-link-settings-terms-and-conditions__content', {\n                    'adyen-pe-payment-link-settings-terms-and-conditions__content--hidden': isShowingRequirements,\n                })}\n            >\n                <div className=\"adyen-pe-payment-link-settings__input-container\">\n                    <label\n                        htmlFor={checkboxIdentifier.current}\n                        aria-labelledby={checkboxIdentifier.current}\n                        className=\"adyen-pe-payment-link-settings-terms-and-conditions-input__label\"\n                    >\n                        <Typography\n                            variant={TypographyVariant.BODY}\n                            stronger\n                            className=\"adyen-pe-payment-link-settings-terms-and-conditions-input__label--info-text\"\n                        >\n                            {i18n.get('payByLink.settings.termsAndConditions.urlInput.label')}\n                        </Typography>\n                    </label>\n                    <InputText\n                        disabled={!!isSaving}\n                        readonly={!!isSaving}\n                        uniqueId={checkboxIdentifier.current}\n                        value={termsAndConditionsURL}\n                        onInput={onTermsAndConditionsURLInput}\n                        maxLength={2000}\n                        isInvalid={showInvalidURL}\n                    />\n                    {showInvalidURL && (\n                        <div className=\"adyen-pe-payment-link-settings-terms-and-conditions__error\">\n                            <Icon name=\"cross-circle-fill\" className={'adyen-pe-payment-link-settings-terms-and-conditions__error-icon'} />\n                            <Typography\n                                className={'adyen-pe-payment-link-settings-terms-and-conditions__error-text'}\n                                el={TypographyElement.SPAN}\n                                variant={TypographyVariant.BODY}\n                            >\n                                {i18n.get('payByLink.settings.termsAndConditions.error.urlValidation')}\n                            </Typography>\n                        </div>\n                    )}\n                </div>\n                {isTermsAndConditionsChanged && (\n                    <Alert\n                        type={AlertTypeOption.WARNING}\n                        variant={AlertVariantOption.TIP}\n                        description={i18n.get('payByLink.settings.termsAndConditions.alert.urlChange')}\n                        className={'adyen-pe-payment-link-settings-terms-and-conditions__alert'}\n                    />\n                )}\n                <div className=\"adyen-pe-payment-link-settings-terms-and-conditions-checkbox__container\">\n                    <Checkbox\n                        checked={isRequirementsChecked}\n                        disabled={disabled || isSaving}\n                        className={'adyen-pe-payment-link-settings-terms-and-conditions-checkbox'}\n                        label={checkboxLabel}\n                        onInput={onCheckboxInput}\n                        error={showNotCheckedRequirementsError}\n                    />\n                    {showNotCheckedRequirementsError && (\n                        <div className=\"adyen-pe-payment-link-settings-terms-and-conditions__error\">\n                            <Icon name=\"cross-circle-fill\" className={'adyen-pe-payment-link-settings-terms-and-conditions__error-icon'} />\n                            <Typography\n                                className={'adyen-pe-payment-link-settings-terms-and-conditions__error-text'}\n                                el={TypographyElement.SPAN}\n                                variant={TypographyVariant.BODY}\n                            >\n                                {i18n.get('payByLink.settings.termsAndConditions.error.requirementsNotChecked')}\n                            </Typography>\n                        </div>\n                    )}\n                </div>\n            </div>\n            {isShowingRequirements && (\n                <Requirements\n                    onGoBack={closeModal}\n                    termsAndConditionsURL={termsAndConditionsURL}\n                    acceptRequirements={acceptRequirements}\n                    embeddedInOverview={embeddedInOverview}\n                />\n            )}\n        </section>\n    );\n};\n","import AdyenPlatformExperienceError from '../../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { TranslationKey } from '../../../../../../translations';\nimport { ErrorMessage, UNDEFINED_ERROR } from '../../../../../utils/getCommonErrorCode';\nimport CopyText from '../../../../../internal/CopyText/CopyText';\nimport { AssetOptions } from '../../../../../../core/Assets/Assets';\n\nexport const ACCOUNT_MISCONFIGURATION = 'ACCOUNT_MISCONFIGURATION';\nexport const WRONG_STORE_IDS = 'WRONG_STORE_IDS';\nexport const PERMISSION_ERROR = 'PERMISSION_ERROR';\n\nconst getSettingsErrorMessage = (\n    error: AdyenPlatformExperienceError | undefined,\n    errorMessage: TranslationKey,\n    onContactSupport?: () => void,\n    getImageAsset?: (props: AssetOptions) => string\n): ErrorMessage => {\n    if (!error) return UNDEFINED_ERROR;\n\n    const secondaryErrorMessage = onContactSupport ? 'common.errors.errorCode' : 'common.errors.errorCodeSupport';\n    const translationValues = {\n        [secondaryErrorMessage]: error.requestId ? (\n            <CopyText copyButtonAriaLabelKey=\"common.actions.copy.labels.errorCode\" textToCopy={error.requestId} />\n        ) : null,\n    };\n\n    switch (error.errorCode) {\n        case ACCOUNT_MISCONFIGURATION:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: ['payByLink.common.errors.accountConfiguration', 'common.errors.contactSupport'],\n                translationValues,\n            };\n        case WRONG_STORE_IDS:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: ['payByLink.common.errors.storeID', 'common.errors.contactSupport'],\n                translationValues,\n                onContactSupport,\n            };\n        case PERMISSION_ERROR:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: [errorMessage],\n                translationValues,\n                refreshComponent: false,\n            };\n        case '00_500':\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: [errorMessage, secondaryErrorMessage],\n                translationValues,\n                refreshComponent: true,\n                images: {\n                    desktop: getImageAsset?.({ name: 'wrong-environment', subFolder: 'images/small' }),\n                },\n            };\n        default:\n            return {\n                title: 'common.errors.somethingWentWrong',\n                message: [errorMessage, secondaryErrorMessage],\n                translationValues,\n                refreshComponent: true,\n                images: {\n                    desktop: getImageAsset?.({ name: 'wrong-environment', subFolder: 'images/small' }),\n                },\n            };\n    }\n};\n\nexport default getSettingsErrorMessage;\n","import useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport AdyenPlatformExperienceError from '../../../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { TranslationKey } from '../../../../../../../translations';\nimport { ErrorMessageDisplay } from '../../../../../../internal/ErrorMessageDisplay/ErrorMessageDisplay';\nimport getSettingsErrorMessage from '../../utils/getSettingsErrorMessage';\n\nconst SettingsError = ({\n    error,\n    errorMessage,\n    onContactSupport,\n    centered,\n    absolutePosition,\n}: {\n    error: AdyenPlatformExperienceError | undefined;\n    errorMessage: TranslationKey;\n    centered?: boolean;\n    absolutePosition?: boolean;\n    onContactSupport?: () => void;\n}) => {\n    const { getImageAsset } = useCoreContext();\n\n    const { title, message, refreshComponent, translationValues, images } = getSettingsErrorMessage(\n        error,\n        errorMessage,\n        onContactSupport,\n        getImageAsset\n    );\n\n    return (\n        <ErrorMessageDisplay\n            imageDesktop={images?.desktop}\n            imageMobile={images?.mobile}\n            withHeaderOffset\n            title={title}\n            message={message}\n            translationValues={translationValues}\n            withImage\n            centered={centered ?? false}\n            absolutePosition={absolutePosition ?? false}\n            refreshComponent={refreshComponent}\n            onContactSupport={onContactSupport}\n            outlined={false}\n        />\n    );\n};\nexport default SettingsError;\n","import cx from 'classnames';\nimport './LoadingSkeleton.scss';\n\nconst LoadingSkeleton = ({ rowNumber, className }: { rowNumber: number; className?: string }) => {\n    return (\n        <div className={cx('adyen-pe-payment-link-settings__skeleton', className)}>\n            <div className=\"adyen-pe-payment-link-settings__skeleton-item adyen-pe-payment-link-settings__skeleton-item--header\"></div>\n            {[...Array(rowNumber)].map((_, index) => (\n                <div className=\"adyen-pe-payment-link-settings__skeleton-container\" key={index}>\n                    <div className=\"adyen-pe-payment-link-settings__skeleton-item adyen-pe-payment-link-settings__skeleton-item--small\"></div>\n                    <div className=\"adyen-pe-payment-link-settings__skeleton-item adyen-pe-payment-link-settings__skeleton-item--large\"></div>\n                </div>\n            ))}\n        </div>\n    );\n};\n\nexport default LoadingSkeleton;\n","import './TermsAndConditions.scss';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyVariant } from '../../../../internal/Typography/types';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { TermsAndConditions } from './TermsAndConditions';\nimport usePaymentLinkSettingsContext from '../PaymentLinkSettingsContainer/context/context';\nimport { useState, useEffect } from 'preact/hooks';\nimport { IPaymentLinkTermsAndConditions } from '../../../../../types';\nimport cx from 'classnames';\nimport { isTermsAndConditionsData } from '../PaymentLinkThemeContainer/types';\nimport SettingsError from '../PaymentLinkSettingsContainer/components/SettingsError/SettingsError';\nimport LoadingSkeleton from '../PaymentLinkSettingsContainer/components/LoadingSkeleton/LoadingSkeleton';\n\nconst ERROR_MESSAGE_KEY = 'payByLink.settings.termsAndConditions.errors.couldNotLoad';\n\nconst TermsAndConditionsContainer = () => {\n    const { i18n } = useCoreContext();\n    const { savedData: termsAndConditionsData, isLoadingContent, termsAndConditionsError, isShowingRequirements } = usePaymentLinkSettingsContext();\n    const [initialData, setInitialData] = useState<IPaymentLinkTermsAndConditions>();\n\n    useEffect(() => {\n        if (!isLoadingContent && !termsAndConditionsError) {\n            const data =\n                termsAndConditionsData && typeof termsAndConditionsData === 'object' && Object.keys(termsAndConditionsData).length > 0\n                    ? (termsAndConditionsData as IPaymentLinkTermsAndConditions)\n                    : { termsOfServiceUrl: '' };\n            setInitialData(data);\n        }\n    }, [termsAndConditionsData, setInitialData, isLoadingContent, termsAndConditionsError]);\n\n    if (termsAndConditionsError) {\n        return <SettingsError error={termsAndConditionsError} errorMessage={ERROR_MESSAGE_KEY} />;\n    }\n\n    if (!isTermsAndConditionsData(termsAndConditionsData) || !initialData) {\n        return <LoadingSkeleton rowNumber={2} />;\n    }\n\n    return (\n        <section className=\"adyen-pe-payment-link-settings-terms-and-conditions\">\n            <div\n                className={cx('adyen-pe-payment-link-settings-terms-and-conditions__content-header', {\n                    'adyen-pe-payment-link-settings-terms-and-conditions__content-header--hidden': isShowingRequirements,\n                })}\n            >\n                <div className=\"adyen-pe-payment-link-settings-terms-and-conditions__content-header\">\n                    <Typography variant={TypographyVariant.TITLE} medium>\n                        {i18n.get('payByLink.settings.termsAndConditions.title')}\n                    </Typography>\n                    <Typography variant={TypographyVariant.BODY} wide className=\"adyen-pe-payment-link-settings-terms-and-conditions-disclaimer\">\n                        {i18n.get('payByLink.settings.termsAndConditions.subtitle')}\n                    </Typography>\n                </div>\n            </div>\n            <TermsAndConditions data={termsAndConditionsData} initialData={initialData} />\n        </section>\n    );\n};\n\nexport default TermsAndConditionsContainer;\n","import { LogoTypes } from '../../types';\nimport { TranslationKey } from '../../../../../../../translations';\n\nexport const THEME_FORM_UPLOAD_DOCUMENT_MAX_SIZE = 51200; // 50KB\n\nexport const THEME_FORM_ALLOWED_FILE_TYPES = ['image/jpeg'] as const;\n\nexport const logoOptions: Record<string, LogoTypes> = {\n    LOGO: 'logo',\n    FULL_WIDTH_LOGO: 'fullWidthLogo',\n};\n\nexport const LogoLabel = {\n    logo: 'payByLink.settings.theme.logo.input.label',\n    fullWidthLogo: 'payByLink.settings.theme.wideLogo.input.label',\n} as Record<LogoTypes, TranslationKey>;\n\nexport const logoOptionsList: LogoTypes[] = ['logo', 'fullWidthLogo'];\n","import useUniqueId from '../../../../../../../hooks/useUniqueId';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport { useCallback } from 'preact/hooks';\nimport { TypographyElement, TypographyVariant } from '../../../../../../internal/Typography/types';\nimport Typography from '../../../../../../internal/Typography/Typography';\nimport { LogoLabel } from '../ThemeForm/constants';\nimport { ButtonVariant } from '../../../../../../internal/Button/types';\nimport Button from '../../../../../../internal/Button';\nimport { LogoTypes } from '../../types';\n\nconst LogoPreview = ({\n    disabled,\n    logoType,\n    logoURL,\n    onRemoveLogo,\n}: {\n    disabled: boolean;\n    logoType: LogoTypes;\n    logoURL: string;\n    onRemoveLogo: (logoType: LogoTypes) => void;\n}) => {\n    const { i18n } = useCoreContext();\n    const logoURLId = useUniqueId();\n\n    const onRemoveURL = useCallback(() => {\n        onRemoveLogo(logoType);\n    }, [logoType, onRemoveLogo]);\n\n    return (\n        <div className=\"adyen-pe-payment-link-theme-form__preview--conteiner\">\n            <label htmlFor={logoURLId} aria-labelledby={logoURLId}>\n                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                    {i18n.get(LogoLabel[logoType])}\n                </Typography>\n            </label>\n            <img id={logoURLId} src={logoURL} alt={'full-width-logo'} className={'adyen-pe-payment-link-theme-form__preview--image'} />\n            <Button\n                disabled={disabled}\n                variant={ButtonVariant.SECONDARY}\n                onClick={onRemoveURL}\n                className=\"adyen-pe-payment-link-theme-form__preview--remove\"\n            >\n                {i18n.get('payByLink.settings.theme.action.logo.remove')}\n            </Button>\n        </div>\n    );\n};\n\nexport default LogoPreview;\n","import { TranslationKey } from '../../../../../translations';\nimport { validationErrors } from '../constants';\nimport { ValidationError } from '../types';\n\nexport const defaultMapErrors = (error: ValidationError): TranslationKey => {\n    switch (error) {\n        case validationErrors.DISALLOWED_FILE_TYPE:\n            return 'common.inputs.file.errors.disallowedType';\n        case validationErrors.FILE_REQUIRED:\n            return 'common.inputs.file.errors.required';\n        case validationErrors.TOO_MANY_FILES:\n            return 'common.inputs.file.errors.tooMany';\n        case validationErrors.VERY_LARGE_FILE:\n            return 'common.inputs.file.errors.tooLarge';\n        case validationErrors.MAX_DIMENSIONS:\n            return 'common.inputs.file.errors.maxDimensions';\n    }\n    return 'common.inputs.file.errors.default';\n};\n\nexport default defaultMapErrors;\n","const fileNameMappings = {\n    'image/png': 'PNG',\n    'image/jpeg': 'JPEG',\n    'image/jpg': 'JPG',\n    'application/pdf': 'PDF',\n};\n\nexport const getHumanReadableFileName = (fileName: string): string => {\n    return fileNameMappings[fileName as keyof typeof fileNameMappings] || fileName;\n};\n","import { FC } from 'preact/compat';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../../../internal/Typography/Typography';\nimport { TypographyVariant } from '../../../../../../internal/Typography/types';\nimport { logoOptions, THEME_FORM_ALLOWED_FILE_TYPES, THEME_FORM_UPLOAD_DOCUMENT_MAX_SIZE } from '../ThemeForm/constants';\nimport { getHumanReadableFileName } from '../../../../../../../utils/file/naming';\nimport { getHumanReadableFileSize } from '../../../../../../../utils';\nimport { LogoTypes } from '../../types';\n\nconst getImageSizeLimitation = (logoType: LogoTypes) => {\n    switch (logoType) {\n        case logoOptions.FULL_WIDTH_LOGO:\n            return '300 x 30 px';\n        case logoOptions.LOGO:\n        default:\n            return '200 x 200 px';\n    }\n};\n\nconst LogoRequirements: FC<{ logoType: LogoTypes }> = ({ logoType }: { logoType: LogoTypes }) => {\n    const { i18n } = useCoreContext();\n\n    const logoFileInformationText = getImageSizeLimitation(logoType);\n\n    return (\n        <div className=\"adyen-pe-payment-link-theme-form__file-info-container\">\n            <Typography variant={TypographyVariant.BODY} className=\"adyen-pe-payment-link-theme-form__file-info\">\n                {i18n.get('payByLink.settings.theme.limitations.file.input.supportedFile.text')}\n                {THEME_FORM_ALLOWED_FILE_TYPES.map(type => getHumanReadableFileName(type)).join(', ')}\n            </Typography>\n            <Typography variant={TypographyVariant.BODY} className=\"adyen-pe-payment-link-theme-form__file-info\">\n                {i18n.get('payByLink.settings.theme.limitations.file.input.maxSize.text')}\n                {getHumanReadableFileSize(THEME_FORM_UPLOAD_DOCUMENT_MAX_SIZE)}\n            </Typography>\n            <Typography variant={TypographyVariant.BODY} className=\"adyen-pe-payment-link-theme-form__file-info\">\n                {i18n.get('payByLink.settings.theme.limitations.file.input.imageSize.text')}\n                {logoFileInformationText}\n            </Typography>\n        </div>\n    );\n};\n\nexport default LogoRequirements;\n","import { LogoTypes } from '../../types';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport useUniqueId from '../../../../../../../hooks/useUniqueId';\nimport { useCallback, useMemo } from 'preact/hooks';\nimport { TranslationKey } from '../../../../../../../translations';\nimport { MapErrorCallback } from '../../../../../DisputeManagement/components/DefendDisputeFlow/types';\nimport { validationErrors } from '../../../../../../internal/FormFields/FileInput/constants';\nimport defaultMapError from '../../../../../../internal/FormFields/FileInput/helpers/defaultMapError';\nimport Typography from '../../../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../../../internal/Typography/types';\nimport FileInput from '../../../../../../internal/FormFields/FileInput/FileInput';\nimport { LogoLabel, logoOptions, THEME_FORM_ALLOWED_FILE_TYPES, THEME_FORM_UPLOAD_DOCUMENT_MAX_SIZE } from '../ThemeForm/constants';\nimport LogoRequirements from '../LogoRequirements/LogoRequirements';\nimport { ValidationError } from '../../../../../../internal/FormFields/FileInput/types';\n\nconst getImageDimensionLimitation = (logoType: LogoTypes) => {\n    switch (logoType) {\n        case logoOptions.LOGO:\n            return { width: 200, height: 200 };\n        case logoOptions.FULL_WIDTH_LOGO:\n        default:\n            return { width: 300, height: 30 };\n    }\n};\n\nconst LogoInput = ({\n    disabled,\n    logoType,\n    onFileInputChange,\n}: {\n    disabled: boolean;\n    logoType: LogoTypes;\n    onFileInputChange: (logoType: LogoTypes, files: File[]) => void;\n}) => {\n    const { i18n } = useCoreContext();\n    const logoInputId = useUniqueId();\n\n    const onChange = useCallback(\n        (files: File[]) => {\n            onFileInputChange(logoType, files);\n        },\n        [logoType, onFileInputChange]\n    );\n\n    const dimensions: {\n        width: number;\n        height: number;\n    } = useMemo(() => getImageDimensionLimitation(logoType), [logoType]);\n\n    const dimensionError: TranslationKey = useMemo(\n        () =>\n            logoType === 'logo'\n                ? 'payByLink.settings.themes.inputs.file.errors.logo.maxDimension'\n                : 'payByLink.settings.themes.inputs.file.errors.fullWidthLogo.maxDimension',\n        [logoType]\n    );\n\n    const mapError: MapErrorCallback = useCallback(\n        (error: ValidationError) => {\n            switch (error) {\n                case validationErrors.MAX_DIMENSIONS:\n                    return i18n.get(dimensionError);\n                default:\n                    return i18n.get(defaultMapError(error));\n            }\n        },\n        [i18n, dimensionError]\n    );\n\n    return (\n        <>\n            <label htmlFor={logoInputId} aria-labelledby={logoInputId} className=\"adyen-pe-payment-link-theme-form__file-input\">\n                <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                    {i18n.get(LogoLabel[logoType])}\n                </Typography>\n                <Typography\n                    el={TypographyElement.SPAN}\n                    variant={TypographyVariant.BODY}\n                    className=\"adyen-pe-payment-link-theme-form__field-label-optional\"\n                >\n                    {`(${i18n.get('payByLink.common.fields.optional.label')})`}\n                </Typography>\n            </label>\n            <FileInput\n                disabled={disabled}\n                maxDimensions={dimensions}\n                maxFileSize={THEME_FORM_UPLOAD_DOCUMENT_MAX_SIZE}\n                allowedFileTypes={THEME_FORM_ALLOWED_FILE_TYPES}\n                onChange={onChange}\n                id={logoInputId}\n                mapError={mapError}\n            />\n            <LogoRequirements logoType={logoType} />\n        </>\n    );\n};\n\nexport default LogoInput;\n","import InputText from '../../../../../../internal/FormFields/InputText';\nimport Typography from '../../../../../../internal/Typography/Typography';\nimport { TypographyElement, TypographyVariant } from '../../../../../../internal/Typography/types';\nimport useUniqueId from '../../../../../../../hooks/useUniqueId';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport { logoOptions, logoOptionsList } from './constants';\nimport './ThemeForm.scss';\nimport { useCallback, useEffect, useState } from 'preact/hooks';\nimport { h } from 'preact';\nimport Icon from '../../../../../../internal/Icon';\nimport usePaymentLinkSettingsContext from '../../../PaymentLinkSettingsContainer/context/context';\nimport { LogoTypes, ThemeFormDataRequest, ThemeFormProps } from '../../types';\nimport LogoPreview from '../LogoPreview/LogoPreview';\nimport LogoInput from '../LogoInput/LogoInput';\nimport { cloneFormData } from '../../../PaymentLinkSettingsContainer/utils/getThemePayload';\n\nexport const ThemeForm = ({ theme, initialPayload }: ThemeFormProps) => {\n    const { setPayload, saveActionCalled, setSaveActionCalled, setIsValid, isSaving, setIsSaveSuccess, setIsSaveError } =\n        usePaymentLinkSettingsContext();\n\n    const { brandName: initialBrandName, logo, fullWidthLogo } = theme;\n    const [brandName, setBrandName] = useState(initialBrandName ?? undefined);\n    const [logoUrl, setLogoUrl] = useState(logo ?? null);\n    const [fullWidthLogoUrl, setFullWidthLogoUrl] = useState(fullWidthLogo ?? null);\n    const [themePayload, setThemePayload] = useState<FormData | undefined>();\n    const [showMissingBrandName, setShowMissingBrandName] = useState(false);\n\n    const brandInputId = useUniqueId();\n    const { i18n } = useCoreContext();\n\n    useEffect(() => {\n        setIsValid(!!brandName);\n    }, [brandName, setIsValid, themePayload, setPayload]);\n\n    useEffect(() => {\n        setThemePayload(initialPayload);\n    }, [initialPayload]);\n\n    useEffect(() => {\n        if (saveActionCalled) {\n            if (!brandName) {\n                setShowMissingBrandName(true);\n            }\n            setSaveActionCalled(false);\n            setIsSaveSuccess(false);\n            setIsSaveError(false);\n        }\n    }, [saveActionCalled, setSaveActionCalled, brandName, setShowMissingBrandName, setIsSaveError, setIsSaveSuccess]);\n\n    const addFileToThemePayload = useCallback(\n        (field: string, file: File) => {\n            setThemePayload(previousFormData => {\n                const nextFormData = previousFormData ? cloneFormData(previousFormData) : new FormData();\n                nextFormData.set(field, file, file.name);\n                nextFormData.set(field, file, file.name);\n                setPayload(nextFormData);\n                return nextFormData;\n            });\n        },\n        [setPayload]\n    );\n\n    const onBrandNameChange = useCallback(\n        (e: h.JSX.TargetedEvent<HTMLInputElement>) => {\n            const value = e?.currentTarget?.value;\n            setShowMissingBrandName(false);\n            setBrandName(value);\n            setThemePayload(previousFormData => {\n                const nextFormData = previousFormData ? cloneFormData(previousFormData) : new FormData();\n                nextFormData.set(ThemeFormDataRequest.BRAND, value);\n                setPayload(nextFormData);\n                return nextFormData;\n            });\n        },\n        [setShowMissingBrandName, setBrandName, setThemePayload, setPayload]\n    );\n\n    const removeFieldFromThemePayload = useCallback(\n        (field: string) => {\n            setThemePayload(previousFormData => {\n                if (previousFormData && previousFormData.has(field)) {\n                    const nextFormData = cloneFormData(previousFormData);\n                    nextFormData.delete(field);\n                    setPayload(nextFormData);\n                    return nextFormData;\n                }\n                return previousFormData;\n            });\n        },\n        [setPayload]\n    );\n\n    const logoPreview = useCallback(\n        (type: LogoTypes, file: File) => {\n            const reader = new FileReader();\n\n            reader.onload = function (e) {\n                const result = e?.target?.result as string;\n                if (type === logoOptions.LOGO) {\n                    setLogoUrl(result);\n                }\n                if (type === logoOptions.FULL_WIDTH_LOGO) {\n                    setFullWidthLogoUrl(result);\n                }\n            };\n            reader.readAsDataURL(file);\n        },\n        [setLogoUrl, setFullWidthLogoUrl]\n    );\n\n    const onLogoChange = useCallback(\n        (type: LogoTypes, files: File[]) => {\n            const file = files[0];\n            if (!file) return;\n            addFileToThemePayload(type, file);\n            logoPreview(type, file);\n        },\n        [addFileToThemePayload, logoPreview]\n    );\n\n    const onRemoveLogoUrl = useCallback(\n        (logoType: LogoTypes) => {\n            removeFieldFromThemePayload(logoType);\n            if (logoType === logoOptions.LOGO) {\n                setLogoUrl(null);\n            }\n            if (logoType === logoOptions.FULL_WIDTH_LOGO) {\n                setFullWidthLogoUrl(null);\n            }\n        },\n        [removeFieldFromThemePayload, setLogoUrl, setFullWidthLogoUrl]\n    );\n\n    const getLogoUrl = useCallback(\n        (logoType: LogoTypes) => {\n            return logoType === logoOptions.LOGO ? logoUrl : fullWidthLogoUrl;\n        },\n        [fullWidthLogoUrl, logoUrl]\n    );\n\n    return (\n        <div className=\"adyen-pe-payment-link-theme-form-container\">\n            <div className=\"adyen-pe-payment-link-theme-form\">\n                <div className=\"adyen-pe-payment-link-settings__input-container\">\n                    <label htmlFor={brandInputId} aria-labelledby={brandInputId} className=\"adyen-pe-payment-link-theme-form__brand-input\">\n                        <Typography el={TypographyElement.SPAN} variant={TypographyVariant.BODY} stronger>\n                            {i18n.get('payByLink.settings.theme.brandName.input.label')}\n                        </Typography>\n                    </label>\n                    <InputText\n                        type=\"text\"\n                        disabled={!!isSaving}\n                        readonly={!!isSaving}\n                        lang={i18n.locale}\n                        uniqueId={brandInputId}\n                        value={brandName}\n                        onInput={onBrandNameChange}\n                        placeholder={i18n.get('payByLink.settings.theme.brandName.input.placeholder')}\n                        isInvalid={showMissingBrandName}\n                    />\n                    {showMissingBrandName && (\n                        <div className=\"adyen-pe-payment-link-theme-form__error\">\n                            <Icon name=\"cross-circle-fill\" className={'adyen-pe-payment-link-theme-form__error-icon'} />\n                            <Typography\n                                className={'adyen-pe-payment-link-theme-form__error-text'}\n                                el={TypographyElement.SPAN}\n                                variant={TypographyVariant.BODY}\n                            >\n                                {i18n.get('payByLink.settings.theme.inputs.brandName.errors.missing')}\n                            </Typography>\n                        </div>\n                    )}\n                </div>\n                {logoOptionsList.map(logoType => {\n                    const url = getLogoUrl(logoType);\n                    return (\n                        <div key={logoType} className={'adyen-pe-payment-link-settings__input-container '}>\n                            {url ? (\n                                <LogoPreview disabled={!!isSaving} logoType={logoType} logoURL={url} onRemoveLogo={onRemoveLogoUrl} />\n                            ) : (\n                                <LogoInput disabled={!!isSaving} logoType={logoType} onFileInputChange={onLogoChange} />\n                            )}\n                        </div>\n                    );\n                })}\n            </div>\n        </div>\n    );\n};\n","import './PaymentLinkThemeContainer.scss';\nimport Typography from '../../../../internal/Typography/Typography';\nimport { TypographyVariant } from '../../../../internal/Typography/types';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport usePaymentLinkSettingsContext from '../PaymentLinkSettingsContainer/context/context';\nimport { useEffect, useMemo, useState } from 'preact/hooks';\nimport { ThemeForm } from './components/ThemeForm';\nimport { isThemeData, isThemePayload } from './types';\nimport LoadingSkeleton from '../PaymentLinkSettingsContainer/components/LoadingSkeleton/LoadingSkeleton';\nimport SettingsError from '../PaymentLinkSettingsContainer/components/SettingsError/SettingsError';\nimport { ThemeFormData } from '../PaymentLinkSettingsContainer/context/types';\n\nconst ERROR_MESSAGE_KEY = 'payByLink.settings.theme.errors.couldNotLoad';\n\nconst PaymentLinkThemeContainer = () => {\n    const { i18n } = useCoreContext();\n    const { payload, setSavedData, savedData: theme, themeError, isLoadingContent } = usePaymentLinkSettingsContext();\n    const [initialPayload, setInitialPayload] = useState<FormData>();\n\n    useEffect(() => {\n        if (isThemePayload(payload)) {\n            setInitialPayload(payload);\n        }\n    }, [payload, setSavedData, setInitialPayload]);\n\n    const data = useMemo(() => {\n        if (!isLoadingContent && !themeError) {\n            return theme && typeof theme === 'object' && Object.keys(theme).length > 0 ? (theme as ThemeFormData) : { brandName: '' };\n        }\n        return { brandName: '' };\n    }, [theme, isLoadingContent, themeError]);\n\n    if (themeError) {\n        return (\n            <section className=\"adyen-pe-payment-link-theme\">\n                <SettingsError error={themeError} errorMessage={ERROR_MESSAGE_KEY} />\n            </section>\n        );\n    }\n\n    if (!theme || !isThemeData(data) || !initialPayload) {\n        return <LoadingSkeleton rowNumber={3} />;\n    }\n\n    return (\n        <section className=\"adyen-pe-payment-link-theme\">\n            <div className=\"adyen-pe-payment-link-settings__content-header\">\n                <Typography variant={TypographyVariant.TITLE} medium>\n                    {i18n.get('payByLink.settings.theme.title')}\n                </Typography>\n                <Typography variant={TypographyVariant.BODY} wide className=\"adyen-pe-payment-link-settings-terms-and-conditions-disclaimer\">\n                    {i18n.get('payByLink.settings.theme.subtitle')}\n                </Typography>\n            </div>\n            <ThemeForm theme={data} initialPayload={initialPayload} />\n        </section>\n    );\n};\n\nexport default PaymentLinkThemeContainer;\n","import { MenuItem } from '../../context/constants';\nimport LoadingSkeleton from '../LoadingSkeleton/LoadingSkeleton';\n\nconst PaymentLinkSettingsContentLoading = ({ activeMenuItem }: { activeMenuItem: string | null }) => {\n    switch (activeMenuItem) {\n        case MenuItem.theme:\n            return <LoadingSkeleton rowNumber={3} />;\n        case MenuItem.termsAndConditions:\n            return <LoadingSkeleton rowNumber={2} />;\n        default:\n            return <LoadingSkeleton rowNumber={3} />;\n    }\n};\n\nexport default PaymentLinkSettingsContentLoading;\n","import TermsAndConditionsContainer from '../../../TermsAndConditions/TermsAndConditionsContainer';\nimport PaymentLinkThemeContainer from '../../../PaymentLinkThemeContainer/PaymentLinkThemeContainer';\nimport { MenuItem } from '../../context/constants';\nimport { containerQueries, useResponsiveContainer } from '../../../../../../../hooks/useResponsiveContainer';\nimport Alert from '../../../../../../internal/Alert/Alert';\nimport { AlertTypeOption, AlertVariantOption } from '../../../../../../internal/Alert/types';\nimport useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport usePaymentLinkSettingsContext from '../../context/context';\nimport PaymentLinkSettingsContentLoading from '../PaymentLinkSettingsContentLoading/PaymentLinkSettingsContentLoading';\nimport { useSettingsPermission } from '../../../../hooks/useSettingsPermission';\nimport SettingsError from '../SettingsError/SettingsError';\nimport AdyenPlatformExperienceError from '../../../../../../../core/Errors/AdyenPlatformExperienceError';\nimport { useMemo } from 'preact/hooks';\nimport { PERMISSION_ERROR } from '../../utils/getSettingsErrorMessage';\n\nconst THEME_ERROR_MESSAGE_KEY = 'payByLink.settings.theme.errors.couldNotLoad';\nconst TERMS_AND_CONDITIONS_ERROR_MESSAGE_KEY = 'payByLink.settings.termsAndConditions.errors.couldNotLoad';\n\ntype PaymentLinkSettingsContentProps = {\n    activeMenuItem: string | null;\n    isLoadingContent: boolean;\n    navigateBack?: () => void;\n};\n\nconst PaymentLinkSettingsContentItem = ({ activeMenuItem, isLoadingContent }: PaymentLinkSettingsContentProps) => {\n    const { themeEnabled, termsAndConditionsEnabled } = useSettingsPermission();\n\n    const permissionError = useMemo(() => {\n        if (themeEnabled && termsAndConditionsEnabled) return undefined;\n        return {\n            errorCode: PERMISSION_ERROR,\n            type: 'error',\n            requestId: '',\n        } as AdyenPlatformExperienceError;\n    }, [themeEnabled, termsAndConditionsEnabled]);\n\n    if (isLoadingContent) {\n        return <PaymentLinkSettingsContentLoading activeMenuItem={activeMenuItem} />;\n    }\n    switch (activeMenuItem) {\n        case MenuItem.theme: {\n            if (!themeEnabled) return <SettingsError error={permissionError} errorMessage={THEME_ERROR_MESSAGE_KEY} />;\n            return <PaymentLinkThemeContainer />;\n        }\n        case MenuItem.termsAndConditions: {\n            if (!termsAndConditionsEnabled) return <SettingsError error={permissionError} errorMessage={TERMS_AND_CONDITIONS_ERROR_MESSAGE_KEY} />;\n            return <TermsAndConditionsContainer />;\n        }\n        default:\n            return null;\n    }\n};\n\nconst PaymentLinkSettingsContent = ({ activeMenuItem, isLoadingContent, navigateBack }: PaymentLinkSettingsContentProps) => {\n    const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n    const { i18n } = useCoreContext();\n    const { isSaveSuccess, isSaveError, setIsSaveSuccess, setIsSaveError } = usePaymentLinkSettingsContext();\n\n    return (\n        <div className={isSmContainer ? 'adyen-pe-payment-link-settings__content-item--mobile' : 'adyen-pe-payment-link-settings__content-item'}>\n            <PaymentLinkSettingsContentItem activeMenuItem={activeMenuItem} isLoadingContent={isLoadingContent} />\n            {isSaveSuccess && !navigateBack && (\n                <Alert\n                    type={AlertTypeOption.SUCCESS}\n                    variant={AlertVariantOption.TIP}\n                    onClose={() => setIsSaveSuccess(false)}\n                    description={i18n.get('payByLink.settings.common.alerts.saveSuccess')}\n                    className={'adyen-pe-payment-link-settings__content-item--alert'}\n                />\n            )}\n            {isSaveError && (\n                <Alert\n                    type={AlertTypeOption.CRITICAL}\n                    variant={AlertVariantOption.TIP}\n                    onClose={() => setIsSaveError(false)}\n                    description={i18n.get('payByLink.settings.common.alerts.saveError')}\n                    className={'adyen-pe-payment-link-settings__content-item--alert'}\n                />\n            )}\n        </div>\n    );\n};\n\nexport default PaymentLinkSettingsContent;\n","import useCoreContext from '../../../../../../../core/Context/useCoreContext';\nimport usePayByLinkSettingsContext from '../../context/context';\nimport { containerQueries, useResponsiveContainer } from '../../../../../../../hooks/useResponsiveContainer';\nimport { boolOrFalse, noop } from '../../../../../../../utils';\nimport { ButtonActionObject, ButtonActionsLayout, ButtonActionsLayoutBasic } from '../../../../../../internal/Button/ButtonActions/types';\nimport ButtonActions from '../../../../../../internal/Button/ButtonActions/ButtonActions';\nimport { useMemo } from 'preact/hooks';\nimport './SettingsActionButton.scss';\nimport { ButtonVariant } from '../../../../../../internal/Button/types';\nimport cx from 'classnames';\nimport Icon from '../../../../../../internal/Icon';\nimport { useSettingsPermission } from '../../../../hooks/useSettingsPermission';\nimport { MenuItem } from '../../context/constants';\n\nconst SettingsActionButtons = ({ navigateBack, closeContent }: { navigateBack?: () => void | undefined; closeContent?: () => void | undefined }) => {\n    const { i18n } = useCoreContext();\n    const { activeMenuItem, onSave, isSaving, isLoadingContent, isLoadingStores, isSaveSuccess } = usePayByLinkSettingsContext();\n    const { themeEnabled, termsAndConditionsEnabled } = useSettingsPermission();\n    const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n    const isLoading = isLoadingContent || isLoadingStores;\n\n    const isSaveDisabled = useMemo(() => {\n        if (!activeMenuItem) return false;\n        const isActiveMenuItemEnabled = MenuItem.theme ? themeEnabled : termsAndConditionsEnabled;\n        return !isActiveMenuItemEnabled || boolOrFalse(isSaving || isLoading || (navigateBack && isSaveSuccess));\n    }, [activeMenuItem, termsAndConditionsEnabled, themeEnabled, isSaving, isLoading, navigateBack, isSaveSuccess]);\n\n    const saveButton = useMemo(() => {\n        return {\n            disabled: isSaveDisabled,\n            event: onSave,\n            iconLeft:\n                navigateBack && isSaveSuccess ? (\n                    <Icon className={'adyen-pe-payment-link-settings-save-success__cta-icon'} name={'checkmark'} />\n                ) : undefined,\n            title: i18n.get('payByLink.settings.common.action.save'),\n            variant: ButtonVariant.PRIMARY,\n            state: boolOrFalse(isSaving && !(navigateBack && isSaveSuccess)) ? 'loading' : 'default',\n            classNames: isSmContainer ? ['adyen-pe-payment-link-settings__cta--mobile'] : [],\n        } as ButtonActionObject;\n    }, [i18n, onSave, isSaving, isSmContainer, navigateBack, isSaveSuccess, isSaveDisabled]);\n\n    const goBackButton = useMemo(() => {\n        return {\n            disabled: boolOrFalse(isLoading),\n            event: navigateBack ?? closeContent ?? noop,\n            title: i18n.get('payByLink.common.actions.goBack'),\n            variant: ButtonVariant.SECONDARY,\n            classNames: isSmContainer ? ['adyen-pe-payment-link-settings__cta--mobile'] : [],\n        } as ButtonActionObject;\n    }, [navigateBack, i18n, isSmContainer, closeContent, isLoading]);\n\n    const buttonActions = useMemo(() => {\n        if (!navigateBack && !closeContent) return [saveButton];\n        return [saveButton, goBackButton];\n    }, [saveButton, goBackButton, navigateBack, closeContent]);\n\n    const layout = useMemo(() => (isSmContainer ? ButtonActionsLayout.VERTICAL_STACK : ButtonActionsLayoutBasic.BUTTONS_END), [isSmContainer]);\n\n    return (\n        <div\n            className={cx('adyen-pe-payment-link-settings__cta-container', {\n                ['adyen-pe-payment-link-settings__cta-container--mobile']: isSmContainer,\n            })}\n        >\n            <ButtonActions actions={buttonActions} layout={layout} />\n        </div>\n    );\n};\n\nexport default SettingsActionButtons;\n","import { SecondaryNav } from '../../../../internal/SecondaryNav';\nimport {\n    CONTAINER_CLASS_NAME,\n    SIDEBAR_CONTAINER_CLASS_NAME,\n    SECONDARY_NAV_CLASS_NAME,\n    CONTENT_CONTAINER_CLASS_NAME,\n    CONTENT_CONTAINER_MOBILE_CLASS_NAME,\n} from './constants';\nimport { type ExternalUIComponentProps, PaymentLinkSettingsComponentProps } from '../../../../types';\nimport './PaymentLinkSettingsContainer.scss';\nimport { StoreSelector } from '../../../../internal/StoreSelector';\nimport { Header } from '../../../../internal/Header';\nimport { usePaymentLinkSettingsContext } from './context/context';\nimport PaymentLinkSettingsContent from './components/PaymentLinkSettingsContent/PaymentLinkSettingsContent';\nimport SettingsActionButtons from './components/SettingsActionButtons/SettingsActionButtons';\nimport { MenuItemType } from './context/types';\nimport { useCallback, useEffect, useState } from 'preact/hooks';\nimport { containerQueries, useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport cx from 'classnames';\nimport LoadingSkeleton from './components/LoadingSkeleton/LoadingSkeleton';\nimport { useMemo } from 'preact/hooks';\nimport AdyenPlatformExperienceError from '../../../../../core/Errors/AdyenPlatformExperienceError';\nimport SettingsError from './components/SettingsError/SettingsError';\nimport { ACCOUNT_MISCONFIGURATION, WRONG_STORE_IDS } from './utils/getSettingsErrorMessage';\n\nconst ERROR_MESSAGE_KEY = 'payByLink.settings.errors.couldNotLoadSettings' as const;\n\nconst PaymentLinkSettings = ({\n    navigateBack,\n    ...props\n}: ExternalUIComponentProps<PaymentLinkSettingsComponentProps> & {\n    navigateBack?: () => void;\n}) => {\n    const {\n        activeMenuItem,\n        setSelectedMenuItem,\n        selectedStore,\n        isLoadingStores,\n        isShowingRequirements,\n        storesError,\n        setSelectedStore,\n        filteredStores,\n        menuItems,\n        isLoadingContent,\n        allStores,\n        themeError,\n        termsAndConditionsError,\n    } = usePaymentLinkSettingsContext();\n    const isSmContainer = useResponsiveContainer(containerQueries.down.xs);\n    const [contentVisible, setContentVisible] = useState(false);\n\n    useEffect(() => {\n        const visibility = Boolean(!isSmContainer || (isSmContainer && menuItems && menuItems?.length === 1));\n        setContentVisible(visibility);\n    }, [isSmContainer, menuItems]);\n\n    const onContentVisibilityChange = useCallback(\n        (contentVisible: boolean) => {\n            setContentVisible(contentVisible);\n        },\n        [setContentVisible]\n    );\n\n    const closeContent = useCallback(() => {\n        if (!isSmContainer) return;\n        setContentVisible(false);\n    }, [isSmContainer]);\n\n    const noStoresError = useMemo(() => {\n        if (!allStores || allStores.length > 0 || isLoadingStores) return undefined;\n        return {\n            errorCode: ACCOUNT_MISCONFIGURATION,\n            type: 'error',\n            requestId: '',\n        } as AdyenPlatformExperienceError;\n    }, [allStores, isLoadingStores]);\n\n    const storesFilteredError = useMemo(() => {\n        if ((allStores && allStores?.length > 0 && filteredStores?.length !== 0) || isLoadingStores) return undefined;\n        return {\n            errorCode: WRONG_STORE_IDS,\n            type: 'error',\n            requestId: '',\n        } as AdyenPlatformExperienceError;\n    }, [allStores, filteredStores, isLoadingStores]);\n\n    const error = storesError ?? noStoresError ?? storesFilteredError;\n\n    const errorDisplay = useMemo(() => {\n        if (!error) return null;\n        return <SettingsError error={error} onContactSupport={props.onContactSupport} errorMessage={ERROR_MESSAGE_KEY} />;\n    }, [props.onContactSupport, error]);\n\n    const hasError = !!noStoresError || !!storesError || !!storesFilteredError;\n\n    if (!menuItems || menuItems.length === 0) return null;\n\n    const showActionButtons = contentVisible && !themeError && !storesError && !termsAndConditionsError && !isShowingRequirements;\n\n    return (\n        <div className={CONTAINER_CLASS_NAME}>\n            {(!isSmContainer || !contentVisible) && <Header hideTitle={props.hideTitle} titleKey=\"payByLink.settings.title\" />}\n            {hasError ? (\n                errorDisplay\n            ) : (\n                <>\n                    <div className={cx(CONTENT_CONTAINER_CLASS_NAME, { [CONTENT_CONTAINER_MOBILE_CLASS_NAME]: isSmContainer && contentVisible })}>\n                        {menuItems.length > 1 ? (\n                            <div className={SIDEBAR_CONTAINER_CLASS_NAME}>\n                                <SecondaryNav<MenuItemType>\n                                    renderHeader={() => (\n                                        <StoreSelector\n                                            stores={filteredStores}\n                                            selectedStoreId={selectedStore}\n                                            setSelectedStoreId={setSelectedStore}\n                                        />\n                                    )}\n                                    contentVisible={contentVisible}\n                                    loading={isLoadingStores}\n                                    className={SECONDARY_NAV_CLASS_NAME}\n                                    items={menuItems}\n                                    activeValue={activeMenuItem}\n                                    onValueChange={setSelectedMenuItem}\n                                    onContentVisibilityChange={onContentVisibilityChange}\n                                    renderContent={(activeMenuItem: string) => (\n                                        <PaymentLinkSettingsContent\n                                            activeMenuItem={activeMenuItem}\n                                            isLoadingContent={isLoadingContent}\n                                            navigateBack={navigateBack}\n                                        />\n                                    )}\n                                    renderLoadingContent={() => <LoadingSkeleton rowNumber={3} />}\n                                />\n                            </div>\n                        ) : (\n                            <PaymentLinkSettingsContent\n                                activeMenuItem={activeMenuItem}\n                                isLoadingContent={isLoadingContent}\n                                navigateBack={navigateBack}\n                            />\n                        )}\n                    </div>\n                    {showActionButtons && (\n                        <SettingsActionButtons\n                            navigateBack={navigateBack ? navigateBack : undefined}\n                            closeContent={isSmContainer ? closeContent : undefined}\n                        />\n                    )}\n                </>\n            )}\n        </div>\n    );\n};\n\nexport default PaymentLinkSettings;\n","import { type ExternalUIComponentProps, PaymentLinkSettingsComponentProps } from '../../../../types';\nimport './PaymentLinkSettingsContainer.scss';\nimport { PaymentLinkSettingsProvider } from './context/context';\nimport PaymentLinkSettings from './PaymentLinkSettings';\nimport { PaymentLinkSettingsItem } from './context/types';\nimport { useMemo } from 'preact/hooks';\nimport { MENU_ITEMS } from './context/constants';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\n\nconst PaymentLinkSettingsContainer = ({\n    settingsItems,\n    storeIds,\n    embeddedInOverview,\n    ...props\n}: ExternalUIComponentProps<PaymentLinkSettingsComponentProps> & {\n    settingsItems?: PaymentLinkSettingsItem[];\n    navigateBack?: () => void;\n    embeddedInOverview?: boolean;\n}) => {\n    const { i18n } = useCoreContext();\n\n    const filteredMenuItems = useMemo(\n        () => (settingsItems && settingsItems?.length > 0 ? MENU_ITEMS.filter(item => settingsItems.includes(item.value)) : MENU_ITEMS),\n        [settingsItems]\n    );\n\n    const paymentLinkSettingsItem = useMemo(() => {\n        const settingsItems = filteredMenuItems.length > 0 ? filteredMenuItems : MENU_ITEMS;\n        return settingsItems.map(item => ({ ...item, label: i18n.get(item.label) }));\n    }, [i18n, filteredMenuItems]);\n\n    return (\n        <PaymentLinkSettingsProvider\n            embeddedInOverview={embeddedInOverview}\n            selectedMenuItems={paymentLinkSettingsItem}\n            storeIds={storeIds}\n            navigateBack={props?.navigateBack}\n        >\n            <PaymentLinkSettings {...props} />\n        </PaymentLinkSettingsProvider>\n    );\n};\n\nexport default PaymentLinkSettingsContainer;\n","import { useCallback, useEffect, useState } from 'preact/hooks';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport localInvalidFieldsConfig from '../../../../config/payByLink/invalidFieldsConfig.json';\nimport { TranslationKey } from '../../../../translations';\n\nexport type InvalidFieldsConfig = {\n    fields: Record<string, TranslationKey>;\n    messages: Record<string, TranslationKey>;\n};\n\nexport const useInvalidFieldsConfig = () => {\n    const { getCdnConfig } = useCoreContext();\n    const localConfig = localInvalidFieldsConfig as unknown as InvalidFieldsConfig;\n    const [invalidFieldsConfig, setInvalidFieldsConfig] = useState<InvalidFieldsConfig>(localConfig);\n\n    const getInvalidFieldsConfig = useCallback(async () => {\n        const config = await getCdnConfig?.<InvalidFieldsConfig>({\n            subFolder: 'payByLink',\n            name: 'invalidFieldsConfig',\n            fallback: localConfig,\n        });\n        setInvalidFieldsConfig(config ?? localConfig);\n    }, [getCdnConfig, localConfig]);\n\n    useEffect(() => {\n        void getInvalidFieldsConfig();\n    }, [getInvalidFieldsConfig]);\n\n    return {\n        invalidFieldsConfig,\n        getInvalidFieldsConfig,\n    };\n};\n","import Typography from '../../../../internal/Typography/Typography';\nimport useCoreContext from '../../../../../core/Context/useCoreContext';\nimport { TypographyElement, TypographyVariant } from '../../../../internal/Typography/types';\nimport { Stepper } from '../../../../internal/Stepper/Stepper';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { PaymentLinkCreationFormValues, LinkCreationFormStep } from '../types';\nimport { WizardFormProvider } from '../../../../../hooks/form/wizard/WizardFormContext';\nimport { ButtonVariant } from '../../../../internal/Button/types';\nimport Button from '../../../../internal/Button';\nimport '../../PaymentLinkCreation.scss';\nimport './PaymentLinkCreationForm.scss';\nimport useMutation from '../../../../../hooks/useMutation/useMutation';\nimport { SuccessResponse } from '../../../../../types/api/endpoints';\nimport Icon from '../../../../internal/Icon';\nimport { usePaymentLinkFormData } from './usePaymentLinkFormData';\nimport { PaymentLinkCreationComponentProps } from '../../../../types';\nimport { scrollToFirstErrorField } from '../../utils';\nimport { useResponsiveContainer } from '../../../../../hooks/useResponsiveContainer';\nimport { containerQueries } from '../../../../../hooks/useResponsiveContainer';\nimport { FormStepRenderer } from './FormStepRenderer';\nimport PaymentLinkSettingsContainer from '../../../PaymentLinkSettings/components/PaymentLinkSettingsContainer/PaymentLinkSettingsContainer';\nimport { StoreIds } from '../../../PaymentLinksOverview/types';\nimport { AlertTypeOption } from '../../../../internal/Alert/types';\nimport Alert from '../../../../internal/Alert/Alert';\nimport { ErrorMessageDisplay } from '../../../../internal/ErrorMessageDisplay/ErrorMessageDisplay';\nimport { useInvalidFieldsConfig } from '../../hooks/useInvalidFieldsConfig';\nimport { AdyenErrorResponse } from '../../../../../core/Http/types';\nimport { Translation } from '../../../../internal/Translation';\nimport CopyText from '../../../../internal/CopyText/CopyText';\n\ntype PaymentLinkCreationFormContainerProps = {\n    fieldsConfig?: PaymentLinkCreationComponentProps['fieldsConfig'];\n    onCreationDismiss?: () => void;\n    onPaymentLinkCreated?: (data: PaymentLinkCreationFormValues & { paymentLink: SuccessResponse<'createPBLPaymentLink'> }) => void;\n    storeIds?: StoreIds;\n    onContactSupport?: () => void;\n    embeddedInOverview?: boolean;\n};\n\nconst FIELD_LABEL_AND_MARGIN_OFFSET = 28;\n\nconst LoadingSkeleton = () => (\n    <div className=\"adyen-pe-payment-link-creation-form__skeleton\">\n        <div className=\"adyen-pe-payment-link-creation-form__skeleton-item adyen-pe-payment-link-creation-form__skeleton-item--large\" />\n        {[...Array(3)].map((_, index) => (\n            <>\n                <div\n                    key={`${index}-small`}\n                    className=\"adyen-pe-payment-link-creation-form__skeleton-item adyen-pe-payment-link-creation-form__skeleton-item--small\"\n                />\n                <div\n                    key={`${index}-large`}\n                    className=\"adyen-pe-payment-link-creation-form__skeleton-item adyen-pe-payment-link-creation-form__skeleton-item--large\"\n                />\n            </>\n        ))}\n    </div>\n);\n\nexport const PaymentLinkCreationFormContainer = ({\n    fieldsConfig,\n    storeIds,\n    onCreationDismiss,\n    onPaymentLinkCreated,\n    onContactSupport,\n    embeddedInOverview,\n}: PaymentLinkCreationFormContainerProps) => {\n    const formRef = useRef<HTMLFormElement>(null);\n    const [showFormValidationError, setShowFormValidationError] = useState<boolean>(false);\n    const headerRef = useRef<HTMLDivElement>(null);\n    const hasPrefilledAddress = !!fieldsConfig?.data?.billingAddress || !!fieldsConfig?.data?.deliveryAddress;\n    const [isSameAddress, setIsSameAddress] = useState<boolean>(!hasPrefilledAddress);\n    const selectedStoreNavigationCache = useRef<string>('');\n    const { i18n } = useCoreContext();\n    const isXsAndDownContainer = useResponsiveContainer(containerQueries.down.xs);\n\n    const {\n        storesData,\n        configurationData,\n        countriesData,\n        isFetchingCountries,\n        countryDatasetData,\n        isFetchingCountryDataset,\n        settingsData,\n        storesSelectorItems,\n        termsAndConditionsProvisioned,\n        formSteps,\n        stepperItems,\n        formStepsAriaLabel,\n        wizardForm,\n        createPaymentLink,\n        isDataLoading,\n        isFirstLoadDone,\n        selectedStore,\n        setSelectedStore,\n    } = usePaymentLinkFormData({\n        defaultValues: fieldsConfig?.data,\n        visibilityConfig: fieldsConfig?.visibility,\n        storeIds,\n    });\n\n    const { isLastStep, isFirstStep, currentStep, validateStep, canGoNext, isStepComplete, nextStep, previousStep, goToStep } = wizardForm;\n    const [showTermsAndConditions, setShowTermsAndConditions] = useState<boolean>(false);\n\n    const handleNext = useCallback(\n        async (index: number) => {\n            if (!isLastStep) {\n                const isValid = await validateStep(index);\n                if (!isValid) {\n                    const headerHeight = headerRef.current?.getBoundingClientRect().height ?? 0;\n                    const offsetTop = isXsAndDownContainer ? headerHeight + FIELD_LABEL_AND_MARGIN_OFFSET : FIELD_LABEL_AND_MARGIN_OFFSET;\n                    scrollToFirstErrorField(Object.keys(wizardForm.formState.errors), offsetTop, formRef.current);\n                    return;\n                }\n                await nextStep();\n            }\n        },\n        [isLastStep, nextStep, validateStep, wizardForm.formState.errors, isXsAndDownContainer]\n    );\n\n    const onClickStep = useCallback(\n        (index: number) => {\n            void goToStep(index);\n        },\n        [goToStep]\n    );\n\n    const currentFormStep = useMemo<LinkCreationFormStep>(() => {\n        const step = formSteps?.[currentStep];\n        return step ? (step.id as LinkCreationFormStep) : 'store';\n    }, [currentStep, formSteps]);\n\n    const handlePrevious = () => {\n        if (isFirstStep) {\n            onCreationDismiss?.();\n            return;\n        }\n        submitMutation.reset();\n        previousStep();\n    };\n\n    const handleContinue = async () => {\n        await handleNext(currentStep);\n    };\n\n    // Only called when the form is actually submitted (final step)\n    const submitMutation = useMutation({\n        queryFn: createPaymentLink,\n    });\n\n    const onSubmit = async () => {\n        // Use getApiPayloadValues to only include fields that come back from configuration\n        // This excludes fields that are not returned by the configuration endpoint\n        // but includes fields that are hidden via visibility prop\n        const apiPayloadData = wizardForm.getApiPayloadValues() as PaymentLinkCreationFormValues;\n        const { store, ...dataWithoutStore } = apiPayloadData;\n\n        try {\n            const result = await submitMutation.mutate(\n                {\n                    body: dataWithoutStore,\n                    contentType: 'application/json',\n                },\n                { path: { storeId: store } }\n            );\n\n            onPaymentLinkCreated?.({ ...apiPayloadData, paymentLink: result });\n        } catch (error) {\n            console.error('Failed to create payment link:', error);\n            throw error;\n        }\n    };\n\n    const navigateBackFromTermsAndConditions = useCallback(() => {\n        setSelectedStore(selectedStoreNavigationCache.current);\n        setShowTermsAndConditions(false);\n        selectedStoreNavigationCache.current = '';\n    }, [setShowTermsAndConditions, setSelectedStore]);\n\n    const onError = (errors: any) => {\n        // Form validation errors, should not happen since last step\n        // (summary) does not include any validations\n        setShowFormValidationError(true);\n    };\n\n    const isNextStepLoading = submitMutation.isLoading || isDataLoading;\n\n    const accountIsMisconfigured = useMemo(() => {\n        return storesData && storesData.data && storesData.data.length === 0;\n    }, [storesData]);\n\n    const displayConfigurationError = useMemo(() => {\n        return currentFormStep !== 'store' && !configurationData;\n    }, [configurationData, currentFormStep]);\n\n    const nextButtonIsDisabled = useMemo(() => {\n        return !termsAndConditionsProvisioned || accountIsMisconfigured || displayConfigurationError;\n    }, [accountIsMisconfigured, displayConfigurationError, termsAndConditionsProvisioned]);\n\n    const { invalidFieldsConfig } = useInvalidFieldsConfig();\n\n    const getMappedInvalidFields = useCallback(\n        (error: Error | AdyenErrorResponse | null) => {\n            if (!error || !('invalidFields' in error) || !error.invalidFields?.length) return [];\n\n            return error.invalidFields\n                .map((field: { name: string; message: string }) => {\n                    const fieldKey = invalidFieldsConfig.fields?.[field.name];\n                    const messageKey = invalidFieldsConfig.messages?.[field.message];\n\n                    if (!fieldKey && !messageKey) return null;\n\n                    const fieldName = fieldKey ? i18n.get(fieldKey) : field.name;\n\n                    if (!messageKey) return `${fieldName}`;\n\n                    const message = i18n.get(messageKey);\n\n                    return `${fieldName} (${message})`;\n                })\n                .filter((msg: string | null): msg is string => msg !== null);\n        },\n        [i18n, invalidFieldsConfig]\n    );\n\n    const onNavigateToTermsAndConditions = useCallback(() => {\n        selectedStoreNavigationCache.current = selectedStore;\n        setSelectedStore('');\n        setShowTermsAndConditions(true);\n    }, [selectedStore, setSelectedStore, setShowTermsAndConditions]);\n\n    const getSubmitErrorLabel = useCallback(\n        (error: Error | AdyenErrorResponse | null) => {\n            if (getMappedInvalidFields(error).length) return i18n.get('payByLink.creation.form.alert.invalidFields');\n            return i18n.get('payByLink.creation.form.alert.somethingWentWrong');\n        },\n        [getMappedInvalidFields, i18n]\n    );\n\n    const renderErrorDescription = useMemo(() => {\n        const submitError = submitMutation.error as AdyenErrorResponse;\n        const mappedErrors = getMappedInvalidFields(submitError);\n        const hasInvalidFields = mappedErrors.length > 0;\n\n        return (\n            <div className=\"adyen-pe-payment-link-creation-form__error-alert\">\n                {hasInvalidFields && (\n                    <ul className=\"adyen-pe-payment-link-creation-form__invalid-fields-error\">\n                        {mappedErrors.map((msg, idx) => (\n                            <li key={idx}>\n                                <Typography variant={TypographyVariant.CAPTION}>{msg}</Typography>\n                            </li>\n                        ))}\n                    </ul>\n                )}\n                {onContactSupport && (\n                    <div className=\"adyen-pe-payment-link-creation-form__contact-support\">\n                        <Translation\n                            translationKey=\"payByLink.creation.form.error.submit.contactSupport\"\n                            fills={{\n                                contactSupport: (\n                                    <Button variant={ButtonVariant.TERTIARY} onClick={onContactSupport}>\n                                        {i18n.get('common.actions.contactSupport.labels.reachOut')}\n                                    </Button>\n                                ),\n                                errorCode: <CopyText stronger textToCopy={submitError?.requestId || submitError?.errorCode} />,\n                            }}\n                        />\n                    </div>\n                )}\n            </div>\n        );\n    }, [getMappedInvalidFields, i18n, onContactSupport, submitMutation.error]);\n\n    if (!isFirstLoadDone) {\n        return (\n            <div className=\"adyen-pe-payment-link-creation-form__component\">\n                <div className=\"adyen-pe-payment-link-creation-form__header\">\n                    <Typography variant={TypographyVariant.SUBTITLE} stronger>\n                        {i18n.get('payByLink.creation.form.title')}\n                    </Typography>\n                    <LoadingSkeleton />\n                </div>\n            </div>\n        );\n    }\n\n    if (showTermsAndConditions) {\n        return (\n            <PaymentLinkSettingsContainer\n                hideTitle={true}\n                storeIds={selectedStoreNavigationCache.current}\n                settingsItems={['termsAndConditions']}\n                navigateBack={navigateBackFromTermsAndConditions}\n                embeddedInOverview={embeddedInOverview}\n            />\n        );\n    }\n\n    return (\n        <div className=\"adyen-pe-payment-link-creation-form__component\">\n            <div className=\"adyen-pe-payment-link-creation-form__header\" ref={headerRef}>\n                <Typography variant={TypographyVariant.SUBTITLE} stronger>\n                    {i18n.get('payByLink.creation.form.title')}\n                </Typography>\n                <Stepper\n                    nextStepDisabled={!canGoNext || !isStepComplete(currentStep)}\n                    variant=\"horizontal\"\n                    activeIndex={currentStep}\n                    ariaLabel={formStepsAriaLabel}\n                    onChange={onClickStep}\n                >\n                    {stepperItems.map(item => (\n                        <>{item.label}</>\n                    ))}\n                </Stepper>\n            </div>\n            <WizardFormProvider {...wizardForm}>\n                <div className=\"adyen-pe-payment-link-creation-form__container\">\n                    <form\n                        className=\"adyen-pe-payment-link-creation-form\"\n                        onSubmit={e => {\n                            e.preventDefault();\n                            wizardForm.handleSubmit(onSubmit, onError)(e);\n                        }}\n                        ref={formRef}\n                    >\n                        <div>\n                            <FormStepRenderer\n                                setShowTermsAndConditions={onNavigateToTermsAndConditions}\n                                currentFormStep={currentFormStep}\n                                settingsData={settingsData}\n                                storeIds={storeIds}\n                                storesData={storesData}\n                                selectItems={storesSelectorItems}\n                                termsAndConditionsProvisioned={termsAndConditionsProvisioned}\n                                configurationData={configurationData}\n                                isSameAddress={isSameAddress}\n                                setIsSameAddress={setIsSameAddress}\n                                countriesData={countriesData}\n                                isFetchingCountries={isFetchingCountries}\n                                countryDatasetData={countryDatasetData}\n                                isFetchingCountryDataset={isFetchingCountryDataset}\n                            />\n                        </div>\n\n                        {(displayConfigurationError || showFormValidationError) && (\n                            <ErrorMessageDisplay\n                                condensed\n                                title={'common.errors.somethingWentWrong'}\n                                withImage\n                                absolutePosition={false}\n                                outlined={false}\n                                withBackground={false}\n                                message={['payByLink.creation.errors.unavailable', 'common.errors.retry']}\n                            />\n                        )}\n                        {accountIsMisconfigured && (\n                            <Alert\n                                type={AlertTypeOption.WARNING}\n                                title={i18n.get('payByLink.common.errors.accountConfiguration')}\n                                description={\n                                    <div className=\"adyen-pe-payment-link-creation-form__warning-alert\">\n                                        <Typography variant={TypographyVariant.CAPTION} el={TypographyElement.SPAN}>\n                                            {i18n.get('common.errors.contactSupport')}\n                                        </Typography>\n                                        {onContactSupport ? (\n                                            <Button variant={ButtonVariant.TERTIARY} onClick={onContactSupport}>\n                                                {i18n.get('common.actions.contactSupport.labels.reachOut')}\n                                            </Button>\n                                        ) : null}\n                                    </div>\n                                }\n                            />\n                        )}\n                        {submitMutation.isError && (\n                            <Alert\n                                type={AlertTypeOption.CRITICAL}\n                                title={getSubmitErrorLabel(submitMutation.error)}\n                                description={renderErrorDescription}\n                            />\n                        )}\n                        <div className=\"adyen-pe-payment-link-creation-form__buttons-container\">\n                            {(!isFirstStep || onCreationDismiss) && (\n                                <Button variant={ButtonVariant.SECONDARY} onClick={handlePrevious}>\n                                    {i18n.get('payByLink.creation.form.steps.back')}\n                                </Button>\n                            )}\n                            <Button\n                                className=\"adyen-pe-payment-link-creation-form__submit-button\"\n                                type={isLastStep ? 'submit' : 'button'}\n                                variant={ButtonVariant.PRIMARY}\n                                onClick={!isLastStep ? handleContinue : undefined}\n                                state={isNextStepLoading ? 'loading' : undefined}\n                                disabled={nextButtonIsDisabled}\n                                iconRight={<Icon name=\"arrow-right\" />}\n                            >\n                                {isLastStep ? i18n.get('payByLink.creation.form.steps.submit') : i18n.get('payByLink.creation.form.steps.continue')}\n                            </Button>\n                        </div>\n                    </form>\n                </div>\n            </WizardFormProvider>\n        </div>\n    );\n};\n","import cx from 'classnames';\nimport useCoreContext from '../../../../../../core/Context/useCoreContext';\nimport Typography from '../../../../../internal/Typography/Typography';\nimport { TypographyVariant } from '../../../../../internal/Typography/types';\nimport Icon from '../../../../../internal/Icon/Icon';\nimport Button from '../../../../../internal/Button/Button';\nimport { ButtonVariant } from '../../../../../internal/Button/types';\nimport './FormSuccess.scss';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\n\ntype FormSuccessProps = {\n    onGoToDetails: () => void;\n    paymentLinkUrl: string;\n};\nexport const FormSuccess = ({ onGoToDetails, paymentLinkUrl }: FormSuccessProps) => {\n    const { i18n } = useCoreContext();\n\n    const [copied, setCopied] = useState(false);\n    const copiedTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n    useEffect(() => {\n        return () => {\n            if (copiedTimeoutRef.current) {\n                clearTimeout(copiedTimeoutRef.current);\n            }\n        };\n    }, []);\n\n    const onCopy = useCallback(async () => {\n        if (!paymentLinkUrl) return;\n        try {\n            await navigator.clipboard.writeText(paymentLinkUrl);\n\n            setCopied(true);\n            if (copiedTimeoutRef.current) {\n                clearTimeout(copiedTimeoutRef.current);\n            }\n            copiedTimeoutRef.current = setTimeout(() => {\n                setCopied(false);\n                copiedTimeoutRef.current = null;\n            }, 3000);\n        } catch (e) {\n            // no-op\n        }\n    }, [paymentLinkUrl]);\n\n    return (\n        <section className={cx('adyen-pe-payment-link-creation-form-success')}>\n            <div className=\"adyen-pe-payment-link-creation-form-success__content\">\n                <Icon name=\"checkmark-circle-fill\" className=\"adyen-pe-payment-link-creation-form-success__icon\" />\n                <Typography variant={TypographyVariant.TITLE} className=\"adyen-pe-payment-link-creation-form-success__title\">\n                    {i18n.get('payByLink.creation.success.title')}\n                </Typography>\n                <Typography variant={TypographyVariant.BODY} className=\"adyen-pe-payment-link-creation-form-success__description\">\n                    {i18n.get('payByLink.creation.success.description')}\n                </Typography>\n            </div>\n            <div className=\"adyen-pe-payment-link-creation-form-success__actions\">\n                <Button variant={ButtonVariant.SECONDARY} onClick={onGoToDetails}>\n                    {i18n.get('payByLink.creation.success.showDetails')}\n                </Button>\n                <Button\n                    variant={ButtonVariant.PRIMARY}\n                    onClick={onCopy}\n                    iconLeft={<Icon className=\"adyen-pe-payment-link-creation-form-success__button-icon\" name={copied ? 'checkmark' : 'copy'} />}\n                >\n                    {copied ? i18n.get('payByLink.creation.success.copiedToClipboard') : i18n.get('payByLink.creation.success.copyLink')}\n                </Button>\n            </div>\n        </section>\n    );\n};\n","import { ExternalUIComponentProps, PaymentLinkCreationComponentProps } from '../../../../types';\nimport { PaymentLinkCreationFormContainer } from '../PaymentLinkCreationFormContainer/PaymentLinkCreationFormContainer';\nimport '../../PaymentLinkCreation.scss';\nimport { useState } from 'preact/hooks';\nimport { FormSuccess } from '../Form/FormSuccess/FormSuccess';\nimport { PaymentLinkDetails } from '../../../PaymentLinkDetails/components/PaymentLinkDetails/PaymentLinkDetails';\n\ntype PaymentLinkCreationState = 'Creation' | 'Success' | 'Details';\n\nconst PaymentLinkCreationContainer = (props: ExternalUIComponentProps<PaymentLinkCreationComponentProps> & { embeddedInOverview?: boolean }) => {\n    const [state, setState] = useState<PaymentLinkCreationState>('Creation');\n    const [paymentLinkUrl, setPaymentLinkUrl] = useState<string>('');\n    const [paymentLinkId, setPaymentLinkId] = useState<string>('');\n\n    return (\n        <div className=\"adyen-pe-payment-link-creation\">\n            {(() => {\n                switch (state) {\n                    case 'Creation':\n                        return (\n                            <PaymentLinkCreationFormContainer\n                                {...props}\n                                onPaymentLinkCreated={data => {\n                                    props.onPaymentLinkCreated?.(data);\n                                    setPaymentLinkUrl(data.paymentLink?.url ?? '');\n                                    setPaymentLinkId(data.paymentLink?.paymentLinkId ?? '');\n                                    setState('Success');\n                                }}\n                            />\n                        );\n                    case 'Success':\n                        return (\n                            <div>\n                                <FormSuccess paymentLinkUrl={paymentLinkUrl} onGoToDetails={() => setState('Details')} />\n                            </div>\n                        );\n                    case 'Details':\n                        return <PaymentLinkDetails id={paymentLinkId} />;\n                    default:\n                        return null;\n                }\n            })()}\n        </div>\n    );\n};\n\nexport default PaymentLinkCreationContainer;\n","import useCoreContext from '../../../../core/Context/useCoreContext';\nimport { useCallback, useEffect, useState } from 'preact/hooks';\nimport { popoverUtil } from '../../../internal/Popover/utils/popoverUtil';\nimport Modal from '../../../internal/Modal';\nimport { PaymentLinksOverviewModalType } from './types';\nimport PaymentLinkCreationContainer from '../../PaymentLinkCreation/components/PaymentLinkCreationContainer/PaymentLinkCreationContainer';\nimport PaymentLinkSettingsContainer from '../../PaymentLinkSettings/components/PaymentLinkSettingsContainer/PaymentLinkSettingsContainer';\nimport { PaymentLinksOverviewComponentProps } from '../../../types';\nimport { StoreIds } from '../types';\nimport { PaymentLinkCreationFormValues } from '../../PaymentLinkCreation/components/types';\n\nexport interface PaymentLinksOverviewModalProps {\n    isModalVisible: boolean;\n    onCloseModal: () => void;\n    onContactSupport?: () => void;\n    modalType?: PaymentLinksOverviewModalType;\n    paymentLinkCreation: PaymentLinksOverviewComponentProps['paymentLinkCreation'];\n    paymentLinkSettings: PaymentLinksOverviewComponentProps['paymentLinkSettings'];\n    storeIds?: StoreIds;\n    refreshPaymentLinkList?: () => void;\n}\n\nexport const PaymentLinksOverviewModal = ({\n    isModalVisible,\n    onCloseModal,\n    modalType,\n    paymentLinkCreation,\n    paymentLinkSettings,\n    storeIds,\n    onContactSupport,\n    refreshPaymentLinkList,\n}: PaymentLinksOverviewModalProps) => {\n    const { i18n } = useCoreContext();\n    const [hasToRefresh, setHasToRefresh] = useState(false);\n\n    const onCloseCallback = useCallback(() => {\n        onCloseModal();\n        if (hasToRefresh) {\n            refreshPaymentLinkList?.();\n            setHasToRefresh(false);\n        }\n    }, [onCloseModal, hasToRefresh, refreshPaymentLinkList]);\n\n    useEffect(() => {\n        if (isModalVisible) {\n            popoverUtil.closeAll();\n        }\n    }, [isModalVisible]);\n\n    const onPaymentLinkCreated = useCallback(\n        (paymentLink: PaymentLinkCreationFormValues) => {\n            paymentLinkCreation?.onPaymentLinkCreated?.(paymentLink);\n            setHasToRefresh(true);\n        },\n        [paymentLinkCreation]\n    );\n\n    if (!isModalVisible || !modalType) return null;\n\n    return (\n        <div>\n            <Modal\n                isOpen={isModalVisible}\n                aria-label={i18n.get('payByLink.overview.title')}\n                onClose={onCloseCallback}\n                isDismissible={true}\n                headerWithBorder={false}\n                size={'large'}\n            >\n                {modalType === 'Creation' ? (\n                    <PaymentLinkCreationContainer\n                        {...paymentLinkCreation}\n                        onPaymentLinkCreated={onPaymentLinkCreated}\n                        storeIds={storeIds}\n                        onContactSupport={onContactSupport}\n                        embeddedInOverview\n                    />\n                ) : null}\n                {modalType === 'Settings' ? (\n                    <PaymentLinkSettingsContainer\n                        {...paymentLinkSettings}\n                        storeIds={storeIds}\n                        onContactSupport={onContactSupport}\n                        embeddedInOverview\n                    />\n                ) : null}\n            </Modal>\n        </div>\n    );\n};\n","import {\n    ACTION_BUTTON_CLASS,\n    ACTION_BUTTON_MOBILE_CLASS,\n    ACTION_BUTTONS_CONTAINER_CLASS,\n    BASE_ACTIONS_CLASS,\n    BASE_CLASS,\n    BASE_XS_CLASS,\n    DEFAULT_PAYMENT_LINK_STATUS_GROUP,\n    EARLIEST_PAYMENT_LINK_DATE,\n    FILTERS_ALERT_CONTAINER_CLASS,\n    FILTERS_CONTAINER_CLASS,\n    PAYMENT_LINK_STATUS_GROUPS_FILTER_MAPPING,\n    PAYMENT_LINK_STATUS_GROUPS_TABS,\n    PAYMENT_LINK_STATUSES,\n    PAYMENT_LINK_TYPES,\n    TABS_CONTAINER_CLASS,\n} from './constants';\nimport { ExternalUIComponentProps, FilterParam, PaymentLinksOverviewComponentProps } from '../../../types';\nimport { IPaymentLinkFilters, IPaymentLinkStatus, IPaymentLinkStatusGroup, IPaymentLinkType, IPaymentLinkItem } from '../../../../types';\nimport useDefaultOverviewFilterParams from '../../../../hooks/useDefaultOverviewFilterParams';\nimport { FilterBar, FilterBarMobileSwitch, useFilterBarState } from '../../../internal/FilterBar';\nimport { useCursorPaginatedRecords } from '../../../internal/Pagination/hooks';\nimport { Header } from '../../../internal/Header';\nimport { DateFilter } from '../../../internal/FilterBar/filters/DateFilter';\nimport MultiSelectionFilter, { useMultiSelectionFilter } from '../../TransactionsOverview/components/MultiSelectionFilter';\nimport AdyenPlatformExperienceError from '../../../../core/Errors/AdyenPlatformExperienceError';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { isFunction, listFrom } from '../../../../utils';\nimport { useConfigContext } from '../../../../core/ConfigContext';\nimport useCoreContext from '../../../../core/Context/useCoreContext';\nimport { DEFAULT_PAGE_LIMIT, LIMIT_OPTIONS } from '../../../internal/Pagination/constants';\nimport useModalDetails from '../../../../hooks/useModalDetails';\nimport { PaymentLinksTable } from './PaymentLinksTable';\nimport TextFilter from '../../../internal/FilterBar/filters/TextFilter';\nimport Tabs from '../../../internal/Tabs/Tabs';\nimport { TabComponentProps } from '../../../internal/Tabs/types';\nimport './PaymentLinksOverview.scss';\nimport cx from 'classnames';\nimport { containerQueries, useResponsiveContainer } from '../../../../hooks/useResponsiveContainer';\nimport Select from '../../../internal/FormFields/Select';\nimport { AriaAttributes } from 'preact/compat';\nimport { PopoverContainerSize } from '../../../internal/Popover/types';\nimport * as RangePreset from '../../../internal/Calendar/calendar/timerange/presets';\nimport { PaymentLinkDetailsModal } from './PaymentLinkDetailsModal/PaymentLinkDetailsModal';\nimport { PaymentLinksOverviewModalType, StoreData } from './types';\nimport Button from '../../../internal/Button';\nimport { ButtonVariant } from '../../../internal/Button/types';\nimport Icon from '../../../internal/Icon';\nimport { PaymentLinksOverviewModal } from './PaymentLinksOverviewModal';\nimport Alert from '../../../internal/Alert/Alert';\nimport { AlertTypeOption, AlertVariantOption } from '../../../internal/Alert/types';\nimport {\n    getTimeRangeSelectionDefaultPresetOptions,\n    TIME_RANGE_SELECTION_PRESET_OPTION_KEYS,\n} from '../../../internal/DatePicker/components/TimeRangeSelector';\n\nconst PAYMENT_LINK_TYPES_FILTER_PARAM = 'linkTypes';\nconst PAYMENT_LINK_STATUSES_FILTER_PARAM = 'statuses';\nconst PAYMENT_LINK_STORES_FILTER_PARAM = 'storeIds';\nconst LAST_REFRESH_TIMESTAMP_PARAM = '_t';\nconst PAYMENT_LINK_STATUSES_FILTER_VALUES = Object.keys(PAYMENT_LINK_STATUSES) as IPaymentLinkStatus[];\n\nconst PaymentLinksOverviewTabsDropdown = ({\n    ['aria-label']: ariaLabel,\n    activeTab,\n    onChange,\n}: {\n    activeTab: IPaymentLinkStatusGroup;\n    onChange: NonNullable<TabComponentProps<IPaymentLinkStatusGroup>['onChange']>;\n} & Pick<AriaAttributes, 'aria-label'>) => {\n    const { i18n } = useCoreContext();\n\n    const [statusGroup, setStatusGroup] = useState(activeTab);\n\n    const selectItems = useMemo(() => PAYMENT_LINK_STATUS_GROUPS_TABS.map(({ id, label }) => ({ id, name: i18n.get(label) })), [i18n]);\n\n    useEffect(() => {\n        const currentTab = PAYMENT_LINK_STATUS_GROUPS_TABS.find(tab => tab.id === statusGroup);\n        currentTab && onChange(currentTab);\n    }, [onChange, statusGroup]);\n\n    useEffect(() => setStatusGroup(activeTab), [activeTab]);\n\n    return (\n        <Select\n            aria-label={ariaLabel}\n            items={selectItems}\n            selected={statusGroup}\n            onChange={({ target }) => setStatusGroup(target.value as IPaymentLinkStatusGroup)}\n            showOverlay={true}\n            multiSelect={false}\n            filterable={false}\n        />\n    );\n};\n\ninterface PaymentLinksPageRequestParams extends Record<FilterParam | 'cursor', string> {\n    [LAST_REFRESH_TIMESTAMP_PARAM]: DOMHighResTimeStamp;\n}\n\nexport const PaymentLinksOverview = ({\n    onFiltersChanged,\n    allowLimitSelection = true,\n    preferredLimit = DEFAULT_PAGE_LIMIT,\n    onRecordSelection,\n    showDetails,\n    onContactSupport,\n    hideTitle,\n    isFiltersLoading,\n    filterParams,\n    stores,\n    allStores,\n    paymentLinkCreation,\n    paymentLinkSettings,\n    storeIds,\n    filterError,\n    storeError,\n}: ExternalUIComponentProps<\n    PaymentLinksOverviewComponentProps & {\n        filterParams?: IPaymentLinkFilters;\n        stores?: StoreData[];\n        isFiltersLoading: boolean;\n        filterError?: AdyenPlatformExperienceError | undefined;\n        storeError?: AdyenPlatformExperienceError | undefined;\n        allStores?: StoreData[];\n    }\n>) => {\n    const { i18n } = useCoreContext();\n    const { getPaymentLinks, createPBLPaymentLink, savePayByLinkSettings } = useConfigContext().endpoints;\n    const timeRangeOptions = getTimeRangeSelectionDefaultPresetOptions({ exclude: [TIME_RANGE_SELECTION_PRESET_OPTION_KEYS.YEAR_TO_DATE] });\n    const { defaultParams, nowTimestamp, refreshNowTimestamp } = useDefaultOverviewFilterParams(\n        'paymentLinks',\n        undefined,\n        undefined,\n        timeRangeOptions\n    );\n    const [statusGroup, setStatusGroup] = useState<IPaymentLinkStatusGroup>(DEFAULT_PAYMENT_LINK_STATUS_GROUP);\n    const [statusGroupActiveTab, setStatusGroupActiveTab] = useState<IPaymentLinkStatusGroup | undefined>(statusGroup);\n    const [statusGroupFetchPending, setStatusGroupFetchPending] = useState(false);\n    const isMobileContainer = useResponsiveContainer(containerQueries.down.xs);\n    const [showFiltersAlert, setShowFiltersAlert] = useState(false);\n\n    const getPaymentLinksData = useCallback(\n        async ({ [LAST_REFRESH_TIMESTAMP_PARAM]: _, ...pageRequestParams }: PaymentLinksPageRequestParams, signal?: AbortSignal) => {\n            const requestOptions = { signal, errorLevel: 'error' } as const;\n            const filterStoreIds = listFrom<string>(pageRequestParams[FilterParam.STORE_IDS]);\n            const propStoreIds = storeIds ? listFrom<string>(storeIds) : undefined;\n            return getPaymentLinks!(requestOptions, {\n                query: {\n                    ...pageRequestParams,\n                    storeIds: filterStoreIds?.length ? filterStoreIds : propStoreIds,\n                    statuses: listFrom<IPaymentLinkItem['status']>(pageRequestParams[FilterParam.STATUSES]),\n                    linkTypes: listFrom<IPaymentLinkItem['linkType']>(pageRequestParams[FilterParam.LINK_TYPES]),\n                    createdSince:\n                        pageRequestParams[FilterParam.CREATED_SINCE] ?? defaultParams.current.defaultFilterParams[FilterParam.CREATED_SINCE],\n                    createdUntil:\n                        pageRequestParams[FilterParam.CREATED_UNTIL] ?? defaultParams.current.defaultFilterParams[FilterParam.CREATED_UNTIL],\n                    merchantReference:\n                        pageRequestParams[FilterParam.MERCHANT_REFERENCE] ??\n                        defaultParams.current.defaultFilterParams[FilterParam.MERCHANT_REFERENCE],\n                    paymentLinkId:\n                        pageRequestParams[FilterParam.PAYMENT_LINK_ID] ?? defaultParams.current.defaultFilterParams[FilterParam.PAYMENT_LINK_ID],\n                },\n            });\n        },\n        [defaultParams, getPaymentLinks, storeIds]\n    );\n\n    // FILTERS\n    const filterBarState = useFilterBarState();\n    const _onFiltersChanged = useMemo(() => (isFunction(onFiltersChanged) ? onFiltersChanged : void 0), [onFiltersChanged]);\n    const preferredLimitOptions = useMemo(() => (allowLimitSelection ? LIMIT_OPTIONS : undefined), [allowLimitSelection]);\n\n    const defaultFilters = Object.assign(defaultParams.current.defaultFilterParams, {\n        [PAYMENT_LINK_TYPES_FILTER_PARAM]: undefined,\n        [PAYMENT_LINK_STATUSES_FILTER_PARAM]: undefined,\n        statusGroup: DEFAULT_PAYMENT_LINK_STATUS_GROUP,\n        [PAYMENT_LINK_STORES_FILTER_PARAM]: undefined,\n        [LAST_REFRESH_TIMESTAMP_PARAM]: performance.now(),\n    });\n\n    //TODO - Infer the return type of getPaymentLinksData instead of having to specify it\n    const { canResetFilters, error, fetching, filters, limit, limitOptions, records, resetFilters, updateFilters, updateLimit, ...paginationProps } =\n        useCursorPaginatedRecords<IPaymentLinkItem, 'data', string, FilterParam>({\n            fetchRecords: getPaymentLinksData,\n            dataField: 'data',\n            filterParams: defaultFilters,\n            initialFiltersSameAsDefault: true,\n            onFiltersChanged: _onFiltersChanged,\n            preferredLimit,\n            preferredLimitOptions,\n            enabled: !!getPaymentLinks && !!allStores?.length,\n        });\n\n    const linkStatusFilter = useMultiSelectionFilter({\n        mapFilterOptionName: useCallback((status: IPaymentLinkStatus) => i18n.get(PAYMENT_LINK_STATUSES[status]), [i18n]),\n        filterParam: PAYMENT_LINK_STATUSES_FILTER_PARAM,\n        filterValues: filterParams?.statuses?.[PAYMENT_LINK_STATUS_GROUPS_FILTER_MAPPING[statusGroup!]] ?? PAYMENT_LINK_STATUSES_FILTER_VALUES,\n        defaultFilters,\n        updateFilters,\n        filters,\n    });\n\n    const linkTypesFilter = useMultiSelectionFilter({\n        mapFilterOptionName: useCallback((linkType: IPaymentLinkType) => i18n.get(PAYMENT_LINK_TYPES[linkType]), [i18n]),\n        filterParam: PAYMENT_LINK_TYPES_FILTER_PARAM,\n        filterValues: filterParams?.linkTypes,\n        defaultFilters,\n        updateFilters,\n        filters,\n    });\n\n    const storesTypesFilter = useMultiSelectionFilter({\n        mapFilterOptionName: useCallback((storeId: string) => stores?.find(store => store.id === storeId)?.storeCode ?? storeId, [stores]),\n        filterParam: PAYMENT_LINK_STORES_FILTER_PARAM,\n        filterValues: useMemo(() => (stores && stores.length > 0 ? stores.filter(store => store.id).map(store => store.id!) : undefined), [stores]),\n        defaultFilters,\n        updateFilters,\n        filters,\n    });\n\n    useEffect(() => {\n        updateFilters({\n            [FilterParam.CURRENCIES]: undefined,\n        });\n    }, [updateFilters]);\n\n    useEffect(() => {\n        refreshNowTimestamp();\n    }, [filters, refreshNowTimestamp]);\n\n    const paymentLinkDetails = useMemo(\n        () => ({\n            showDetails: showDetails ?? true,\n            callback: onRecordSelection,\n        }),\n        [showDetails, onRecordSelection]\n    );\n\n    const modalOptions = useMemo(() => ({ paymentLink: paymentLinkDetails }), [paymentLinkDetails]);\n\n    const { updateDetails, resetDetails, selectedDetail } = useModalDetails(modalOptions);\n\n    const onRowClick = useCallback(\n        ({ paymentLinkId: id }: IPaymentLinkItem) => {\n            updateDetails({\n                selection: {\n                    type: 'paymentLink',\n                    data: id,\n                },\n                modalSize: 'small',\n            }).callback({ id });\n        },\n        [updateDetails]\n    );\n\n    const onMerchantReferenceFilterChange = useCallback(\n        (merchantReference?: string) => {\n            if (!merchantReference) merchantReference = undefined;\n            updateFilters({ merchantReference: merchantReference });\n        },\n        [updateFilters]\n    );\n\n    const onPaymentLinkIDFilterChange = useCallback(\n        (paymentLinkId?: string) => {\n            if (!paymentLinkId) paymentLinkId = undefined;\n            updateFilters({ paymentLinkId: paymentLinkId });\n        },\n        [updateFilters]\n    );\n\n    const debounceTimeoutIdRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n    const onStatusGroupChange = useCallback<NonNullable<TabComponentProps<IPaymentLinkStatusGroup>['onChange']>>(\n        ({ id: statusGroup }) => {\n            debounceTimeoutIdRef.current && clearTimeout(debounceTimeoutIdRef.current);\n\n            debounceTimeoutIdRef.current = setTimeout(() => {\n                requestAnimationFrame(() => setStatusGroupFetchPending(false));\n\n                const statusFilterParam = PAYMENT_LINK_STATUSES_FILTER_PARAM as FilterParam;\n                const filterUpdates = { statusGroup, [statusFilterParam]: undefined } as any;\n\n                updateFilters(filterUpdates);\n                debounceTimeoutIdRef.current = null;\n            }, 500);\n\n            setStatusGroup(statusGroup);\n            setStatusGroupFetchPending(true);\n\n            // Resetting statusGroupActiveTab to undefined here to allow for subsequent\n            // programmatic status group tab navigation (will not change the active tab).\n            setStatusGroupActiveTab(undefined);\n        },\n        [updateFilters]\n    );\n\n    const statusGroupAriaLabel = useMemo(() => i18n.get('payByLink.overview.list.filters.types.statusGroup'), [i18n]);\n\n    const showTypeFilter = (filterParams?.linkTypes && filterParams?.linkTypes?.length > 0) || !!filterError;\n    const showStatusFilter =\n        (filterParams?.statuses && filterParams?.statuses?.[statusGroup] && filterParams?.statuses?.[statusGroup]?.length > 0) || !!filterError;\n    const showStoreFilter = (stores && stores?.length > 1) || !!storeError;\n\n    const sinceDate = useMemo(() => {\n        return new Date(RangePreset.lastNDays(EARLIEST_PAYMENT_LINK_DATE).from).toString();\n    }, []);\n\n    const [isModalVisible, setModalVisible] = useState(false);\n    const [modalType, setModalType] = useState<PaymentLinksOverviewModalType | undefined>(undefined);\n\n    const openPaymentLinkModal = useCallback(() => {\n        setModalType('Creation');\n        setModalVisible(true);\n    }, []);\n\n    const openSettingsModal = useCallback(() => {\n        setModalType('Settings');\n        setModalVisible(true);\n    }, []);\n\n    const onCloseModal = useCallback(() => {\n        setModalVisible(false);\n    }, []);\n\n    const refreshPaymentLinkList = useCallback(() => {\n        const now = new Date();\n        const currentCreatedUntil = filters?.[FilterParam.CREATED_UNTIL];\n        const createdUntilDate = currentCreatedUntil ? new Date(currentCreatedUntil) : null;\n\n        const isSameDay = createdUntilDate?.toDateString() === now.toDateString();\n\n        updateFilters({\n            ...(isSameDay && { [FilterParam.CREATED_UNTIL]: now.toISOString() }),\n            [LAST_REFRESH_TIMESTAMP_PARAM]: performance.now(),\n        } as any);\n    }, [filters, updateFilters]);\n\n    const sharedModalProps = useMemo(() => {\n        return {\n            onContactSupport,\n            storeIds,\n        };\n    }, [onContactSupport, storeIds]);\n\n    useEffect(() => {\n        setShowFiltersAlert(!!storeError || !!filterError);\n    }, [storeError, filterError]);\n\n    const closeFiltersAlert = useCallback(() => {\n        setShowFiltersAlert(false);\n    }, [setShowFiltersAlert]);\n\n    const hasActionButtons = !!(savePayByLinkSettings || createPBLPaymentLink);\n\n    return (\n        <div className={cx(BASE_CLASS, { [BASE_XS_CLASS]: isMobileContainer })}>\n            <Header hideTitle={hideTitle} titleKey=\"payByLink.overview.title\">\n                <div className={BASE_ACTIONS_CLASS}>\n                    {isMobileContainer && createPBLPaymentLink && (\n                        <Button\n                            iconButton\n                            aria-label={i18n.get('payByLink.overview.list.actions.createPaymentLink')}\n                            className={ACTION_BUTTON_MOBILE_CLASS}\n                            onClick={openPaymentLinkModal}\n                        >\n                            <Icon name={'plus'} />\n                        </Button>\n                    )}\n                    <FilterBarMobileSwitch {...filterBarState} />\n                    {isMobileContainer && savePayByLinkSettings && (\n                        <Button\n                            iconButton\n                            aria-label={i18n.get('payByLink.overview.actions.settings.a11y.label')}\n                            variant={ButtonVariant.SECONDARY}\n                            className={ACTION_BUTTON_MOBILE_CLASS}\n                            onClick={openSettingsModal}\n                        >\n                            <Icon name=\"cog\" />\n                        </Button>\n                    )}\n                </div>\n            </Header>\n            <div className={TABS_CONTAINER_CLASS}>\n                {isMobileContainer ? (\n                    <PaymentLinksOverviewTabsDropdown\n                        aria-label={statusGroupAriaLabel}\n                        activeTab={statusGroupActiveTab ?? statusGroup}\n                        onChange={onStatusGroupChange}\n                    />\n                ) : (\n                    <Tabs\n                        aria-label={statusGroupAriaLabel}\n                        tabs={PAYMENT_LINK_STATUS_GROUPS_TABS}\n                        activeTab={statusGroupActiveTab}\n                        onChange={onStatusGroupChange}\n                    />\n                )}\n            </div>\n            <>\n                {!isFiltersLoading && (\n                    <div className={FILTERS_CONTAINER_CLASS}>\n                        <FilterBar {...filterBarState} ariaLabelKey=\"payByLink.overview.filters.label\">\n                            {showStoreFilter && (\n                                <MultiSelectionFilter\n                                    {...storesTypesFilter}\n                                    isInvalid={!!storeError}\n                                    readonly={!!storeError}\n                                    placeholder={i18n.get('payByLink.overview.filters.types.stores.label')}\n                                />\n                            )}\n                            <DateFilter\n                                canResetFilters={canResetFilters}\n                                defaultParams={defaultParams}\n                                filters={filters}\n                                sinceDate={sinceDate}\n                                nowTimestamp={nowTimestamp}\n                                refreshNowTimestamp={refreshNowTimestamp}\n                                updateFilters={updateFilters}\n                            />\n                            {showTypeFilter && (\n                                <MultiSelectionFilter\n                                    {...linkTypesFilter}\n                                    isInvalid={!!filterError}\n                                    readonly={!!filterError}\n                                    placeholder={i18n.get('payByLink.overview.filters.types.linkTypes.label')}\n                                />\n                            )}\n                            {showStatusFilter && (\n                                <MultiSelectionFilter\n                                    {...linkStatusFilter}\n                                    isInvalid={!!filterError}\n                                    readonly={!!filterError}\n                                    placeholder={i18n.get('payByLink.overview.filters.types.status.label')}\n                                />\n                            )}\n                            <TextFilter\n                                name={i18n.get('payByLink.overview.filters.types.merchantReference.label')}\n                                label={\n                                    filters[FilterParam.MERCHANT_REFERENCE]\n                                        ? filters[FilterParam.MERCHANT_REFERENCE]\n                                        : i18n.get('payByLink.overview.filters.types.merchantReference.label')\n                                }\n                                value={filters[FilterParam.MERCHANT_REFERENCE]}\n                                onChange={onMerchantReferenceFilterChange}\n                                type={'text'}\n                                containerSize={PopoverContainerSize.MEDIUM}\n                            ></TextFilter>\n                            <TextFilter\n                                name={i18n.get('payByLink.overview.filters.types.paymentLinkID.label')}\n                                label={\n                                    filters[FilterParam.PAYMENT_LINK_ID]\n                                        ? filters[FilterParam.PAYMENT_LINK_ID]\n                                        : i18n.get('payByLink.overview.filters.types.paymentLinkID.label')\n                                }\n                                value={filters[FilterParam.PAYMENT_LINK_ID]}\n                                onChange={onPaymentLinkIDFilterChange}\n                                type={'text'}\n                                containerSize={PopoverContainerSize.MEDIUM}\n                            ></TextFilter>\n                            {isMobileContainer && showFiltersAlert && (\n                                <Alert\n                                    className={cx(FILTERS_ALERT_CONTAINER_CLASS)}\n                                    type={AlertTypeOption.CRITICAL}\n                                    variant={AlertVariantOption.TIP}\n                                    closeButton={true}\n                                    onClose={closeFiltersAlert}\n                                    description={i18n.get('payByLink.overview.filters.errors.networkError')}\n                                />\n                            )}\n                        </FilterBar>\n                        {hasActionButtons && !isMobileContainer && (\n                            <div className={ACTION_BUTTONS_CONTAINER_CLASS}>\n                                {createPBLPaymentLink && (\n                                    <Button variant={ButtonVariant.PRIMARY} className={ACTION_BUTTON_CLASS} onClick={openPaymentLinkModal}>\n                                        {i18n.get('payByLink.overview.list.actions.createPaymentLink')}\n                                    </Button>\n                                )}\n                                {savePayByLinkSettings && (\n                                    <Button\n                                        aria-label={i18n.get('payByLink.overview.actions.settings.a11y.label')}\n                                        variant={ButtonVariant.SECONDARY}\n                                        className={ACTION_BUTTON_CLASS}\n                                        onClick={openSettingsModal}\n                                    >\n                                        <Icon name=\"cog\" />\n                                    </Button>\n                                )}\n                            </div>\n                        )}\n                    </div>\n                )}\n                {!isMobileContainer && showFiltersAlert && (\n                    <Alert\n                        className={cx(FILTERS_ALERT_CONTAINER_CLASS)}\n                        type={AlertTypeOption.CRITICAL}\n                        variant={AlertVariantOption.TIP}\n                        closeButton={true}\n                        onClose={closeFiltersAlert}\n                        description={i18n.get('payByLink.overview.filters.errors.networkError')}\n                    />\n                )}\n            </>\n            <PaymentLinkDetailsModal\n                selectedDetail={selectedDetail as ReturnType<typeof useModalDetails>['selectedDetail']}\n                resetDetails={resetDetails}\n                onUpdate={refreshPaymentLinkList}\n            >\n                <PaymentLinksTable\n                    stores={stores}\n                    storeError={storeError}\n                    error={error as AdyenPlatformExperienceError}\n                    limit={limit}\n                    allStores={allStores}\n                    limitOptions={limitOptions}\n                    loading={statusGroupFetchPending || fetching || isFiltersLoading}\n                    onContactSupport={onContactSupport}\n                    onLimitSelection={updateLimit}\n                    onRowClick={onRowClick}\n                    showPagination={true}\n                    paymentLinks={records}\n                    {...paginationProps}\n                />\n            </PaymentLinkDetailsModal>\n            <PaymentLinksOverviewModal\n                modalType={modalType}\n                isModalVisible={isModalVisible}\n                onCloseModal={onCloseModal}\n                paymentLinkSettings={paymentLinkSettings}\n                paymentLinkCreation={paymentLinkCreation}\n                storeIds={sharedModalProps.storeIds}\n                onContactSupport={sharedModalProps.onContactSupport}\n                refreshPaymentLinkList={refreshPaymentLinkList}\n            />\n        </div>\n    );\n};\n","import { useConfigContext } from '../core/ConfigContext';\nimport { useFetch } from './useFetch';\nimport { EMPTY_OBJECT } from '../utils';\nimport { useMemo } from 'preact/hooks';\nimport { useStores } from './useStores';\nimport AdyenPlatformExperienceError from '../core/Errors/AdyenPlatformExperienceError';\n\nconst usePaymentLinkFilters = (storeIds?: string | string[], enabled?: boolean) => {\n    const { payByLinkFilters: getPayByLinkFiltersEndpointCall } = useConfigContext().endpoints;\n\n    // TODO: Add error case. Fallback can be static values or be received from CDN.\n    const {\n        data: filters,\n        isFetching: isFetchingFilters,\n        error: filterError,\n    } = useFetch(\n        useMemo(\n            () => ({\n                fetchOptions: { enabled: !!getPayByLinkFiltersEndpointCall && (enabled ?? true), keepPrevData: true },\n                queryFn: async () => getPayByLinkFiltersEndpointCall?.(EMPTY_OBJECT),\n            }),\n            [getPayByLinkFiltersEndpointCall, enabled]\n        )\n    );\n\n    const { filteredStores: stores, allStores, isFetching: isFetchingStores, error: storeError } = useStores(storeIds);\n\n    const isFetching = isFetchingStores || isFetchingFilters;\n\n    return {\n        filters,\n        stores,\n        isFetching,\n        allStores,\n        filterError: filterError as AdyenPlatformExperienceError,\n        storeError: storeError as AdyenPlatformExperienceError,\n    } as const;\n};\n\nexport default usePaymentLinkFilters;\n","import { PaymentLinksOverview } from './PaymentLinksOverview';\nimport type { ExternalUIComponentProps, PaymentLinksOverviewComponentProps } from '../../../types';\nimport usePaymentLinkFilters from '../../../../hooks/usePaymentLinkFilters';\nimport './PaymentLinksOverview.scss';\n\nfunction PaymentLinksOverviewContainer({ ...props }: ExternalUIComponentProps<PaymentLinksOverviewComponentProps>) {\n    const { filters, isFetching, stores, filterError, allStores, storeError } = usePaymentLinkFilters(props?.storeIds);\n\n    return (\n        <PaymentLinksOverview\n            {...props}\n            filterParams={filters}\n            stores={stores}\n            allStores={allStores}\n            isFiltersLoading={isFetching}\n            filterError={filterError}\n            storeError={storeError}\n        />\n    );\n}\n\nexport default PaymentLinksOverviewContainer;\n","import { _UIComponentProps, ExternalComponentType, PaymentLinksOverviewComponentProps } from '../../types';\nimport UIElement from '../UIElement/UIElement';\nimport PaymentLinksOverviewContainer from './components/PaymentLinksOverviewContainer';\n\nexport class PaymentLinksOverviewElement extends UIElement<PaymentLinksOverviewComponentProps> {\n    public static type: ExternalComponentType = 'paymentLinksOverview';\n\n    constructor(props: _UIComponentProps<PaymentLinksOverviewComponentProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n    }\n\n    public componentToRender = () => {\n        return <PaymentLinksOverviewContainer {...this.props} />;\n    };\n}\n\nexport default PaymentLinksOverviewElement;\n","import { _UIComponentProps, PaymentLinkCreationComponentProps, ExternalComponentType } from '../../types';\nimport UIElement from '../UIElement/UIElement';\nimport PaymentLinkCreationContainer from './components/PaymentLinkCreationContainer/PaymentLinkCreationContainer';\n\nexport class PaymentLinkCreationElement extends UIElement<PaymentLinkCreationComponentProps> {\n    public static type: ExternalComponentType = 'paymentLinkCreation';\n\n    constructor(props: _UIComponentProps<PaymentLinkCreationComponentProps>) {\n        super(props);\n    }\n\n    public componentToRender = () => {\n        return <PaymentLinkCreationContainer {...this.props} />;\n    };\n}\n\nexport default PaymentLinkCreationElement;\n","import { _UIComponentProps, PaymentLinkSettingsComponentProps, ExternalComponentType } from '../../types';\nimport UIElement from '../UIElement/UIElement';\nimport PaymentLinkSettingsContainer from './components/PaymentLinkSettingsContainer/PaymentLinkSettingsContainer';\n\nexport class PaymentLinkSettingsElement extends UIElement<PaymentLinkSettingsComponentProps> {\n    public static type: ExternalComponentType = 'paymentLinkSettings';\n\n    constructor(props: _UIComponentProps<PaymentLinkSettingsComponentProps>) {\n        super(props);\n    }\n\n    public componentToRender = () => {\n        return <PaymentLinkSettingsContainer {...this.props} />;\n    };\n}\n\nexport default PaymentLinkSettingsElement;\n","import { _UIComponentProps, ExternalComponentType } from '../../types';\nimport UIElement from '../UIElement/UIElement';\nimport { PaymentLinkDetails } from './components/PaymentLinkDetails/PaymentLinkDetails';\nimport { PaymentLinkDetailsProps } from './types';\n\nexport class PaymentLinkDetailsElement extends UIElement<PaymentLinkDetailsProps> {\n    public static type: ExternalComponentType = 'paymentLinkDetails';\n\n    constructor(props: _UIComponentProps<PaymentLinkDetailsProps>) {\n        super(props);\n        this.componentToRender = this.componentToRender.bind(this);\n    }\n\n    public componentToRender = () => {\n        return <PaymentLinkDetails {...this.props} />;\n    };\n}\n\nexport default PaymentLinkDetailsElement;\n","import { Core, CoreOptions, TranslationSourceRecord } from './core';\nimport './components/shared.scss';\nimport './style/index.scss';\n\nexport * from './core';\nexport * from './components';\nexport * from './types';\n\nexport async function AdyenPlatformExperience<AvailableTranslations extends TranslationSourceRecord[] = [], CustomTranslations extends {} = {}>(\n    props: CoreOptions<AvailableTranslations, CustomTranslations>\n) {\n    const core = new Core(props);\n    return await core.initialize();\n}\n"],"names":["API_ENVIRONMENTS","CDN_ENVIRONMENTS","fn","asyncNoop","identity","value","noop","unreachable","_toString","toStringTag","deepFreeze","obj","prop","isBoolean","isFunction","isNull","isNullish","isNumber","isPlainObject","isString","isSymbol","isUndefined","ABORT_EVENT","DEFAULT_ABORT_ERROR_MESSAGE","boolify","fallbackBoolean","boolOrFalse","boolOrTrue","falsify","_","truthify","enumerable","writable","getter","get","hasOwnProperty","sameValue","a","b","abortError","message","augmentSignalReason","signal","reason","abortedSignal","_controller","_reason","abortSignalForAny","signals","_sourceSignals","abort","setup","NIL_EXCEPTION","_exception","filter","maybeSignal","isAbortSignal","ex","EMPTY_ARRAY","EMPTY_OBJECT","ALREADY_RESOLVED_PROMISE","tryResolve","args","resolve","getMappedValue","key","map","factory","listFrom","fallbackList","stringedValue","stringedList","pickFrom","list","option","defaultOption","some","_uniqueFlatten","reversed","items","uniqueItems","item","MINUTE_IN_MS","HOUR_IN_MS","DAY_IN_MS","WEEK_IN_MS","parseDate","timestamp","transformToMS","unit","downloadBlob","blob","filename","url","clickHandler","clamp","min","max","isBitSafeInteger","isInfinity","mid","low","high","mod","modulo","MAX_BYTE_SCALE","getByteScale","bytes","getFileSize","scale","size","getHumanReadableFileSize","getUploadedFilesFromSource","uploadedFileSource","uploadedFiles","file","uniqueId","counter","prefix","uuid","_UUID_V4_FILLER_STRING","xy","randomNibble","asPlainObject","fallback","structFrom","struct","withFreezeProxyHandlers","handler","capitalize","str","isEmptyString","API_VERSION","AdyenPlatformExperienceError","type","requestId","errorCode","invalidFields","status","FILENAME_EXTRACTION_REGEX","ErrorTypes","getErrorType","getApiVersion","options","version","getResponseContentType","response","getResponseDownloadFilename","getRequestBodyForContentType","body","contentType","getRequestObject","headers","method","SDKVersion","handleFetchError","level","isAdyenErrorResponse","data","parseSearchParams","parameters","params","param","errorHandlerHelper","errorHandler","error","http","errorLevel","loadingContext","path","versionless","apiVersion","request","baseUrl","normalizeLoadingContext","versionPath","normalizeUrl","decodedValue","errorPassThrough","res","httpGet","FALLBACK_ENV","FALLBACK_CDN_ENV","resolveEnvironment","envs","cdnEnvs","env","cdnUrl","getConfigFromCdn","name","extension","subFolder","getDatasetFromCdn","SETUP_ENDPOINTS_API_VERSIONS","SETUP_ENDPOINT_PATH","AUTO_REFRESH","MAX_AGE_MS","maxAgeMs","createAbortable","abortReason","_abortController","_abortSignal","_abortPromise","_abort","_getAbortPromise","reject","_refresh","abortable","createDeferred","_promise","_reject","_resolve","previousResolve","currentPromise","deferred","createPromisor","_abortable","_deferred","isLatestPromise","bytesToBase64","binString","byte","encodeAnalyticsEvent","event","formattedOptions","encodedData","getEventTime","time","SetupContext","_session","_refreshPromise","endpoints","rest","promisorSignal","abortSignal","retryPayload","payload","availableEndpoints","sessionAwareEndpoints","isActive","revoke","target","endpoint","receiver","overrideHttpOptions","httpOptions","requestParams","pathParams","searchParams","pathParamKey","ERR_SESSION_EXPIRED","ERR_SESSION_FACTORY_UNAVAILABLE","ERR_SESSION_HTTP_UNAVAILABLE","ERR_SESSION_INVALID","ERR_SESSION_REFRESH_ABORTED","EVT_SESSION_EXPIRED","EVT_SESSION_READY","EVT_SESSION_REFRESHED","EVT_SESSION_REFRESHING_END","EVT_SESSION_REFRESHING_START","INTERNAL_EVT_SESSION_DEADLINE","INTERNAL_EVT_SESSION_READY","INTERNAL_EVT_SESSION_REFRESHING_END","INTERNAL_EVT_SESSION_REFRESHING_START","_canAutofresh","refresher","specification","canAutofresh","_autoRefresh","createSessionAutofresher","_unlistenExpired","_autofresh","_autofreshSignal","_autofreshPromisor","skipCanAutofreshCheck","_destruct","DEFAULT_INTERVAL_MS","MAX_INTERVAL_MS","createInterval","callback","ms","runCallbackAsap","_intervalDelay","_shouldRunCallbackAsap","_startTime","_cancel","_frame","_scheduleFrame","delay","elapsed","roundedElapsed","createWatchListCurrentStateRecord","entries","statePropertyDescriptors","entriesPropertyDescriptors","createWatchListSubscriptionEventCallbacks","callbacks","descriptors","UNSUBSCRIBE_TOKEN","isWatchlistUnsubscribeToken","currentStateSnapshotOrUnsubscribeToken","createWatchlist","lastStateSnapshot","currentState","subscriptionEventCallbacks","subscriptionCallbacksWithReferenceCounting","unsubscribeCallbacks","_getCurrentStateSnapshot","_isWithoutSubscriptionCallbacks","_notifySubscriptions","unsubscribeToken","subscriptionCallbacks","referenceCount","unsubscribeCallback","currentStateSnapshot","subscribe","subscriptionCallback","unsubscribe","subscriptionCallbackReferenceCount","willResumeSubscriptions","clock","interval","cancelSubscriptions","requestNotification","on","createEventEmitter","_eventTarget","_emitEvent","restArgs","detail","_onEvent","listener","_listener","evt","createSessionDeadline","emitter","_deadlineSignal","_deadlineTimestamp","_refreshPromisorSignal","_stopDeadlineClock","_deadlineAbortable","_deadlineEmitter","_clearDeadline","_refreshPromisor","session","deadline","_deadline","_deadlines","_deadlineElapsed","_signals","_startDeadlineClock","unsubscribeClock","snapshotOrSignal","createSessionRefresher","_refreshPending","_refreshingPromise","_refreshingSignal","_waitForRefreshingPromise","_sessionPlaceholder","_refresherEmitter","_assertSession","_assertSessionFactory","_refreshSession","nextSession","SessionContext","_specification","beforeHttp","AuthSessionSpecification","onSessionCreate","maybeSession","id","token","deadlines","issuedAt","expiresAt","issuedAtDate","sessionSignal","restOptions","sessionHttpOptions","_http","_NO_ERR","_assertError","createErrorContainer","_error","_resetError","_setError","AuthSession","skipSessionRefreshIfPossible","authStateChanged","isLatestRefresh","onlySetupRefresh","unlisteners","unlisten","analyticsEnabled","_en_US","EN_US","da_DK","de_DE","es_ES","fi_FI","fr_FR","it_IT","nl_NL","no_NO","pt_BR","sv_SE","en_US","all_locales","FALLBACK_LOCALE","DEFAULT_TRANSLATIONS","DEFAULT_DATETIME_FORMAT","EXCLUDE_PROPS","getLocalesFromTranslationSourcesRecord","sources","locale","SUPPORTED_LOCALES","CURRENCY_CODES","CURRENCY_DECIMALS","getDivider","currencyCode","isValidCurrencyCode","getCurrencyCode","getDecimalAmount","amount","divider","getLocalisedAmount","hideCurrency","stringAmount","decimalAmount","formatterLocale","formatterOptions","formatAmountWithoutCurrency","p","REGEX_TZ_OFFSET","BASE_FORMAT_OPTIONS","BASE_LOCALE","SYSTEM_TIMEZONE","SYSTEM_TIMEZONE_FORMATTER","DIGITS_2","NUMERIC","REGEX_GMT_OFFSET_UNWANTED_SUBSTRINGS","REGEX_TZ_SINGLE_DIGIT_OFFSET","computeTimezoneOffsetInMinutes","offsetHours","offsetMinutes","computeTimezoneOffsetsFromMinutes","timezoneOffsetInMinutes","parseTimezoneOffset","offset","getGMTSuffixForTimezoneOffset","timezoneOffset","getTimezoneOffsetFromFormattedDateString","date","offsets","getTimezoneOffsetForTimestamp","timezoneFormatter","systemOffset","restamp","restamper","direction","systemToTimezone","timezoneToSystem","getTimeZone","setTimeZone","timeZone","nextFormatter","nextTimeZone","formatter","context","set","tz","DEFAULT_TRANSLATION_OPTIONS","LOCALE_FORMAT_REGEX","toTwoLetterCode","matchLocale","supportedLocales","twoLetterCode","supportedLocale","formatLocale","localeString","languageCode","countryCode","fullLocale","parseLocale","trimmedLocale","formattedLocale","formatCustomTranslations","customTranslations","translations","replaceTranslationValues","translation","values","repetitions","placeholderIndex","placeholder","repetitionIndex","replacementValue","getTranslation","count","countKey","pluralKey","loadTranslations","fetchTranslationFromCdnPromise","localeToLoad","loadedLocale","createTranslationsLoader","_locale","_preferredLocale","_supportedLocales","getLocalizationProxyDescriptors","descriptor","Localization","#locale","#languageCode","#availableLocales","#supportedLocales","#customTranslations","#translations","#translationsLoader","#fetchTranslationFromCdnPromise","#ready","#currentRefresh","#markRefreshAsDone","#refreshWatchlist","#restamp","#keySwapConfig","localSwapConfig","#warnedDeprecatedKeys","availableTranslations","cdnTranslationsUrl","cdnConfigUrl","records","curr","config","localesFromCustomTranslations","index","locales","#refreshTranslations","timezone","currentRefreshDone","currentRefresh","initialSwapKey","currentKey","keyChain","visitedKeys","nextSwapKey","i","translationKey","restOfOptions","localisedAmount","dateOptions","Assets","cdnContext","resourceUrl","mainFolder","props","defaultProps","oldTranslationKeys","currentTranslationKeys","currentTranslations","getCustomTranslationsAnalyticsPayload","payloads","customizedLocale","baseEventProperties","keys","oldCustomizedKeys","oldTranslationsEvent","matchingCustomizedKeys","allTranslationsEvent","newLanguageEvent","Core","cdnAssetsUrl","apiUrl","analyticsPayload","component","c","n","l","u","t","o","r","e","f","s","h","v","y","d","w","g","m","k","x","S","C","M","$","O","N","I","P","B","A","L","D","H","T","j","F","E","V","z","q","G","K","Q","defaultUserEvents","AnalyticsContext","createContext","UserEvents","componentName","nextEvent","eventName","properties","completeEvent","variant","baseTrackingPayload","createUserEvents","U","W","Z","Y","J","X","en","rn","un","cn","an","sn","fixedForwardRef","render","forwardRef","memoComparator","_comparedProps","_propHasChanged","prev","next","getters","EXCESS_WHITESPACE_CHAR","parseClassName","fallbackClassName","className","getClassName","requiredClassName","classnames","getModifierClasses","modifiers","baseClasses","parseBooleanProp","DEFAULT_BUTTON_CLASSNAME","BUTTON_ANCHOR_CLASSNAME","BUTTON_ACTION_CLASSNAME","ICON_BUTTON_CLASSNAME","ICON_BUTTON_CONTENT_CLASSNAME","BUTTON_ACTION_CONTAINER_CLASSNAME","BUTTON_LABEL_CLASSNAME","BUTTON_ICON_RIGHT_CLASSNAME","BUTTON_ICON_LEFT_CLASSNAME","BUTTON_CONDENSED_CLASSNAME","BUTTON_FULL_WIDTH_CLASSNAME","BUTTON_LOADING_CLASSNAME","BUTTON_LABEL_CENTERED_CLASSNAME","Spinner","inline","jsx","DEFAULT_TYPOGRAPHY_CLASSNAME","TypographyVariant","TypographyModifier","TypographyElement","Typography","el","stronger","strongest","medium","large","testId","wide","children","Tag","conditionalClasses","useMemo","cx","memo","useButton","classNameModifiers","defaultClassName","disabled","onClick","iconLeft","iconRight","iconButton","fullWidth","condensed","state","click","useCallback","classes","allProps","allChildren","jsxs","Fragment","ButtonVariant","Button","ref","classNameValue","disabledValue","restOfAllProps","CoreContext","useCoreContext","useContext","BASE_CLASS","IMAGE_BREAKPOINT_MEDIUM_PX","ErrorMessageSeparator","ErrorMessageDisplay","title","imageDesktop","imageMobile","withImage","centered","refreshComponent","onRefreshComponent","onContactSupport","translationValues","absolutePosition","outlined","renderSecondaryButton","withBackground","withHeaderOffset","i18n","updateCore","getImageAsset","renderMessage","errorMessage","getComponentAvailabilityFromEndpoint","componentAvailabilityRegistry","sessionReady","ready","readyPromise","refreshInProgress","didTriggerRefresh","canRefreshSession","sessionUnsubscribe","maybeUnsubscribeToken","sessionAwareComponentAvailability","componentAvailabilityErrors","ConfigContext","ConfigProvider","refresh","setContextCounter","useState","unsubscribeCounter","setUnsubscribeCounter","hasPermission","setHasPermission","useEffect","maybeContext","toChildArray","useConfigContext","catchCallback","useMutation","queryFn","retry","retryDelay","onSuccess","onError","onSettled","shouldRetry","setData","setError","setStatus","mountedRef","useRef","retryCountRef","reset","resetRetries","mutate","variables","result","maxRetries","usePushAnalyticEvent","sendTrackEvent","sendAnalytics","track","AnalyticsProvider","pushAnalyticsEvent","pushEvent","userEvents","useBooleanState","initialState","setState","updateState","toggleState","CoreProvider","_commonProps","_loadingContext","externalErrorHandler","componentRef","getDatasetAsset","getCdnDataset","getCdnConfig","setReady","commonProps","coreContextValues","BaseElement","newState","domNode","node","newComponent","UIElement","createRef","core","popoverUtil","popoverRefs","closePopoversOutsideOfClick","eventPath","popoverRef","controlElement","CONTROL_ELEMENT_PROPERTY","pathMatchIndex","closeNestedPopovers","remove","currentRef","refs","add","fromIndex","popoverLength","REF","ReflexError","UnknownRefError","MissingReflexActionError","assertReflexAction","isReflex","notDefined","unwrap","reflexable","isRefObject","createReflexRegister","_getRecordForRef","register","record","_bindReflexAction","action","actions","_ref","isCallbackRef","_updateCurrentInstance","instance","_current","reflex","previous","_unbindReflexAction","bindings","_register","$globalReflexRegister","createIsolatedFauxReflex","$actions","createReflexContainer","_reflex","_reflexable","_reflexAction","_released","_refreshContainer","_releaseContainer","currentReflexable","useReflex","container","useLayoutEffect","ClickOutsideVariant","onFocusout","useClickOutside","rootElementRef","disableClickOutside","mouseDownInsideRef","handleClickOutside","eventPathIndex","samePath","currentElement","nextInPath","handleMouseDown","handleClick","element","current","LONG","SHORT","SHORT_OFFSET","BASE_DATE_FORMAT","BASE_TIME_FORMAT","BASE_DATE_TIME_FORMAT","BASE_DATE_TIME_MOBILE_FORMAT","DATE_FORMAT_CAPITAL_OVERVIEW","DATE_FORMAT_MISSING_ACTION","DATE_FORMAT_DISPUTES","DATE_FORMAT_DISPUTE_DETAILS","DATE_FORMAT_PAYMENT_LINKS_OVERVIEW","DATE_FORMAT_PAYMENT_LINKS_OVERVIEW_EXPIRATION_DATE","DATE_FORMAT_PAYMENT_LINK_DETAILS_TABS","DATE_FORMAT_PAYMENT_LINK_DETAILS_SUMMARY","DATE_FORMAT_PAYOUTS","DATE_FORMAT_PAYOUTS_MOBILE","DATE_FORMAT_PAYOUT_DETAILS","DATE_FORMAT_REPORTS","DATE_FORMAT_TRANSACTIONS","DATE_FORMAT_TRANSACTIONS_MOBILE","DATE_FORMAT_TRANSACTION_DETAILS","DATE_FORMAT_RESPONSE_DEADLINE","DATE_FORMAT_DELIVERY_DATE","BREAKPOINTS","useContainerQuery","query","width","setWidth","breakpoint","minMax","queryMatch","containerElement","resizeObserver","entry","containerQueries","useResponsiveContainer","SELECTORS","ATTRIBUTES","CHECKED_RADIOS","isInput","isRadio","isCheckedRadio","form","checkedRadiosForForm","checkedRadio","getDeepActiveElement","root","activeEl","focusIsWithin","rootElement","elementWithFocus","activeElement","parentElement","isFocusable","isTabbable","withTabbableRoot","observer","shouldRefresh","getTabbables","tabbables","currentIndex","focusAt","tabbableIndex","constrainedIndex","observerConfig","walkAndObserve","rootNode","walker","currentNode","tabbableRoot","shouldRefreshTabbables","maybeTabbableOrOffset","maybeElement","InteractionKeyCode","FilterParam","useFocusTrap","onEscape","escapedFocus","focusElement","interactionKeyPressed","lastInteractionKey","lastTabDirection","setRootTabIndex","focusFallback","lastFocused","onClickCapture","lastFocusableElement","raf","onFocusInCapture","onDocumentFocusInCapture","nextIndex","onFocusOut","onKeyDownCapture","icons","Icon","IconComponent","setIconComponent","LoadedIcon","ModalContext","useModalContext","Modal","isOpen","onClose","isDismissible","headerWithBorder","isSmContainer","focusCaptureElement","focusRestoreElement","handleDismiss","modalRootElement","tabbableHandle","tabbable","useFetch","keepPrevData","enabled","cancelRequest","fetchData","fetchReducer","dispatch","useReducer","useUniqueId","ACCORDION_BASE_CLASS","ACCORDION_HEADER_CLASS","ACCORDION_HEADER_CONTAINER_CLASS","ACCORDION_HEADER_CONTROLLER_CLASS","ACCORDION_CONTENT_CLASS","Accordion","classNames","header","headerInformation","isExpanded","setIsExpanded","accordionContentRef","toggle","contentElementId","controllerElementId","CARD_BASE_CLASS","CARD_EXPANDABLE_CLASS","CARD_TOGGLE_CLASS","CARD_BODY","CARD_HEADER","CARD_TITLE","CARD_SUBTITLE","CARD_HEADER_CONTENT","CARD_BODY_WITH_TITLE","CARD_NO_OUTLINE","CARD_NO_PADDING","CARD_FILLED","CARD_FOOTER","CARD_COMPACT","Card","subTitle","expandable","footer","renderHeader","renderFooter","filled","noOutline","noPadding","compact","showContent","setShowContent","cardId","toggleExpansion","onKeyDown","cardContainerAttributes","SL_BASE_CLASS","SL_ALIGN_END","SL_EXPANDED_CLASS","SL_ITEM_CLASS","SL_GRID_CLASS","SL_CONTENT_CLASS","SL_LABEL_CLASS","SL_ITEM_WITH_HIGHLIGHT_CLASS","useStructuredListItems","DEFAULT_LAYOUT","StructuredList","ariaLabel","highlightable","renderValue","renderLabel","layout","grid","align","LABEL_COL_CLASS","VALUE_COL_CLASS","formattedItems","typographyVariant","SKELETON_CLASS","SKELETON_CONTAINER","SKELETON_LOADING","STATUS_SKELETON","DataOverviewDetailsSkeleton","skeletonRowNumber","skeletonRows","statusSkeletonRows","_useAtomicTimezoneOperation","operation","timezoneToRestore","_useActiveTimezone","getActiveTimezone","useTimezoneAwareDateFormatting","activeTimezone","dateFormat","fullDateFormat","PD_BASE_CLASS","PD_TITLE_CONTAINER_CLASS","PD_TITLE_CLASS","PD_TITLE_CLASS_WITH_EXTRA_DETAILS","PD_TITLE_BA_CLASS","PD_CONTENT_CLASS","PD_EXTRA_DETAILS_CLASS","PD_EXTRA_DETAILS_LABEL","PD_EXTRA_DETAILS_ICON","PD_BUTTON_ACTIONS","PD_SECTION_CLASS","PD_CARD_CLASS","PD_CARD_TITLE_CLASS","PD_SECTION_AMOUNT_CLASS","PD_SECTION_GROSS_AMOUNT_CLASS","PD_SECTION_NET_AMOUNT_CLASS","PD_UNPAID_AMOUNT","TagVariant","label","Link","href","truncate","withIcon","alt","DataGridContext","useDataGridContext","DataGridCell","column","position","registerCells","isValidElement","cloneElement","isCustomDataObject","_isIconType","_isButtonType","_isLinkType","TableCells","columns","customCells","rowIndex","icon","buttonCallback","ButtonActionsLayoutBasic","ButtonActionsLayoutExtended","ButtonActionsLayout","ButtonActions","generateButtonVariantByIndex","actionIndex","lastActionIndex","reversedActions","button","createKeyFactoryFromConfig","suffix","createDynamicTranslationFactory","keyFactory","translationFallback","DISPUTE_ACTION_NEEDED_URGENTLY_THRESHOLD_DAYS","DISPUTE_PAYMENT_SCHEMES","DISPUTE_REASON_CATEGORIES","DISPUTE_STATUS_GROUPS","DISPUTE_STATUSES","DISPUTE_TYPES","TransactionsView","createRangeTimestampsConfigRestampingContext","getRangeTimestampsContextIntegerPropertyFactory","minInteger","maxInteger","defaultInteger","_getNormalizedValue","fallbackValue","normalizedValue","clampedValue","initialValue","valueGetter","currentValue","getRangeTimestampsConfigParameterUnwrapper","isRangeTimestampsConfigWithoutOffsets","isRangeTimestampsConfigWithFromOffsets","nowTimestamp","now","offsetsForNDays","_cache","numberOfDays","parseRangeTimestamp","normalizedTimestamp","parsedTimestamp","getDateRangeTimestamps","range","restoreRangeState","timestampToRestore","from","to","createRangeTimestampsFactory","additionalContext","_config","_additionalContext","_restamper","nowDescriptor","NOW","tzDescriptor","configContext","nowSetter","parsing","withRangeFrom","years","months","days","hours","minutes","seconds","tzSetter","currentTimezone","DATE_PARTS_REGEX","_startTimestamp","adjustDate","withTimezone","restampedDate","startOfDay","startOfMonth","startOfYear","startOfWeek","firstWeekDay","dateOffset","getWeekDayIndex","isLeapYear","year","getMonthDays","month","nextMonth","monthIndex","nextYear","weekDay","computeTimestampOffset","getDateObjectFromTimestamp","getTimezoneDateString","getTimezoneDateParts","dateString","day","getEdgesDistance","fromTime","toTime","fromYear","fromMonth","toYear","toMonth","ONE_MONTH_OFFSETS","offsetMonth","monthCount","lastMonth","MAX_NUM_DAYS","MIN_NUM_DAYS","DEFAULT_NUM_DAYS","_getNumberOfDaysContext","lastNDays","numberOfDaysContext","DEFAULT_FIRST_WEEK_DAY","ONE_WEEK_OFFSETS","_getFirstWeekDayContext","offsetWeek","weekCount","weeks","restConfig","firstWeekDayContext","lastWeek","thisMonth","thisWeek","yearToDate","ROOT_CLASS","DETAILS_CLASS","TRANSACTION_DATE_RANGE_CUSTOM","TRANSACTION_DATE_RANGE_LAST_7_DAYS","TRANSACTION_DATE_RANGE_LAST_30_DAYS","TRANSACTION_DATE_RANGE_LAST_180_DAYS","TRANSACTION_DATE_RANGE_THIS_WEEK","TRANSACTION_DATE_RANGE_LAST_WEEK","TRANSACTION_DATE_RANGE_THIS_MONTH","TRANSACTION_DATE_RANGE_LAST_MONTH","TRANSACTION_DATE_RANGE_YEAR_TO_DATE","TRANSACTION_DATE_RANGE_DEFAULT","TRANSACTION_DATE_RANGES","RangePreset.lastNDays","RangePreset.thisWeek","RangePreset.lastWeek","RangePreset.thisMonth","RangePreset.lastMonth","RangePreset.yearToDate","TRANSACTION_DATE_RANGE_DEFAULT_TIMESTAMPS","TRANSACTION_DATE_RANGE_MAX_YEARS","TRANSACTION_CATEGORIES","TRANSACTIONS_VIEW_TABS","INITIAL_FILTERS","EXPORT_COLUMNS","DEFAULT_EXPORT_COLUMNS","TRANSACTION_ANALYTICS_CATEGORY","TRANSACTION_ANALYTICS_SUBCATEGORY_DETAILS","TRANSACTION_ANALYTICS_SUBCATEGORY_INSIGHTS","TRANSACTION_ANALYTICS_SUBCATEGORY_LIST","UNDEFINED_ERROR","getCommonErrorMessage","DEFAULT_POPOVER_CLASSNAME","DEFAULT_TOOLTIP_CLASSNAME","POPOVER_CONTAINER_CLASSNAME","POPOVER_HEADER_CLASSNAME","POPOVER_HEADER_TITLE_CLASSNAME","POPOVER_CONTENT_CLASSNAME","TOOLTIP_CONTENT_CLASSNAME","POPOVER_FOOTER_CLASSNAME","PopoverDismissButton","image","PopoverTitle","isImageTitle","PopoverContainerVariant","PopoverContainerPosition","PopoverContainerSize","getIntersectionObserver","observerCallbackMap","withIntersectionObserver","findObserver","callbackFn","observerInstance","FULL_WIDTH_TOOLTIP_POSITIONS","POPOVER_DIAGONAL_HORIZONTAL_OFFSET","ARROW_OFFSET","SCREEN_EDGE_MARGIN","calculateOffset","additionalStyle","fixedPositioning","fitPosition","forceFixed","popover","targetElement","translateX","translateY","isTooltip","popoverHeight","popoverWidth","popoverContent","popoverContentHeight","popoverContentWidth","bodyPosition","targetPosition","toCenterFullWidth","toCenterX","toCenterY","scrollX","scrollY","offsetStyle","isMaxLimits","isMinLimits","targetVerticalPosition","height","targetHeight","usePopoverPositioner","arrowRef","setToTargetWidth","showOverlay","contentRef","initialPosition","setInitialPosition","showPopover","setShowPopover","currentPosition","setCurrentPosition","checkedPositions","setCheckedPosition","currentPositionRef","lastTargetRectRef","rafId","handleScroll","targetRect","lastRect","popoverStyle","observerCallback","screenWidth","bestPos","pos","observerCallbackRef","style","positionX","positionY","useUniqueIdentifier","findFirstFocusableElement","focusable","elements","elem","getGapByVariant","Popover","disableFocusTrap","actionsLayout","open","dismissible","fitContent","withoutSpace","containerSize","dismiss","withContentPadding","setPopoverElement","uncontrolledProps","popoverOpen","onCloseFocusTrap","cachedOnKeyDown","autoFocusAnimFrame","popoverPositionAnchorElement","popoverFocusTrapElement","popoverElement","popoverElementWithId","classNamesByVariant","classNamesContentByVariant","createPortal","useTooltipListeners","isVisible","setIsVisible","visibilityTimerRef","clearVisibilityTimer","showTooltip","hideTooltip","content","Tooltip","isUnderlineVisible","listeners","targetElementRef","canShowTooltip","targetClassName","BASE_CLASSNAME","CopyText","copyButtonAriaLabelKey","textToCopy","visibleText","onCopyText","showCopyTextTooltip","restProps","isCopied","setIsCopied","resetIsCopied","copyButtonLabel","visibleTextToCopy","getErrorMessage","commonError","secondaryErrorMessage","DataOverviewError","ContactSupport","TableBody","onRowHover","onHoverEnter","onHoverLeave","useInteractiveDataGrid","totalRows","total","INITIAL_STATE","optionIndex","onFocusCapture","InteractiveBody","onRowClick","onClickCallBack","SkeletonBody","columnsNumber","loading","emptyMessageDisplay","rows","DataGridProvider","minWidthByColumn","existingWidth","getMinWidthByColumn","TableHeaderCell","cellKey","DataGrid","errorDisplay","DataGridTable","autoFitColumns","child","DataGridFooter","emptyBody","showMessage","visibleCols","cellWidths","col","DataGridBody","showSkeleton","ARIA_ERROR_SUFFIX","CommitAction","useCommitAction","applyDisabled","applyTitle","resetDisabled","resetTitle","onResetAction","commitAction","setCommitAction","applyAction","resetAction","resetCommitAction","applyButtonAction","resetButtonAction","commitActionButtons","committing","Img","backgroundUrl","src","showOnError","loaded","setLoaded","imageRef","handleLoad","handleError","modifier","DROPDOWN_BASE_CLASS","DROPDOWN_BUTTON_CLASS","DROPDOWN_BUTTON_ACTIVE_CLASS","DROPDOWN_BUTTON_COLLAPSE_INDICATOR_CLASS","DROPDOWN_BUTTON_CLEAR_CLASS","DROPDOWN_BUTTON_HAS_SELECTION_CLASS","DROPDOWN_BUTTON_ICON_CLASS","DROPDOWN_BUTTON_MULTI_SELECT_COUNTER_CLASS","DROPDOWN_BUTTON_READONLY_CLASS","DROPDOWN_BUTTON_TEXT_CLASS","DROPDOWN_BUTTON_VALID_CLASS","DROPDOWN_BUTTON_INVALID_CLASS","DROPDOWN_ELEMENT_CLASS","DROPDOWN_ELEMENT_ACTIVE_CLASS","DROPDOWN_ELEMENT_KEYBOARD_ACTIVE_CLASS","DROPDOWN_ELEMENT_CHECKBOX_CLASS","DROPDOWN_ELEMENT_CHECKMARK_CLASS","DROPDOWN_ELEMENT_CONTENT_CLASS","DROPDOWN_ELEMENT_DISABLED_CLASS","DROPDOWN_ELEMENT_ICON_CLASS","DROPDOWN_ELEMENT_NO_OPTION_CLASS","DROPDOWN_LIST_CLASS","DROPDOWN_LIST_ACTIVE_CLASS","DROPDOWN_MULTI_SELECT_CLASS","SelectButtonElement","active","filterable","toggleButtonRef","buttonVariant","buttonClasses","baseClassName","SelectButton","clearable","multiSelect","onClear","readonly","showList","withoutCollapseIndicator","placeholderText","buttonActiveItem","buttonTitleText","showClearButton","renderDefaultMultiSelectionCheckedness","renderDefaultSingleSelectionCheckedness","renderListItemDefault","SelectListItem","onSelect","renderListItem","selected","isKeyboardActive","itemRef","dataDisabled","itemClassName","SelectList","commitActions","selectListId","textFilter","dismissPopover","popoverClassNameModifiers","fixedPopoverPositioning","activeIndex","filteredItems","listClassName","noOptionsClassName","renderSelectOption","multipleSelection","useSelect","getSelectedItems","selectedItems","_selected","_selectedItems","selection","setSelection","resetSelection","nextSelection","select","currentSelection","Select","disableToggleFocusOnClose","onChange","isInvalid","isValid","renderButtonContent","isCollatingErrors","ariaAttributeProps","setShowList","setTextFilter","setActiveIndex","filterInputRef","selectListRef","selectButtonUniqueId","selectButtonId","pendingClickOutsideTriggeredHideList","clearSelectionInProgress","cachedSelectedItems","appliedFilterNumber","dropdownClassName","closeList","commitSelection","clearAndResetSelection","handleSelect","handleButtonKeyDown","focus","firstAvailableItem","handleListKeyDown","handleFilterInputKeyDown","availableItems","prevIndex","handleTextFilter","toggleList","frame","handleClear","normalizeFill","fill","Translation","defaultFill","fills","getFill","_defaultFill","lookupProperty","placeholderFill","firstFragment","restFragments","fragment","Pagination","hasNext","hasPrev","limit","limitOptions","onLimitSelection","ariaLabelKey","limitSelectAriaLabelKey","_limitOptions","_onLimitChanged","AMOUNT_CLASS","PAYMENT_METHOD_CLASS","PAYMENT_METHOD_LOGO_CONTAINER_CLASS","PAYMENT_METHOD_LOGO_CLASS","DATE_AND_PAYMENT_METHOD_CLASS","DATE_METHOD_CLASS","FALLBACK_CDN_CONTEXT","returnImage","resourceContext","imageFolder","parentFolder","useImageUrl","Image","folder","imageUrl","allFilters","allFiltersSet","PAYMENT_METHODS","parsePaymentMethodType","paymentMethod","format","lastFourDigits","description","getTransactionsFilterQueryParams","filters","getTransactionsFilterParams","balanceAccountId","categories","currencies","statuses","restFilterParams","compareTransactionsFilters","filtersA","filtersB","filtersSet","filterName","filterValueA","filterValueB","PaymentMethodCell","bankAccount","removeUndefinedProperties","useTableColumns","fields","customColumns","columnConfig","fieldsKeys","tableColumns","field","isSmAndUpContainer","newFields","cc","colum","mergedColumns","customColumnsMap","acc","columnMap","existing","flex","TRANSACTION_FIELDS","TRANSACTION_FIELDS_REMAPS","FIELDS_KEYS","TransactionsTable","activeBalanceAccount","availableCurrencies","hasMultipleCurrencies","showDetails","showPagination","transactions","paginationProps","hoveredRow","setHoveredRow","isMdAndUpContainer","isXsAndDownContainer","EMPTY_TABLE_MESSAGE","onHover","category","getTransactionCategory","tooltip","getTransactionCategoryDescription","renderCategory","netAmount","currency","ActiveView","DetailsTab","RefundedState","RefundMode","RefundType","TX_DATA_CLASS","TX_DATA_AMOUNT","TX_DATA_ACTION_BAR","TX_DATA_CONTAINER","TX_DATA_HEAD_CONTAINER","TX_DATA_INPUT","TX_DATA_INPUT_CONTAINER","TX_DATA_INPUT_CONTAINER_SHORT","TX_DATA_INPUT_CONTAINER_TEXT","TX_DATA_INPUT_CONTAINER_WITH_ERROR","TX_DATA_INPUT_HEAD","TX_DATA_LABEL","TX_DATA_LIST","TX_DATA_TAGS","TX_STATUS_BOX","TX_TIMELINE_LABEL","TX_TIMELINE_VALUE","TX_REFUND_RESPONSE","TX_REFUND_RESPONSE_ICON","TX_REFUND_RESPONSE_SUCCESS_ICON","TX_REFUND_RESPONSE_ERROR_ICON","TX_REFUND_STATUSES_CONTAINER","TX_DETAILS_RESERVED_FIELDS_SET","TX_DETAILS_FIELDS_REMAPS","tx","account","TX_DETAILS_TABS","REFUND_STATUSES","REFUND_REASONS","REFUND_REASONS_KEYS","sharedTransactionDetailsEventProperties","originalValueFallback","payoutAdjustmentTypeKeyFactory","getPayoutAdjustmentType","payoutFundsCapturedTypeKeyFactory","getPayoutFundsCapturedType","reportTypeKeyFactory","getReportType","txAmountAdjustmentTypeKeyFactory","getTransactionAmountAdjustmentType","txAmountAdjustmentInformationKeyFactory","getTransactionAmountAdjustmentTypeInformation","txCategoryKeyFactory","txCategoryDescriptionKeyFactory","txTimelineStatusKeyFactory","getTransactionTimelineTxStatus","txTimelineTypeKeyFactory","getTransactionTimelineTxType","txRefundReasonKey","txRefundReasonKeyFactory","getTransactionRefundReason","disputeReasonKey","disputeReasonKeyFactory","getDisputeReason","disputeStatusKey","disputeStatusKeyFactory","getDisputeStatus","disputeTypeKey","disputeTypeKeyFactory","getDisputeType","PayoutData","balanceAccountDescription","payoutData","extraFields","payout","adjustments","accumulator","fundsCaptured","breakdown","captureType","payoutAdjustmentTypeLabelRenderer","payoutFundsCapturedTypeLabelRenderer","payoutBreakdownTypeLabelRenderer","translationFn","extraDetails","buttonActions","val","cache","useBalanceAccounts","getBalanceAccounts","balanceAccountsFromCache","setBalanceAccountsFromCache","canFetchBalanceAccounts","isFetching","allBalanceAccounts","balanceAccounts","isBalanceAccountIdWrong","fetchedBalanceAccounts","TITLES_BY_TYPE","useDataOverviewDetailsTitle","_hideTitle","withinModal","forcedHideTitle","setForcedHideTitle","hideTitle","titleKey","NET_PAYOUT_CLASS","AMOUNT_FIELDS","PAYOUT_TABLE_FIELDS","_isAmountFieldKey","PayoutsTable","refreshing","isLoading","getAmountFieldConfig","ComponentHeadingType","useComponentHeadingElement","headingType","forwardedToRoot","headingElementId","headingElementRef","ariaAttribute","componentElement","DIVIDER_CLASS_NAMES","Divider","Header","hasDivider","subtitleKey","subtitleConfig","titleElemId","titleElemRef","subtitleElemId","subtitleElemRef","ENDPOINTS_BY_TYPE","DataOverviewDetails","getDetail","queryParam","hasBalanceAccountDetail","errorProps","errorMessageKey","detailsData","setExtraFields","getExtraFields","dataCustomization","PayoutElement","WITH_ERROR_CLASS","DataOverviewContainer","balanceAccountsError","hasError","BASE_CLASS_DETAILS","EARLIEST_PAYOUT_SINCE_DATE","MOBILE_SWITCH_CLASS","useFilterBarState","isMobileContainer","showingFilters","setShowingFilters","filterBarElementId","FilterBarMobileSwitch","expanded","FilterBar","useAnalyticsContext","useFilterAnalyticsEvent","subCategory","analytics","defaultPayload","actionType","err","ALL_BALANCE_ACCOUNTS_SELECTION_ID","useBalanceAccountSelection","allowAllSelection","eventCategory","eventSubCategory","eventLabel","onUpdateSelection","logEvent","selectedBalanceAccountIndex","setSelectedBalanceAccountIndex","activeBalanceAccountId","cachedBalanceAccountIdRef","balanceAccountSelectionOptions","onBalanceAccountSelection","resetBalanceAccountSelection","cachedBalanceAccountId","BA_SELECTOR_CLASS","BA_SELECTOR_ACCOUNT_ID_CLASS","BA_SELECTOR_ACCOUNT_LABEL_CLASS","BalanceAccountSelector","balanceAccountLabel","LIMIT_OPTIONS","MAX_PAGE_LIMIT","DEFAULT_PAGE_LIMIT","getClampedPageLimit","pageLimit","getNearestFromSortedUniqueNums","nums","lastindex","lo","hi","usePageLimit","preferredLimit","preferredLimitOptions","cachedLimitOptions","cachedLimit","uniqueOptions","useMounted","beforeUnmount","$mounted","unmount","usePagination","paginationSetupConfig","requestPageCallback","$controller","$maxVisitedPage","$maxVisitedPageSize","$page","page","setCurrentPage","paginationChanged","updatePaginationChanged","getPageCount","getPageParams","resetPageCount","updatePagination","goto","PAGES","requestedPage","paginationData","pages","pageSize","resetPagination","hasNextPage","hasPrevPage","useCursorPagination","cursors","updateCursor","cursor","currentCursor","useOffsetPagination","currentPage","useReactiveState","initialStateSameAsDefault","$hasDefaultState","$defaultState","$stateParams","$changedParams","resetState","requestStateUpdate","stateUpdateRequest","stateUpdate","stateUpdateFlags","defaultValue","updateValue","flagIndex","updateFlag","STATE","flag","canResetState","usePaginatedRecordsFilters","filterParams","initialFiltersSameAsDefault","canResetFilters","defaultFilters","resetFilters","updateFilters","PageNeighbour","PaginationType","offsetPaginatedResponseFields","isCursorPaginatedResponseData","dataProperties","parseCursorPaginatedResponseData","dataField","parseOffsetPaginatedResponseData","hasPrevious","usePaginatedRecords","fetchRecords","initialize","onFiltersChanged","pagination","setRecords","fetching","updateFetching","preferredPageLimit","setPreferredPageLimit","$initialFetchInProgress","$lastRequestedPage","$recordsFilters","filtersProps","parsePaginatedResponseData","updateLimit","pageRequestParams","useCursorPaginatedRecords","initOptions","getTimezoneTime","getUsedTimezone","REGEX_CLOCK_TIME_MATCHER","$restamper","formatted","meridian","clockTime","GMTOffsetString","useTimezone","withClock","shouldWatchClock","setTimestamp","GMTOffset","snapshot","TIME_RANGE_SELECTION_PRESET_OPTION_KEYS","getTimeRangeSelectionDefaultPresetOptions","exclude","allOptions","excludeSet","useTimeRangeSelection","presetOptions","selectedPresetOption","setFrom","setTo","selectedOption","setSelectedOption","TZ","customOption","getRangesForOption","selectionOptions","optionKeys","currentOption","isCustomSelection","setIsCustomSelection","selectionOptionsWithCustomOption","onSelection","ranges","customSelection","TimeRangeSelector","calendarRef","onTimeRangeSelected","useTimeRangeSelectionConfig","selectOptions","onSelectedOptionChanged","rangeSelectionInProgress","cachedTimestamp","property","isPropDescriptor","setter","propsProperty","deepImmutable","$props","maybeDescriptor","isDescriptor","CalendarGridRenderToken","DEFAULT_DATE_CELL_CLASSNAME","DEFAULT_DATE_TIME_CLASSNAME","getGridDateRenderProps","computedProps","prepare","renderProps","CalendarGridDate","datetime","flags","onlyCellsWithin","cursorElementRef","withinMonth","withinRange","extendedProps","DEFAULT_CELL_CLASSNAME","DEFAULT_CELL_ABBR_CLASSNAME","getGridDayOfWeekRenderProps","CalendarGridDayOfWeek","longLabel","shortLabel","onCommand","__","childClassName","extendedChildProps","childClasses","CalendarGrid","cursorRootProps","getGridLabel","block","row","rowindex","DAY_MS","DAY_OF_WEEK_FORMATS","FIRST_WEEK_DAYS","FRAME_SIZES","MAXIMUM_MONTH_UNITS","WEEKEND_DAYS_SEED","CONTROLS_ALL","CONTROLS_MINIMAL","CONTROLS_NONE","CALENDAR_CONTROLS","SELECT_MANY","SELECT_NONE","SELECT_ONE","CALENDAR_SELECTIONS","CURSOR_BACKWARD","CURSOR_BLOCK_END","CURSOR_BLOCK_START","CURSOR_DOWNWARD","CURSOR_FORWARD","CURSOR_LINE_END","CURSOR_LINE_START","CURSOR_NEXT_BLOCK","CURSOR_PREV_BLOCK","CURSOR_UPWARD","RANGE_FROM","RANGE_TO","SELECTION_COLLAPSE","SELECTION_FARTHEST","SELECTION_FROM","SELECTION_NEAREST","SELECTION_TO","SHIFT_BLOCK","SHIFT_FRAME","SHIFT_PERIOD","downsizeTimeFrame","maxsize","resolveTimeFrameBlockSize","getWeekendDays","seed","__TimeSlice__","#numberOfMonths","#endTimestamp","#startTimestamp","#endTimestampOffset","#startTimestampOffset","slice","UNBOUNDED_SLICE","sinceNow","untilNow","timeslice","TimeFlag","CalendarShiftControlFlag","CalendarShiftControlsFlag","createFlagsRecord","CACHE","FLAG_PROPS","isFlagProp","flagsTruncated","indexedProxyGetTrap","mapIteratorFactory","thisArg","__INDEXED_PROTO__","createIndexed","iterablePropertyDescriptorsOrSize","iteratorValueGetter","today","timezones","getTimestampWithTomorrowOffset","withTimestamp","currentTimestamp","nextTimestamp","tomorrowOffset","getTimestamp","refreshTimestamps","TimeFrame","#DEFAULT_LOCALE","#cursorBlockIndex","#cursorBlockStartIndex","#cursorBlockEndIndex","#cursorStartIndex","#cursorEndIndex","#cursorIndex","#cursorOffset","#cursorTimestamp","#dynamicBlockHeight","#effect","#firstWeekDay","#frameBlocksCached","#maxFrameSize","#selectionStartTimestamp","#selectionEndTimestamp","#size","#_timeslice","#timeslice","#timezone","#today","#unwatchCurrentDay","#fromTimestamp","#toTimestamp","#fromBlockOffsetFromOrigin","#toBlockOffsetFromOrigin","#numberOfBlocks","#numberOfUnits","#daysOfWeek","#frameBlocks","#getFrameBlockAtIndex","bool","effect","currentLocale","nextFrameSize","#shiftOriginIfNecessary","$timeslice","#applyTimeSliceUpdate","span","selectionStartTimestamp","selectionEndTimestamp","#getClampedFrameOffset","frameOffset","#getContainedTimestamp","withMidRangeFallback","clampedTimestamp","blockStartIndex","indexOffset","#shiftFrameCursorByOffset","#shiftOrigin","clampedOffset","size_1","skipCursorRefresh","cursorBlock","startIndex","endIndex","nextCursorTimestamp","nextCursorOffset","clampedNextCursorOffset","firstBlock","lastBlock","offsetType","nextCursorPosition","currentStart","currentEnd","startDistance","endDistance","MonthFrame","#daysInWeek","#daysOfWeekCached","#daysOfWeekend","#currentDayTimestamp","#originMonthStartOffset","#originMonthStartTimestamp","#originYear","#selectionFromTimestamp","#selectionToTimestamp","#getBlockTimestampOffsetFromOrigin","#getDayOffsetTimestamp","fromTimestamp","dayOffset","restampedTimestamp","hrs","mins","timeOffset","#getStartForTimestamp","#updateSelectionTimestamps","labelDescriptors","monthDays","innerStartIndex","innerEndIndex","outerStartIndex","outerEndAfterIndex","numberOfUnits","proxyForIndexPropertyAccess","startTimestamp","originYear","originMonth","weekStartTimestamp","offsetYear","originTimestamp","_NO_EXCEPTION","createEffectStack","_stack","exception","Calendar$2","Calendar","#config","#destructed","#frame","#highlightFrom","#highlightTo","#highlightInProgress","#highlightSelection","#pendingWatchNotification","#rangeOffsets","#lastHighlightRange","#cursorIndexFromEvent","#shiftFactorFromEvent","#watchCallback","#watchableEffect","#unwatch","#shiftControlsHandles","#shiftControlsList","#shiftControls","#getShiftControlRecordAtIndex","#watchlist","#lastWatchableSnapshot","#chainedNotifyEffectStack","#chainedWatchEffectStack","#currentConfig","#grid","#configure","watchCallback","#watchableEffectCallback","#withNotifyEffect","#cursorHandle","blank","#clearHighlight","#rangeHighlight","#DAYS_OF_WEEK_FALLBACK","#RANGE_OFFSETS_FORMAT_REGEX","#CURSOR_POINTER_INTERACTION_EVENTS","#SHIFT_ACTIVATION_KEYS","#SHIFT_ALL_CONTROLS","control","#SHIFT_MINIMAL_CONTROLS","#getOffsetsFromRange","#getShiftOffsetType","#getShiftOffsetUnit","controlsChanged","highlightChanged","selectionChanged","highlightRange","#restoreHighlight","#refreshShiftControls","#refreshHighlighting","#destruct","#timeframe","#canShiftInDirection","shiftDirection","highlight","minified","#reframe","#highlight","cursorIndex","isClick","shiftOffsetType","shiftOffsetUnit","canShift","shiftFactor","#getShiftFactorFromEvent","factor","secretFauxHighlightingHint","toTimestamp","selectionDirection","isFauxHighlighting","selectionStartDay","selectionStartDayEndTimestamp","selectionEndDay","selectionEndDayStartTimestamp","rangeOffsets","calendar","init","kill","CalendarControls","controls","renderer","handle","useFocusCursor","finallyCallback","useCalendar","blocks","dynamicBlockRows","onHighlight","originDate","renderControl","sinceDate","trackCurrentDay","untilDate","useYearView","lastMutationTimestamp","setLastMutationTimestamp","activeControls","activeHighlight","highlightStart","highlightEnd","pointerHandle","useImperativeHandle","origins","useDetachedRender","targetRef","setRender","renderTarget","useCalendarControlsRendering","directionModifier","labelModifier","iconName","shouldRenderControl","DatePicker","controlsRenderer","controlsContainerRef","lastUpdatedTimestamp","setLastUpdatedTimestamp","datePickerClassName","timezoneI18nOptions","getCalendarGridLabel","DEFAULT_FILTER_BUTTON_CLASSNAME","FilterButton","restAttributes","ALLOWED_NAVIGATION_KEYS","filterDisallowedCharacters","inputType","onValidInput","input","isAllowedChar","hasDecimal","isDecimalKey","isNavigationKey","FieldError","withTopMargin","InputBase","onInput","onKeyUp","trimOnBlur","onBlurHandler","onBlur","onFocusHandler","iconBeforeSlot","iconAfterSlot","dropdown","dropdownPosition","onDropdownInput","onUpdateDropdown","handleInput","handleKeyUp","handleBlur","handleFocus","handleDropdownChange","selectedValue","inputClassNames","handleKeyDown","cnm","uid","iiv","iv","ce","autoFocus","autofocus","newProps","hasIcons","shouldShowDropdown","shouldDisplayDropdownAtStart","shouldDisplayDropdownAtEnd","hasDropdownOrIcons","isDropdownReadOnly","inputElement","selectClassNameModifiers","renderDropdown","InputText","isValueEmptyFallback","renderFallback","DefaultEditModalBody","editAction","onValueUpdated","setCurrentValue","inputRef","attemptFocusCapture","BaseFilter","editMode","_updateEditMode","editModalMounting","updateEditModalMounting","isValueEmpty","hasEmptyValue","updateHasEmptyValue","hasInitialValue","updateHasInitialValue","valueChanged","updateValueChanged","disabledApply","updateDisabledApply","filterButtonId","renderModalBody","editModeActive","closeEditDialog","openEditDialog","updateEditMode","mode","isOnlySmContainer","isOnlyMdContainer","DateRangeFilterParam","formattingOptions","computeDateFilterValue","fromDate","toDate","resolveDate","renderDateFilterModalBody","DateFilterEditModalBody","showTimezoneInfo","timeRangePresetOptions","timeRangeSelectorLabel","presetOption","setPresetOption","datePickerRef","customDateRangeFormat","DateFilterCore","selectedPresetOptionValue","setSelectedPresetOption","fromValue","toValue","dateTimeFormatter","_formattingOptions","DateFilter","defaultParams","refreshNowTimestamp","defaultTimeRangePreset","selectedTimeRangePreset","setSelectedTimeRangePreset","updateCreatedDateFilter","hasCallback","useModalDetails","selectedDetail","setSelectedDetail","updateDetails","resetDetails","detailsToShow","details","MultiSelectionFilter","updateSelection","selectionOptionsFor","mapOptionName","mapOption","useMultiSelectionFilter","filterParam","filterValues","mapFilterOptionName","TRANSACTIONS_OVERVIEW_MULTI_SELECTION_FILTERS","DEFAULT_TRANSACTIONS_OVERVIEW_MULTI_SELECTION_FILTER_PARAMS","getDefaultFilterParams","timeRange","timeRangeOptionsSubset","timeRangeOptions","defaultTimeRange","useDefaultOverviewFilterParams","filterType","balanceAccount","setNowTimestamp","ModalContent","restData","detailProps","DataDetailsModal","isModalOpen","useCustomColumnsData","hasCustomColumn","onDataRetrieve","mergeCustomData","customRecords","setCustomRecords","loadingCustomRecords","setLoadingCustomRecords","mergedRecords","retrievedData","hasCustomField","preferredFields","standardFields","fieldName","mergeRecords","originalRecords","modifiedRecords","matchRecordCallback","originalRecord","modifiedRecord","PayoutsOverview","allowLimitSelection","onRecordSelection","isLoadingBalanceAccount","payoutsEndpointCall","getPayouts","filterBarState","_onFiltersChanged","payoutDetails","modalOptions","PayoutsOverviewContainer","PayoutsElement","Payouts","normalizeCustomFields","customFields","fieldMappings","remappedFieldGetter","remappedFieldName","useComponentTiming","duration","startTime","PaymentRefundActions","beginRefund","maxAmount","refundAmount","refundedAmount","refundingAmounts","refundReason","setRefundInProgress","setRefundResult","transactionId","initiateRefund","refundTransaction","amountWithinRange","isFullRefundAmount","refundDisabled","backButtonLabel","refundButtonLabelsWithoutAmount","refundButtonLabelWithAmount","refundButtonLabel","primaryAction","secondaryAction","PaymentRefundAmount","inputIdentifier","labelIdentifier","currencyExponent","refundableAmount","formattedAmount","setRefundAmount","validationError","setValidationError","errorMessages","inputLabel","inputElementRef","decimalSeparator","parts","integerPart","decimalPart","cachedRefundableAmount","PaymentRefundNotice","titleEl","PaymentRefundReason","selectLabelId","selectLabel","refundReasons","onReasonChange","AlertTypeOption","AlertVariantOption","AlertIcon","Alert","closeButton","PaymentRefund","refreshTransaction","setActiveView","setLocked","formProps","refundResult","initiatedRefund","lockRefunds","loggedEntryEvent","transaction","refundInProgress","setRefundReason","maxAmountAlert","isErrorResult","descriptionKey","isDisabledOption","getNearestActiveOptionIndex","numberOfOptions","nearestIndex","unvisitedOptions","findActiveOptionIndex","activeOption","fallbackActiveOptionIndex","activeOptionIndex","nearestActiveOptionIndex","useTabbedControl","activeOptionFromProps","focusPending","setFocusPending","activeOptionRef","activeOptionFromPropsRef","optionElementsRef","clickedOptionIndex","keyMap","optionElement","Tabs","activeTab","tabs","tab","baseAlertProps","PaymentRefundAlerts","fullRefundFailed","fullRefundInProgress","refundAmounts","refundCurrency","refundedState","refundLocked","getFormattedAmountsList","listFormatter","amounts","nextAlert","alertProps","alerts","PaymentDetailsActions","refundAvailable","transactionNavigator","currentTransactionId","canNavigateBackward","canNavigateForward","backward","forward","actionButtons","transactionNavigation","actionButton","isBackNavigation","transactionNavigationAction","customActions","copyButtonAnalyticsEventProperties","paymentDataKeys","paymentDataCopyButtonKeys","SKIP_ITEM","PaymentDetailsProperties","standardPropertiesList","merchantReference","paymentPspReference","refundMetadata","isRefundTransaction","customizedFields","listItems","isVisibleField","customPropertiesList","renderListPropertyLabel","renderListPropertyValue","trackingName","copyTextProps","STATUS_BOX_CLASS","STATUS_BOX_DATA_AMOUNT","STATUS_BOX_DATA_LABEL","STATUS_BOX_DATA_PAY_METHOD","STATUS_BOX_DATA_PAY_METHOD_DETAIL","STATUS_BOX_DATA_PAY_METHOD_LOGO","STATUS_BOX_DATA_PAY_METHOD_LOGO_CONTAINER","STATUS_BOX_DATA_TAGS","StatusBox","tag","paymentMethodType","formattedDate","getPaymentMethodType","getDisplayablePaymentMethod","useStatusBoxData","paymentMethodData","amountData","paymentProps","getAmountStyleForTransaction","getRefundTypeForTransaction","refundType","PaymentDetailsStatusBox","statusBoxOptions","statusBoxClassNames","statusBoxTags","paymentAmountKeys","PaymentDetailsSummary","summaryListItems","additions","deductions","amountBeforeDeductions","originalAmount","getFormattedAmount","rawValue","TimelineDateFormat","TimelineContext","getDateFormatOptions","DateText","formatDistanceStrict","dateLeft","dateRight","leftTime","rightTime","diffMs","UNIT_TRANSLATION_KEYS","TimelineItem","dataList","registerTimelineEntry","showAll","showMoreIndex","hiddenItems","visibleIndexes","timeGapLimit","toggleShowAll","instanceIdRef","allItemsShowing","timeGap","previousEntry","currentDate","previousDate","timegapInSelectedUnit","formattedTimeGap","timeGapAriaLabel","displayShowMoreButton","isLastItem","iconConditionalClasses","Timeline","showMore","setEntries","setShowAll","entryIdCounter","timelineIndexes","lastIndex","firstIndex","entryId","entryWithId","contextValue","PaymentDetailsTimeline","createdAt","events","defaultTimestamp","eventKeys","renderTimelineListPropertyLabel","renderTimelineListPropertyValue","formattedType","formattedStatus","fixedType","PaymentDetails","setActiveTab","navigationTabs","tabContent","useRefundMetadata","refundMode","refundable","refundAuthorization","latestNonFailedRefundIndex","isNonFailedRefund","isMoreRecentRefund","updatedStatusAmounts","sum","failedRefundAmounts","useLandedPageEvent","eventProperties","TransactionDataContent","fetchingTransaction","activeView","locked","cachedRefundLocked","refundIsLocked","refundIsDisabled","lineItems","createDuplexTransactionNavigator","previousTransactionId","fromTransactionId","toTransactionId","onNavigation","triggerNavigationCallback","_fromTransactionId","_toTransactionId","cachedCurrentTransactionId","setNavigationCallback","getTransactionNavigatorState","navigatorState","useTransaction","setTransactionId","setTransaction","setNavigatorState","getTransaction","cachedFetchingTransaction","lastFetchedTransactionId","transactionWithBalanceAccount","TransactionData","shouldHideTitle","initialTransaction","customizedDetails","TransactionElement","useTransactionsList","fetchEnabled","getTransactions","initialFilterParams","cachedFilterParams","canFetchTransactions","fetchTransactions","normalizedFields","useTransactionsViewSwitcher","view","preferredViewTab","preferredView","viewTabs","onViewChange","useTransactionsTotals","applicableFilters","getQueryParams","pendingRefresh","setPendingRefresh","fetchTimestamp","setFetchTimestamp","fetchTimestampRef","cachedFilters","getTransactionTotals","canGetTransactionTotals","canFetchTransactionTotals","shouldFetchTransactionTotals","fetchTransactionTotals","json","cachedIsFetching","canRefresh","totals","useAccountBalances","getBalances","canGetBalances","canFetchBalances","shouldFetchBalances","fetchBalances","balances","getCurrencyLookupRecord","lookupMap","lookupRecord","useCurrenciesLookup","defaultCurrency","currenciesDictionary","currenciesLookupMap","_balances","_totals","sortedCurrencies","firstCurrency","secondCurrency","defaultCurrencySortedCurrencies","useDurationEvent","analyticsEventProperties","TransactionDetailsModal","TransactionsList","currenciesLookupResult","loadingBalanceAccounts","transactionsListResult","transactionsError","loadingTransactions","transactionsFields","DEFAULT_BASE_BUTTON_CLASSNAME","BaseButton","NAMESPACE","CONTAINER_CLASS","CONTENT_CLASS","CHEVRON_CLASS","CONTAINER_BUTTON_CLASS","CONTAINER_FILLED_CLASS","CONTAINER_HIDDEN_CLASS","CONTAINER_IN_FLOW_CLASS","CONTAINER_OVERLAY_CLASS","CONTENT_EXPANDABLE_CLASS","CARD_HEIGHT_PROPERTY","ExpandableCard","renderContent","inFlow","setIsOpen","collapsedCardHeight","setCollapsedCardHeight","inNormalFlow","toggleIsOpen","expandableCardRef","expandButtonRef","expandedContentId","isClosedFromOutside","isOpenRef","clickOutsideRef","renderCardContent","collapsibleContent","cardElement","MARGIN_CLASS","LOADING_CLASS","AmountSkeleton","hasMargin","LABEL_CONTAINER_CLASS","LABEL_CONTAINER_CLASS_LOADING","BODY_CLASS","LABEL_CLASS","PLACEHOLDER_CLASS","SummaryItemLabel","isSkeletonVisible","SummaryItem","columnConfigs","isHeader","showLabelUnderline","widths","onWidthsSet","isEmpty","newWidths","getColumnStyle","isXsContainer","isLongValue","TransactionTotalItem","hiddenField","isSkeleton","expensesElemId","incomingsElemId","incomingRef","expenseRef","currencyRef","incomingsConfig","expensesConfig","useMaxWidthsState","maxWidths","setMaxWidths","setMaxWidthsConditionally","currentMaxWidths","currentMaxWidth","TotalsCard","ariaAttributes","isHovered","setIsHovered","localizedPlainCurrencyText","firstTotal","restOfTotals","totalsListLabel","renderFirstTotal","renderRestOfTotals","ITEM_CLASS","TransactionTotals","loadingTotals","isNarrowContainer","BalanceItem","balance","availableBalanceElemId","reservedBalanceElemId","availableAmountRef","reservedAmountRef","availableBalanceConfig","reservedBalanceConfig","BalancesCard","firstBalance","restOfBalances","balancesListLabel","renderFirstBalance","renderRestOfBalances","Balances","loadingBalances","sharedAnalyticsEventProperties","TransactionsOverviewList","accountBalancesResult","transactionsTotalsResult","transactionsListProps","balancesError","totalsError","sortedBalances","sortedTotals","renderErrorAlert","AmountDisplay","amountTypographyProps","currencyTypographyProps","InsightsTotals","breakdownArray","breakdownListArray","amountDisplayProps","TransactionsOverviewInsights","useMultiSelectionFilterProps","onResetFilter","onUpdateFilter","sortedSelection","TransactionMultiSelectionFilter","useMultiSelectionFilterPropsConfig","filterProps","TextFilter","FIXED_CHARACTERS_LENGTH","TransactionPspReferenceFilter","pendingResetAction","setPendingResetAction","cachedValue","onValueChange","firstInputElementRef","inputId","labelId","invalidLengthError","selectionEnd","useCurrencySelection","selectedCurrency","currencySelectionOptions","getCurrencyIfAvailable","currencyIndex","currentCurrency","activeCurrency","setActiveCurrency","onCurrencySelection","cachedActiveCurrencyRef","cachedAvailableCurrencies","cachedSelectedCurrency","cachedActiveCurrency","getDateRangeSelectionEventValue","dateRangeSelection","TransactionDateFilter","createdDate","setCreatedDate","filterLabel","customDateRange","defaultDateRange","cachedCreatedDate","selectedDateRange","setSelectedDateRange","since","until","currentTime","onFilterChange","selectedDateRangeKey","nextCreatedDate","eventValue","onFilterResetAction","dateRangeKey","timestamps","balanceAccountFilterChangedCallback","currentFilters","TransactionsFilters","isTransactionsView","insightsCurrency","setInsightsCurrency","filterBarProps","initialFilters","setStatuses","setCategories","setCurrencies","setPaymentPspReference","setBalanceAccount","cachedCurrentFilters","categoriesFilterOptions","categoriesFilterPlaceholder","currenciesFilterOptions","currenciesFilterPlaceholder","currencyFilterEventLabel","balanceAccountFilterChanged","balanceAccountFilterProps","useDownload","endpointName","downloadEndpoint","ToggleSwitch","labelBeforeSwitch","readOnly","POPOVER_CLASS","Text","typographyProps","ExportColumn","toggleSwitchProps","SectionTitle","textProps","TransactionsExport","setPopoverOpen","exportError","setExportError","exportStarted","setExportStarted","exportColumns","setExportColumns","activeFilters","exportParams","downloadTransactions","canDownloadTransactions","canExportTransactions","exportButtonId","exportButtonRef","exportButtonLabel","exportingButtonLabel","cancelButtonLabel","downloadButtonLabel","activeFiltersTitle","exportColumnsTitle","exportColumnsTitleId","columnSwitches","masterSwitchLabel","masterSwitchId","masterSwitchRef","masterSwitchAriaControls","masterSwitchChecked","onExportColumnChange","checkbox","checkedColumn","checked","isMasterSwitch","columnIndex","sendPopoverToggleEvent","exportCancelled","togglePopover","dismissExportError","cancelAction","downloadAction","exportedFields","exportingOnlyDefaultFields","exportingAllFields","isExportedField","isDefaultField","renderAlertError","SegmentedControl","activeItem","INSIGHTS_FILTERS_SET","getInsightsTotalsQueryParams","createdSince","createdUntil","getTransactionsTotalsQueryParams","allQueryParams","TransactionsOverview","setFilters","lastFiltersChangeTimestamp","setLastFiltersChangeTimestamp","hasActiveBalanceAccount","onFiltersChange","insightsTotalsResult","exportButton","viewSwitcher","TransactionsOverviewContainer","TransactionsElement","Transactions","SupportedLocation","supportedCountries","supportedRegions","getCapitalRegion","legalEntity","region","getSubtitleByRegion","getSubtitleByCountry","getCapitalHeaderSubtitleByLegalEntity","isCapitalRegionSupported","COMMON_CAPITAL_ERROR_MESSAGE","UNKNOWN_ERROR","getCapitalErrorMessage","errorCodeMessage","CapitalErrorMessageDisplay","emptyGrantOffer","onBack","unsupportedRegion","capitalError","CAPITAL_OFFER_CLASS_NAMES","sharedCapitalOfferAnalyticsEventProperties","CapitalHeader","subtitle","InfoBox","InfoBoxTag","dateStartUTCTimestampOffset","getExpectedRepaymentDate","expectedRepaymentPeriodDays","calculateMaximumRepaymentPeriodInMonths","getPercentage","rate","calculateProgress","step","effectiveStep","percentage","calculateSliderAdjustedMidValue","minValue","maxValue","adjustedMid","Slider","restOfProps","progress","CapitalSlider","dynamicOffersConfig","onRelease","sliderId","dynamicOfferAmount","handleValueChange","handleRelease","CAPITAL_REPAYMENT_FREQUENCY","BACKEND_REDACTED_DATA_MARKER","FRONTEND_REDACTED_DATA_MARKER","debounce","func","timeoutId","lastArgs","debounced","LoadingSkeleton","InformationDisplay","expectedRepaymentDate","CapitalOfferSelection","dynamicOffersConfigError","onOfferDismiss","onOfferSelect","requestedAmount","requestedValue","setRequestedValue","createGrantOffer","getDynamicGrantOffer","getDynamicGrantOfferMutation","setIsLoading","reviewOfferMutation","onReview","getOffer","debouncedGetOfferCall","onChangeHandler","handleSliderRelease","loadingButtonState","AnchorButton","SUMMARY_TEXT_EMAIL","CapitalOfferLegalNotice","errorMessageWithAlert","CapitalOfferSummary","grantOffer","onFundsRequest","requestFunds","requestFundsMutation","requestFundsCallback","onRequestFundsHandler","onBackWithTracking","maximumRepaymentPeriod","requestErrorAlert","structuredListItems","summaryItems","showWarningIcon","DynamicCapitalOffer","externalDynamicOffersConfig","setEmptyGrantOffer","setRequestedAmount","selectedOffer","setSelectedOffer","getDynamicGrantOffersConfiguration","internalDynamicOffersConfig","onOfferSelectHandler","capitalOfferState","CapitalOffer","CapitalOfferElement","useFreezePeriod","timeout","frozen","setFrozen","freeze","DownloadButton","onDownloadRequested","setFetchData","buttonIcon","buttonLabel","DISABLED_BUTTONS_TIMEOUT","DATE_TYPE_CLASS","DATE_TYPE_DATE_SECTION_CLASS","FIELDS","ReportsTable","alert","setAlert","removeAlert","errorIcon","onDownloadErrorAlert","alertDetails","ReportsOverview","reportsEndpointCall","getReports","reports","ReportsOverviewContainer","ReportsElement","Reports","CAPITAL_OVERVIEW_CLASS_NAMES","sharedCapitalOverviewAnalyticsEventProperties","Unqualified","PreQualifiedIntro","dynamicOfferConfig","onOfferOptionsRequest","onOfferOptionsRequestWithTracking","PreQualified","dynamicOffer","skipPreQualifiedIntro","handleOfferOptionsRequest","isOfferDismissButtonVisible","handleOfferDismiss","BaseList","ProgressBar","labels","tooltips","shouldDisplayLegend","ProgressBarSegment","tooltipContent","getContent","GRANT_ITEM_CLASS_NAMES","getHasDetails","getIsBackgroundFilled","getAmountLabelKey","getAmount","grant","getStatusKey","missingActions","getStatusTagVariant","getRepaymentPeriodEndDate","repaymentPeriodLeft","endDate","getStatusTooltipKey","pendingToS","getGrantConfig","isGrantActive","isGrantPending","GRANT_DETAILS_CLASS_NAMES","GrantDetails","formatAmount","maximumRepaymentPeriodMonths","GRANT_ACTION_CLASS_NAMES","getTopWindowHref","setTopWindowHref","GrantActions","offerExpiresAt","ACTION_CONFIG","loadingAction","setLoadingAction","onRedirect","actionMutation","endpointByAction","callbackQuery","formattedExpiryDate","logMissingActionEvent","singleAction","GrantItem","grantConfig","showUnscheduledRepaymentAccounts","elementIds","grantOverview","GRANT_ADJUSTMENT_DETAILS","AccountDetail","contentClassName","isPrimary","labelClassName","getHumanReadableIban","iban","useNonBreakingSpaces","spaceSeparator","isCopyableAccountField","getAccountFieldTextToCopy","getAccountFieldFormattedValue","getAccountFieldCopyButtonLabelKey","getAccountFieldTranslationKey","isAccountFieldPrimary","CLASS_NAMES","AccountDetails","orderedBankAccountFields","accountNumber","order","accountDetails","accountFields","orderedFields","fieldValue","GrantAdjustmentDetails","headerTitleKey","headerSubtitleKey","onDetailsClose","GrantRepaymentDetails","repaymentAccountDetailsLabelElemId","repaymentInstructionsLabelElemId","transferInstrumentsLabelElemId","accountIdentifier","List","grants","GrantsDisplay","grantList","newOfferAvailable","onNewOfferRequest","selectedGrantDetail","setSelectedGrantDetail","selectedGrant","setSelectedGrant","activeGrants","inactiveGrants","inactive","displayMode","showNewOfferButton","onNewOfferRequestWithTracking","selectedGrantConfig","hideGrantDetails","showGrantDetails","GrantList","onGrantListUpdateRequest","isCapitalOfferVisible","setIsCapitalOfferVisible","goBackToPreviousStep","goToNextStep","goBackToList","handleFundsRequest","CapitalOverview","isRegionSupported","grantsEndpointCall","dynamicConfigurationEndpointCall","grantsQuery","dynamicOfferQuery","requestedGrant","setRequestedGrant","handlePreQualifiedFundsRequest","showError","CapitalOverviewElement","getGrants","BASE_XS_CLASS","TABS_CONTAINER_CLASS","EARLIEST_DISPUTES_SINCE_DATE","getDisputeActionNeededLevel","disputeData","deadlineTimestamp","isDisputeActionNeeded","isDisputeActionNeededUrgently","DisputeStatusTag","dispute","disputeStatus","FIELD_KEYS","EMPTY_TABLE_MESSAGE_KEYS","DisputesTable","statusGroup","getTimeToDeadline","dueDate","diffInMs","diffInDays","isUrgent","isActionableDispute","renderDueDate","cloneFormData","formData","formDataClone","DisputeFlowContext","DisputeContextProvider","setDispute","flowState","setFlowState","selectedDefenseReason","setSelectedDefenseReason","applicableDocuments","setApplicableDocuments","defendDisputePayload","setDefendDisputePayload","defendResponse","setDefendResponse","clearFiles","previousFormData","fileFields","nextFormData","goBack","clearStates","addFileToDefendPayload","moveFieldInDefendPayload","fromField","toField","fromFieldValue","removeFieldFromDefendPayload","onDefendSubmit","defenseReasonConfig","setDefenseReasonConfig","localDefenseReasonConfig","defenseDocumentConfig","setDefenseDocumentConfig","localDefenseDocumentConfig","getDisputesConfig","useDisputeFlow","AcceptDisputeFlow","onDisputeAccept","acceptDispute","cachedDispute","disputePspReference","isRequestForInformation","acceptedLabel","acceptDisclaimer","acceptTitle","acceptButtonTitle","isRFI","termsAgreed","setTermsAgreed","disputeAccepted","setDisputeAccepted","acceptDisputeMutation","interactionsDisabled","canAcceptDispute","acceptDisputeCallback","toggleTermsAgreement","acceptCallbackHasBeenCalled","termsAgreementInputId","DEFAULT_FILE_TYPES","DEFAULT_MAX_FILE_SIZE","validationErrors","UploadedFile","deleteFile","fileSize","useTrackedRef","currentInstance","updateRef","trackedRef","Dropzone","required","maxDimensions","maxFileSize","allowedFileTypes","mapError","uploadFiles","inputError","setInputError","largeFileErrorContext","setLargeFileErrorContext","dragOver","setDragOver","inputName","handleDragOver","handleDragLeave","handleDrop","updateFiles","handleFileChange","handleInputBlur","handleInputInvalid","updateInputValidationError","currentRequired","getImageDimensions","source","allowedFiles","dimensions","currentMaxFileSize","FileInput","onDelete","files","setFiles","uploadedFile","defaultMapError","mapErrorWithFallback","fileToDelete","currentFiles","fileIndex","currentFilesCopy","getTranslationIfExists","prefixedKey","configItemKey","translationPrefix","configItem","primaryDescriptionItems","secondaryDescriptionItems","getDefenseDocumentContent","defenseDocumentKey","getDefenseReasonContent","defenseReasonKey","UPLOAD_DOCUMENT_MAX_SIZE","ALLOWED_FILE_TYPES","DOCUMENT_MAX_SIZE","DefendDocumentUpload","document","desc","SelectAndUploadOptionalDoc","onRemoveOption","documentSelectLabel","getDocInfo","updateDocumentSelection","documentSelection","activeSelectItems","documentRequirements","DefendDisputeFileUpload","defendDispute","oneOrMoreSelectedDocument","setOneOrMoreSelectedDocument","optionalSelectedDocuments","setOptionalSelectedDocuments","goBackToDetails","requiredDocuments","optionalDocuments","oneOrMoreDocuments","docs","documentTypeCode","requirementLevel","requiredDocumentsUploaded","requiredDocumentsPresent","defendDisputeMutation","disputeDefended","canSubmitDocuments","defendDisputeCallback","addOptionalDocument","documentType","newDocs","canAddOptionalDocument","optionalDocumentsCount","addEmptyOptionalDocument","availableOptionalDocuments","doc","removeSelectedOptionalDocument","indexToRemove","prevDocs","docToRemove","DefendDisputeReason","allowedDefenseReasons","isReasonSubmitted","setIsReasonSubmitted","defenseReasons","getApplicableDefenseDocuments","fetchCallback","onDefenseReasonSubmit","showAlert","setShowAlert","closeAlert","defenseReasonContent","defendDisputeLabel","DefendDisputeResponse","onDisputeDefend","goBackToFileUploadView","defendCallbackHasBeenCalled","DefendDisputeFlow","defendDisputeTitle","DISPUTE_DATA_CLASS","DISPUTE_DATA_MOBILE_CLASS","DISPUTE_STATUS_BOX","DISPUTE_DATA_ACTION_BAR","DISPUTE_DATA_LABEL","DISPUTE_DATA_LIST","DISPUTE_DATA_LIST_EVIDENCE","DISPUTE_DATA_LIST_EVIDENCE_ERROR_MESSAGE","DISPUTE_DATA_ISSUER_COMMENT","DISPUTE_DATA_ISSUER_COMMENTS","DISPUTE_DATA_ISSUER_COMMENTS_EXPANDED","DISPUTE_DATA_ISSUER_COMMENTS_TRUNCATED","DISPUTE_DATA_ISSUER_COMMENTS_ALERT","DISPUTE_DATA_ISSUER_COMMENTS_GROUP","DISPUTE_DATA_ERROR_CONTAINER","DISPUTE_DATA_STATUS_BOX_SKELETON","DISPUTE_DATA_PROPERTIES_SKELETON","DISPUTE_DATA_PROPERTIES_SKELETON_ELEMENT","DISPUTE_DATA_PROPERTIES_SKELETON_CONTAINER","DISPUTE_DATA_STATUS_BOX_STATUS_CONTAINER","DISPUTE_DATA_STATUS_BOX_STATUS","DISPUTE_DATA_STATUS_BOX_AMOUNT","DISPUTE_DATA_STATUS_BOX_PAYMENT_METHOD","DISPUTE_DATA_SKELETON_CONTAINER","DISPUTE_DATA_STATUS_BOX_PAYMENT_METHOD_CONTAINER","DISPUTE_DETAILS_RESERVED_FIELDS_SET","DisputeIssuerComments","issuerComments","minimumHeight","setMinimumHeight","maximumHeight","setMaximumHeight","isTruncated","setIsTruncated","commentsGroupRef","onButtonClick","commentsGroup","firstComment","lineHeight","issuerComment","disputeDataKeys","DISPUTE_STATUSES_WITH_ACCEPTED_DATE","DisputeDataProperties","disputeReference","disputeReason","acceptedDate","paymentReference","defenseReason","defendedOn","suppliedDocuments","isFraudNotification","isExpiredDispute","itemsWithExtraFields","SVGIcon","getDisputesErrorMessage","DisputeDataAlert","alertMode","DisputeData","disputeId","onDismiss","storedDispute","getDisputeDetail","acceptAuthorization","defendAuthorization","defensibility","chargeback","preArbitration","comments","commentGroup","commentKey","trimmed","disputeType","showContactSupport","isDefendable","isAcceptable","onAcceptClick","onDefendClick","extraButtons","setExtraButtons","getCustomButtons","customData","defendButtonLabel","ctaButtons","actionNeeded","renderBackButton","isDefended","disputeAlertMode","DisputeDetailsContainer","DisputeDetails","setDisputeCallback","DisputeManagementModal","refreshDisputesList","setModalVisible","disputeManagementSuccessful","setDisputeManagementSuccessful","onCloseCallback","onDisputeManagementSuccessful","DEFAULT_DISPUTE_STATUS_GROUP","DISPUTE_SCHEMES_FILTER_PARAM","DISPUTE_REASONS_FILTER_PARAM","LAST_REFRESH_TIMESTAMP_PARAM","DISPUTE_SCHEMES_FILTER_VALUES","DISPUTE_REASONS_FILTER_VALUES","DISPUTE_STATUS_GROUPS_VALUES","DISPUTE_STATUS_GROUPS_TABS","labelTranslationKey","DisputesOverviewTabsDropdown","setStatusGroup","selectItems","currentTab","DisputesOverview","getDisputesCall","modalVisible","mobileStyleOverrides","setMobileStyleOverrides","statusGroupFetchPending","setStatusGroupFetchPending","statusGroupActiveTab","setStatusGroupActiveTab","statusGroupAriaLabel","disputeDetails","getDisputes","cachedDisputeReasonsFilter","disputeReasonsFilter","disputeSchemesFilter","scheme","oneYearUntilNow","earliestTimestamp","debounceTimeoutIdRef","onStatusGroupChange","reasonsFilterParam","filterUpdates","gotoStatusGroup","DisputesOverviewContainer","DisputesOverviewElement","Disputes","DisputeManagementElement","BASE_TABLE_GRID_CLASS","BASE_ACTIONS_CLASS","MOBILE_TABLE_CELL_CLASS","MOBILE_AMOUNT_CELL_CLASS","MOBILE_EXPIRE_DATE_CELL_CLASS","FILTERS_CONTAINER_CLASS","ACTION_BUTTONS_CONTAINER_CLASS","FILTERS_ALERT_CONTAINER_CLASS","ACTION_BUTTON_CLASS","ACTION_BUTTON_MOBILE_CLASS","EARLIEST_PAYMENT_LINK_DATE","DEFAULT_PAYMENT_LINK_STATUS_GROUP","PAYMENT_LINK_STATUS_GROUPS","PAYMENT_LINK_STATUS_GROUPS_TABS","PAYMENT_LINK_STATUS_GROUPS_FILTER_MAPPING","PAYMENT_LINK_STATUSES","PAYMENT_LINK_TYPES","ACTION_NEEDED_URGENTLY_THRESHOLD_DAYS","getActionNeededLevel","isActionNeededUrgently","ACCOUNT_MISCONFIGURATION","WRONG_STORE_IDS","getPaymentLinksErrorMessage","PaymentLinksErrors","images","getTagVariantForStatus","PAYMENT_LINKS_TABLE_FIELDS","ERROR_MESSAGE_KEY","PaymentLinksTable","paymentLinks","stores","allStores","storeError","noStoresError","storesFilteredError","CLASSNAMES","PaymentLinkSummary","paymentLink","getStatusVariant","getTitleKey","activity","getDescriptionKey","getStatus","PaymentLinkActivity","activities","timelineItems","PaymentLinkTabs","isAddressRedacted","address","linkType","categoryItems","renderListItemLabel","renderListItemValue","transformedValue","PaymentLinkExpiration","onCancel","onExpirationSuccess","expirePayByLinkPaymentLink","expirePaymentLinkMutation","handleConfirmExpire","PaymentLinkSkeleton","getPaymentLinkErrorMessage","PaymentLinkError","PaymentLinkDetails","onUpdate","isDismissButtonHidden","getPayByLinkPaymentLinkById","paymentLinkData","isFetchingPaymentLinkData","paymentLinkDataError","refetch","countries","isFetchingCountries","fileName","getCountryName","country","activeScreen","setActiveScreen","isCopiedIndicatorVisible","setCopiedIndicatorVisible","handleCopyLink","handleExpireNow","handleExpirationSuccess","handleNavigationToDetailsAfterExpiration","handleNavigationToListAfterExpiration","PaymentLinkDetailsModal","isPaymentLinkUpdated","setIsPaymentLinkUpdated","handlePaymentLinkUpdate","DefaultRenderStep","completed","Step","totalSteps","Stepper","nextStepDisabled","latestActiveStep","setLatestActiveStep","listRef","stepRefs","focusedStep","setFocusedStep","steps","isHorizontal","stepElement","scrollLeft","scrollTop","canActivate","handleStepClick","stepIndex","focusStep","focusNext","focusPrev","activateFocused","focusedElement","WizardFormContext","useWizardFormContext","WizardFormProvider","methods","scrollToFirstErrorField","errorFields","visibilityOffset","scope","queryScope","errorFieldsSelector","firstElement","topmost","rect","getFormSteps","getFieldConfig","visibilityConfig","getFieldVisibility","isFieldInConfigResponse","configVisibility","parentField","childField","parentVisibility","childVisibility","getNestedValue","setNestedValue","lastKey","nextKey","purgeEmptyValues","cleaned","flattenObject","newKey","validateField","rules","useForm","defaultValues","controlRef","cb","isDirty","modeToUse","validateFieldWithRaceConditionHandling","touched","fieldsToValidate","hasTouchedChanged","validationPromises","flattenedDefaults","errors","dirtyFields","touchedFields","formState","setValue","getValues","getValueMap","resetValues","flattenedResetValues","trigger","handleSubmit","onValid","onInvalid","currentCounter","errorObj","wizardReducer","nextStep","newValidation","displayValue","useWizardForm","onStepChange","validateBeforeNext","wizardState","currentStepConfig","isFirstStep","isLastStep","canGoPrevious","canGoNext","fieldsConfig","validateStep","enabledFieldNames","visible","validationResults","validateCurrentStep","isStepValid","isStepComplete","goToStep","previousStep","previousStepIndex","resetWizard","setFieldDisplayValue","resetFieldDisplayValues","getSummaryData","summary","stepFields","getApiPayloadValues","valueMap","excludedFields","getDisplayValue","usePaymentLinkFormData","storeIds","selectedStore","setSelectedStore","getCountries","getPayByLinkConfiguration","createPBLPaymentLink","getPayByLinkSettings","getPayByLinkStores","storesData","isFetchingStores","storesSelectorItems","storeId","storeCode","configurationData","isFetchingConfiguration","configurationError","settingsData","isFetchingSettings","settingsError","termsAndConditionsProvisioned","isCountriesQueryEnabled","countriesData","countryDatasetData","isFetchingCountryDataset","formSteps","skipStoreStep","stepperItems","formStepsAriaLabel","wizardForm","storeValue","isDataLoading","shouldSkipStoreSelection","FormField","optional","supportText","Controller","rerender","prevRequiredRef","unregister","fieldState","handleChange","newValue","triggerValidation","useWatch","getCurrent","prevRef","handleUpdate","VisibleField","FormTextInput","isRequiredProp","isReadOnlyProp","validate","maxLength","minLength","hideOptionalLabel","isRequired","isReadOnly","onInputHandler","handleValidate","isBelowMinLength","PAYMENT_LINK_CREATION_FIELD_LENGTHS","LINK_VALIDITY_DURATION_UNITS","ShopperEmailField","invalidEMailObject","validateEmail","email","localPart","domain","ShopperPhoneField","phoneCode","phoneNumberWithoutPhoneCode","code","number","phonesDatasetQuery","phoneCodesDropdown","shouldHideField","hasDataset","hasValue","numberValue","currentNumber","FormSelect","preventInvalidState","CountryRegionField","countriesListItems","allowedCodes","countryName","LanguageField","configCountryList","languagesQuery","localeListItems","text","hasItems","BillingAndShippingCheckboxField","isSameAddress","setIsSameAddress","showBillingFirst","isSameAddressInputId","toggleBillingAndDeliveryAddress","ShippingStreetField","isAddressFieldRequired","isSameAddressCopyEnabled","ShippingHouseNumberField","ShippingCountryField","ShippingCityField","ShippingPostalCodeField","DeliveryAddressSection","isOptional","BillingStreetField","BillingHouseNumberField","BillingCountryField","BillingCityField","BillingPostalCodeField","BillingAddressSection","DELIVERY_ADDRESS_FIELDS","BILLING_ADDRESS_FIELDS","useAddressChecker","deliveryStreet","deliveryHouseNumber","deliveryCountry","deliveryCity","deliveryPostalCode","billingStreet","billingHouseNumber","billingCountry","billingCity","billingPostalCode","deliveryValues","billingValues","useSameAddressCheckbox","getAddressSectionState","fieldConfigs","visibleFields","readOnlyFields","billingState","deliveryState","targetState","sourceState","CustomerDetailsForm","isNameVisible","isBillingAddressOptional","isDeliveryAddressOptional","isBillingAddressVisible","isDeliveryAddressVisible","MAX_VALIDITY_DAYS","FLEXIBLE_ID","ValidityField","configuration","customDurationUnit","setCustomDurationUnit","customDurationQuantity","setCustomDurationQuantity","validityValue","setValidityValue","getValidityFromFormState","validitySelectItems","quantity","durationUnit","initializeDefaultValidity","qty","findCurrentOption","isDurationUnitRequired","isDurationQuantityRequired","handleCustomDurationQuantityChange","newQuantity","handleCustomDurationUnitChange","dropdownItems","durationQuantity","durationUnitField","durationUnitFieldState","durationQuantityField","durationQuantityFieldState","onSelectInput","CURRENCY_INPUT_BASE_CLASS","getCurrencyExponent","PRIORITIZED_CURRENCY_CODES","sortCurrencyItems","priorityIndexByCode","aCode","bCode","aPriorityIndex","bPriorityIndex","CurrencyInput","currencyItems","hideCurrencySelector","onAmountChange","onCurrencyChange","selectedCurrencyCode","prevCurrency","getCurrencies","setDisplayValue","computedNumberAmount","exponent","parsed","fixed","currenciesQuery","currencyDropdownItems","sortedCurrencyItems","dropdownProps","VALUE_FIELD_NAME","CURRENCY_FIELD_NAME","MAX_AMOUNT","AmountField","currencyCodeFieldVisible","handleCurrencyChange","isAmountReadOnly","isCurrencyReadOnly","LINK_TYPE_FALLBACK","LinkTypeField","linkTypes","CalendarInputButton","buttonRef","CalendarInputPopover","CalendarInput","setOpen","iso","FormCalendarInput","PaymentDetailsForm","invisibleFields","FormSummary","formValues","isMobile","paymentListItems","payment","storeField","currencyField","customerListItems","customer","createListItem","countryData","deliveryAddressItems","billingAddressItems","nonAddressItems","sendLinkToShopper","sendPaymentSuccessToShopper","StoreField","StoreForm","setShowTermsAndConditions","savePayByLinkSettings","canModifySettings","selectedStoreId","alertLabel","alertActions","FormStepRenderer","currentFormStep","MenuItem","MENU_ITEMS","DEFAULT_MENU_ITEM","useStores","preselect","filteredStores","store","getThemePayload","theme","useStoreTheme","setEnabled","setPayload","setLoading","getPayByLinkTheme","useStoreTermsAndConditions","termsAndConditions","ThemeFormDataRequest","isTermsAndConditionsData","isThemeData","isThemePayload","useSaveAction","setIsSaving","setIsSaveError","setIsSaveSuccess","activeMenuItem","getIsValid","setSaveActionCalled","setSavedData","navigateBack","updatePayByLinkTheme","navigationTimeoutRef","onSaveComplete","savePayByLinkTheme","themeData","onSaveTheme","updatePayByLinkTermsAndConditions","savedData","onSaveTermsAndConditions","useSettingsPermission","PaymentLinkSettingsContext","PaymentLinkSettingsProvider","selectedMenuItems","embeddedInOverview","isShowingRequirements","setIsShowingRequirements","menuItems","themeEnabled","termsAndConditionsEnabled","menuItemPreSelect","setActiveMenuItem","saveActionCalled","isLoadingStores","storesError","isSaving","isSaveError","isSaveSuccess","onSave","fetchThemeEnabled","setFetchThemeEnabled","fetchTermsAndConditionsEnabled","setFetchTermsAndConditionsEnabled","onPayloadChange","loadingThemes","themeError","loadingTermsAndConditions","termsAndConditionsError","activeData","onDataSave","setIsValid","validity","setSelectedMenuItem","contentLoading","usePaymentLinkSettingsContext","rowNumber","SecondaryNav","activeValue","onContentVisibilityChange","contentVisible","renderLoadingContent","BASE_CLASS_NAME","CONTAINER_CLASS_NAME","CONTENT_CONTAINER_CLASS_NAME","CONTENT_CONTAINER_MOBILE_CLASS_NAME","SIDEBAR_CONTAINER_CLASS_NAME","SECONDARY_NAV_CLASS_NAME","StoreSelectorButtonContent","StoreSelectorItem","StoreSelector","setSelectedStoreId","handleStoreChange","Checkbox","checkedInternal","setCheckedInternal","isValidURL","termsAndConditionsURL","useTermsRequirementsConfig","localTerms","localTermsRequirementsConfig","termsRequirementsConfig","setTermsRequirementsConfig","getTermsRequirementsConfig","Requirements","onGoBack","acceptRequirements","onAcceptRequirements","section","TermsAndConditions","initialData","checkboxIdentifier","setTermsAndConditionsURL","isRequirementsChecked","setIsRequirementsChecked","showNotCheckedRequirementsError","setShowNotCheckedRequirementsError","showInvalidURL","setShowInvalidURL","isTermsAndConditionsChanged","setIsTermsAndConditionsChanged","setDisabled","userRequirementsInput","hasEmptyInitialValue","onTermsAndConditionsURLInput","requirementsOpenedOnce","setRequirementsOpenedOnce","onCheckboxInput","openRequirements","checkboxLabel","closeModal","PERMISSION_ERROR","getSettingsErrorMessage","SettingsError","TermsAndConditionsContainer","termsAndConditionsData","isLoadingContent","setInitialData","THEME_FORM_UPLOAD_DOCUMENT_MAX_SIZE","THEME_FORM_ALLOWED_FILE_TYPES","logoOptions","LogoLabel","logoOptionsList","LogoPreview","logoType","logoURL","onRemoveLogo","logoURLId","onRemoveURL","defaultMapErrors","fileNameMappings","getHumanReadableFileName","getImageSizeLimitation","LogoRequirements","logoFileInformationText","getImageDimensionLimitation","LogoInput","onFileInputChange","logoInputId","dimensionError","ThemeForm","initialPayload","initialBrandName","logo","fullWidthLogo","brandName","setBrandName","logoUrl","setLogoUrl","fullWidthLogoUrl","setFullWidthLogoUrl","themePayload","setThemePayload","showMissingBrandName","setShowMissingBrandName","brandInputId","addFileToThemePayload","onBrandNameChange","removeFieldFromThemePayload","logoPreview","reader","onLogoChange","onRemoveLogoUrl","getLogoUrl","PaymentLinkThemeContainer","setInitialPayload","PaymentLinkSettingsContentLoading","THEME_ERROR_MESSAGE_KEY","TERMS_AND_CONDITIONS_ERROR_MESSAGE_KEY","PaymentLinkSettingsContentItem","permissionError","PaymentLinkSettingsContent","SettingsActionButtons","closeContent","usePayByLinkSettingsContext","isSaveDisabled","saveButton","goBackButton","PaymentLinkSettings","setContentVisible","visibility","showActionButtons","PaymentLinkSettingsContainer","settingsItems","filteredMenuItems","paymentLinkSettingsItem","useInvalidFieldsConfig","localConfig","localInvalidFieldsConfig","invalidFieldsConfig","setInvalidFieldsConfig","getInvalidFieldsConfig","FIELD_LABEL_AND_MARGIN_OFFSET","PaymentLinkCreationFormContainer","onCreationDismiss","onPaymentLinkCreated","formRef","showFormValidationError","setShowFormValidationError","headerRef","hasPrefilledAddress","selectedStoreNavigationCache","createPaymentLink","isFirstLoadDone","currentStep","showTermsAndConditions","handleNext","headerHeight","offsetTop","onClickStep","handlePrevious","submitMutation","handleContinue","onSubmit","apiPayloadData","dataWithoutStore","navigateBackFromTermsAndConditions","isNextStepLoading","accountIsMisconfigured","displayConfigurationError","nextButtonIsDisabled","getMappedInvalidFields","fieldKey","messageKey","msg","onNavigateToTermsAndConditions","getSubmitErrorLabel","renderErrorDescription","submitError","mappedErrors","hasInvalidFields","idx","FormSuccess","onGoToDetails","paymentLinkUrl","copied","setCopied","copiedTimeoutRef","onCopy","PaymentLinkCreationContainer","setPaymentLinkUrl","paymentLinkId","setPaymentLinkId","PaymentLinksOverviewModal","isModalVisible","onCloseModal","modalType","paymentLinkCreation","paymentLinkSettings","refreshPaymentLinkList","hasToRefresh","setHasToRefresh","PAYMENT_LINK_TYPES_FILTER_PARAM","PAYMENT_LINK_STATUSES_FILTER_PARAM","PAYMENT_LINK_STORES_FILTER_PARAM","PAYMENT_LINK_STATUSES_FILTER_VALUES","PaymentLinksOverviewTabsDropdown","PaymentLinksOverview","isFiltersLoading","filterError","getPaymentLinks","showFiltersAlert","setShowFiltersAlert","getPaymentLinksData","requestOptions","filterStoreIds","propStoreIds","linkStatusFilter","linkTypesFilter","storesTypesFilter","paymentLinkDetails","onMerchantReferenceFilterChange","onPaymentLinkIDFilterChange","showTypeFilter","showStatusFilter","showStoreFilter","setModalType","openPaymentLinkModal","openSettingsModal","currentCreatedUntil","isSameDay","sharedModalProps","closeFiltersAlert","hasActionButtons","usePaymentLinkFilters","getPayByLinkFiltersEndpointCall","isFetchingFilters","PaymentLinksOverviewContainer","PaymentLinksOverviewElement","PaymentLinkCreationElement","PaymentLinkSettingsElement","PaymentLinkDetailsElement","AdyenPlatformExperience"],"mappings":"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AAO,EACd,IAAIC,GAAUA,EAAO,QAAQ,KAAM,GAAG,CAAC,EACvC,KAAA,CAAK,CAElB,EAESC,GAAoB,CAC7B,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACJ,EC1BMC,GAAiB,CACnB,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,OACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,IACL,IAAK,KACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,IAAK,MACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,MACL,IAAK,KACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,KACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,OACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,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X,CAAA,EACzF,OAAO,IAAI,KAAKqT,CAAI,EAAE,mBAAmB,KAAK4D,GAASsC,CAAW,CACtE,CAMA,SAASlG,EAA8B,CACnC,OAAO,KAAK,KAAKA,EAAM,CACnB,MAAO,QACP,KAAM,UACN,OAAQ,UACR,OAAQ,UACR,OAAQ,EAAA,CACX,CACL,CACJ,CC3RO,MAAMmG,EAAO,CACC,gBAEjB,YAAYC,EAAoB,CAC5B,KAAK,gBAAkBA,CAC3B,CAEQ,YAAc,CAAC,CAAE,KAAA3W,EAAM,YAAA4W,EAAa,WAAAC,EAAY,UAAA5W,EAAW,UAAAC,CAAA,IAC/D,GAAG0W,CAAW,IAAIC,EAAa,GAAGA,CAAU,IAAM,EAAE,GAAG3W,EAAY,GAAGA,CAAS,IAAM,EAAE,GAAGF,CAAI,GAAGC,EAAY,IAAIA,CAAS,GAAK,EAAE,GAE7H,YAAe6W,GACoB,KAAA,YAAmB,CAAM,iCAAwB,KAAkB,EAGvG,SAASC,EAA6B,GAAI,CAC7C,OAAQD,GAAwB,KAAK,YAAY,CAAE,GAAGC,EAAc,GAAGD,EAAO,CAClF,CACJ,CCzBO,MAAME,OAAyB,IAAI,CACtC,UACA,iBACA,qBACA,YACA,YACA,cACA,SACA,MACA,QACA,OACA,iBACA,mBACA,sBACA,SACA,kBACA,oBACA,qBACA,yBACA,oBACA,4BACA,uBACA,+BACA,2DACA,6BACA,0BACA,4BACA,8BACA,4BACA,uBACA,4BACA,iCACA,mCACA,iBACA,uCACA,sCACA,6BACA,0BACA,kCACA,iBACA,eACA,sBACA,iCACA,kBACA,gCACA,qBACA,0BACA,0BACA,0BACA,0BACA,0BACA,iCACA,oDACA,6BACA,wCACA,kCACA,mBACA,kBACA,yBACA,oBACA,0BACA,wBACA,iBACA,uBACA,qBACA,+BACA,6BACA,yBACA,uBACA,qBACA,sBACA,kBACA,sBACA,qBACA,wBACA,8BACA,gCACA,+CACA,yCACA,4BACA,mBACA,4CACA,6BACA,oBACA,+BACA,uCACA,iCACA,yCACA,8DACA,wCACA,+CACA,gFACA,8EACA,gFACA,mEACA,qBACA,gBACA,kBACA,mBACA,+CACA,kDACA,oCACA,iEACA,iEACA,iCACA,mDACA,kEACA,+CACA,UACA,WACA,aACA,iBACA,iBACA,wBACA,yCACA,SACA,OACA,aACA,WACA,OACA,YACA,UACA,cACA,UACA,kBACA,2BACA,6BACA,kCACA,oCACA,yBACA,wCACA,gDACA,kDACA,sBACA,mBACA,8BACA,+BACA,oCACA,iCACA,kCACA,0CACA,wDACA,uDACA,oBACA,6BACA,2CACA,2BACA,2BACA,oCACA,sCACA,qCACA,yBACA,8CACA,6CACA,sBACA,qDACA,2EACA,2DACA,iFACA,iDACA,kDACA,6EACA,sDACA,wCACA,kDACA,+EACA,oDACA,wDACA,qEACA,oEACA,4CACA,qDACA,yDACA,uEACA,kEACA,+DACA,mEACA,uDACA,sDACA,0DACA,wCACA,8CACA,yCACA,0EACA,mDACA,iDACA,qCACA,oDACA,8CACA,kDACA,oDACA,uEACA,uDACA,2CACA,iDACA,qDACA,2DACA,sDACA,8DACA,8CACA,kDACA,0DACA,6CACA,kEACA,0DACA,8CACA,kDACA,wDACA,4DACA,iDACA,8DACA,2DACA,uDACA,uDACA,kEACA,wDACA,wDACA,8DACA,yDACA,mEACA,gDACA,+CACA,+CACA,mDACA,2DACA,qEACA,2DACA,uCACA,2CACA,uCACA,iEACA,4CACA,wDACA,0CACA,+DACA,wCACA,4CACA,0DACA,2CACA,oDACA,8EACA,2CACA,2CACA,+CACA,uDACA,6CACA,0DACA,kDACA,qDACA,kDACA,sDACA,uEACA,2DACA,+DACA,qEACA,mDACA,4CACA,gDACA,2DACA,mCACA,oDACA,wDACA,0CACA,6DACA,0CACA,6EACA,iCACA,qCACA,uDACA,2DACA,8CACA,uCACA,yDACA,2DACA,gDACA,2CACA,+CACA,uDACA,2DACA,6CACA,gDACA,0DACA,8DACA,yEACA,sFACA,kEACA,kDACA,2CACA,kDACA,8CACA,oDACA,iDACA,uDACA,yCACA,uDACA,yCACA,6CACA,oDACA,gFACA,kDACA,mEACA,2DACA,sDACA,2CACA,yEACA,4CACA,iDACA,6DACA,2DACA,qDACA,kEACA,iEACA,0CACA,6CACA,qDACA,sDACA,0DACA,8CACA,kDACA,iDACA,yCACA,qDACA,sDACA,iDACA,sCACA,0CACA,+DACA,wDACA,sDACA,6CACA,2CACA,gEACA,oEACA,sEACA,0EACA,kFACA,sFACA,8CACA,iDACA,0DACA,iEACA,yBACA,+DACA,qEACA,4DACA,qEACA,yCACA,mEACA,oEACA,+CACA,4DACA,oDACA,yEACA,mDACA,+CACA,oCACA,wDACA,0CACA,kEACA,kDACA,2CACA,yDACA,gFACA,oDACA,+CACA,0EACA,8DACA,qEACA,4EACA,+DACA,sEACA,sDACA,gDACA,qEACA,gEACA,2DACA,2CACA,6DACA,wEACA,6CACA,mDACA,4DACA,2EACA,oEACA,4CACA,yCACA,qDACA,0EACA,4CACA,iEACA,kDACA,oDACA,wDACA,6DACA,yEACA,gDACA,+CACA,8DACA,0DACA,6CACA,sDACA,2CACA,+DACA,wDACA,sEACA,2DACA,gEACA,6CACA,8DACA,6CACA,2CACA,iEACA,iDACA,kFACA,4DACA,uEACA,yEACA,mDACA,0DACA,iEACA,gDACA,sDACA,+DACA,kDACA,uCACA,0CACA,iDACA,iDACA,8CACA,qDACA,4CACA,oDACA,8DACA,sDACA,iDACA,2CACA,qDACA,qDACA,4CACA,sEACA,0DACA,kEACA,qEACA,+DACA,qDACA,yDACA,mDACA,4DACA,gDACA,sDACA,yDACA,wEACA,iEACA,0EACA,2DACA,mEACA,yDACA,sCACA,mDACA,2CACA,gDACA,4CACA,2CACA,8CACA,iDACA,6CACA,4DACA,4CACA,qDACA,wCACA,mDACA,yEACA,iEACA,uEACA,uEACA,4DACA,kDACA,oFACA,qEACA,oEACA,mDACA,yDACA,+DACA,gDACA,wCACA,oFACA,yEACA,gEACA,wEACA,sCACA,iDACA,0DACA,+CACA,gDACA,mDACA,2CACA,uCACA,gEACA,6CACA,qDACA,2DACA,kEACA,sEACA,kDACA,mEACA,wDACA,+CACA,qDACA,gEACA,0DACA,+CACA,+EACA,kFACA,0DACA,kEACA,8EACA,+DACA,wDACA,wDACA,wEACA,+DACA,kEACA,iDACA,uEACA,2DACA,sEACA,kDACA,wDACA,mFACA,+DACA,kFACA,qEACA,gDACA,mEACA,kDACA,4DACA,iDACA,oDACA,4CACA,oDACA,0DACA,iEACA,mEACA,0BACA,kCACA,yBACA,4BACA,gCACA,wDACA,gDACA,gDACA,oCACA,iCACA,oCACA,sEACA,mEACA,sEACA,8CACA,mCACA,yCACA,6BACA,2CACA,4CACA,2EACA,oBACA,qBACA,kBACA,4BACA,8EACA,iEACA,mEACA,kCACA,kCACA,+BACA,6BACA,oBACA,yBACA,4BACA,kBACA,qCACA,6CACA,0CACA,gCACA,gCACA,0CACA,gDACA,sBACA,qBACA,8BACA,kBACA,2BACA,0BACA,uBACA,0BACA,4BACA,6BACA,8BACA,sBACA,mCACA,mCACA,wCACA,iBACA,8BACA,2BACA,oCACA,sCACA,+CACA,iDACA,4CACA,8CACA,yDACA,WACA,cACA,QACA,oBACA,0BACA,4BACA,uCACA,0BACA,wBACA,SACA,MACA,OACA,oBACA,oBACA,YACA,6BACA,6BACA,2BACA,OACA,OACA,gBACA,SACA,cACA,iBACA,cACA,KACA,kBACA,aACA,gCACA,0BACA,0BACA,2BACA,UACA,MACA,MACA,SACA,YACA,cACA,SACA,2BACA,iBACA,iBACA,sBACA,QACA,sBACA,sBACA,0BACA,qBACA,UACA,YACA,gBACA,gBACA,gBACA,eACA,UACA,sBACA,uCACA,qBACA,yBACA,wBACA,wBACA,uBACA,wBACA,uBACA,yBACA,oBACA,cACA,UACA,SACA,+BACA,sBACA,0BACA,aACA,0BACA,4BACA,qBACA,2BACA,wBACA,wBACA,yBACA,6BACA,sBACA,mBACA,4BACA,wBACA,mCACA,eACA,4BACA,yBACA,8BACA,2BACA,eACA,sBACA,wBACA,gBACA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","x_google_ignoreList":[63,64,65,68]}