{"version":3,"file":"static/chunks/503-dbdce22cbeeac098.js","mappings":"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","sources":["webpack://_N_E/./MyStichtingOpenComponents/src/default-theme/default-theme-colors.js","webpack://_N_E/./MyStichtingOpenComponents/src/default-theme/fontSizes.js","webpack://_N_E/./MyStichtingOpenComponents/src/default-theme/index.js","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Avatar/Avatar.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Avatar/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Backdrop/Backdrop.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Backdrop/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/BottomBar/BottomBar.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/BottomBar/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Button/types/buttonTypes.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Button/constants/ButtonVariantClasses.ts","webpack://_N_E/./MyStichtingOpenComponents/src/types/Backgrounds.ts","webpack://_N_E/./MyStichtingOpenComponents/src/types/Filters.ts","webpack://_N_E/./MyStichtingOpenComponents/src/types/Layouts.ts","webpack://_N_E/./MyStichtingOpenComponents/src/types/Notification.ts","webpack://_N_E/./MyStichtingOpenComponents/src/types/Table.ts","webpack://_N_E/./MyStichtingOpenComponents/src/types/TextTypes.ts","webpack://_N_E/./MyStichtingOpenComponents/src/types/Toast.ts","webpack://_N_E/./MyStichtingOpenComponents/src/types/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Text/Text.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Text/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Progress/Spinner/Spinner.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Progress/Spinner/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Progress/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Button/Button.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/iconConstants.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/IconWrapper.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/AddIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ArrowBottomLeftIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ArrowBottomRightIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ArrowDownIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ArrowLeftIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ArrowRightIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ArrowTopLeftIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ArrowTopRightIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ArrowUpIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/CalculatorIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/CalendarCheckIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/CalendarQuestionMarkIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/CallIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/CheckmarkIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/CheckmarkSmallIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ChevronDownIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ChevronLeftIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ChevronRightIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ChevronUpIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ClearIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/CloseIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/CollectionPlaceholderIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/DateAndTimeIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/DeleteIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/DownloadIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/DropdownIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/EditIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/EmailIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ExportIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/FileAddIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/FileEditIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/FileSignIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/FilesIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/FilterIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/FilteredAndSortedAscendingIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/FilteredAndSortedDescendingIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/FullScreenIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/HomeIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/InfoErrorIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/InfoIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/InfoNoIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/InfoQuestionMarkIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/InfoSuccessIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/InfoWarningIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/InvoiceIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/MenuIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/MoreMenuIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/NotificationIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/PersonActiveIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/PersonAddIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/PersonIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/PlaceholderIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/PointerDownIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/PointerLeftIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/PointerRightIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/PointerUpIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/RemoveIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ScheduleIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/SearchIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/SettingsGearIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/SettingsSliderIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/SortingIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/TimeIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/TruckActiveIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/TruckIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ViewIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/ViewSmallIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/ui/WorkIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/flags/BeFlag.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/flags/DeFlag.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/flags/EnFlag.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/flags/NlFlag.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/flags/NoFlag.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/flags/UkFlag.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/icons/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Button/prefabs/BackButton.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Button/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Card/Card.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Card/index.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/UtilityTypes/yup/yupExtensions.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Date/DateFormatter.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Date/isSameDate.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Date/index.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Locale/localeConstants.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Dictionary/DictionaryFormatters.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Dictionary/Dictionary.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Dictionary/index.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Locale/getLocaleFromHeaders.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Locale/index.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Translations/Translations.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Translations/fetchTranslations.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Translations/fetchMultilingualTranslations.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Translations/index.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Validations/CommonValidations.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Validations/index.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Helpers/logging.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/Helpers/index.ts","webpack://_N_E/./MyStichtingOpenHelpers/src/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/providers/dictionary-provider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Dictionary/DictionaryText.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Dictionary/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Divider/Divider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Divider/index.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/EmptyState/EmptyState.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/EmptyState/TableEmptyState.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/EmptyState/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Grid/GridRow.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Grid/GridCell.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Grid/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/hooks/useIsClient.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/NoPreRender/NoPreRender.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Popover/Popover.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Popover/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/RichText/RichText.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/RichText/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Retain/constants/modifiers.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Retain/Retain.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Retain/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/hooks/useDebounce.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Search/Search.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Search/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/SidebarBox/SidebarBox.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/SidebarBox/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Tab/Tab.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Tab/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Tooltip/Tooltip.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Tooltip/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Tag/Tag.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Tag/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/TextWithUnit/TextWithUnit.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/TextWithUnit/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Truncate/Truncate.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Truncate/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/CardIndication/CardIndication.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/CardIndication/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/CollapsibleCard/CollapsibleCard.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/CollapsibleCard/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/CommonSelectList/selectInputHelpers.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/CommonSelectList/useCommonSelectListItems.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/CommonSelectList/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/hooks/useIsomorphicLayoutEffect.ts","webpack://_N_E/./MyStichtingOpenComponents/src/hooks/useEventListener.ts","webpack://_N_E/./MyStichtingOpenComponents/src/hooks/useOutsideClick.ts","webpack://_N_E/./MyStichtingOpenComponents/src/hooks/useWindowDimensions.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ContextMenu/ContextMenu.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ContextMenu/ContextMenuItem/ContextMenuItem.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ContextMenu/ContextMenuItem/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ContextMenu/ContextMenuTextItem/ContextMenuTextItem.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ContextMenu/ContextMenuTextItem/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ContextMenu/ContextMenuDivider/ContextMenuDivider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ContextMenu/ContextMenuDivider/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ContextMenu/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/List/partials/ListItem/ListItem.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/List/partials/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/List/List.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/List/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Notifications/helpers/getNotificationIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Notifications/helpers/renderMessage.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Notifications/FixedNotification/FixedNotification.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Notifications/FixedNotification/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Notifications/InlineNotification/InlineNotification.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Notifications/InlineNotification/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Notifications/helpers/getToastIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Notifications/Toast/Toast.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Notifications/Toast/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Notifications/index.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/ChoiceList/ChoiceList.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Fieldset/Fieldset.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormCheckbox/FormCheckbox.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormHelpText/FormHelpText.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/component-translation-provider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/constants/messageKeys.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormInputLabel/FormInputLabel.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormInputValidationText/FormInputValidationText.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormField/FormField.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/hooks/useInputWrapper.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormDatePicker/FormDatePicker.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormInput/FormInput.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormNumberInput/FormNumberInput.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormRadioField/FormRadioField.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormTimeInput/FormTimeInput.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormSection/FormSection.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/filter-provider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/layout-provider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/notification-provider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/table/table-provider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/toast-provider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/signal-r-provider/SignalRNotificationKey.ts","webpack://_N_E/./MyStichtingOpenComponents/src/providers/mail-box-provider/helpers/getDefaultValue.ts","webpack://_N_E/./MyStichtingOpenComponents/src/providers/signal-r-provider/signalRConstants.ts","webpack://_N_E/./MyStichtingOpenComponents/src/providers/signal-r-provider/signal-r-provider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/mail-box-provider/mail-box-provider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/mail-box-provider/hooks/useMailListener.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/mail-box-provider/hooks/useMailListenerMultiple.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/mail-box-provider/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/constants/sortingConstants.ts","webpack://_N_E/./MyStichtingOpenComponents/src/constants/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/hooks/UseSorting.ts","webpack://_N_E/./MyStichtingOpenComponents/src/providers/SortingProvider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/PaginationProvider.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/providers/signal-r-provider/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/providers/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FileInput/FileInput.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/Components/ClearIndicatorReplacement.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/Components/DropdownIndicatorReplacement.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/Components/MultiValueComponent.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/Components/SingleValueComponent.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/Components/MultiLineOption.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/Components/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/Components/OptionReplacement.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/SelectInput.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/SingleSelectInput.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/MultiSelectInput.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/Components/AsyncComponent.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/AsyncSingleSelectInput.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Select/AsyncMultiSelectInput.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/Textarea/Textarea.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormPhoneField/countries-nl.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormPhoneField/FormPhoneField.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/ToggleSwitch/ToggleSwitch.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormErrorSummary/FormErrorListItem.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormErrorSummary/FormErrorSummary.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/FormErrorSummary/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/FormElements/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Pagination/Pagination.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Pagination/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ProgressIndicator/ProgressIndicator.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ProgressIndicator/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Switcher/Switcher.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Switcher/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Tabs/Tabs.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/Tabs/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/PageHeader/PageHeader.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/PageHeader/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/PageLayout/layouts/FullWidthLayout.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/PageLayout/layouts/SidebarRightLayout.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/PageLayout/layouts/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/PageLayout/PageLayout.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/PageLayout/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Header/Header.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Header/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/FilterActions.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/Filters.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/FilterItem.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/hooks/useSelectFilter.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/variants/SelectFilter.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/variants/DateFilter.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/variants/FromToDateFilter.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/variants/SwitcherFilter.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/variants/ContextMenuSelectFilter/ContextMenuSelectFilterOption.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/variants/ContextMenuSelectFilter/ContextMenuSelectFilter.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/variants/ContextMenuSelectFilter/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/hooks/useDefaultFilter.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/variants/TextFilter.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/variants/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Filter/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/MainNavigation.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/MainNavigationItemWrapper/MainNavigationItemWrapper.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/MainNavigationItemWrapper/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/MainNavigationItem/MainNavigationItem.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/MainNavigationItem/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/SubNavigationItem/SubNavigationItem.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/SubNavigationItem/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/SubNavigationSubHeading/SubNavigationSubHeading.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/SubNavigationSubHeading/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/SubNavigationWrapper/SubNavigationWrapper.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/SubNavigationWrapper/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/MainNavigation/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/hooks/useIsFirstRender.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Modal/types/modalTypes.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Modal/Modal.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Modal/ConfirmationModal/ConfirmationModal.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Modal/ConfirmationModal/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Modal/InfoModal/InfoModal.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Modal/InfoModal/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Modal/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/TableBody.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/hooks/UseStickyColumn.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/TableCell.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/TableHeaderCellIcon.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/TableHeaderCell.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/TableHeader.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/TableContainer.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/CollapseRowCell.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/CollapseContentCell.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/TableRow.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/TableRowActions.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/partials/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/Table.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/TableBottomControls.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/TableTopControls.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Table/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/types-and-constants/LayoutPaneTypesAndConstants.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/helpers/get-retain-behavior-for-pane.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/LayoutContentPane.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/LayoutTopPane.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/LayoutBottomPane.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/helpers/get-pane-type-class-modifier.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/LayoutSidebarPane.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/LayoutContentPaneRSC.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/LayoutTopPaneRSC.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/LayoutBottomPaneRSC.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/LayoutSidebarPaneRSC.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/helpers/get-inner-children.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/helpers/get-outer-children.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Partials/OuterLayout.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Partials/InnerLayout.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Panes/helpers/get-pane-category-from-pane-type.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/helpers/merge-delegated-panes.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/helpers/convert-children-to-elements-array.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Partials/ContentWrapper.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Layout.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/LayoutDelegator.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Partials/OuterLayoutRSC.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/Partials/InnerLayoutRSC.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/LayoutRSC.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Layout/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/TabsWrapper/TabsWrapper.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/TabsWrapper/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Timeline/Timeline.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/molecules/ListHeader/ListHeader.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Timeline/TimelineFilterWrapper.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Timeline/TimelineTopControls.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Timeline/partials/TimelineEventPrefix.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Card/FileCard.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/atoms/Truncate/RichTruncate.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Timeline/types/TimelineEventTypes.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Timeline/partials/TimelineEventFooter.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Timeline/TimelineEvent.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Timeline/TimelineSwitcherFilter.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/Timeline/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/DataList/partials/DataListRow.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/DataList/partials/DataListCell.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/DataList/partials/DataListEmptyState.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/DataList/partials/DataListHeader.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/DataList/partials/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/DataList/DataList.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/DataList/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/XMorePopover.tsx","webpack://_N_E/./MyStichtingOpenComponents/src/components/organisms/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/components/index.ts","webpack://_N_E/./MyStichtingOpenComponents/src/index.js","webpack://_N_E/./MyStichtingOpenComponents/tailwind.config.js","webpack://_N_E/./assets/img/background.webp","webpack://_N_E/./assets/img/stichting-open-logo.png","webpack://_N_E/./components/layouts/app-layout/app-layout.tsx","webpack://_N_E/./constants/routeConstants.ts","webpack://_N_E/./constants/translations.ts","webpack://_N_E/./helpers/useTranslations.ts"],"sourcesContent":["function withOpacityValue(variable) {\n return ({ opacityValue }) => {\n if (opacityValue === undefined) {\n return `rgb(var(${variable}))`\n }\n return `rgba(var(${variable}), ${opacityValue})`\n }\n}\n\nmodule.exports = {\n black: withOpacityValue('--black'),\n white: withOpacityValue('--white'),\n shade: {\n 0: withOpacityValue('--shade-0'),\n 100: withOpacityValue('--shade-100'),\n 'opacity-100': 'rgba(var(--shade-opacity-100))',\n 200: withOpacityValue('--shade-200'),\n 'opacity-200': 'rgba(var(--shade-opacity-200))',\n 300: withOpacityValue('--shade-300'),\n 'opacity-300': 'rgba(var(--shade-opacity-300))',\n 600: withOpacityValue('--shade-600'),\n 700: withOpacityValue('--shade-700'),\n 900: withOpacityValue('--shade-900'),\n },\n accent: {\n 'opacity-100': 'rgba(var(--accent-opacity-100))',\n 100: withOpacityValue('--accent-100'),\n 'opacity-200': 'rgba(var(--accent-opacity-200))',\n 200: withOpacityValue('--accent-200'),\n 'opacity-300': 'rgba(var(--accent-opacity-300))',\n 300: withOpacityValue('--accent-300'),\n 600: withOpacityValue('--accent-600'),\n 700: withOpacityValue('--accent-700'),\n },\n info: {\n 100: withOpacityValue('--info-100'),\n 600: withOpacityValue('--info-600'),\n 700: withOpacityValue('--info-700'),\n },\n error: {\n 100: withOpacityValue('--error-100'),\n 600: withOpacityValue('--error-600'),\n 700: withOpacityValue('--error-700'),\n },\n warning: {\n 100: withOpacityValue('--warning-100'),\n 600: withOpacityValue('--warning-600'),\n 700: withOpacityValue('--warning-700'),\n },\n success: {\n 100: withOpacityValue('--success-100'),\n 600: withOpacityValue('--success-600'),\n 700: withOpacityValue('--success-700'),\n },\n 'deco-one': {\n 100: withOpacityValue('--deco-one-100'),\n 600: withOpacityValue('--deco-one-600'),\n 700: withOpacityValue('--deco-one-700'),\n },\n 'deco-two': {\n 100: withOpacityValue('--deco-two-100'),\n 600: withOpacityValue('--deco-two-600'),\n 700: withOpacityValue('--deco-two-700'),\n },\n text: {\n default: withOpacityValue('--default-text'),\n primary: withOpacityValue('--primary-text'),\n secondary: withOpacityValue('--secondary-text'),\n tertiary: withOpacityValue('--tertiary-text'),\n interactive: withOpacityValue('--interactive-text'),\n disabled: withOpacityValue('--disabled-text'),\n valid: withOpacityValue('--valid-text'),\n invalid: withOpacityValue('--invalid-text'),\n },\n border: {\n default: 'var(--default-border-color)',\n strong: 'var(--strong-border-color)',\n subtle: 'var(--subtle-border-color)',\n accent: withOpacityValue('--accent-border-color'),\n },\n}\n","module.exports = {\n xxs: [\n '0.6875rem',\n {\n lineHeight: '1rem',\n letterSpacing: '0.3px',\n },\n ],\n xs: [\n '0.8125rem',\n {\n lineHeight: '1rem',\n letterSpacing: '0.3px',\n },\n ],\n\n sm: [\n '0.9375rem',\n {\n lineHeight: '1.375rem',\n letterSpacing: '0.25px',\n },\n ],\n base: [\n '1rem',\n {\n lineHeight: '1.5',\n },\n ],\n\n lg: [\n '1.125rem',\n {\n lineHeight: '1.375rem',\n letterSpacing: '0.25px',\n },\n ],\n\n xl: [\n '1.25rem',\n {\n lineHeight: '1.2',\n letterSpacing: '0.25px',\n },\n ],\n\n xxl: [\n '1.5rem',\n {\n lineHeight: '1.75rem',\n letterSpacing: '0.1px',\n },\n ],\n\n xxxl: [\n '1.6875rem',\n {\n lineHeight: '2rem',\n letterSpacing: '0.05px',\n },\n ],\n}\n","import * as tailwindConfigFile from '../../tailwind.config'\n\nexport const tailwindConfig = tailwindConfigFile\n","import React from 'react'\nimport { UserForAvatar } from '../../../types/User'\n\nexport interface AvatarProps {\n url?: string\n user?: UserForAvatar\n size?: 'small' | 'medium'\n}\n\nexport const Avatar = ({ url, user, size = 'medium' }: AvatarProps) => {\n const wrapperSizeClasses = size === 'small' ? 'w-6 h-6' : 'w-6 h-6 density-lg:w-8 density-lg:h-8'\n const textSizeClasses = size === 'small' ? 'text-xxs' : 'text-xs density-lg:text-lg'\n\n return (\n
\n {url && }\n {!url && user && user.firstName && user.lastName && (\n \n {user.firstName.charAt(0)}\n {user.lastName.charAt(0)}\n
\n )}\n \n )\n}\n","export * from './Avatar'\n","import React from 'react'\n\ninterface BackdropProps extends React.HTMLAttributes {}\n\nexport const Backdrop = (props: BackdropProps) => {\n const styling = 'bg-shade-900/25 absolute top-0 left-0 right-0 bottom-0 -z-10'\n return
\n}\n","export * from './Backdrop'\n","import React, { ReactNode } from 'react'\n\nexport interface BottomBarProps extends React.HTMLAttributes {\n children: ReactNode\n alignRight?: boolean\n}\n\nexport const BottomBar = ({ alignRight = false, children, ...props }: BottomBarProps): JSX.Element => (\n \n
\n
{children}
\n
\n)\n","export * from './BottomBar'\n","export enum ButtonVariants {\n PRIMARY = 'Primary',\n SECONDARY = 'Secondary',\n TERTIARY = 'Tertiary',\n QUIET = 'Quiet',\n DANGER_PRIMARY = 'Danger-primary',\n DANGER_SECONDARY = 'Danger-secondary',\n DANGER_QUIET = 'Danger-quiet',\n DEFAULT_CONTEXT_MENU_ITEM = 'Default-context-menu-item',\n}\n\nexport enum TextPosition {\n LEFT = 'Left',\n CENTER = 'Center',\n}\n\nexport enum ButtonIconPosition {\n LEFT = 'Left',\n RIGHT = 'Right',\n}\n\nexport enum ButtonTypes {\n SUBMIT = 'submit',\n RESET = 'reset',\n BUTTON = 'button',\n}\n","import { ButtonVariants } from '../types/buttonTypes'\n\nexport const ButtonVariantClasses = {\n [ButtonVariants.PRIMARY]:\n 'bg-accent-600 border-accent-600 text-white hover:bg-accent-700 active:bg-accent-700 active:shadow-inner-lg focus:bg-accent-700 focus:border-accent-700 focus:shadow-[inset_0_0_0_1px_rgb(255,255,255)]',\n [ButtonVariants.SECONDARY]:\n 'bg-accent-opacity-200 border-transparent hover:bg-accent-opacity-300 active:bg-accent-opacity-300 active:shadow-inner-md focus:bg-accent-opacity-300 focus:border-accent-600 text-accent-700',\n [ButtonVariants.TERTIARY]:\n 'bg-accent-opacity-100 border-transparent hover:bg-accent-opacity-200 active:bg-accent-opacity-200 active:shadow-inner-md focus:bg-accent-opacity-200 focus:border-accent-600 text-accent-700',\n [ButtonVariants.QUIET]:\n 'text-accent-700 border-transparent hover:bg-accent-opacity-100 active:bg-accent-opacity-100 active:shadow-inner-md focus:bg-accent-opacity-100 focus:border-accent-600',\n [ButtonVariants.DANGER_PRIMARY]:\n 'bg-error-600 border-error-600 text-white hover:bg-error-700 active:bg-error-700 active:shadow-inner-lg focus:bg-error-700 focus:border-error-700 focus:shadow-[inset_0_0_0_1px_rgb(255,255,255)]',\n [ButtonVariants.DANGER_SECONDARY]:\n 'bg-error-100 border-transparent hover:bg-error-600 hover:text-white active:bg-error-600 active:text-white active:shadow-inner-md focus:bg-error-600 focus:border-error-600 focus:text-white text-error-700 focus:shadow-[inset_0_0_0_1px_rgb(255,255,255)]',\n [ButtonVariants.DANGER_QUIET]:\n 'text-error-700 border-transparent hover:bg-error-100 active:bg-error-100 active:shadow-inner-md focus:bg-error-100 focus:border-error-600',\n [ButtonVariants.DEFAULT_CONTEXT_MENU_ITEM]:\n 'text-text-default border-transparent hover:bg-accent-opacity-100 active:bg-accent-opacity-100 active:shadow-inner-md focus:bg-accent-opacity-100 focus:border-accent-600',\n}\n","export enum Backgrounds {\n ACCENT_100 = 'bg-accent-100',\n SHADE_100 = 'bg-shade-100',\n SHADE_0 = 'bg-shade-0',\n WHITE = 'bg-white',\n}\n","export enum FilterOperator {\n EQUALS = 'eq',\n /** Used for matching all provided values in an array, i.e. multiple tags */\n EQUALS_ALL = 'eqAll',\n GREATER_THAN_OR_EQUAL = 'gteq',\n LESSER_THAN_OR_EQUAL = 'lteq',\n CONTAINS = 'contains',\n}\n\nexport type FilterId = string\nexport type FilterValue = string | number | Date | undefined | null\n\nexport type Filter = {\n id?: FilterId\n key: string\n operator: FilterOperator\n value: FilterValue\n nonClearable?: boolean\n}\n\nexport type UpdateFilterValueParams = {\n filter: Filter\n newValue: FilterValue\n}\n\nexport type UpdateFilterValueModel = (params: UpdateFilterValueParams) => void\n\nexport type FilterProviderModel = {\n isInitialized: boolean\n filters: Filter[]\n hasFiltersWithValue: boolean\n hasClearableFilters: boolean\n updateFilterValue: UpdateFilterValueModel\n isExpanded: boolean\n getFilterId: (key: string, operator: FilterOperator) => FilterId\n getFilterValue: (id: FilterId) => FilterValue | undefined\n hasFilterForKey: (key: string) => boolean\n toggleFilters: () => void\n clearFilters: () => void\n registerFilter: (filter: Filter) => void\n getFilterById: (key: FilterId) => Filter | undefined\n}\n\nexport type FiltersPOSTBodyType = {\n filters: [\n {\n name: string\n operator: FilterOperator\n value: FilterValue\n },\n ]\n}\n","export enum Layouts {\n SIDEBAR_RIGHT,\n FULL_WIDTH,\n}\n","import { ReactNode } from 'react'\n\n/** Enum of notification variants, i.e. success or warning */\nexport enum NotificationVariant {\n SHADE = 'shade',\n INFO = 'info',\n SUCCESS = 'success',\n WARNING = 'warning',\n ERROR = 'error',\n}\n\n/** Model used in the state of \"notifications\" */\nexport type NotificationModel = {\n id: string\n title?: string\n message: string\n variant: NotificationVariant\n actions?: string\n}\n\n/** Options model used to add a new notification (notify) */\nexport type NotificationsNotifyOptions = {\n id?: string\n message: string\n title?: string\n variant?: NotificationVariant\n actions?: string\n}\n\n/** Interface for the Notification components, i.e. or */\nexport interface NotificationProps extends React.HTMLAttributes {\n id?: string\n title?: string\n message: ReactNode\n variant?: NotificationVariant\n dismissable?: boolean\n hideIcon?: boolean\n customIcon?: React.ReactNode\n onRemove?: (id: string) => void\n}\n","import { SortingDirection } from '@lib/constants/sortingConstants'\n\nexport interface TableContents {\n column: Column[]\n rows: Row[]\n}\n\nexport interface Column {\n /** ID is automatically set in the provider, it is required for sticky columns. Custom ID can be set for each column, but it has to be unique */\n id?: string | number\n alignment?: 'start' | 'center' | 'end'\n hasNoPadding?: boolean\n isActionColumn?: boolean\n isStretched?: boolean\n lineWrapping?: 0 | 1 | 2\n sortBy?: string\n sortDirection?: SortingDirection\n filterBy?: string\n title?: string | React.ReactNode\n isCollapseColumn?: boolean\n sticky?: 'left' | 'right' | 'left-borderless' | 'right-borderless'\n tooltip?: string | React.ReactNode\n}\n\nexport interface Row {\n column: string\n cell: JSX.Element | string\n class: string\n}\n\nexport enum TableHeaderVariants {\n REGULAR = 'regular',\n QUIET = 'quiet',\n}\n\nexport enum TableVariants {\n STRETCHED = 'stretched',\n INLINE = 'inline',\n}\n\nexport enum TableSizes {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n}\n\nexport interface ColumnInformation {\n position: 'left' | 'right'\n width: number\n}\n","export enum TextTypes {\n HEADING_1 = 'Heading 1',\n HEADING_2 = 'Heading 2',\n HEADING_3 = 'Heading 3',\n HEADING_4 = 'Heading 4',\n HEADING_5 = 'Heading 5',\n HEADING_6 = 'Heading 6',\n PARAGRAPH = 'Paragraph',\n LINK = 'Link',\n SMALL_TEXT = 'Small text',\n BUTTON_DEFAULT = 'Button default',\n BUTTON_SMALL = 'Button small'\n}\n\nconst textElements = ['span', 'div', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']\nexport type AllowedTextElements = typeof textElements[number]\n","/** Enum of toast variants, i.e. success, loading or error */\nexport enum ToastVariant {\n LOADING = 'loading',\n SUCCESS = 'success',\n ERROR = 'error',\n}\n\n/** Model used in the state of \"toasts\" */\nexport interface ToastOption {\n id: string\n message: string\n variant?: ToastVariant\n actionText?: string\n onRemove?: (id: string) => void\n onAction?: () => void\n}\n","export * from './Backgrounds'\nexport * from './Files'\nexport * from './Filters'\nexport * from './Layouts'\nexport * from './Navigation'\nexport * from './Notification'\nexport * from './Pagination'\nexport * from './SelectInput'\nexport * from './Sorting'\nexport * from './Table'\nexport * from './TextTypes'\nexport * from './Toast'\nexport * from './User'\n","import React from 'react'\nimport { AllowedTextElements, TextTypes } from '@lib/types/TextTypes'\n\nexport interface TextProps extends React.HTMLAttributes {\n type?: TextTypes\n tag?: AllowedTextElements\n children: React.ReactNode\n}\n\nconst defaultTag = {\n [TextTypes.HEADING_1]: 'h1',\n [TextTypes.HEADING_2]: 'h2',\n [TextTypes.HEADING_3]: 'h3',\n [TextTypes.HEADING_4]: 'h4',\n [TextTypes.HEADING_5]: 'h5',\n [TextTypes.HEADING_6]: 'h6',\n [TextTypes.PARAGRAPH]: 'p',\n [TextTypes.LINK]: 'p',\n [TextTypes.SMALL_TEXT]: 'p',\n [TextTypes.BUTTON_DEFAULT]: 'span',\n [TextTypes.BUTTON_SMALL]: 'span',\n}\n\nconst classes = {\n [TextTypes.HEADING_1]: 'text-xxxl font-medium',\n [TextTypes.HEADING_2]: 'text-xxl font-medium',\n [TextTypes.HEADING_3]: 'text-xl font-medium',\n [TextTypes.HEADING_4]: 'text-lg font-medium',\n [TextTypes.HEADING_5]: 'text-base font-medium',\n [TextTypes.HEADING_6]: 'text-sm font-medium',\n [TextTypes.PARAGRAPH]: 'text-base',\n [TextTypes.LINK]: 'text-base text-text-interactive cursor-pointer',\n [TextTypes.SMALL_TEXT]: 'text-sm text-text-tertiary',\n [TextTypes.BUTTON_DEFAULT]: 'text-base',\n [TextTypes.BUTTON_SMALL]: 'text-sm',\n}\n\nexport const Text = ({ type = TextTypes.PARAGRAPH, tag, children, ...props }: TextProps): JSX.Element => {\n let elementTag: AllowedTextElements = 'p'\n\n if (!tag && defaultTag[type]) elementTag = defaultTag[type]\n if (tag) elementTag = tag\n\n return React.createElement(\n elementTag,\n { ...props, className: [classes[type], props.className].join(' ') },\n children,\n )\n}\n","export * from './Text'\n","'use client'\nimport React, { useEffect, useState } from 'react'\nimport { TextTypes } from '../../../../types'\nimport { Text } from '../../Text'\n\nexport interface SpinnerProps extends React.HTMLAttributes {\n percentage?: number\n}\n\nconst DEFAULT_PERCENTAGE = 40\n\nexport const Spinner = ({ percentage, ...props }: SpinnerProps) => {\n const [strokeDashoffset, setStrokeDashoffset] = useState(0)\n const circumference = 10 * 2 * Math.PI\n\n useEffect(() => {\n if (percentage) {\n setStrokeDashoffset(circumference - (percentage / 100) * circumference)\n } else {\n setStrokeDashoffset(circumference - (DEFAULT_PERCENTAGE / 100) * circumference)\n }\n }, [percentage])\n\n return (\n \n \n \n \n \n \n \n {percentage && percentage >= 0 && percentage <= 100 && (\n {`${percentage}%`}\n )}\n \n )\n}\n","export * from './Spinner'\n","export * from './Spinner'\n","import React, { ReactNode } from 'react'\nimport { Spinner } from '../Progress'\nimport { ButtonVariantClasses } from './constants/ButtonVariantClasses'\nimport { ButtonIconPosition, ButtonTypes, ButtonVariants, TextPosition } from './types/buttonTypes'\n\nexport interface ButtonProps extends React.HTMLAttributes {\n variant?: ButtonVariants\n type?: ButtonTypes\n children?: ReactNode\n icon?: ReactNode\n textPosition?: TextPosition\n iconPosition?: ButtonIconPosition\n labelIsForScreenReadersOnly?: boolean\n disabled?: boolean\n loading?: boolean\n form?: string\n href?: string\n /** Allows the button to take full height of parent container. Results in no vertical padding and height of 100% */\n contained?: boolean\n onClick?: (e?: React.MouseEvent) => void\n download?: string | ReactNode\n}\n\nexport const Button = React.forwardRef(\n (\n {\n variant = ButtonVariants.SECONDARY,\n type = ButtonTypes.BUTTON,\n children,\n icon,\n textPosition = TextPosition.CENTER,\n iconPosition = ButtonIconPosition.LEFT,\n labelIsForScreenReadersOnly = false,\n disabled = false,\n loading = false,\n href,\n form,\n contained = false,\n download,\n ...props\n },\n ref,\n ) => {\n const classes = [\n `'button-component relative border inline-flex items-stretch rounded-default ${\n textPosition === TextPosition.CENTER ? 'justify-center' : ''\n }`,\n ButtonVariantClasses[variant],\n contained\n ? 'h-full px-2 text-sm density-md:px-2 density-md:text-base density-lg:px-3'\n : 'py-1 px-2 text-sm density-md:py-2 density-md:px-4 density-md:text-base density-lg:py-3 density-lg:px-6',\n disabled ? 'opacity-30 pointer-events-none' : '',\n props.className || '',\n ].join(' ')\n\n const isAnchor = !!href\n const Node = isAnchor ? 'a' : 'button'\n const nodeAttributes = isAnchor\n ? {\n variant,\n type,\n ...(props as React.HTMLAttributes),\n href,\n ref: ref as React.Ref,\n className: classes,\n download,\n }\n : {\n variant,\n type,\n disabled,\n form,\n ...(props as React.HTMLAttributes),\n ref: ref as React.Ref,\n className: classes,\n }\n\n const iconClasses = [\n '-my-1px', // Without this buttons will become 2px higher than normal...\n iconPosition === ButtonIconPosition.LEFT && children ? '-ml-2 mr-1' : '',\n iconPosition === ButtonIconPosition.RIGHT && children ? '-mr-2 ml-1 order-1' : '',\n !children || !!labelIsForScreenReadersOnly ? 'inline-flex -mx-1 density-md:-mx-2 density-lg:-mx-3' : '',\n ].join(' ')\n\n const spinnerClasses = [\n variant !== ButtonVariants.QUIET && 'contrast',\n 'absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2',\n ].join(' ')\n\n return (\n // @ts-ignore typescript doesn't like the spread operator on a dynamic node\n \n \n {icon && {icon}}\n\n {children && children}\n \n\n {loading && }\n \n )\n },\n)\nexport { ButtonVariants, ButtonIconPosition }\n","import { SVGProps } from 'react'\n\nexport enum IconSizes {\n SMALL = '16px',\n MEDIUM = '24px',\n LARGE = '48px',\n}\n\nexport interface IconProps extends SVGProps {\n title?: string\n titleId?: string\n size?: IconSizes\n}\n","import React from 'react'\nimport { IconSizes } from './iconConstants'\n\nexport interface IconWrapperProps {\n children?: React.ReactNode\n size?: IconSizes\n}\n\nexport const IconWrapper = ({ children, size = IconSizes.MEDIUM, ...props }: IconWrapperProps) => {\n const mappedChildren = React.Children.map(children, (element) => {\n if (React.isValidElement(element)) {\n return React.cloneElement(element, {\n // @ts-ignore\n width: size,\n height: size,\n ...props,\n })\n }\n return element\n })\n\n return {mappedChildren}\n}\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const AddIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ArrowBottomLeftIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ArrowBottomRightIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ArrowDownIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ArrowLeftIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ArrowRightIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ArrowTopLeftIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ArrowTopRightIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ArrowUpIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const CalculatorIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const CalendarCheckIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const CalendarQuestionMarkIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n \n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const CallIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const CheckmarkIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const CheckmarkSmallIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ChevronDownIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ChevronLeftIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ChevronRightIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ChevronUpIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ClearIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const CloseIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const CollectionPlaceholderIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const DateAndTimeIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const DeleteIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const DownloadIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const DropdownIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const EditIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const EmailIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ExportIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const FileAddIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const FileEditIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const FileSignIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const FilesIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const FilterIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const FilteredAndSortedAscendingIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const FilteredAndSortedDescendingIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const FullScreenIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const HomeIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const InfoErrorIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const InfoIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const InfoNoIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const InfoQuestionMarkIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const InfoSuccessIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const InfoWarningIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const InvoiceIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n \n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const MenuIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const MoreMenuIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const NotificationIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const PersonActiveIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const PersonAddIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const PersonIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const PlaceholderIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const PointerDownIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const PointerLeftIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const PointerRightIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const PointerUpIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const RemoveIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ScheduleIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const SearchIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const SettingsGearIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const SettingsSliderIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const SortingIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const TimeIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const TruckActiveIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const TruckIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ViewIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const ViewSmallIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const WorkIcon = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const BeFlag = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n \n \n \n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const DeFlag = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n \n \n \n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const EnFlag = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n \n \n \n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const NlFlag = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n \n \n \n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const NoFlag = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n \n \n \n \n \n \n \n \n)\n","import * as React from 'react'\nimport { IconWrapper } from '../IconWrapper'\nimport { IconProps } from '../iconConstants'\n\nexport const UkFlag = ({ title, titleId, ...props }: IconProps) => (\n \n \n {title ? {title} : null}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n)\n","export * from './iconConstants'\n\nexport * from './ui/AddIcon'\nexport * from './ui/ArrowBottomLeftIcon'\nexport * from './ui/ArrowBottomRightIcon'\nexport * from './ui/ArrowDownIcon'\nexport * from './ui/ArrowLeftIcon'\nexport * from './ui/ArrowRightIcon'\nexport * from './ui/ArrowTopLeftIcon'\nexport * from './ui/ArrowTopRightIcon'\nexport * from './ui/ArrowUpIcon'\nexport * from './ui/CalculatorIcon'\nexport * from './ui/CalendarCheckIcon'\nexport * from './ui/CalendarQuestionMarkIcon'\nexport * from './ui/CallIcon'\nexport * from './ui/CheckmarkIcon'\nexport * from './ui/CheckmarkSmallIcon'\nexport * from './ui/ChevronDownIcon'\nexport * from './ui/ChevronLeftIcon'\nexport * from './ui/ChevronRightIcon'\nexport * from './ui/ChevronUpIcon'\nexport * from './ui/ClearIcon'\nexport * from './ui/CloseIcon'\nexport * from './ui/CollectionPlaceholderIcon'\nexport * from './ui/DateAndTimeIcon'\nexport * from './ui/DeleteIcon'\nexport * from './ui/DownloadIcon'\nexport * from './ui/DropdownIcon'\nexport * from './ui/EditIcon'\nexport * from './ui/EmailIcon'\nexport * from './ui/ExportIcon'\nexport * from './ui/FileAddIcon'\nexport * from './ui/FileEditIcon'\nexport * from './ui/FileSignIcon'\nexport * from './ui/FilesIcon'\nexport * from './ui/FilterIcon'\nexport * from './ui/FilteredAndSortedAscendingIcon'\nexport * from './ui/FilteredAndSortedDescendingIcon'\nexport * from './ui/FullScreenIcon'\nexport * from './ui/HomeIcon'\nexport * from './ui/InfoErrorIcon'\nexport * from './ui/InfoIcon'\nexport * from './ui/InfoNoIcon'\nexport * from './ui/InfoQuestionMarkIcon'\nexport * from './ui/InfoSuccessIcon'\nexport * from './ui/InfoWarningIcon'\nexport * from './ui/InvoiceIcon'\nexport * from './ui/MenuIcon'\nexport * from './ui/MoreMenuIcon'\nexport * from './ui/NotificationIcon'\nexport * from './ui/PersonActiveIcon'\nexport * from './ui/PersonAddIcon'\nexport * from './ui/PersonIcon'\nexport * from './ui/PlaceholderIcon'\nexport * from './ui/PointerDownIcon'\nexport * from './ui/PointerLeftIcon'\nexport * from './ui/PointerRightIcon'\nexport * from './ui/PointerUpIcon'\nexport * from './ui/RemoveIcon'\nexport * from './ui/ScheduleIcon'\nexport * from './ui/SearchIcon'\nexport * from './ui/SettingsGearIcon'\nexport * from './ui/SettingsSliderIcon'\nexport * from './ui/SortingIcon'\nexport * from './ui/TimeIcon'\nexport * from './ui/TruckActiveIcon'\nexport * from './ui/TruckIcon'\nexport * from './ui/ViewIcon'\nexport * from './ui/ViewSmallIcon'\nexport * from './ui/WorkIcon'\n\nexport * from './flags/BeFlag'\nexport * from './flags/DeFlag'\nexport * from './flags/EnFlag'\nexport * from './flags/NlFlag'\nexport * from './flags/NoFlag'\nexport * from './flags/UkFlag'\n","import { Button, ButtonProps, ButtonVariants } from '@lib/components/atoms'\nimport { ArrowLeftIcon } from '@lib/components/icons'\nimport React, { FC } from 'react'\n\ninterface BackButtonProps extends Omit {}\n\nexport const BackButton: FC = ({ ...props }): JSX.Element => (\n \n \n
\n
{children}
\n
\n \n \n )\n}\n","export * from './CollapsibleCard'\n","import { GetTextModel } from '@lib/providers'\nimport { GroupedSelectOption, SelectOption, SelectOptionValue } from '@lib/types'\nimport { getTypeResponseTranslation } from '@stopen-helpers/stopen-helpers'\n\nconst MESSAGE_KEYS = {\n RESULTS: 'STO.COMMON.RESULTS',\n}\n\nexport interface SelectListItem {\n value?: SelectOptionValue\n name?: string | null\n}\n\nexport interface DefaultTypeResponse {\n value?: number\n name?: string | null\n translation?: string | null\n color?: number | null\n}\n\ninterface MapAsyncSelectInputResponseToOptionsProps {\n selectItems: T[]\n totalResults: number | string\n getText: GetTextModel\n formatName?: (selectItem: SelectListItem) => string\n formatFooter?: (selectItem: SelectListItem) => string\n}\n\nexport const mapAsyncSelectInputResponseToOptions = ({\n selectItems,\n totalResults,\n getText,\n formatName,\n formatFooter,\n}: MapAsyncSelectInputResponseToOptionsProps): GroupedSelectOption[] => {\n const mappedSelectOptions: SelectOption[] = selectItems.map(\n (selectItem): SelectOption => ({\n label: formatName ? formatName(selectItem) : String(selectItem.name) ?? String(selectItem.value),\n value: selectItem.value as SelectOptionValue,\n ...(formatFooter ? { footer: formatFooter(selectItem) } : {}),\n data: selectItem,\n }),\n )\n\n return [\n {\n label: `${getText(MESSAGE_KEYS.RESULTS)} (${selectItems.length}/${totalResults})`,\n options: mappedSelectOptions,\n },\n ]\n}\n\nexport interface MapSelectInputResponseToOptionsProps {\n selectItems: T[]\n formatName?: (selectItem: unknown) => string\n formatFooter?: (selectItem: unknown) => string\n /** In some cases, like \"named enums\" from the back-end, they expect the \"name\" of the enum key instead of the value.\n * This boolean allows us to use the name instead of the value */\n useNameAsValue?: boolean\n}\n\nexport const mapSelectInputResponseToOptions = ({\n selectItems,\n formatName,\n formatFooter,\n useNameAsValue,\n}: MapSelectInputResponseToOptionsProps): SelectOption[] => {\n const mappedSelectOptions: SelectOption[] = selectItems.map((selectItem) => ({\n label: formatName ? formatName(selectItem) : String(selectItem.name) ?? String(selectItem.value),\n value: useNameAsValue && selectItem.name ? selectItem.name : selectItem.value ?? null,\n ...(formatFooter ? { footer: formatFooter(selectItem) } : {}),\n data: selectItem,\n }))\n\n return mappedSelectOptions\n}\n\nexport const mapTypeResponseListToOptions = (\n data: T[],\n valueKey: string = 'value',\n formatLabel?: (option: T) => string,\n): SelectOption[] => {\n return data.map((typeResponse) => ({\n value: typeResponse?.[valueKey as keyof T] as string | number,\n label: formatLabel?.(typeResponse) ?? getTypeResponseTranslation(typeResponse) ?? '',\n }))\n}\n","'use client'\n\nimport { useEffect, useMemo } from 'react'\nimport {\n MapSelectInputResponseToOptionsProps,\n SelectListItem,\n mapSelectInputResponseToOptions,\n} from '@lib/components/molecules/CommonSelectList/selectInputHelpers'\nimport { SelectOption } from '@lib/types'\n\ninterface props {\n selectListResponse: {\n data: SelectListItem[]\n isLoading: boolean\n error: unknown\n }\n handleError?: (error: unknown) => void\n /** Optional custom mapping options */\n mapperOptions?: Pick, 'formatName' | 'formatFooter'>\n}\n\nexport const useCommonSelectListItems = ({ handleError, selectListResponse, mapperOptions }: props) => {\n useEffect(() => {\n if (selectListResponse.error && handleError) handleError(selectListResponse.error)\n }, [selectListResponse.error])\n\n const options = useMemo(() => {\n const freshData = selectListResponse?.data\n\n if (!freshData) return\n\n let newOptions = []\n\n if (mapperOptions) {\n newOptions = mapSelectInputResponseToOptions({\n selectItems: freshData,\n ...mapperOptions,\n })\n } else {\n newOptions = freshData.map((option) => ({\n value: option.value ?? null,\n label: option.name ?? option.value ? String(option.value) : '',\n }))\n }\n\n return newOptions\n }, [selectListResponse])\n\n return {\n error: selectListResponse.error,\n isLoading: selectListResponse.isLoading,\n response: selectListResponse,\n options,\n }\n}\n\nexport default useCommonSelectListItems\n","export * from './selectInputHelpers'\nexport * from './useCommonSelectListItems'\n","import { useEffect, useLayoutEffect } from 'react'\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect\n\nexport default useIsomorphicLayoutEffect","import { RefObject, useEffect, useRef } from 'react'\n\n// See: https://usehooks-ts.com/react-hook/use-isomorphic-layout-effect\nimport useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect'\n\nfunction useEventListener(\n eventName: K,\n handler: (event: WindowEventMap[K]) => void\n): void\nfunction useEventListener(\n eventName: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n element: RefObject\n): void\n\nfunction useEventListener<\n KW extends keyof WindowEventMap,\n KH extends keyof HTMLElementEventMap,\n T extends HTMLElement | void = void\n>(\n eventName: KW | KH,\n handler: (event: WindowEventMap[KW] | HTMLElementEventMap[KH] | Event) => void,\n element?: RefObject\n) {\n // Create a ref that stores handler\n const savedHandler = useRef(handler)\n\n useIsomorphicLayoutEffect(() => {\n savedHandler.current = handler\n }, [handler])\n\n useEffect(() => {\n // Define the listening target\n const targetElement: T | Window = element?.current || window\n if (!(targetElement && targetElement.addEventListener)) {\n return\n }\n\n // Create event listener that calls handler function stored in ref\n const eventListener: typeof handler = (event) => savedHandler.current(event)\n\n targetElement.addEventListener(eventName, eventListener)\n\n // Remove event listener on cleanup\n return () => {\n targetElement.removeEventListener(eventName, eventListener)\n }\n }, [eventName, element])\n}\n\nexport default useEventListener","import { RefObject } from 'react'\n\nimport useEventListener from './useEventListener'\n\ntype Handler = (event: MouseEvent) => void\nconst CLICK_OUTSIDE_SAFE_KEY = 'data-click-outside-safe'\n/**\n * Give an element this constant to overrule click outside\n * @example {...data_click_outside_safe}\n * */\nexport const data_click_outside_safe = { [CLICK_OUTSIDE_SAFE_KEY]: true }\n\nfunction useOnClickOutside(\n ref: RefObject,\n handler: Handler,\n mouseEvent: 'mousedown' | 'mouseup' = 'mousedown',\n): void {\n useEventListener(mouseEvent, (event) => {\n const el = ref?.current\n\n const target = event.target as Element\n\n if (target.hasAttribute(CLICK_OUTSIDE_SAFE_KEY)) return\n\n // Do nothing if clicking ref's element or descendent elements or svg\n // svg >>> Clicks on an svg are seen as a click on window and therefore always outside the element. Clicking on a \"clear\" cross from a select closes the modal it is in...\n if (!el || el.contains(target) || ['svg', 'path', 'circle', 'rect', 'g'].includes(target.nodeName)) {\n return\n }\n\n handler(event)\n })\n}\n\nexport default useOnClickOutside\n","import { useState, useEffect } from 'react'\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window\n return {\n width,\n height\n }\n}\n\nexport default function useWindowDimensions() {\n const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions())\n\n useEffect(() => {\n function handleResize() {\n setWindowDimensions(getWindowDimensions())\n }\n\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [])\n\n return windowDimensions\n}\n","'use client'\nimport React, { createRef, LegacyRef, useRef, useState } from 'react'\nimport { MoreMenuIcon } from '@lib/components/icons'\nimport { createPortal } from 'react-dom'\nimport { Button, ButtonVariants } from '../../atoms'\n\nimport useOnClickOutside from '../../../hooks/useOutsideClick'\nimport useWindowDimensions from '../../../hooks/useWindowDimensions'\nimport { documentExists } from '@stopen-helpers/stopen-helpers'\n\nexport interface ContextMenuProps extends React.HTMLAttributes {\n children: React.ReactNode\n align?: 'left' | 'right'\n toggleButton?: React.ReactElement\n}\n\nexport const ContextMenu = ({ children, align = 'right', toggleButton, className }: ContextMenuProps) => {\n const contextBtnRef = useRef(null)\n const contextMenuRef: LegacyRef | null = createRef()\n const rect = contextBtnRef?.current?.getBoundingClientRect()\n const [shouldShowMenu, setShouldShowMenu] = useState(false)\n const contextMenuRoot = documentExists() ? document.getElementById('context-menu-root') : null\n\n const ContextMenuModal = () => {\n const { width: windowWidth } = useWindowDimensions()\n\n let style: {\n top?: string\n left?: string\n right?: string\n transform?: string\n } = {\n top: `${rect?.bottom}px`,\n }\n\n if (align === 'right') {\n style.right = `${rect?.right ? windowWidth - rect?.right : 0}px`\n } else {\n style.left = `${rect?.left}px`\n }\n\n if (!documentExists()) {\n return <>\n }\n\n window.addEventListener('resize', () => {\n if (shouldShowMenu) {\n setShouldShowMenu(false)\n }\n })\n\n return createPortal(\n \n {children}\n ,\n contextMenuRoot ? contextMenuRoot : document.body,\n )\n }\n\n const toggleContextMenu = () => {\n setShouldShowMenu((prevValue) => !prevValue)\n }\n\n const handleOutsideClick = () => {\n if (shouldShowMenu) {\n setShouldShowMenu(false)\n }\n }\n\n useOnClickOutside(contextMenuRef, handleOutsideClick)\n\n return (\n <>\n
\n {toggleButton && React.cloneElement(toggleButton, { onClick: () => toggleContextMenu() })}\n {!toggleButton && (\n }\n onClick={() => toggleContextMenu()}\n />\n )}\n
\n\n {shouldShowMenu && }\n \n )\n}\n","'use client'\nimport React from 'react'\n\nimport { Button, ButtonIconPosition, ButtonProps, ButtonVariants, TextPosition } from '../../../atoms'\n\nexport interface ContextMenuItemProps extends ButtonProps {\n children: React.ReactNode\n disabled?: boolean\n buttonVariant?: ButtonVariants\n onClick?: () => void\n}\n\nexport const ContextMenuItem = ({\n children,\n disabled,\n buttonVariant = ButtonVariants.DEFAULT_CONTEXT_MENU_ITEM,\n icon,\n ...rest\n}: ContextMenuItemProps) => {\n return (\n \n {!!icon && (\n \n {icon}\n \n )}\n {children}\n \n )\n}\n\nexport default ContextMenuItem\n","export { ContextMenuItem } from './ContextMenuItem'\n","'use client'\nimport React, { HTMLAttributes } from 'react'\n\nexport interface ContextMenuTextItemProps extends HTMLAttributes {\n children: React.ReactNode\n}\n\nexport const ContextMenuTextItem = ({ children, ...rest }: ContextMenuTextItemProps) => {\n return (\n \n {children}\n \n )\n}\n\nexport default ContextMenuTextItem\n","export * from './ContextMenuTextItem'\n","'use client'\nimport React from 'react'\nimport { Divider, Text } from '../../../atoms'\nimport { TextTypes } from '@lib/types'\n\nexport interface ContextMenuDividerProps {\n /** Translated string */\n label?: React.ReactNode\n}\n\nexport const ContextMenuDivider = ({ label }: ContextMenuDividerProps) => {\n return (\n
\n {label && (\n \n {label}\n \n )}\n \n
\n )\n}\n","export * from './ContextMenuDivider'\n","export * from './ContextMenu'\nexport * from './ContextMenuItem'\nexport * from './ContextMenuTextItem'\nexport * from './ContextMenuDivider'\n","'use client'\nimport React from 'react'\n\ninterface ListItemProps extends React.HTMLAttributes {\n active?: boolean\n clickable?: boolean\n subChildren?: React.ReactNode\n}\n\nexport const ListItem = React.forwardRef(\n ({ active = false, clickable = true, subChildren, children, ...props }: ListItemProps, ref) => {\n const clickableStyles = !active && clickable ? 'cursor-pointer hover:bg-interactive' : ''\n const activeStyles = active ? 'bg-interactive' : ''\n\n return (\n \n
{children}
\n {subChildren}\n \n )\n },\n)\n","export * from './ListItem/ListItem'\n","'use client'\nimport React from 'react'\n\nexport interface ListProps extends React.HTMLAttributes {}\n\nexport const List = ({ children, ...props }: ListProps) => {\n return (\n
    \n {children}\n
\n )\n}\n","export * from './partials'\nexport * from './List'\n","'use client'\nimport { NotificationVariant } from '@lib/types'\nimport { InfoErrorIcon, InfoIcon, InfoSuccessIcon, InfoWarningIcon } from '@lib/components/icons'\nimport React, { ReactNode } from 'react'\n\nexport const getNotificationIcon = (variant: NotificationVariant, customIcon?: ReactNode): ReactNode => {\n switch (variant) {\n case NotificationVariant.ERROR:\n return \n case NotificationVariant.WARNING:\n return \n case NotificationVariant.SUCCESS:\n return \n default:\n return customIcon || \n }\n}\n","import { RichText } from '@lib/components/atoms/RichText'\nimport React, { FC, ReactElement, ReactNode, isValidElement } from 'react'\n\ninterface Props {\n message: ReactNode\n tag?: keyof HTMLElementTagNameMap\n classes?: string\n}\n/**\n * When message is a react element (like DictionaryText) it just renders the DictionaryText\n * if it is a string, it renders it as a RichtText String\n */\nexport const renderMessage: FC = ({ message, tag, classes }): ReactElement => {\n const isElement = isValidElement(message)\n return isElement ? (\n message\n ) : typeof message === 'string' ? (\n \n ) : (\n <>\n )\n}\n","'use client'\nimport { CloseIcon } from '@lib/components/icons'\nimport React, { useId } from 'react'\nimport { NotificationProps, NotificationVariant } from '../../../../types/Notification'\nimport { Button, ButtonVariants, Text } from '../../../atoms'\nimport { getNotificationIcon } from '../helpers/getNotificationIcon'\n\nimport { renderMessage } from '../helpers/renderMessage'\n\nexport interface FixedNotificationProps extends NotificationProps {\n actions?: React.ReactNode[]\n dismissLabel: string\n}\n\nexport const FixedNotification = ({\n id,\n title,\n message,\n variant = NotificationVariant.INFO,\n dismissable = true,\n hideIcon = false,\n customIcon,\n actions,\n dismissLabel,\n onRemove,\n ...props\n}: FixedNotificationProps) => {\n const notificationId = id ?? useId()\n\n const typeClasses = {\n [NotificationVariant.SHADE]: 'bg-shade-opacity-100 text-shade-700',\n [NotificationVariant.INFO]: 'bg-info-100 text-info-700',\n [NotificationVariant.SUCCESS]: 'bg-success-100 text-success-700',\n [NotificationVariant.WARNING]: 'bg-warning-100 text-warning-700',\n [NotificationVariant.ERROR]: 'bg-error-100 text-error-700',\n }\n\n const iconElement = getNotificationIcon(variant, customIcon)\n\n return (\n \n
\n {!hideIcon && iconElement &&
{iconElement}
}\n
\n {title && {title}}\n {renderMessage({ message, classes: 'text-text-secondary' })}\n
\n
\n {dismissable && (!actions || actions.length === 0) && (\n
\n }\n onClick={() => onRemove && onRemove(notificationId)}\n />\n
\n )}\n {actions && actions.length > 0 && (\n
\n {actions.map((action, index) => {\n return (\n \n {action}\n
\n )\n })}\n {actions.length <= 1 && dismissable && dismissLabel && (\n
\n \n
\n )}\n \n )}\n \n )\n}\n","export * from './FixedNotification'\n","'use client'\n\nimport { CloseIcon } from '@lib/components/icons'\nimport React, { ReactElement, ReactNode, cloneElement, MutableRefObject, useRef } from 'react'\nimport { NotificationProps, NotificationVariant } from '../../../../types/Notification'\nimport { Button, ButtonProps, ButtonVariants, Text } from '../../../atoms'\nimport { getNotificationIcon } from '../helpers/getNotificationIcon'\nimport { renderMessage } from '../helpers/renderMessage'\n\nexport interface InlineNotificationProps extends NotificationProps {\n action?: ReactElement\n dismissText?: string\n isVertical?: boolean\n}\n\nconst closeNotification = (ref: MutableRefObject) => {\n if (ref.current === null) {\n console.warn('ref === null')\n return null\n }\n return (ref.current as HTMLDialogElement).close()\n}\nexport const InlineNotification = ({\n id,\n title,\n message,\n dismissText = 'Dismiss',\n variant = NotificationVariant.INFO,\n dismissable = true,\n hideIcon = false,\n customIcon,\n action,\n isVertical = false,\n onRemove,\n ...props\n}: InlineNotificationProps) => {\n if (onRemove !== undefined) console.warn('onRemove will not be used to dismiss InlineNotification.')\n const ref = useRef(null)\n\n const variantClasses = {\n [NotificationVariant.SHADE]: 'bg-shade-opacity-100',\n [NotificationVariant.INFO]: 'bg-info-100',\n [NotificationVariant.SUCCESS]: 'bg-success-100',\n [NotificationVariant.WARNING]: 'bg-warning-100',\n [NotificationVariant.ERROR]: 'bg-error-100',\n }\n\n const variantIconClasses = {\n [NotificationVariant.SHADE]: 'text-shade-700',\n [NotificationVariant.INFO]: 'text-info-700',\n [NotificationVariant.SUCCESS]: 'text-success-700',\n [NotificationVariant.WARNING]: 'text-warning-700',\n [NotificationVariant.ERROR]: 'text-error-700',\n }\n\n const iconElement: ReactNode = getNotificationIcon(variant, customIcon)\n const sharedDismissBtnProps: ButtonProps = {\n variant: ButtonVariants.QUIET,\n onClick: () => closeNotification(ref),\n 'aria-label': dismissText,\n }\n\n return (\n \n
\n {!hideIcon && iconElement && (\n
\n {iconElement}\n
\n )}\n
\n {title && (\n \n {title}\n \n )}\n {renderMessage({ message, tag: 'p', classes: 'text-text-default' })}\n
\n
\n\n {!isVertical && (\n <>\n {!!action && (\n
\n {cloneElement(action, { variant: ButtonVariants.QUIET })}\n
\n )}\n {dismissable && (\n
\n
\n )}\n \n )}\n\n {isVertical && (!!action || dismissable) && (\n
\n {!!action && cloneElement(action, { className: 'w-full', variant: ButtonVariants.QUIET })}\n {action && dismissable && }\n {dismissable && (\n \n )}\n
\n )}\n \n )\n}\n","export * from './InlineNotification'\n","'use client'\nimport { InfoNoIcon, InfoSuccessIcon } from '@lib/components/icons'\nimport React from 'react'\nimport { Spinner } from '../../../atoms'\nimport { ToastVariant } from '@lib/types'\n\nexport const getToastIcon = (variant?: ToastVariant): JSX.Element | null => {\n switch (variant) {\n case ToastVariant.LOADING:\n return \n case ToastVariant.ERROR:\n return \n case ToastVariant.SUCCESS:\n return \n default:\n return null\n }\n}\n","'use client'\nimport { CloseIcon } from '@lib/components/icons'\nimport { AnimatePresence, HTMLMotionProps, motion } from 'framer-motion'\nimport React from 'react'\nimport { Button, ButtonVariants, Text } from '../../../atoms'\nimport { getToastIcon } from '../helpers/getToastIcon'\nimport { ToastOption, ToastVariant } from '@lib/types'\n\nconst TOAST_STYLING: { [key: string]: string } = {\n COLOR: 'contrast bg-primary text-text-default',\n BOX: 'border-1 border-shade-opacity-200 shadow-drop-lg',\n LAYOUT: 'flex justify-between fixed bottom-[72px] z-50',\n SIZE: 'min-h-[3rem] max-w-xl',\n SPACING: 'p-0',\n}\n\nexport const Toast = ({ id, message, variant, actionText, onAction, onRemove }: ToastOption): JSX.Element => {\n const loading: boolean = variant === ToastVariant.LOADING\n const animation: HTMLMotionProps<'dialog'> = {\n initial: { bottom: -50 },\n animate: { bottom: 72, transition: { duration: 0.5 } },\n exit: { bottom: -50, transition: { duration: 0.25 } },\n }\n\n const getClassNamesForParent = (): string => Object.values(TOAST_STYLING).join(' ')\n\n return (\n \n {message && (\n \n
\n {variant && !!getToastIcon(variant) && (\n {getToastIcon(variant)}\n )}\n {message}\n
\n\n {actionText && onAction && (\n \n )}\n\n {!loading && onRemove && (\n
\n onRemove(id)}\n icon={}\n />\n
\n )}\n
\n )}\n
\n )\n}\n","export * from './Toast'\n","export * from './FixedNotification'\nexport * from './InlineNotification'\nexport * from './Toast'\n","'use client'\nimport React from 'react'\n\nexport enum ChoiceListTypes {\n DEFAULT = 'default',\n INLINE = 'inline',\n}\n\nexport interface ChoiceListProps extends React.HTMLAttributes {\n /** Vertical or horizontal layout */\n type?: ChoiceListTypes\n}\n\n/** UI component for grouping radio buttons */\nexport const ChoiceList = ({ type = ChoiceListTypes.DEFAULT, children, ...props }: ChoiceListProps) => {\n const getTypeClasses = () => {\n switch (type) {\n case ChoiceListTypes.INLINE:\n return 'inline-flex flex-wrap items-center gap-x-3 gap-y-2'\n default:\n return 'flex flex-col'\n }\n }\n\n return
{children}
\n}\n","import { Text } from '@lib/components/atoms'\nimport { TextTypes } from '@lib/types'\nimport React from 'react'\n\nexport interface FieldsetProps extends React.HTMLAttributes {\n title: string\n}\n\nexport const Fieldset = ({ title, children, ...props }: FieldsetProps): JSX.Element => {\n return (\n
\n \n {title}\n \n
{children}
\n
\n )\n}\n","'use client'\nimport React, { useEffect, useRef, useState, useImperativeHandle, ReactNode } from 'react'\n\nimport { ChangeHandler } from 'react-hook-form'\n\nexport interface FormCheckboxProps extends Omit, 'onChange'> {\n label?: string | ReactNode\n id?: string\n form?: string\n name?: string\n value?: string | number\n checked?: boolean\n disabled?: boolean\n readOnly?: boolean\n indeterminate?: boolean\n onChange?: ChangeHandler | ((value: unknown, checked: boolean) => void)\n /** Adds a box around the checkbox */\n boxed?: boolean\n}\n\nexport const FormCheckbox = React.forwardRef(\n (\n { label, id, form, name, value, checked, disabled, readOnly, indeterminate = false, onChange, boxed, ...rest },\n ref,\n ) => {\n const [checkedValue, setCheckedValue] = useState(checked)\n const checkboxRef = useRef(null)\n useImperativeHandle(ref, () => checkboxRef.current!, [ref])\n\n const onChangeHandler = () => {\n if (!readOnly && !disabled) {\n setCheckedValue(!checkedValue)\n }\n }\n\n useEffect(() => {\n if (checkboxRef?.current) {\n checkboxRef.current.indeterminate = !!indeterminate\n }\n }, [indeterminate])\n\n const labelClasses = `\n ${boxed ? 'checkbox--boxed' : ''}\n ${disabled ? 'checkbox--disabled' : ''}\n ${readOnly ? 'checkbox--readonly' : ''}\n `\n\n return (\n \n )\n },\n)\n","'use client'\nimport { Text } from '@lib/components/atoms'\nimport { TextTypes } from '@lib/types'\nimport React from 'react'\n\nexport interface FormHelpTextProps {\n children: React.ReactNode\n}\n\nexport const FormHelpText = ({ children }: FormHelpTextProps) => {children}\n","'use client'\n\nimport React from 'react'\nimport { Dictionary, DictionaryModel, ReplacerObject } from '@stopen-helpers/stopen-helpers'\nimport { createContext, ReactNode } from 'react'\n\ninterface ComponentTranslationProviderValue {\n getLabel: ([key, defaultValue]: string[], replacer?: ReplacerObject | undefined) => string\n}\n\nexport const ComponentTranslationContext = createContext({\n getLabel: ([key, defaultValue]: string[], replacer?: ReplacerObject | undefined) => defaultValue ?? key,\n})\n\ninterface ComponentTranslationProviderProps {\n children: ReactNode\n dictionary: DictionaryModel // translations fetched from CMS\n}\n\nexport const ComponentTranslationProvider = ({\n children,\n dictionary = {},\n}: ComponentTranslationProviderProps): JSX.Element => {\n const getLabel = ([key, defaultValue]: string[], replacer?: ReplacerObject | undefined): string => {\n const value = Dictionary.getText(dictionary, key, replacer)\n if (value === key && defaultValue) return defaultValue\n return value ?? key\n }\n const providerValue: ComponentTranslationProviderValue = { getLabel }\n\n return {children}\n}\n","/** This file should NOT be included in the build */\n\nexport const MESSAGE_KEYS = {\n TO: ['STO.COMPONENTS.COMMON.TO', 'tot'],\n SHOW_MORE: ['STO.COMPONENTS.COMMON.SHOW_MORE', 'Toon meer'],\n SHOW_LESS: ['STO.COMPONENTS.COMMON.SHOW_LESS', 'Toon minder'],\n OPTIONAL: ['STO.COMPONENTS.COMMON.FORM.OPTIONAL', 'Optioneel'],\n ACTION_ADD: ['STO.COMPONENTS.COMMON.FORM.ADD', 'Toevoegen'],\n FILTERS_HIDE: ['STO.COMPONENTS.COMMON.FILTERS.HIDE', 'Filters verbergen'],\n FILTERS_SHOW: ['STO.COMPONENTS.COMMON.FILTERS.SHOW', 'Filters tonen'],\n FILTERS_RESET: ['STO.COMPONENTS.COMMON.FILTERS.RESET', 'Filters resetten'],\n TABLE_ACTIONS: ['STO.COMPONENTS.COMMON.TABLE.ACTIONS', 'Acties'],\n SYSTEM: ['STO.COMPONENTS.COMMON.SYSTEM', 'Systeem'],\n ALL: ['STO.COMPONENTS.COMMON.ALL', 'Alle'],\n FILTERS: ['STO.COMPONENTS.COMMON.FILTERS', 'Filters'],\n X_MORE: ['STO.COMPONENTS.COMMON.X_MORE', 'meer'],\n}\n","'use client'\nimport React, { HTMLAttributes, useContext } from 'react'\nimport { ComponentTranslationContext } from '../../../providers/component-translation-provider'\nimport { MESSAGE_KEYS } from '@lib/constants/messageKeys'\n\nexport interface FormInputLabelProps extends HTMLAttributes {\n name: string\n optional?: boolean\n disabled?: boolean\n children: React.ReactNode\n}\n\nexport const FormInputLabel = ({ children, name, optional, disabled = false, ...props }: FormInputLabelProps) => {\n const { getLabel } = useContext(ComponentTranslationContext)\n\n return (\n \n {children}\n {optional && {` (${getLabel(MESSAGE_KEYS.OPTIONAL)})`}}\n \n )\n}\n","'use client'\n\nimport { IconSizes, InfoErrorIcon } from '@lib/components/icons'\nimport React from 'react'\n\nexport interface FormInputValidationText {\n children: React.ReactNode\n}\n\nexport const FormInputValidationText = ({ children }: FormInputValidationText) => (\n \n {children}\n \n \n)\n","'use client'\n\nimport React, { ReactNode } from 'react'\nimport { FieldError, Message } from 'react-hook-form'\nimport { FormHelpText } from '../FormHelpText/FormHelpText'\nimport { FormInputLabel } from '../FormInputLabel/FormInputLabel'\nimport { FormInputValidationText } from '../FormInputValidationText/FormInputValidationText'\nimport { Tooltip } from '@lib/components/atoms'\n\nconst ROOT_CLASS = 'form-field'\n\nexport interface FormFieldProps extends React.HTMLAttributes {\n label?: ReactNode\n disabled?: boolean\n readOnly?: boolean\n error?: string | Message | FieldError | ReactNode\n showError?: boolean\n name: string\n /**\n * Only use helpText on inputs that don't share the same row as other FormFields. Doing that will cause the Inputs to be misaligned.\n */\n helpText?: ReactNode\n optional?: boolean\n isQuiet?: boolean\n /** Hides the label visually without hiding it for screen readers */\n screenReaderOnly?: boolean\n tooltip?: ReactNode\n children: ReactNode\n}\n\nexport const FormField = ({\n disabled = false,\n readOnly = false,\n error,\n showError = true,\n name,\n label,\n helpText,\n optional = false,\n isQuiet = false,\n screenReaderOnly = false,\n tooltip,\n children,\n ...props\n}: FormFieldProps) => {\n const getClasses = (): string => {\n let classes: string[] = [ROOT_CLASS]\n\n if (props.className) classes.push(props.className)\n if (error) classes.push('error')\n if (disabled) classes.push('disabled')\n if (readOnly) classes.push('readonly')\n if (isQuiet) classes.push('quiet')\n if (screenReaderOnly) classes.push('screenreader-only')\n\n return classes.join(' ')\n }\n\n const getTestId = (): string => {\n let testId = 'form-field'\n if (error) testId += '--has-error'\n return testId\n }\n\n return (\n
\n {label && (\n
\n
\n \n {label}\n \n
\n {tooltip && }\n
\n )}\n {helpText && !error && (\n
\n {helpText}\n
\n )}\n \n {children}\n
\n {error && showError && (\n
\n \n <>{error}\n \n
\n )}\n \n )\n}\n","import { useEffect, useState } from 'react'\n\ninterface useInputWrapperProps {\n onFocusHandler: () => void\n onBlurHandler: () => void\n classes: string\n}\n\nconst useInputWrapper = (\n initialFocusState: boolean,\n disabled: boolean = false,\n error: boolean = false\n): useInputWrapperProps => {\n const defaultClass = 'input-wrapper'\n const [focused, setFocused] = useState(initialFocusState)\n const [classes, setClasses] = useState(defaultClass)\n\n const onFocusHandler = (): void => setFocused(!disabled)\n const onBlurHandler = (): void => setFocused(false)\n\n const getClasses = (): string => {\n let classes: string[] = [defaultClass]\n if (focused) classes.push('focused')\n if (error) classes.push('error')\n if (disabled) classes.push('disabled')\n return classes.join(' ')\n }\n\n useEffect(() => {\n if (disabled) setFocused(false)\n }, [disabled])\n\n useEffect(() => {\n setClasses(getClasses())\n }, [focused, error, disabled])\n\n return { onFocusHandler, onBlurHandler, classes }\n}\n\nexport default useInputWrapper\n","'use client'\n\nimport { toDateOnStartDay } from '@stopen-helpers/stopen-helpers'\nimport { ClearIcon, ScheduleIcon } from '@lib/components/icons'\nimport { enUS } from 'date-fns/locale/en-US'\nimport { nl } from 'date-fns/locale/nl'\nimport React from 'react'\nimport DatePicker, { registerLocale } from 'react-datepicker'\nimport 'react-datepicker/dist/react-datepicker.css'\nimport useInputWrapper from '../../../hooks/useInputWrapper'\n\nregisterLocale('nl', nl)\nregisterLocale('en', enUS)\n\nconst dateFormatSeparators = ['/', '-', ' ', '.']\n\nexport interface FormDatePickerProps {\n isClearable?: boolean\n onChange: (option: Date | null) => void\n disabled?: boolean\n defaultDate?: Date | null\n placeholderText?: string\n /** @default 'off' */\n autoComplete?: string | undefined\n error?: boolean\n readOnly?: boolean\n minDate?: Date | null\n maxDate?: Date | null\n locale?: number\n id: string | undefined\n autoFocus?: boolean\n name?: string\n isMonthPicker?: boolean\n /**\n * The date format for this input using slashes\n * @default 'dd/MM/yyyy'\n */\n dateFormat?: string\n}\n\nexport const FormDatePicker = ({\n onChange,\n isClearable = true,\n disabled = false,\n defaultDate = null,\n placeholderText = '',\n autoComplete = 'off',\n error,\n readOnly,\n minDate,\n maxDate,\n locale,\n id,\n autoFocus = false,\n name,\n isMonthPicker = false,\n dateFormat = 'dd/MM/yyyy',\n ...props\n}: FormDatePickerProps) => {\n const { onFocusHandler, onBlurHandler, classes } = useInputWrapper(false, disabled)\n\n const getRegisteredLocale = (): string => {\n switch (locale) {\n case 0:\n return 'nl'\n case 1:\n return 'en'\n default:\n return 'nl'\n }\n }\n\n const changeHandler = (date: Date | null): void => {\n onChange(date ? toDateOnStartDay(date) : null)\n onBlurHandler()\n }\n\n /**\n * Creates a date format (based on the dateFormat prop) for each of the separators defined in dateFormatSeparators.\n * @returns array of date formats\n */\n const dateFormats = (): string[] => dateFormatSeparators.map((format) => dateFormat.replaceAll('/', format))\n\n return (\n
\n onFocusHandler()}\n onBlur={() => onBlurHandler()}\n onChange={changeHandler}\n minDate={minDate}\n maxDate={maxDate}\n dateFormatCalendar=\"MMM\"\n showYearDropdown\n scrollableYearDropdown\n dateFormat={dateFormats()}\n locale={getRegisteredLocale()}\n yearDropdownItemNumber={30}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n name={name}\n showMonthYearPicker={isMonthPicker}\n popperProps={{ strategy: 'fixed' }}\n />\n\n {isClearable && !readOnly && defaultDate !== null && (\n
\n changeHandler(null)} />\n
\n )}\n\n {!readOnly && (\n
\n \n
\n )}\n
\n )\n}\n","'use client'\n\nimport React, { InputHTMLAttributes, ReactNode } from 'react'\nimport useInputWrapper from '../../../hooks/useInputWrapper'\nimport { ChangeHandler } from 'react-hook-form'\nimport { Button, ButtonVariants, Spinner } from '../../atoms'\nimport { EMOJIS } from '@stopen-helpers/stopen-helpers'\n\nexport interface FormInputProps\n extends Omit, HTMLInputElement>, 'onChange'> {\n disabled?: boolean\n form?: string\n readOnly?: boolean\n loading?: boolean\n error?: boolean\n id?: string\n name?: string\n placeholder?: string\n type?: string\n prefix?: string\n suffix?: ReactNode\n onChange?: (value: string) => void\n onBlur?: ChangeHandler\n onClickSuffix?: () => void\n value?: string\n autoFocus?: boolean\n}\n\nexport const FormInput = ({\n disabled,\n error,\n prefix,\n suffix,\n form,\n onChange,\n onBlur,\n onClickSuffix,\n readOnly = false,\n type = 'text',\n value,\n autoFocus = false,\n loading = false,\n ...rest\n}: FormInputProps) => {\n const { onFocusHandler, onBlurHandler, classes } = useInputWrapper(false, disabled, error)\n\n return (\n
\n {prefix && {prefix}}\n\n {\n onBlur && onBlur(event)\n onBlurHandler()\n }}\n onChange={(event) => onChange && onChange(event.target.value?.replace(EMOJIS, ''))}\n value={value}\n type={type}\n autoFocus={autoFocus}\n aria-invalid={error}\n />\n {suffix && !onClickSuffix && {suffix}}\n\n {suffix && onClickSuffix && (\n \n )}\n {loading && }\n
\n )\n}\n","'use client'\n\nimport { AddIcon, RemoveIcon } from '@lib/components/icons'\nimport React, { ChangeEvent, HTMLAttributes, ReactNode } from 'react'\nimport { ChangeHandler } from 'react-hook-form'\nimport useInputWrapper from '../../../hooks/useInputWrapper'\nimport { Button, ButtonVariants } from '../../atoms'\n\nexport enum ControlsPosition {\n LEFT = 'left',\n SPLIT = 'split',\n RIGHT = 'right',\n}\n\nexport interface FormNumberInputProps extends Omit, 'onChange'> {\n disabled?: boolean\n form?: string\n readOnly?: boolean\n error?: boolean\n id?: string\n name?: string\n prefix?: string\n suffix?: string | ReactNode\n showControls?: boolean\n controlsPosition?: ControlsPosition\n min?: number\n max?: number\n step?: number\n onChange?: (value: number | string) => void\n onBlur?: ChangeHandler\n onClickSuffix?: () => void\n value?: number | string\n autoFocus?: boolean\n required?: boolean\n}\n\nexport const FormNumberInput = ({\n disabled,\n error,\n prefix,\n form,\n suffix,\n showControls,\n controlsPosition = ControlsPosition.RIGHT,\n min = 0,\n max,\n step = 1,\n onChange,\n onBlur,\n onClickSuffix,\n readOnly = false,\n value,\n autoFocus = false,\n ...rest\n}: FormNumberInputProps) => {\n const { onFocusHandler, onBlurHandler, classes } = useInputWrapper(false, disabled, error)\n\n const controlsAreOnLeft: boolean = controlsPosition === ControlsPosition.LEFT\n const controlsAreSplit: boolean = controlsPosition === ControlsPosition.SPLIT\n\n const increment = () => {\n if (typeof value !== 'number') {\n onChange?.(step)\n return\n }\n\n const newValue: number = (value ?? min) + step\n onChange?.(typeof max === 'number' ? Math.min(newValue, max) : newValue)\n }\n\n const decrement = () => {\n if (typeof value !== 'number') {\n onChange?.(min)\n return\n }\n\n const newValue: number = (value ?? min) - step\n onChange?.(Math.max(newValue, min))\n }\n\n const changeHandler = (event: ChangeEvent): void => {\n const inputValue: string = event.target.value\n const hasEmptyInput: boolean = inputValue === ''\n const value: string | number = hasEmptyInput ? inputValue : parseFloat(inputValue)\n onChange?.(value)\n }\n\n const getInputClasses = (): string => {\n let inputClasses = 'w-full px-3 py-2 density-lg:py-3 flex-1 outline-0 bg-transparent placeholder:italic'\n if (controlsAreOnLeft) inputClasses += 'text-right'\n if (controlsAreSplit) inputClasses += ' text-center'\n return inputClasses\n }\n\n return (\n
\n {prefix && {prefix}}\n\n {\n onBlur && onBlur(event)\n onBlurHandler()\n }}\n onChange={changeHandler}\n value={value}\n min={min}\n max={max}\n step={step}\n type=\"number\"\n autoFocus={autoFocus}\n formNoValidate\n aria-invalid={error}\n />\n\n {suffix && !onClickSuffix && {suffix}}\n\n {suffix && onClickSuffix && (\n \n )}\n\n {showControls && (\n <>\n decrement()}\n icon={}\n />\n increment()}\n icon={}\n />\n \n )}\n
\n )\n}\n","'use client'\nimport React, { useState } from 'react'\n\nimport { ChangeHandler } from 'react-hook-form'\n\nexport interface FormRadioFieldProps extends React.HTMLAttributes {\n label?: string\n id?: string\n name?: string\n value?: string | number\n checked?: boolean\n disabled?: boolean\n readOnly?: boolean\n onChange?: ChangeHandler | ((value?: unknown) => void)\n onBlur?: ChangeHandler\n boxed?: boolean\n}\n\nexport const FormRadioField = React.forwardRef(\n ({ label, id, name, value, checked, disabled, readOnly, onChange, onBlur, boxed, ...rest }, ref) => {\n const [checkedValue, setCheckedValue] = useState(checked)\n\n const onChangeHandler = () => {\n if (!readOnly && !disabled) {\n setCheckedValue(!checkedValue)\n }\n }\n\n const labelClasses = `\n ${boxed ? 'radio--boxed' : ''}\n ${disabled ? 'radio--disabled' : ''}\n ${readOnly ? 'radio--readonly' : ''}\n `\n\n return (\n \n )\n },\n)\n","'use client'\n\nimport React, { useEffect, useRef, useState } from 'react'\nimport useInputWrapper from '../../../hooks/useInputWrapper'\nimport { ChangeHandler } from 'react-hook-form'\nimport {\n hasFourNumberCharacters,\n isCharacterNumberOrColon,\n isNumberOrLetterKey,\n} from '@lib/components/FormElements/FormTimeInput/helpers/TimeInputHelpers'\n\nexport interface FormTimeInputProps extends Omit, 'onChange'> {\n disabled?: boolean\n readOnly?: boolean\n error?: boolean\n onChange: (value: string) => void\n onBlur?: ChangeHandler\n value?: string\n autoFocus?: boolean\n}\n\nexport const FormTimeInput = ({\n disabled = false,\n error = false,\n readOnly = false,\n value = '',\n onChange,\n onBlur,\n autoFocus = false,\n ...rest\n}: FormTimeInputProps) => {\n const { onFocusHandler, onBlurHandler, classes } = useInputWrapper(false, disabled, error)\n const [time, setTime] = useState('')\n const inputRef = useRef(null)\n\n const changeHandler = (value = '') => {\n setTime(formatInputToValidTime(value))\n onChange(formatInputToValidTime(value))\n }\n\n /**\n * Prevents entering of unwanted characters in the time input\n */\n const handleKeyPress = (event: React.KeyboardEvent) => {\n const keyValue = event.key\n\n if (isNumberOrLetterKey(keyValue) && (!isCharacterNumberOrColon(keyValue) || hasFourNumberCharacters(time))) {\n event.preventDefault()\n }\n }\n\n /**\n * Ensures that upon focusing in the time input field the current input is selected\n */\n const handleFocus = () => {\n if (inputRef.current) {\n inputRef.current.select()\n }\n onFocusHandler()\n }\n\n const formatInputToValidTime = (input: string): string => {\n // Extract the valid parts for hours and minutes\n let hours = Math.min(parseInt(input.substring(0, 2), 10), 23)\n let minutes = isNaN(Number(input[2]))\n ? Math.min(parseInt(input.substring(3, 5), 10), 59)\n : Math.min(parseInt(input.substring(2, 4), 10), 59)\n\n if (isNaN(hours)) hours = 0\n if (isNaN(minutes)) minutes = 0\n\n // Ensure hours and minutes are within valid ranges\n const validHours: string = hours.toString().padStart(2, '0')\n const validMinutes: string = minutes.toString().padStart(2, '0')\n\n // Return the formatted valid time\n return `${validHours}:${validMinutes}`\n }\n\n useEffect(() => {\n if (value !== time) setTime(value ?? '')\n }, [value])\n\n return (\n
\n {\n changeHandler(event.target?.value)\n onBlurHandler()\n }}\n onChange={(event) => setTime(event.target.value)}\n onKeyDown={handleKeyPress}\n placeholder=\"hh:mm\"\n autoFocus={autoFocus}\n aria-invalid={error}\n />\n
\n )\n}\n","'use client'\nimport React from 'react'\n\nexport interface FormSectionProps extends React.HTMLAttributes {\n children: React.ReactNode\n}\n\nexport const FormSection = ({ children, ...props }: FormSectionProps) => {\n return (\n
\n {children}\n
\n )\n}\n","'use client'\nimport React from 'react'\nimport {\n Filter,\n UpdateFilterValueModel,\n FilterId,\n FilterOperator,\n FilterProviderModel,\n FilterValue,\n} from '@lib/types/Filters'\nimport { createContext, ReactNode, useContext, useEffect, useState } from 'react'\n\nexport interface FilterProviderProps {\n initialFilters?: Filter[]\n onFiltersUpdate?: (currentActiveFilters: Filter[]) => void\n children: ReactNode\n}\n\nexport const FilterContext = createContext({\n isInitialized: false,\n filters: [],\n hasFiltersWithValue: false,\n hasClearableFilters: false,\n updateFilterValue: () => undefined,\n isExpanded: false,\n getFilterId: () => '',\n getFilterValue: () => undefined,\n hasFilterForKey: () => false,\n toggleFilters: () => undefined,\n clearFilters: () => undefined,\n registerFilter: () => undefined,\n getFilterById: () => undefined,\n})\n\n/** @deprecated use useContext(FilterContext) */\nexport const useFilterContext = (): FilterProviderModel => {\n return useContext(FilterContext)\n}\n\nexport const FilterProvider = ({ onFiltersUpdate, children, initialFilters }: FilterProviderProps) => {\n const [filters, setFilters] = useState(initialFilters || [])\n const [hasClearableFilters, setHasClearableFilters] = useState(false)\n const [hasFiltersWithValue, setHasFiltersWithValue] = useState(false)\n const [isExpanded, setIsExpanded] = useState(false)\n\n const updateFilterValue: UpdateFilterValueModel = ({ filter, newValue }): void => {\n const matchingFilter = filters.find((stateFilter) => stateFilter.id === filter.id)\n if (!matchingFilter) return\n if (matchingFilter.value === newValue) return\n\n setFilters((stateFilters) => {\n return [\n ...stateFilters.filter((stateFilter) => stateFilter.id !== matchingFilter.id),\n { ...matchingFilter, value: newValue },\n ]\n })\n }\n\n const toggleFilters = (): void => {\n setIsExpanded((expanded) => !expanded)\n }\n\n const clearFilters = (): void => {\n setFilters((stateFilters) => [\n ...stateFilters.map((filter) => (filter.nonClearable ? filter : { ...filter, value: undefined })),\n ])\n }\n\n const getFilterId = (key: string, operator: FilterOperator): string => {\n return `${key}__${operator}`\n }\n\n const getFilterById = (id: FilterId): Filter | undefined => {\n return filters.find((filter) => filter.id === id)\n }\n\n const getFilterValue = (id: FilterId): FilterValue | undefined => {\n return filters.find((filter) => filter.id === id)?.value\n }\n\n const hasFilterForKey = (key: string): boolean => {\n return filters.some((filter) => filter.key === key && !!filter.value)\n }\n\n const registerFilter = (filter: Filter) => {\n setFilters((stateFilters) => {\n if (stateFilters.find((stateFilter) => stateFilter.id === filter.id)) {\n return stateFilters\n }\n return [...stateFilters, filter]\n })\n }\n\n useEffect(() => {\n setHasClearableFilters(filters.filter((filter) => !filter.nonClearable && !!filter.value).length > 0)\n setHasFiltersWithValue(filters.filter((filter) => !!filter.value).length > 0)\n if (onFiltersUpdate) {\n onFiltersUpdate(filters.filter((filter) => !!filter.value))\n }\n }, [filters])\n\n const FilterProviderData: FilterProviderModel = {\n isInitialized: true,\n filters,\n hasFiltersWithValue,\n hasClearableFilters,\n updateFilterValue,\n isExpanded,\n getFilterId,\n getFilterValue,\n hasFilterForKey,\n toggleFilters,\n clearFilters,\n registerFilter,\n getFilterById,\n }\n\n return {children}\n}\n","'use client'\nimport {\n LayoutBottomPaneState,\n LayoutSidebarState,\n LayoutState,\n LayoutTopPaneState,\n} from '@lib/components/organisms/Layout/Types/layoutTypes'\nimport React, { Dispatch, ReactNode, SetStateAction, useContext, useState } from 'react'\nimport { ReactElement, createContext } from 'react'\n\nexport interface LayoutContextProps {\n topPaneState: LayoutTopPaneState\n sidebarState: LayoutSidebarState\n bottomPaneState: LayoutBottomPaneState\n layoutState: LayoutState\n setTopPaneState: (topPaneState: LayoutTopPaneState) => void\n setSidebarState: (sidebarState: LayoutSidebarState) => void\n setBottomPaneState: (bottomPaneState: LayoutBottomPaneState) => void\n setLayoutState: Dispatch>\n cleanUpContext: (layoutChildren?: ReactElement[]) => void\n}\n\nexport const LayoutContext = createContext({} as LayoutContextProps)\n\nexport const useLayoutContext = () => useContext(LayoutContext)\n\ninterface LayoutProviderProps {\n children: ReactNode\n}\n\n/**\n * @deprecated Prefer not to use the Layout provider. It is not compatible with RSC components.\n * @description\n * The LayoutDelegator provides children through the layoutPanes property in the layoutState.\n * The Layout listens to this context and combines it with it's own state, giving priority to the LayoutProvider.context\n *\n * The LayoutProvider also stores the state of the panes. For example:\n * 1. The LayoutSidebarPane is closed from the LayoutTopPane\n * 2. The LayoutSidebarPane listening to the provider context then closes\n * 3. The LayoutContentPane listening to the provider context, adjusts it's padding and spacing if necessary\n *\n * @TODO make Layout independent of LayoutProvider so it can be used without it when no LayoutDelegator is used.\n * @TODO Make sure that the LayoutPanes don't use the LayoutProvider. The best way is using a StaticStateOfLayoutPanes object.\n * @see {@link https://jira.hosted-tools.com/browse/STOPEN-5761}\n * */\nexport const LayoutProvider = ({ children }: LayoutProviderProps): JSX.Element => {\n const [topPaneState, setTopPaneState] = useState({})\n const [sidebarState, setSidebarState] = useState({})\n const [bottomPaneState, setBottomPaneState] = useState({})\n const [layoutState, setLayoutState] = useState({})\n\n /**\n * Checks whether the layout should have its different types of panes, and if not empties them.\n *\n * @param layoutChildren\n */\n const cleanUpContext = (layoutChildren?: ReactElement[]) => {\n let [hasSidebar, hasTopPane, hasBottomPane] = [false, false, false]\n\n if (!layoutChildren) {\n setLayoutState({})\n }\n\n layoutChildren?.forEach((child) => {\n if (child.props.paneType?.toLowerCase().includes('top-pane')) hasTopPane = true\n if (child.props.paneType?.toLowerCase().includes('sidebar')) hasSidebar = true\n if (child.props.paneType?.toLowerCase().includes('bottom-pane')) hasBottomPane = true\n })\n\n if (!hasTopPane) setTopPaneState({})\n if (!hasSidebar) setSidebarState({})\n if (!hasBottomPane) setBottomPaneState({})\n }\n\n const value: LayoutContextProps = {\n topPaneState,\n sidebarState,\n bottomPaneState,\n layoutState,\n setTopPaneState,\n setSidebarState,\n setBottomPaneState,\n setLayoutState,\n cleanUpContext,\n }\n\n return {children}\n}\n","'use client'\n\nimport React, { createContext, ReactNode, useContext, useMemo, useState } from 'react'\nimport { generateRandomKey } from '@stopen-helpers/stopen-helpers'\nimport { NotificationModel, NotificationsNotifyOptions, NotificationVariant } from '@lib/types'\n\nexport type NotificationProviderValue = {\n remove: (id: string) => void\n success: (options: NotificationsNotifyOptions) => void\n warning: (options: NotificationsNotifyOptions) => void\n error: (options: NotificationsNotifyOptions) => void\n info: (options: NotificationsNotifyOptions) => void\n notifications: NotificationModel[]\n}\n\nexport const NotificationContext = createContext({\n remove: () => null,\n success: () => null,\n warning: () => null,\n error: () => null,\n info: () => null,\n notifications: [],\n})\n\n/** @deprecated use useContext(NotificationContext) */\nexport const useNotification = (): NotificationProviderValue => {\n return useContext(NotificationContext)\n}\n\ninterface NotificationProviderProps {\n children: ReactNode\n}\n\n/**\n * This provider is responsible for receiving and showing fixed notifications.\n */\nexport const NotificationProvider = ({ children }: NotificationProviderProps) => {\n const [notifications, setNotifications] = useState([])\n\n const notify = (options: NotificationsNotifyOptions) => {\n const id = generateRandomKey()\n const newNotifications = [\n ...notifications,\n {\n id,\n ...options,\n variant: options.variant ?? NotificationVariant.INFO,\n },\n ]\n setNotifications(newNotifications)\n }\n\n const success = (options: NotificationsNotifyOptions) => {\n notify({ ...options, variant: NotificationVariant.SUCCESS })\n }\n\n const warning = (options: NotificationsNotifyOptions) => {\n notify({ ...options, variant: NotificationVariant.WARNING })\n }\n\n const error = (options: NotificationsNotifyOptions) => {\n notify({ ...options, variant: NotificationVariant.ERROR })\n }\n\n const info = (options: NotificationsNotifyOptions) => {\n notify({ ...options, variant: NotificationVariant.INFO })\n }\n\n const remove = (id: string) => {\n const newNotifications = notifications.filter((notification) => notification.id !== id)\n setNotifications(newNotifications)\n }\n\n const providerValue = useMemo(\n () => ({\n remove,\n success,\n warning,\n error,\n info,\n notifications,\n }),\n [notifications],\n )\n\n return {children}\n}\n","'use client'\n\nimport { getColumnWidths, getTableElement } from '@lib/providers/table/helpers/resize-helpers'\nimport { Column, TableHeaderVariants, TableVariants, TableSizes, ColumnInformation } from '@lib/types'\nimport React, { createContext, useContext, useEffect, useId, useState } from 'react'\n\nexport interface TableProviderModel {\n columns: Column[]\n variant: TableVariants\n size: TableSizes\n tableId?: string\n columnWidths?: ColumnInformation[]\n isCollapsible: boolean\n isEditable: boolean\n isInitialized: boolean\n headerVariant?: TableHeaderVariants\n isInline?: boolean\n isStretched?: boolean\n isScrollable: boolean\n isNested?: boolean\n sortHandler?: ((sortBy: string) => void) | undefined\n hideHeader?: boolean\n hasBorder?: boolean\n hasBackground?: boolean\n isLoading?: boolean\n}\n\nexport const TableContext = createContext({\n columns: [],\n variant: TableVariants.STRETCHED,\n headerVariant: TableHeaderVariants.REGULAR,\n size: TableSizes.MEDIUM,\n isCollapsible: false,\n isEditable: false,\n isInitialized: false,\n isScrollable: false,\n hideHeader: false,\n})\n\n/** @deprecated use useContext(TableContext) */\nexport const useTableContext = () => {\n return useContext(TableContext)\n}\n\ninterface TableProviderProps\n extends Pick<\n TableProviderModel,\n | 'columns'\n | 'variant'\n | 'isCollapsible'\n | 'isEditable'\n | 'sortHandler'\n | 'hideHeader'\n | 'hasBorder'\n | 'hasBackground'\n | 'headerVariant'\n | 'isLoading'\n > {\n size: TableSizes | undefined\n children: React.ReactNode\n}\n\nexport const TableProvider = ({\n columns = [],\n variant,\n size,\n isCollapsible = false,\n isEditable = false,\n sortHandler,\n hideHeader,\n hasBorder,\n hasBackground,\n headerVariant,\n isLoading,\n children,\n}: TableProviderProps) => {\n const tableId = useId()\n const escapedId = CSS.escape(tableId)\n const parentProvider = useContext(TableContext)\n const [columnWidths, setColumnWidths] = useState()\n const hasStickyColumns = () => columns.some((col) => col.sticky)\n const resizeObserver = hasStickyColumns()\n ? new ResizeObserver(() => setColumnWidths(getColumnWidths(escapedId)))\n : null\n\n const getAllColumns = (): Column[] => {\n const allColumns = columns\n if (isCollapsible && !allColumns.find((column) => column.isCollapseColumn)) {\n allColumns.push({\n title: '',\n hasNoPadding: true,\n isActionColumn: true,\n isCollapseColumn: true,\n sticky: allColumns.at(-1)?.sticky === 'right' ? 'right' : undefined,\n })\n }\n return allColumns.map((column, index) => ({ id: index, ...column }))\n }\n\n /**\n * Set up resize observer for every table header cell\n * Their width can change individually from getting fresh data, and we want to recalculate all their positions based on those widths.\n */\n const setUpEventListeners = () => {\n const table = getTableElement(escapedId)\n if (!table) return\n\n table\n .querySelectorAll('.table-header-cell--sticky-right')\n .forEach((headerCellElement) => resizeObserver?.observe(headerCellElement))\n }\n\n useEffect(() => {\n if (hasStickyColumns()) setUpEventListeners()\n return () => resizeObserver?.disconnect()\n }, [])\n\n const isNested: boolean = parentProvider?.isInitialized\n const isStretched: boolean = variant === TableVariants.STRETCHED && !isNested\n const defaultSize: TableSizes = isStretched ? TableSizes.LARGE : TableSizes.MEDIUM\n\n const providerValue: TableProviderModel = {\n columns: getAllColumns(),\n variant,\n size: size ?? defaultSize,\n isCollapsible,\n isEditable,\n isInline: variant === TableVariants.INLINE,\n isStretched,\n isNested,\n hideHeader,\n hasBorder,\n hasBackground,\n isScrollable: isStretched,\n isInitialized: true,\n headerVariant,\n ...(sortHandler ? { sortHandler } : {}),\n isLoading,\n columnWidths,\n tableId: escapedId,\n }\n\n return {children}\n}\n","'use client'\nimport { ToastOption, ToastVariant } from '@lib/types'\nimport React, { createContext, ReactNode, useContext, useEffect, useId, useState } from 'react'\n\nexport interface ToastProviderValue {\n items: ToastItem[]\n register: (id: string) => void\n open: (options: ToastOption) => void\n success: (id: string, message?: string) => void\n fail: (id: string, message?: string) => void\n hide: (id: string) => void\n}\nexport const AUTO_DISMISS_TIME = 8000\n\nexport interface ToastItem {\n show: boolean\n content?: ToastOption\n}\n\nexport const ToastContext = createContext({\n items: [],\n register: () => {},\n hide: () => {},\n success: () => {},\n fail: () => {},\n open: () => {},\n})\n\nexport function useToast(id?: string): ToastProviderValue {\n const toast = useContext(ToastContext)\n const randomId = useId()\n const idToUse = id ?? randomId\n\n if (idToUse) {\n useEffect(() => {\n toast.register(idToUse) // register toast if id is supplied\n }, [])\n }\n\n return toast\n}\n\n/** This provider contains all the registered toasts, either active or inactive */\nexport const ToastProvider = ({\n children,\n autoDismissTime = AUTO_DISMISS_TIME,\n}: {\n children: ReactNode\n autoDismissTime?: number\n}) => {\n const [toasts, setToasts] = useState([])\n\n const getActiveToast = (items?: ToastItem[]): ToastOption | null =>\n (items || toasts)?.find((toast) => toast.show)?.content ?? null\n const isRegistered = (id: string, items?: ToastItem[]): boolean =>\n !!(items || toasts)?.find((toast) => toast.content?.id === id)\n const shouldAutoDismiss = (toast: ToastOption): boolean => !toast.actionText && !toast.onAction\n const delay = async (timeout: number): Promise => new Promise((res) => setTimeout(res, timeout))\n\n /** Adds the toast to the list of toasts */\n const register = (id: string): void => {\n if (isRegistered(id)) return\n const newItem: ToastItem = { content: { id, message: '' }, show: false }\n\n setToasts((current: ToastItem[]) => {\n return isRegistered(id, current) ? current : [...current, newItem]\n })\n }\n\n /** Activates the selected toast */\n const open = (options: ToastOption): void => {\n const openToast = (): void => {\n setToasts((current: ToastItem[]) => {\n if (!current || current.length === 0) return []\n\n const selectedItem = current.find((toast) => toast.content?.id === options.id)\n if (!selectedItem || selectedItem.show) return current\n selectedItem.content = options\n selectedItem.show = true\n\n const newCurrent = current.filter((item) => item.content?.id !== options.id)\n return [...newCurrent, selectedItem]\n })\n }\n\n const activeToastContent: ToastOption | null = getActiveToast(toasts)\n const toastIsAlreadyOpen: boolean = activeToastContent?.id === options.id\n if (toastIsAlreadyOpen) return\n\n if (activeToastContent) {\n hide(activeToastContent.id)\n setTimeout(() => {\n openToast()\n }, 250)\n } else {\n openToast()\n }\n\n if (shouldAutoDismiss(options) && options.variant !== ToastVariant.LOADING)\n delay(autoDismissTime).then(() => hide(options.id))\n }\n\n const success = (id: string, message?: string): void => updateToast(id, ToastVariant.SUCCESS, message)\n const fail = (id: string, message?: string): void => updateToast(id, ToastVariant.ERROR, message)\n\n /** Updates to toast to success or error variant, and if indicated its message */\n const updateToast = (id: string, variant: ToastVariant, message?: string): void => {\n setToasts((current: ToastItem[]) => {\n const activeToastContent: ToastOption | null = getActiveToast(current)\n const hasSameId: boolean = activeToastContent?.id === id\n if (!activeToastContent || !hasSameId) return current\n\n const content: ToastOption = {\n ...activeToastContent,\n variant,\n ...(message && { message }),\n }\n\n let newList = [...current]\n let toast = newList.find((toast) => toast.show)\n if (toast) toast.content = content\n\n if (shouldAutoDismiss(activeToastContent) && variant !== ToastVariant.LOADING)\n delay(autoDismissTime).then(() => hide(id))\n return newList\n })\n }\n\n /** Deactivates the active toast (but keeps it in the toasts array) */\n const hide = (id: string): void => {\n setToasts((current: ToastItem[]) => {\n if (getActiveToast(current)?.id !== id) return current\n const newArray = [...current]\n newArray.forEach((toast) => (toast.show = false))\n return newArray\n })\n }\n\n const providerValue: ToastProviderValue = {\n items: toasts,\n register,\n open,\n success,\n fail,\n hide,\n }\n\n return {children}\n}\n","//Copied from SignalRNotification.cs\n//When you add a value be aware to also include this in: getDefaultMailBoxesValue\nexport enum SignalRNotificationKey {\n None = 0,\n TerminateContractsByTemplate = 1,\n TerminateContractsByTemplateError = 2,\n FileUploaded = 3,\n ResendActivationFailed = 4,\n ResendActivationSuccess = 5,\n FileDeleted = 6,\n /** Gets triggered on (pre)cutoff */\n ManualCutOffSuccess = 7,\n /** Gets triggered on (pre)cutoff */\n ManualCutOffFailed = 8,\n CutOffStarted = 9,\n CutOffCompleted = 10,\n CreateOrderSucceeded = 11,\n CreateOrderFailed = 12,\n ServicePointDeactivationErrorOpenOrders = 13,\n AssignContractToCompanyFailed = 14,\n PricingAgreementsAddedFromFile = 15,\n ImportStatement = 16,\n ResolvingAfasErrorsFinished = 17,\n ReimbursementsGenerated = 18,\n ImportStatementError = 19,\n EpacAdvancesImported = 20,\n StatementInvoiceCreated = 21,\n}\n","import { SignalRNotificationKey } from '@lib/providers/signal-r-provider/SignalRNotificationKey'\nimport { SignalRMessageProps } from '@lib/providers/signal-r-provider/signal-r-provider'\n\nexport const getDefaultMailBoxesValue = (): Record => {\n return {\n [SignalRNotificationKey.None]: [],\n [SignalRNotificationKey.TerminateContractsByTemplate]: [],\n [SignalRNotificationKey.TerminateContractsByTemplateError]: [],\n [SignalRNotificationKey.FileUploaded]: [],\n [SignalRNotificationKey.ResendActivationSuccess]: [],\n [SignalRNotificationKey.ResendActivationFailed]: [],\n [SignalRNotificationKey.FileDeleted]: [],\n [SignalRNotificationKey.ManualCutOffSuccess]: [],\n [SignalRNotificationKey.ManualCutOffFailed]: [],\n [SignalRNotificationKey.CutOffStarted]: [],\n [SignalRNotificationKey.CutOffCompleted]: [],\n [SignalRNotificationKey.CreateOrderSucceeded]: [],\n [SignalRNotificationKey.CreateOrderFailed]: [],\n [SignalRNotificationKey.ServicePointDeactivationErrorOpenOrders]: [],\n [SignalRNotificationKey.AssignContractToCompanyFailed]: [],\n [SignalRNotificationKey.PricingAgreementsAddedFromFile]: [],\n [SignalRNotificationKey.ImportStatement]: [],\n [SignalRNotificationKey.ResolvingAfasErrorsFinished]: [],\n [SignalRNotificationKey.ReimbursementsGenerated]: [],\n [SignalRNotificationKey.ImportStatementError]: [],\n [SignalRNotificationKey.EpacAdvancesImported]: [],\n [SignalRNotificationKey.StatementInvoiceCreated]: [],\n }\n}\n","export enum SignalRNotificationTypes {\n INFO = 0,\n SUCCESS = 1,\n WARNING = 2,\n ERROR = 3,\n}\n\nexport enum SignalRTypes {\n RESPONSE = 0,\n MESSAGECENTER = 1,\n STATIC = 2,\n}\n","'use client'\n\nimport React, { createContext, ReactNode, useContext, useEffect, useMemo, useState } from 'react'\nimport { HttpTransportType, HubConnection, HubConnectionBuilder, HubConnectionState } from '@microsoft/signalr'\nimport { DictionaryContext, NotificationContext } from '@lib/providers'\nimport { SignalRNotificationKey } from '@lib/providers/signal-r-provider/SignalRNotificationKey'\nimport { SignalRNotificationTypes, SignalRTypes } from '@lib/providers/signal-r-provider/signalRConstants'\n\nconst MESSAGE_KEYS = { SIGNAL_R: 'STO.ERROR.SIGNAL_R' }\n\nexport type SignalRMessageProps = {\n variant: SignalRNotificationTypes\n keyType: SignalRNotificationKey\n message: string\n title: string\n objectIdentifier?: string\n}\n\ninterface SignalRResponseModel {\n data: SignalRData\n}\n\ninterface SignalRData {\n /** This is the \"variant\" of the notification, i.e. success or warning */\n infoType: SignalRNotificationTypes\n keyType: SignalRNotificationKey\n message: string\n title: string\n objectIdentifier?: string\n type: SignalRTypes\n}\n\n/**\n * @property signalRNotifications - All current notifications\n * @property removeNotifications - Function to remove a number of notifications\n */\nexport type SignalRProviderValue = {\n signalRNotifications: SignalRMessageProps[]\n removeNotifications: (amount: number) => void\n}\n\nexport const SignalRContext = createContext({\n signalRNotifications: [],\n removeNotifications: (amount: number) => {},\n})\n\n/**\n * This provider is responsible for listening to Signal R notifications via websocket and storing the notifications.\n * Is not ready to be used in Reporting or any applications that use the same Next version or above.\n */\nexport const SignalRProvider = ({\n children,\n signalRClientURL,\n onConnect,\n onMessageReceived,\n onError,\n}: {\n children: ReactNode\n signalRClientURL: string | undefined\n onConnect?: () => void\n onMessageReceived?: (parsedMessage: SignalRResponseModel) => void\n onError?: (error: any) => void\n}): JSX.Element => {\n const notifications = useContext(NotificationContext)\n const [signalRNotifications, setSignalRNotifications] = useState([])\n const [connection, setConnection] = useState(null)\n const { getText } = useContext(DictionaryContext)\n\n useEffect(() => {\n if (signalRClientURL) {\n const signalRClientConnection = new HubConnectionBuilder()\n .withUrl(signalRClientURL, {\n withCredentials: true,\n skipNegotiation: false,\n transport: HttpTransportType.WebSockets,\n })\n .withAutomaticReconnect()\n .build()\n setConnection(signalRClientConnection)\n }\n }, [signalRClientURL])\n\n useEffect(() => {\n if (!!connection && ![HubConnectionState.Connected, HubConnectionState.Connecting].includes(connection.state)) {\n connection\n .start()\n .then(() => {\n if (onConnect) onConnect()\n connection.on('SendAsync', (_, message: string) => {\n if (!!!message) return\n const parsedMessage = JSON.parse(message) as SignalRResponseModel\n if (onMessageReceived) onMessageReceived(parsedMessage)\n\n const { data } = parsedMessage\n if (!!data) {\n setSignalRNotifications((currentNotifications) => [\n ...currentNotifications,\n { ...data, variant: data.infoType },\n ])\n setNotification(data)\n }\n })\n })\n .catch((error) => {\n if (onError) onError(error)\n if (!signalRNotifications.some((notification) => notification.title === 'SignalR Error'))\n setSignalRNotifications([\n ...signalRNotifications,\n {\n variant: SignalRNotificationTypes.ERROR,\n keyType: SignalRNotificationKey.None,\n title: 'SignalR Error',\n message: getText(MESSAGE_KEYS.SIGNAL_R),\n },\n ])\n })\n }\n }, [connection])\n\n const removeNotifications = (amount: number) => {\n if (signalRNotifications.length >= amount) {\n let newList = [...signalRNotifications]\n newList.splice(0, amount)\n setSignalRNotifications(newList)\n } else {\n setSignalRNotifications([])\n }\n }\n\n const setNotification = (signalRData: SignalRData) => {\n // When the signalRData is a response, we don't want to show a notification\n if (signalRData.type === SignalRTypes.RESPONSE) return\n\n switch (signalRData.infoType) {\n case SignalRNotificationTypes.SUCCESS:\n notifications.success({ title: signalRData.title, message: signalRData.message })\n break\n case SignalRNotificationTypes.WARNING:\n notifications.warning({ title: signalRData.title, message: signalRData.message })\n break\n case SignalRNotificationTypes.ERROR:\n notifications.error({ title: signalRData.title, message: signalRData.message })\n break\n case SignalRNotificationTypes.INFO:\n default:\n notifications.info({ title: signalRData.title, message: signalRData.message })\n }\n }\n\n const providerValue = useMemo(\n () => ({\n signalRNotifications,\n removeNotifications,\n }),\n [signalRNotifications],\n )\n\n return {children}\n}\n","'use client'\n\nimport { getDefaultMailBoxesValue } from '@lib/providers/mail-box-provider/helpers/getDefaultValue'\nimport { SignalRNotificationKey } from '@lib/providers/signal-r-provider/SignalRNotificationKey'\nimport { SignalRContext, SignalRMessageProps } from '@lib/providers/signal-r-provider/signal-r-provider'\nimport React, { createContext, ReactNode, useContext, useEffect, useMemo, useState } from 'react'\n\n/**\n * @property mailBoxes - Notifications organised by SignalRNotificationKey\n * @property removeItem - Function to remove a notification from a specific mail box\n */\nexport type MailBoxProviderValue = {\n mailBoxes: Record\n removeItem: (index: number, mailKey: SignalRNotificationKey) => void\n clearMailbox: (mailKey: SignalRNotificationKey) => void\n}\n\nexport const MailBoxContext = createContext({\n mailBoxes: getDefaultMailBoxesValue(),\n removeItem: (index: number, mailKey: SignalRNotificationKey) => {},\n clearMailbox: (mailKey: SignalRNotificationKey) => {},\n})\n\n/**\n * This provider is responsible for\n * * listening the notifications in signal-r-provider\n * * sorting the notifications into mail boxes\n * * emptying the mailbox on each new animation frame\n */\nexport const MailBoxProvider = ({ children }: { children: ReactNode }) => {\n const { signalRNotifications, removeNotifications } = useContext(SignalRContext)\n const [mailBoxes, setMailBoxes] = useState>(\n getDefaultMailBoxesValue(),\n )\n\n useEffect(() => {\n if (!!signalRNotifications.length) {\n sortNewNotifications(signalRNotifications)\n removeNotifications(signalRNotifications.length)\n }\n }, [signalRNotifications])\n\n const sortNewNotifications = (signalRNotifications: SignalRMessageProps[]) => {\n const newMailBox = getDefaultMailBoxesValue()\n\n signalRNotifications.forEach((mailItem) => {\n if (mailItem.keyType in newMailBox) {\n newMailBox[mailItem.keyType].push(mailItem)\n } else {\n newMailBox[SignalRNotificationKey.None] = [mailItem]\n }\n })\n\n /**\n * old comment: Empty the mail boxes on every new animation frame.\n * old version of code:\n * requestAnimationFrame(() => setMailBoxes(getDefaultMailBoxesValue()))\n * @todo\n * TODO: remove this code block, when the hypothetical in the comment below has proven to be rare.\n */\n\n /**\n * Wait an animation frame so callback functions inside useEffects can act on the new\n * messages. Then on the following animation frame, clear all mail boxes\n *\n * hypothetically, if messages are received within the ~16 miliseconds of the first animation frame,\n * they wil be deleted without triggering an action. This would be rare.\n *\n * The same would happen if we don't wait this extra animation frame and that has proven to be more\n * common. In this case, the callback function of the requestAnimationFrame, would compete\n * with the callback function of useEffects hooks\n * */\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setMailBoxes(getDefaultMailBoxesValue()))\n })\n\n setMailBoxes(newMailBox)\n }\n\n /**\n * Remove mail from the post office.\n *\n * @param index The index to remove from the mailbox.\n * @param mailKey The mailbox to remove the index from.\n */\n const removeItem = (index: number, mailKey: SignalRNotificationKey) => {\n if (!(mailKey in mailBoxes)) return\n\n const mailBox = [...mailBoxes[mailKey]]\n\n if (mailBox.length >= index) {\n mailBox.splice(index)\n\n setMailBoxes({ ...mailBoxes, [mailKey]: mailBox })\n }\n }\n\n /**\n * Clear mailbox by mailbox key\n *\n * @param mailKey The mailbox to clear\n */\n const clearMailbox = (mailKey: SignalRNotificationKey) => {\n if (!(mailKey in mailBoxes)) return\n\n setMailBoxes({ ...mailBoxes, [mailKey]: [] })\n }\n\n const providerValue = useMemo(\n () => ({\n mailBoxes,\n removeItem,\n clearMailbox,\n }),\n [mailBoxes, signalRNotifications],\n )\n\n return {children}\n}\n","'use client'\n\nimport { MailBoxContext } from '@lib/providers/mail-box-provider/mail-box-provider'\nimport { SignalRNotificationKey } from '@lib/providers/signal-r-provider/SignalRNotificationKey'\nimport { SignalRMessageProps } from '@lib/providers/signal-r-provider/signal-r-provider'\nimport { useContext, useEffect } from 'react'\n\n/**\n * @description - This hook can be used to listen to one mail box in the mail provider.\n *\n * @param mailBoxKey - The mailboxe you wish to collect mail for\n * @param callback - The function that gets called with each new notification\n */\nexport const useMailListener = (\n mailBoxKey: SignalRNotificationKey,\n callback: (notification: SignalRMessageProps) => void,\n) => {\n const { mailBoxes } = useContext(MailBoxContext)\n\n useEffect(() => {\n if (mailBoxKey in mailBoxes && !!mailBoxes[mailBoxKey]?.length) {\n mailBoxes[mailBoxKey].forEach(callback)\n }\n }, [mailBoxes[mailBoxKey]])\n}\n","'use client'\n\nimport { MailBoxContext } from '@lib/providers/mail-box-provider/mail-box-provider'\nimport { SignalRNotificationKey } from '@lib/providers/signal-r-provider/SignalRNotificationKey'\nimport { SignalRMessageProps } from '@lib/providers/signal-r-provider/signal-r-provider'\nimport { useContext, useEffect } from 'react'\n\n/**\n * @description - This hook can be used to listen to multiple mail boxes in the mail provider.\n *\n * @param mailBoxKeys - The mailboxes you wish to collect mail for\n * @param callback - The function that gets called with each new notification\n */\nexport const useMailListenerMultiple = (\n mailBoxKeys: SignalRNotificationKey[],\n callback: (notification: SignalRMessageProps) => void,\n) => {\n const { mailBoxes } = useContext(MailBoxContext)\n\n useEffect(() => {\n let relevantMail = new Array()\n mailBoxKeys.forEach((key) => {\n if (key in mailBoxes) relevantMail = [...relevantMail, ...mailBoxes[key]]\n })\n\n relevantMail.forEach(callback)\n }, [mailBoxes])\n}\n","export * from './mail-box-provider'\nexport * from './hooks/useMailListener'\nexport * from './hooks/useMailListenerMultiple'\n","export enum SortingDirection {\n NONE = 'none',\n ASCENDING = 'asc',\n DESCENDING = 'desc',\n}\n","export * from './sortingConstants'\n","import { SortingDirection } from '@lib/constants'\nimport { Sorting, UseSortingModel } from '@lib/types/Sorting'\nimport { useState } from 'react'\n\nexport type UseSortingProps = {\n initialSorting: Sorting\n}\n\nexport const useSorting = ({ initialSorting }: UseSortingProps): UseSortingModel => {\n const [sorting, setSorting] = useState(initialSorting)\n\n const sortHandler = (sortBy: string): void => {\n setSorting((current) => {\n if (current?.sortBy === sortBy) {\n return {\n sortBy,\n direction:\n current.direction === SortingDirection.ASCENDING\n ? SortingDirection.DESCENDING\n : SortingDirection.ASCENDING,\n }\n }\n return { sortBy, direction: SortingDirection.ASCENDING }\n })\n }\n\n return {\n sorting,\n sortHandler,\n }\n}\n","'use client'\n\nimport { useSorting, UseSortingProps } from '@lib/hooks/UseSorting'\nimport { UseSortingModel } from '@lib/types/Sorting'\nimport React, { useMemo, createContext } from 'react'\n\nexport interface SortingProviderProps extends UseSortingProps, React.HTMLAttributes {}\nexport interface SortingProviderModel extends UseSortingModel {}\n\nexport const SortingContext = createContext({} as SortingProviderModel)\n\nexport const SortingProvider = ({ initialSorting, children }: SortingProviderProps) => {\n const { sorting, sortHandler } = useSorting({ initialSorting })\n\n const SortingProviderData: SortingProviderModel = useMemo(\n () => ({\n sorting,\n sortHandler,\n }),\n [sorting],\n )\n\n return {children}\n}\n","'use client'\n\nimport { PaginationProviderProps } from '@lib/types/Pagination'\nimport React, { useMemo, createContext, useContext, useState, useEffect } from 'react'\nimport { FilterContext } from './filter-provider'\nimport { SortingContext } from './SortingProvider'\nimport { PaginationParams, PaginationProviderModel } from '@lib/components'\n\nexport const PaginationContext = createContext({} as PaginationProviderModel)\n\nexport const PaginationProvider = ({\n children,\n offset = 0,\n limit = 25,\n total = 0,\n initialPage = 1,\n}: PaginationProviderProps) => {\n const filterContext = useContext(FilterContext)\n const sortingContext = useContext(SortingContext)\n\n const [params, setParams] = useState({ offset, limit })\n const [totalResults, setTotalResults] = useState(total)\n const [currentPage, setCurrentPage] = useState(initialPage)\n\n const paginateHandler = (offset: number, limit: number): void => {\n const sameConfig: boolean = params.offset === offset && params.limit === limit\n if (sameConfig) return\n setParams({ offset, limit })\n }\n\n const resetPagination = () => {\n paginateHandler(0, limit)\n setCurrentPage(1)\n }\n\n useEffect(() => {\n if (filterContext) resetPagination()\n }, [filterContext?.filters])\n\n useEffect(() => {\n if (sortingContext) resetPagination()\n }, [sortingContext?.sorting])\n\n const PaginationProviderData: PaginationProviderModel = useMemo(\n () => ({\n params,\n totalResults,\n setTotalResults,\n paginateHandler,\n initialPage,\n resetPagination,\n currentPage,\n setCurrentPage,\n }),\n [params, totalResults, initialPage, currentPage],\n )\n\n return {children}\n}\n","export * from './SignalRNotificationKey'\nexport * from './signal-r-provider'\nexport * from './signalRConstants'\n","export * from './component-translation-provider'\nexport * from './dictionary-provider'\nexport * from './filter-provider'\nexport * from './layout-provider'\nexport * from './notification-provider'\nexport * from './table/table-provider'\nexport * from './toast-provider'\nexport * from './mail-box-provider'\nexport * from './PaginationProvider'\nexport * from './signal-r-provider'\nexport * from './SortingProvider'\n","'use client'\n\nimport { Button, ButtonVariants } from '@lib/components/atoms/Button'\nimport { MESSAGE_KEYS } from '@lib/constants/messageKeys'\nimport { ComponentTranslationContext } from '@lib/providers'\nimport { DeleteIcon, EditIcon } from '@lib/components/icons'\nimport React, { ReactNode, useContext, useRef } from 'react'\n\ninterface FileInputProps extends Omit, 'onChange'> {\n onChange: (value: File | null) => void\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n name?: string\n disabled?: boolean\n /** Comma separated list of extensions that are accepted by the file input.\n * E.g.: \".jpg, .jpeg, .png,\"\n */\n acceptedExtensions?: string\n additionalButtons?: ReactNode\n}\n\nexport const FileInput = ({\n onChange,\n value,\n name,\n additionalButtons,\n disabled = false,\n acceptedExtensions = '.jpg, .jpeg, .png, .webp',\n ...props\n}: FileInputProps): JSX.Element => {\n const inputRef = useRef(null)\n const { getLabel } = useContext(ComponentTranslationContext)\n\n const handleFileSelect = () => {\n if (disabled) return\n inputRef.current?.click()\n }\n\n const clearFile = () => {\n if (disabled) return\n onChange(null)\n }\n\n return (\n
\n {!value && (\n handleFileSelect()}\n data-testid=\"add-button\"\n className=\"w-full\"\n key=\"add-button\"\n disabled={disabled}\n >\n {getLabel(MESSAGE_KEYS.ACTION_ADD)}\n \n )}\n {value && (\n
\n \n {value?.name}\n \n {!disabled && (\n <>\n }\n variant={ButtonVariants.QUIET}\n onClick={() => handleFileSelect()}\n data-testid=\"edit-button\"\n className=\"shrink-0\"\n key=\"edit-button\"\n />\n }\n variant={ButtonVariants.DANGER_QUIET}\n onClick={clearFile}\n data-testid=\"delete-button\"\n className=\"shrink-0\"\n key=\"delete-button\"\n />\n {additionalButtons}\n \n )}\n
\n )}\n onChange(e.target.files?.[0] ?? null)}\n ref={inputRef}\n name={name}\n accept={acceptedExtensions}\n />\n
\n )\n}\n","'use client'\nimport React from 'react'\nimport { ClearIcon } from '@lib/components/icons'\nimport { ClearIndicatorProps, GroupBase } from 'react-select'\nimport { SelectOption } from '@lib/types/SelectInput'\nimport { data_click_outside_safe } from '@lib/hooks/useOutsideClick'\n\nexport const ClearIndicatorReplacement = (\n props: ClearIndicatorProps>,\n) => {\n const {\n children,\n innerProps: { ref, ...restInnerProps },\n } = props\n return (\n \n \n {children}\n \n )\n}\n","'use client'\nimport React from 'react'\nimport { DropdownIcon } from '@lib/components/icons'\nimport { DropdownIndicatorProps } from 'react-select'\nimport { SelectOption } from '@lib/types/SelectInput'\n\nexport const DropdownIndicatorReplacement = (props: DropdownIndicatorProps) => {\n return (\n \n \n \n )\n}\n","'use client'\nimport React from 'react'\nimport { MultiValueProps } from 'react-select'\nimport { Tag } from '@lib/components/atoms'\nimport { SelectOption } from '@lib/types/SelectInput'\n\nexport const MultiValueComponent = (props: MultiValueProps): JSX.Element => (\n \n {props.data.label}\n \n)\n","'use client'\n\nimport React from 'react'\nimport { SingleValueProps } from 'react-select'\nimport { Tag } from '@lib/components/atoms'\nimport { SelectOption } from '@lib/types/SelectInput'\n\nexport const SingleValueTagComponent = ({ data }: SingleValueProps) => {\n return (\n \n
{data.label}
\n
\n )\n}\n\nexport const SingleValueMultiLineComponent = ({ data }: SingleValueProps) => {\n return (\n
\n {data.label}\n
\n )\n}\n","'use client'\nimport { CheckmarkSmallIcon } from '@lib/components/icons'\nimport React from 'react'\nimport { FormatOptionLabelMeta } from 'react-select/dist/declarations/src/Select'\nimport { TextTypes } from '../../../../types'\nimport { Text } from '../../../atoms/Text'\nimport { SelectOption } from '@lib/types/SelectInput'\n\nexport const MultiLineOption = (option: SelectOption, meta: FormatOptionLabelMeta): JSX.Element => {\n const hasFooter: boolean = option.footer !== undefined && option.footer !== null\n\n return (\n \n
\n {option.label}\n {hasFooter && (\n \n {option.footer}\n \n )}\n
\n {meta.selectValue.map((selectedOption: SelectOption) => selectedOption.value).includes(option.value) && (\n \n )}\n \n )\n}\n","export * from './ClearIndicatorReplacement'\nexport * from './DropdownIndicatorReplacement'\nexport * from './MultiValueComponent'\nexport * from './SingleValueComponent'\nexport * from './MultiLineOption'\n","'use client'\nimport { SelectOption } from '@lib/types/SelectInput'\nimport { CheckmarkSmallIcon } from '@lib/components/icons'\nimport React from 'react'\nimport { components, OptionProps } from 'react-select'\nimport { Text } from '@lib/components/atoms'\n\nexport const OptionReplacement = (props: OptionProps): JSX.Element => {\n const { value, label } = props.data\n\n return (\n //@ts-ignore\n \n \n {label}\n\n {props.isSelected && }\n \n \n )\n}\n","'use client'\nimport debounce from 'debounce-promise'\nimport React, { ReactNode, SyntheticEvent, useEffect, useState } from 'react'\nimport Select, { StylesConfig } from 'react-select'\nimport AsyncSelect from 'react-select/async'\nimport { SelectComponents } from 'react-select/dist/declarations/src/components'\nimport { FilterOptionOption } from 'react-select/dist/declarations/src/filters'\nimport { StateManagerProps } from 'react-select/dist/declarations/src/useStateManager'\nimport useInputWrapper from '@lib/hooks/useInputWrapper'\nimport { TextTypes } from '@lib/types'\nimport { Spinner, Text } from '@lib/components/atoms'\nimport {\n ClearIndicatorReplacement,\n DropdownIndicatorReplacement,\n MultiLineOption,\n MultiValueComponent,\n SingleValueMultiLineComponent,\n SingleValueTagComponent,\n} from './Components'\nimport { OptionReplacement } from './Components/OptionReplacement'\n\nimport { useId } from 'react'\nimport { SelectInputProps, SelectOption, GroupedSelectOption } from '@lib/types/SelectInput'\n\n/**\n * @deprecated\n */\nexport const SelectInput = ({\n options = [],\n asyncQuery,\n asyncOptions,\n isMulti = false,\n disabled = false,\n readOnly = false,\n isSearchable = false,\n showAsTag = false,\n showMultiLine = false,\n isAsync = false,\n isLoading,\n id,\n onChange,\n onBlur,\n value,\n defaultValue,\n defaultInputValue = undefined,\n noOptionsMessage = 'No results',\n isInline = false,\n className = '',\n placeholder,\n autoFocus = false,\n asyncMinimumCharacters = 3,\n isClearable = false,\n ...props\n}: SelectInputProps) => {\n const { onFocusHandler, onBlurHandler, classes } = useInputWrapper(false, disabled)\n const selectId = id ?? useId()\n\n const [showAsyncResults, setShowAsyncResults] = useState(false)\n\n const components: Partial> = {\n MultiValue: MultiValueComponent,\n DropdownIndicator: DropdownIndicatorReplacement,\n ClearIndicator: ClearIndicatorReplacement,\n ...(!showMultiLine && !showAsTag && { Option: OptionReplacement }),\n }\n\n if (showAsTag) components.SingleValue = SingleValueTagComponent\n if (showMultiLine) components.SingleValue = SingleValueMultiLineComponent\n\n const customStyles: StylesConfig = {\n valueContainer: (provided, _) => ({\n ...provided,\n ...(showMultiLine && { display: 'flex', flexWrap: 'nowrap' }),\n cursor: 'pointer',\n }),\n placeholder: (provided, state) => ({\n ...provided,\n ...(state.isFocused && isSearchable && { display: 'none' }),\n }),\n menu: (provided) => ({\n ...provided,\n marginTop: '4px',\n marginBottom: '4px',\n zIndex: '100',\n borderRadius: 0,\n }),\n }\n\n const selectClassNames = `select-input ${isMulti ? 'select-input--multi' : 'select-input--single'} ${\n isInline ? 'select-input--inline' : 'select-input--block'\n } ${isSearchable ? 'select-input--searchable' : 'select-input--not-searchable'} ${\n readOnly ? 'select-input--readonly' : ''\n } ${showAsTag && !isMulti ? 'select-input--show-as-tag' : ''}`\n\n /** Loads options for searchable async options */\n const loadAsyncQueryOptions = (inputValue: string): Promise => {\n const isValidSearch: boolean = inputValue?.length >= asyncMinimumCharacters\n const emptyResults = new Promise((resolve) => resolve([]))\n\n if (!asyncQuery) return emptyResults\n if (!isSearchable) return asyncQuery('') // gets all results if not searchable\n\n return isValidSearch ? asyncQuery(inputValue) : emptyResults\n }\n\n const debouncedLoadOptions: (inputValue: string) => Promise = debounce(\n loadAsyncQueryOptions,\n 250,\n )\n\n const loadAsyncOptions = (): Promise => {\n const emptyResults = new Promise((resolve) => resolve([]))\n return asyncOptions ? asyncOptions() : emptyResults\n }\n\n const LoadingSpinner = (): ReactNode => (\n
\n \n
\n )\n\n const formatGroupLabel = (group: GroupedSelectOption): ReactNode => (\n
\n \n {group.label}\n \n
\n )\n\n const handleAsyncInput = (input: string): void => setShowAsyncResults(input.length >= asyncMinimumCharacters)\n\n const getFilterOption = (option: FilterOptionOption, input: string): boolean => {\n if (showMultiLine) {\n return input ? `${option.label} ${option.data.footer}`.toLowerCase().includes(input.toLowerCase()) : true\n }\n\n return input ? option.label?.toLowerCase().includes(input.toLowerCase()) : true\n }\n\n const selectProps: StateManagerProps = {\n instanceId: selectId,\n id: selectId,\n inputId: selectId,\n className: selectClassNames,\n classNamePrefix: 'select-input',\n isDisabled: disabled,\n isMulti,\n closeMenuOnSelect: !isMulti,\n hideSelectedOptions: false,\n isSearchable: !readOnly ? isSearchable : false,\n onBlur: (event: SyntheticEvent) => {\n if (onBlur) onBlur(event)\n onBlurHandler()\n },\n menuPlacement: 'auto',\n components,\n styles: customStyles,\n noOptionsMessage: () => {noOptionsMessage},\n loadingMessage: LoadingSpinner,\n ...(showMultiLine && { formatOptionLabel: MultiLineOption }),\n ...(!isAsync && { filterOption: getFilterOption }),\n ...(readOnly && { menuIsOpen: false }),\n ...(placeholder ? { placeholder } : { placeholder: '' }),\n autoFocus,\n onFocus: onFocusHandler,\n isOptionDisabled: (option: SelectOption) => 'disabled' in option && !!option.disabled,\n }\n\n return (\n \n {isAsync ? (\n onChange && onChange(option as SelectOption & SelectOption[])}\n {...(!isSearchable && { defaultOptions: true })}\n {...(isSearchable && {\n menuIsOpen: showAsyncResults,\n openMenuOnClick: false,\n })}\n defaultInputValue={defaultInputValue}\n value={\n isMulti\n ? options.filter((option) =>\n Array.isArray(value) ? value?.includes(option.value) : value === option.value,\n )\n : selectProps.value\n }\n />\n ) : (\n \n isMulti && Array.isArray(value) ? value?.includes(option.value) : value === option.value,\n )}\n onChange={(option) => onChange && onChange(option as SelectOption & SelectOption[])}\n openMenuOnClick={!readOnly}\n />\n )}\n \n )\n}\n","'use client'\n\nimport React, { SyntheticEvent } from 'react'\nimport Select from 'react-select'\nimport { SelectComponents } from 'react-select/dist/declarations/src/components'\nimport { StateManagerProps } from 'react-select/dist/declarations/src/useStateManager'\nimport useInputWrapper from '@lib/hooks/useInputWrapper'\nimport {\n ClearIndicatorReplacement,\n DropdownIndicatorReplacement,\n MultiLineOption,\n SingleValueMultiLineComponent,\n SingleValueTagComponent,\n} from './Components'\nimport { OptionReplacement } from './Components/OptionReplacement'\nimport { useId } from 'react'\nimport { SelectOption, GroupedSelectOption, SingleSelectInputProps } from '@lib/types/SelectInput'\nimport {\n getSelectInputClassNames,\n getSelectContainerClassNames,\n getCustomSelectInputStyles,\n getFilterOption,\n} from '@lib/components/FormElements/Select/Helpers/select-helpers'\nimport { Text } from '@lib/components/atoms'\n\nconst getSelectProps = ({\n disabled = false,\n readOnly = false,\n isSearchable = false,\n showAsTag = false,\n showMultiLine = false,\n id,\n onBlur,\n isInline = false,\n placeholder,\n noOptionsMessage = 'No results',\n autoFocus = false,\n}: SingleSelectInputProps) => {\n const { onFocusHandler, onBlurHandler, classes } = useInputWrapper(false, disabled)\n const randomId = useId()\n const selectId = id ?? randomId\n\n const components: Partial> = {\n DropdownIndicator: DropdownIndicatorReplacement,\n ClearIndicator: ClearIndicatorReplacement,\n ...(!showMultiLine && !showAsTag && { Option: OptionReplacement }),\n }\n\n if (showAsTag) components.SingleValue = SingleValueTagComponent\n if (showMultiLine) components.SingleValue = SingleValueMultiLineComponent\n\n const selectProps: StateManagerProps = {\n instanceId: selectId,\n id: selectId,\n inputId: selectId,\n className: getSelectInputClassNames({ isInline, isMulti: false, isSearchable, showAsTag, readOnly }),\n classNamePrefix: 'select-input',\n isDisabled: disabled,\n closeMenuOnSelect: true,\n hideSelectedOptions: false,\n isSearchable: !readOnly ? isSearchable : false,\n onBlur: (event: SyntheticEvent) => {\n if (onBlur) onBlur(event)\n onBlurHandler()\n },\n menuPlacement: 'auto',\n noOptionsMessage: () => {noOptionsMessage},\n components,\n styles: getCustomSelectInputStyles(showMultiLine, isSearchable),\n filterOption: (option, input) => getFilterOption(option, input, showMultiLine),\n ...(showMultiLine && { formatOptionLabel: MultiLineOption }),\n ...(readOnly && { menuIsOpen: false }),\n ...(placeholder ? { placeholder } : { placeholder: '' }),\n autoFocus,\n }\n\n return {\n selectProps,\n onFocusHandler,\n classes,\n }\n}\n\n/**\n * This version of SingleSelectInput works in Admin, but not Account.\n */\nexport const SingleSelectInput = ({\n options = [],\n disabled = false,\n readOnly = false,\n isSearchable = false,\n showAsTag = false,\n showMultiLine = false,\n id,\n onChange,\n onBlur,\n value,\n defaultValue,\n isInline = false,\n className = '',\n placeholder,\n noOptionsMessage = 'No results',\n autoFocus = false,\n isClearable = false,\n isLoading,\n menuPosition = 'fixed',\n /** @todo This prop needs to be provided in all use-cases if applicable for accessibility */\n hasError = false,\n ...props\n}: SingleSelectInputProps) => {\n const { classes, selectProps, onFocusHandler } = getSelectProps({\n options,\n disabled,\n readOnly,\n isSearchable,\n showAsTag,\n showMultiLine,\n id,\n onChange,\n onBlur,\n value,\n defaultValue,\n isInline,\n className,\n placeholder,\n noOptionsMessage,\n autoFocus,\n isClearable,\n isLoading,\n menuPosition,\n hasError,\n })\n\n return (\n \n value === option.value)}\n onFocus={onFocusHandler}\n onChange={(option) => onChange && onChange(option as SelectOption & SelectOption[])}\n openMenuOnClick={!readOnly}\n isLoading={isLoading}\n menuPosition={menuPosition}\n aria-invalid={hasError}\n isOptionDisabled={(option) => !!option.disabled}\n />\n \n )\n}\n\n/**\n * @description\n * This version of SingleSelectInput works in Account, but not Admin. This is a 'quick fix' and eventually all projects should be able to use the same component.\n * How this component differs from SingleSelectInput: 'value' no longer gets passed to Select, defaultValue is determined from options, the 'name' property gets passed to Select.\n */\nexport const NewSingleSelectInput = ({\n options = [],\n disabled = false,\n readOnly = false,\n isSearchable = false,\n showAsTag = false,\n showMultiLine = false,\n id,\n onChange,\n onBlur,\n value,\n defaultValue,\n isInline = false,\n className = '',\n placeholder,\n noOptionsMessage = 'No results',\n autoFocus = false,\n isClearable = false,\n isLoading,\n menuPosition = 'fixed',\n /** @todo This prop needs to be provided in all use-cases if applicable for accessibility */\n hasError = false,\n name,\n ...props\n}: SingleSelectInputProps) => {\n const { classes, selectProps, onFocusHandler } = getSelectProps({\n options,\n disabled,\n readOnly,\n isSearchable,\n showAsTag,\n showMultiLine,\n id,\n onChange,\n onBlur,\n value,\n defaultValue,\n isInline,\n className,\n placeholder,\n noOptionsMessage,\n autoFocus,\n isClearable,\n isLoading,\n menuPosition,\n hasError,\n })\n\n return (\n \n defaultValue === option.value)}\n isClearable={!readOnly && isClearable}\n options={options}\n onFocus={onFocusHandler}\n onChange={(option) => onChange && onChange(option as SelectOption & SelectOption[])}\n openMenuOnClick={!readOnly}\n isLoading={isLoading}\n menuPosition={menuPosition}\n aria-invalid={hasError}\n name={name}\n isOptionDisabled={(option) => !!option.disabled}\n />\n \n )\n}\n","'use client'\n\nimport React, { SyntheticEvent } from 'react'\nimport Select from 'react-select'\nimport { SelectComponents } from 'react-select/dist/declarations/src/components'\nimport { StateManagerProps } from 'react-select/dist/declarations/src/useStateManager'\nimport useInputWrapper from '@lib/hooks/useInputWrapper'\nimport {\n ClearIndicatorReplacement,\n DropdownIndicatorReplacement,\n MultiLineOption,\n MultiValueComponent,\n} from './Components'\nimport { OptionReplacement } from './Components/OptionReplacement'\nimport { useId } from 'react'\nimport { SelectOption, GroupedSelectOption, MultiSelectInputProps } from '@lib/types/SelectInput'\nimport {\n getSelectInputClassNames,\n getSelectContainerClassNames,\n getCustomSelectInputStyles,\n getFilterOption,\n} from '@lib/components/FormElements/Select/Helpers/select-helpers'\nimport { Text } from '@lib/components/atoms'\n\nexport const MultiSelectInput = ({\n options = [],\n disabled = false,\n readOnly = false,\n isSearchable = false,\n showAsTag = false,\n showMultiLine = false,\n id,\n onChange,\n onBlur,\n value,\n defaultValue,\n isInline = false,\n className = '',\n placeholder,\n autoFocus = false,\n isClearable = false,\n isLoading = false,\n noOptionsMessage = 'No results',\n menuPosition = 'fixed',\n /** @todo This prop needs to be provided in all use-cases if applicable for accessibility */\n hasError = false,\n ...props\n}: MultiSelectInputProps) => {\n const { onFocusHandler, onBlurHandler, classes } = useInputWrapper(false, disabled)\n const randomId = useId()\n const selectId = id ?? randomId\n\n const components: Partial> = {\n MultiValue: MultiValueComponent,\n DropdownIndicator: DropdownIndicatorReplacement,\n ClearIndicator: ClearIndicatorReplacement,\n ...(!showMultiLine && !showAsTag && { Option: OptionReplacement }),\n }\n\n const selectProps: StateManagerProps = {\n instanceId: selectId,\n id: selectId,\n inputId: selectId,\n className: getSelectInputClassNames({ isInline, isMulti: true, isSearchable, showAsTag, readOnly }),\n classNamePrefix: 'select-input',\n isDisabled: disabled,\n isMulti: true,\n closeMenuOnSelect: false,\n hideSelectedOptions: false,\n isSearchable: !readOnly ? isSearchable : false,\n onBlur: (event: SyntheticEvent) => {\n if (onBlur) onBlur(event)\n onBlurHandler()\n },\n menuPlacement: 'auto',\n noOptionsMessage: () => {noOptionsMessage},\n components,\n filterOption: (option, input) => getFilterOption(option, input, showMultiLine),\n styles: getCustomSelectInputStyles(showMultiLine, isSearchable),\n ...(showMultiLine && { formatOptionLabel: MultiLineOption }),\n ...(readOnly && { menuIsOpen: false }),\n ...(placeholder ? { placeholder } : { placeholder: '' }),\n autoFocus,\n }\n\n return (\n \n !!option.disabled}\n defaultValue={defaultValue}\n isClearable={!readOnly && isClearable}\n options={options}\n value={options.filter((option) =>\n Array.isArray(value) ? value?.includes(option.value) : value === option.value,\n )}\n onFocus={onFocusHandler}\n onChange={(option) => onChange && onChange(option as SelectOption & SelectOption[])}\n openMenuOnClick={!readOnly}\n isLoading={isLoading}\n menuPosition={menuPosition}\n aria-invalid={hasError}\n />\n \n )\n}\n","'use client'\nimport React from 'react'\nimport { Spinner, Text } from '@lib/components/atoms'\nimport { GroupedSelectOption, TextTypes } from '@lib/types'\n\nexport const LoadingComponent = () => {\n return (\n
\n \n
\n )\n}\nexport const formatGroupLabel = (group: GroupedSelectOption) => {\n return (\n
\n \n {group.label}\n \n
\n )\n}\n","'use client'\n\nimport debounce from 'debounce-promise'\nimport React, { SyntheticEvent, useState } from 'react'\nimport AsyncSelect from 'react-select/async'\nimport { SelectComponents } from 'react-select/dist/declarations/src/components'\nimport { StateManagerProps } from 'react-select/dist/declarations/src/useStateManager'\nimport useInputWrapper from '@lib/hooks/useInputWrapper'\nimport { Text } from '@lib/components/atoms'\nimport {\n ClearIndicatorReplacement,\n DropdownIndicatorReplacement,\n MultiLineOption,\n SingleValueMultiLineComponent,\n SingleValueTagComponent,\n} from './Components'\nimport { OptionReplacement } from './Components/OptionReplacement'\nimport { useId } from 'react'\nimport { SelectOption, GroupedSelectOption, AsyncSingleSelectInputProps } from '@lib/types/SelectInput'\nimport {\n getSelectInputClassNames,\n getSelectContainerClassNames,\n getCustomSelectInputStyles,\n} from '@lib/components/FormElements/Select/Helpers/select-helpers'\nimport { formatGroupLabel, LoadingComponent } from '@lib/components/FormElements/Select/Components/AsyncComponent'\nimport { loadAsyncQueryOptions } from '@lib/components/FormElements/Select/Helpers/async-select-helpers'\n\nexport const AsyncSingleSelectInput = ({\n options = [],\n asyncQuery,\n asyncOptions,\n isClearable = true,\n disabled = false,\n readOnly = false,\n isSearchable = false,\n showAsTag = false,\n showMultiLine = false,\n id,\n onChange,\n onBlur,\n value,\n defaultInputValue = undefined,\n noOptionsMessage = 'No results',\n isInline = false,\n className = '',\n placeholder,\n autoFocus = false,\n asyncMinimumCharacters = 3,\n menuPosition = 'fixed',\n ...props\n}: AsyncSingleSelectInputProps) => {\n const { onBlurHandler, onFocusHandler, classes } = useInputWrapper(false, disabled)\n const selectId = id ?? useId()\n const [initialOptions, setInitialOptions] = useState(options)\n\n const [showAsyncResults, setShowAsyncResults] = useState(false)\n\n const components: Partial> = {\n DropdownIndicator: DropdownIndicatorReplacement,\n ClearIndicator: ClearIndicatorReplacement,\n ...(!showMultiLine && !showAsTag && { Option: OptionReplacement }),\n }\n\n if (showAsTag) components.SingleValue = SingleValueTagComponent\n if (showMultiLine) components.SingleValue = SingleValueMultiLineComponent\n\n const debouncedLoadOptions: (inputValue: string) => Promise = debounce(\n (inputValue: string) =>\n loadAsyncQueryOptions(inputValue, {\n asyncMinimumCharacters,\n asyncQuery,\n isSearchable,\n }),\n 250,\n )\n\n const loadAsyncOptions = (): Promise => {\n const emptyResults = new Promise((resolve) => resolve([]))\n return asyncOptions ? asyncOptions() : emptyResults\n }\n\n const handleAsyncInput = (input: string): void => setShowAsyncResults(input.length >= asyncMinimumCharacters)\n\n const selectProps: StateManagerProps = {\n instanceId: selectId,\n id: selectId,\n inputId: selectId,\n isClearable,\n className: getSelectInputClassNames({ isInline, isMulti: false, isSearchable, showAsTag, readOnly }),\n classNamePrefix: 'select-input',\n isDisabled: disabled,\n closeMenuOnSelect: true,\n hideSelectedOptions: false,\n isSearchable: !readOnly ? isSearchable : false,\n onBlur: (event: SyntheticEvent) => {\n if (onBlur) onBlur(event)\n onBlurHandler()\n },\n menuPlacement: 'auto',\n components,\n styles: getCustomSelectInputStyles(showMultiLine, isSearchable),\n noOptionsMessage: () => {noOptionsMessage},\n loadingMessage: LoadingComponent,\n ...(showMultiLine && { formatOptionLabel: MultiLineOption }),\n ...(readOnly && { menuIsOpen: false }),\n ...(placeholder ? { placeholder } : { placeholder: '' }),\n autoFocus,\n }\n\n return (\n \n {\n //Workaround to get Clear working when initial options are passed\n if (!option) setInitialOptions([])\n if (onChange) onChange(option as SelectOption & SelectOption[])\n }}\n {...(!isSearchable && { defaultOptions: true })}\n {...(isSearchable && {\n menuIsOpen: showAsyncResults,\n openMenuOnClick: false,\n })}\n defaultInputValue={defaultInputValue}\n onFocus={() => {\n onFocusHandler()\n }}\n value={\n options.filter((option) =>\n !!option\n ? Array.isArray(value)\n ? value?.includes(option.value)\n : value === option.value\n : null,\n )?.[0]\n }\n menuPosition={menuPosition}\n isOptionDisabled={(option) => !!option.disabled}\n />\n \n )\n}\n","'use client'\n\nimport debounce from 'debounce-promise'\nimport React, { SyntheticEvent, useState } from 'react'\nimport AsyncSelect from 'react-select/async'\nimport { SelectComponents } from 'react-select/dist/declarations/src/components'\nimport { StateManagerProps } from 'react-select/dist/declarations/src/useStateManager'\nimport useInputWrapper from '@lib/hooks/useInputWrapper'\nimport { Text } from '@lib/components/atoms'\nimport {\n ClearIndicatorReplacement,\n DropdownIndicatorReplacement,\n MultiLineOption,\n MultiValueComponent,\n} from './Components'\nimport { OptionReplacement } from './Components/OptionReplacement'\nimport { useId } from 'react'\nimport { SelectOption, GroupedSelectOption, AsyncMultiSelectInputProps } from '@lib/types/SelectInput'\nimport {\n getSelectInputClassNames,\n getSelectContainerClassNames,\n getCustomSelectInputStyles,\n} from '@lib/components/FormElements/Select/Helpers/select-helpers'\nimport { formatGroupLabel, LoadingComponent } from '@lib/components/FormElements/Select/Components/AsyncComponent'\nimport { loadAsyncQueryOptions } from '@lib/components/FormElements/Select/Helpers/async-select-helpers'\n\nexport const AsyncMultiSelectInput = ({\n options = [],\n asyncQuery,\n asyncOptions,\n disabled = false,\n readOnly = false,\n isSearchable = false,\n showAsTag = false,\n showMultiLine = false,\n id,\n onChange,\n onBlur,\n value,\n defaultInputValue = undefined,\n noOptionsMessage = 'No results',\n isInline = false,\n className = '',\n placeholder,\n autoFocus = false,\n asyncMinimumCharacters = 3,\n menuPosition = 'fixed',\n ...props\n}: AsyncMultiSelectInputProps) => {\n const { onBlurHandler, onFocusHandler, classes } = useInputWrapper(false, disabled)\n const selectId = id ?? useId()\n\n const [showAsyncResults, setShowAsyncResults] = useState(false)\n\n const components: Partial> = {\n MultiValue: MultiValueComponent,\n DropdownIndicator: DropdownIndicatorReplacement,\n ClearIndicator: ClearIndicatorReplacement,\n ...(!showMultiLine && !showAsTag && { Option: OptionReplacement }),\n }\n\n const debouncedLoadOptions: (inputValue: string) => Promise = debounce(\n (inputValue: string) =>\n loadAsyncQueryOptions(inputValue, {\n asyncMinimumCharacters,\n asyncQuery,\n isSearchable,\n }),\n 250,\n )\n\n const loadAsyncOptions = (): Promise => {\n const emptyResults = new Promise((resolve) => resolve([]))\n return asyncOptions ? asyncOptions() : emptyResults\n }\n\n const handleAsyncInput = (input: string): void => setShowAsyncResults(input.length >= asyncMinimumCharacters)\n\n const selectProps: StateManagerProps = {\n instanceId: selectId,\n id: selectId,\n inputId: selectId,\n className: getSelectInputClassNames({ isInline, isMulti: true, isSearchable, showAsTag, readOnly }),\n classNamePrefix: 'select-input',\n isDisabled: disabled,\n isMulti: true,\n closeMenuOnSelect: false,\n hideSelectedOptions: false,\n isSearchable: !readOnly ? isSearchable : false,\n onBlur: (event: SyntheticEvent) => {\n if (onBlur) onBlur(event)\n onBlurHandler()\n },\n menuPlacement: 'auto',\n components,\n styles: getCustomSelectInputStyles(showMultiLine, isSearchable),\n noOptionsMessage: () => {noOptionsMessage},\n loadingMessage: LoadingComponent,\n ...(showMultiLine && { formatOptionLabel: MultiLineOption }),\n ...(readOnly && { menuIsOpen: false }),\n ...(placeholder ? { placeholder } : { placeholder: '' }),\n autoFocus,\n }\n\n return (\n \n onChange && onChange(option as SelectOption & SelectOption[])}\n {...(!isSearchable && { defaultOptions: true })}\n {...(isSearchable && {\n menuIsOpen: showAsyncResults,\n openMenuOnClick: false,\n })}\n onFocus={onFocusHandler}\n defaultInputValue={defaultInputValue}\n value={options.filter((option) =>\n Array.isArray(value) ? value?.includes(option.value) : value === option.value,\n )}\n menuPosition={menuPosition}\n isOptionDisabled={(option) => !!option.disabled}\n />\n \n )\n}\n","'use client'\n\nimport React, { ReactNode, useState } from 'react'\nimport useInputWrapper from '../../../hooks/useInputWrapper'\nimport { ChangeHandler } from 'react-hook-form'\n\nexport interface TextAreaProps\n extends Pick, 'defaultValue' | 'minLength' | 'maxLength'> {\n id: string\n form?: string\n name: string\n rows?: number\n placeholder?: string\n required?: boolean\n disabled?: boolean\n readOnly?: boolean\n resizable?: boolean\n maxChar?: number\n customCount?: string\n error?: boolean\n onChange?: (value: string) => void\n onBlur?: ChangeHandler\n value?: string\n autoFocus?: boolean\n}\n\nexport const Textarea = ({\n id,\n form,\n name,\n rows = 4,\n placeholder = '',\n required = false,\n disabled = false,\n readOnly = false,\n resizable = true,\n maxChar,\n customCount,\n error,\n onChange,\n onBlur,\n value,\n defaultValue,\n autoFocus = false,\n ...rest\n}: TextAreaProps) => {\n const [count, setCount] = useState(\n value?.length ?? (typeof defaultValue === 'string' ? defaultValue?.length : undefined) ?? 0,\n )\n const { onFocusHandler, onBlurHandler, classes } = useInputWrapper(false, disabled)\n const maxLength = rest.maxLength ?? maxChar\n\n return (\n
\n {\n setCount(e.target.value.length)\n onChange?.(e.target.value)\n }}\n onBlur={(e) => {\n onBlur && onBlur(e)\n onBlurHandler()\n }}\n value={value}\n defaultValue={defaultValue}\n autoFocus={autoFocus}\n aria-invalid={error}\n />\n\n {maxLength && !readOnly && !customCount && (\n \n {count}/{maxLength}\n \n )}\n\n {customCount && {customCount}}\n
\n )\n}\n\nconst Counter = ({ children }: { children: ReactNode }): JSX.Element => (\n {children}\n)\n","export default {\n af: 'Afghanistan',\n al: 'Albanië',\n dz: 'Algerije',\n as: 'Amerikaans-Samoa',\n ad: 'Andorra',\n ao: 'Angola',\n ai: 'Anguilla',\n aq: 'Antarctica',\n ag: 'Antigua en Barbuda',\n ar: 'Argentinië',\n am: 'Armenië',\n aw: 'Aruba',\n au: 'Australië',\n at: 'Oostenrijk',\n az: 'Azerbeidzjan',\n bs: \"Bahama's\",\n bh: 'Bahrein',\n bd: 'Bangladesh',\n bb: 'Barbados',\n by: 'Wit-Rusland',\n be: 'België',\n bz: 'Belize',\n bj: 'Benin',\n bm: 'Bermuda',\n bt: 'Bhutan',\n bo: 'Bolivië',\n ba: 'Bosnië-Herzegovina',\n bw: 'Botswana',\n bv: 'Bouvet Eiland',\n br: 'Brazilië',\n io: 'Brits Indische oceaan',\n bn: 'Brunei Darussalam',\n bg: 'Bulgarije',\n bf: 'Burkina Faso',\n bi: 'Burundi',\n kh: 'Cambodja',\n cm: 'Kameroen',\n ca: 'Canada',\n cv: 'Kaapverdië',\n ky: 'Kaaimaneilanden',\n cf: 'Centraal-Afrikaanse Republiek',\n td: 'Tsjaad',\n cl: 'Chili',\n cn: 'China',\n cx: 'Christmaseiland',\n cc: 'Cocoseilanden',\n co: 'Colombia',\n km: 'Comoren',\n cg: 'Congo, Volksrepubliek',\n cd: 'Congo, Democratische Republiek',\n ck: 'Cookeilanden',\n cr: 'Costa Rica',\n ci: 'Ivoorkust',\n hr: 'Kroatië',\n cu: 'Cuba',\n cy: 'Cyprus',\n cz: 'Tsjechië',\n dk: 'Denemarken',\n dj: 'Djibouti',\n dm: 'Dominica',\n do: 'Dominicaanse Republiek',\n ec: 'Ecuador',\n eg: 'Egypte',\n sv: 'El Salvador',\n gq: 'Equatoriaal-Guinea',\n er: 'Eritrea',\n ee: 'Estland',\n et: 'Ethiopië',\n fk: 'Falklandeilanden',\n fo: 'Faeröer',\n fj: 'Fiji',\n fi: 'Finland',\n fr: 'Frankrijk',\n gf: 'Frans-Guyana',\n pf: 'Frans-Polynesië',\n tf: 'Franse Zuidelijke Gebieden',\n ga: 'Gabon',\n gm: 'Gambia',\n ge: 'Georgië',\n de: 'Duitsland',\n gh: 'Ghana',\n gi: 'Gibraltar',\n gr: 'Griekenland',\n gl: 'Groenland',\n gd: 'Grenada',\n gp: 'Guadeloupe',\n gu: 'Guam',\n gt: 'Guatemala',\n gn: 'Guinea',\n gw: 'Guinee-Bissau',\n gy: 'Guyana',\n ht: 'Haïti',\n hm: 'Heard en McDonaldeilanden',\n va: 'Heilige Stoel',\n hn: 'Honduras',\n hk: 'Hong Kong',\n hu: 'Hongarije',\n is: 'IJsland',\n in: 'India',\n id: 'Indonesië',\n ir: 'Iran',\n iq: 'Irak',\n ie: 'Ierland',\n il: 'Israël',\n it: 'Italië',\n jm: 'Jamaica',\n jp: 'Japan',\n jo: 'Jordanië',\n kz: 'Kazachstan',\n ke: 'Kenia',\n ki: 'Kiribati',\n kp: 'Noord-Korea',\n kr: 'Zuid-Korea',\n kw: 'Koeweit',\n kg: 'Kirgizstan',\n la: 'Laos',\n lv: 'Letland',\n lb: 'Libanon',\n ls: 'Lesotho',\n lr: 'Liberia',\n ly: 'Libië',\n li: 'Liechtenstein',\n lt: 'Litouwen',\n lu: 'Luxemburg',\n mo: 'Macao',\n mg: 'Madagaskar',\n mw: 'Malawi',\n my: 'Maleisië',\n mv: 'Maldiven',\n ml: 'Mali',\n mt: 'Malta',\n mh: 'Marshalleilanden',\n mq: 'Martinique',\n mr: 'Mauritanië',\n mu: 'Mauritius',\n yt: 'Mayotte',\n mx: 'Mexico',\n fm: 'Micronesië, Federale Staten',\n md: 'Moldavië',\n mc: 'Monaco',\n mn: 'Mongolië',\n ms: 'Montserrat',\n ma: 'Marokko',\n mz: 'Mozambique',\n mm: 'Myanmar',\n na: 'Namibië',\n nr: 'Nauru',\n np: 'Nepal',\n nl: 'Nederland',\n nc: 'Nieuw-Caledonië',\n nz: 'Nieuw-Zeeland',\n ni: 'Nicaragua',\n ne: 'Niger',\n ng: 'Nigeria',\n nu: 'Niue',\n nf: 'Norfolk',\n mp: 'Noordelijke Marianen',\n mk: 'Noord-Macedonië',\n no: 'Noorwegen',\n om: 'Oman',\n pk: 'Pakistan',\n pw: 'Palau',\n ps: 'Palestina',\n pa: 'Panama',\n pg: 'Papoea-Nieuw-Guinea',\n py: 'Paraguay',\n pe: 'Peru',\n ph: 'Filipijnen',\n pn: 'Pitcairn',\n pl: 'Polen',\n pt: 'Portugal',\n pr: 'Puerto Rico',\n qa: 'Qatar',\n re: 'Réunion',\n ro: 'Roemenië',\n ru: 'Rusland',\n rw: 'Rwanda',\n sh: 'Sint-Helena',\n kn: 'Saint Kitts en Nevis',\n lc: 'Saint Lucia',\n pm: 'Saint-Pierre en Miquelon',\n vc: 'Saint Vincent en de Grenadines',\n ws: 'Samoa',\n sm: 'San Marino',\n st: 'São Tomé en Principe',\n sa: 'Saudi-Arabië',\n sn: 'Senegal',\n sc: 'Seychellen',\n sl: 'Sierra Leone',\n sg: 'Singapore',\n sk: 'Slowakije',\n si: 'Slovenië',\n sb: 'Salomonseilanden',\n so: 'Somalië',\n za: 'Zuid-Afrika',\n gs: 'Zuid-Georgia en de Zuidelijke Sandwicheilanden',\n es: 'Spanje',\n lk: 'Sri Lanka',\n sd: 'Soedan',\n sr: 'Suriname',\n sj: 'Spitsbergen en Jan Mayen',\n sz: 'Ngwane, Koninkrijk Eswatini',\n se: 'Zweden',\n ch: 'Zwitserland',\n sy: 'Syrië',\n tw: 'Taiwan',\n tj: 'Tadzjikistan',\n tz: 'Tanzania',\n th: 'Thailand',\n tl: 'Timor Leste',\n tg: 'Togo',\n tk: 'Tokelau',\n to: 'Tonga',\n tt: 'Trinidad en Tobago',\n tn: 'Tunesië',\n tr: 'Turkije',\n tm: 'Turkmenistan',\n tc: 'Turks- en Caicoseilanden',\n tv: 'Tuvalu',\n ug: 'Oeganda',\n ua: 'Oekraïne',\n ae: 'Verenigde Arabische Emiraten',\n gb: 'Groot-Brittannië',\n us: 'Verenigde Staten',\n um: 'Ver afgelegen eilandjes van de Verenigde Staten',\n uy: 'Uruguay',\n uz: 'Oezbekistan',\n vu: 'Vanuatu',\n ve: 'Venezuela',\n vn: 'Vietnam',\n vg: 'Maagdeneilanden, Britse',\n vi: 'Maagdeneilanden, Amerikaanse',\n wf: 'Wallis en Futuna',\n eh: 'Westelijke Sahara',\n ye: 'Jemen',\n zm: 'Zambia',\n zw: 'Zimbabwe',\n ax: 'Åland',\n bq: 'Bonaire, Sint Eustatius en Saba',\n cw: 'Curaçao',\n gg: 'Guernsey',\n im: 'Man Eiland',\n je: 'Jersey',\n me: 'Montenegro',\n bl: 'Saint Barthélemy',\n mf: 'Sint-Maarten (Frans deel)',\n rs: 'Servië',\n sx: 'Sint Maarten',\n ss: 'Zuid-Soedan',\n xk: 'Kosovo',\n}\n","'use client'\nimport React, { FC, useEffect } from 'react'\nimport PhoneInput, { PhoneInputProps } from 'react-phone-input-2'\nimport 'react-phone-input-2/lib/high-res.css'\nimport useInputWrapper from '../../../hooks/useInputWrapper'\nimport nl from './countries-nl'\n\nexport interface FormPhoneFieldProps extends PhoneInputProps {\n id?: string\n className?: string\n error?: boolean\n autoFocus?: boolean\n readOnly?: boolean\n}\n\nconst SVG_ICONS = {\n SEARCH: `\n \n \n \n `,\n CHECK_MARK: `\n \n \n `,\n}\n\nenum CountryCode {\n NL = '31',\n}\n\nexport const FormPhoneField = ({\n id,\n className = '',\n searchPlaceholder = 'Search...',\n searchNotFound = '',\n country = 'nl',\n preferredCountries = ['nl', 'be', 'de'],\n error = false,\n autoFocus = false,\n readOnly = false,\n ...rest\n}: FormPhoneFieldProps): JSX.Element => {\n const { onFocusHandler, onBlurHandler, classes } = useInputWrapper(false, rest.disabled)\n const htmlLocale = document.documentElement.lang\n\n const containerClass: string = 'form-phone-field'\n\n //Fix from https://github.com/bl00mber/react-phone-input-2/issues/579\n //@ts-ignore\n const ReactPhoneInput: FC = PhoneInput.default ? PhoneInput.default : PhoneInput\n\n useEffect(() => {\n setIcon()\n }, [])\n\n const setIcon = (): void => {\n const flagDropdown: HTMLDivElement | null = document.querySelector(`.${containerClass} .flag-dropdown`)\n if (!flagDropdown) return\n\n flagDropdown.addEventListener('click', (_) => {\n setTimeout(() => {\n replaceSearchIcon()\n }, 5)\n })\n }\n\n const replaceSearchIcon = (): void => {\n const searchEmoji: HTMLSpanElement | null = document.querySelector(`.${containerClass} .search-emoji`)\n if (searchEmoji) searchEmoji.innerHTML = SVG_ICONS.SEARCH\n }\n\n return (\n \n \n \n )\n}\n","'use client'\n\nimport { CheckmarkIcon, CloseIcon } from '@lib/components/icons'\nimport React, { ReactNode } from 'react'\nimport { ChangeHandler } from 'react-hook-form'\n\nexport interface ToggleSwitchProps extends Omit, 'onChange'> {\n label?: ReactNode\n id?: string\n form?: string\n name?: string\n value?: string | number\n labelBeforeSwitch?: boolean\n checked?: boolean\n disabled?: boolean\n readOnly?: boolean\n onChange?: ChangeHandler | ((value: unknown, checked: boolean) => void)\n}\n\nexport const ToggleSwitch = ({\n label,\n labelBeforeSwitch = false,\n id,\n form,\n name,\n value,\n checked,\n disabled,\n readOnly,\n onChange,\n ...rest\n}: ToggleSwitchProps) => {\n const labelClasses = `\n ${disabled ? 'toggle-switch--disabled' : ''}\n ${readOnly ? 'toggle-switch--readonly' : ''}\n ${labelBeforeSwitch ? 'flex flex-row-reverse justify-between gap-2' : ''}\n `\n\n return (\n \n )\n}\n","import { DictionaryText, ErrorSummaryError, Text } from '@lib/components'\nimport React, { FC } from 'react'\n\ninterface FormErrorListItemProps {\n error: ErrorSummaryError\n}\n\ninterface FormErrorListItemContentProps {\n error: ErrorSummaryError\n}\n\nconst FormErrorListItemContent: FC = ({ error }) => (\n \n {error.fieldNameTranslationKey ? (\n <>\n :{' '}\n \n ) : undefined}\n {error.errorMessage}\n \n)\n\n/**\n * Renders out an LI html element. The element will be interactive if the html element specified in the provided error is found.\n */\nexport const FormErrorListItem: FC = ({ error }) => {\n const referencedInputExists = !!document.getElementById(error.formInputId)\n\n return (\n
  • \n {referencedInputExists ? (\n \n \n \n ) : (\n \n )}\n
  • \n )\n}\n","import { DictionaryText, Text } from '@lib/components/atoms'\nimport { InlineNotification, InlineNotificationProps } from '@lib/components/molecules'\nimport { NotificationVariant } from '@lib/types'\nimport React, { Children, FC } from 'react'\n\nconst MESSAGE_KEYS = { HAS_ERRORS: 'STO.FORM.FORM_ERRORS.HAS_ERRORS' }\n\nexport interface ValidationErrorsProps\n extends Omit,\n Pick, 'className'> {}\n\n/**\n * Component meant to show a list of form validation errors\n *\n * @example\n * \n * {yupErrors.map((error) => (\n * \n * ))}\n * \n */\nexport const FormErrorSummary: FC = ({ children, ...rest }) => {\n /** If no children, don't render anything */\n if (!children || !Children.toArray(children).filter((child) => !!child)?.length) return\n\n return (\n \n \n \n \n
      {children}
    \n \n }\n />\n )\n}\n","export * from './ErrorSummaryTypes'\nexport * from './FormErrorListItem'\nexport * from './FormErrorSummary'\n","export * from './ChoiceList/ChoiceList'\nexport * from './Fieldset/Fieldset'\nexport * from './FormCheckbox/FormCheckbox'\nexport * from './FormField/FormField'\nexport * from './FormHelpText/FormHelpText'\nexport * from './FormDatePicker/FormDatePicker'\nexport * from './FormInput/FormInput'\nexport * from './FormInputLabel/FormInputLabel'\nexport * from './FormInputValidationText/FormInputValidationText'\nexport * from './FormNumberInput/FormNumberInput'\nexport * from './FormRadioField/FormRadioField'\nexport * from './FormTimeInput/FormTimeInput'\nexport * from './FormSection/FormSection'\nexport * from './FileInput/FileInput'\nexport * from './Select/SelectInput'\nexport * from './Select/SingleSelectInput'\nexport * from './Select/MultiSelectInput'\nexport * from './Select/AsyncSingleSelectInput'\nexport * from './Select/AsyncMultiSelectInput'\nexport * from './Textarea/Textarea'\nexport * from './FormPhoneField/FormPhoneField'\nexport * from './ToggleSwitch/ToggleSwitch'\nexport * from './FormErrorSummary'\n","'use client'\n\nimport { ChevronLeftIcon, ChevronRightIcon } from '@lib/components/icons'\nimport React, { FC, ReactNode, useContext, useEffect, useState } from 'react'\nimport { useDebouncedCallback } from 'use-debounce'\nimport { TextTypes } from '../../../types'\nimport { Button, ButtonVariants, DictionaryText, Text } from '../../atoms'\nimport { SelectOption } from '@lib/types/SelectInput'\nimport { SingleSelectInput } from '@lib/components/FormElements'\nimport { PaginationContext } from '@lib/providers'\n\ninterface Props {\n initialPerPage?: number\n perPageOptions: SelectOption[]\n itemsPerPageLabel: ReactNode\n xOfTotalItemsLabelKey: string\n ofTotalPagesLabelKey: string\n /** Placeholder that will be replaced. It always replaces including {{}}, so if \"amount\" is provided it will replace \"{{ amount }}\" */\n labelParamPlaceholder?: string\n}\n\nexport const Pagination: FC = ({\n initialPerPage = 25,\n perPageOptions,\n itemsPerPageLabel,\n xOfTotalItemsLabelKey,\n ofTotalPagesLabelKey,\n labelParamPlaceholder = 'amount',\n}: Props) => {\n const { totalResults, initialPage, paginateHandler, currentPage, setCurrentPage } = useContext(PaginationContext)\n const [totalPages, setTotalPages] = useState(1)\n const [perPage, setPerPage] = useState(initialPerPage)\n const [totalItemsToShowInLabel, setTotalItemsToShowInLabel] = useState(+currentPage * +perPage)\n const [pageNumbers, setPageNumbers] = useState([\n { value: initialPage, label: initialPage.toString() },\n ])\n const RANDOM_ID = String(Math.round(Math.random() * 999999))\n\n useEffect(() => {\n setTotalItemsToShowInLabel(getTotalItemsInView())\n }, [paginateHandler])\n\n useEffect(() => {\n if (+currentPage > totalPages) return\n debouncedFetchData()\n }, [currentPage, perPage])\n\n useEffect(() => {\n setTotalPages(Math.ceil(totalResults / +perPage))\n }, [totalResults, perPage])\n\n useEffect(() => {\n setPageNumbers(getPageNumberOptions())\n setCurrentPage(1)\n }, [totalPages])\n\n const debouncedFetchData = useDebouncedCallback(() => {\n const offset = +currentPage * +perPage - +perPage\n const limit = +perPage\n paginateHandler(offset, limit)\n }, 250)\n\n const getTotalItemsInView = (): number => {\n const isOnePager: boolean = totalResults <= perPage\n return isOnePager ? totalResults : +currentPage * +perPage\n }\n\n const getPageNumberOptions = (): SelectOption[] => {\n return Array.from(Array(totalPages).keys()).map((key) => {\n const page = key + 1\n return {\n value: page,\n label: page.toString(),\n }\n })\n }\n\n const getTotalPageNumber = (): number => (+currentPage - 1) * +perPage + 1\n\n const perPageHandler = (option: SelectOption): void => setPerPage(option.value ? +option.value : initialPerPage)\n const pageNumberHandler = (option: SelectOption): void => setCurrentPage(option.value ? +option.value : initialPage)\n\n const previousPageHandler = (): void => {\n if (+currentPage <= 1) return\n const previousPage: number = +currentPage - 1\n setCurrentPage(previousPage)\n }\n\n const nextPageHandler = (): void => {\n if (+currentPage >= totalPages) return\n const nextPage: number = +currentPage + 1\n setCurrentPage(nextPage)\n }\n\n return (\n <>\n
    \n
    \n {itemsPerPageLabel}:\n \n \n {getTotalPageNumber()} - {totalItemsToShowInLabel}{' '}\n \n \n
    \n
    \n \n \n \n \n }\n disabled={+currentPage === 1}\n variant={ButtonVariants.QUIET}\n onClick={() => previousPageHandler()}\n data-testid=\"pagination-previous-button\"\n />\n }\n disabled={+currentPage === totalPages}\n variant={ButtonVariants.QUIET}\n onClick={() => nextPageHandler()}\n data-testid=\"pagination-next-button\"\n />\n
    \n
    \n \n )\n}\n","export * from './Pagination'\n","'use client'\n\nimport React, { useRef, useEffect } from 'react'\n\nexport interface ProgressIndicatorProps {\n goal: number\n progression: number\n label: string\n showLabel?: boolean\n}\n\nexport const ProgressIndicator = ({ goal, progression, label, showLabel = true }: ProgressIndicatorProps) => {\n const domEl = useRef(null)\n const previousProgressFactor = useRef(0)\n\n /** set the css custom properties \"--progress-factor\" and \"--duration-factor\" on the dom element when the progression value changes */\n const updateProgression = () => {\n let progressFactor = progression / goal\n progressFactor = progressFactor === Infinity || !progressFactor ? 0 : progressFactor\n\n domEl.current?.style.setProperty('--progress-factor', `${progressFactor}`)\n domEl.current?.style.setProperty(\n '--duration-factor',\n `${Math.abs(progressFactor - previousProgressFactor.current)}`,\n )\n\n previousProgressFactor.current = progression / goal\n }\n\n useEffect(() => {\n updateProgression()\n }, [goal, progression])\n\n const $progress = (\n \n )\n\n return (\n
    \n
    \n {showLabel ? (\n \n ) : (\n $progress\n )}\n \n {progression}/{goal}\n \n
    \n
    \n
    \n
    \n
    \n )\n}\n","export * from './ProgressIndicator'\n","'use client'\nimport React, { HTMLAttributes, useState } from 'react'\nimport { Button, ButtonProps, ButtonVariants } from '../../atoms'\n\nexport type SwitcherId = string | number\n\nexport interface SwitcherProps extends HTMLAttributes {\n /** array of button texts */\n items: SwitcherItem[]\n /** id of initially active item */\n initialItem?: SwitcherId | null\n /** whether switch is disabled */\n disabled?: boolean\n /** callback on switch action */\n onSwitch?: (id: string | number) => void\n isLoading?: boolean\n isStretched?: boolean\n}\n\nexport interface SwitcherItem extends Partial> {\n id: SwitcherId\n label: string\n}\n\nexport const Switcher = ({\n items = [],\n initialItem,\n disabled = false,\n onSwitch,\n isLoading = false,\n isStretched = false,\n ...props\n}: SwitcherProps): JSX.Element => {\n if (isLoading) return
    \n if (items?.length === 0) return <>\n const [activePosition, setActivePosition] = useState(initialItem || items[0].id)\n\n const clickHandler = (id: SwitcherId): void => {\n if (isActive(id) || disabled) return // ignore if item is already active or switch is disabled\n setActivePosition(id)\n if (onSwitch) onSwitch(id)\n }\n\n const isActive = (id: SwitcherId): boolean => activePosition === id\n\n const getRootClasses = () => {\n let classes = [\n 'grid grid-flow-col bg-shade-0 outline outline-1 outline-shade-200 p-1 h-8 density-md:h-10 density-lg:h-12',\n ]\n classes.push(isStretched ? 'w-full auto-cols-fr' : 'w-fit')\n props?.className && classes.push(props.className)\n return classes.join(' ')\n }\n\n return (\n
    \n {items?.length > 0 &&\n items.map((item: SwitcherItem) => (\n clickHandler(item.id)}\n className={`${isActive(item.id) ? 'text-text-primary' : 'text-text-secondary'}`}\n contained\n data-testid={`switcher-item-${item.id}`}\n >\n {item.label || item.children}\n \n ))}\n
    \n )\n}\n","export * from './Switcher'\n","'use client'\nimport React from 'react'\n\nexport interface TabsProps {\n children: React.ReactNode\n}\n\nexport const Tabs = ({ children }: TabsProps) => {\n return (\n
    \n {children}\n \n
    \n )\n}\n","export * from './Tabs'\n","'use client'\n\nimport {\n Button,\n ButtonVariants,\n Retain,\n RetainBehaviorModifier,\n RetainSizeModifier,\n Text,\n Tooltip,\n} from '@lib/components/atoms'\nimport { TextTypes } from '@lib/types'\nimport { ArrowLeftIcon } from '@lib/components/icons'\nimport React from 'react'\n\nexport interface PageHeaderProps extends Omit, 'title'> {\n title: string | React.ReactNode\n description?: string | React.ReactNode\n buttons?: JSX.Element\n contentSwitcher?: JSX.Element\n retainSizeModifier?: RetainSizeModifier\n retainBehaviorModifiers?: RetainBehaviorModifier[]\n tooltipText?: string\n tag?: JSX.Element\n previousHandler?: () => void\n leftButtons?: JSX.Element\n isInEditState?: boolean\n}\n\nexport const PageHeader = ({\n title,\n description,\n buttons,\n contentSwitcher,\n retainSizeModifier = RetainSizeModifier.FULL_WIDTH,\n retainBehaviorModifiers = [RetainBehaviorModifier.NO_PADDING],\n tooltipText,\n tag,\n leftButtons,\n previousHandler,\n isInEditState = false,\n ...props\n}: PageHeaderProps): JSX.Element => {\n return (\n
    \n
    \n \n
    \n {(previousHandler || leftButtons) && !isInEditState && (\n
    \n {leftButtons ? leftButtons : undefined}\n {previousHandler ? (\n }\n onClick={() => previousHandler()}\n />\n ) : undefined}\n
    \n )}\n
    \n
    \n
    \n \n {title}\n \n {tooltipText && }\n {tag && tag}\n
    \n {description &&
    {description}
    }\n
    \n {contentSwitcher && contentSwitcher}\n {buttons &&
    {buttons}
    }\n
    \n
    \n
    \n
    \n
    \n )\n}\n","export * from './PageHeader'\n","'use client'\nimport React from 'react'\nimport { PageLayoutWidth } from '@lib/components/molecules/PageLayout/PageLayout'\n\ntype FullWidthLayoutProps = {\n width: PageLayoutWidth\n children: React.ReactNode\n}\n\nexport const FullWidthLayout = ({ children, width }: FullWidthLayoutProps) => {\n return
    {children}
    \n}\n","'use client'\nimport React from 'react'\nimport { PageLayoutWidth } from '../PageLayout'\n\ntype SidebarRightLayoutProps = {\n width: PageLayoutWidth\n children: React.ReactNode\n sidebarChildren?: React.ReactNode | React.ReactNode[]\n}\n\nexport const SidebarRightLayout = ({ children, sidebarChildren, width }: SidebarRightLayoutProps) => {\n return (\n <>\n
    \n
    \n
    \n {children}\n
    \n
    \n \n
    \n \n )\n}\n","export * from './FullWidthLayout'\nexport * from './SidebarRightLayout'\n","'use client'\nimport React from 'react'\nimport { Layouts } from '@lib/types/Layouts'\nimport { FullWidthLayout, SidebarRightLayout } from './layouts'\n\ninterface PageLayoutProps {\n layout?: Layouts\n children: React.ReactNode\n width: PageLayoutWidth\n sidebarChildren?: React.ReactNode[]\n}\n\nconst layoutComponents = {\n [Layouts.SIDEBAR_RIGHT]: SidebarRightLayout,\n [Layouts.FULL_WIDTH]: FullWidthLayout,\n}\n\nexport enum PageLayoutWidth {\n XS = 'page-width-xs',\n SM = 'page-width-sm',\n MD = 'page-width-md',\n LG = 'page-width-lg',\n XL = 'page-width-xl',\n FULL = 'page-width-full',\n}\n\nconst DefaultLayout = Layouts.SIDEBAR_RIGHT\n\nexport const PageLayout = ({\n layout = DefaultLayout,\n children,\n sidebarChildren,\n width = PageLayoutWidth.MD,\n}: PageLayoutProps): JSX.Element => {\n const PageLayoutComponent = layoutComponents[layout in Layouts ? layout : DefaultLayout]\n return \n}\n","export * from './PageLayout'\n","export * from './CardIndication'\nexport * from './CollapsibleCard'\nexport * from './CommonSelectList'\nexport * from './ContextMenu'\nexport * from './List'\nexport * from './Notifications'\nexport * from './Pagination'\nexport * from './ProgressIndicator'\nexport * from './Switcher'\nexport * from './Tabs'\nexport * from './PageHeader'\nexport * from './PageLayout'\n","'use client'\nimport React from 'react'\n\nexport interface HeaderProps {\n logo?: React.ReactNode\n navigation: React.ReactNode\n search?: React.ReactNode\n extraItems: React.ReactNode\n}\n\nexport const Header = ({ logo, navigation, search, extraItems }: HeaderProps) => {\n return (\n <>\n
    \n {logo &&
    {logo}
    }\n {navigation &&
    {navigation}
    }\n {search &&
    {search}
    }\n {extraItems &&
    {extraItems}
    }\n
    \n \n )\n}\n","export * from './Header'\n","'use client'\nimport { ComponentTranslationContext, useFilterContext } from '@lib/providers'\nimport { CloseIcon, FilterIcon } from '@lib/components/icons'\nimport React, { useContext } from 'react'\nimport { Button, ButtonVariants } from '../../atoms'\nimport { MESSAGE_KEYS } from '@lib/constants/messageKeys'\n\nexport interface FilterActionsProps extends React.HTMLAttributes {}\n\nexport const FilterActions = ({ ...props }: FilterActionsProps): JSX.Element => {\n const { getLabel } = useContext(ComponentTranslationContext)\n const { isExpanded, toggleFilters, clearFilters, hasClearableFilters, isInitialized } = useFilterContext()\n\n if (!isInitialized) return <>\n\n return (\n
    \n }\n onClick={() => toggleFilters()}\n data-testid=\"toggle-filters\"\n >\n {isExpanded && getLabel(MESSAGE_KEYS.FILTERS_HIDE)}\n {!isExpanded && getLabel(MESSAGE_KEYS.FILTERS_SHOW)}\n \n {hasClearableFilters && (\n }\n onClick={() => clearFilters()}\n data-testid=\"clear-filters\"\n >\n {getLabel(MESSAGE_KEYS.FILTERS_RESET)}\n \n )}\n
    \n )\n}\n","'use client'\nimport { useFilterContext } from '@lib/providers'\nimport React from 'react'\nimport { motion } from 'framer-motion'\n\nexport interface FiltersProps extends React.HTMLAttributes {\n children: React.ReactNode\n}\n\nexport const Filters = ({ children }: FiltersProps): JSX.Element => {\n const { isExpanded, isInitialized } = useFilterContext()\n\n if (!isInitialized) return <>\n\n return (\n \n
    \n
    {children}
    \n
    \n \n )\n}\n","'use client'\nimport React from 'react'\n\nexport interface FilterItemProps {\n width?: 'small' | 'medium' | 'large' | 'unset'\n children: React.ReactNode\n}\n\nexport const FilterItem = ({ width = 'medium', children }: FilterItemProps): JSX.Element => {\n let widthClass = 'w-52'\n switch (width) {\n case 'small':\n widthClass = 'w-40'\n break\n case 'medium':\n widthClass = 'w-52'\n break\n case 'large':\n widthClass = 'w-64'\n break\n case 'unset':\n widthClass = ''\n break\n }\n\n return
    {children}
    \n}\n","'use client'\nimport { useFilterContext } from '@lib/providers/filter-provider'\nimport { FilterOperator, FilterValue } from '@lib/types/Filters'\nimport { useEffect, useState } from 'react'\n\nconst OPERATOR = FilterOperator.EQUALS\n\n/**\n * Hook used by select filters. Registers the filter and handles updates to the filter and its selected value.\n */\nexport const useSelectFilter = (filterName: string, initialValue?: FilterValue) => {\n const { filters, registerFilter, updateFilterValue, getFilterId, getFilterValue, getFilterById } =\n useFilterContext()\n const filterId = getFilterId(filterName, OPERATOR)\n const [selectedValue, setSelectedValue] = useState(getFilterValue(filterId))\n\n useEffect(() => {\n registerFilter({\n id: filterId,\n key: filterName,\n operator: OPERATOR,\n value: getFilterValue(filterId) ?? initialValue,\n })\n }, [])\n\n /**\n * Update the filter value when\n * - the selected value updates and\n * - differs from the filter value\n **/\n const handleSelectedValueUpdate = () => {\n const filter = getFilterById(filterId)\n\n if (filter && filter.value !== selectedValue) {\n updateFilterValue({ filter: filter, newValue: selectedValue })\n }\n }\n\n /**\n * Update the selected value when\n * - filter exists and\n * - selectedValue differs from the filter value\n */\n const handleFilterUpdate = () => {\n const filter = getFilterById(filterId)\n if (filter) {\n const matchingFilter = filters.find((stateFilter) => stateFilter.id === filter.id)\n if (matchingFilter && selectedValue !== matchingFilter?.value) {\n setSelectedValue(matchingFilter.value)\n }\n }\n }\n\n useEffect(() => {\n handleFilterUpdate()\n }, [filters])\n\n useEffect(() => {\n handleSelectedValueUpdate()\n }, [selectedValue])\n\n const fieldName = `select-filter_${filterName}[${OPERATOR}]`\n\n return {\n fieldName,\n selectedValue,\n setSelectedValue,\n }\n}\n","'use client'\nimport { FormField, SelectInput } from '@lib/components/FormElements'\nimport React, { ReactNode } from 'react'\nimport { FilterItem, FilterItemProps } from '../FilterItem'\nimport { SelectInputProps, SelectOptionValue, SelectOption } from '@lib/types/SelectInput'\nimport { useSelectFilter } from '@lib/components/organisms/Filter/hooks/useSelectFilter'\n\nexport interface SelectFilterProps\n extends Omit,\n Pick {\n /** \"name\" of object that should be filtered on. Will be used to create unique ID for \"Filter\" Object. This should be exactly the key that the API needs to filter on */\n name: string\n label?: string | ReactNode\n}\n\nexport const SelectFilter = ({ label, options, name, width, ...props }: SelectFilterProps): JSX.Element => {\n const { fieldName, selectedValue, setSelectedValue } = useSelectFilter(name, props.defaultValue)\n\n return (\n \n \n setSelectedValue(option?.value)}\n name={fieldName}\n isMulti={false}\n />\n \n \n )\n}\n","'use client'\nimport { FormDatePickerProps, FormDatePicker } from '@lib/components/FormElements'\nimport { useFilterContext } from '@lib/providers/filter-provider'\nimport { FilterOperator } from '@lib/types/Filters'\nimport React from 'react'\nimport { useEffect, useState } from 'react'\nimport { FilterItem } from '../FilterItem'\n\nexport interface DateFilterProps extends Omit {\n /** \"name\" of object that should be filtered on. Will be used to create unique ID for \"Filter\" Object. This should be exactly the key that the API needs to filter on */\n name: string\n label: string\n operator: FilterOperator\n fieldName: string\n}\n\nexport const DateFilter = ({\n label,\n name,\n operator = FilterOperator.GREATER_THAN_OR_EQUAL,\n fieldName,\n ...props\n}: DateFilterProps): JSX.Element => {\n const { filters, registerFilter, updateFilterValue, getFilterId, getFilterValue, getFilterById } =\n useFilterContext()\n const filterId = getFilterId(name, operator)\n const defaultValue = getFilterValue(filterId)\n const formattedDefaultValue = (\n defaultValue && typeof defaultValue === 'string' ? new Date(defaultValue) : defaultValue\n ) as Date\n const [selectedValue, setSelectedValue] = useState(formattedDefaultValue)\n\n useEffect(() => {\n registerFilter({\n id: filterId,\n key: name,\n operator: operator,\n value: selectedValue,\n })\n }, [])\n\n useEffect(() => {\n const filter = getFilterById(filterId)\n if (filter) {\n updateFilterValue({ filter: filter, newValue: selectedValue })\n }\n }, [selectedValue])\n\n useEffect(() => {\n const filter = getFilterById(filterId)\n if (filter) {\n const matchingFilter = filters.find((stateFilter) => stateFilter.id === filter.id)\n if (matchingFilter) {\n if (matchingFilter.value === (null || undefined)) {\n //@ts-ignore\n setSelectedValue(matchingFilter.value)\n } else if (\n matchingFilter?.value instanceof Date &&\n selectedValue?.getTime() !== matchingFilter?.value?.getTime()\n ) {\n setSelectedValue(matchingFilter.value)\n }\n }\n }\n }, [filters])\n\n return (\n \n setSelectedValue(date)}\n id={fieldName}\n placeholderText=\"DD/MM/YYYY\"\n />\n \n )\n}\n","'use client'\nimport { FormField, FormDatePickerProps } from '@lib/components/FormElements'\nimport { ComponentTranslationContext } from '@lib/providers'\nimport { FilterOperator } from '@lib/types/Filters'\nimport React, { useContext } from 'react'\nimport { DateFilter } from './DateFilter'\nimport { MESSAGE_KEYS } from '@lib/constants/messageKeys'\n\nexport interface FromToDateFilterProps extends Omit {\n /** \"name\" of object that should be filtered on. Will be used to create unique ID for \"Filter\" Object. This should be exactly the key that the API needs to filter on */\n name: string\n label: string\n}\n\nexport const FromToDateFilter = ({ label, name, ...props }: FromToDateFilterProps): JSX.Element => {\n const { getLabel } = useContext(ComponentTranslationContext)\n const fromFieldName = `date-filter_${name}[${FilterOperator.GREATER_THAN_OR_EQUAL}]`\n const toFieldName = `date-filter_${name}[${FilterOperator.LESSER_THAN_OR_EQUAL}]`\n\n return (\n \n
    \n \n {getLabel(MESSAGE_KEYS.TO)}\n \n
    \n
    \n )\n}\n","'use client'\nimport { Switcher, SwitcherId, SwitcherProps } from '@lib/components/molecules/Switcher'\nimport { useFilterContext } from '@lib/providers'\nimport { FilterOperator, FilterValue } from '@lib/types/Filters'\nimport React, { useEffect, useState } from 'react'\n\nexport interface SwitcherFilterProps extends SwitcherProps {\n /** \"name\" of object that should be filtered on. Will be used to create unique ID for \"Filter\" Object. This should be exactly the key that the API needs to filter on */\n name: string\n isLoading?: boolean\n}\n\nconst OPERATOR = FilterOperator.EQUALS\n\nexport const SwitcherFilter = ({\n name,\n items,\n initialItem,\n onSwitch,\n isLoading = false,\n ...props\n}: SwitcherFilterProps): JSX.Element => {\n const { filters, registerFilter, updateFilterValue, getFilterId, getFilterValue, getFilterById } =\n useFilterContext()\n const filterId = getFilterId(name, OPERATOR)\n\n const [selectedValue, setSelectedValue] = useState(getFilterValue(filterId) ?? items[0]?.id)\n\n useEffect(() => {\n registerFilter({\n id: filterId,\n key: name,\n operator: OPERATOR,\n value: selectedValue,\n nonClearable: true,\n })\n }, [])\n\n useEffect(() => {\n const filter = getFilterById(filterId)\n if (filter && filter.value !== selectedValue) {\n updateFilterValue({ filter: filter, newValue: selectedValue })\n }\n }, [selectedValue])\n\n useEffect(() => {\n const filter = getFilterById(filterId)\n if (filter) {\n const matchingFilter = filters.find((stateFilter) => stateFilter.id === filter.id)\n if (matchingFilter && selectedValue !== matchingFilter?.value) {\n setSelectedValue(matchingFilter.value)\n }\n }\n }, [filters])\n\n const onSwitchHandler = (id: string | number): void => {\n setSelectedValue(id)\n }\n\n return (\n <>\n \n \n )\n}\n","'use client'\n\nimport React from 'react'\nimport { ContextMenuItem } from '@lib/components/molecules'\nimport { CheckmarkSmallIcon, IconSizes } from '@lib/components/icons'\nimport { ButtonProps } from '@lib/components/atoms'\n\nexport interface ContextMenuSelectFilterOptionProps extends ButtonProps {\n isSelected: boolean\n}\n\nexport const ContextMenuSelectFilterOption = ({\n children,\n isSelected,\n ...props\n}: ContextMenuSelectFilterOptionProps): JSX.Element => {\n return (\n \n )\n }\n >\n {children}\n \n )\n}\n","'use client'\nimport React, { useContext, useEffect } from 'react'\nimport { useState } from 'react'\nimport { ContextMenuDivider } from '@lib/components/molecules/ContextMenu/ContextMenuDivider'\nimport { SelectFilterProps } from '@lib/components/organisms/Filter/variants'\nimport { ComponentTranslationContext } from '@lib/providers'\nimport { FilterValue, SelectOption } from '@lib/types'\nimport { MESSAGE_KEYS } from '@lib/constants/messageKeys'\nimport { useSelectFilter } from '@lib/components/organisms/Filter/hooks/useSelectFilter'\nimport { ContextMenuSelectFilterOption } from '@lib/components/organisms/Filter/variants/ContextMenuSelectFilter/ContextMenuSelectFilterOption'\nimport { Spinner } from '@lib/components/atoms'\n\nconst EMPTY_VALUE = ''\n\n/**\n * A version of a select filter that can be used in a context menu.\n */\nexport const ContextMenuSelectFilter = ({\n label,\n options,\n name,\n width,\n isClearable,\n defaultValue = EMPTY_VALUE,\n isLoading,\n}: SelectFilterProps): JSX.Element => {\n const { selectedValue, setSelectedValue } = useSelectFilter(name, defaultValue)\n const [selectOptions, setSelectOptions] = useState([])\n const { getLabel } = useContext(ComponentTranslationContext)\n\n const getOptions = (): SelectOption[] => {\n if (!!options?.length) {\n if (isClearable) {\n let newOptions = options ? [...options] : []\n\n newOptions?.unshift({ label: getLabel(MESSAGE_KEYS.ALL), value: EMPTY_VALUE })\n return newOptions\n }\n return options\n }\n return []\n }\n\n useEffect(() => {\n if (!selectOptions.length && !!options?.length) setSelectOptions(getOptions())\n }, [options])\n\n const select = (value: FilterValue) => {\n setSelectedValue(value)\n }\n\n return (\n <>\n \n {isLoading && }\n {selectOptions?.map((option, index) => {\n return (\n select(option.value)}\n isSelected={option.value === selectedValue}\n >\n {option.label}\n \n )\n })}\n \n )\n}\n","export * from './ContextMenuSelectFilter'\n","'use client'\n\nimport { useFilterContext } from '@lib/providers/filter-provider'\nimport { FilterOperator, FilterValue } from '@lib/types/Filters'\nimport { useEffect, useState } from 'react'\n\n/**\n * Hook that can be used by default filters, i.e. filters on a string. Registers the filter and handles updates to the filter and its value.\n * @param filterName Name of the filter, used in creating a unique ID for the filter\n * @param operator The operator used to match the filter with the set of data\n * @param initialValue Initial value of the filter\n */\nexport const useDefaultFilter = (filterName: string, operator: FilterOperator, initialValue?: FilterValue) => {\n const { filters, registerFilter, updateFilterValue, getFilterId, getFilterValue, getFilterById } =\n useFilterContext()\n const filterId = getFilterId(filterName, operator)\n const [value, setValue] = useState(getFilterValue(filterId))\n\n useEffect(() => {\n registerFilter({\n id: filterId,\n key: filterName,\n operator: operator,\n value: getFilterValue(filterId) ?? initialValue,\n })\n }, [])\n\n /**\n * Update the filter value when\n * - the value updates and\n * - differs from the filter value\n **/\n const handleValueUpdate = () => {\n const filter = getFilterById(filterId)\n\n if (filter && filter.value !== value) {\n updateFilterValue({ filter: filter, newValue: value })\n }\n }\n\n /**\n * Update the selected value when\n * - filter exists and\n * - selectedValue differs from the filter value\n */\n const handleFilterUpdate = () => {\n const filter = getFilterById(filterId)\n if (filter) {\n const matchingFilter = filters.find((stateFilter) => stateFilter.id === filter.id)\n if (matchingFilter && value !== matchingFilter?.value) {\n setValue(matchingFilter.value)\n }\n }\n }\n\n useEffect(() => {\n handleFilterUpdate()\n }, [filters])\n\n useEffect(() => {\n handleValueUpdate()\n }, [value])\n\n const fieldName = `default-filter_${filterName}[${operator}]`\n\n return {\n fieldName,\n value,\n setValue,\n }\n}\n","'use client'\nimport { FormField, FormInput } from '@lib/components/FormElements'\nimport React, { ReactNode } from 'react'\nimport { FilterItem, FilterItemProps } from '../FilterItem'\nimport { useDefaultFilter } from '../hooks/useDefaultFilter'\nimport { FilterOperator } from '@lib/types'\n\nexport interface TextFilterProps extends Pick {\n /** \"name\" of object that should be filtered on. Will be used to create unique ID for \"Filter\" Object. This should be exactly the key that the API needs to filter on */\n name: string\n label?: string | ReactNode\n operator?: FilterOperator\n}\n\nexport const TextFilter = ({\n label,\n operator = FilterOperator.EQUALS,\n name,\n width,\n ...props\n}: TextFilterProps): JSX.Element => {\n const { fieldName, value, setValue } = useDefaultFilter(name, operator)\n\n return (\n \n \n setValue(value)}\n name={fieldName}\n />\n \n \n )\n}\n","export * from './SelectFilter'\nexport * from './FromToDateFilter'\nexport * from './SwitcherFilter'\nexport * from './DateFilter'\nexport * from './ContextMenuSelectFilter'\nexport * from './TextFilter'\n","export * from './FilterActions'\nexport * from './Filters'\nexport * from './variants'\n","'use client'\n\nimport React from 'react'\n\nexport interface MainNavigationProps {\n children: React.ReactNode\n}\n\nexport const MainNavigation = ({ children }: MainNavigationProps) => {\n return
    {children}
    \n}\n","'use client'\nimport React, { createRef, LegacyRef, useState } from 'react'\nimport useOnClickOutside from '../../../../hooks/useOutsideClick'\n\nexport interface MainNavigationItemWrapperProps {\n children: React.ReactNode\n}\n\nexport const MainNavigationItemWrapper = ({ children }: MainNavigationItemWrapperProps) => {\n const [isShowingSubItems, setIsShowingSubItems] = useState(false)\n const ref: LegacyRef | null = createRef()\n\n const handleOutsideClick = () => {\n if (isShowingSubItems) {\n setIsShowingSubItems(false)\n }\n }\n\n useOnClickOutside(ref, handleOutsideClick)\n\n return (\n setIsShowingSubItems(true)}\n onMouseEnter={() => setIsShowingSubItems(true)}\n onMouseLeave={() => setIsShowingSubItems(false)}\n >\n {children}\n
    \n )\n}\n","export * from './MainNavigationItemWrapper'","'use client'\n\nimport React, { ReactNode } from 'react'\n\nexport interface MainNavigationItemProps {\n isActive?: boolean\n title: ReactNode\n hasSubNavigation?: boolean\n}\n\nexport const MainNavigationItem = ({ isActive, title, hasSubNavigation = false }: MainNavigationItemProps) => {\n const defaultClasses = 'bg-transparent border-transparent'\n const hoverClasses = !isActive && 'hover:bg-accent-opacity-100 hover:border-accent-50 hover:text-text-interactive'\n const activeClasses =\n !isActive && 'active:bg-accent-opacity-100 hover:border-accent-100 active:text-text-interactive'\n const focusClasses = !isActive && 'focus:bg-accent-opacity-100 focus:border-accent-600 focus:text-text-interactive'\n const selectedClasses = isActive ? 'text-text-interactive' : 'text-text-secondary'\n const cursorClasses = hasSubNavigation && 'cursor-default'\n\n const classes = `${defaultClasses} ${hoverClasses} ${activeClasses} ${focusClasses} ${selectedClasses} ${cursorClasses}`\n\n return (\n
    \n \n {title}\n \n
    \n )\n}\n","export * from './MainNavigationItem'","'use client'\n\nimport React from 'react'\n\nexport interface SubNavigationItemProps {\n children: React.ReactNode\n}\n\nexport const SubNavigationItem = ({ children }: SubNavigationItemProps) => {\n return (\n \n {children}\n \n )\n}\n","export * from './SubNavigationItem'","import { Text } from '@lib/components/atoms'\nimport { TextTypes } from '@lib/types'\nimport React from 'react'\n\ninterface Props {\n children: React.ReactNode\n}\n\nexport const SubNavigationSubHeading = ({ children }: Props) => {\n return (\n
    \n {children}\n
    \n )\n}\n","export * from './SubNavigationSubHeading'\n","'use client'\nimport React from 'react'\n\nexport interface SubNavigationWrapperProps {\n children: React.ReactNode\n}\n\nexport const SubNavigationWrapper = ({ children }: SubNavigationWrapperProps) => {\n return (\n
    \n
    {children}
    \n
    \n )\n}\n","export * from './SubNavigationWrapper'","export * from './MainNavigation'\nexport * from './MainNavigationItemWrapper'\nexport * from './MainNavigationItem'\nexport * from './SubNavigationItem'\nexport * from './SubNavigationSubHeading'\nexport * from './SubNavigationWrapper'\n","import { useEffect, useRef } from 'react'\n\n/** Indicates if it is the first render of a component */\nexport const useIsFirstRender = (): boolean => {\n const isFirstRender = useRef(true)\n useEffect(() => {\n isFirstRender.current = false\n }, [])\n return isFirstRender.current\n}\n","export enum ModalSizes {\n XS = 'max-w-xs',\n SM = 'max-w-sm',\n MD = 'max-w-md',\n LG = 'max-w-lg',\n XL = 'max-w-xl',\n XXL = 'max-w-2xl',\n XXXL = 'max-w-3xl',\n XXXXL = 'max-w-4xl',\n XXXXXL = 'max-w-5xl',\n}\n","'use client'\n\nimport { CloseIcon } from '@lib/components/icons'\nimport React, { createRef, RefObject, useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { useIsFirstRender } from '../../../hooks/useIsFirstRender'\nimport useOnClickOutside from '../../../hooks/useOutsideClick'\nimport { TextTypes } from '../../../types'\nimport { Backdrop, Button, ButtonVariants, Text } from '../../atoms'\nimport { ModalSizes } from './types/modalTypes'\n\nexport interface ModalProps {\n title?: string | React.ReactNode\n size?: ModalSizes\n children?: React.ReactNode\n footer?: React.ReactNode\n /** Place component next to modal title, i.e. a language switch */\n headerComponent?: React.ReactNode\n canBeClosed?: boolean\n isModalVisible: boolean\n setModalVisibility: React.Dispatch>\n hasBackdrop?: boolean\n stackedButtons?: boolean\n fullContentWidth?: boolean\n onHide?: () => void\n onShow?: () => void\n}\n\nconst DEFAULT_MODAL_SIZE = ModalSizes.MD\nconst MODAL_SCALE_INITIAL_CLASS = 'scale-75'\nconst MODAL_OPACITY_INITIAL_CLASS = 'opacity-0'\n\nexport const Modal = ({\n children,\n title,\n size = DEFAULT_MODAL_SIZE,\n stackedButtons,\n footer,\n headerComponent,\n canBeClosed = true,\n isModalVisible = false,\n setModalVisibility,\n hasBackdrop = true,\n fullContentWidth = false,\n onShow,\n onHide,\n ...props\n}: ModalProps) => {\n const [modalDialogRef, setModalDialogRef] = useState | null>(null)\n const [modalRoot, setModalRoot] = useState(null)\n const isFirstRender = useIsFirstRender()\n const backdropElement = createRef()\n\n useEffect(() => {\n setModalRoot(document.getElementById('modal-root'))\n }, [])\n\n const toggleModal = (): void => {\n setModalVisibility((prevValue) => !prevValue)\n }\n\n useEffect(() => {\n if (modalDialogRef?.current) return\n setModalDialogRef(createRef())\n }, [])\n\n const handleOutsideClick = (): void => {\n if (isModalVisible && canBeClosed) setModalVisibility(false)\n }\n\n useOnClickOutside(modalDialogRef!, handleOutsideClick)\n\n useEffect(() => {\n if (!isFirstRender) {\n if (isModalVisible && onShow) {\n onShow()\n } else if (!isModalVisible && onHide) {\n onHide()\n }\n }\n }, [isModalVisible])\n\n useEffect(() => {\n // if the modal is visible, remove the initial opacity and scale classes in the next animation frame\n // to trigger the transition\n if (isModalVisible && modalDialogRef?.current && backdropElement?.current) {\n requestAnimationFrame(() => {\n if (backdropElement.current && modalDialogRef?.current) {\n backdropElement.current.classList.remove(MODAL_OPACITY_INITIAL_CLASS)\n modalDialogRef.current.classList.remove(MODAL_OPACITY_INITIAL_CLASS)\n modalDialogRef.current.classList.remove(MODAL_SCALE_INITIAL_CLASS)\n }\n })\n }\n }, [isModalVisible, backdropElement, modalDialogRef])\n\n return (\n <>\n {modalRoot &&\n createPortal(\n <>\n {isModalVisible && (\n \n {hasBackdrop && (\n \n \n \n )}\n \n
    \n \n {title && (\n \n {title}\n \n )}\n {headerComponent && headerComponent}\n {canBeClosed && (\n }\n data-testid=\"close-modal-button\"\n />\n )}\n
    \n {children && (\n \n {children}\n \n )}\n {footer && (\n \n {footer}\n \n )}\n \n \n \n )}\n ,\n modalRoot,\n )}\n \n )\n}\n","'use client'\n\nimport React from 'react'\nimport { ModalSizes } from '../types/modalTypes'\nimport { Modal, ModalProps } from '../Modal'\n\nexport const ConfirmationModal = ({\n isModalVisible = false,\n size = ModalSizes.XS,\n stackedButtons = true,\n setModalVisibility,\n footer,\n title,\n children,\n onHide,\n}: ModalProps) => {\n return (\n \n {children}\n \n )\n}\n","export * from './ConfirmationModal'","'use client'\nimport React, { ReactNode } from 'react'\nimport { TextTypes } from '../../../../types'\nimport { Text } from '../../../atoms'\nimport { ModalSizes } from '../types/modalTypes'\nimport { Modal, ModalProps } from '../Modal'\n\nexport interface InfoModalProps extends Pick {\n body?: string\n children?: ReactNode\n}\n\nexport const InfoModal = ({\n children,\n isModalVisible,\n setModalVisibility,\n title,\n body,\n}: InfoModalProps): JSX.Element => {\n return (\n \n {body && {body}}\n {children && children}\n \n )\n}\n","export * from './InfoModal'\n","export * from './Modal'\nexport * from './types/modalTypes'\nexport * from './ConfirmationModal'\nexport * from './InfoModal'\n","'use client'\nimport React, { useContext } from 'react'\nimport { TableContext } from '@lib/providers'\nimport { Spinner } from '@lib/components/atoms'\n\nexport interface TableBodyProps extends React.HTMLAttributes {\n children?: React.ReactNode\n pagination?: JSX.Element\n}\n\nexport const TableBody = ({ children }: TableBodyProps) => {\n const { hideHeader, hasBorder, isLoading } = useContext(TableContext)\n\n return (\n \n {isLoading && (\n \n \n \n \n \n )}\n {children}\n \n )\n}\n","import {\n getStickyLeftPosition,\n getStickyRightPosition,\n} from '@lib/components/organisms/Table/hooks/helpers/stickyColumnHelpers'\nimport { TableContext } from '@lib/providers'\nimport { Column } from '@lib/types'\nimport { useRef, useState, useEffect, useContext } from 'react'\n\ninterface StickyStyling {\n left?: string\n right?: string\n}\n\nexport const useStickyColumn = (column?: Column) => {\n const ref = useRef(null)\n const [styling, setStyling] = useState({})\n const { columns, columnWidths } = useContext(TableContext)\n\n const isStickyLeft = (className: string) => className.includes('left')\n const isStickyRight = (className: string) => className.includes('right')\n const isStickyBorderless = (className: string) => className.includes('borderless')\n\n const setStickyPosition = () => {\n if (!column?.sticky || !ref?.current || !columnWidths) {\n return\n }\n\n const newStyling: StickyStyling = {}\n if (isStickyLeft(column.sticky)) newStyling.left = getStickyLeftPosition(column, columns, columnWidths) ?? ''\n if (isStickyRight(column.sticky)) newStyling.right = getStickyRightPosition(column, columns, columnWidths) ?? ''\n\n setStyling(newStyling)\n }\n\n const isLastLeftStickyColumn = (column: Column): boolean =>\n columns.filter((column) => column.sticky?.includes('left')).at(-1)?.id === column.id\n const isFirstRightStickyColumn = (column: Column): boolean =>\n columns.filter((column) => column.sticky?.includes('right')).at(0)?.id === column.id\n\n const getStickyClasses = (classPrefix: string): string => {\n let classes = ''\n if (column?.sticky) {\n classes += `${classPrefix}--sticky`\n if (isStickyLeft(column.sticky)) {\n classes += ` ${classPrefix}--sticky-left`\n if (isLastLeftStickyColumn(column)) classes += ` ${classPrefix}--sticky-left-last`\n }\n if (isStickyRight(column.sticky)) {\n classes += ` ${classPrefix}--sticky-right`\n if (isFirstRightStickyColumn(column)) classes += ` ${classPrefix}--sticky-right-first`\n }\n\n if (isStickyBorderless(column.sticky)) classes += ` ${classPrefix}--sticky__borderless`\n }\n\n return classes\n }\n\n useEffect(() => {\n setStickyPosition()\n }, [ref, columnWidths])\n\n return {\n getStickyClasses,\n setStickyPosition,\n ref,\n styling,\n }\n}\n","'use client'\n\nimport React, { HTMLAttributes, useContext } from 'react'\nimport { TableContext } from '@lib/providers'\nimport { Column } from '@lib/types/Table'\nimport { useStickyColumn } from '../hooks/UseStickyColumn'\nimport { TagColors, colorBackgroundClasses } from '@lib/components/atoms'\n\nexport const TABLE_CELL_ROOT_CLASS = 'table-cell'\n\nexport interface TableCellProps extends Omit, 'color'> {\n children?: React.ReactNode\n colSpan?: number\n column?: Column\n hasNoPadding?: boolean\n isEditable?: boolean\n stretchHeight?: boolean\n ignoreMinHeight?: boolean\n color?: TagColors\n}\n\nexport const TableCell = ({\n children,\n colSpan,\n column,\n hasNoPadding,\n isEditable,\n stretchHeight = false,\n ignoreMinHeight,\n color,\n ...props\n}: TableCellProps) => {\n const { isEditable: tableIsEditable, isNested, size, hasBackground } = useContext(TableContext)\n const { ref, styling, getStickyClasses } = useStickyColumn(column)\n\n const getClasses = (): string => {\n let classes = TABLE_CELL_ROOT_CLASS\n switch (column?.alignment) {\n case 'start':\n classes += ` ${TABLE_CELL_ROOT_CLASS}--start-aligned`\n break\n case 'center':\n classes += ` ${TABLE_CELL_ROOT_CLASS}--center-aligned`\n break\n case 'end':\n classes += ` ${TABLE_CELL_ROOT_CLASS}--end-aligned`\n break\n }\n switch (size) {\n case 'small':\n classes += ` ${TABLE_CELL_ROOT_CLASS}--small`\n break\n case 'medium':\n classes += ` ${TABLE_CELL_ROOT_CLASS}--medium`\n break\n case 'large':\n classes += ` ${TABLE_CELL_ROOT_CLASS}--large`\n break\n }\n if (column?.isActionColumn) classes += ` ${TABLE_CELL_ROOT_CLASS}--is-actions-cell`\n if (column?.hasNoPadding || hasNoPadding) classes += ` ${TABLE_CELL_ROOT_CLASS}--has-no-padding`\n if (!column?.hasNoPadding && !hasNoPadding && !isEditable && !stretchHeight && !column?.isActionColumn)\n classes += ` ${TABLE_CELL_ROOT_CLASS}--has-regular-padding`\n if (isEditable) classes += ` ${TABLE_CELL_ROOT_CLASS}--is-editable`\n if (stretchHeight) classes += ` ${TABLE_CELL_ROOT_CLASS}--stretch-height`\n if (column?.lineWrapping && column.lineWrapping >= 1) classes += ` ${TABLE_CELL_ROOT_CLASS}--wrapped`\n if (column?.lineWrapping && column.lineWrapping === 2) classes += ` ${TABLE_CELL_ROOT_CLASS}--wrapped-two-lines`\n if (column?.isStretched) classes += ` ${TABLE_CELL_ROOT_CLASS}--stretched`\n classes += ` ${getStickyClasses(TABLE_CELL_ROOT_CLASS)}`\n if (isNested) classes += ` ${TABLE_CELL_ROOT_CLASS}--nested`\n if (ignoreMinHeight) classes += ` ${TABLE_CELL_ROOT_CLASS}--ignore-min-height`\n if (tableIsEditable) classes += ` ${TABLE_CELL_ROOT_CLASS}--table-is-editable`\n if (!hasBackground) classes += ` ${TABLE_CELL_ROOT_CLASS}--no-background`\n if (color !== null && color !== undefined) classes += ` ${colorBackgroundClasses[color]}`\n if (props.className) classes += ` ${props.className}`\n\n return classes\n }\n\n return (\n \n
    \n
    {children}
    \n
    \n \n )\n}\n","'use client'\nimport React from 'react'\nimport { Column } from '@lib/types'\nimport { useFilterContext } from '@lib/providers/filter-provider'\nimport { SortingDirection } from '@lib/constants/sortingConstants'\nimport {\n FilteredAndSortedAscendingIcon,\n FilteredAndSortedDescendingIcon,\n FilterIcon,\n ArrowDownIcon,\n ArrowUpIcon,\n} from '@lib/components/icons'\n\ninterface TableHeaderCellIconProps {\n column?: Column\n}\n\nconst DEFAULT_HEADER_CELL_ICON = \n\nexport const TableHeaderCellIcon = ({ column }: TableHeaderCellIconProps): JSX.Element => {\n if (!column) return DEFAULT_HEADER_CELL_ICON\n const filterContext = useFilterContext()\n\n const columnIsFiltered = !!column.filterBy && !!filterContext?.hasFilterForKey(column.filterBy)\n\n if (columnIsFiltered) {\n switch (column?.sortDirection) {\n case SortingDirection.ASCENDING:\n return \n case SortingDirection.DESCENDING:\n return \n default:\n return \n }\n } else {\n switch (column?.sortDirection) {\n case SortingDirection.ASCENDING:\n return \n case SortingDirection.DESCENDING:\n return \n default:\n return DEFAULT_HEADER_CELL_ICON\n }\n }\n}\n","'use client'\n\nimport React, { useContext } from 'react'\nimport { TableContext } from '@lib/providers'\nimport { TableSizes } from '@lib/types'\nimport { Column, TableHeaderVariants } from '@lib/types/Table'\nimport { ComponentTranslationContext } from '@lib/providers'\nimport { useStickyColumn } from '../hooks/UseStickyColumn'\nimport { SortingDirection } from '@lib/constants/sortingConstants'\nimport { TableHeaderCellIcon } from './TableHeaderCellIcon'\nimport { Tooltip } from '@lib/components/atoms'\nimport { MESSAGE_KEYS } from '@lib/constants/messageKeys'\n\nexport interface TableHeaderCellProps {\n children?: React.ReactNode\n column?: Column\n}\n\nexport const TableHeaderCell = ({ children, column }: TableHeaderCellProps): JSX.Element => {\n const { sortHandler, isNested, isInline, isStretched, size, headerVariant } = useContext(TableContext)\n const { getLabel } = useContext(ComponentTranslationContext)\n const { ref, styling, getStickyClasses } = useStickyColumn(column)\n const rootClass = 'table-header-cell'\n\n const onSort = () => {\n if (!column?.sortBy || !sortHandler) return\n sortHandler(column?.sortBy)\n }\n\n const isSortable: boolean = !!column?.sortBy && !!sortHandler\n const isSorted: boolean = !!column?.sortDirection && column?.sortDirection !== SortingDirection.NONE\n\n const getClasses = (): string => {\n let classes = rootClass\n\n if (headerVariant === TableHeaderVariants.QUIET) classes += ` ${rootClass}--quiet`\n\n switch (column?.alignment) {\n case 'start':\n classes += ` ${rootClass}--start-aligned`\n break\n case 'center':\n classes += ` ${rootClass}--center-aligned`\n break\n case 'end':\n classes += ` ${rootClass}--end-aligned`\n break\n }\n switch (size) {\n case TableSizes.SMALL:\n classes += ` ${rootClass}--small`\n break\n case TableSizes.MEDIUM:\n classes += ` ${rootClass}--medium`\n break\n case TableSizes.LARGE:\n classes += ` ${rootClass}--large`\n break\n }\n if (column?.isActionColumn) classes += ` ${rootClass}--is-actions-cell`\n if (isSortable) classes += ` ${rootClass}--sortable`\n if (isSorted) classes += ` ${rootClass}--sorted`\n if (isNested) classes += ` ${rootClass}--nested`\n if (isInline) classes += ` ${rootClass}--inline`\n if (isStretched) classes += ` ${rootClass}--stretched`\n classes += ` ${getStickyClasses(rootClass)}`\n return classes\n }\n\n const getAlignmentClass = (): string => {\n switch (column?.alignment) {\n default:\n case 'start':\n return 'justify-start'\n case 'center':\n return 'justify-center'\n case 'end':\n return 'justify-end'\n }\n }\n\n /** Empty value is either \"acties\" for the action column OR a space.\n * It has to be a space because of table-behaviour in the browser, without the space the design is off.\n */\n const EMPTY_CELL_VALUE = <> \n\n const tooltip: JSX.Element = column?.tooltip ? : <>\n\n return (\n \n
    \n
    \n {(isSortable || column?.filterBy) && (\n <>\n

    {children || EMPTY_CELL_VALUE}

    \n {tooltip}\n \n \n )}\n {!isSortable && !column?.filterBy && (\n <>\n
    \n {children || EMPTY_CELL_VALUE}\n {column?.isActionColumn && (\n \n {getLabel(MESSAGE_KEYS.TABLE_ACTIONS)}\n \n )}\n
    \n {tooltip}\n \n )}\n
    \n
    \n \n )\n}\n","'use client'\nimport React from 'react'\nimport { Column, TableHeaderVariants } from '../../../../types'\nimport { TableHeaderCell } from './TableHeaderCell'\nimport { useTableContext } from '@lib/providers'\n\nexport interface TableHeaderProps {}\n\nexport const TableHeader = ({}: TableHeaderProps): JSX.Element => {\n const { columns, isScrollable, isInline, headerVariant } = useTableContext()\n\n return (\n \n \n {columns.map((column: Column, index: number) => (\n \n {column.title}\n \n ))}\n \n \n )\n}\n","'use client'\nimport React, { useContext } from 'react'\nimport { TableHeader } from './TableHeader'\nimport { TableContext } from '@lib/providers'\nimport { TableSizes } from '@lib/types'\nimport { Retain, RetainBehaviorModifier } from '@lib/components/atoms'\nimport { TableBody } from '@lib/components/organisms/Table/partials/TableBody'\n\nexport interface TableContainerProps extends React.HTMLAttributes {\n children?: React.ReactNode\n pagination?: JSX.Element\n renderTBodyElement?: boolean\n 'data-testid'?: string\n}\n\nexport const TableContainer = ({ pagination, children, renderTBodyElement, ...props }: TableContainerProps) => {\n const { isScrollable, isInline, isNested, isStretched, size, hideHeader, tableId } = useContext(TableContext)\n\n const wrapperClasses = (): string => {\n let classes = 'table-component'\n\n switch (size) {\n case TableSizes.SMALL:\n classes += ' table-component--small'\n break\n case TableSizes.MEDIUM:\n classes += ' table-component--medium'\n break\n case TableSizes.LARGE:\n classes += ' table-component--large'\n break\n }\n\n if (isNested) classes += ' table-component--nested'\n if (isScrollable) classes += ' table-component--scrollable'\n if (isInline) classes += ' table-component--inline'\n if (isStretched) classes += ' table-component--stretched'\n\n return classes\n }\n\n const sizingBoxClasses = (): string => {\n let classes = 'table-component__sizing-box'\n if (isStretched) classes += ' absolute inset-0'\n return classes\n }\n\n const tableWrapperClasses = (): string => {\n let classes = 'table-component__wrapper'\n if (isInline) classes += ' w-full'\n if (isStretched) classes += ' overflow-auto'\n if (isScrollable) classes += ' h-full'\n return classes\n }\n\n const paginationClasses = (): string => {\n let classes = 'table-component__pagination relative z-10'\n if (isInline) classes += ' w-full'\n return classes\n }\n\n return (\n
    \n
    \n
    \n \n \n {!hideHeader && }\n {renderTBodyElement !== false ? {children} : children}\n \n \n
    \n
    \n\n {pagination && (\n \n {pagination}\n \n )}\n
    \n )\n}\n","'use client'\nimport { Button, ButtonVariants } from '@lib/components/atoms'\nimport { ChevronDownIcon } from '@lib/components/icons'\nimport React from 'react'\nimport { TableCell } from './TableCell'\nimport { useTableContext } from '@lib/providers'\n\ninterface CollapseRowCellProps {\n isCollapsed: boolean\n hasContent: boolean\n toggleIsCollapsed: () => void\n}\n\nexport const CollapseRowCell = ({ isCollapsed, hasContent, toggleIsCollapsed }: CollapseRowCellProps): JSX.Element => {\n const { columns } = useTableContext()\n\n return (\n \n {hasContent && (\n }\n variant={ButtonVariants.QUIET}\n onClick={() => toggleIsCollapsed()}\n data-testid=\"toggle-collapse-button\"\n />\n )}\n \n )\n}\n","'use client'\nimport React from 'react'\nimport { useTableContext } from '@lib/providers'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { COLLAPSE_ANIMATION_DURATION, COLLAPSE_ANIMATION_EASING } from '@lib/constants/animationConstants'\n\ninterface CollapseContentCellProps extends React.HTMLAttributes {\n isCollapsed: boolean\n children: React.ReactNode\n}\n\nexport const CollapseContentCell = ({ isCollapsed, children }: CollapseContentCellProps): JSX.Element => {\n const { columns, isInline } = useTableContext()\n\n const lastColumn = columns.at(-1)\n\n if (!lastColumn || !children) return <>\n\n return (\n \n {!isCollapsed && (\n \n \n \n
    {children}
    \n \n \n \n )}\n
    \n )\n}\n","'use client'\nimport React, { forwardRef, HTMLAttributes, ReactElement, Ref, useState } from 'react'\nimport { useTableContext } from '@lib/providers'\nimport { CollapseRowCell } from './CollapseRowCell'\nimport { CollapseContentCell } from './CollapseContentCell'\nimport { TableCellProps } from './TableCell'\nimport { TagColors, colorBackgroundClasses } from '@lib/components/atoms'\n\nexport interface TableRowProps extends Omit, 'color'> {\n children?: React.ReactNode\n collapsedContent?: React.ReactNode\n onClick?: () => void\n color?: TagColors\n className?: string\n}\n\nexport const TableRow = forwardRef(({ children, collapsedContent, color, onClick, ...props }: TableRowProps, ref: Ref) => {\n const [isCollapsed, setIsCollapsed] = useState(true)\n const { isCollapsible, isInline, isNested, hasBorder, columns } = useTableContext()\n\n const toggleIsCollapsed = () => {\n setIsCollapsed((collapsed) => !collapsed)\n }\n\n const childrenWithColumnProp = React.Children.map(\n React.Children.toArray(children).filter((child) => !!child), // This filters out possible conditional table-cells. These conditional cells would otherwise be a child with value \"false\" and therefore mess up the indexing of the columns\n (element, index) => {\n if (React.isValidElement(element)) {\n return React.cloneElement(element as ReactElement, {\n column: columns[index],\n })\n }\n return element\n },\n )\n\n const getClasses = (): string => {\n let classes = 'border-border-default relative'\n if (isCollapsed) classes += ' border-b'\n if (isInline && hasBorder) classes += ' border-x'\n if (isNested || !hasBorder) classes += ' last:border-b-0'\n if (color !== null && color !== undefined) classes += ` ${colorBackgroundClasses[color]}`\n if (!!props.className) classes += ` ${props.className}`\n return classes\n }\n\n return (\n <>\n {\n onClick && onClick()\n }}\n ref={ref}\n >\n {childrenWithColumnProp}\n {isCollapsible && (\n \n )}\n \n {collapsedContent && (\n {collapsedContent}\n )}\n \n )\n})\n","'use client'\nimport React from 'react'\nimport { TableCell } from './TableCell'\nimport { ContextMenu } from '../../../molecules/ContextMenu/ContextMenu'\n\nexport interface TableRowActionsProps {\n children: React.ReactNode\n}\n\nexport const TableRowActions = ({ children, ...props }: TableRowActionsProps) => {\n return (\n \n {children}\n \n )\n}\n","export * from './TableBody'\nexport * from './TableCell'\nexport * from './TableContainer'\nexport * from './TableHeader'\nexport * from './TableHeaderCell'\nexport * from './TableRow'\nexport * from './TableRowActions'\n","'use client'\nimport React from 'react'\nimport { TableProvider } from '@lib/providers'\nimport { TableSizes, TableVariants } from '@lib/types'\nimport { Column, TableHeaderVariants } from '@lib/types'\nimport { TableContainer } from './partials'\n\nexport interface TableProps extends React.HTMLAttributes {\n children?: React.ReactNode\n columns: Column[]\n isCollapsible?: boolean\n isEditable?: boolean\n isLoading?: boolean\n pagination?: JSX.Element\n size?: TableSizes\n renderTbodyElement?: boolean\n sortHandler?: (sortBy: string) => void\n variant?: TableVariants\n headerVariant?: TableHeaderVariants\n hideHeader?: boolean\n hasBorder?: boolean\n hasBackground?: boolean\n 'data-testid'?: string\n}\n\nexport const Table = ({\n children,\n columns,\n isCollapsible = false,\n isEditable = false,\n isLoading = false,\n pagination,\n size,\n renderTbodyElement,\n sortHandler,\n variant = TableVariants.STRETCHED,\n headerVariant = TableHeaderVariants.REGULAR,\n hideHeader = false,\n hasBorder = true,\n hasBackground = true,\n ...props\n}: TableProps) => {\n return (\n \n \n {children}\n \n \n )\n}\n","'use client'\nimport React from 'react'\n\ninterface TableBottomControls extends React.HTMLAttributes {\n children: JSX.Element\n}\n\nexport const TableBottomControls = ({ children, ...props }: TableBottomControls): JSX.Element => {\n return (\n
    \n {children}\n
    \n )\n}\n","'use client'\nimport React, { ReactElement, ReactNode, useId } from 'react'\nimport { TextTypes } from '../../../types'\nimport { Button, ButtonProps, Text, Tooltip } from '../../atoms'\nimport { SwitcherProps } from '../../molecules'\nimport { FilterActions } from '../Filter/FilterActions'\nimport { Filters, FiltersProps } from '../Filter/Filters'\n\nexport interface TableTopControlsProps {\n title: ReactNode\n /** Size of the title. Has no default value so a size is implicitly chosen for the usecase. NOTE: \"TextTypes.HEADING_1\" renders an actual \"h1\" */\n titleHeadingSize: TextTypes.HEADING_1 | TextTypes.HEADING_2 | TextTypes.HEADING_3\n description?: ReactNode\n /** Slot for a (filter/search) component(s) */\n leftContent?: ReactElement\n filterContentSwitcher?: ReactElement\n filters?: ReactElement\n actions?: ReactElement | Array>\n}\n\nexport const TableTopControls = ({\n title,\n titleHeadingSize,\n description,\n leftContent,\n filterContentSwitcher,\n filters,\n actions,\n}: TableTopControlsProps): JSX.Element => {\n const showDescriptionAsTooltip = !!(leftContent || filters || filterContentSwitcher)\n const id = useId()\n\n return (\n
    \n
    \n {title && titleHeadingSize && (\n
    \n {title}\n {description && showDescriptionAsTooltip && (\n \n )}\n {description && !showDescriptionAsTooltip && (\n {description}\n )}\n
    \n )}\n\n {leftContent &&
    {leftContent}
    }\n\n {filterContentSwitcher &&
    {filterContentSwitcher}
    }\n\n {filters && }\n\n {actions &&
    {actions}
    }\n
    \n\n {filters && {filters}}\n
    \n )\n}\n","export * from './Table'\nexport * from './TableBottomControls'\nexport * from './TableTopControls'\nexport * from './partials'\n","export enum LayoutContentPaneType {\n CONTENT = 'content',\n}\nexport enum LayoutSidebarPaneType {\n SIDEBAR_STICKY_LEFT = 'sidebar-sticky-left',\n SIDEBAR_STICKY_RIGHT = 'sidebar-sticky-right',\n SIDEBAR_INLINE_LEFT = 'sidebar-inline-left',\n SIDEBAR_INLINE_RIGHT = 'sidebar-inline-right',\n SIDEBAR_FIXED = 'sidebar-fixed',\n}\nexport enum LayoutTopPaneType {\n TOP_PANE_STICKY = 'top-pane-sticky',\n TOP_PANE_INLINE = 'top-pane-inline',\n TOP_PANE_FIXED = 'top-pane-fixed',\n}\nexport enum LayoutBottomPaneType {\n BOTTOM_PANE_STICKY = 'bottom-pane-sticky',\n BOTTOM_PANE_INLINE = 'bottom-pane-inline',\n BOTTOM_PANE_FIXED = 'bottom-pane-fixed',\n}\n\nexport const LAYOUT_PANE_CATEGORIES = ['top-pane', 'sidebar', 'content', 'bottom-pane']\nexport const KEYWORD_OUTER_CHILDREN = 'fixed'\nexport const VALID_OUTER_CHILDREN = ['top-pane', 'sidebar', 'bottom-pane']\n\nexport type LayoutPaneCategoryType = 'top-pane' | 'sidebar' | 'content' | 'bottom-pane'\nexport type LayoutPaneSubtype = LayoutTopPaneType | LayoutSidebarPaneType | LayoutContentPaneType | LayoutBottomPaneType\n","import {\n LayoutBottomPaneState,\n LayoutSidebarState,\n LayoutTopPaneState,\n} from '@lib/components/organisms/Layout/Types/layoutTypes'\nimport {\n LayoutTopPaneType,\n LayoutPaneSubtype,\n LayoutSidebarPaneType,\n LayoutBottomPaneType,\n} from '../Panes/types-and-constants/LayoutPaneTypesAndConstants'\nimport { RetainBehaviorModifier } from '@lib/components/atoms/Retain/constants/modifiers'\nimport { LayoutContextProps } from '@lib/providers'\n\nconst getSidebarRetainBehavior = (sidebarState?: LayoutSidebarState): RetainBehaviorModifier => {\n switch (sidebarState?.paneType) {\n case LayoutSidebarPaneType.SIDEBAR_STICKY_LEFT:\n return RetainBehaviorModifier.PADDING_INLINE_START\n case LayoutSidebarPaneType.SIDEBAR_STICKY_RIGHT:\n return RetainBehaviorModifier.PADDING_INLINE_END\n default:\n return RetainBehaviorModifier.PADDING\n }\n}\n\nconst getContentRetainBehavior = (sidebarState?: LayoutSidebarState): RetainBehaviorModifier => {\n switch (sidebarState?.paneType) {\n case LayoutSidebarPaneType.SIDEBAR_STICKY_LEFT:\n return RetainBehaviorModifier.PADDING_INLINE_END\n case LayoutSidebarPaneType.SIDEBAR_STICKY_RIGHT:\n return RetainBehaviorModifier.PADDING_INLINE_START\n default:\n return RetainBehaviorModifier.PADDING\n }\n}\nconst getTopAndBottomPaneRetainBehavior = (\n paneState: LayoutTopPaneState | LayoutBottomPaneState,\n sidebarState?: LayoutSidebarState,\n): RetainBehaviorModifier => {\n switch (paneState.paneType) {\n case LayoutTopPaneType.TOP_PANE_STICKY:\n case LayoutTopPaneType.TOP_PANE_INLINE:\n case LayoutBottomPaneType.BOTTOM_PANE_STICKY:\n case LayoutBottomPaneType.BOTTOM_PANE_INLINE:\n return getContentRetainBehavior(sidebarState)\n default:\n return RetainBehaviorModifier.PADDING\n }\n}\n\nexport const getRetainBehaviorModifierForPane = (\n paneType: LayoutPaneSubtype,\n layoutContext?: LayoutContextProps,\n): RetainBehaviorModifier => {\n const category = paneType.toLowerCase().replace(/.*(top-pane|sidebar|content|bottom-pane).*/, '$1')\n switch (category) {\n case 'sidebar':\n return getSidebarRetainBehavior(layoutContext?.sidebarState)\n case 'content':\n return getContentRetainBehavior(layoutContext?.sidebarState)\n case 'top-pane':\n return getTopAndBottomPaneRetainBehavior(\n layoutContext?.topPaneState || ({ paneType } as LayoutTopPaneState),\n layoutContext?.sidebarState,\n )\n case 'bottom-pane':\n return getTopAndBottomPaneRetainBehavior(\n layoutContext?.bottomPaneState || ({ paneType } as LayoutBottomPaneState),\n layoutContext?.sidebarState,\n )\n default:\n return RetainBehaviorModifier.PADDING\n }\n}\n","'use client'\nimport React, { HTMLAttributes, ReactElement } from 'react'\nimport { LayoutContentPaneType } from './types-and-constants/LayoutPaneTypesAndConstants'\nimport { getRetainBehaviorModifierForPane } from '../helpers/get-retain-behavior-for-pane'\nimport { useLayoutContext } from '@lib/providers'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { RetainBehaviorModifier } from '@lib/components/atoms/Retain/constants/modifiers'\n\ninterface Props extends HTMLAttributes {\n paneType: LayoutContentPaneType\n children: ReactElement[] | ReactElement\n customRetainBehaviorModifier?: RetainBehaviorModifier\n fillAvailableHeight?: boolean\n}\n\n/**\n * @deprecated Prefer LayoutContentPaneRSC\n * */\nexport const LayoutContentPane = ({\n paneType,\n children,\n customRetainBehaviorModifier,\n fillAvailableHeight = true,\n ...props\n}: Props): JSX.Element => {\n if (paneType !== LayoutContentPaneType.CONTENT) {\n console.error('LayoutContentPane must be LayoutPaneType.CONTENT for the Layout to read it.')\n }\n\n const layoutContext = useLayoutContext()\n\n return (\n
    \n \n {children}\n \n
    \n )\n}\n","'use client'\nimport React, { HTMLAttributes, ReactElement, useEffect } from 'react'\nimport { LayoutTopPaneType } from './types-and-constants/LayoutPaneTypesAndConstants'\nimport { useLayoutContext } from '@lib/providers/layout-provider'\nimport { getRetainBehaviorModifierForPane } from '../helpers/get-retain-behavior-for-pane'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { RetainBehaviorModifier } from '@lib/components/atoms/Retain/constants/modifiers'\n\ninterface Props extends Omit, 'className'> {\n paneType: LayoutTopPaneType\n children?: ReactElement | ReactElement[]\n customRetainBehaviorModifier?: RetainBehaviorModifier\n}\n\n/**\n * @deprecated Prefer LayoutTopPaneRSC\n * */\nexport const LayoutTopPane = ({ paneType, children, customRetainBehaviorModifier, ...props }: Props): JSX.Element => {\n const layoutContext = useLayoutContext()\n const { topPaneState, setTopPaneState } = layoutContext\n\n if (!paneType && !topPaneState.paneType) {\n console.error('LayoutTopPane must be defined for the Layout to read it.')\n }\n\n useEffect(() => {\n if (!!paneType) {\n setTopPaneState({ ...topPaneState, paneType })\n }\n }, [paneType])\n\n const topPaneClasses = [\n 'o-layout__top-pane',\n (topPaneState.paneType ?? paneType) === LayoutTopPaneType.TOP_PANE_FIXED && 'o-layout__top-pane--fixed',\n (topPaneState.paneType ?? paneType) === LayoutTopPaneType.TOP_PANE_STICKY && 'o-layout__top-pane--sticky',\n ]\n .filter((i) => !!i)\n .join(' ')\n\n return (\n
    \n \n {topPaneState.children ?? children ?? <>}\n \n
    \n )\n}\n","'use client'\nimport React, { HTMLAttributes, ReactElement, useEffect } from 'react'\nimport { LayoutBottomPaneType } from './types-and-constants/LayoutPaneTypesAndConstants'\nimport { useLayoutContext } from '@lib/providers/layout-provider'\nimport { getRetainBehaviorModifierForPane } from '../helpers/get-retain-behavior-for-pane'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { RetainBehaviorModifier } from '@lib/components/atoms/Retain/constants/modifiers'\n\ninterface Props extends Omit, 'className'> {\n paneType: LayoutBottomPaneType\n children?: ReactElement | ReactElement[]\n customRetainBehaviorModifier?: RetainBehaviorModifier\n}\n\n/**\n * @deprecated Prefer LayoutBottomPaneRSC\n * */\nexport const LayoutBottomPane = ({\n paneType,\n children,\n customRetainBehaviorModifier,\n ...props\n}: Props): JSX.Element => {\n const layoutContext = useLayoutContext()\n const { bottomPaneState, setBottomPaneState } = layoutContext\n\n if (!paneType && !bottomPaneState.paneType) {\n console.error('LayoutBottomPane must be defined for the Layout to read it.')\n }\n\n useEffect(() => {\n if (!!paneType) {\n setBottomPaneState({ ...bottomPaneState, paneType })\n }\n }, [paneType])\n\n const bottomPaneClasses = [\n 'o-layout__bottom-pane',\n (bottomPaneState.paneType ?? paneType) === LayoutBottomPaneType.BOTTOM_PANE_FIXED &&\n 'o-layout__bottom-pane--fixed',\n (bottomPaneState.paneType ?? paneType) === LayoutBottomPaneType.BOTTOM_PANE_STICKY &&\n 'o-layout__bottom-pane--sticky',\n ]\n .filter((i) => !!i)\n .join(' ')\n\n return (\n
    \n \n {bottomPaneState.children ?? children ?? <>}\n \n
    \n )\n}\n","import {\n KEYWORD_OUTER_CHILDREN,\n LayoutTopPaneType,\n LayoutPaneSubtype,\n LayoutSidebarPaneType,\n} from '../types-and-constants/LayoutPaneTypesAndConstants'\n\nexport const getPaneTypeClassModifier = (paneType: LayoutPaneSubtype): string | null => {\n if (paneType === LayoutSidebarPaneType.SIDEBAR_STICKY_LEFT) return 'sticky-left'\n if (paneType === LayoutSidebarPaneType.SIDEBAR_STICKY_RIGHT) return 'sticky-right'\n if (paneType === LayoutSidebarPaneType.SIDEBAR_FIXED) return KEYWORD_OUTER_CHILDREN\n if (paneType === LayoutTopPaneType.TOP_PANE_FIXED) return KEYWORD_OUTER_CHILDREN\n return null\n}\n","'use client'\nimport React, { HTMLAttributes, ReactElement, useEffect } from 'react'\nimport { getPaneTypeClassModifier } from './helpers/get-pane-type-class-modifier'\nimport { LayoutSidebarPaneType } from './types-and-constants/LayoutPaneTypesAndConstants'\nimport { useLayoutContext } from '@lib/providers/layout-provider'\nimport { getRetainBehaviorModifierForPane } from '../helpers/get-retain-behavior-for-pane'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { RetainBehaviorModifier } from '@lib/components/atoms/Retain/constants/modifiers'\n\ninterface Props extends HTMLAttributes {\n children?: ReactElement | ReactElement[]\n paneType: LayoutSidebarPaneType\n customRetainBehaviorModifier?: RetainBehaviorModifier\n}\n\n/**\n * @deprecated Prefer LayoutSidebarPaneRSC\n * */\nexport const LayoutSidebarPane = ({\n paneType,\n children,\n customRetainBehaviorModifier,\n ...props\n}: Props): JSX.Element => {\n const layoutContext = useLayoutContext()\n const { sidebarState, setSidebarState } = layoutContext\n\n if (!paneType && !sidebarState.paneType) {\n console.error('paneType is required for the Layout to read it.')\n }\n\n useEffect(() => {\n if (!!paneType) {\n setSidebarState({ ...sidebarState, paneType })\n }\n }, [paneType])\n\n return (\n \n \n {sidebarState.children ?? children ?? <>}\n \n \n )\n}\n","import React, { HTMLAttributes, ReactElement } from 'react'\nimport { LayoutContentPaneType } from './types-and-constants/LayoutPaneTypesAndConstants'\nimport { getRetainBehaviorModifierForPane } from '../helpers/get-retain-behavior-for-pane'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { RetainBehaviorModifier } from '@lib/components/atoms/Retain/constants/modifiers'\n\ninterface Props extends HTMLAttributes {\n paneType: LayoutContentPaneType\n children: ReactElement[] | ReactElement\n customRetainBehaviorModifier?: RetainBehaviorModifier\n fillAvailableHeight?: boolean\n}\n\nexport const LayoutContentPaneRSC = ({\n paneType,\n children,\n customRetainBehaviorModifier,\n fillAvailableHeight = true,\n ...props\n}: Props): JSX.Element => {\n if (paneType !== LayoutContentPaneType.CONTENT) {\n console.error('LayoutContentPane must be LayoutPaneType.CONTENT for the Layout to read it.')\n }\n\n return (\n
    \n \n {children}\n \n
    \n )\n}\n","import React, { HTMLAttributes, ReactElement } from 'react'\nimport { LayoutTopPaneType } from './types-and-constants/LayoutPaneTypesAndConstants'\nimport { getRetainBehaviorModifierForPane } from '../helpers/get-retain-behavior-for-pane'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { RetainBehaviorModifier } from '@lib/components/atoms/Retain/constants/modifiers'\n\ninterface Props extends Omit, 'className'> {\n paneType: LayoutTopPaneType\n children?: ReactElement | ReactElement[]\n customRetainBehaviorModifier?: RetainBehaviorModifier\n}\n\nexport const LayoutTopPaneRSC = ({\n paneType,\n children,\n customRetainBehaviorModifier,\n ...props\n}: Props): JSX.Element => {\n if (!paneType) {\n console.error('LayoutTopPane must be defined for the Layout to read it.')\n }\n\n const topPaneClasses = [\n 'o-layout__top-pane',\n paneType === LayoutTopPaneType.TOP_PANE_FIXED && 'o-layout__top-pane--fixed',\n paneType === LayoutTopPaneType.TOP_PANE_STICKY && 'o-layout__top-pane--sticky',\n ]\n .filter((i) => !!i)\n .join(' ')\n\n return (\n
    \n \n {children ?? <>}\n \n
    \n )\n}\n","import React, { HTMLAttributes, ReactElement } from 'react'\nimport { LayoutBottomPaneType } from './types-and-constants/LayoutPaneTypesAndConstants'\nimport { getRetainBehaviorModifierForPane } from '../helpers/get-retain-behavior-for-pane'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { RetainBehaviorModifier } from '@lib/components/atoms/Retain/constants/modifiers'\n\ninterface Props extends Omit, 'className'> {\n paneType: LayoutBottomPaneType\n children?: ReactElement | ReactElement[]\n customRetainBehaviorModifier?: RetainBehaviorModifier\n}\n\nexport const LayoutBottomPaneRSC = ({\n paneType,\n children,\n customRetainBehaviorModifier,\n ...props\n}: Props): JSX.Element => {\n if (!paneType) {\n console.error('LayoutBottomPane must be defined for the Layout to read it.')\n }\n\n const bottomPaneClasses = [\n 'o-layout__bottom-pane',\n paneType === LayoutBottomPaneType.BOTTOM_PANE_FIXED && 'o-layout__bottom-pane--fixed',\n paneType === LayoutBottomPaneType.BOTTOM_PANE_STICKY && 'o-layout__bottom-pane--sticky',\n ]\n .filter((i) => !!i)\n .join(' ')\n\n return (\n
    \n \n {children ?? <>}\n \n
    \n )\n}\n","import React, { HTMLAttributes, ReactElement } from 'react'\nimport { getPaneTypeClassModifier } from './helpers/get-pane-type-class-modifier'\nimport { LayoutSidebarPaneType } from './types-and-constants/LayoutPaneTypesAndConstants'\nimport { getRetainBehaviorModifierForPane } from '../helpers/get-retain-behavior-for-pane'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { RetainBehaviorModifier } from '@lib/components/atoms/Retain/constants/modifiers'\n\ninterface Props extends HTMLAttributes {\n children?: ReactElement | ReactElement[]\n paneType: LayoutSidebarPaneType\n customRetainBehaviorModifier?: RetainBehaviorModifier\n}\n\nexport const LayoutSidebarPaneRSC = ({\n paneType,\n children,\n customRetainBehaviorModifier,\n ...props\n}: Props): JSX.Element => {\n if (!paneType) {\n console.error('paneType is required for the Layout to read it.')\n }\n\n return (\n \n \n {children ?? <>}\n \n \n )\n}\n","export * from './types-and-constants/LayoutPaneTypesAndConstants'\nexport * from './LayoutContentPane'\nexport * from './LayoutTopPane'\nexport * from './LayoutBottomPane'\nexport * from './LayoutSidebarPane'\nexport * from './LayoutContentPaneRSC'\nexport * from './LayoutTopPaneRSC'\nexport * from './LayoutBottomPaneRSC'\nexport * from './LayoutSidebarPaneRSC'\n","import { ReactElement } from 'react'\nimport { KEYWORD_OUTER_CHILDREN } from '../Panes/types-and-constants/LayoutPaneTypesAndConstants'\n\nexport const getInnerChildren = (children: ReactElement[]): ReactElement[] => {\n return children.filter((child) => {\n if (!child?.props?.paneType) {\n console.error('child is not a LayoutPane')\n return false\n }\n return !child?.props?.paneType?.includes(KEYWORD_OUTER_CHILDREN)\n })\n}\n\nexport default getInnerChildren\n","import { ReactElement } from 'react'\nimport { KEYWORD_OUTER_CHILDREN, VALID_OUTER_CHILDREN } from '../Panes/types-and-constants/LayoutPaneTypesAndConstants'\n\n/**\n * @param children - children of Layout component\n * @returns - children that are valid children to be delegated to the OuterLayout partial\n *\n * filters out children that don't have the keyword in their paneType that identifies them as valid outer children\n * filters out children that don't have a paneType that matches the required paneCategories\n * */\nexport const getOuterChildren = (children: ReactElement[]): ReactElement[] => {\n let validOuterChildren: ReactElement[] =\n children.filter((child) => {\n console.assert(child?.props?.paneType, 'child is not a LayoutPane')\n if (!child?.props?.paneType) {\n return false\n }\n\n const containsRequiredKeyword: boolean = child?.props?.paneType?.includes(KEYWORD_OUTER_CHILDREN)\n const isOfValidCategory: boolean = VALID_OUTER_CHILDREN.some((keyword: string) => {\n return child?.props?.paneType?.includes(keyword)\n })\n\n return containsRequiredKeyword && isOfValidCategory\n }) ?? []\n\n return validOuterChildren\n}\n\nexport default getOuterChildren\n","'use client'\nimport React, { ReactElement } from 'react'\n\ninterface OuterLayoutProps {\n children: ReactElement /** expects InnerLayout partial */\n outerChildren?: ReactElement[]\n}\nexport const OuterLayout = ({ children, outerChildren }: OuterLayoutProps): JSX.Element => {\n return (\n
    \n <>\n {outerChildren && outerChildren}\n {children}\n \n
    \n )\n}\n","'use client'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { RetainBehaviorModifier, RetainSizeModifier } from '@lib/components/atoms/Retain/constants/modifiers'\nimport React, { ReactElement } from 'react'\n\ninterface InnerLayoutProps {\n innerChildren: ReactElement[]\n retainSize: RetainSizeModifier\n layoutHasSidebar: boolean\n sidebarIsFixed: boolean\n sidebarIsOnLeftSide: boolean\n noPadding?: boolean\n}\nexport const InnerLayout = ({\n innerChildren,\n retainSize,\n layoutHasSidebar,\n sidebarIsFixed,\n sidebarIsOnLeftSide,\n noPadding,\n}: InnerLayoutProps): JSX.Element => {\n // transform innerChildren into an array if it isn't already\n const innerChildrenArray = Array.isArray(innerChildren) ? innerChildren : [innerChildren]\n\n // get the sidebar from the innerChildren array, if it exists\n const sidebar = innerChildrenArray.filter((child) => {\n return child.props.paneType.includes('sidebar')\n })[0]\n\n // get main content Element\n const main: ReactElement[] = innerChildrenArray.filter((child) => !child.props.paneType.includes('sidebar'))\n\n // setup css classes\n const innerMainModifier = main.length <= 1 || !!noPadding ? ' o-layout__inner-main--no-gap' : undefined\n\n const retainPaddingClass =\n !layoutHasSidebar || !sidebarIsFixed\n ? ' o-retain--padding'\n : ` o-retain--padding-${sidebarIsOnLeftSide ? 'end' : 'start'}`\n\n const innerClasses = `o-layout__inner${sidebar?.props.paneType.includes('left') ? ' o-layout__inner--reversed' : ''\n }${noPadding ? '' : retainPaddingClass}`\n\n return (\n
    \n \n
    \n
    \n <>{main}\n
    \n <>{sidebar}\n
    \n \n
    \n )\n}\n","import {\n LAYOUT_PANE_CATEGORIES,\n LayoutPaneCategoryType,\n LayoutPaneSubtype,\n} from '../types-and-constants/LayoutPaneTypesAndConstants'\n\n/**\n * @param {LayoutPaneSubtype} paneType - pane type string from which a category must be extracted\n * @returns {LayoutPaneCategoryType | null} - pane category string or null if no category was found\n *\n * First converts the pane type to lowercase and then tries to find a category in it.\n * If a category was found, returns it.\n * If no category was found, returns null.\n * If paneType is undefined, returns null.\n */\nexport const getPaneCategoryFromPaneType = (paneType?: LayoutPaneSubtype): LayoutPaneCategoryType | null => {\n if (paneType === undefined) return null\n const paneCategoriesRegex = new RegExp(`.*(${LAYOUT_PANE_CATEGORIES.join('|')}).*`)\n const paneCategoryRaw: LayoutPaneCategoryType | string = paneType.toLowerCase().replace(paneCategoriesRegex, '$1')\n return LAYOUT_PANE_CATEGORIES.some((pc) => paneCategoryRaw === pc)\n ? (paneCategoryRaw as LayoutPaneCategoryType)\n : null\n}\n","import { ReactElement } from 'react'\nimport { LayoutPaneCategoryType } from '../Panes'\nimport { getPaneCategoryFromPaneType } from '../Panes/helpers/get-pane-category-from-pane-type'\n\nexport const mergeDelegatedPanesIntoLayoutChildren = (\n children: ReactElement[],\n delegatedPanes?: ReactElement[],\n): ReactElement[] => {\n if (!delegatedPanes) return children\n\n const paneCategories: LayoutPaneCategoryType[] = delegatedPanes\n .map((pane) => getPaneCategoryFromPaneType(pane.props.paneType))\n .filter((c) => !!c) as LayoutPaneCategoryType[]\n\n const filteredChildren = children.filter((child) => {\n return !paneCategories.some((category) => category === getPaneCategoryFromPaneType(child.props.paneType))\n })\n\n return [...filteredChildren, ...delegatedPanes]\n}\n","import React from 'react'\nimport { ReactElement, ReactNode } from 'react'\n\nexport const convertChildrenToElementsArray = (children: ReactNode): ReactElement[] => {\n return (\n React.Children.map(children, (child) => {\n const isValidElement = React.isValidElement(child)\n if (!isValidElement) return null\n\n const isFragment = isValidElement && child.type === React.Fragment\n\n return isFragment ? child.props.children : child\n })?.filter((child) => child !== null) ?? []\n )\n}\n","'use client'\nimport React, { ReactElement, ReactNode } from 'react'\n\ninterface ContentWrapperProps {\n children: ReactNode\n notMain?: boolean\n}\nexport const ContentWrapper = ({ children, notMain }: ContentWrapperProps): ReactElement => {\n const classes = 'o-layout'\n if (!!notMain) {\n return
    {children}
    \n }\n return
    {children}
    \n}\n","'use client'\nimport React, { ReactElement, useEffect, useState } from 'react'\n\nimport getInnerChildren from './helpers/get-inner-children'\nimport getOuterChildren from './helpers/get-outer-children'\nimport { OuterLayout } from './Partials/OuterLayout'\nimport { InnerLayout } from './Partials/InnerLayout'\nimport { RetainBehaviorModifier, RetainSizeModifier } from '@lib/components/atoms/Retain/constants/modifiers'\nimport { useLayoutContext } from '@lib/providers/layout-provider'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { mergeDelegatedPanesIntoLayoutChildren } from './helpers/merge-delegated-panes'\nimport { convertChildrenToElementsArray } from './helpers/convert-children-to-elements-array'\nimport { determineSidebarState } from './Panes/helpers/determine-sidebar-state'\nimport { mergeRetainModifiers } from './helpers/merge-retain-modifiers'\nimport { LayoutProps } from './Types/layoutTypes'\nimport { ContentWrapper } from './Partials/ContentWrapper'\n\n/**\n * @deprecated PREFER LayoutRSC OVER THIS COMPONENT!!! (import {LayoutRSC as Layout}... LayoutRSC may be renamed to Layout)\n *\n * @description\n * The Layout takes children, disects them and places them in a dom structure.\n * It also listens to the LayoutProvider Context when it exists, for children that are provided through the LayoutDelegator.\n *\n * The LayoutProvider also stores the state of the panes. For example:\n * 1. The LayoutSidebarPane is closed from the LayoutTopPane\n * 2. The LayoutSidebarPane listening to the provider context then closes\n * 3. The LayoutContentPane listening to the provider context, adjusts it's padding and spacing if necessary\n *\n * @todo make Layout independent of LayoutProvider so it can be used without it when no LayoutDelegator is used\n * @see {@link https://jira.hosted-tools.com/browse/STOPEN-5761}\n */\nexport const Layout = ({\n children,\n retainSize,\n retainBehaviorModifiers,\n noSpacingOnInnerLayout,\n notMain,\n useProviderContext = true,\n}: LayoutProps): JSX.Element => {\n const childrenAsArray: ReactElement[] = convertChildrenToElementsArray(children)\n\n /** sepparates children in two groups so it can be passed to the InnerLayout and OuterLayout */\n const [innerChildren, setInnerChildren] = useState(getInnerChildren(childrenAsArray))\n const [outerChildren, setOuterChildren] = useState(getOuterChildren(childrenAsArray))\n\n if (!!useProviderContext) {\n /** If the children or the state of the layout provider change, update the layout of the children */\n const layoutContext = useLayoutContext()\n console.assert(!!layoutContext, 'LayoutContext is not available')\n\n const { layoutState, cleanUpContext } = layoutContext\n useEffect(() => {\n const childrenAsArray = mergeDelegatedPanesIntoLayoutChildren(\n convertChildrenToElementsArray(children ?? []),\n convertChildrenToElementsArray(layoutState.layoutPanes ?? []),\n )\n setInnerChildren(getInnerChildren(childrenAsArray))\n setOuterChildren(getOuterChildren(childrenAsArray))\n cleanUpContext(childrenAsArray)\n }, [children, layoutState])\n }\n\n return (\n \n \n \n \n \n \n \n )\n}\n","'use client'\nimport { useLayoutContext } from '@lib/providers/layout-provider'\nimport React, { ReactElement, useEffect } from 'react'\n\ninterface LayoutDelegatorProps {\n children: ReactElement | ReactElement[]\n}\n\n/**\n * @deprecated This component was only written to make the Layout component compatible with legacy code\n * @description\n * The LayoutDelegator component is used in the same way as the Layout component,\n * but always as a (grand)child of one of the LayoutPanes.\n * A LayoutProvider should be used as a parent of the Layout component.\n *\n * A LayoutPane that is defined as a direct child of the LayoutDelegator\n * will replace the LayoutPane of the same paneType that is a direct child of the Layout.\n * If no such LayoutPane was defined in the Layout. The LayoutPane will just be added to the Layout.\n *\n * The LayoutPaneType in which the LayoutDelegator is defined, should not be used an in the LayoutDelegator.\n * Unexpected behavior might occur if this is done.\n * @todo investigate if this would actually cause problems, and if it does, prevent it from happening.\n *\n * @example\n * \n * \n *\n * \n *\n *
    sidebar ui
    \n *\n * {true && \n * \n * This LayoutContentPane replaces the LayoutContentPane that is a direct child of the Layout\n * \n * }\n *\n *
    \n *\n * Direct Child Of Layout\n *\n *
    \n *
    \n */\nexport const LayoutDelegator = ({ children }: LayoutDelegatorProps): JSX.Element => {\n const childrenAsArray = React.Children.toArray(children) as ReactElement[]\n const { layoutState, setLayoutState, cleanUpContext } = useLayoutContext()\n\n /**\n * Gets whether children are not of type Layout Pane.\n * Those components should not be direct children of this component.\n */\n const getChildrenNotOfTypeLayoutPane = () =>\n childrenAsArray.some((child) => {\n return !/sidebar|bottom-pane|top-pane|content/.test(child.props.paneType)\n })\n\n useEffect(() => {\n const childrenNotOfTypeLayoutPane = getChildrenNotOfTypeLayoutPane()\n\n /** Only set the layout if the children are of correct type */\n if (!childrenNotOfTypeLayoutPane) {\n setLayoutState({ ...layoutState, layoutPanes: childrenAsArray })\n }\n }, [children])\n\n useEffect(() => {\n return () => {\n cleanUpContext()\n }\n }, [])\n\n return <>\n}\n","import React, { ReactElement } from 'react'\n\ninterface OuterLayoutProps {\n children: ReactElement /** expects InnerLayout partial */\n outerChildren?: ReactElement[]\n}\nexport const OuterLayoutRSC = ({ children, outerChildren }: OuterLayoutProps): JSX.Element => {\n return (\n
    \n <>\n {outerChildren && outerChildren}\n {children}\n \n
    \n )\n}\n","import { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { RetainBehaviorModifier, RetainSizeModifier } from '@lib/components/atoms/Retain/constants/modifiers'\nimport React, { ReactElement } from 'react'\n\ninterface InnerLayoutProps {\n innerChildren: ReactElement[]\n retainSize: RetainSizeModifier\n layoutHasSidebar: boolean\n sidebarIsFixed: boolean\n sidebarIsOnLeftSide: boolean\n noPadding?: boolean\n noScrolling?: boolean\n}\nexport const InnerLayoutRSC = ({\n innerChildren,\n retainSize,\n layoutHasSidebar,\n sidebarIsFixed,\n sidebarIsOnLeftSide,\n noPadding,\n noScrolling,\n}: InnerLayoutProps): JSX.Element => {\n // transform innerChildren into an array if it isn't already\n const innerChildrenArray = Array.isArray(innerChildren) ? innerChildren : [innerChildren]\n\n // get the sidebar from the innerChildren array, if it exists\n const sidebar = innerChildrenArray.filter((child) => {\n return child.props.paneType.includes('sidebar')\n })[0]\n\n // get main content Element\n const main: ReactElement[] = innerChildrenArray.filter((child) => !child.props.paneType.includes('sidebar'))\n\n // setup css classes\n const innerMainModifier = main.length <= 1 || !!noPadding ? ' o-layout__inner-main--no-gap' : undefined\n\n const retainPaddingClass =\n !layoutHasSidebar || !sidebarIsFixed\n ? ' o-retain--padding'\n : ` o-retain--padding-${sidebarIsOnLeftSide ? 'end' : 'start'}`\n\n const innerClasses = `o-layout__inner${\n sidebar?.props.paneType.includes('left') ? ' o-layout__inner--reversed' : ''\n }${noPadding ? '' : retainPaddingClass}${noScrolling ? ' o-layout__inner--no-scrolling' : ''}`\n\n return (\n
    \n \n
    \n
    \n <>{main}\n
    \n <>{sidebar}\n
    \n \n
    \n )\n}\n","import React, { ReactElement } from 'react'\n\nimport getInnerChildren from './helpers/get-inner-children'\nimport getOuterChildren from './helpers/get-outer-children'\nimport { OuterLayoutRSC as OuterLayout } from './Partials/OuterLayoutRSC'\nimport { InnerLayoutRSC as InnerLayout } from './Partials/InnerLayoutRSC'\nimport { RetainBehaviorModifier, RetainSizeModifier } from '@lib/components/atoms/Retain/constants/modifiers'\nimport { Retain } from '@lib/components/atoms/Retain/Retain'\nimport { mergeDelegatedPanesIntoLayoutChildren } from './helpers/merge-delegated-panes'\nimport { convertChildrenToElementsArray } from './helpers/convert-children-to-elements-array'\nimport { determineSidebarState } from './Panes/helpers/determine-sidebar-state'\nimport { mergeRetainModifiers } from './helpers/merge-retain-modifiers'\nimport { LayoutProps } from './Types/layoutTypes'\nimport { ContentWrapper } from './Partials/ContentWrapper'\n\n/**\n * @description\n * The Layout takes children, disects them and places them in a dom structure.\n *\n */\nexport const LayoutRSC = ({\n children,\n retainSize,\n retainBehaviorModifiers,\n noSpacingOnInnerLayout,\n notMain,\n noInnerScrolling,\n}: LayoutProps): JSX.Element => {\n const childrenAsArray: ReactElement[] = convertChildrenToElementsArray(children)\n\n /** sepparates children in two groups so it can be passed to the InnerLayout and OuterLayout */\n const innerChildren = getInnerChildren(childrenAsArray)\n const outerChildren = getOuterChildren(childrenAsArray)\n\n return (\n \n \n \n \n \n \n \n )\n}\n","export * from './Panes'\nexport * from './Layout'\nexport * from './LayoutDelegator'\nexport * from './Panes'\nexport * from './Types/layoutTypes'\nexport * from './LayoutRSC'\n","'use client'\nimport React from 'react'\nimport { Tabs } from '../../molecules/Tabs'\n\nexport interface TabsWrapperProps extends React.HTMLAttributes {\n children: React.ReactNode\n tabContent: React.ReactNode\n}\n\nexport const TabsWrapper = ({ children, tabContent, ...props }: TabsWrapperProps) => {\n return (\n
    \n {children}\n
    {tabContent}
    \n
    \n )\n}\n","export * from './TabsWrapper'\n","'use client'\nimport React from 'react'\n\nimport { TimelineEventProps } from './TimelineEvent'\n\ninterface TimelineProps extends React.HTMLAttributes {\n /** \n }\n >\n {children}\n \n )\n}\n","'use client'\nimport React from 'react'\n\nimport { ListHeader } from '@lib/components/molecules/ListHeader/ListHeader'\nimport { TimelineFilterWrapper } from '@lib/components/organisms/Timeline/TimelineFilterWrapper'\n\ninterface TimelineTopControlsProps extends React.HTMLAttributes {\n /** Title displayed above the timeline */\n title: string\n /** List of shown in a context menu */\n contextFilters?: React.ReactElement\n /** */\n switcherFilter?: React.ReactElement\n}\n\nexport const TimelineTopControls = ({\n title,\n contextFilters,\n switcherFilter,\n}: TimelineTopControlsProps): JSX.Element => {\n return (\n {contextFilters}}\n />\n )\n}\n","'use client'\nimport React from 'react'\n\ninterface TimelineEventPrefixProps {\n prefix?: React.ReactNode\n}\n\nexport const TimelineEventPrefix = ({ prefix = null }: TimelineEventPrefixProps): JSX.Element => {\n const heightClasses = prefix ? 'w-6 h-6' : 'w-5 h-5'\n\n return (\n
    \n {prefix && prefix}\n {!prefix && }\n
    \n )\n}\n","'use client'\nimport React from 'react'\nimport { Card } from './Card'\nimport { File, TextTypes } from '@lib/types'\nimport { Text } from '../Text'\nimport { Button, ButtonVariants } from '../Button'\nimport { DownloadIcon, ExportIcon } from '@lib/components/icons'\n\ninterface FileCardProps extends React.HTMLAttributes {\n file: File\n}\n\nexport const FileCard = ({ file, ...props }: FileCardProps): JSX.Element => {\n if (!file?.url) return <>\n\n return (\n \n \n