scorer-ui-kit 3.0.0-beta.7 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -11
- package/dist/Alerts/atom/AlertBar.d.ts.map +1 -1
- package/dist/Alerts/atom/Notification.d.ts.map +1 -1
- package/dist/Alerts/atom/Tooltip.d.ts +1 -1
- package/dist/Alerts/atom/Tooltip.d.ts.map +1 -1
- package/dist/Alerts/index.d.ts +1 -1
- package/dist/Alerts/index.d.ts.map +1 -1
- package/dist/CameraPanels/atoms/MediaStream.d.ts.map +1 -1
- package/dist/CameraPanels/atoms/PanelMetaData.d.ts.map +1 -1
- package/dist/CameraPanels/index.d.ts +3 -3
- package/dist/CameraPanels/index.d.ts.map +1 -1
- package/dist/CameraPanels/molecules/CameraPanel.d.ts.map +1 -1
- package/dist/CameraPanels/organisms/CameraPanels.d.ts.map +1 -1
- package/dist/Filters/FilterTypes.d.ts +4 -4
- package/dist/Filters/FilterTypes.d.ts.map +1 -1
- package/dist/Filters/atoms/DateTimeBlock.d.ts.map +1 -1
- package/dist/Filters/atoms/FilterButton.d.ts.map +1 -1
- package/dist/Filters/atoms/FilterDropHandler.d.ts +2 -1
- package/dist/Filters/atoms/FilterDropHandler.d.ts.map +1 -1
- package/dist/Filters/atoms/FilterDropdownContainer.d.ts.map +1 -1
- package/dist/Filters/atoms/FooterControls.d.ts.map +1 -1
- package/dist/Filters/atoms/LoadingBox.d.ts.map +1 -1
- package/dist/Filters/atoms/ToggleButton.d.ts +2 -2
- package/dist/Filters/atoms/ToggleButton.d.ts.map +1 -1
- package/dist/Filters/index.d.ts +8 -8
- package/dist/Filters/index.d.ts.map +1 -1
- package/dist/Filters/molecules/DatePicker.d.ts +2 -2
- package/dist/Filters/molecules/DatePicker.d.ts.map +1 -1
- package/dist/Filters/molecules/DropdownDatePicker.d.ts.map +1 -1
- package/dist/Filters/molecules/FilterDropdown.d.ts +1 -1
- package/dist/Filters/molecules/FilterDropdown.d.ts.map +1 -1
- package/dist/Filters/molecules/FilterInputs.d.ts.map +1 -1
- package/dist/Filters/molecules/FilterLayout.d.ts.map +1 -1
- package/dist/Filters/molecules/FiltersResults.d.ts +1 -1
- package/dist/Filters/molecules/FiltersResults.d.ts.map +1 -1
- package/dist/Filters/molecules/SortDropdown.d.ts +1 -1
- package/dist/Filters/molecules/SortDropdown.d.ts.map +1 -1
- package/dist/Filters/organisms/FilterBar.d.ts +1 -1
- package/dist/Filters/organisms/FilterBar.d.ts.map +1 -1
- package/dist/Form/Form.d.ts.map +1 -1
- package/dist/Form/atoms/Button.d.ts +1 -1
- package/dist/Form/atoms/Button.d.ts.map +1 -1
- package/dist/Form/atoms/ButtonWithIcon.d.ts +1 -1
- package/dist/Form/atoms/ButtonWithIcon.d.ts.map +1 -1
- package/dist/Form/atoms/ButtonWithLoading.d.ts.map +1 -1
- package/dist/Form/atoms/Checkbox.d.ts.map +1 -1
- package/dist/Form/atoms/CropArea.d.ts.map +1 -1
- package/dist/Form/atoms/DropArea.d.ts.map +1 -1
- package/dist/Form/atoms/FilterOption.d.ts.map +1 -1
- package/dist/Form/atoms/IconButton.d.ts.map +1 -1
- package/dist/Form/atoms/Input.d.ts.map +1 -1
- package/dist/Form/atoms/InputFileButton.d.ts +1 -1
- package/dist/Form/atoms/InputFileButton.d.ts.map +1 -1
- package/dist/Form/atoms/Label.d.ts.map +1 -1
- package/dist/Form/atoms/RadioButton.d.ts.map +1 -1
- package/dist/Form/atoms/SelectField.d.ts.map +1 -1
- package/dist/Form/atoms/SliderInput.d.ts.map +1 -1
- package/dist/Form/atoms/SmallInput.d.ts.map +1 -1
- package/dist/Form/atoms/SplitButtonOption.d.ts.map +1 -1
- package/dist/Form/atoms/Switch.d.ts.map +1 -1
- package/dist/Form/atoms/TextArea.d.ts.map +1 -1
- package/dist/Form/index.d.ts +18 -18
- package/dist/Form/index.d.ts.map +1 -1
- package/dist/Form/molecules/ActionButtons.d.ts.map +1 -1
- package/dist/Form/molecules/ButtonsStack.d.ts.map +1 -1
- package/dist/Form/molecules/CropTool.d.ts.map +1 -1
- package/dist/Form/molecules/DurationSlider.d.ts.map +1 -1
- package/dist/Form/molecules/PasswordField.d.ts.map +1 -1
- package/dist/Form/molecules/PercentageSlider.d.ts +1 -1
- package/dist/Form/molecules/PercentageSlider.d.ts.map +1 -1
- package/dist/Form/molecules/SplitButton.d.ts +1 -1
- package/dist/Form/molecules/SplitButton.d.ts.map +1 -1
- package/dist/Form/molecules/TextAreaField.d.ts.map +1 -1
- package/dist/Form/molecules/TextField.d.ts +1 -1
- package/dist/Form/molecules/TextField.d.ts.map +1 -1
- package/dist/Form/organisms/AreaUploadManager.d.ts.map +1 -1
- package/dist/Form/organisms/AvatarUploader.d.ts.map +1 -1
- package/dist/Global/atoms/CloseButton.d.ts.map +1 -1
- package/dist/Global/atoms/ContextItem.d.ts +1 -1
- package/dist/Global/atoms/ContextItem.d.ts.map +1 -1
- package/dist/Global/atoms/DrawerBottomMenu.d.ts.map +1 -1
- package/dist/Global/atoms/Layout.d.ts.map +1 -1
- package/dist/Global/atoms/MobileLogoLink.d.ts.map +1 -1
- package/dist/Global/atoms/MobileNavbarContent.d.ts.map +1 -1
- package/dist/Global/atoms/NavigationItem.d.ts +1 -1
- package/dist/Global/atoms/NavigationItem.d.ts.map +1 -1
- package/dist/Global/atoms/NotificationItem.d.ts.map +1 -1
- package/dist/Global/atoms/TopBarBadge.d.ts.map +1 -1
- package/dist/Global/atoms/UserDrawerMeta.d.ts.map +1 -1
- package/dist/Global/index.d.ts +5 -5
- package/dist/Global/index.d.ts.map +1 -1
- package/dist/Global/molecules/MobileUserMenu.d.ts.map +1 -1
- package/dist/Global/molecules/NotificationsHistory.d.ts.map +1 -1
- package/dist/Global/molecules/Sidebar.d.ts.map +1 -1
- package/dist/Global/molecules/TopBar.d.ts.map +1 -1
- package/dist/Global/molecules/UserMenu.d.ts.map +1 -1
- package/dist/Global/organisms/MainMenu.d.ts.map +1 -1
- package/dist/Global/organisms/MobileMenu.d.ts.map +1 -1
- package/dist/Global/organisms/MobileNavbar.d.ts +1 -1
- package/dist/Global/organisms/MobileNavbar.d.ts.map +1 -1
- package/dist/Global/templates/GlobalUI.d.ts.map +1 -1
- package/dist/Icons/Icon.d.ts +2 -2
- package/dist/Icons/Icon.d.ts.map +1 -1
- package/dist/Icons/StatusIcon.d.ts.map +1 -1
- package/dist/Indicators/Spinner.d.ts.map +1 -1
- package/dist/Layouts/atoms/FullWidthContentBlock.d.ts.map +1 -1
- package/dist/Layouts/atoms/ResizeLine.d.ts.map +1 -1
- package/dist/Layouts/atoms/UtilityHeaderBack.d.ts.map +1 -1
- package/dist/Layouts/atoms/UtilityHeaderShare.d.ts.map +1 -1
- package/dist/Layouts/index.d.ts +5 -4
- package/dist/Layouts/index.d.ts.map +1 -1
- package/dist/Layouts/molecules/SplitLayout.d.ts +2 -2
- package/dist/Layouts/molecules/SplitLayout.d.ts.map +1 -1
- package/dist/Layouts/molecules/UtilityHeader.d.ts.map +1 -1
- package/dist/Layouts/organisms/ContentLayout.d.ts.map +1 -1
- package/dist/LineUI/Contexts.d.ts +3 -1
- package/dist/LineUI/Contexts.d.ts.map +1 -1
- package/dist/LineUI/Control.d.ts +1 -3
- package/dist/LineUI/Control.d.ts.map +1 -1
- package/dist/LineUI/HandleUnit.d.ts +2 -2
- package/dist/LineUI/HandleUnit.d.ts.map +1 -1
- package/dist/LineUI/LineReducer.d.ts.map +1 -1
- package/dist/LineUI/LineSet.d.ts +2 -2
- package/dist/LineUI/LineSet.d.ts.map +1 -1
- package/dist/LineUI/LineUI.d.ts.map +1 -1
- package/dist/LineUI/LineUIRTC.d.ts.map +1 -1
- package/dist/LineUI/LineUIVideo.d.ts +1 -18
- package/dist/LineUI/LineUIVideo.d.ts.map +1 -1
- package/dist/LineUI/LineUIVideoBase.d.ts +25 -0
- package/dist/LineUI/LineUIVideoBase.d.ts.map +1 -0
- package/dist/LineUI/LineUnit.d.ts +3 -3
- package/dist/LineUI/LineUnit.d.ts.map +1 -1
- package/dist/LineUI/index.d.ts +5 -5
- package/dist/LineUI/index.d.ts.map +1 -1
- package/dist/LineUIHls/LineUIVideoHLS.d.ts +5 -0
- package/dist/LineUIHls/LineUIVideoHLS.d.ts.map +1 -0
- package/dist/LineUIHls/index.d.ts +4 -0
- package/dist/LineUIHls/index.d.ts.map +1 -0
- package/dist/LineUIVideoBase-09sEI3pc.mjs +1240 -0
- package/dist/LineUIVideoBase-09sEI3pc.mjs.map +1 -0
- package/dist/LineUIVideoBase-Bs3WCeWl.js +1335 -0
- package/dist/LineUIVideoBase-Bs3WCeWl.js.map +1 -0
- package/dist/Misc/atoms/ActionsBar.d.ts.map +1 -1
- package/dist/Misc/atoms/BasicSearchInput.d.ts.map +1 -1
- package/dist/Misc/atoms/BigIconsSummary.d.ts.map +1 -1
- package/dist/Misc/atoms/MediaBox.d.ts.map +1 -1
- package/dist/Misc/atoms/Tag.d.ts.map +1 -1
- package/dist/Misc/index.d.ts +5 -5
- package/dist/Misc/index.d.ts.map +1 -1
- package/dist/Misc/molecules/DebouncedSearcher.d.ts.map +1 -1
- package/dist/Misc/molecules/Pagination.d.ts.map +1 -1
- package/dist/Misc/molecules/TagList.d.ts.map +1 -1
- package/dist/Modals/ConfirmationModal.d.ts.map +1 -1
- package/dist/Modals/Modal.d.ts.map +1 -1
- package/dist/Modals/index.d.ts +2 -2
- package/dist/Modals/index.d.ts.map +1 -1
- package/dist/Pages/atoms/IntroductionText.d.ts.map +1 -1
- package/dist/Pages/atoms/PageTitle.d.ts.map +1 -1
- package/dist/Pages/index.d.ts +3 -3
- package/dist/Pages/index.d.ts.map +1 -1
- package/dist/Pages/molecules/MultilineContent.d.ts.map +1 -1
- package/dist/Pages/molecules/PageHeader.d.ts.map +1 -1
- package/dist/Tables/atoms/TableHeaderTitle.d.ts.map +1 -1
- package/dist/Tables/atoms/TableRowThumbnail.d.ts.map +1 -1
- package/dist/Tables/atoms/TypeTableCell.d.ts +1 -1
- package/dist/Tables/atoms/TypeTableCell.d.ts.map +1 -1
- package/dist/Tables/atoms/TypeTableDeviceStatus.d.ts +1 -1
- package/dist/Tables/atoms/TypeTableDeviceStatus.d.ts.map +1 -1
- package/dist/Tables/atoms/TypeTableRow.d.ts +2 -2
- package/dist/Tables/atoms/TypeTableRow.d.ts.map +1 -1
- package/dist/Tables/index.d.ts +6 -6
- package/dist/Tables/index.d.ts.map +1 -1
- package/dist/Tables/molecules/EditCell.d.ts.map +1 -1
- package/dist/Tables/molecules/TypeTableHeader.d.ts.map +1 -1
- package/dist/Tables/organisms/TypeTable.d.ts.map +1 -1
- package/dist/Tabs/TabContent.d.ts.map +1 -1
- package/dist/Tabs/TabList.d.ts.map +1 -1
- package/dist/Tabs/Tabs.d.ts.map +1 -1
- package/dist/Tabs/atoms/MobileTab.d.ts.map +1 -1
- package/dist/Tabs/atoms/Tab.d.ts.map +1 -1
- package/dist/Tabs/atoms/TabWithIcon.d.ts.map +1 -1
- package/dist/Tabs/index.d.ts +5 -5
- package/dist/Tabs/index.d.ts.map +1 -1
- package/dist/Tabs/molecules/TabsWithIconBar.d.ts.map +1 -1
- package/dist/WebRTCClient.d.ts.map +1 -1
- package/dist/common/ContentPlaceholder.d.ts.map +1 -1
- package/dist/common/index.d.ts.map +1 -1
- package/dist/context/ModalContext.d.ts.map +1 -1
- package/dist/context/NotificationContext.d.ts +1 -1
- package/dist/context/NotificationContext.d.ts.map +1 -1
- package/dist/context/index.d.ts +2 -2
- package/dist/context/index.d.ts.map +1 -1
- package/dist/fonts/index.d.ts.map +1 -1
- package/dist/helpers/cropToolHelpers.d.ts +3 -3
- package/dist/helpers/cropToolHelpers.d.ts.map +1 -1
- package/dist/helpers/index.d.ts +3 -3
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/hls.js +70 -0
- package/dist/hls.js.map +1 -0
- package/dist/hls.modern.js +68 -0
- package/dist/hls.modern.js.map +1 -0
- package/dist/hooks/index.d.ts +9 -9
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useBreakpoints.d.ts.map +1 -1
- package/dist/hooks/useClickOutside.d.ts +2 -1
- package/dist/hooks/useClickOutside.d.ts.map +1 -1
- package/dist/hooks/useCopyToClipboard.d.ts.map +1 -1
- package/dist/hooks/useInterval.d.ts.map +1 -1
- package/dist/hooks/useLocalStorage.d.ts.map +1 -1
- package/dist/hooks/useMediaModal.d.ts.map +1 -1
- package/dist/hooks/useMediaQuery.d.ts.map +1 -1
- package/dist/hooks/useMenu.d.ts.map +1 -1
- package/dist/hooks/useModal.d.ts.map +1 -1
- package/dist/hooks/usePoll.d.ts.map +1 -1
- package/dist/hooks/useThemeToggle.d.ts.map +1 -1
- package/dist/hooks/useTitle.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11748 -13001
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +10660 -11886
- package/dist/index.modern.js.map +1 -1
- package/dist/styled.d.ts +7 -0
- package/dist/styled.d.ts.map +1 -0
- package/dist/svg/AvatarPlaceholder.d.ts +2 -2
- package/dist/svg/AvatarPlaceholder.d.ts.map +1 -1
- package/dist/svg/Invalid.d.ts +2 -2
- package/dist/svg/Invalid.d.ts.map +1 -1
- package/dist/svg/LogoMark.d.ts +2 -2
- package/dist/svg/LogoMark.d.ts.map +1 -1
- package/dist/svg/LogoText.d.ts +2 -2
- package/dist/svg/LogoText.d.ts.map +1 -1
- package/dist/svg/NoImage.d.ts.map +1 -1
- package/dist/svg/NoImageBig.d.ts +2 -2
- package/dist/svg/NoImageBig.d.ts.map +1 -1
- package/dist/svg/PasswordHide.d.ts +2 -2
- package/dist/svg/PasswordHide.d.ts.map +1 -1
- package/dist/svg/PasswordShow.d.ts +2 -2
- package/dist/svg/PasswordShow.d.ts.map +1 -1
- package/dist/svg/Required.d.ts +2 -2
- package/dist/svg/Required.d.ts.map +1 -1
- package/dist/svg/Success.d.ts +2 -2
- package/dist/svg/Success.d.ts.map +1 -1
- package/dist/svg/checkmark.d.ts.map +1 -1
- package/dist/svg/index.d.ts +4 -4
- package/dist/svg/index.d.ts.map +1 -1
- package/dist/svg/input.d.ts +1 -1
- package/dist/theme/ThemeHelpers.d.ts.map +1 -1
- package/dist/theme/ThemeVariables.d.ts.map +1 -1
- package/dist/theme/common.d.ts.map +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/legacy/custom.d.ts.map +1 -1
- package/dist/theme/legacy/styles.d.ts.map +1 -1
- package/dist/theme/legacy/typography.d.ts +1 -1
- package/dist/theme/legacy/typography.d.ts.map +1 -1
- package/package.json +17 -12
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/theme/common.tsx","../src/theme/legacy/typography.ts","../src/theme/legacy/colors.ts","../src/theme/legacy/styles.ts","../src/theme/legacy/custom.ts","../src/theme/index.ts","../src/theme/variables/Layout.ts","../src/theme/variables/Animation.ts","../src/theme/variables/Colors.ts","../src/theme/ThemeVariables.ts","../src/theme/ThemeHelpers.ts","../src/Icons/Icon.tsx","../src/common/ContentPlaceholder.tsx","../src/common/index.ts","../src/Alerts/atom/AlertBar.tsx","../src/Alerts/atom/Notification.tsx","../src/Alerts/atom/Tooltip.tsx","../src/Form/atoms/Button.tsx","../src/Indicators/Spinner.tsx","../src/Form/atoms/ButtonWithIcon.tsx","../src/Form/atoms/ButtonWithLoading.tsx","../src/Form/atoms/IconButton.tsx","../src/Form/molecules/ActionButtons.tsx","../src/Form/atoms/Input.tsx","../src/Form/atoms/Label.tsx","../src/Form/atoms/SmallInput.tsx","../src/Form/atoms/Switch.tsx","../src/svg/LogoMark.tsx","../src/svg/LogoText.tsx","../src/svg/AvatarPlaceholder.tsx","../src/svg/checkmark.tsx","../src/svg/NoImage.tsx","../src/Form/atoms/Checkbox.tsx","../src/Form/atoms/RadioButton.tsx","../src/Form/atoms/TextArea.tsx","../src/Form/atoms/SelectField.tsx","../src/helpers/index.tsx","../src/Form/atoms/SliderInput.tsx","../src/Form/atoms/InputFileButton.tsx","../src/Form/molecules/DurationSlider.tsx","../src/Form/molecules/PercentageSlider.tsx","../src/Form/molecules/PasswordField.tsx","../src/Form/molecules/TextField.tsx","../src/Form/molecules/TextAreaField.tsx","../src/Form/atoms/DropArea.tsx","../src/helpers/cropToolHelpers.ts","../src/Form/atoms/CropArea.tsx","../src/Form/molecules/CropTool.tsx","../src/Form/organisms/AvatarUploader.tsx","../src/Misc/atoms/BigIconsSummary.tsx","../src/Form/organisms/AreaUploadManager.tsx","../src/Form/Form.tsx","../src/Form/atoms/SplitButtonOption.tsx","../src/hooks/useInterval.ts","../src/hooks/useTo.tsx","../src/hooks/useTitle.tsx","../src/hooks/useCopyToClipboard.tsx","../src/hooks/useLocalStorage.tsx","../src/hooks/useClickOutside.tsx","../src/Modals/Modal.tsx","../src/context/ModalContext.tsx","../src/hooks/useModal.tsx","../src/context/NotificationContext.tsx","../src/hooks/useNotification.tsx","../src/hooks/usePoll.ts","../src/hooks/useMediaQuery.ts","../src/hooks/useBreakpoints.ts","../src/svg/NoImageBig.tsx","../src/Misc/atoms/MediaBox.tsx","../src/hooks/useMediaModal.tsx","../src/hooks/useThemeToggle.ts","../src/Form/molecules/SplitButton.tsx","../src/Form/molecules/ButtonsStack.tsx","../src/Filters/atoms/DateTimeBlock.tsx","../src/Filters/molecules/DatePicker.tsx","../src/Filters/atoms/FilterDropdownContainer.tsx","../src/Filters/atoms/FilterButton.tsx","../src/Form/atoms/FilterOption.tsx","../src/Misc/atoms/BasicSearchInput.tsx","../src/Filters/FilterTypes.ts","../src/Filters/atoms/FilterDropHandler.tsx","../src/Filters/atoms/LoadingBox.tsx","../src/Filters/atoms/FooterControls.tsx","../src/Filters/molecules/FilterDropdown.tsx","../src/Filters/molecules/SortDropdown.tsx","../src/Filters/molecules/FilterLayout.tsx","../src/Filters/molecules/DropdownDatePicker.tsx","../src/Filters/molecules/FilterInputs.tsx","../src/Filters/molecules/FiltersResults.tsx","../src/Filters/organisms/FilterBar.tsx","../src/Filters/atoms/ToggleButton.tsx","../src/Icons/StatusIcon.tsx","../src/LineUI/HandleUnit.tsx","../src/LineUI/LineUnit.tsx","../src/LineUI/Contexts.tsx","../src/LineUI/LineSet.tsx","../src/LineUI/LineUI.tsx","../src/LineUI/LineUIVideo.tsx","../src/WebRTCClient.tsx","../src/LineUI/LineUIRTC.tsx","../src/LineUI/LineReducer.ts","../src/Pages/atoms/PageTitle.tsx","../src/Pages/atoms/IntroductionText.tsx","../src/Misc/atoms/Tag.tsx","../src/Pages/molecules/PageHeader.tsx","../src/Pages/molecules/MultilineContent.tsx","../src/Tables/atoms/TableRowThumbnail.tsx","../src/Tables/atoms/TypeTableDeviceStatus.tsx","../src/Tables/atoms/TypeTableCell.tsx","../src/Tables/atoms/TypeTableRow.tsx","../src/Tables/atoms/TableHeaderTitle.tsx","../src/Tables/molecules/TypeTableHeader.tsx","../src/Tables/organisms/TypeTable.tsx","../src/Tables/molecules/EditCell.tsx","../src/CameraPanels/atoms/MediaStream.tsx","../src/CameraPanels/atoms/PanelMetaData.tsx","../src/CameraPanels/molecules/CameraPanel.tsx","../src/CameraPanels/organisms/CameraPanels.tsx","../src/Misc/molecules/TagList.tsx","../src/Misc/molecules/DebouncedSearcher.tsx","../src/Misc/atoms/ActionsBar.tsx","../src/Misc/molecules/Pagination.tsx","../src/Modals/ConfirmationModal.tsx","../src/Layouts/atoms/UtilityHeaderShare.tsx","../src/Layouts/atoms/UtilityHeaderBack.tsx","../src/Layouts/molecules/UtilityHeader.tsx","../src/Tabs/Tabs.tsx","../src/Layouts/organisms/ContentLayout.tsx","../src/Layouts/atoms/FullWidthContentBlock.tsx","../src/Layouts/atoms/ResizeLine.tsx","../src/Layouts/molecules/SplitLayout.tsx","../src/Global/atoms/Layout.tsx","../src/Global/atoms/ContextItem.tsx","../src/hooks/useMenu.ts","../src/Global/atoms/NavigationItem.tsx","../src/Global/organisms/MainMenu.tsx","../src/Global/atoms/UserDrawerMeta.tsx","../src/Global/atoms/DrawerBottomMenu.tsx","../src/Global/molecules/UserMenu.tsx","../src/Global/atoms/NotificationItem.tsx","../src/Global/molecules/NotificationsHistory.tsx","../src/Global/atoms/TopBarBadge.tsx","../src/Global/molecules/TopBar.tsx","../src/Tabs/TabList.tsx","../src/Tabs/atoms/Tab.tsx","../src/Tabs/TabContent.tsx","../src/Tabs/atoms/MobileTab.tsx","../src/Tabs/atoms/TabWithIcon.tsx","../src/Tabs/molecules/TabsWithIconBar.tsx","../src/Global/atoms/CloseButton.tsx","../src/Global/atoms/MobileNavbarContent.tsx","../src/Global/organisms/MobileMenu.tsx","../src/Global/atoms/MobileLogoLink.tsx","../src/Global/molecules/MobileUserMenu.tsx","../src/Global/organisms/MobileNavbar.tsx","../src/Global/templates/GlobalUI.tsx","../src/Global/molecules/Sidebar.tsx"],"sourcesContent":["export const fontFamily = {\n ui: 'Monorale, Hiragino Sans, \"ヒラギノ角ゴシック\", Hiragino Kaku Gothic ProN, \"ヒラギノ角ゴ ProN W3\", Roboto, YuGothic, \"游ゴシック\", Meiryo, \"メイリオ\", sans-serif;',\n data: 'Lato, Hiragino Sans, \"ヒラギノ角ゴシック\", Hiragino Kaku Gothic ProN, \"ヒラギノ角ゴ ProN W3\", Roboto, YuGothic, \"游ゴシック\", Meiryo, \"メイリオ\", sans-serif;'\n};\n\nexport const dimensions = {\n icons: {\n weights: {\n light: 1,\n regular: 1.5,\n heavy: 3,\n strong: 5\n }\n },\n form: {\n button: {\n xsmall: {\n height: '20px',\n padding: '0 10px',\n iconSize: 12,\n },\n small: {\n height: '30px',\n padding: '0 20px',\n iconSize: 14,\n },\n normal: {\n height: '40px',\n padding: '0 20px',\n iconSize: 16,\n },\n large: {\n height: '60px',\n padding: '0 20px',\n iconSize: 20,\n },\n },\n input: {\n height: '40px'\n },\n switch: {\n outer: {\n width: '38px',\n height: '22px',\n borderRadius: '11px'\n },\n inner: {\n width: '16px',\n height: '16px',\n borderRadius: '8px'\n },\n positions: {\n top: '2px',\n off: '2px',\n neutral: '10px',\n locked: '2px',\n on: '18px',\n }\n }\n },\n global: {\n mainMenu: {\n width: {\n open: '280px',\n closed: '80px'\n }\n }\n }\n};\n\nexport const animation = {\n easing: {\n primary: {\n inOut: 'cubic-bezier(0.87, 0, 0.13, 1)',\n out: 'cubic-bezier(0.16, 1, 0.3, 1)',\n in: 'cubic-bezier(0.7, 0, 0.84, 0)',\n }\n },\n speed: {\n faster: '0.085s',\n fast: '0.175s',\n normal: '0.35s',\n slow: '0.7s',\n slower: '1.4s',\n slowest: '2.8s'\n }\n};\n\nexport const deviceSize = {\n small: 0,\n medium: 768,\n large: 1024,\n xlarge: 1280,\n xxlarge: 1536,\n};\n\n\nexport const deviceMediaQuery = {\n small: `(min-width: ${deviceSize.small}px)`,\n medium: `(min-width: ${deviceSize.medium}px)`,\n large: `(min-width: ${deviceSize.large}px)`,\n xlarge: `(min-width: ${deviceSize.xlarge}px)`,\n xxlarge: `(min-width: ${deviceSize.xxlarge}px)`\n};","import type {TypeCellAlignment } from '../../Tables';\nimport type { Properties as CSSProperties } from 'csstype';\n\ntype TypographyStyle = Pick<\n CSSProperties,\n | 'textAlign'\n | 'fontStyle'\n | 'fontSize'\n | 'fontWeight'\n | 'lineHeight'\n | 'letterSpacing'\n | 'textDecoration'\n | 'textTransform'\n | 'color'\n>;\n\ntype AlignmentStyles = {\n [K in TypeCellAlignment]: TypographyStyle;\n};\n\ntype ColumnDataStyles = {\n firstColumn: TypographyStyle;\n lowImportance: AlignmentStyles;\n normalImportance: AlignmentStyles;\n highImportance: AlignmentStyles;\n unit: TypographyStyle;\n};\n\ntype HeaderStyles = {\n [K in TypeCellAlignment]: TypographyStyle;\n};\n\ntype InputStyles = {\n label?: TypographyStyle;\n placeholder?: { [key: string]: TypographyStyle };\n value?: { [key: string]: TypographyStyle };\n};\n\ntype SubOptionStyles = {\n label?: TypographyStyle;\n value?: TypographyStyle;\n};\n\ntype DatepickerStyles = {\n metaHeader?: { [key: string]: TypographyStyle };\n calendar?: { [key: string]: TypographyStyle };\n monthLink?: { [key: string]: TypographyStyle };\n focusedMonth?: TypographyStyle;\n focusedYear?: TypographyStyle;\n};\n\ntype FormTypography = {\n label?: { [key: string]: TypographyStyle };\n tip?: TypographyStyle;\n button?: { [key: string]: { [key: string]: TypographyStyle } };\n input?: InputStyles;\n labelInformation?: TypographyStyle;\n select?: { [key: string]: TypographyStyle };\n feedback?: { message?: TypographyStyle };\n};\n\ntype ContentTypography = {\n 'section-H2'?: TypographyStyle;\n sectionH3?: TypographyStyle;\n actionParagraph?: TypographyStyle;\n hyperlink?: { [key: string]: TypographyStyle };\n};\n\ntype FilterTypography = {\n datepicker?: DatepickerStyles;\n value?: TypographyStyle;\n subOption?: SubOptionStyles;\n presetAction?: TypographyStyle;\n filterButton?: { [key: string]: TypographyStyle };\n searchInput?: { [key: string]: TypographyStyle };\n};\n\ntype TableTypography = {\n columnData: ColumnDataStyles;\n header: HeaderStyles;\n subHeader: HeaderStyles;\n};\n\ntype MetaTypography = {\n tagList?: {\n emptyStates?: { [key: string]: TypographyStyle };\n item?: { [key: string]: TypographyStyle };\n };\n};\n\nexport const typography: {\n pageHeader?: { [key: string]: TypographyStyle };\n form?: FormTypography;\n content?: ContentTypography;\n feedbackBar?: { message?: TypographyStyle };\n searchBar?: { [key: string]: TypographyStyle };\n meta?: MetaTypography;\n table: TableTypography;\n filters?: FilterTypography;\n tables: { [key: string]: TypographyStyle };\n} = {\n // DEPRECATED: pageHeader\n \"pageHeader\": {\n \"introduction\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 300,\n \"lineHeight\": \"25px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"areaTitle\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"mainTitle\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"26px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n }\n },\n \"form\": {\n \"label\": {\n \"meta\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 300,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"default\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"disabled\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 300,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"failure\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--warning-8)\"\n },\n \"meta(Selected)\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--primary-8)\"\n }\n },\n \"tip\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"lineHeight\": \"25px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--primary-7)\"\n },\n \"button\": {\n \"secondary\": {\n \"normal\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"large\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"20px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"small\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"xsmall\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n }\n },\n \"primary\": {\n \"large\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"20px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"normal\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"small\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"xsmall\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n }\n },\n \"danger\": {\n \"large\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"20px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"normal\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"small\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"xsmall\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n }\n }\n },\n \"input\": {\n \"label\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"placeholder\": {\n \"normal\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"compact\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"lineHeight\": \"15px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n }\n },\n \"value\": {\n \"normal\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 500,\n \"lineHeight\": \"25px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n },\n \"compact\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"lineHeight\": \"15px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n }\n }\n },\n \"labelInformation\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 300,\n \"lineHeight\": \"25px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"select\": {\n \"option\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 500,\n \"lineHeight\": \"15px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"selectedValue\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 500,\n \"lineHeight\": \"15px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--black-11)\"\n },\n \"option(Hover)\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 500,\n \"lineHeight\": \"15px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--primary-11)\"\n }\n },\n \"feedback\": {\n \"message\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"lineHeight\": \"20px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n }\n }\n },\n \"content\": {\n \"section-H2\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"20px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n },\n \"sectionH3\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"16px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n },\n \"actionParagraph\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 300,\n \"lineHeight\": \"25px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"hyperlink\": {\n \"hover\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"lineHeight\": \"25px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--primary-8)\"\n },\n \"base\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"lineHeight\": \"25px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--primary-9)\"\n }\n }\n },\n \"feedbackBar\": {\n \"message\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 400,\n \"lineHeight\": \"15px\",\n \"letterSpacing\": \"-0.2px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n }\n },\n \"searchBar\": {\n \"placeholder\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 700,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"value\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n }\n },\n \"meta\": {\n \"tagList\": {\n \"emptyStates\": {\n \"normal\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"small\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n }\n },\n \"item\": {\n \"normal\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"small\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n }\n }\n }\n },\n \"table\": {\n \"columnData\": {\n \"normalImportance\": {\n \"right\": {\n \"textAlign\": \"right\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a11)\"\n },\n \"left\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a11)\"\n },\n \"center\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a11)\"\n }\n },\n \"highImportance\": {\n \"right\": {\n \"textAlign\": \"right\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 900,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n },\n \"center\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 900,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n },\n \"left\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 900,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n }\n },\n \"firstColumn\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n },\n \"lowImportance\": {\n \"right\": {\n \"textAlign\": \"right\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a11)\"\n },\n \"center\": {\n \"textAlign\": \"center\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a11)\"\n },\n \"left\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a11)\"\n }\n },\n \"unit\": {\n \"textAlign\": \"right\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a11)\"\n }\n },\n \"header\": {\n \"center\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 700,\n \"letterSpacing\": \"0.4px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"left\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 700,\n \"letterSpacing\": \"0.4px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"right\": {\n \"textAlign\": \"right\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 700,\n \"letterSpacing\": \"0.4px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n }\n },\n \"subHeader\": {\n \"center\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 700,\n \"letterSpacing\": \"0.4px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"left\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 700,\n \"letterSpacing\": \"0.4px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"right\": {\n \"textAlign\": \"right\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 700,\n \"letterSpacing\": \"0.4px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n }\n }\n },\n \"filters\": {\n \"datepicker\": {\n \"metaHeader\": {\n \"default\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 300,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"active\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 600,\n \"textDecoration\": \"none\",\n \"color\": \"var(--primary-8)\"\n }\n },\n \"calendar\": {\n \"active\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"otherMonth\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a8)\"\n },\n \"default\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"header\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 700,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a12)\"\n }\n },\n \"monthLink\": {\n \"default\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 700,\n \"lineHeight\": \"20px\",\n \"textTransform\": \"uppercase\",\n \"letterSpacing\": \"0.4px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-9)\"\n },\n \"hover\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 700,\n \"lineHeight\": \"20px\",\n \"textTransform\": \"uppercase\",\n \"letterSpacing\": \"0.4px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n }\n },\n \"focusedMonth\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"20px\",\n \"fontWeight\": 400,\n \"lineHeight\": \"20px\",\n \"letterSpacing\": \"0.5px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"focusedYear\": {\n \"textAlign\": \"center\",\n \"fontSize\": \"10px\",\n \"fontWeight\": 700,\n \"lineHeight\": \"20px\",\n \"textTransform\": \"uppercase\",\n \"letterSpacing\": \"0.3333333px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n }\n },\n \"value\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"14px\",\n \"fontWeight\": 500,\n \"letterSpacing\": \"0.2px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"subOption\": {\n \"label\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 300,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"value\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"13px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a12)\"\n }\n },\n \"presetAction\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"13px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n },\n \"filterButton\": {\n \"default\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"active\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n },\n \"hover\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--white-1)\"\n }\n },\n \"searchInput\": {\n \"placeholder\": {\n \"textAlign\": \"left\",\n \"fontStyle\": \"italic\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 500,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-11)\"\n },\n \"value\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 400,\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-12)\"\n }\n }\n },\n \"tables\": {\n \"groupName\": {\n \"textAlign\": \"left\",\n \"fontSize\": \"12px\",\n \"fontWeight\": 400,\n \"letterSpacing\": \"0.3px\",\n \"textDecoration\": \"none\",\n \"color\": \"var(--grey-a11)\"\n }\n }\n};","export const colors: {\n pureBase: string;\n pureTop: string;\n divider: string;\n icons: { [key: string]: string };\n menu: { [key: string]: string };\n feedback: { [key: string]: string };\n status: { [key: string]: string };\n transparent: string;\n input: { border: { [key: string]: string } };\n} = {\n \"pureBase\": \"var(--white-1)\",\n \"pureTop\": \"var(--black-1)\",\n \"divider\": \"var(--grey-6)\",\n \"icons\": {\n \"inverse\": \"var(--grey-1)\",\n \"mono\": \"var(--grey-12)\",\n \"dimmed\": \"var(--grey-11)\",\n \"subtle\": \"var(--grey-10)\",\n \"primary\": \"var(--primary-9)\",\n \"danger\": \"var(--warning-9)\",\n \"white\": \"var(--white-1)\"\n },\n \"menu\": {\n \"active\": \"var(--primary-9)\",\n \"hover\": \"var(--primary-8)\",\n \"default\": \"var(--grey-2)\",\n \"indicator\": \"var(--grey-a1)\",\n \"passive\": \"var(--primary-a7)\"\n },\n \"feedback\": {\n \"error\": \"var(--warning-8)\",\n \"info\": \"var(--primary-7)\",\n \"neutral\": \"var(--grey-9)\",\n \"success\": \"var(--success-8)\",\n \"warning\": \"var(--caution-10)\"\n },\n \"status\": {\n \"caution\": \"var(--caution-10)\",\n \"danger\": \"var(--warning-8)\",\n \"folder\": \"var(--primary-7)\",\n \"highlight\": \"var(--primary-7)\",\n \"good\": \"var(--success-7)\",\n \"neutral\": \"var(--grey-5)\"\n },\n \"transparent\": \"var(--black-a1)\",\n \"input\": {\n \"border\": {\n \"default\": \"var(--grey-7)\"\n }\n }\n};","import { colors } from './colors';\n\nexport const styles = {\n \"generic\": {\n \"transparent\": {}\n },\n \"form\": {\n \"input\": {\n \"default\": {\n \"normal\": {\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": colors.input.border.default,\n \"border\": colors.input.border.default + \" 1px solid\"\n },\n \"focused\": {\n \"boxShadow\": \"0px 3px 7px 0px var(--primary-a2)\",\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--primary-7)\",\n \"border\": \"var(--primary-7) 1px solid\"\n }\n },\n \"disabled\": {\n \"normal\": {\n \"backgroundColor\": \"var(--primary-2)\",\n \"borderColor\": \"var(--grey-7)\",\n \"border\": \"var(--grey-7) 1px solid\"\n }\n },\n \"subdivision\": {\n \"backgroundColor\": \"var(--grey-7)\"\n },\n \"required\": {\n \"focused\": {\n \"boxShadow\": \"0px 3px 7px 0px var(--primary-a2)\",\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--primary-7)\",\n \"border\": \"var(--primary-7) 2px solid\"\n },\n \"normal\": {\n \"borderColor\": \"var(--primary-7)\",\n \"border\": \"var(--primary-7) 1px solid\",\n \"backgroundColor\": \"var(--grey-1)\",\n }\n },\n \"valid\": {\n \"focused\": {\n \"boxShadow\": \"0px 3px 5px 0px var(--success-a2)\",\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--success-7)\",\n \"border\": \"var(--success-7) 2px solid\"\n },\n \"normal\": {\n \"borderColor\": \"var(--success-7)\",\n \"border\": \"var(--success-7) 1px solid\",\n \"backgroundColor\": \"var(--grey-1)\",\n }\n },\n \"invalid\": {\n \"focused\": {\n \"boxShadow\": \"0px 3px 7px 0px var(--warning-a2)\",\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--warning-8)\",\n \"border\": \"var(--warning-8) 2px solid\"\n },\n \"normal\": {\n \"borderColor\": \"var(--warning-8)\",\n \"border\": \"var(--warning-8) 1px solid\",\n \"backgroundColor\": \"var(--grey-1)\",\n }\n },\n \"processing\": {\n \"focused\": {\n \"boxShadow\": \"0px 3px 7px 0px var(--primary-a2)\",\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--primary-7)\",\n \"border\": \"var(--primary-7) 2px solid\"\n },\n \"normal\": {\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--primary-7)\",\n \"border\": \"var(--primary-7) 1px solid\"\n }\n },\n \"seperatedValues\": {\n \"background\": {\n \"backgroundColor\": \"var(--primary-7)\",\n \"backgroundImage\": \"linear-gradient(315.00deg, var(--primary-7) 0%, var(--primary-8) 100%)\"\n },\n \"hoverHighlight\": {\n \"backgroundColor\": \"var(--primary-7)\"\n }\n }\n },\n \"button\": {\n \"primary\": {\n \"default\": {\n \"backgroundColor\": \"var(--primary-9)\",\n \"backgroundImage\": \"linear-gradient(135.00deg, var(--primary-9) 0%, var(--primary-8) 100%)\"\n },\n \"hover\": {\n \"backgroundColor\": \"var(--primary-10)\"\n },\n \"active\": {\n \"backgroundColor\": \"var(--primary-9)\"\n },\n \"divider\": {\n \"backgroundColor\": \"var(--primary-a8)\"\n },\n \"disabled\": {\n \"backgroundColor\": \"var(--primary-a10)\",\n \"backgroundImage\": \"linear-gradient(135.00deg, var(--primary-9) 0%, var(--primary-8) 100%)\"\n },\n \"actionArea\": {\n \"backgroundColor\": \"var(--primary-9)\",\n \"backgroundImage\": \"linear-gradient(135.00deg, var(--primary-9) 0%, var(--primary-8) 100%)\"\n }\n },\n \"secondary\": {\n \"default\": {\n \"backgroundColor\": \"var(--grey-9)\"\n },\n \"hover\": {\n \"backgroundColor\": \"var(--grey-10)\"\n },\n \"active\": {\n \"backgroundColor\": \"var(--grey-9)\"\n },\n \"disabled\": {\n \"backgroundColor\": \"var(--grey-a10)\"\n },\n \"divider\": {\n \"backgroundColor\": \"var(--grey-a8)\"\n },\n \"actionArea\": {\n \"backgroundColor\": \"var(--grey-9)\",\n \"backgroundImage\": \"linear-gradient(135.00deg, var(--grey-9) 0%, var(--grey-8) 100%)\"\n }\n },\n \"danger\": {\n \"default\": {\n \"backgroundColor\": \"var(--warning-9)\",\n \"backgroundImage\": \"linear-gradient(317.51deg, var(--warning-9) 0%, var(--warning-8) 100%)\"\n },\n \"hover\": {\n \"backgroundColor\": \"var(--warning-10)\"\n },\n \"active\": {\n \"backgroundColor\": \"var(--warning-9)\"\n },\n \"disabled\": {\n \"backgroundColor\": \"var(--warning-a10)\"\n },\n \"divider\": {\n \"backgroundColor\": \"var(--warning-8)\"\n },\n \"actionArea\": {\n \"backgroundColor\": \"var(--warning-9)\",\n \"backgroundImage\": \"linear-gradient(317.51deg, var(--warning-9) 0%, var(--warning-8) 100%)\"\n }\n }\n },\n \"switch\": {\n \"off\": {\n \"default\": {\n \"outer\": {\n \"backgroundColor\": \"var(--grey-3)\",\n \"backgroundImage\": \"linear-gradient(180.00deg, var(--primary-2) 0%, var(--primary-3) 100%)\",\n \"borderColor\": \"var(--grey-a8)\",\n \"border\": \"var(--grey-a8) 1px solid\"\n },\n \"inner\": {\n \"backgroundColor\": \"var(--primary-7)\",\n \"backgroundImage\": \"linear-gradient(315.00deg, var(--primary-7) 0%, var(--primary-8) 100%)\"\n }\n },\n \"disabled\": {\n \"outer\": {\n \"backgroundColor\": \"var(--grey-1)\",\n \"backgroundImage\": \"linear-gradient(180.00deg, var(--grey-1)0%, var(--grey-1) 100%)\",\n \"borderColor\": \"var(--grey-a7)\",\n \"border\": \"var(--grey-a7) 1px solid\"\n },\n \"inner\": {\n \"backgroundColor\": \"var(--grey-7)\"\n }\n },\n \"loading\": {\n \"outer\": {\n \"backgroundColor\": \"var(--grey-3)\",\n \"backgroundImage\": \"linear-gradient(180.00deg, var(--grey-3) 0%, var(--primary-3) 100%)\",\n \"borderColor\": \"var(--grey-a8)\",\n \"border\": \"var(--grey-a8) 1px solid\"\n }\n }\n },\n \"on\": {\n \"default\": {\n \"outer\": {\n \"backgroundColor\": \"var(--primary-7)\",\n \"backgroundImage\": \"linear-gradient(317.51deg, var(--primary-7) 0%, var(--primary-7) 100%)\",\n \"borderColor\": \"var(--primary-8)\",\n \"border\": \"var(--primary-8) 1px solid\"\n },\n \"inner\": {\n \"backgroundColor\": \"var(--white-1)\"\n }\n },\n \"disabled\": {\n \"outer\": {\n \"backgroundColor\": \"var(--primary-5)\",\n \"backgroundImage\": \"linear-gradient(180.00deg, var(--primary-5) 0%, var(--primary-5) 100%)\",\n \"borderColor\": \"var(--primary-6)\",\n \"border\": \"var(--primary-6) 1px solid\"\n },\n \"inner\": {\n \"backgroundColor\": \"var(--white-1)\"\n }\n },\n \"loading\": {\n \"outer\": {\n \"backgroundColor\": \"var(--primary-a7)\",\n \"backgroundImage\": \"linear-gradient(315.00deg, var(--primary-a7) 0%, var(--primary-a7) 100%)\",\n \"borderColor\": \"var(--primary-a8)\",\n \"border\": \"var(--primary-a8) 1px solid\"\n }\n }\n },\n \"failure\": {\n \"default\": {\n \"outer\": {\n \"backgroundColor\": \"var(--warning-9)\",\n \"backgroundImage\": \"linear-gradient(317.51deg, var(--warning-9) 0%, var(--warning-8) 100%)\",\n \"borderColor\": \"var(--warning-9)\",\n \"border\": \"var(--warning-9) 1px solid\"\n },\n \"inner\": {\n \"backgroundColor\": \"var(--white-1)\"\n }\n },\n \"loading\": {\n \"outer\": {\n \"backgroundColor\": \"var(--warning-8)\",\n \"backgroundImage\": \"linear-gradient(317.51deg, var(--warning-8) 0.4%, var(--warning-8) 100%)\",\n \"borderColor\": \"var(--warning-8)\",\n \"border\": \"var(--warning-8) 1px solid\"\n },\n \"inner\": {\n \"backgroundColor\": \"var(--white-1)\"\n }\n }\n },\n \"danger\": {\n \"default\": {\n \"outer\": {\n \"backgroundColor\": \"var(--warning-11)\",\n \"backgroundImage\": \"linear-gradient(317.51deg, var(--warning-11) 0%, var(--warning-8) 100%)\",\n \"borderColor\": \"var(--warning-8)\",\n \"border\": \"var(--warning-8) 1px solid\"\n },\n \"inner\": {\n \"backgroundColor\": \"var(--white-1)\"\n }\n },\n \"loading\": {\n \"outer\": {\n \"backgroundColor\": \"var(--warning-8)\",\n \"backgroundImage\": \"linear-gradient(317.51deg, var(--warning-8) 0%, var(--warning-7) 100%)\",\n \"borderColor\": \"var(--warning-8)\",\n \"border\": \"var(--warning-8) 1px solid\"\n }\n },\n \"disabled\": {\n \"outer\": {\n \"backgroundColor\": \"var(--warning-7)\",\n \"backgroundImage\": \"linear-gradient(317.51deg, var(--warning-7) 0%, var(--caution-6) 100%)\",\n \"borderColor\": \"var(--warning-6)\",\n \"border\": \"var(--warning-6) 1px solid\"\n },\n \"inner\": {\n \"backgroundColor\": \"var(--white-1)\"\n }\n }\n },\n \"locked\": {\n \"default\": {\n \"outer\": {\n \"backgroundColor\": \"var(--grey-1) \",\n \"backgroundImage\": \"linear-gradient(180.00deg, var(--grey-1) 0%, var(--grey-1) 100%)\",\n \"borderColor\": \"var(--grey-a8)\",\n \"border\": \"var(--grey-a8) 1px solid\"\n },\n \"inner\": {\n \"backgroundColor\": \"var(--grey-8)\"\n }\n }\n }\n },\n \"checkbox\": {\n \"unchecked\": {\n \"disabled\": {\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--grey-6)\",\n \"border\": \"var(--grey-6) 2px solid\"\n },\n \"default\": {\n \"borderColor\": \"var(--grey-9)\",\n \"border\": \"var(--grey-9) 2px solid\"\n },\n \"hover\": {\n \"borderColor\": \"var(--primary-8)\",\n \"border\": \"var(--primary-8) 2px solid\"\n }\n },\n \"checked\": {\n \"disabled\": {\n \"boxShadow\": \"inset 0px 1px 5px 0px var(--grey-a1)\",\n \"backgroundColor\": \"var(--grey-6)\"\n },\n \"default\": {\n \"boxShadow\": \"inset 0px 1px 5px 0px var(--grey-a1)\",\n \"backgroundColor\": \"var(--primary-8)\"\n },\n \"hover\": {\n \"boxShadow\": \"inset 0px 1px 5px 0px var(--grey-a1)\",\n \"backgroundColor\": \"var(--primary-8)\"\n }\n },\n \"indeterminate\": {\n \"hover\": {\n \"boxShadow\": \"inset 0px 1px 5px 0px var(--grey-a1)\",\n \"backgroundColor\": \"var(--primary-6)\"\n },\n \"default\": {\n \"boxShadow\": \"inset 0px 1px 5px 0px var(--grey-a1)\",\n \"backgroundColor\": \"var(--primary-6)\"\n }\n }\n }\n },\n \"indicators\": {\n \"spinner\": {\n \"danger\": {\n \"base\": {\n \"borderColor\": \"var(--warning-8)\",\n \"border\": \"var(--warning-8) 3px solid\"\n },\n \"top\": {\n \"borderColor\": \"var(--white-1)\",\n \"border\": \"var(--white-1) 3px solid\"\n }\n },\n \"secondary\": {\n \"top\": {\n \"borderColor\": \"var(--white-1)\",\n \"border\": \"var(--white-1) 3px solid\"\n },\n \"base\": {\n \"borderColor\": \"var(--grey-8)\",\n \"border\": \"var(--grey-8) 3px solid\"\n }\n },\n \"primary\": {\n \"top\": {\n \"borderColor\": \"var(--white-1)\",\n \"border\": \"var(--white-1) 3px solid\"\n },\n \"base\": {\n \"borderColor\": \"var(--primary-6)\",\n \"border\": \"var(--primary-6) 3px solid\"\n }\n },\n \"simple\": {\n \"top\": {\n \"borderColor\": \"var(--white-1)\",\n \"border\": \"var(--white-1) 3px solid\"\n },\n \"base\": {\n \"borderColor\": \"var(--grey-a8)\",\n \"border\": \"var(--grey-a8) 3px solid\"\n }\n }\n }\n },\n \"filters\": {\n \"dropdownContainer\": {\n \"background\": {\n \"boxShadow\": \"0px 5px 25px 0px var(--primary-a1)\",\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--grey-6)\",\n \"border\": \"var(--grey-6) 1px solid\"\n },\n \"topBorder\": {\n \"backgroundColor\": \"var(--primary-7)\"\n }\n },\n \"filterButton\": {\n \"default\": {\n \"boxShadow\": \"0px 4px 9px 0px var(--primary-a1)\",\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--grey-7)\",\n \"border\": \"var(--grey-7) 1px solid\",\n \"textColor\": \"var(--grey-11)\"\n },\n \"active\": {\n \"boxShadow\": \"0px 4px 9px 0px var(--primary-a1)\",\n \"backgroundColor\": \"var(--primary-7)\",\n \"borderColor\": \"var(--primary-7)\",\n \"border\": \"var(--primary-7) 1px solid\",\n \"textColor\": \"var(--white-1)\"\n },\n \"hover\": {\n \"boxShadow\": \"0px 4px 9px 0px var(--primary-a1)\",\n \"backgroundColor\": \"var(--primary-7)\",\n \"borderColor\": \"var(--primary-7)\",\n \"border\": \"var(--primary-7) 1px solid\",\n \"textColor\": \"var(--white-1)\"\n }\n },\n \"searchInput\": {\n \"default\": {\n \"boxShadow\": \"0px 4px 9px 0px var(--primary-a2)\",\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--grey-7)\",\n \"border\": \"var(--grey-7) 1px solid\"\n },\n \"focused\": {\n \"boxShadow\": \"0px 4px 9px 0px var(--primary-a2)\",\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--primary-6)\",\n \"border\": \"var(--primary-6) 1px solid\"\n }\n }\n },\n \"tables\": {\n \"loadingOverlay\": {\n \"backgroundColor\": \"var(--grey-2)\",\n \"backgroundImage\": \"linear-gradient(180.00deg, var(--grey-2) 0%, var(--grey-3) 100%)\"\n },\n \"rows\": {\n \"divider\": {\n \"backgroundColor\": colors.divider\n }\n },\n \"header\": {\n \"groupLine\": {\n \"backgroundColor\": colors.divider\n },\n \"divider\": {\n \"backgroundColor\": colors.divider\n },\n \"sortable\": {\n \"hover\": {\n \"backgroundColor\": \"var(--grey-4)\"\n },\n \"default\": {\n \"backgroundColor\": \"var(--grey-2)\"\n }\n }\n }\n },\n \"general\": {\n \"divider\": {\n \"backgroundColor\": colors.divider\n }\n },\n \"feedbackBar\": {\n \"neutral\": {\n \"backgroundColor\": colors.feedback.neutral\n },\n \"error\": {\n \"backgroundColor\": colors.feedback.error\n },\n \"info\": {\n \"backgroundColor\": colors.feedback.info\n },\n \"success\": {\n \"backgroundColor\": colors.feedback.success\n },\n \"warning\": {\n \"backgroundColor\": colors.feedback.warning\n }\n },\n \"filterButton\": {\n \"active\": {\n \"boxShadow\": \"0px 4px 9px 0px var(--primary-a1)\",\n \"backgroundColor\": \"var(--grey-1)\",\n \"borderColor\": \"var(--primary-7)\",\n \"border\": \"var(--primary-7) 1px solid\"\n }\n }\n};","type LineStyle = {\n label: { fill: string };\n contrastLine: { stroke: string };\n highlightLine: { stroke: string };\n highlightLineBorder: { stroke: string };\n grabHandle: { fill: string; stroke: string };\n point: { fill: string };\n grabHandleContrast: { stroke: string };\n grabHandleText: { fill: string; stroke?: string };\n handleBase: { fill: string };\n handleRingLayer: { stroke: string };\n handleReactiveFill: { fill: string };\n handleReactiveRing: { stroke: string };\n handleContrastLayer: { stroke: string };\n stopStart: { stopColor: string };\n stopEnd: { stopColor: string };\n};\n\ntype LinesTheme = {\n primary: LineStyle;\n secondary: LineStyle;\n danger: LineStyle;\n [key: string]: LineStyle; // Allow dynamic extension\n};\n\nexport const custom: { lines: LinesTheme } = {\n \"lines\": {\n \"primary\": {\n label: {\n fill: \"#fff\"//\"hsla(205deg, 80%, 25%, 100%)\"\n },\n contrastLine: {\n stroke: 'hsla(205deg, 80%, 45%, 100%);'\n },\n highlightLine: {\n stroke: 'hsla(205deg, 45%, 90%, 90%);'\n },\n highlightLineBorder: {\n stroke: 'hsla(204.8,53.4%,46.3%,100%);'\n },\n grabHandle: {\n fill: 'hsla(205deg, 45%, 90%, 100%)',\n stroke: 'hsla(205deg, 45%, 100%, 100%)'\n },\n point:{\n fill: 'hsla(205deg, 45%, 90%, 100%)',\n },\n grabHandleContrast:{\n stroke: 'hsla(205deg, 80%, 45%, 100%)'\n },\n grabHandleText:{\n fill: 'hsla(205deg, 80%, 25%, 100%);'\n },\n handleBase: {\n fill: 'hsla(235deg, 100%, 80%, 100%);'\n },\n handleRingLayer: {\n stroke: 'hsla(205deg, 100%, 89%, 100%);'\n },\n handleReactiveFill:{\n fill: 'hsla(192deg, 100%, 45%, 100%);'\n },\n handleReactiveRing:{\n stroke: 'hsla(205deg, 100%, 36%, 27%);'\n },\n handleContrastLayer:{\n stroke: 'hsla(205deg, 100%, 36%, 15%);'\n },\n stopStart:{\n stopColor:' hsla(205deg, 100%, 15%, 35%);'\n },\n stopEnd:{\n stopColor: 'hsla(205deg, 100%, 15%, 0%)'\n\n }\n\n },\n \"secondary\": {\n label: {\n fill: \"#fff\"//\"hsla(205deg, 80%, 25%, 100%)\"\n },\n contrastLine: {\n stroke: 'hsla(120deg, 80%, 45%, 100%);'\n },\n highlightLine: {\n stroke: 'hsla(120deg, 45%, 90%, 90%);'\n },\n highlightLineBorder: {\n stroke: 'hsla(120deg, 81%, 70%, 90%);'\n },\n grabHandle: {\n fill: 'hsla(120deg, 45%, 90%, 100%)',\n stroke: 'hsla(120deg, 45%, 100%, 100%)'\n },\n point:{\n fill: 'hsla(120deg, 45%, 90%, 100%)',\n },\n grabHandleContrast:{\n stroke: 'hsla(120deg, 80%, 45%, 100%)'\n },\n grabHandleText:{\n fill: 'hsla(120deg, 80%, 25%, 100%);'\n },\n handleBase: {\n fill: 'hsla(150deg, 100%, 80%, 100%);'\n },\n handleRingLayer: {\n stroke: 'hsla(120deg, 100%, 89%, 100%);'\n },\n handleReactiveFill:{\n fill: 'hsla(108deg, 100%, 45%, 100%);'\n },\n handleReactiveRing:{\n stroke: 'hsla(120deg, 100%, 36%, 27%);'\n },\n handleContrastLayer:{\n stroke: 'hsla(120deg, 100%, 36%, 15%);'\n },\n stopStart:{\n stopColor:' hsla(120deg, 100%, 15%, 35%);'\n },\n stopEnd:{\n stopColor: 'hsla(120deg, 100%, 15%, 0%)'\n\n }\n },\n \"danger\": {\n label: {\n fill: \"#fff\"//\"hsla(205deg, 80%, 25%, 100%)\"\n },\n contrastLine: {\n stroke: 'hsla(0, 80%, 45%, 100%);'\n },\n highlightLine: {\n stroke: 'hsla(0, 45%, 90%, 90%);'\n },\n highlightLineBorder: {\n stroke: 'hsla(0deg, 86%, 70%, 100%);'\n },\n grabHandle: {\n fill: 'hsla(0, 45%, 90%, 100%)',\n stroke: 'hsla(0, 45%, 100%, 100%)'\n },\n point:{\n fill: 'hsla(0, 45%, 90%, 100%)',\n },\n grabHandleText:{\n fill: 'hsla(0, 80%, 25%, 100%);'\n },\n grabHandleContrast:{\n stroke: 'hsla(0, 80%, 45%, 100%)'\n },\n handleBase: {\n fill: 'hsla(30deg, 100%, 80%, 100%);'\n },\n handleRingLayer: {\n stroke: 'hsla(0, 100%, 89%, 100%);'\n },\n handleReactiveFill:{\n fill: 'hsla(348deg, 100%, 45%, 100%);'\n },\n handleReactiveRing:{\n stroke: 'hsla(0deg, 100%, 36%, 27%);'\n },\n handleContrastLayer:{\n stroke: 'hsla(0deg, 100%, 36%, 15%);'\n },\n stopStart:{\n stopColor:' hsla(0, 100%, 15%, 35%);'\n },\n stopEnd:{\n stopColor: 'hsla(0, 100%, 15%, 0%);'\n }\n }\n }\n};","import { fontFamily, dimensions, animation, deviceSize, deviceMediaQuery } from './common';\nimport { typography } from './legacy/typography';\nimport { colors } from './legacy/colors';\nimport { styles } from './legacy/styles';\nimport { custom } from './legacy/custom';\nexport default { fontFamily, dimensions, typography, colors, styles, animation, custom, deviceSize, deviceMediaQuery };","import { css } from 'styled-components';\nimport { deviceMediaQuery } from '../common';\n\nexport const layoutVariables = css`\n /** Layouts */\n :root {\n --max-content-width: 1840px;\n }\n\n .content-layout {\n \n &-default {\n --content-layout-padding-top: 32px;\n --content-layout-padding-right: 48px;\n --content-layout-padding-bottom: 64px;\n --content-layout-padding-left: 64px;\n --utility-header-padding-top: 48px;\n\n @media ${deviceMediaQuery.xlarge}{\n --content-layout-padding-top: 32px;\n --content-layout-padding-right: 96px;\n --content-layout-padding-bottom: 64px;\n --content-layout-padding-left: 96px;\n --utility-header-padding-top: 48px;\n }\n\n @media ${deviceMediaQuery.xxlarge}{\n --content-layout-padding-top: 30px;\n --content-layout-padding-right: 120px;\n --content-layout-padding-bottom: 64px;\n --content-layout-padding-left: 120px;\n --utility-header-padding-top: 48px;\n }\n }\n\n &-fullscreen {\n --content-layout-padding-top: 0px;\n --content-layout-padding-right: 0px;\n --content-layout-padding-bottom: 0px;\n --content-layout-padding-left: 0px;\n --utility-header-padding-top: 0px;\n --max-content-width: none;\n }\n\n &-dashboard {\n --content-layout-padding-top: 32px;\n --content-layout-padding-right: 32px;\n --content-layout-padding-bottom: 32px;\n --content-layout-padding-left: 32px;\n --utility-header-padding-top: 32px;\n --max-content-width: none;\n }\n }\n`;","import { css } from 'styled-components';\n\nexport const animationVariables = css`\n :root {\n\n --easing-primary-in-out: cubic-bezier(0.76, 0, 0.24, 1);\n --easing-primary-in: cubic-bezier(0.5, 0, 0.75, 0);\n --easing-primary-out: cubic-bezier(0.25, 1, 0.5, 1);\n \n --speed-faster: 0.085s;\n --speed-fast: 0.175s;\n --speed-normal: 0.35s;\n --speed-slow: 0.7s;\n --speed-slower: 1.4s;\n --speed-slowest: 2.8s;\n \n }\n`;","import { css } from 'styled-components';\n\nexport const colorVariables = css`\n .light-theme {\n /* --- Light Mode --- */\n --primary-1: #fcfdff;\n --primary-2: #f5f9ff;\n --primary-3: #eaf3ff;\n --primary-4: #dbecff;\n --primary-5: #c9e2ff;\n --primary-6: #b5d5ff;\n --primary-7: #9bc3fa;\n --primary-8: #76aaf4;\n --primary-9: #80b5ff;\n --primary-10: #75aaf3;\n --primary-11: #3c6eb3;\n --primary-12: #0b3162;\n --primary-a1: #0055ff03;\n --primary-a2: #0066ff0a;\n --primary-a3: #006eff15;\n --primary-a4: #0079ff24;\n --primary-a5: #0077ff36;\n --primary-a6: #016fff4a;\n --primary-a7: #0066f364;\n --primary-a8: #0061eb89;\n --primary-a9: #006bff7f;\n --primary-a10: #0062e98a;\n --primary-a11: #00429cc3;\n --primary-a12: #00285bf4;\n\n --secondary-1: #fafefd;\n --secondary-2: #f1fcfa;\n --secondary-3: #e7f9f5;\n --secondary-4: #d9f3ee;\n --secondary-5: #c7ebe5;\n --secondary-6: #afdfd7;\n --secondary-7: #8dcec3;\n --secondary-8: #53b9ab;\n --secondary-9: #12a594;\n --secondary-10: #0e9888;\n --secondary-11: #067a6f;\n --secondary-12: #10302b;\n --secondary-a1: #05cd9b05;\n --secondary-a2: #01c8a40e;\n --secondary-a3: #02c09718;\n --secondary-a4: #02af8c26;\n --secondary-a5: #00a48938;\n --secondary-a6: #00998050;\n --secondary-a7: #01927a72;\n --secondary-a8: #009783ac;\n --secondary-a9: #009e8ced;\n --secondary-a10: #009281f1;\n --secondary-a11: #00776bf9;\n --secondary-a12: #00221def;\n\n --grey-1: #fcfcfd;\n --grey-2: #f9f9fb;\n --grey-3: #f0f0f3;\n --grey-4: #e8e8ec;\n --grey-5: #e0e1e6;\n --grey-6: #d9d9e0e0;\n --grey-7: #cdced6;\n --grey-8: #b9bbc6;\n --grey-9: #8b8d98;\n --grey-10: #80838d;\n --grey-11: #717989;\n --grey-12: #5a6671;\n --grey-a1: #00005503;\n --grey-a2: #00005506;\n --grey-a3: #00003310;\n --grey-a4: #00002d17;\n --grey-a5: #0009321f;\n --grey-a6: #00002f26;\n --grey-a7: #00062e32;\n --grey-a8: #00083046;\n --grey-a9: #00051d74;\n --grey-a10: #00071b7f;\n --grey-a11: #020b1d9f;\n --grey-a12: #020b1de3;\n\n --green-1: #fbfefc;\n --green-2: #f2fcf5;\n --green-3: #e9f9ee;\n --green-4: #ddf3e4;\n --green-5: #ccebd7;\n --green-6: #b4dfc4;\n --green-7: #92ceac;\n --green-8: #5bb98c;\n --green-9: #30a46c;\n --green-10: #299764;\n --green-11: #18794e;\n --green-12: #153226;\n --green-a1: #05c04304;\n --green-a2: #00c43b0d;\n --green-a3: #02ba3c16;\n --green-a4: #01a63522;\n --green-a5: #009b3633;\n --green-a6: #0193364b;\n --green-a7: #008c3d6d;\n --green-a8: #00934ca4;\n --green-a9: #008f4acf;\n --green-a10: #008346d6;\n --green-a11: #006b3be7;\n --green-a12: #002012ea;\n\n --orange-1: #fefcfb;\n --orange-2: #fef8f4;\n --orange-3: #fff1e7;\n --orange-4: #ffe8d7;\n --orange-5: #ffdcc3;\n --orange-6: #ffcca7;\n --orange-7: #ffb381;\n --orange-8: #fa934e;\n --orange-9: #f76808;\n --orange-10: #ed5f00;\n --orange-11: #bd4b00;\n --orange-12: #451e11;\n --orange-a1: #c0430504;\n --orange-a2: #e860050b;\n --orange-a3: #ff6c0318;\n --orange-a4: #ff6e0028;\n --orange-a5: #ff6b013c;\n --orange-a6: #ff6b0158;\n --orange-a7: #ff66017e;\n --orange-a8: #f86300b1;\n --orange-a9: #f76300f7;\n --orange-a10: #ed5b00fa;\n --orange-a11: #bc4800fa;\n --orange-a12: #380e00ee;\n\n --red-1: #fefcfc;\n --red-2: #fdf8f8;\n --red-3: #faedec;\n --red-4: #fddfdd;\n --red-5: #f8d2d0;\n --red-6: #f1c3c1;\n --red-7: #e6b1ae;\n --red-8: #da9996;\n --red-9: #d16565;\n --red-10: #c45859;\n --red-11: #b64d4e;\n --red-12: #592525;\n --red-a1: #aa000003;\n --red-a2: #b7000007;\n --red-a3: #bc0e0013;\n --red-a4: #f00f0022;\n --red-a5: #da0b002f;\n --red-a6: #c609003e;\n --red-a7: #b10a0051;\n --red-a8: #a6080069;\n --red-a9: #b300009a;\n --red-a10: #a50002a7;\n --red-a11: #970002b2;\n --red-a12: #3d0000da;\n\n }\n\n .dark-theme {\n /* --- Dark mode --- */\n --primary-1: #000;\n --primary-2: #09121e;\n --primary-3: #0e2341;\n --primary-4: #0c2f5d;\n --primary-5: #153c70;\n --primary-6: #214a81;\n --primary-7: #2d5a97;\n --primary-8: #366bb5;\n --primary-9: #80b5ff;\n --primary-10: #75aaf3;\n --primary-11: #81b7ff;\n --primary-12: #cee3ff;\n --primary-a1: #0000;\n --primary-a2: #4d99ff1e;\n --primary-a3: #378aff41;\n --primary-a4: #2181ff5d;\n --primary-a5: #3089ff70;\n --primary-a6: #4293ff81;\n --primary-a7: #4c98ff97;\n --primary-a8: #4c97ffb5;\n --primary-a9: #80b5ff;\n --primary-a10: #7bb2fff3;\n --primary-a11: #81b7ff;\n --primary-a12: #cee3ff;\n\n --secondary-1: #091915;\n --secondary-2: #04201b;\n --secondary-3: #062923;\n --secondary-4: #07312b;\n --secondary-5: #083932;\n --secondary-6: #09443c;\n --secondary-7: #0b544a;\n --secondary-8: #0c6d62;\n --secondary-9: #12a594;\n --secondary-10: #10b3a3;\n --secondary-11: #0ac5b3;\n --secondary-12: #e1faf4;\n --secondary-a1: #0000;\n --secondary-a2: #00fbd508;\n --secondary-a3: #00fddc12;\n --secondary-a4: #00fde81b;\n --secondary-a5: #02fee424;\n --secondary-a6: #09ffe630;\n --secondary-a7: #11ffe342;\n --secondary-a8: #11ffe75d;\n --secondary-a9: #18ffe49b;\n --secondary-a10: #13ffe7ab;\n --secondary-a11: #0affe7bf;\n --secondary-a12: #e6fff9fa;\n\n --grey-1: #111113;\n --grey-2: #18191b;\n --grey-3: #212225;\n --grey-4: #272a2d;\n --grey-5: #2e3135;\n --grey-6: #363a3f;\n --grey-7: #43484e;\n --grey-8: #5a6169;\n --grey-9: #696e77;\n --grey-10: #777b84;\n --grey-11: #9a9fa7;\n --grey-12: #d5d8dc;\n --grey-a1: #0000;\n --grey-a2: #d8f4f609;\n --grey-a3: #ddeaf814;\n --grey-a4: #d3edf81d;\n --grey-a5: #d9edfe25;\n --grey-a6: #d6ebfd30;\n --grey-a7: #d9edff40;\n --grey-a8: #d9edff5d;\n --grey-a9: #dfebfd6d;\n --grey-a10: #e5edfd7b;\n --grey-a11: #f1f7feb5;\n --grey-a12: #fcfdffef;\n\n --green-1: #0d1912;\n --green-2: #0c1f17;\n --green-3: #0f291e;\n --green-4: #113123;\n --green-5: #133929;\n --green-6: #164430;\n --green-7: #1b543a;\n --green-8: #236e4a;\n --green-9: #30a46c;\n --green-10: #3cb179;\n --green-11: #4cc38a;\n --green-12: #e5fbeb;\n --green-a1: #0000;\n --green-a2: #00f7ca07;\n --green-a3: #2afebe12;\n --green-a4: #33feb31b;\n --green-a5: #38feb524;\n --green-a6: #3dffb130;\n --green-a7: #43ffad42;\n --green-a8: #49ffaa5e;\n --green-a9: #47ffa69a;\n --green-a10: #54ffafa9;\n --green-a11: #62ffb3bd;\n --green-a12: #eafff0fa;\n\n --orange-1: #1f1206;\n --orange-2: #2b1400;\n --orange-3: #391a03;\n --orange-4: #441f04;\n --orange-5: #4f2305;\n --orange-6: #5f2a06;\n --orange-7: #763205;\n --orange-8: #943e00;\n --orange-9: #f76808;\n --orange-10: #ff802b;\n --orange-11: #ff8b3e;\n --orange-12: #feeadd;\n --orange-a1: #0000;\n --orange-a2: #fd37000e;\n --orange-a3: #fd54001e;\n --orange-a4: #fe61002a;\n --orange-a5: #fe620137;\n --orange-a6: #ff650649;\n --orange-a7: #ff640363;\n --orange-a8: #fe660085;\n --orange-a9: #ff6b08f6;\n --orange-a10: #ff842cfa;\n --orange-a11: #ff8c3ffa;\n --orange-a12: #ffeee1fa;\n\n --red-1: #150f0f;\n --red-2: #1e1413;\n --red-3: #361717;\n --red-4: #49191a;\n --red-5: #582122;\n --red-6: #692e2e;\n --red-7: #813e3e;\n --red-8: #a75252;\n --red-9: #d16565;\n --red-10: #c35959;\n --red-11: #ff9795;\n --red-12: #f9d5d3;\n --red-a1: #de000005;\n --red-a2: #fe48360e;\n --red-a3: #fd383828;\n --red-a4: #ff33383c;\n --red-a5: #fd464a4d;\n --red-a6: #fd5f5f5f;\n --red-a7: #ff717178;\n --red-a8: #ff7878a1;\n --red-a9: #ff7979ce;\n --red-a10: #ff7272bf;\n --red-a11: #ff9795ef;\n --red-a12: #ffdad8f9;\n\n }\n\n .light-theme, .dark-theme {\n\n /* --- Constant Colors --- */\n // The should not change between light and dark.\n --white: #FFFFFF;\n --white-1: var(--white);\n --white-2: var(--white);\n --white-3: var(--white);\n --white-4: var(--white);\n --white-5: var(--white);\n --white-6: var(--white);\n --white-7: var(--white);\n --white-8: var(--white);\n --white-9: var(--white);\n --white-10: var(--white);\n --white-11: var(--white);\n --white-12: var(--white);\n\n --white-a1: #fff0;\n --white-a2: #ffffff03;\n --white-a3: #ffffff09;\n --white-a4: #ffffff0e;\n --white-a5: #ffffff16;\n --white-a6: #ffffff20;\n --white-a7: #ffffff2d;\n --white-a8: #ffffff3f;\n --white-a9: #ffffff62;\n --white-a10: #ffffff72;\n --white-a11: #ffffff97;\n --white-a12: #ffffffeb;\n\n --black: #000;\n --black-1: var(--black);\n --black-2: var(--black);\n --black-3: var(--black);\n --black-4: var(--black);\n --black-5: var(--black);\n --black-6: var(--black);\n --black-7: var(--black);\n --black-8: var(--black);\n --black-9: var(--black);\n --black-10: var(--black);\n --black-11: var(--black);\n --black-12: var(--black);\n\n --black-a1: #00000003;\n --black-a2: #00000007;\n --black-a3: #0000000c;\n --black-a4: #00000012;\n --black-a5: #00000017;\n --black-a6: #0000001d;\n --black-a7: #00000024;\n --black-a8: #00000038;\n --black-a9: #00000070;\n --black-a10: #0000007a;\n --black-a11: #00000090;\n --black-a12: #000000e8;\n\n }\n\n\n /** --- Color Aliases --- */\n // Used for state based variable names that can be detached later from base colors if needed.\n .light-theme, .dark-theme {\n\n --info-1: var(--secondary-1);\n --info-2: var(--secondary-2);\n --info-3: var(--secondary-3);\n --info-4: var(--secondary-4);\n --info-5: var(--secondary-5);\n --info-6: var(--secondary-6);\n --info-7: var(--secondary-7);\n --info-8: var(--secondary-8);\n --info-9: var(--secondary-9);\n --info-10: var(--secondary-10);\n --info-11: var(--secondary-11);\n --info-12: var(--secondary-12);\n --info-a1: var(--secondary-a1);\n --info-a2: var(--secondary-a2);\n --info-a3: var(--secondary-a3);\n --info-a4: var(--secondary-a4);\n --info-a5: var(--secondary-a5);\n --info-a6: var(--secondary-a6);\n --info-a7: var(--secondary-a7);\n --info-a8: var(--secondary-a8);\n --info-a9: var(--secondary-a9);\n --info-a10: var(--secondary-a10);\n --info-a11: var(--secondary-a11);\n --info-a12: var(--secondary-a12);\n\n --success-1: var(--green-1);\n --success-2: var(--green-2);\n --success-3: var(--green-3);\n --success-4: var(--green-4);\n --success-5: var(--green-5);\n --success-6: var(--green-6);\n --success-7: var(--green-7);\n --success-8: var(--green-8);\n --success-9: var(--green-9);\n --success-10: var(--green-10);\n --success-11: var(--green-11);\n --success-12: var(--green-12);\n --success-a1: var(--green-a1);\n --success-a2: var(--green-a2);\n --success-a3: var(--green-a3);\n --success-a4: var(--green-a4);\n --success-a5: var(--green-a5);\n --success-a6: var(--green-a6);\n --success-a7: var(--green-a7);\n --success-a8: var(--green-a8);\n --success-a9: var(--green-a9);\n --success-a10: var(--green-a10);\n --success-a11: var(--green-a11);\n --success-a12: var(--green-a12);\n\n --caution-1: var(--orange-1);\n --caution-2: var(--orange-2);\n --caution-3: var(--orange-3);\n --caution-4: var(--orange-4);\n --caution-5: var(--orange-5);\n --caution-6: var(--orange-6);\n --caution-7: var(--orange-7);\n --caution-8: var(--orange-8);\n --caution-9: var(--orange-9);\n --caution-10: var(--orange-10);\n --caution-11: var(--orange-11);\n --caution-12: var(--orange-12);\n --caution-a1: var(--orange-a1);\n --caution-a2: var(--orange-a2);\n --caution-a3: var(--orange-a3);\n --caution-a4: var(--orange-a4);\n --caution-a5: var(--orange-a5);\n --caution-a6: var(--orange-a6);\n --caution-a7: var(--orange-a7);\n --caution-a8: var(--orange-a8);\n --caution-a9: var(--orange-a9);\n --caution-a10: var(--orange-a10);\n --caution-a11: var(--orange-a11);\n --caution-a12: var(--orange-a12);\n\n --warning-1: var(--red-1);\n --warning-2: var(--red-2);\n --warning-3: var(--red-3);\n --warning-4: var(--red-4);\n --warning-5: var(--red-5);\n --warning-6: var(--red-6);\n --warning-7: var(--red-7);\n --warning-8: var(--red-8);\n --warning-9: var(--red-9);\n --warning-10: var(--red-10);\n --warning-11: var(--red-11);\n --warning-12: var(--red-12);\n --warning-a1: var(--red-a1);\n --warning-a2: var(--red-a2);\n --warning-a3: var(--red-a3);\n --warning-a4: var(--red-a4);\n --warning-a5: var(--red-a5);\n --warning-a6: var(--red-a6);\n --warning-a7: var(--red-a7);\n --warning-a8: var(--red-a8);\n --warning-a9: var(--red-a9);\n --warning-a10: var(--red-a10);\n --warning-a11: var(--red-a11);\n --warning-a12: var(--red-a12);\n\n }\n\n .light-theme {\n --shadow-primary-default: var(--grey-a4);\n --shadow-primary-elevate: var(--primary-a5);\n\n --shadow-secondary-default: var(--grey-3);\n --shadow-secondary-elevate: var(--grey-a4);\n\n --shadow-warning-default: var(--grey-a4);\n --shadow-warning-elevate: var(--warning-a5);\n }\n\n .dark-theme {\n --shadow-primary-default: var(--primary-a2);\n --shadow-primary-elevate: var(--primary-a2);\n\n --shadow-secondary-default: var(--black-a8);\n --shadow-secondary-elevate: var(--primary-a4);\n\n --shadow-warning-default: var(--grey-a3);\n --shadow-warning-elevate: var(--warning-a7);\n }\n\n /* --- Component Aliases --- */\n // For specific component uses within the UI Kit.\n .light-theme, .dark-theme {\n /* feedback */\n --error: var(--warning-8);\n --info: var(--primary-7);\n --neutral: var(--grey-9);\n --success: var(--success-8);\n --warning: var(--caution-8);\n\n /* tooltip */\n --tooltip-warning: var(--warning-a9);\n --tooltip-warning-arrow: var(--warning-9);\n --tooltip-warning-border: var(--warning-a7);\n\n --tooltip-success: var(--success-9);\n --tooltip-success-arrow: var(--success-8);\n --tooltip-success-border: var(--success-a7);\n\n --tooltip-info: var(--primary-8);\n --tooltip-info-arrow: var(--primary-8);\n --tooltip-info-border: var(--primary-a8);\n\n --tooltip-neutral: var(--grey-8);\n --tooltip-neutral-arrow: var(--grey-7);\n --tooltip-neutral-border: var(--grey-7);\n\n /* icons */\n --inverse: var(--white-1);\n --mono: var(--grey-12);\n --dimmed: var(--grey-11);\n --subtle: var(--grey-10);\n --primary: var(--primary-9);\n --danger: var(--warning-9);\n\n /* Spinner */\n --spinner-primary-base: var(--primary-6);\n --spinner-primary-top: var(--white-1);\n\n --spinner-secondary-base: var(--grey-8);\n --spinner-secondary-top: var(--white-1);\n\n --spinner-simple-base: var(--grey-a8);\n --spinner-simple-top: var(--white-1);\n\n --spinner-warning-base: var(--warning-8);\n --spinner-warning-top: var(--white-1);\n\n /* Global */\n --main-background-gradient: radial-gradient(200% 200% at 50% -10%, var(--grey-2) 0%, var(--grey-3) 100%);\n --main-background-color: var(--grey-3);\n\n --primary-gradient-start: var(--primary-9);\n --primary-gradient-end: var(--primary-10);\n --primary-gradient: linear-gradient(135deg, var(--primary-gradient-start), var(--primary-gradient-end));\n\n --secondary-gradient-start: var(--grey-5);\n --secondary-gradient-end: var(--grey-6);\n --secondary-gradient: linear-gradient(135deg, var(--secondary-gradient-start), var(--secondary-gradient-end));\n\n --warning-gradient-start: var(--warning-9);\n --warning-gradient-end: var(--warning-10);\n --warning-gradient: linear-gradient(135deg, var(--warning-gradient-start), var(--warning-gradient-end));\n\n --dividing-line: var(--grey-4);\n --global-element-background: var(--grey-2);\n --global-menu-icon-background-default: transparent;\n --global-menu-icon-background-hover: var(--primary-8);\n --global-menu-icon-background-active: var(--primary-9);\n\n /* Inputs */\n --input-color-default: var(--grey-12);\n --input-color-disabled: var(--grey-10);\n --input-color-placeholder: var(--grey-10);\n --input-color-unit: var(--grey-10);\n\n --input-default-background-color: var(--grey-1);\n --input-default-border-color: var(--grey-6);\n --input-default-shadow-color: transparent;\n\n --input-default-focused-background-color: var(--grey-1);\n --input-default-focused-border-color: var(--grey-6);\n --input-default-focused-shadow-color: var(--grey-3);\n\n --input-disabled-background-color: var(--grey-3);\n --input-disabled-border-color: var(--grey-6);\n --input-disabled-shadow-color: transparent;\n\n --input-required-background-color: var(--grey-1);\n --input-required-border-color: var(--primary-6);\n --input-required-shadow-color: transparent;\n\n --input-required-focused-background-color: var(--grey-1);\n --input-required-focused-border-color: var(--primary-6);\n --input-required-focused-shadow-color: var(--grey-3);\n\n --input-valid-background-color: var(--grey-1);\n --input-valid-border-color: var(--success-9);\n --input-valid-shadow-color: transparent;\n\n --input-valid-focused-background-color: var(--grey-1);\n --input-valid-focused-border-color: var(--success-9);\n --input-valid-focused-shadow-color: var(--grey-3);\n\n --input-invalid-background-color: var(--grey-1);\n --input-invalid-border-color: var(--warning-9);\n --input-invalid-shadow-color: transparent;\n\n --input-invalid-focused-background-color: var(--grey-1);\n --input-invalid-focused-border-color: var(--warning-9);\n --input-invalid-focused-shadow-color: var(--grey-3);\n\n --input-processing-background-color: var(--grey-3)2;\n --input-processing-border-color: var(--primary-10);\n --input-processing-shadow-color: transparent;\n\n --input-processing-focused-background-color: var(--grey-2);\n --input-processing-focused-border-color: var(--primary-10);\n --input-processing-focused-shadow-color: var(--grey-3);\n\n /* Input Icons */\n --input-lead-icon: var(--grey-12);\n --input-disabled-lead-icon: var(--grey-10);\n\n /* Checkboxes and Radio Buttons */\n --input-toggle-icon-color: var(--white-12);\n\n --input-toggle-unchecked-border-color: var(--grey-8);\n --input-toggle-unchecked-background-color: transparent;\n\n --input-toggle-checked-border-color: var(--primary-9);\n --input-toggle-checked-background-color: var(--primary-9);\n\n\n --input-toggle-unchecked-hover-border-color: var(--primary-9);\n --input-toggle-unchecked-hover-background-color: transparent;\n\n --input-toggle-checked-hover-border-color: var(--primary-7);\n --input-toggle-checked-hover-background-color: var(--primary-7);\n\n\n --input-toggle-unchecked-disabled-border-color: var(--grey-7);\n --input-toggle-unchecked-disabled-background-color: transparent;\n\n --input-toggle-checked-disabled-border-color: var(--grey-7);\n --input-toggle-checked-disabled-background-color: var(--grey-7);\n\n\n --input-toggle-intermediate-border-color: var(--primary-11);\n --input-toggle-intermediate-background-color: var(--primary-11);\n\n --input-toggle-intermediate-hover-border-color: var(--primary-11);\n --input-toggle-intermediate-hover-background-color: var(--primary-11);\n\n --input-toggle-intermediate-disabled-border-color: var(--grey-7);\n --input-toggle-intermediate-disabled-background-color: var(--grey-7);\n\n /* Labels */\n --input-label: var(--grey-11);\n --input-label-hover: var(--primary-8);\n --input-label-active: var(--grey-12);\n\n }\n\n /* Filters */\n .light-theme, .dark-theme {\n --filter-button-text-color: var(--grey-11);\n --filter-button-icon-color: var(--grey-10);\n --filter-button-background-color: var(--grey-2);\n --filter-button-stroke-color: var(--grey-a5);\n --filter-button-shadow-color: var(--primary-a3);\n\n --filter-dropdown-background-color: color-mix(in srgb, var(--grey-1) 82%, transparent);\n --filter-dropdown-background-color-fallback: var(--grey-3);\n --filter-dropdown-accent: var(--primary-a9);\n\n }\n\n .dark-theme {\n --filter-button-shadow-color: var(--black-a8);\n }\n\n /* Typography */\n .light-theme, .dark-theme {\n --label-color: var(--grey-11);\n }\n\n /* Buttons */\n .light-theme, .dark-theme {\n --button-background-color: var(--primary-9);\n --button-border-color: var(--primary-9);\n --button-border-width: 1px;\n --button-inner-shadow-color: transparent;\n --button-drop-shadow-color: var(--shadow-primary-default);\n --button-text-color: var(--white-1);\n --button-divider-color: var(--primary-a3);\n\n --button-loading-area-background-color: var(--primary-a7);\n --button-loading-area-divider-color: var(--primary-a8);\n --button-loading-text-color: var(--white-1);\n --button-disabled-border-color: var(--button-border-color);\n --button-disabled-text-color: var(--white-1);\n\n --button-hover-background-color: var(--primary-8);\n --button-hover-border-color: var(--primary-a6);\n --button-hover-inner-shadow-color: transparent;\n --button-hover-drop-shadow-color: var(--shadow-primary-elevate);\n --button-hover-text-color: var(--white-1);\n --button-hover-divider-color: var(--primary-a3);\n --button-hover-icon-area-background-color: var(--primary-a3);\n\n --button-active-background-color: var(--button-hover-background-color);\n --button-active-border-color: var(--button-hover-border-color);\n --button-active-inner-shadow-color: var(--button-hover-inner-shadow-color);\n --button-active-drop-shadow-color: var(--button-hover-drop-shadow-color);\n --button-active-text-color: var(--white-1);\n --button-active-divider-color: var(--primary-a3);\n --button-active-icon-area-background-color: var(--primary-a3);\n\n --button-gradient-start: var(--primary-gradient-start);\n --button-gradient-end: var(--primary-gradient-end);\n\n .button-design-secondary {\n --button-background-color: var(--grey-9);\n --button-border-color: var(--grey-6);\n --button-inner-shadow-color: transparent;\n --button-drop-shadow-color: var(--shadow-secondary-default);\n --button-text-color: var(--grey-12);\n --button-divider-color: var(--grey-a3);\n\n --button-loading-area-background-color: var(--grey-a4);\n --button-loading-area-divider-color: var(--grey-a3);\n --button-disabled-border-color: var(--button-border-color);\n\n --button-hover-background-color: var(--grey-8);\n --button-hover-border-color: var(--grey-a6);\n --button-hover-inner-shadow-color: var(--white-a8);\n --button-hover-drop-shadow-color: var(--shadow-secondary-elevate);\n --button-hover-text-color: var(--white-1);\n\n --button-active-background-color: var(--button-hover-background-color);\n --button-active-border-color: var(--button-hover-border-color);\n --button-active-inner-shadow-color: var(--button-hover-inner-shadow-color);\n --button-active-drop-shadow-color: var(--button-hover-drop-shadow-color);\n --button-active-text-color: var(--white-1);\n\n --button-gradient-start: var(--secondary-gradient-start);\n --button-gradient-end: var(--secondary-gradient-end);\n }\n\n .button-design-danger, .button-design-warning {\n --button-background-color: var(--warning-9);\n --button-border-color: var(--warning-9);\n --button-inner-shadow-color: transparent;\n --button-drop-shadow-color: var(--shadow-warning-default);\n --button-text-color: var(--white-1);\n --button-divider-color: var(--warning-9);\n\n --button-loading-area-background-color: var(--warning-a7);\n --button-loading-area-divider-color: var(--warning-a9);\n --button-disabled-border-color: var(--button-border-color);\n\n --button-hover-background-color: var(--warning-8);\n --button-hover-border-color: var(--warning-a6);\n --button-hover-inner-shadow-color: var(--white-a8);\n --button-hover-drop-shadow-color: var(--shadow-warning-elevate);\n --button-hover-text-color: var(--white-1);\n\n --button-active-background-color: var(--button-hover-background-color);\n --button-active-border-color: var(--button-hover-border-color);\n --button-active-inner-shadow-color: var(--button-hover-inner-shadow-color);\n --button-active-drop-shadow-color: var(--button-hover-drop-shadow-color);\n --button-active-text-color: var(--white-1);\n\n --button-gradient-start: var(--warning-gradient-start);\n --button-gradient-end: var(--warning-gradient-end);\n }\n\n .button-design-text-only {\n --button-background-color: transparent;\n --button-border-color: transparent;\n --button-inner-shadow-color: transparent;\n --button-gradient-start: transparent;\n --button-gradient-end: transparent;\n --button-drop-shadow-color: transparent;\n --button-text-color: var(--grey-12);\n --button-divider-color: transparent;\n\n --button-loading-area-background-color: transparent;\n --button-loading-area-divider-color: transparent;\n --button-loading-text-color: var(--grey-8);\n --button-disabled-border-color: transparent;\n --button-disabled-text-color: var(--grey-8);\n\n --button-hover-background-color: transparent;\n --button-hover-border-color: transparent;\n --button-hover-text-color: var(--primary-9);\n --button-hover-drop-shadow-color: transparent;\n --button-hover-inner-shadow-color: transparent;\n\n --button-active-inner-shadow-color: transparent;\n --button-active-drop-shadow-color: transparent;\n --button-active-background-color: transparent;\n --button-active-border-color: transparent;\n --button-active-text-color: var(--primary-10);\n }\n\n .button-design-outline {\n --button-background-color: transparent;\n --button-border-color: var(--grey-11);\n --button-border-width: 2px;\n --button-inner-shadow-color: transparent;\n --button-gradient-start: transparent;\n --button-gradient-end: transparent;\n --button-drop-shadow-color: var(--grey-a3);\n --button-divider-color: var(--grey-a3);\n --button-text-color: var(--grey-12);\n\n --button-loading-area-background-color: transparent;\n --button-loading-area-divider-color: var(--grey-a3);\n --button-loading-text-color: var(--grey-10);\n --button-disabled-border-color: var(--grey-a6);\n --button-disabled-text-color: var(--grey-12);\n\n --button-hover-background-color: transparent;\n --button-hover-border-color: var(--primary-9);\n --button-hover-text-color: var(--primary-9);\n --button-hover-drop-shadow-color: var(--grey-a4);\n --button-hover-inner-shadow-color: transparent;\n\n --button-active-inner-shadow-color: transparent;\n --button-active-drop-shadow-color: transparent;\n --button-active-background-color: transparent;\n --button-active-border-color: var(--primary-11);\n --button-active-text-color: var(--primary-11);\n }\n\n }\n\n /* Switches */\n .light-theme, .dark-theme {\n // Background\n --switch-default-off-background: var(--grey-4);\n --switch-default-on-background: var(--primary-9);\n --switch-default-danger-background: var(--warning-9);\n\n --switch-disabled-off-background: var(--grey-3);\n --switch-disabled-on-background: var(--primary-8);\n --switch-disabled-danger-background: var(--warning-8);\n\n // Border\n --switch-default-off-border: var(--grey-7);\n --switch-default-on-border: var(--primary-9);\n --switch-default-danger-border: var(--warning-9);\n\n --switch-disabled-off-border: var(--grey-6);\n --switch-disabled-on-border: var(--primary-a6);\n --switch-disabled-danger-border: var(--warning-a6);\n\n // Inner\n --switch-default-off-inner: var(--primary-9);\n --switch-default-on-inner: var(--white-12);\n --switch-default-danger-inner: var(--white-12);\n\n --switch-disabled-off-inner: var(--grey-7);\n --switch-disabled-on-inner: var(--primary-a9);\n --switch-disabled-danger-inner: var(--warning-a9);\n\n // Special States\n --switch-special-locked-background: var(--grey-3);\n --switch-special-locked-border: var(--grey-11);\n --switch-special-locked-inner: transparent;\n --switch-special-locked-icon: var(--grey-11);\n\n --switch-special-failure-background: var(--warning-8);\n --switch-special-failure-border: var(--warning-9);\n --switch-special-failure-inner: var(--white-12);\n --switch-special-failure-icon: var(--warning-8);\n\n }\n\n .light-theme {\n // Background\n --switch-default-off-background: var(--grey-2);\n --switch-default-on-background: var(--primary-7);\n --switch-default-danger-background: var(--warning-9);\n\n --switch-disabled-off-background: var(--grey-3);\n --switch-disabled-on-background: var(--primary-6);\n --switch-disabled-danger-background: var(--warning-8);\n\n // Border\n --switch-default-off-border: var(--grey-6);\n --switch-default-on-border: var(--primary-7);\n --switch-default-danger-border: var(--warning-9);\n\n --switch-disabled-off-border: var(--grey-6);\n --switch-disabled-on-border: var(--primary-7);\n --switch-disabled-danger-border: var(--warning-a5);\n\n // Inner\n --switch-default-off-inner: var(--primary-9);\n --switch-default-on-inner: var(--white-12);\n --switch-default-danger-inner: var(--white-12);\n\n --switch-disabled-off-inner: var(--grey-7);\n --switch-disabled-on-inner: var(--primary-9);\n --switch-disabled-danger-inner: var(--warning-a8);\n\n // Special States\n --switch-special-locked-background: var(--grey-3);\n --switch-special-locked-border: var(--grey-8);\n --switch-special-locked-inner: transparent;\n --switch-special-locked-icon: var(--grey-11);\n }\n\n`;","\nimport { createGlobalStyle } from 'styled-components';\nimport { layoutVariables } from './variables/Layout';\nimport { animationVariables } from './variables/Animation';\nimport { colorVariables } from './variables/Colors';\n\nconst ThemeVariables = createGlobalStyle`\n\n ${layoutVariables};\n ${animationVariables};\n ${colorVariables};\n\n :root {\n\n --font-ui: Monorale, Hiragino Sans, \"ヒラギノ角ゴシック\", Hiragino Kaku Gothic ProN, \"ヒラギノ角ゴ ProN W3\", Roboto, YuGothic, \"游ゴシック\", Meiryo, \"メイリオ\", sans-serif;\n --font-data: Lato, Hiragino Sans, \"ヒラギノ角ゴシック\", Hiragino Kaku Gothic ProN, \"ヒラギノ角ゴ ProN W3\", Roboto, YuGothic, \"游ゴシック\", Meiryo, \"メイリオ\", sans-serif;\n\n --common-height: 32px;\n\n --font-size: 14px;\n\n --global-menu-width-closed: 80px;\n --global-menu-width-open: 280px;\n\n --input-height: 40px;\n --input-compact-height: 32px;\n --input-required-dot-display: inline-block;\n\n --button-font-size: 14px;\n --button-height: 32px;\n --button-h-padding: 8px;\n --button-h-padding-outline: 7px;\n --button-lift-default-x: 0px;\n --button-lift-default-y: 2px;\n --button-lift-default-blur: 4px;\n --button-lift-default-spread: 2px;\n\n --button-icon-size: 14px;\n --button-icon-h-padding: 8px;\n\n // Inputs\n --input-box-shadow-x: 0;\n --input-box-shadow-y: 0;\n --input-box-shadow-blur: 0;\n --input-box-shadow-spread: 0;\n\n --input-focused-box-shadow-x: 0;\n --input-focused-box-shadow-y: 3px;\n --input-focused-box-shadow-blur: 3px;\n --input-focused-box-shadow-spread: 0;\n\n // Switches\n --switch-height: 24px;\n --switch-width: 40px;\n --switch-border-width: 2px;\n --switch-inner-size: 16px;\n --switch-intent-offset: 3px;\n\n // Labels\n --label-font: var(--font-ui);\n --label-font-size: 14px;\n --label-weight: 500;\n\n }\n\n .button-size-xsmall {\n --button-font-size: 12px;\n --button-height: 20px;\n --button-h-padding: 4px;\n --button-h-padding-outline: 3px;\n --button-icon-size: 12px;\n --button-icon-h-padding: 4px;\n }\n\n .button-size-small {\n --button-font-size: 12px;\n --button-height: 24px;\n --button-h-padding: 4px;\n --button-h-padding-outline: 3px;\n --button-icon-size: 12px;\n --button-icon-h-padding: 8px;\n }\n\n .button-size-large {\n --button-font-size: 16px;\n --button-height: 40px;\n --button-h-padding: 8px;\n --button-h-padding-outline: 7px;\n --button-icon-size: 16px;\n --button-icon-h-padding: 8px;\n }\n\n\n\n .split-button-primary {\n --border-color: var(--primary-9);\n --border-active-color: var(--primary-11);\n --toggle-icon-border: var(--primary-9);\n --gradient-1: #72C3EE;\n --gradient-2: #5CACEE;\n --button-lift-default-color: rgba(221, 234, 248, 0.08);\n --text-color: var(--white-a12);\n --text-disabled-color: var(--white-a11);\n --button-hover-bg: var(--primary-a3);\n --button-active-bg: var(--primary-10);\n --toggle-icon-hover-bg: var(--white-a7);\n --toggle-icon-active-bg: var(--black-a6);\n --toggle-icon: var(--white-a12);\n --toggle-icon-active: var(--white-a11);\n --toggle-icon-disabled: var(--white-a10);\n }\n\n .split-button-secondary {\n --border-color: var(--grey-7);\n --border-active-color: var(--grey-7);\n --toggle-icon-border: var(--grey-6);\n --gradient-1: #2E3135;\n --gradient-2: #363A3F;\n --button-lift-default-color: rgba(221, 234, 248, 0.08);\n --text-color: var(--grey-12);\n --text-disabled-color: var(--grey-a11);\n --button-hover-bg: var(--grey-a6);\n --button-active-bg: var(--grey-a3);\n --toggle-icon-hover-bg: var(--grey-a6);\n --toggle-icon-active-bg: var(--grey-a3);\n --toggle-icon: var(--grey-12);\n --toggle-icon-active: var(--grey-a11);\n --toggle-icon-disabled: var(--grey-10);\n }\n\n .split-button-danger {\n --border-color: var(--warning-10);\n --border-active-color: var(--warning-10);\n --toggle-icon-border: var(--warning-9);\n --gradient-1: #D16565;\n --gradient-2: #E76F6F;\n --button-lift-default-color: rgba(255, 113, 113, 0.47);\n --text-color: var(--white-a12);\n --text-disabled-color: var(--white-a11);\n --button-hover-bg: var(--warning-a7);\n --button-active-bg: var(--warning-8);\n --toggle-icon-hover-bg: var(--warning-a7);\n --toggle-icon-active-bg: var(--warning-a5);\n --toggle-icon: var(--white-a12);\n --toggle-icon-active: var(--white-a11);\n --toggle-icon-disabled: var(--white-a10);\n }\n\n .split-button-custom {\n --border-color: var(--info-10);\n --border-active-color: var(--info-10);\n --toggle-icon-border: var(--info-9);\n --gradient-1: var(--info-10);\n --gradient-2: var(--info-9);\n --button-lift-default-color: var(--info-a3);\n --text-color: var(--white-a12);\n --text-disabled-color: var(--white-a11);\n --button-hover-bg: var(--info-a7);\n --button-active-bg: var(--info-8);\n --toggle-icon-hover-bg: var(--info-a7);\n --toggle-icon-active-bg: var(--info-a5);\n --toggle-icon: var(--white-a12);\n --toggle-icon-active: var(--white-a11);\n --toggle-icon-disabled: var(--white-a10);\n }\n\n .split-button-size-small {\n --button-font-size: 12px;\n --button-height: 24px;\n --button-h-padding: 4px;\n --button-icon-size: 12px;\n --button-icon-h-padding: 8px;\n }\n\n .split-button-size-large {\n --button-font-size: 16px;\n --button-height: 40px;\n --button-h-padding: 8px;\n --button-icon-size: 16px;\n --button-icon-h-padding: 8px;\n }\n\n`;\n\nexport default ThemeVariables;","import { css } from 'styled-components';\n\nconst BaseStyles = css`\n\n * , body{\n box-sizing: border-box;\n text-rendering: geometricPrecision;\n }\n body, html , #root {\n min-width: 100%;\n min-height: 100vh;\n margin: 0;\n }\n\n body {\n font-family: var(--font-ui);\n color: var(--grey-11);\n background: var(--main-background-gradient);\n background-attachment: fixed;\n }\n\n`;\n\nexport {\n BaseStyles\n};","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { IconSVGs } from '@future-standard/icons';\n\nimport { dimensions } from '../theme/common';\nimport { IWeight } from '..';\n\n\nconst wrapperCss = css`\n\n line-height: 0;\n\n svg {\n overflow: visible;\n vector-effect: non-scaling-stroke;\n\n line, path, circle, ellipse, foreignObject, polygon, polyline, rect, text, textPath, tspan {\n vector-effect: non-scaling-stroke;\n transition: stroke var(--speed-normal) var(--easing-primary-out);\n }\n }\n`;\n\nconst IconWrapper = styled.div`\n ${wrapperCss};\n`;\n\nconst IconWrapperForSVG = styled.g`\n ${wrapperCss};\n`;\n\nexport { IconWrapper, IconWrapperForSVG, IconSVGs };\n\nexport interface IconProps {\n icon: string;\n size?: number;\n weight?: IWeight;\n color?: ISvgIcons['color'];\n forSvgUsage?: boolean;\n}\n\nconst Icon: React.FC<IconProps> = ({ icon, size = 24, weight = 'regular', color = 'grey-12', forSvgUsage = false }) => {\n // For later use in deprecation of aliases.\n // const legacyColors = ['mono', 'dimmed', 'subtle', 'inverse', 'primary', 'danger'];\n // if(legacyColors.indexOf(color) >= 0){\n // console.warn(\"Deprecation warning: The use of \" + color + \" is deprecated. Please replace it with theme color variable.\");\n // }\n\n const iconWeight: number = dimensions.icons.weights[weight];\n //@ts-ignore\n const IconSVG = IconSVGs[icon];\n\n return (\n IconSVG != null ?\n forSvgUsage ?\n <IconWrapperForSVG>\n {IconSVG({ size: size, weight: iconWeight, color: `var(--${color}, var(--grey-12))` })}\n </IconWrapperForSVG>\n :\n <IconWrapper>\n {IconSVG({ size: size, weight: iconWeight, color: `var(--${color}, var(--grey-12))` })}\n </IconWrapper>\n :\n null\n );\n\n};\n\nexport default Icon;","import React from 'react';\nimport styled from \"styled-components\";\n\n/**\n * -- Content Placeholder --\n * Intended as an aid for development and use in stories.\n */\nconst Arrow = styled.div`\n position: absolute;\n width: 10px;\n height: 10px;\n border: 2px solid var(--grey-10);\n border-left: 0;\n border-bottom: 0;\n border-radius: 0 3px 0 0;\n\n &.t { top: 24px; }\n &.b { bottom: 24px; }\n &.l { left: 24px; }\n &.r { right: 24px; }\n`;\n\nconst Container = styled.div`\n display: flex;\n position: relative;\n flex: 1;\n height: 100%;\n background: var(--grey-3);\n border: 12px solid var(--grey-6);\n box-sizing: border-box;\n flex: 1;\n justify-content: center;\n align-items: center;\n letter-spacing: 1.2px;\n color: var(--grey-10);\n`;\n\nexport const FlexContentPlaceholder : React.FC<{title?: string}> = ({ title = 'Placeholder' }) => {\n return(\n <Container>\n {title}\n <Arrow className='t l' style={{transform: 'rotate(-90deg)'}} />\n <Arrow className='t r' style={{transform: 'rotate(0deg)'}} />\n <Arrow className='b r' style={{transform: 'rotate(90deg)'}} />\n <Arrow className='b l' style={{transform: 'rotate(180deg)'}} />\n </Container> \n );\n};","import {css} from 'styled-components';\nimport { FlexContentPlaceholder } from './ContentPlaceholder';\n\nexport const RowCss = css`\n position:relative;\n display: flex;\n flex-direction: row;\n align-items:center;\n`;\n\nexport const ColumnCss = css`\n display: flex;\n flex-direction: column;\n`;\n\nexport const resetButtonStyles = css`\n -webkit-tap-highlight-color: transparent;\n background-color: transparent;\n background: transparent;\n border: none;\n cursor: pointer;\n outline: none;\n padding: 0;\n appearance: none;\n user-select: none;\n`;\n\n// https://stackoverflow.com/questions/2781549/removing-input-background-colour-for-chrome-autocomplete\nexport const removeAutoFillStyle = css`\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus,\n &:-webkit-autofill:active{\n transition: background-color 600000s 0s, color 600000s 0s;\n }\n`;\nexport const EllipsisStyles = css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport { \n FlexContentPlaceholder\n};","import React, { useState, useEffect } from 'react';\nimport styled, { css } from 'styled-components';\nimport Icon, {IconWrapper} from '../../Icons/Icon';\nimport { AlertType } from '..';\nimport { resetButtonStyles } from '../../common/index';\n\nconst IconButton = styled.button<{$selected?: boolean}>`\n ${resetButtonStyles};\n ${({$selected=false}) => $selected && css`\n border-bottom: 5px solid var(--primary-7);\n `}\n &:focus {\n outline: none;\n }\n\n &:hover:enabled {\n opacity: .8;\n }\n &:active:enabled {\n opacity: .9;\n }\n &:disabled {\n opacity: 0.1;\n }\n`;\n\nexport const AlertWrapper = styled.div<{$type: AlertType}>`\n min-height: 50px;\n border-radius: 3px;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n padding: 0 14px;\n\n font-family: var(--font-ui);\n background-color: ${({$type}) => `var(--${$type})` };\n\n text-align: left;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n text-decoration: none;\n color: var(--white-1);\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--white-1);\n }\n }\n`;\n\nconst IconNames = {\n error: 'Critical',\n warning: 'BigWarning',\n success: 'Success',\n info: 'Information',\n neutral: 'Information'\n};\n\nconst MessageBox = styled.div`\n margin: 5px 0px 5px 15px;\n flex: 1;\n`;\nexport interface IAlert {\n alertMessage?: string;\n alertType: AlertType;\n}\n\ninterface Props {\n type?: AlertType\n message?: string\n hideCloseButton?: boolean\n}\nconst AlertBar: React.FC<Props> = ({type='info', message, hideCloseButton= false}) => {\n const [dismiss, setDismiss] = useState(false);\n\n useEffect(()=>{\n setDismiss(false);\n },[message]);\n\n\n return ( (message && !dismiss)?\n <AlertWrapper $type={type}>\n <Icon icon={IconNames[type]} color='inverse' />\n <MessageBox>{message}</MessageBox>\n\n {!hideCloseButton && <IconButton onClick={() => setDismiss(true)}><Icon icon='CloseCompact' color='inverse' /></IconButton>}\n </AlertWrapper>\n :\n null\n );\n};\n\nexport default AlertBar;\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport styled, { css } from 'styled-components';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport { AlertType } from '..';\nimport { resetButtonStyles } from '../../common/index';\n\nconst Container = styled.div<{$type: AlertType, $isClosing: boolean, $isVisible: boolean}>`\n min-height: 50px;\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 0 14px;\n width: 900px;\n position: fixed;\n top: 0;\n left: 50%;\n transform: translate(-50%, -100%);\n z-index: 999;\n\n font-family: var(--font-ui);\n background-color: ${({$type}) => `var(--${$type})`};\n text-align: left;\n font-size: 14px;\n font-weight: 400;\n line-height: 15px;\n letter-spacing: -0.2px;\n text-decoration: none;\n color: var(--white-1);\n\n ${({$isVisible}) => $isVisible && css`\n transition: transform var(--speed-slow) var(--easing-primary-in-out);\n `}\n\n ${({$isVisible, $isClosing}) => $isVisible && !$isClosing && css`\n transform: translate(-50%, 0%);\n `};\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--white-1);\n }\n }\n`;\n\nexport const IconNames = {\n error: 'Critical',\n warning: 'BigWarning',\n success: 'Success',\n info: 'Information',\n neutral: 'Information'\n};\n\nconst IconButton = styled.div<{$selected?: boolean}>`\n ${resetButtonStyles};\n ${({$selected=false}) => $selected && css`\n border-bottom: 5px solid var(--primary-7);\n `}\n &:focus {\n outline: none;\n }\n\n &:hover {\n opacity: .8;\n }\n &:active:enabled {\n opacity: .9;\n }\n &:disabled {\n opacity: 0.1;\n }\n`;\n\nconst TextButton = styled.button`\n ${resetButtonStyles};\n font-family: var(--font-ui);\n text-align: left;\n font-size: 14px;\n font-weight: 400;\n line-height: 15px;\n letter-spacing: -0.2px;\n text-decoration: none;\n color: var(--white-1);\n font-weight: 700;\n\n &:focus {\n outline: none;\n }\n\n &:hover:enabled {\n opacity: .8;\n transition: transform var(--speed-normal) var(--easing-primary-in-out);\n }\n &:active:enabled {\n opacity: .9;\n }\n &:disabled {\n opacity: 0.1;\n }\n`;\n\nconst MainMessage = styled.div`\n padding: 12px 6px 12px 12px;\n line-height: 20px;\n text-align: left;\n flex-grow: 2;\n`;\n\nexport type INotificationProps = {\n id?: string\n type: AlertType\n message: string\n actionTextButton?: string\n isPinned?: boolean\n closeNow?: boolean\n icon?: string\n onTextButtonClick?: () => void\n closeCallback?: () => void\n}\n\nconst Notification : React.FC<INotificationProps> = ({id, type ='info', message, icon = '', isPinned = false, actionTextButton, closeNow = false, closeCallback, onTextButtonClick}) => {\n const [dismiss, setDismiss] = useState(false);\n const [slideUp, setSlideUp] = useState(false);\n const [textClicked, setTextClicked] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n const animatedIdRef = useRef<string | undefined>(undefined);\n // Always-current snapshot of close-related values, used in the unmount cleanup below.\n const closeStateRef = useRef({ slideUp, textClicked, onTextButtonClick, closeCallback });\n useEffect(() => {\n closeStateRef.current = { slideUp, textClicked, onTextButtonClick, closeCallback };\n });\n\n useEffect(()=>{\n setDismiss(false);\n setSlideUp(false);\n setTextClicked(false);\n },[id]);\n\n // Slide-in via CSS transition gated by rAF — StrictMode-safe:\n // StrictMode cleanup runs synchronously before rAF fires, so the rAF is\n // cancelled during the simulated unmount and only fires on the stable remount.\n //\n // animatedIdRef tracks whether id genuinely changed (new notification) vs a\n // StrictMode remount (same id), preventing a spurious setIsVisible(false) reset\n // on remount. On first render with id=undefined, the ref stays undefined and the\n // rAF still fires correctly to show the notification.\n useEffect(() => {\n if (animatedIdRef.current !== id) {\n animatedIdRef.current = id;\n setIsVisible(false);\n }\n const rafId = requestAnimationFrame(() => setIsVisible(true));\n return () => cancelAnimationFrame(rafId);\n }, [id]);\n\n const handleDismiss = useCallback(() => {\n setSlideUp(true);\n },[]);\n\n const handleTextClick = useCallback(async () => {\n setTextClicked(true);\n handleDismiss();\n },[handleDismiss]);\n\n const animationEnded = useCallback(() => {\n // Will only trigger if the animation triggered was closing one\n if(slideUp){\n setDismiss(true);\n\n if(onTextButtonClick && textClicked) {\n onTextButtonClick();\n }\n\n if(closeCallback) {\n closeCallback();\n }\n }\n }, [slideUp, closeCallback, onTextButtonClick, textClicked]);\n\n useEffect(() => {\n if(isPinned) return;\n const timerId = setTimeout(() => handleDismiss(), 7000);\n return () => clearTimeout(timerId);\n },[isPinned, message, handleDismiss, id]);\n\n useEffect(() => {\n if(closeNow) {\n handleDismiss();\n }\n },[closeNow, handleDismiss]);\n\n // If the component unmounts while the close animation is in-flight (e.g. parent\n // force-removes it before onAnimationEnd fires), still invoke the callbacks so\n // callers don't silently miss the close event.\n useEffect(() => {\n return () => {\n const { slideUp, textClicked, onTextButtonClick, closeCallback } = closeStateRef.current;\n if (slideUp) {\n if (onTextButtonClick && textClicked) onTextButtonClick();\n if (closeCallback) closeCallback();\n }\n };\n }, []);\n\n return( (message && !dismiss)\n ? ReactDOM.createPortal(\n <Container $type={type} $isClosing={slideUp} $isVisible={isVisible} onTransitionEnd={animationEnded}>\n <Icon icon={!icon ? IconNames[type] : icon} color='inverse' />\n <MainMessage>{message}</MainMessage>\n {actionTextButton\n ? <TextButton onClick={() => handleTextClick()}>{actionTextButton} </TextButton>\n :\n <IconButton onClick={() => handleDismiss()}>\n <Icon icon='CloseCompact' color='inverse' />\n </IconButton>}\n </Container>\n , document.body)\n : null\n );\n};\n\nexport default Notification;","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { ITooltipType } from '..';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport ReactDOM from 'react-dom';\n\nconst ARROW_SIZE = 8;\nconst ARROW_MARGIN = 16;\n\nconst Arrow = styled.div<{ $type: ITooltipType }>`\n content:'';\n display:block;\n width:0;\n height:0;\n border-left: ${ARROW_SIZE}px solid transparent;\n border-right: ${ARROW_SIZE}px solid transparent;\n border-bottom: ${ARROW_SIZE}px solid ${({ $type }) => `var(--tooltip-${$type}-arrow)`};\n`;\n\nconst TooltipWrapper = styled.div<{ $directionStyle: string, $maxWidth?: string }>`\n position: absolute;\n display: flex;\n ${({ $maxWidth }) => $maxWidth && css` max-width: ${$maxWidth}`};\n ${({ $directionStyle }) => $directionStyle && css`${$directionStyle}`};\n`;\n\nconst MessageWrapper = styled.div<{ $type: ITooltipType }>`\n background-color: ${({ $type }) => `var(--tooltip-${$type})`};\n border-radius: 3px;\n border: 1px solid ${({ $type }) => `var(--tooltip-${$type}-border)`};\n box-shadow: 0px 2px var(--input-focused-blur, 3px) 0px rgba(0, 16, 64, 0.06);\n backdrop-filter: blur(2px);\n display: flex;\n padding: 12px 16px;\n justify-content: center;\n align-items: center;\n gap: 16px;\n color: var(--white-a12);\n font-feature-settings: 'liga' off, 'clig' off;\n font-size: 13px;\n font-weight: 600;\n line-height: 16px;\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n`;\n\nconst getDirectionStyle = (state: ITooltipPosition, coords: DOMRect) => {\n\n const { left, top, width, height } = coords;\n\n const currentTop = top + window.scrollY;\n const currentLeft = left + window.scrollX;\n\n switch (state) {\n case 'bottom-right':\n return `\n flex-direction: column;\n top: ${currentTop + height}px;\n left: ${currentLeft - ARROW_SIZE - ARROW_MARGIN + (width / 2)}px;\n ${Arrow} {\n margin-left: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'bottom-left':\n return `\n flex-direction: column;\n align-items: end;\n top: ${currentTop + height}px;\n left: ${currentLeft + ARROW_SIZE + ARROW_MARGIN + (width / 2)}px;\n transform: translateX(-100%);\n ${Arrow} {\n margin-right: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'right-bottom':\n return `\n flex-direction: row;\n top: ${currentTop - (ARROW_SIZE / 2) - ARROW_MARGIN + (height / 2)}px;\n left: ${currentLeft + width}px;\n ${Arrow} {\n transform: rotate(-90deg);\n margin-right: -${(ARROW_SIZE / 2)}px;\n margin-top: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'right':\n return `\n flex-direction: row;\n align-items: center;\n top: ${currentTop + (height / 2)}px;\n left: ${currentLeft + width}px;\n transform: translateY(-50%);\n ${Arrow} {\n transform: rotate(-90deg);\n margin-right: -${(ARROW_SIZE / 2)}px;\n }\n `;\n\n case 'right-top':\n return `\n flex-direction: row;\n align-items: end;\n top: ${currentTop + (ARROW_SIZE / 2) + ARROW_MARGIN + (height / 2)}px;\n left: ${currentLeft + width}px;\n transform: translateY(-100%);\n ${Arrow} {\n transform: rotate(-90deg);\n margin-right: -${(ARROW_SIZE / 2)}px;\n margin-bottom: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'left-bottom':\n return `\n flex-direction: row-reverse;\n top: ${currentTop - (ARROW_SIZE / 2) - ARROW_MARGIN + (height / 2)}px;\n left: ${currentLeft}px;\n transform: translateX(-100%);\n ${Arrow} {\n transform: rotate(90deg);\n margin-left: -${(ARROW_SIZE / 2)}px;\n margin-top: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'left':\n return `\n flex-direction: row-reverse;\n align-items: center;\n top: ${currentTop + (height / 2)}px;\n left: ${currentLeft}px;\n transform: translate(-100%, -50%);\n ${Arrow} {\n transform: rotate(90deg);\n margin-left: -${(ARROW_SIZE / 2)}px;\n }\n `;\n\n case 'left-top':\n return `\n flex-direction: row-reverse;\n align-items: end;\n top: ${currentTop + (ARROW_SIZE / 2) + ARROW_MARGIN + (height / 2)}px;\n left: ${currentLeft}px;\n transform: translate(-100%, -100%);\n ${Arrow} {\n transform: rotate(90deg);\n margin-left: -${(ARROW_SIZE / 2)}px;\n margin-bottom: ${ARROW_MARGIN}px;\n }\n `;\n case 'top-right':\n return `\n flex-direction: column-reverse;\n top: ${currentTop}px;\n left: ${currentLeft - ARROW_SIZE - ARROW_MARGIN + (width / 2)}px;\n transform: translateY(-100%);\n ${Arrow} {\n transform: rotate(180deg);\n margin-left: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'top':\n return `\n flex-direction: column-reverse;\n align-items: center;\n top: ${currentTop}px;\n left: ${currentLeft + (width / 2)}px;\n transform: translate(-50%, -100%);\n ${Arrow} {\n transform: rotate(180deg);\n }\n `;\n\n case 'top-left':\n return `\n flex-direction: column-reverse;\n align-items: end;\n top: ${currentTop}px;\n left: ${currentLeft + ARROW_SIZE + ARROW_MARGIN + (width / 2)}px;\n transform: translate(-100%, -100%);\n ${Arrow} {\n transform: rotate(180deg);\n margin-right: ${ARROW_MARGIN}px;\n }\n `;\n\n // default case is 'bottom'\n default:\n return `\n flex-direction: column;\n top: ${currentTop + height}px;\n left: ${currentLeft + (width / 2)}px;\n transform: translateX(-50%);\n align-items: center;\n `;\n }\n};\n\nconst getDynamicPosition = (coords: DOMRect, width?: number, height?: number): ITooltipPosition => {\n\n const isOverflowingRight = coords.left + (width || 0) + 30 > window.innerWidth;\n const isOverflowingBottom = coords.bottom + (height || 0) > window.innerHeight;\n const isOverflowingLeft = coords.left - (width || 0) < 0;\n const isOverflowingTop = coords.top - (height || 0) < 0;\n\n if (isOverflowingTop && isOverflowingRight && isOverflowingBottom) {\n return 'left';\n }\n\n if (isOverflowingTop && isOverflowingLeft && isOverflowingBottom) {\n return 'right';\n }\n\n if (isOverflowingTop && isOverflowingLeft) {\n return 'bottom-right';\n }\n\n if (isOverflowingTop && isOverflowingRight) {\n return 'bottom-left';\n }\n\n if (isOverflowingBottom && isOverflowingLeft) {\n return 'top-right';\n }\n\n if (isOverflowingBottom && isOverflowingRight) {\n return 'top-left';\n }\n\n if (isOverflowingLeft) {\n return 'right';\n }\n\n if (isOverflowingRight) {\n return 'left';\n }\n\n if (isOverflowingBottom) {\n return 'top';\n }\n\n return 'bottom';\n};\n\ntype ITooltip = {\n message: string\n tooltipFor: React.RefObject<HTMLElement>\n icon?: string\n type?: ITooltipType\n tooltipPosition?: ITooltipPosition\n maxWidth?: string\n}\n\nexport type ITooltipPosition = 'top-left' | 'top' | 'top-right' | 'bottom-left' | 'bottom' | 'bottom-right' | 'left-top' | 'left' | 'left-bottom' | 'right-top' | 'right' | 'right-bottom';\n\nconst Tooltip: React.FC<ITooltip> = ({ icon, message, type, tooltipFor, tooltipPosition, maxWidth }) => {\n\n const [coords, setCoords] = useState<DOMRect | null>(null);\n const [visible, setVisible] = useState(false);\n const [dynamicPosition, setDynamicPosition] = useState<ITooltipPosition>('top');\n const tooltipRef = useRef<HTMLDivElement>(null);\n\n const handleMouseOver = useCallback(() => {\n if (tooltipFor && tooltipFor.current) {\n const rect = tooltipFor.current.getBoundingClientRect();\n setCoords(rect);\n setVisible(true);\n setDynamicPosition(getDynamicPosition(rect, tooltipFor.current.offsetWidth, tooltipFor.current.offsetHeight));\n }\n }, [tooltipFor]);\n\n const handleMouseOut = useCallback(() => {\n setVisible(false);\n }, []);\n\n const updateCoords = useCallback(() => {\n if (tooltipFor && tooltipFor.current) {\n const rect = tooltipFor.current.getBoundingClientRect();\n setCoords(rect);\n }\n }, [tooltipFor]);\n\n useEffect(() => {\n let currentRef : HTMLElement | null = null;\n \n if(tooltipFor && tooltipFor.current){\n currentRef = tooltipFor.current;\n tooltipFor.current.addEventListener('mouseover', handleMouseOver);\n tooltipFor.current.addEventListener('mouseout', handleMouseOut);\n updateCoords();\n }\n \n return () => {\n if(currentRef){\n currentRef.removeEventListener('mouseover', handleMouseOver);\n currentRef.removeEventListener('mouseout', handleMouseOut);\n }\n };\n\n }, [handleMouseOut, handleMouseOver, tooltipFor, updateCoords]);\n\n if (!visible || !coords) return null;\n\n return ReactDOM.createPortal(\n <TooltipWrapper ref={tooltipRef} $maxWidth={maxWidth} $directionStyle={getDirectionStyle(tooltipPosition || dynamicPosition, coords)}>\n <Arrow $type={type || 'neutral'} />\n <MessageWrapper $type={type || 'neutral'}>\n {icon && <Icon icon={icon} size={16} color='white-a12' />}\n {message}\n </MessageWrapper>\n </TooltipWrapper>,\n document.body\n );\n};\n\nexport default Tooltip;","import React, { ButtonHTMLAttributes } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport { TypeButtonSizes, TypeButtonDesigns } from '..';\n\n\ninterface IStyledComponentProps {\n $size: TypeButtonSizes\n $design: TypeButtonDesigns\n $shadow: boolean\n $noPadding?: boolean\n $loading?: boolean\n $isOutline?: boolean\n}\n\nconst activeAnimation = (shadow?: boolean) => {\n const animation = keyframes`\n 0% {\n box-shadow:\n 0 0px 0px var(--button-hover-inner-shadow-color) inset\n ${shadow ? ', 0 4px 8px var(--button-hover-drop-shadow-color)' : ''};\n }\n\n 75% {\n box-shadow:\n 0 0 24px var(--button-active-inner-shadow-color) inset\n ${shadow ? ', 0 4px 6px var(--button-active-drop-shadow-color)' : ''};\n }\n\n 100% {\n box-shadow:\n 0 0 16px var(--button-active-inner-shadow-color) inset\n ${shadow ? ', 0 4px 6px var(--button-active-drop-shadow-color)' : ''};\n }\n `;\n\n return animation;\n};\n\nconst StyledButton = styled.button<IStyledComponentProps>`\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n font-family: var(--font-ui);\n height: var(--button-height);\n font-size: var(--button-font-size);\n color: var(--button-text-color);\n font-weight: 600;\n\n ${({ $noPadding, $isOutline }) => $noPadding ? css`\n padding: 0px;\n ` : css`\n padding: ${$isOutline ? `var(--button-h-padding-outline)` : `var(--button-h-padding)`};\n `\n }\n\n overflow: hidden;\n cursor: pointer;\n outline: none;\n box-sizing: border-box;\n\n border-radius: 3px;\n border: var(--button-border-width) solid var(--button-border-color);\n background: linear-gradient(135deg, transparent, transparent, var(--button-gradient-start), var(--button-gradient-end));\n background-color: var(--button-background-color);\n background-size: 400%;\n background-position: 99%;\n\n ${({$shadow}) => $shadow ? css`\n box-shadow:\n 0 2px 4px 2px var(--button-drop-shadow-color),\n 0 0 0 var(--button-inner-shadow-color) inset;\n ` : css`\n box-shadow: 0 0 0 var(--button-inner-shadow-color) inset;\n `}\n\n transition:\n border-color var(--speed-normal) var(--easing-primary-in-out),\n background-color var(--speed-normal) var(--easing-primary-in-out),\n background-position var(--speed-normal) var(--easing-primary-out),\n background-size var(--speed-normal) var(--easing-primary-out),\n box-shadow var(--speed-normal) var(--easing-primary-out),\n opacity var(--speed-normal) var(--easing-primary-out),\n color var(--speed-normal) var(--easing-primary-in-out);\n\n &:hover:enabled {\n background-position: 1%;\n background-color: var(--button-hover-background-color);\n border-color: var(--button-hover-border-color);\n color: var(--button-hover-text-color);\n\n ${({$shadow}) => $shadow ? css`\n box-shadow:\n 0 4px 8px var(--button-hover-drop-shadow-color),\n 0 0 5px var(--button-hover-inner-shadow-color) inset;\n ` : css`\n box-shadow: 0 0 5px var(--button-hover-inner-shadow-color) inset;\n `}\n }\n\n &:active:enabled {\n background-color: var(--button-active-background-color);\n border-color: var(--button-active-border-color);\n color: var(--button-active-text-color);\n ${({$shadow}) => css`\n animation: var(--speed-normal) var(--easing-primary-in-out) ${() => activeAnimation($shadow)} forwards;\n `};\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 50%;\n color: var(--button-disabled-text-color);\n border-color: var(--button-disabled-border-color, transparent);\n }\n\n ${({$loading}) => $loading && css`\n &:disabled {\n opacity: 1;\n cursor: wait;\n color: var(--button-loading-text-color);\n }\n `};\n\n button + button {\n margin-left: 20px;\n }\n\n`;\n\n\ninterface OwnProps {\n size?: TypeButtonSizes\n design?: TypeButtonDesigns\n shadow?: boolean\n noPadding?: boolean\n loading?: boolean\n}\n\ntype Props = OwnProps & ButtonHTMLAttributes<HTMLButtonElement>\n\nconst Button : React.FC<Props> = ({ design='primary', size='normal', shadow = false, noPadding = false, loading=false, children, formAction, className, ...props }) => {\n design === 'danger' ? console.warn('Button.tsx - Warning, the design prop value danger is being deprecated. Use warning instead.') : null;\n const mergedClassName = [`button-design-${design}`, `button-size-${size}`, className].filter(Boolean).join(' ');\n return <StyledButton type='button' $isOutline={design === 'outline'} className={mergedClassName} $design={design} $size={size} $noPadding={noPadding} $shadow={shadow} $loading={loading} {...props}><>{children}</></StyledButton>;\n};\n\nexport default Button;\n","import React from \"react\";\nimport styled, { keyframes } from 'styled-components';\n\nconst circumference = (radius : number) => {\n return 2 * 3.1416 * radius;\n};\n\nconst animation = (radius : number) => {\n const c = circumference(radius);\n\n return keyframes`\n 0% {\n stroke-dashoffset: -${c * 0.85};\n }\n 50% {\n stroke-dashoffset: -${c * 0.5};\n }\n 100% {\n stroke-dashoffset: -${c * 0.85};\n }\n `;\n};\n\nconst rotate = keyframes`\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n`;\n\nconst BaseCircle = styled.circle<{ $styling: string, $customColor?: string }>`\n stroke: ${({$styling, $customColor}) => $customColor ? $customColor : `var(--spinner-${$styling}-base, var(--grey-a8))` };\n fill: none;\n`;\n\nconst RotatingCircle = styled.circle<{ r: number, $styling: string, $customColor?: string }>`\n stroke: ${({$styling, $customColor}) => $customColor ? $customColor : `var(--spinner-${$styling}-top, var(--white-1))` };\n fill: none;\n stroke-dasharray: ${({r}) => circumference(r)};\n stroke-dashoffset: ${({r}) => 2 * 3.1416 * r / 2};\n animation:\n ${({r}) => animation(r) } 4s linear infinite,\n ${rotate} 1s linear infinite;\n stroke-linecap: round;\n`;\n\nexport type SpinnerSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\nexport const getButtonDesign = (value: string) => {\n\n if(value === 'primary' || value === 'secondary' || value === 'warning'){\n return value;\n } else if(value === 'danger'){\n console.warn('Button.tsx - Warning, the design prop value `danger` is being deprecated. Use `warning` instead.');\n return 'danger';\n }\n\n return 'simple';\n\n};\n\nconst sizeGuide = {\n xsmall: 12,\n small: 16,\n medium: 24,\n large: 36,\n xlarge: 48\n};\n\ninterface ICustomSpinner {\n size?: number;\n baseColor?: string;\n topColor?: string;\n}\n\ninterface IProps {\n size?: SpinnerSize\n styling: string\n custom?: ICustomSpinner\n}\n\nconst Spinner : React.FC<IProps> = ({ size = 'medium', styling = 'primary', custom = {} }) => {\n const { baseColor, topColor } = custom;\n const sizeVal = custom?.size ? custom.size : sizeGuide[size];\n const strokeWidth = sizeVal / 5.333;\n const circleRadius = (sizeVal / 2) - (strokeWidth / 2);\n\n return (\n <svg viewBox={`-${sizeVal/2} -${sizeVal/2} ${sizeVal} ${sizeVal}`} width={sizeVal} height={sizeVal} xmlns='http://www.w3.org/2000/svg'>\n <BaseCircle cx='0' cy='0' r={circleRadius} strokeWidth={strokeWidth} $styling={ getButtonDesign(styling) } $customColor={ baseColor } />\n <RotatingCircle cx='0' cy='0' r={circleRadius} strokeWidth={strokeWidth} $styling={ getButtonDesign(styling) } $customColor={ topColor } />\n </svg>\n );\n\n};\n\nexport default Spinner;","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport Button from './Button';\nimport Icon from '../../Icons/Icon';\nimport Spinner from '../../Indicators/Spinner';\nimport { IButtonProps, TypeButtonSizes } from '..';\nimport { IWeight } from '../..';\n\nconst Container = styled.div`\n display: inline;\n`;\n\nconst TextContainer = styled.div<{ $size: TypeButtonSizes, $position?: string, $weight?: IWeight }>`\n height: inherit;\n flex: 1;\n order: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n white-space: nowrap;\n padding: 0 var(--button-h-padding);\n transition: padding var(--speed-slow) var(--easing-primary-in-out);\n font-weight: ${({$weight}) => $weight === 'light' ? '500' : '600'};\n`;\n\nconst IconContainer = styled.div`\n opacity: 1;\n`;\nconst SpinnerContainer = styled.div`\n background-color: var(--button-loading-area-background-color);\n\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n opacity: 0;\n`;\n\nconst IconArea = styled.div<{ $position?: string, $loading: boolean }>`\n position: relative;\n height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n flex: 0 0 calc((var(--button-h-padding)* 2) + var(--button-icon-size));\n border: 0px solid var(--button-divider-color);\n padding: 0 var(--button-h-padding);\n\n ${({ $position }) => css`\n order: ${$position && $position === 'left' ? 0 : 2};\n ${$position === 'left'\n ? `border-right-width: 1px;`\n : `border-left-width: 1px;`\n };\n `}\n\n ${IconContainer}{\n svg {\n display:block;\n width: var(--button-icon-size);\n height: var(--button-icon-size);\n path, rect, circle, d {\n stroke: var(--button-text-color);\n }\n }\n }\n\n ${IconContainer}, ${SpinnerContainer}{\n transition: opacity var(--speed-fast) var(--easing-primary-out);\n }\n\n ${({ $loading }) => $loading && css`\n border-color: var(--button-loading-area-divider-color);\n\n ${SpinnerContainer}{\n opacity: 1;\n }\n\n ${IconContainer}{\n opacity: 0;\n };\n `};\n\n`;\n\nconst InnerContainer = styled.div<{ $disabled?: boolean }>`\n display: flex;\n height: inherit;\n\n &:hover {\n ${({ $disabled }) => !$disabled && css`\n ${IconContainer}{\n svg {\n path, rect, circle, d {\n stroke: var(--button-hover-text-color);\n }\n }\n }\n `};\n }\n\n &:active{\n ${({ $disabled }) => !$disabled && css`\n ${IconContainer}{\n svg {\n path, rect, circle, d {\n stroke: var(--button-active-text-color);\n }\n }\n }\n `};\n }\n\n ${({ $disabled }) => $disabled && css`\n ${IconContainer}{\n svg {\n path, rect, circle, d {\n stroke: var(--button-disabled-text-color);\n }\n }\n }\n `};\n`;\n\nexport interface IButtonWithIcon extends IButtonProps {\n icon: string\n position?: 'left' | 'right'\n shadow?: boolean\n weight?: IWeight\n}\n\nconst ButtonWithIcon: React.FC<IButtonWithIcon> = ({ design = 'primary', size = 'normal', loading = false, shadow = false, onClick, disabled, position, icon, weight = 'regular', children, ...props }) => {\n return (\n <Container>\n <Button noPadding disabled={disabled || loading} {...{ design, size, shadow, onClick, loading }} {...props}>\n <InnerContainer $disabled={disabled}>\n <TextContainer $size={size} $position={position} $weight={weight}><>{children}</></TextContainer>\n <IconArea $loading={loading} $position={position}>\n <IconContainer>\n <Icon icon={icon} weight={weight} />\n </IconContainer>\n <SpinnerContainer>\n <Spinner size={size === 'xsmall' || size === 'small' ? 'xsmall' : 'small'} styling={design} />\n </SpinnerContainer>\n </IconArea>\n </InnerContainer>\n </Button>\n </Container>\n );\n};\n\nexport default ButtonWithIcon;","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Button from './Button';\nimport Spinner from '../../Indicators/Spinner';\nimport { TypeButtonDesigns, IButtonProps, TypeButtonSizes} from '..';\n\n\nconst Container = styled.div`\n display: inline;\n`;\n\nconst TextContainer = styled.div`\n height: inherit;\n flex: 1;\n order: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n white-space: nowrap;\n padding: 0 var(--button-h-padding);\n\n transition: padding var(--speed-slow) var(--easing-primary-in-out);\n`;\n\nconst LoadingContainer = styled.div<{ $design: TypeButtonDesigns, $show?: boolean, $position?: string }>`\n height: inherit;\n flex: 0 0 calc((var(--button-h-padding) * 2) + var(--button-icon-size));\n width: calc((var(--button-h-padding) * 2) + var(--button-icon-size));\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n opacity: 0;\n border: 0px solid var(--button-loading-area-divider-color);\n background-color: var(--button-loading-area-background-color);\n\n transition:\n flex var(--speed-slow) var(--easing-primary-in-out) var(--speed-slow),\n opacity var(--speed-slow) var(--easing-primary-in-out);\n\n ${({ $position }) => css`\n order: ${ $position && $position === 'left' ? 0 : 2 };\n ${ $position === 'left'\n ? `border-right-width: 1px;`\n : `border-left-width: 1px;`\n };\n `}\n\n svg {\n display:block;\n }\n`;\n\nconst InnerContainer = styled.div<{$position?: string, $loading: boolean, $design: TypeButtonDesigns, $size: TypeButtonSizes}>`\n display: flex;\n flex:1;\n height: inherit;\n\n ${({ $loading }) => $loading ? css`\n\n transition: margin var(--speed-slow) var(--easing-primary-in-out);\n\n ${LoadingContainer}{\n opacity: 1;\n transition: flex var(--speed-slow) var(--easing-primary-in-out), opacity var(--speed-slow) var(--easing-primary-in-out) var(--speed-slow);\n }\n ` : css`\n ${LoadingContainer}{\n flex: 0 0 0px;\n }\n `}\n`;\n\ninterface IProps extends IButtonProps {\n position?: 'left' | 'right'\n shadow?: boolean\n}\n\nconst ButtonWithLoading : React.FC<IProps> = ({design='primary', size='normal', shadow = false, onClick, disabled, position, loading=false, children,...rest}) => {\n return (\n <Container>\n <Button noPadding disabled={disabled || loading} {...{ design, size, shadow, onClick, loading}} {...rest}>\n <InnerContainer $loading={loading} $design={design} $size={size}>\n <TextContainer><>{children}</></TextContainer>\n <LoadingContainer $design={design} $position={position}>\n <Spinner size={size ==='xsmall' || size ==='small' ? 'xsmall' : 'small'} styling={design} />\n </LoadingContainer>\n </InnerContainer>\n </Button>\n </Container>\n );\n};\n\nexport default ButtonWithLoading;","import React, { ButtonHTMLAttributes } from 'react';\nimport styled from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport Icon, { IconProps, IconWrapper } from '../../Icons/Icon';\n\nconst StyledButton = styled.button<{$color:ISvgIcons['color']; $hoverColor:ISvgIcons['color']}>`\n ${resetButtonStyles};\n [stroke]{\n stroke: ${({$color}) => $color};\n }\n &:hover {\n ${IconWrapper} {\n [stroke]{\n stroke: ${({$hoverColor}) => $hoverColor};\n }\n }\n }\n`;\n\ninterface OwnProps {\n hoverColor?: string\n}\n\nexport type IconButtonData = OwnProps & IconProps & ButtonHTMLAttributes<HTMLButtonElement>\n\nconst IconButton : React.FC<IconButtonData> = ({\n icon,\n size = 20,\n weight = 'regular',\n color = 'dimmed',\n hoverColor = 'mono',\n children,\n formAction,\n ...props }) => {\n return(\n <StyledButton\n type='button'\n $color={color}\n $hoverColor={hoverColor}\n {...props}\n >\n <Icon icon={icon} size={size} weight={weight} />\n </StyledButton>\n );\n};\n\nexport default IconButton;","import React from 'react';\nimport styled, {css} from 'styled-components';\nimport IconButton, { IconButtonData } from '../atoms/IconButton';\n\nconst StyledIconButton = styled(IconButton)``;\n\nconst Container = styled.div<{$alignment?: IAlignmentOptions}>`\n display: flex;\n ${StyledIconButton} {\n margin-left: 15px;\n }\n ${StyledIconButton}:first-child {\n margin-left: 0px;\n }\n\n ${({$alignment}) => $alignment === 'left' && css`\n justify-content: flex-start;\n `};\n\n ${({$alignment}) => $alignment === 'center' && css`\n justify-content: center;\n `};\n\n ${({$alignment}) => $alignment === 'right' && css`\n justify-content: flex-end;\n `};\n`;\n\ntype IAlignmentOptions = 'left' | 'center' | 'right'\n\ntype IGroupButtonsData = {\n buttonsConfig: IconButtonData []\n alignment?: IAlignmentOptions\n}\n\nconst ActionButtons : React.FC<IGroupButtonsData> = ({buttonsConfig, alignment = 'right' }) => {\n\n return(\n <Container $alignment={alignment}>\n {\n buttonsConfig.map((btn) => {\n const {icon, size, weight, color, hoverColor, onClick} = btn;\n return (\n <StyledIconButton\n key={`${icon}-${size}`}\n icon={icon}\n size={size}\n weight={weight}\n color={color}\n hoverColor={hoverColor}\n onClick={onClick}\n />\n );\n })\n }\n </Container>\n );\n};\n\nexport default ActionButtons;","import React, { InputHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport Spinner from '../../Indicators/Spinner';\nimport { TypeFieldState } from '..';\nimport { removeAutoFillStyle } from '../../common';\n\nconst ActionContainer = styled.div`\n position: absolute;\n right: 0;\n top: 0;\n`;\n\nconst InputActionButton = styled.button.attrs({ type: \"button\" })`\n width: 40px;\n height: 40px;\n background: transparent;\n border: none;\n cursor: pointer;\n outline: none;\n`;\n\nconst FeedbackContainer = styled.div`\n flex-shrink: 0;\n\n background-color: transparent;\n border: 1px solid transparent;\n\n border-left: none;\n border-radius: 0 3px 3px 0;\n overflow: hidden;\n\n display:flex;\n justify-content:left;\n align-items:center;\n`;\n\nconst FeedbackMessage = styled.div`\n flex: 0 1 400px;\n padding: 0 10px 0 0;\n\n font-weight: 500;\n color: var(--white-1);\n`;\n\nconst FeedbackIcon = styled.div`\n flex: 0 0 40px;\n width: 40px;\n display: flex;\n justify-content:center;\n align-items:center;\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--white-1);\n }\n }\n`;\n\nconst StyledInput = styled.input<{ $fieldState : TypeFieldState }>`\n ${removeAutoFillStyle};\n\n ${({$fieldState}) => css`\n border: 1px solid var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-background-color);\n box-shadow: var(--input-box-shadow-x) var(--input-box-shadow-y) var(--input-box-shadow-blur) var(--input-box-shadow-spread) var(--input-${$fieldState}-shadow-color, transparent);\n `};\n\n font-family: var(--font-data);\n\n height: var(--input-height);\n width: 100%;\n border-radius: 3px;\n\n padding: 0 15px 0 15px;\n box-sizing: border-box;\n outline: none;\n\n color: var(--input-color-default);\n font-size: 14px;\n\n transition:\n border var(--speed-fast) var(--easing-primary-out),\n background-color var(--speed-fast) var(--easing-primary-out),\n box-shadow var(--speed-fast) var(--easing-primary-out);\n\n &::placeholder {\n font-family: var(--font-data);\n color: var(--input-color-placeholder);\n font-style: italic;\n font-weight: 400;\n }\n\n &:lang(ja)::placeholder {\n font-style: normal;\n };\n`;\n\nconst InputContainer = styled.div<{$hasAction?: boolean}>`\n\n flex: 1;\n position: relative;\n\n ${({ $hasAction }) => $hasAction && css`\n ${StyledInput}{\n padding-right: 60px;\n\n // Used to control password manager injection.\n background-position: calc(100% - 50px) 50% !important;\n }\n `}\n\n`;\n\nconst Container = styled.div<{ $fieldState: TypeFieldState, $showFeedback?: boolean }>`\n ${({$fieldState, $showFeedback}) => css`\n\n display: flex;\n position: relative;\n flex-direction: row;\n\n ${StyledInput}{\n\n &:disabled {\n cursor: not-allowed;\n }\n\n ${['default', 'disabled'].indexOf($fieldState) === -1 && $showFeedback && css`\n border-top-right-radius: 0px;\n border-bottom-right-radius: 0px;\n `};\n\n }\n\n ${FeedbackContainer} {\n ${['default', 'disabled'].indexOf($fieldState) !== -1 && css`\n display: none;\n `};\n border-color: var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-border-color);\n }\n\n &:focus-within ${StyledInput} {\n border-color: var(--input-${$fieldState}-focused-border-color, var(--input-${$fieldState}-border-color));\n box-shadow: var(--input-focused-box-shadow-x) var(--input-focused-box-shadow-y) var(--input-focused-box-shadow-blur) var(--input-focused-box-shadow-spread) var(--input-${$fieldState}-focused-shadow-color);\n }\n `}\n\n`;\n\ninterface OwnProps {\n fieldState?: TypeFieldState;\n showFeedback?: boolean;\n feedbackMessage?: string;\n actionCallback?: ()=>void;\n actionIcon?: string\n postfix?: string;\n}\n\nexport type InputProps = OwnProps & InputHTMLAttributes<HTMLInputElement>\n\nconst Input : React.FC<InputProps> = ({\n type = 'text',\n placeholder = '',\n defaultValue,\n fieldState = 'default',\n showFeedback = false,\n feedbackMessage,\n actionCallback,\n actionIcon,\n postfix,\n children,\n formAction,\n ...props\n}) => {\n\n const isActionButton = actionCallback !== undefined;\n\n const feedbackIcon = (fieldState: TypeFieldState) => {\n switch(fieldState){\n case 'default':\n break;\n case 'disabled':\n break;\n case 'required':\n return <Icon icon='Required' size={16} />;\n case 'valid':\n return <Icon icon='Success' size={16} />;\n case 'invalid':\n return <Icon icon='Invalid' size={16} />;\n case 'processing':\n return <Spinner size='medium' styling='primary' />;\n }\n };\n\n return (\n <Container $fieldState={fieldState || 'default'} $showFeedback={showFeedback}>\n\n <InputContainer $hasAction={isActionButton}>\n <StyledInput\n $fieldState={fieldState || 'default'}\n disabled={fieldState === 'disabled' || fieldState === 'processing'}\n type={type}\n placeholder={placeholder}\n defaultValue={defaultValue}\n {...props} />\n {(isActionButton) ? (\n <ActionContainer>\n <InputActionButton onClick={actionCallback}>\n <Icon icon={actionIcon || 'NoIcon'} color='primary' />\n </InputActionButton>\n </ActionContainer>\n ) : null}\n </InputContainer>\n\n {fieldState && showFeedback ? (\n <FeedbackContainer>\n <FeedbackIcon>{feedbackIcon(fieldState)}</FeedbackIcon>\n {feedbackMessage ? (\n <FeedbackMessage>{feedbackMessage}</FeedbackMessage>\n ) : null}\n </FeedbackContainer>\n ) : null}\n\n </Container>\n );\n};\n\n\nexport default Input;\n","import React, { LabelHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport { TypeLabelDirection } from '..';\n\nconst LabelText = styled.span<{ $required?: boolean }>`\n display: flex;\n flex: 1;\n align-items: center;\n gap: 8px;\n\n ${({$required}) => $required && css`\n &::after {\n content: '';\n display: var(--input-required-dot-display);\n height: 8px;\n width: 8px;\n background-color: var(--primary-9);\n border-radius: 4px;\n }\n `}\n`;\n\nexport const StyledLabel = styled.label<{ $direction?: TypeLabelDirection }>`\n font-family: var(--font-ui);\n color: var(--grey-11);\n font-size: 14px;\n font-weight: 500;\n\n display: flex;\n gap: 8px;\n\n ${({$direction}) => $direction && css`\n flex-direction: ${$direction};\n ${['row', 'row-reverse'].includes($direction) && css`\n display: inline-flex;\n \n ${LabelText}{\n align-self: center;\n }\n `}\n `}\n`;\n\ninterface OwnProps {\n htmlFor: string\n labelText: string\n direction?: TypeLabelDirection\n rightAlign?: boolean\n required?: boolean\n}\ntype Props = OwnProps & LabelHTMLAttributes<HTMLLabelElement>\n\nconst Label: React.FC<Props> = ({\n htmlFor,\n labelText,\n direction = 'column',\n rightAlign = false,\n required = false,\n children,\n ...props }) => {\n\n if(rightAlign){\n console.warn('Deprecation warning: `Label` is deprecating `rightAlign`, please update this to use `direction=\\'row-reverse\\'` instead.');\n direction = 'row-reverse';\n }\n\n return (\n <StyledLabel htmlFor={htmlFor} $direction={direction} {...props}>\n <>\n <LabelText $required={required}>{labelText}</LabelText>\n {children}\n </>\n </StyledLabel>\n );\n};\n\nexport default Label;","import React, { InputHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Label from '../atoms/Label';\nimport { TypeFieldState } from '..';\nimport { removeAutoFillStyle } from '../../common';\n\nconst StyledInput = styled.input<{ $fieldState : TypeFieldState }>`\n ${removeAutoFillStyle};\n\n font-family: var(--font-data);\n line-height: var(--input-compact-height);\n\n font-size: 14px;\n flex: 1;\n color: var(--input-color-default);\n width: 100%;\n border: none;\n background-color: transparent;\n box-sizing: border-box;\n outline: none;\n\n &::placeholder {\n color: var(--input-color-placeholder);\n font-style: italic;\n }\n\n &:lang(ja)::placeholder {\n font-style: normal;\n };\n\n &:disabled {\n cursor: not-allowed;\n color: var(--input-color-disabled);\n }\n`;\n\nconst InputContainer = styled.div<{$fieldState : TypeFieldState, $hasAction?: boolean}>`\n display: flex;\n height: var(--input-compact-height);\n padding: 0 8px;\n align-items: center;\n gap: 8px;\n position: relative;\n border-radius: 3px;\n\n ${({$fieldState}) => css`\n border: 1px solid var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-background-color);\n transition:\n border var(--speed-normal) var(--easing-primary-out),\n background-color var(--speed-normal) var(--easing-primary-out);\n `};\n\n ${({ $hasAction }) => $hasAction && css`\n ${StyledInput}{\n padding-right: 200px;\n\n // Used to control password manager injection.\n background-position: calc(100% - 50px) 50% !important;\n }\n `}\n\n`;\n\nconst UnitKey = styled.div`\n flex: 0 1;\n font-size: 12px;\n font-family: var(--font-ui);\n color: var(--input-color-unit);\n margin-top: 1px;\n white-space: nowrap;\n`;\n\nconst Container = styled.div<{ $fieldState: string }>`\n position: relative;\n\n ${({$fieldState}) => $fieldState && css`\n &:focus-within ${InputContainer} {\n transition: boxShadow var(--speed-fast) var(--easing-primary-in-out);\n box-shadow: 0 3px 3px var(--input-${$fieldState}-focused-shadow-color, var(--input-${$fieldState}-shadow-color));\n }\n `};\n`;\n\ninterface OwnProps {\n fieldState?: TypeFieldState;\n label: string\n unit?: string\n}\n\ntype Props = OwnProps & InputHTMLAttributes<HTMLInputElement>\n\nconst SmallInput : React.FC<Props> = ({\n unit,\n label,\n name,\n type = 'text',\n placeholder = '',\n defaultValue,\n fieldState = 'default',\n required = false,\n className,\n children,\n formAction,\n ...props\n}) => {\n\n\n\n return (\n <Container className={className} $fieldState={fieldState || 'default'}>\n <Label labelText={label} htmlFor={name || ''} {...{required}}>\n <InputContainer $fieldState={fieldState || 'default'}>\n <StyledInput\n $fieldState={fieldState || 'default'}\n type={type}\n placeholder={placeholder}\n defaultValue={defaultValue}\n {...props} />\n {unit ? <UnitKey>{unit}</UnitKey> : null}\n </InputContainer>\n </Label>\n\n </Container>\n );\n\n};\n\n\nexport default SmallInput;","import React, { useRef, useEffect, useState, useCallback } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Icon from '../../Icons/Icon';\nimport Spinner from '../../Indicators/Spinner';\nimport { StyledLabel } from './Label';\n\n\nenum SwitchPosition {\n Off = 0,\n On = 1,\n Neutral = 2,\n Locked = 3\n}\n\ntype PositionKey = 'off' | 'on' | 'neutral' | 'locked';\n\nconst getPositionKey = (switchPos : SwitchPosition) : PositionKey => {\n switch (switchPos) {\n case SwitchPosition.Off:\n return 'off';\n case SwitchPosition.On:\n return 'on';\n case SwitchPosition.Neutral:\n return 'neutral';\n case SwitchPosition.Locked:\n return 'locked';\n default:\n return 'off';\n }\n\n};\n\nconst RealInput = styled.input`\n display: none;\n`;\nconst SwitchOuter = styled.div`\n border: var(--switch-border-width) solid transparent;\n box-sizing: border-box;\n cursor: pointer;\n position: relative;\n\n width: var(--switch-width);\n height: var(--switch-height);\n border-radius: calc(var(--switch-height) / 2);\n\n &::before {\n content: '';\n display: block;\n position: absolute;\n top: calc(var(--switch-border-width) * -1);\n left: calc(var(--switch-border-width) * -1);\n bottom: calc(var(--switch-border-width) * -1);\n right: calc(var(--switch-border-width) * -1);\n pointer-events: none;\n border-radius: 12px;\n box-shadow:\n 0px 2px 2px 0px var(--grey-a4) inset,\n 0px -8px 8px 0px var(--grey-a2) inset,\n 0px 2px 4px var(--black-a4),\n 0px -2px 4px var(--white-a4);\n }\n`;\n\nconst SwitchInner = styled.div<{ $position: PositionKey}>`\n --offset: calc(((var(--switch-height) - var(--switch-inner-size)) / 2) - var(--switch-border-width));\n --position-off: var(--offset);\n --position-on: calc(var(--switch-width) - var(--switch-inner-size) - (var(--switch-border-width)*2) - var(--offset));\n --position-neutral: calc((var(--switch-width) / 2) - (var(--switch-inner-size) / 2) - var(--offset));\n --position-locked: var(--offset);\n\n position: absolute;\n top: var(--offset);\n left: ${({$position}) => $position && `var(--position-${$position})`};\n\n box-sizing: border-box;\n height: var(--switch-inner-size);\n width: var(--switch-inner-size);\n border-radius: calc(var(--switch-inner-size) / 2);\n\n background-color: var(--switch-default-off-background);\n\n box-shadow:\n 0px 2px 4px 0px var(--black-a8),\n 0px 1px 2px 0px var(--white-a5) inset,\n 0px -1px 1px 0px var(--black-a5) inset;\n`;\n\nconst LabelText = styled.span``;\n\nconst IconWrapper = styled.div`\n position: absolute;\n width: inherit;\n height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n svg {\n display: block;\n }\n`;\nconst SpinnerWrapper = styled.div``;\n\nconst Container = styled(StyledLabel)<{$activeTheming: string, $loading: boolean, $useIntent: boolean, $themeState: string, $position: SwitchPosition, $checked?: boolean}>`\n user-select: none;\n display: inline-flex;\n gap: 8px;\n align-items: center;\n\n ${SwitchOuter}{\n ${({$activeTheming, $themeState}) => css`\n border-color: var(--switch-${$themeState}-${$activeTheming}-border);\n background-color: var(--switch-${$themeState}-${$activeTheming}-background);\n `};\n\n ${({ $activeTheming }) => $activeTheming === 'locked' && css`\n background-color: var(--switch-special-locked-background);\n border-color: var(--switch-special-locked-border);\n `};\n\n ${({ $activeTheming }) => $activeTheming === 'failure' && css`\n background-color: var(--switch-special-failure-background);\n border-color: var(--switch-special-failure-border);\n `};\n\n ${({$activeTheming, $loading}) => $loading && css`\n background-color: var(--switch-default-${$activeTheming}-background);\n border-color: var(--switch-default-${$activeTheming}-border);\n `};\n\n }\n\n ${SwitchInner}{\n ${({$activeTheming, $themeState}) => css`\n background-color: var(--switch-${$themeState}-${$activeTheming}-inner);\n `};\n\n transition:\n left var(--speed-fast) var(--easing-primary-in-out),\n border var(--speed-fast) var(--easing-primary-in-out),\n width var(--speed-fast) var(--easing-primary-in-out);\n\n ${({ $activeTheming }) => $activeTheming === 'locked' && css`\n width: calc(100% - var(--switch-border-width));\n background-color: var(--switch-special-locked-inner);\n box-shadow: none;\n\n ${IconWrapper} svg {\n transform: translateX(-1px);\n }\n `}\n\n ${({ $activeTheming }) => $activeTheming === 'failure' && css`\n background-color: var(--switch-special-failure-inner);\n `}\n\n ${({$activeTheming, $loading}) => $loading && css`\n border-color: var(--switch-default-${$activeTheming}-inner);\n box-shadow: none;\n `};\n\n }\n\n &:hover {\n ${SwitchInner}{\n left: ${({$useIntent, $position}) =>\n $useIntent && $position === SwitchPosition.Off && 'calc(var(--position-off) + var(--switch-intent-offset))' ||\n $useIntent && $position === SwitchPosition.On && 'calc(var(--position-on) - var(--switch-intent-offset))'\n };\n }\n }\n`;\n\nexport type TypeSwitchState = 'default' | 'loading' | 'locked' | 'disabled' | 'failure';\n\nconst isTypeSwitchState = (value: string): value is TypeSwitchState => {\n return (\n value === 'default' ||\n value === 'loading' ||\n value === 'locked' ||\n value === 'disabled' ||\n value === 'failure'\n );\n};\n\ntype SwitchThemes = 'on' | 'off' | 'danger';\n\ninterface IProps {\n labelText?: string\n leftTheme?: SwitchThemes\n rightTheme?: SwitchThemes\n state?: TypeSwitchState\n checked?: boolean\n defaultChecked?: boolean\n onChangeCallback?: (checked: boolean, indeterminate?: boolean) => void;\n}\n\nconst Switch : React.FC<IProps> = ({\n state = 'default',\n leftTheme = 'off',\n rightTheme = 'on',\n labelText,\n onChangeCallback,\n checked,\n defaultChecked = false\n}) => {\n const isControlled = checked !== undefined;\n const initialChecked = isControlled ? checked : defaultChecked;\n const initialPosition = initialChecked ? SwitchPosition.On : SwitchPosition.Off;\n const initialTheme = initialChecked ? rightTheme : leftTheme;\n\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const inputRef = useRef<HTMLInputElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<SwitchPosition>(initialPosition);\n const [activeTheming, setActiveTheming] = useState<string>(initialTheme);\n const [switchState, setSwitchState] = useState<TypeSwitchState>('default');\n const [justUpdated, setJustUpdated] = useState<boolean>(false);\n const [innerSize, setInnerSize] = useState<number>(0);\n \n\n const updateSwitchPositionAndTheme = useCallback(() => {\n if (isControlled) {\n setPosition(checked ? SwitchPosition.On : SwitchPosition.Off);\n setActiveTheming(checked ? rightTheme : leftTheme);\n } else if (inputRef.current) {\n inputRef.current.checked = internalChecked;\n setPosition(internalChecked ? SwitchPosition.On : SwitchPosition.Off);\n setActiveTheming(internalChecked ? rightTheme : leftTheme);\n }\n }, [checked, isControlled, internalChecked, leftTheme, rightTheme]);\n\n useEffect(() => {\n updateSwitchPositionAndTheme();\n }, [updateSwitchPositionAndTheme]);\n \n\n const positionSwitch = useCallback(() => {\n if (isControlled) {\n setPosition(checked ? SwitchPosition.On : SwitchPosition.Off);\n setActiveTheming(checked ? rightTheme : leftTheme);\n } else {\n setPosition(internalChecked ? SwitchPosition.On : SwitchPosition.Off);\n setActiveTheming(internalChecked ? rightTheme : leftTheme);\n }\n }, [checked, isControlled, leftTheme, rightTheme, internalChecked]);\n\n\n const customOnChange = useCallback(() => {\n if (state === 'locked' || state === 'disabled') return;\n\n if (isControlled) {\n onChangeCallback?.(!checked);\n } else {\n const newChecked = !internalChecked;\n setInternalChecked(newChecked);\n onChangeCallback?.(newChecked);\n }\n positionSwitch();\n }, [isControlled, checked, internalChecked, onChangeCallback, state, positionSwitch]);\n\n /**\n * updateThemeChoice()\n * If for some reason we need to change the left or right theme in context, this makes sure\n * things get updated. (i.e. in StoryBook)\n */\n const updateThemeChoice = useCallback(() => {\n if(position === SwitchPosition.On){\n setActiveTheming(rightTheme);\n } else if(position === SwitchPosition.Off){\n setActiveTheming(leftTheme);\n }\n }, [position, rightTheme, leftTheme]);\n\n /** Watch for that theme change. */\n useEffect(() => {\n updateThemeChoice();\n }, [leftTheme, rightTheme, updateThemeChoice]);\n\n useEffect(() => {\n if(isTypeSwitchState(state))\n setSwitchState( stateCheck(state) );\n\n }, [state, setSwitchState]);\n\n /** Watch for locking prop. */\n useEffect(() => {\n if(state === 'locked'){\n setPosition(SwitchPosition.Locked);\n setActiveTheming('locked');\n } else if(state === 'failure'){\n setPosition(SwitchPosition.Neutral);\n setActiveTheming('failure');\n } else {\n positionSwitch();\n }\n }, [state, setPosition, positionSwitch]);\n\n useEffect(() => {\n if(innerRef.current){\n setInnerSize( parseInt( getComputedStyle(innerRef.current).getPropertyValue('--switch-inner-size') ));\n }\n }, [innerRef]);\n\n\n return (\n <Container onChange={customOnChange} onMouseLeave={ () => setJustUpdated(false) } $activeTheming={activeTheming} $loading={state === 'loading'} $useIntent={ !justUpdated && (state === 'default' || state === 'failure')} $themeState={switchState} $position={position} $checked={inputRef.current?.checked}>\n <SwitchOuter>\n <SwitchInner $position={getPositionKey(position)} ref={innerRef}>\n {state === 'failure' ? <IconWrapper><Icon icon='Exclamation' color='danger' size={18} weight='regular' /></IconWrapper> : null}\n {state === 'locked' ? <IconWrapper><Icon icon='Locked' color='switch-special-locked-icon' size={12} weight='regular' /></IconWrapper> : null}\n {state === 'loading' && innerSize > 0 ? <SpinnerWrapper><Spinner styling='simple' custom={{ size: innerSize }} /></SpinnerWrapper> : null}\n </SwitchInner>\n </SwitchOuter>\n {labelText ? <LabelText>{labelText}</LabelText> : null}\n <RealInput ref={inputRef} type='checkbox' disabled={state !== 'default' && state !== 'failure'} defaultChecked={!isControlled ? defaultChecked : checked} />\n </Container>\n );\n\n};\n\nconst stateCheck = (state: TypeSwitchState) : TypeSwitchState => {\n switch(state){\n case 'locked':\n return 'default';\n case 'failure':\n return 'default';\n default:\n return state;\n }\n};\n\nexport default Switch;\nexport { SwitchPosition };","import * as React from \"react\";\n\nfunction SvgLogoMark(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width={35} height={35} {...props}>\n <defs>\n <linearGradient\n id='LogoMark_svg__a'\n x1='36.708%'\n x2='69.959%'\n y1='2.579%'\n y2='98.009%'\n >\n <stop offset='0%' stopColor='#7DB8DB' />\n <stop offset='100%' stopColor='#5CA0D1' />\n </linearGradient>\n </defs>\n <g fill='none' fillRule='evenodd'>\n <rect width={35} height={35} fill='url(#LogoMark_svg__a)' rx={5} />\n <path\n fill='#FFF'\n fillRule='nonzero'\n d='M14.42 25.12c4.4 0 6.42-3.06 6.42-7.02v-7.3h-3.9v7.3c0 1.84-.68 3.56-2.52 3.56-1.8 0-2.5-1.68-2.5-3.56v-7.3h-3.9v7.3c0 3.76 1.86 7.02 6.4 7.02zM26.98 25V10.8h-3.9V25h3.9z'\n />\n </g>\n </svg>\n );\n}\n\nexport default SvgLogoMark;\n","import * as React from \"react\";\n\nfunction SvgLogoText(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width={71} height={30} {...props}>\n <path\n d='M6.088 12.112c2.336 0 4.128-.976 4.128-3.168 0-2.048-1.472-2.72-3.84-3.248-2.048-.464-2.992-.784-2.992-2 0-1.152.8-1.856 2.56-1.856 1.36 0 2.56.592 3.088 1.184l.672-1.168C8.744 1.072 7.496.56 5.976.56c-2.352 0-4.08 1.184-4.08 3.36 0 1.808 1.2 2.432 3.504 2.992 2.112.512 3.28.896 3.28 2.176 0 1.136-.944 1.728-2.56 1.728-1.728 0-3.28-.8-3.968-1.52l-.688 1.216c1.28 1.04 2.88 1.6 4.624 1.6zm11.941-.016c1.76 0 3.792-.944 4.512-2.64l-1.2-.656c-.656 1.408-2.064 2-3.248 2-2.256 0-3.936-2.128-3.936-4.496 0-2.144 1.36-4.432 3.888-4.432 1.152 0 2.48.48 3.152 1.92l1.136-.736C21.63 1.6 20.125.576 18.11.576c-3.424 0-5.408 2.912-5.408 5.664 0 2.88 2.208 5.856 5.328 5.856zm12.134-.016c3.072 0 5.36-2.72 5.36-5.744 0-2.848-2.144-5.776-5.328-5.776-3.072 0-5.376 2.736-5.376 5.76 0 2.912 2.16 5.76 5.344 5.76zm.016-1.296c-2.352 0-3.904-2.144-3.904-4.464 0-2.208 1.488-4.448 3.904-4.448 2.304 0 3.888 2.128 3.888 4.448 0 2.192-1.472 4.464-3.888 4.464zM40.296 12V7.92h3.008L45.896 12h1.632l-2.752-4.352c1.44-.368 2.384-1.792 2.384-3.376C47.16 2.48 45.72.64 43.72.64h-4.864V12h1.44zm3.44-5.36h-3.44V1.92h3.344c1.104 0 2.064 1.072 2.064 2.352 0 1.248-.784 2.368-1.968 2.368zM58.413 12v-1.28h-6.272V6.8h5.328V5.6h-5.328V1.92h6.128V.64h-7.568V12h7.712zm4.742 0V7.92h3.008L68.755 12h1.632l-2.752-4.352c1.44-.368 2.384-1.792 2.384-3.376 0-1.792-1.44-3.632-3.44-3.632h-4.864V12h1.44zm3.44-5.36h-3.44V1.92h3.344c1.104 0 2.064 1.072 2.064 2.352 0 1.248-.784 2.368-1.968 2.368zM4.78 27.05c2.18 0 2.99-1.66 2.99-3.57V19.9h-.7v3.58c0 1.45-.5 2.94-2.3 2.94-1.76 0-2.29-1.45-2.29-2.94V19.9h-.69v3.58c0 1.81.74 3.57 2.99 3.57zm6.193-.05v-7.1h-.7V27h.7zm6.697 0v-2.18L19 23.44 21.71 27h.79l-3.05-3.98 2.9-3.12h-.77l-3.91 4.13v-4.12h-.7V27h.7zm7.263 0v-7.1h-.7V27h.7zm5.124 0v-6.48h2.53v-.62h-5.76v.62h2.53V27h.7z'\n fill='#93A5B2'\n />\n </svg>\n );\n}\n\nexport default SvgLogoText;\n","import * as React from 'react';\n\nfunction SvgAvatarPlaceholder(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg width={48} height={48} {...props} viewBox='0 0 48 48'>\n <g fill='none' fillRule='evenodd' strokeLinecap='round' strokeLinejoin='round'>\n <g stroke='#C1C1C1' strokeWidth='1.5'>\n <g>\n <g>\n <g transform='translate(-789 -294) translate(772 277) translate(10.25 10.25) translate(7.688 7.688)'>\n <rect width='37.477' height='43.242' x='4.324' y='1.441' rx='1.5' />\n <circle cx='23.063' cy='17.456' r='7.899' />\n <path d='M36.035 36.568c-2.537-4.814-7.53-7.828-12.972-7.828-5.442 0-10.436 3.014-12.973 7.828' />\n </g>\n </g>\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgAvatarPlaceholder;","import * as React from \"react\";\n\nfunction CheckMark(props: ISvgIcons) {\n return (\n <svg width={props.size} height={props.size} viewBox='0 0 24 24' {...props}>\n <path\n d='M23.848 5.132l-2.967-2.976a.531.531 0 0 0-.753 0L7.595 14.697a.531.531 0 0 1-.752 0l-2.968-2.975a.531.531 0 0 0-.752 0L.156 14.697a.531.531 0 0 0 0 .752l6.687 6.688a.531.531 0 0 0 .752 0L23.848 5.876a.531.531 0 0 0 0-.744z'\n fill='none'\n fillRule='evenodd'\n stroke='#000'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth={1.5}\n />\n </svg>\n );\n}\n\nexport default CheckMark;\n","import * as React from 'react';\n\nfunction SvgNoImage() {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n width='55'\n height='60'\n fill='none'\n viewBox='5 80 300 174'\n >\n <path fill='#F0F0F0' d='M0 0H320V240H0z' />\n <path\n fill='#656565'\n d='M113.8 112.087V130h-1.212c-.192 0-.355-.033-.488-.1a1.246 1.246 0 01-.375-.338l-10.362-13.5a16.889 16.889 0 01.05 1.175V130h-2.126v-17.913h1.251c.108 0 .2.009.275.025.075.009.141.03.2.063a.589.589 0 01.175.125c.058.05.12.117.187.2l10.363 13.487-.05-.625a13.596 13.596 0 01-.013-.587v-12.688h2.125zm21.129 8.963c0 1.342-.212 2.575-.637 3.7a8.463 8.463 0 01-1.8 2.887 8.102 8.102 0 01-2.8 1.888c-1.084.442-2.284.663-3.6.663-1.317 0-2.517-.221-3.6-.663a8.119 8.119 0 01-2.788-1.888 8.463 8.463 0 01-1.8-2.887c-.425-1.125-.637-2.358-.637-3.7s.212-2.571.637-3.688c.425-1.125 1.025-2.091 1.8-2.9a8.052 8.052 0 012.788-1.9c1.083-.45 2.283-.675 3.6-.675 1.316 0 2.516.225 3.6.675a8.035 8.035 0 012.8 1.9c.775.809 1.375 1.775 1.8 2.9.425 1.117.637 2.346.637 3.688zm-2.487 0c0-1.1-.15-2.088-.45-2.963-.3-.875-.725-1.612-1.275-2.212a5.504 5.504 0 00-2-1.4c-.784-.325-1.659-.488-2.625-.488-.959 0-1.829.163-2.613.488a5.618 5.618 0 00-2.012 1.4c-.55.6-.975 1.337-1.275 2.212-.3.875-.45 1.863-.45 2.963s.15 2.087.45 2.962c.3.867.725 1.605 1.275 2.213a5.687 5.687 0 002.012 1.387c.784.317 1.654.475 2.613.475.966 0 1.841-.158 2.625-.475a5.57 5.57 0 002-1.387c.55-.608.975-1.346 1.275-2.213.3-.875.45-1.862.45-2.962zM147.22 130h-2.425v-17.913h2.425V130zm23.22-17.913V130h-2.125v-13.163c0-.175.004-.362.012-.562l.05-.613-6.15 11.2c-.192.375-.483.563-.875.563h-.35c-.392 0-.683-.188-.875-.563l-6.275-11.25c.05.442.075.85.075 1.225V130h-2.125v-17.913h1.788c.216 0 .383.021.5.063.116.042.229.158.337.35l6.188 11.025c.1.2.195.408.287.625.1.217.192.437.275.662.083-.225.171-.445.263-.662.091-.225.191-.438.3-.638l6.075-11.012c.1-.192.208-.308.325-.35a1.66 1.66 0 01.512-.063h1.788zm14.092 11.263l-2.812-7.288a14.972 14.972 0 01-.263-.75c-.091-.291-.179-.6-.262-.925a13.51 13.51 0 01-.538 1.688l-2.812 7.275h6.687zm5.05 6.65h-1.875c-.216 0-.391-.054-.525-.163a1 1 0 01-.3-.412l-1.675-4.325h-8.037l-1.675 4.325a.878.878 0 01-.288.4.794.794 0 01-.525.175h-1.875l7.163-17.913h2.45L189.582 130zm16.443-8.613v6.875c-.9.65-1.862 1.138-2.887 1.463-1.017.317-2.134.475-3.35.475-1.442 0-2.742-.221-3.9-.663-1.159-.45-2.15-1.075-2.975-1.875a8.282 8.282 0 01-1.888-2.9c-.442-1.125-.662-2.362-.662-3.712 0-1.367.212-2.613.637-3.738.433-1.125 1.046-2.087 1.838-2.887.791-.808 1.754-1.433 2.887-1.875 1.133-.442 2.4-.663 3.8-.663.708 0 1.367.055 1.975.163.608.1 1.171.25 1.688.45.516.192.995.429 1.437.712a8.5 8.5 0 011.238.938l-.688 1.1a.739.739 0 01-.425.325c-.167.042-.354 0-.562-.125-.2-.117-.43-.258-.688-.425a5.555 5.555 0 00-.95-.475 7.037 7.037 0 00-1.312-.4c-.5-.108-1.096-.163-1.788-.163-1.008 0-1.921.167-2.737.5a5.683 5.683 0 00-2.088 1.413c-.575.608-1.017 1.35-1.325 2.225-.308.867-.462 1.842-.462 2.925 0 1.125.158 2.133.475 3.025.325.883.783 1.637 1.375 2.262a5.955 5.955 0 002.175 1.413c.85.325 1.804.487 2.862.487.833 0 1.571-.091 2.213-.275a9.829 9.829 0 001.9-.787v-3.938h-2.788a.549.549 0 01-.387-.137.459.459 0 01-.138-.338v-1.375h5.5zm14.762 6.638l-.013 1.975h-11.037v-17.913h11.037v1.975h-8.612v5.95h6.975v1.9h-6.975v6.113h8.625z'\n />\n </svg>\n );\n}\n\nexport default SvgNoImage;","import React, { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { CheckMark } from '../../svg';\nimport { dimensions } from '../../theme/common';\n\nenum CheckboxState {\n Off = \"off\",\n On = \"on\",\n Indeterminate = \"indeterminate\"\n}\n\nconst RealInput = styled.input`\n display: none;\n`;\nconst CheckboxOuter = styled.div`\n cursor: pointer;\n\n box-sizing: border-box;\n position: relative;\n width: 18px;\n height: 18px;\n border-radius: 5px;\n border-width: 2px;\n border-style: solid;\n\n transition: \n background-color var(--speed-faster) var(--easing-primary-out),\n border-color var(--speed-faster) var(--easing-primary-out);\n`;\n\nconst CheckboxInner = styled.div<{}>`\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n box-sizing: border-box;\n`;\n\nconst IconWrapper = styled.div<{$color: ISvgIcons['color']}>`\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n svg {\n display: block;\n [stroke]{\n stroke: transparent;\n }\n [fill] {\n fill: ${({$color}) => `var(--${$color})`};\n }\n }\n`;\n\nconst Container = styled.label<{$visualState?: CheckboxState, $disabled?: boolean}>`\n display: inline-block;\n user-select: none;\n ${CheckboxOuter}{\n border: var(--input-toggle-unchecked-border-color) 2px solid;\n }\n\n ${({$visualState, $disabled}) => $visualState === CheckboxState.Off && css`\n /* Unchecked */\n ${CheckboxOuter}{\n background-color: var(--input-toggle-unchecked-background-color);\n border-color: var(--input-toggle-unchecked-border-color);\n }\n\n /* Unchecked - Hover */\n ${!$disabled && css`\n &:hover ${CheckboxOuter} {\n background-color: var(--input-toggle-unchecked-hover-background-color);\n border-color: var(--input-toggle-unchecked-hover-border-color);\n }`\n };\n\n /* Unchecked - Disabled */\n ${$disabled && css`\n ${CheckboxOuter}{\n background-color: var(--input-toggle-unchecked-disabled-background-color);\n border-color: var(--input-toggle-unchecked-disabled-border-color);\n border: var(--grey-6) 2px solid;\n cursor: not-allowed;\n }\n `}\n `}\n\n ${({$visualState, $disabled}) => $visualState === CheckboxState.On && css`\n /* Checked */\n ${CheckboxOuter}{\n background-color: var(--input-toggle-checked-background-color);\n border-color: var(--input-toggle-checked-border-color);\n }\n /* Checked - Hover */\n ${!$disabled && css`\n &:hover ${CheckboxOuter}{\n background-color: var(--input-toggle-checked-hover-background-color);\n border-color: var(--input-toggle-checked-hover-border-color);\n }`\n };\n\n /* Checked - Disabled */\n ${$disabled && css`\n ${CheckboxOuter}{\n background-color: var(--input-toggle-checked-disabled-background-color);\n border-color: var(--input-toggle-checked-disabled-border-color);\n cursor: not-allowed;\n }\n ${IconWrapper}{\n opacity: 0.65;\n }\n `}\n `}\n\n ${({$visualState, $disabled}) => $visualState === CheckboxState.Indeterminate && css`\n ${CheckboxOuter}{\n background-color: var(--input-toggle-intermediate-background-color);\n border-color: var(--input-toggle-intermediate-border-color);\n }\n ${!$disabled && css`\n &:hover ${CheckboxOuter}{\n background-color: var(--input-toggle-intermediate-hover-background-color);\n border-color: var(--input-toggle-intermediate-hover-border-color);\n }\n `};\n ${$disabled && css`\n ${CheckboxOuter}{\n background-color: var(--input-toggle-intermediate-disabled-background-color);\n border-color: var(--input-toggle-intermediate-disabled-border-color);\n cursor: not-allowed;\n }\n ${IconWrapper}{\n opacity: 0.65;\n }\n `}\n\n `}\n\n`;\n\ninterface IProps {\n checked?: boolean\n disabled?: boolean\n indeterminate?: boolean\n onChangeCallback?: (checked: boolean, indeterminate?: boolean) => void;\n}\n\nconst Checkbox : React.FC<IProps> = ({ indeterminate: _indeterminate = false, disabled, checked = false, onChangeCallback }) => {\n\n const [ isChecked, setIsChecked ] = useState<boolean>(checked);\n const [ visualState, setVisualState ] = useState<CheckboxState>(checked ? CheckboxState.On : CheckboxState.Off);\n\n const customOnChange = (e: any) => {\n const checked = e.target.checked;\n\n setIsChecked(checked);\n if(onChangeCallback){ onChangeCallback(checked); }\n };\n\n useEffect(() => {\n\n const state = checked ? CheckboxState.On : CheckboxState.Off;\n // state = indeterminate ? CheckboxState.Indeterminate : state;\n\n setVisualState( state );\n\n }, [checked, isChecked, setVisualState]);\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked, setIsChecked]);\n\n const iconWeight : number = dimensions.icons.weights['regular'];\n\n return (\n <Container onChange={customOnChange} $disabled={disabled} $visualState={visualState}>\n <CheckboxOuter>\n <CheckboxInner>\n {visualState === CheckboxState.On ? <IconWrapper $color='input-toggle-icon-color'><CheckMark color='input-toggle-icon-color' stroke='inverse' size={12} weight={iconWeight} /></IconWrapper> : null}\n </CheckboxInner>\n </CheckboxOuter>\n <RealInput type='checkbox' checked={isChecked} readOnly {...{disabled}} /> {/* disabled={state !== 'default' && state !== 'failure'} */}\n </Container>\n );\n\n};\n\nexport default Checkbox;\nexport { CheckboxState };","import React, { useCallback, InputHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\n\nconst InnerRadio = styled.div`\n width: 10px;\n height: 10px;\n border-radius: 50%;\n user-select: none;\n`;\n\nconst OuterRadio = styled.div<{ $isChecked: boolean, $disabled: boolean }>`\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n border-radius: 50%;\n border-width: 2px;\n border-style: solid;\n user-select: none;\n\n ${({ $isChecked, $disabled }) => css`\n border-color: var(--input-toggle-unchecked-border-color);\n\n ${!$disabled && css`\n &:hover {\n cursor: pointer;\n border-color: var(--input-toggle-unchecked-hover-border-color);\n }\n `};\n\n ${$isChecked && !$disabled && css`\n border-color: var(--input-toggle-checked-border-color);\n ${InnerRadio} {\n background-color: var(--input-toggle-checked-background-color);\n }\n `};\n\n ${$isChecked && !$disabled && css`\n &:hover {\n border-color: var(--input-toggle-checked-hover-border-color);\n ${InnerRadio} {\n background-color: var(--input-toggle-checked-hover-background-color);\n }\n }\n `};\n\n ${$isChecked && $disabled && css`\n cursor: not-allowed;\n border-color: var(--input-toggle-checked-disabled-border-color);\n ${InnerRadio} {\n background-color: var(--input-toggle-checked-disabled-background-color);\n }\n `};\n\n ${!$isChecked && $disabled && css`\n cursor: not-allowed;\n border-color: var(--input-toggle-unchecked-disabled-border-color);\n ${InnerRadio} {\n background-color: var(--input-toggle-unchecked-disabled-background-color);\n }\n `}\n `};\n`;\n\nconst HiddenInput = styled.input`\n position: absolute;\n height: 100%;\n width: 100%;\n margin: 0;\n padding:0;\n opacity: 0;\n`;\n\nconst Container = styled.div`\n position: relative;\n display: inline-block;\n width: 18px;\n height: 18px;\n user-select: none;\n border-radius: 50%;\n`;\n\ninterface OwnProps {\n currentChecked?: number | string\n onChangeCallback?: (value: number | string) => void\n}\n\ntype IRadioButton = OwnProps & InputHTMLAttributes<HTMLInputElement>\n\nconst RadioButton: React.FC<IRadioButton> = ({\n id,\n value,\n name,\n currentChecked,\n disabled = false,\n required,\n onChangeCallback = () => { },\n}) => {\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const checkedValue = e.target.value;\n onChangeCallback(checkedValue);\n }, [onChangeCallback]);\n\n const isChecked = (currentChecked !== undefined) ? (currentChecked === value) : false;\n\n return (\n <Container>\n <HiddenInput\n type='radio'\n {...{ id, name, disabled, required, value }}\n checked={isChecked}\n onChange={handleChange}\n />\n <OuterRadio $isChecked={isChecked} $disabled={disabled}>\n <InnerRadio />\n </OuterRadio>\n </Container>\n );\n};\n\nexport default RadioButton;","import React, { TextareaHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport Spinner from '../../Indicators/Spinner';\nimport Icon from '../../Icons/Icon';\nimport { TypeFieldState } from '..';\n\nconst FeedbackIcon = styled.div`\n flex: 0 0 40px;\n width: 40px;\n display: flex;\n justify-content:center;\n align-items:center;\n padding-top: 2px;\n`;\n\nconst StyledTextArea = styled.textarea<{ $fieldState : TypeFieldState}>`\n\n ${({$fieldState}) => css`\n font-family: var(--font-data);\n border: 1px solid var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-background-color);\n box-shadow: var(--input-box-shadow-x) var(--input-box-shadow-y) var(--input-box-shadow-blur) var(--input-box-shadow-spread) var(--input-${$fieldState}-shadow-color, transparent);\n `};\n\n padding: 8px 15px;\n box-sizing: border-box;\n outline: none;\n height: 100%;\n width: 100%;\n border-radius: 3px;\n\n\n color: var(--input-color-default);\n font-size: 14px;\n\n transition:\n border var(--speed-fast) var(--easing-primary-out),\n background-color var(--speed-fast) var(--easing-primary-out),\n box-shadow var(--speed-fast) var(--easing-primary-out);\n\n &::placeholder {\n font-family: var(--font-data);\n color: var(--input-color-placeholder);\n font-style: italic;\n font-weight: 400;\n }\n\n &:lang(ja)::placeholder {\n font-style: normal;\n };\n`;\n\nconst FeedbackContainer = styled.div`\n flex-shrink: 0;\n padding: 8px 0;\n background-color: transparent;\n border: 1px solid transparent;\n\n border-left: none;\n border-radius: 0 0 3px 3px;\n overflow: hidden;\n\n display:flex;\n justify-content:left;\n align-items:center;\n`;\n\nconst FeedbackMessage = styled.div`\n flex: 0 1 400px;\n padding: 0 10px 0 0;\n font-weight: 500;\n color: var(--white-1);\n`;\n\nconst Container = styled.div<{ $fieldState: string, $showFeedback?: boolean }>`\n ${({$fieldState, $showFeedback}) => css`\n display: flex;\n position: relative;\n flex-direction: column;\n\n ${StyledTextArea}{\n ${['default', 'disabled'].indexOf($fieldState) === -1 && $showFeedback && css`\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n `};\n\n &:disabled {\n cursor: not-allowed;\n }\n\n &:focus {\n box-shadow: var(--input-focused-box-shadow-x) var(--input-focused-box-shadow-y) var(--input-focused-box-shadow-blur) var(--input-focused-box-shadow-spread) var(--input-${$fieldState}-focused-shadow-color);\n }\n }\n\n ${FeedbackContainer} {\n border-color: var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-border-color);\n\n ${['default', 'disabled'].indexOf($fieldState) !== -1 && css`\n display:none;\n `}\n }\n\n &:focus-within ${FeedbackContainer} {\n border-color: var(--input-${$fieldState}-focused-border-color, var(--input-${$fieldState}-border-color));\n }\n\n `};\n`;\n\ninterface OwnProps {\n fieldState: TypeFieldState\n showFeedback?: boolean\n feedbackMessage?: string\n}\n\ntype Props = OwnProps & TextareaHTMLAttributes<HTMLTextAreaElement>\n\nconst TextArea : React.FC<Props> = ({\n placeholder = '',\n fieldState = 'default',\n showFeedback = false,\n feedbackMessage,\n children,\n ...props\n}) => {\n\n const feedbackIcon = (fieldState: TypeFieldState) => {\n switch(fieldState){\n case 'default':\n break;\n case 'disabled':\n break;\n case 'required':\n return <Icon icon='Required' size={20} color='white' />;\n case 'valid':\n return <Icon icon='Success' size={20} color='white' />;\n case 'invalid':\n return <Icon icon='Invalid' size={20} color='white' />;\n case 'processing':\n return <Spinner size='medium' styling='primary' />;\n }\n };\n\n return (\n <Container $fieldState={fieldState || 'default'} $showFeedback={showFeedback}>\n <StyledTextArea\n $fieldState={fieldState || 'default'}\n placeholder={placeholder}\n disabled={fieldState === 'disabled' || fieldState === 'processing'}\n {...props}\n ><>{children}</>\n </StyledTextArea>\n {showFeedback && fieldState && (\n <FeedbackContainer>\n <FeedbackIcon>{feedbackIcon(fieldState)}</FeedbackIcon>\n <FeedbackMessage>{feedbackMessage}</FeedbackMessage>\n </FeedbackContainer>\n )}\n </Container>\n );\n};\n\nexport default TextArea;","import React, { useCallback, useState, SelectHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport Label from './Label';\nimport Icon from '../../Icons/Icon';\nimport { TypeFieldState, TypeLabelDirection } from '..';\n\n\nexport const SelectWrapper = styled.div`\n position: relative;\n display: flex;\n width: 100%;\n`;\n\nconst OpenIcon = styled.div<{ $isCompact?: boolean }>`\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n right: ${({$isCompact}) => $isCompact ? '14px' : '16px'};\n pointer-events: none;\n`;\n\nconst SubjectIcon = styled.div<{ $isCompact?: boolean }>`\n position: absolute;\n left: ${({$isCompact}) => $isCompact ? '10px' : '12px'};\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n`;\n\nconst StyledSelect = styled.select<{ $fieldState: TypeFieldState, $withIcon?: boolean, $isCompact?: boolean }>`\n box-sizing: border-box;\n outline: none;\n border-radius: 3px;\n appearance: none;\n font-family: var(--font-data);\n height: var(--input-height);\n width: 100%;\n border-radius: 3px;\n color: var(--input-color-default);\n font-size: 14px;\n cursor: pointer;\n\n transition:\n border var(--speed-fast) var(--easing-primary-out),\n background-color var(--speed-fast) var(--easing-primary-out),\n box-shadow var(--speed-fast) var(--easing-primary-out);\n\n ${({$fieldState}) => css`\n border: 1px solid var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-background-color);\n box-shadow: var(--input-box-shadow-x) var(--input-box-shadow-y) var(--input-box-shadow-blur) var(--input-box-shadow-spread) var(--input-${$fieldState}-shadow-color, transparent);\n `};\n\n\n ${({ $isCompact, $withIcon }) => $isCompact ? css`\n height: var(--input-compact-height);\n padding: 0 16px 1px ${$withIcon ? '30px' : '8px'};\n\n ${OpenIcon}{\n right: 14px;\n }\n ` : css`\n height: var(--input-height);\n padding: 0 16px 1px ${$withIcon ? '36px' : '12px'};\n `};\n\n &:disabled {\n opacity: 1;\n cursor: not-allowed;\n color: var(--input-disabled-color-default);\n border: 1px solid var(--input-disabled-border-color);\n background: var(--input-disabled-background-color);\n box-shadow: var(--input-box-shadow-x) var(--input-box-shadow-y) var(--input-box-shadow-blur) var(--input-box-shadow-spread) var(--input-disabled-shadow-color, transparent);\n }\n\n &::-ms-expand {\n display: none;\n }\n`;\n\nconst Container = styled.div<{ $isCompact?: boolean, $activePlaceholder: boolean }>`\n\n ${({$activePlaceholder}) => $activePlaceholder && css`\n ${StyledSelect} {\n font-family: var(--font-data);\n color: var(--input-color-placeholder);\n font-style: italic;\n &:lang(ja) {\n font-style: normal;\n }\n font-weight: 400;\n }\n `};\n\n`;\n\ninterface ILabel {\n htmlFor: string\n text: string\n isSameRow?: boolean\n direction?: TypeLabelDirection\n}\n\ninterface OwnProps {\n fieldState?: TypeFieldState\n label?: ILabel\n isCompact?: boolean\n placeholder?: string\n icon?: string\n changeCallback?: (value: string) => void\n}\n\ntype ISelect = OwnProps & SelectHTMLAttributes<HTMLSelectElement>\n\nconst SelectField: React.FC<ISelect> = ({\n fieldState = 'default',\n placeholder,\n label,\n icon,\n isCompact,\n defaultValue,\n changeCallback = () => { },\n children,\n ...props\n}) => {\n\n if(label?.isSameRow){\n console.warn('Deprecation warning: `SelectField` is deprecating `label.isSameRow`, please update this to use `label.direction` set to `row`.');\n }\n\n const [activePlaceholder, setPlaceholderStatus] = useState<boolean>(!defaultValue ? true : false);\n\n const handleOnChange = useCallback((e: React.ChangeEvent<HTMLSelectElement>) => {\n\n const { value } = e.target;\n\n setPlaceholderStatus(prev => {\n if (prev) { return false; }\n return prev;\n });\n changeCallback(value);\n }, [changeCallback]);\n\n const iconColor = useCallback(() => {\n if(props.disabled || fieldState === 'disabled'){\n return 'input-disabled-lead-icon';\n } else {\n return 'input-lead-icon';\n }\n }, [fieldState, props.disabled]);\n\n const renderSelect = useCallback((htmlFor?: string) => (\n <SelectWrapper>\n {icon && <SubjectIcon $isCompact={isCompact}><Icon icon={icon} color={iconColor()} size={isCompact ? 12 : 12 } weight='regular' /></SubjectIcon>}\n <StyledSelect\n $withIcon={ icon ? true : false }\n id={htmlFor}\n $fieldState={fieldState}\n $isCompact={isCompact}\n {...props}\n defaultValue={defaultValue ? defaultValue : ''}\n onChange={handleOnChange}\n >\n <>\n {!defaultValue && <option value='' disabled hidden>{placeholder}</option>}\n {children}\n </>\n </StyledSelect>\n <OpenIcon $isCompact={isCompact}><Icon icon='Down' color={iconColor()} weight='regular' size={isCompact ? 8 : 10 } /></OpenIcon>\n </SelectWrapper>\n ), [children, defaultValue, handleOnChange, placeholder, props, fieldState, icon, iconColor, isCompact]);\n\n return (\n <Container {...{ $isCompact: isCompact, $activePlaceholder: activePlaceholder }}>\n {label\n ? (\n <Label htmlFor={label.htmlFor} labelText={label.text} direction={ label.isSameRow ? 'row' : label.direction }>\n {renderSelect(label.htmlFor)}\n </Label>\n )\n : renderSelect()}\n </Container>\n );\n};\n\nexport default SelectField;","import { isEqual } from 'date-fns';\nimport { ITimeUnit } from '..';\nimport { IDateInterval } from '../Filters';\n\nconst isInsideRange = (value: number, min: number, max: number) : boolean => {\n if( value < min) {return false;}\n if(value > max) { return false;}\n return true;\n};\n\n// verifies if a number is inside a boundary if not updates it's value to the max or min boundary value.\nconst clamp = (value: number, minValue: number, maxValue: number) => {\n return Math.min( Math.max(value, minValue), maxValue);\n};\n\n/**\n * Helper for adding appropriate text to a time number\n * Default is hours\n */\nconst getTextTimeUnit = (value: number, unit : ITimeUnit) => {\n switch (unit) {\n case 'seconds':\n return value < 2 ? `Second` : `Seconds`;\n\n case 'minutes':\n return value < 2 ? `Minute` : `Minutes`;\n\n default:\n return value < 2 ? `Hour` : `Hours`;\n }\n};\n\n/**\n * Helper for adding appropriate text to a time number\n * Default is hours\n */\nconst getShortTextTimeUnit = (value: number, unit : string) => {\n switch (unit) {\n case 'seconds':\n return value < 2 ? `sec` : `secs`;\n\n case 'minutes':\n return value < 2 ? `min` : `mins`;\n\n default:\n return value < 2 ? `hr` : `hrs`;\n }\n};\n\nexport const isTimeUnit = (value: any) => {\n switch(value) {\n case 'seconds':\n case 'minutes':\n case 'hours':\n return true;\n default:\n return false;\n }\n};\n\nconst getTopLevelPath = (pathname: string) => {\n const parts = pathname.split('/').filter(String);\n return parts.length > 0 ? \"/\" + parts[0] : \"/\";\n};\n\nconst getImageType = (img: HTMLImageElement) => {\n const dataType = img.src.substr(0, 20);\n if (dataType.includes('data')) {\n return dataType.split('/')[1].split(';')[0];\n }\n return 'image/jpeg';\n};\n\nconst isValidImage = (file: File) => {\n const acceptedImageTypes = ['image/jpeg', 'image/png'];\n\n return file && acceptedImageTypes.includes(file['type']);\n};\n\nconst uniqueID = () =>\n String(\n Date.now().toString(32) +\n Math.random().toString(16)\n ).replace(/\\./g, '');\n\n\n // https://stackoverflow.com/questions/30314447/how-do-you-test-for-nan-in-javascript\n const isNotNumber = (value: string) => {\n const intValue = Number(value);\n\n return intValue !== intValue;\n };\n\n const areDatesEqual = (storedValue: IDateInterval | Date | null | undefined, currentDisplay: IDateInterval | Date | null): boolean => {\n if (storedValue === null && currentDisplay === null) {\n return true;\n }\n\n if (storedValue === undefined && currentDisplay === null) {\n return true;\n }\n\n if (isDateInterval(storedValue) && isDateInterval(currentDisplay)) {\n return isEqual(storedValue?.start, currentDisplay?.start) && isEqual(storedValue?.end, currentDisplay?.end);\n }\n\n if(storedValue instanceof Date && currentDisplay instanceof Date) {\n return isEqual(storedValue, currentDisplay);\n }\n\n return false;\n };\n\n\n const isDateInterval = (value: any): value is IDateInterval => {\n if (value === null || value === undefined) {\n return false;\n }\n \n if (value.start === null || value.start === undefined) {\n return false;\n }\n \n if (value.end === null || value.end === undefined) {\n return false;\n }\n \n return (value.start instanceof Date) && (value.end instanceof Date);\n };\n\nexport {\n clamp,\n isValidImage,\n isDateInterval,\n getImageType,\n getTextTimeUnit,\n isInsideRange,\n getShortTextTimeUnit,\n getTopLevelPath,\n uniqueID,\n isNotNumber,\n areDatesEqual\n};","import React, {\n InputHTMLAttributes,\n useState,\n useCallback,\n ChangeEvent,\n Fragment,\n useRef,\n useEffect,\n} from 'react';\nimport styled, {css} from 'styled-components';\nimport {IFeedbackColor} from '../../index';\nimport {\n isInsideRange,\n} from '../../helpers';\n\n/**\n * TODO to support all input range features\n * Currently you can pass this values but to be visually correct the needs to work around the current implementation.\n * Step\n * Vertical usage\n */\n\nconst ThumbDiameter = 16;\n\nconst SliderWrapper = styled.div<{$disabled: boolean}>`\n font-family: ${({ theme }) => theme.fontFamily.data};\n position: relative;\n height: 30px;\n margin-top: 20px;\n ${({$disabled}) => $disabled && css`\n opacity: .5;\n `};\n`;\n\nconst HiddenInput = styled.input<{disabled:boolean}>`\n width: 100%;\n margin: 0;\n padding:0;\n opacity: .001;\n z-index: 99;\n cursor: ${({disabled}) => disabled ? `not-allowed` : `pointer`};\n`;\n\nconst Rail = styled.div`\n position: absolute;\n left: ${ThumbDiameter/2}px;\n top: 10px;\n width: calc(100% - ${ThumbDiameter}px);\n height: 2px;\n border-radius: 11px;\n background-image: linear-gradient(to bottom, var(--grey-10), var(--primary-10) 98%);\n`;\n\nconst Mark = styled.span<{$leftValue: number}>`\n position: absolute;\n top: -3px;\n left: ${({$leftValue}) => `calc(${$leftValue}% + 7px)`};\n width: 1px;\n height: 9px;\n opacity: 0.25;\n background-color: var(--primary-11);\n`;\n\nconst MarkLabel = styled.span<{$leftValue: number, $alignment?: IMarkAlignment}>`\n position: absolute;\n top: -24px;\n left: ${({$leftValue}) => `calc(${$leftValue}% + 7px)`};\n\n font-size: 10px;\n font-style: italic;\n &:lang(ja) {\n font-style: normal;\n }\n line-height: normal;\n text-align: center;\n color: var(--grey-a11);\n\n ${({$alignment}) => ($alignment === 'center') && css`transform: translateX(-50%);;`}\n ${({$alignment}) => ($alignment === 'right') && css`transform: translateX(5%);`}\n ${({$alignment}) => ($alignment === 'left') && css`transform: translateX(-95%);`}\n`;\n\nconst ThumbWrapper = styled.div`\n position: relative;\n margin-right: 16px;\n left: 0;\n top: 10px;\n width: calc(100% - ${ThumbDiameter}px);\n height: 2px;\n`;\n\nconst Thumb = styled.span<{$leftValue: number, $bgColor: IFeedbackColor }>`\n width: ${ThumbDiameter}px;\n height: ${ThumbDiameter}px;\n border-radius: 8px;\n background-color: ${({theme, $bgColor}) => theme.colors.feedback[$bgColor]};\n position: absolute;\n top: -7.5px;\n left: ${({$leftValue}) => `${$leftValue}%`};\n`;\n\nconst GhostThumb = styled(Thumb)`\n opacity: .5;\n`;\n\nconst thumbLeftPosition = (value: number, min: number, max: number ) => {\n return valueToPercent(value, min, max);\n};\n\nconst nearMark = (value: number, marks: ISliderMark[]) : number => {\n\n const closest = marks.reduce((prev, curr) => {\n return (Math.abs(curr.value - value) < Math.abs(prev.value - value) ? curr : prev);\n });\n\n return closest.value;\n};\n\n/**\n * Rules for a getValidMin\n * Max needs to be bigger than Min\n * if Min is not available and Max is positive default is 0\n * if Min is not available Max is negative min will be reduce by 1\n */\nconst getValidMin = (max: number, min?: number) : number => {\n\n if((!max) && (!min)) {\n return 0;\n }\n\n if(!min) {\n if(max > 0) {\n return 0;\n }else {\n return max - 1 ;\n }\n }\n return min;\n};\n\n/**\n *\n * Max is required but null because it cans o.O\n * if Max is less value than min fix to one more than min\n */\nconst getValidMax = (max: number, min?: number) : number => {\n if((max === null) && (!min)) {\n return 100;\n }\n\n if(min && (min > max) ) {\n return min + 1;\n }\n\n return max;\n};\n\nconst valueToPercent = (value: number, min: number, max: number) : number => {\n return Math.round(((value - min) * 100) / (max - min));\n};\n\n// const percentToValue = (percent: number, min: number, max: number) : number => {\n// return (max - min) * percent + min;\n// };\n\n\nconst getMarkAlignment = (value: number, min: number, max: number) : IMarkAlignment => {\n if(value === min) {\n return 'right';\n }\n\n if(value === max) {\n return 'left';\n }\n\n return 'center';\n};\n\nconst renderMarks = (markList: ISliderMark[], min: number, max: number, listTag: string, allMarkCentered?: boolean) => {\n\n const listOptions : React.JSX.Element[] = [];\n const marksElements = markList.map(({value, label}, index) => {\n // * first and last should be 0% and 100%\n const left = index === (markList.length - 1) ? 100 : valueToPercent(value, min, max);\n listOptions.push(<option key={`option-${value}`}>{value}</option>);\n\n return (\n <Fragment key={`mark-${index}`}>\n <Mark\n data-leftvalue={`${left}%`}\n $leftValue={left}\n />\n <MarkLabel\n $leftValue={left}\n $alignment={allMarkCentered ? 'center' : getMarkAlignment(value, min, max)}\n >\n {label}\n </MarkLabel>\n </Fragment>\n );\n });\n\n return (\n <Fragment>\n {marksElements}\n <datalist id={listTag}>\n {listOptions}\n </datalist>\n </Fragment>\n );\n\n};\n\nexport type IMarkAlignment = 'left' | 'center' | 'right';\n\nexport interface ISliderMark {\n value: number\n label?: string\n}\n\ninterface ISliderOwnProps {\n min?: number\n max: number\n step?: number\n marks?: ISliderMark[]\n defaultValue?: number\n value?: number\n thumbColor?: IFeedbackColor\n onlyMarkSelect?: boolean\n showValue?: boolean\n inputCallback?: (value: number) => void\n onChangeCallback?: (value: number) => void\n allMarkCentered?: boolean\n}\n\nexport type ISlider = ISliderOwnProps & InputHTMLAttributes<HTMLInputElement>;\n\nlet ghostThumbValue = 0;\n\nconst SliderInput : React.FC<ISlider> = ({\n min,\n max,\n marks,\n defaultValue,\n thumbColor = 'info',\n disabled = false,\n onlyMarkSelect = false,\n inputCallback = () => {},\n onChangeCallback = () => {},\n allMarkCentered = false,\n showValue: _showValue,\n children,\n formAction,\n ...props\n}) => {\n\n const maxValid = getValidMax(max, min);\n const minValid = getValidMin(max, min);\n const initValue = (defaultValue && isInsideRange(defaultValue, minValid, maxValid)) ? defaultValue : minValid;\n\n const [selectedValue, setSelectedValue] = useState(initValue);\n const [isGhostActive, setIsGhostActive ] = useState(false);\n\n const thumbValueRef = useRef(thumbLeftPosition(selectedValue, minValid, maxValid));\n\n if(marks && onlyMarkSelect) {\n const mark = nearMark(selectedValue, marks);\n const ghostVal = thumbLeftPosition(mark, minValid, maxValid);\n ghostThumbValue = ghostVal;\n }\n\n\n const handleInputChange = useCallback((e: ChangeEvent<HTMLInputElement>, lastValue: number) => {\n const val = e.target.value;\n if(val === null) { return; }\n const numericVal = parseInt(val,10);\n\n thumbValueRef.current = thumbLeftPosition(numericVal, minValid, maxValid);\n const mark = marks ? nearMark(numericVal, marks) : numericVal;\n const prevMark = marks ? nearMark(lastValue, marks) : numericVal;\n\n if(onlyMarkSelect && (prevMark !== mark)) {\n onChangeCallback(mark);\n }\n\n if(!onlyMarkSelect) {\n onChangeCallback(numericVal);\n }\n\n setSelectedValue(prev => {\n if(numericVal === prev) { return prev; }\n return numericVal;\n });\n\n },[marks, maxValid, minValid, onChangeCallback, onlyMarkSelect]);\n\n\n const handleSelectStart = useCallback(() => {\n setIsGhostActive(true);\n }, []);\n\n const handleSelectEnd = useCallback((currentValue: number) => {\n if(onlyMarkSelect) {\n inputCallback(ghostThumbValue);\n } else {\n inputCallback(currentValue);\n }\n\n if(onlyMarkSelect) {\n thumbValueRef.current = ghostThumbValue;\n }\n\n setIsGhostActive(false);\n },[inputCallback, onlyMarkSelect]);\n\n useEffect(() => {\n const initValue = (defaultValue && isInsideRange(defaultValue, minValid, maxValid)) ? defaultValue : minValid;\n thumbValueRef.current = thumbLeftPosition(initValue, minValid, maxValid);\n setSelectedValue(initValue);\n\n }, [defaultValue, maxValid, minValid]);\n\n return(\n <SliderWrapper $disabled={disabled}>\n <Rail />\n <ThumbWrapper>\n {marks && renderMarks(marks, minValid, maxValid, `sliderList-${minValid}-${maxValid}`, allMarkCentered)}\n {isGhostActive && onlyMarkSelect\n ? (\n <GhostThumb\n data-value={selectedValue}\n $leftValue={ghostThumbValue}\n data-percentage={ghostThumbValue}\n $bgColor={thumbColor}\n />\n )\n : null}\n <Thumb\n data-value={selectedValue}\n $leftValue={thumbValueRef.current}\n data-percentage={thumbValueRef.current}\n $bgColor={thumbColor}\n />\n </ThumbWrapper>\n <HiddenInput\n {...props}\n type='range'\n disabled={disabled}\n list={`sliderList-${minValid}-${maxValid}`}\n min={minValid}\n max={maxValid}\n value={selectedValue}\n onMouseUp={() => handleSelectEnd(selectedValue)}\n onMouseDown={handleSelectStart}\n onTouchStart={() => handleSelectEnd(selectedValue)}\n onTouchEnd={handleSelectStart}\n onChange={(e) => handleInputChange(e, selectedValue)}\n />\n </SliderWrapper>\n );\n};\n\nexport default SliderInput;","import React, {useRef, useCallback, ChangeEvent, InputHTMLAttributes} from 'react';\nimport styled from 'styled-components';\nimport Button from './Button';\nimport { TypeButtonSizes, TypeButtonDesigns } from '..';\n\nconst Container = styled.div``;\nconst HiddenInput = styled.input`\n display: none;\n`;\n\ninterface OwnProps {\n text: string\n buttonSize?: TypeButtonSizes\n buttonDesign?: TypeButtonDesigns\n inputCallback: (newFiles: FileList) => void\n}\n\ntype IFileInput = OwnProps & InputHTMLAttributes<HTMLInputElement>\nconst InputFileButton : React.FC<IFileInput> = ({text, buttonDesign, buttonSize, inputCallback, children, formAction, ...props}) => {\n\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFile = useCallback(async(e: ChangeEvent<HTMLInputElement>) => {\n if (!(e.target.files && e.target.files.length > 0)) { return;}\n const newFiles : FileList = e.target.files;\n if(inputCallback) {\n inputCallback(newFiles);\n }\n e.target.value = '';\n },[inputCallback]);\n\n const forwardClick = useCallback(() => {\n if(fileInputRef.current) {\n fileInputRef.current.click();\n }\n },[]);\n\n return(\n <Container>\n <HiddenInput\n {...props}\n ref={fileInputRef}\n type='file'\n onChange={handleFile}\n />\n <Button\n style={{textAlign: 'center'}}\n onClick={forwardClick}\n design={buttonDesign}\n size={buttonSize}\n >{text}\n </Button>\n </Container>\n );\n};\n\nexport default InputFileButton;","import React, { useState, useCallback } from 'react';\nimport styled, { css } from 'styled-components';\nimport { ITimeUnit } from '../../index';\nimport SliderInput, { ISlider } from '../atoms/SliderInput';\nimport { getShortTextTimeUnit, isTimeUnit } from '../../helpers';\nimport Label from '../atoms/Label';\n\n\n/**\n * This component relies in the slider for validations\n * Since the theme of this component is time unit values\n * Marks could also be handle by it.\n * Providing quantity of marks and generating the marks array based with unit\n */\n\nconst Container = styled.div``;\nconst Headers = styled.div`\n font-size: 14px;\n color: var(--grey-10);\n display: flex;\n justify-content: space-between;\n margin-bottom: 30px;\n padding: 0 6px;\n`;\n\nconst ValueLabel = styled(Label)`\n font-family: var(--font-ui);\n margin-bottom: 0;\n`;\n\nconst unitStyle = css`\n font-family: var(--font-data);\n color: var(--grey-a11);\n font-style: italic;\n &:lang(ja) {\n font-style: normal;\n }\n font-size: 12px;\n line-height: 1.5;\n`;\n\nconst Unit = styled.div`\n ${unitStyle};\n`;\n\nconst ValueTitle = styled.div`\n display: flex;\n`;\n\nconst TitleTemplate = styled.div`\n display: flex;\n align-items: center;\n ${unitStyle};\n span {\n font-style: normal;\n }\n`;\n\nconst getTimeValues = (value: number, unit: ITimeUnit) => {\n switch (unit) {\n case 'seconds':\n return {\n hours: Math.floor(value / 3600),\n minutes: Math.floor((value % 3600) / 60),\n seconds: value % 60\n };\n case 'minutes':\n return {\n hours: Math.floor(value / 60),\n minutes: value % 60,\n seconds: 0\n };\n default:\n return {\n hours: value,\n minutes: 0,\n seconds: 0\n };\n }\n};\n\nconst getValueTitle = (value: number, timeUnit: ITimeUnit | string, timeFormat?: string) => {\n // Handle default case\n if (!timeFormat || !isTimeUnit(timeUnit)) {\n const unit = isTimeUnit(timeUnit) ? getShortTextTimeUnit(value, timeUnit) : timeUnit;\n return (\n <ValueTitle>\n <ValueLabel htmlFor='duration-slider' labelText={`${value}`} />\n <Unit>{unit}</Unit>\n </ValueTitle>\n );\n }\n\n const timeValues = getTimeValues(value, timeUnit as ITimeUnit);\n\n const updatedTitle = timeFormat\n .split(/(\\[H+\\]|\\[M+\\]|\\[S+\\])/)\n .map((part, index) => {\n switch (part) {\n case '[HH]':\n return <span key={index}>{timeValues.hours.toString().padStart(2, '0')}</span>;\n case '[H]':\n return <span key={index}>{timeValues.hours}</span>;\n case '[MM]':\n return <span key={index}>{timeValues.minutes.toString().padStart(2, '0')}</span>;\n case '[M]':\n return <span key={index}>{timeValues.minutes}</span>;\n case '[SS]':\n return <span key={index}>{timeValues.seconds.toString().padStart(2, '0')}</span>;\n case '[S]':\n return <span key={index}>{timeValues.seconds}</span>;\n default: {\n const preserveSpacesInPart = part.replace(/\\s+/g, '\\u00A0');\n return preserveSpacesInPart;\n }\n }\n });\n\n return (\n <ValueTitle>\n <TitleTemplate>{updatedTitle}</TitleTemplate>\n </ValueTitle>\n );\n};\n\ninterface IDurationSliderProps {\n title: string\n timeUnit: ITimeUnit | string\n controlledValue?: number\n timeFormat?: string // [H]Hours [M]Minutes [S]Seconds -> 4Hours 10Minutes 30Seconds // [HH]時 [MM]分 [SS]秒 -> 4時 10分 30秒\n}\n\ntype IDurationSlider = IDurationSliderProps & ISlider;\n\nconst DurationSlider: React.FC<IDurationSlider> = (\n {\n max,\n min,\n defaultValue = 0,\n title = '',\n timeUnit,\n controlledValue,\n inputCallback,\n timeFormat,\n ...props\n }\n) => {\n\n const [selectedValue, setSelectedValue] = useState(defaultValue);\n\n const handleSelectedValue = useCallback((value: number) => {\n if (inputCallback) {\n inputCallback(value);\n }\n setSelectedValue(value);\n }, [inputCallback]);\n\n const labelValue = controlledValue ? controlledValue : selectedValue;\n\n return (\n <Container>\n <Headers>\n <Label htmlFor='duration-slider' labelText={title} />\n {getValueTitle(labelValue, timeUnit, timeFormat)}\n </Headers>\n <SliderInput\n {\n ...props}\n id='duration-slider'\n max={max}\n min={min}\n defaultValue={defaultValue}\n onChangeCallback={handleSelectedValue}\n />\n </Container>\n );\n};\n\nexport default DurationSlider;","import React, {InputHTMLAttributes, useState, useCallback} from 'react';\nimport styled from 'styled-components';\nimport SliderInput, {ISliderMark} from '../atoms/SliderInput';\nimport {IFeedbackColor} from '../../index';\nimport Label from '../atoms/Label';\n\n\nconst Container = styled.div``;\nconst Headers = styled.div<{$allMarkCentered?:boolean}>`\n font-size: 14px;\n color: var(--grey-10);\n display: flex;\n justify-content: space-between;\n margin-bottom: 20px;\n ${({$allMarkCentered}) => $allMarkCentered ?\n `padding: 0;`\n :\n `padding: 0 6px;`\n };\n`;\n\nconst ValueTitle = styled(Label)`\n font-family: ${({ theme }) => theme.fontFamily.data};\n`;\n\nconst getThumbColor = (value: number) : IFeedbackColor => {\n if(value <= 10) {\n return 'error';\n }\n\n if((value > 10) && (value <= 30)) {\n return 'warning';\n }\n\n return 'success';\n};\n\nconst getTitleLevel = (value: number) : string => {\n if(value <= 10) {\n return 'Critical Level';\n }\n\n if((value > 10) && (value <= 30)) {\n return 'Warning Level';\n }\n\n return 'Safe Level';\n};\n\n\ninterface IPercentageSliderProps {\n step?: number\n marks?: ISliderMark[]\n defaultValue?: number\n value?: number\n showValue?: boolean\n inputCallback?: (value: number) => void\n updateThumbColor?: (value: number) => IFeedbackColor\n updateTitle?: (value: number) => string\n allMarkCentered?: boolean\n}\n\ntype IPercentageSlider = IPercentageSliderProps & InputHTMLAttributes<HTMLInputElement>;\n\nconst PercentageSlider: React.FC<IPercentageSlider> = (\n {\n defaultValue=0,\n // title='',\n inputCallback,\n updateThumbColor,\n updateTitle,\n showValue,\n allMarkCentered,\n ...props\n }\n ) => {\n const [selectedValue, setSelectedValue] = useState(defaultValue);\n\n const handleSelectedValue = useCallback((value: number) => {\n if(inputCallback) {\n inputCallback(value);\n }\n setSelectedValue(value);\n },[inputCallback]);\n\n return(\n <Container>\n <Headers $allMarkCentered={allMarkCentered}>\n <Label\n htmlFor='percentage-slider'\n labelText={updateTitle ? updateTitle(selectedValue) : getTitleLevel(selectedValue)}\n />\n {showValue && <ValueTitle htmlFor='percentage-slider' labelText={`${selectedValue}%`} />}\n </Headers>\n <SliderInput\n {...props}\n id='percentage-slider'\n max={100}\n min={0}\n defaultValue={defaultValue}\n showValue={showValue}\n onChangeCallback={handleSelectedValue}\n thumbColor={\n updateThumbColor\n ? updateThumbColor(selectedValue)\n : getThumbColor(selectedValue)\n }\n allMarkCentered={allMarkCentered}\n />\n </Container>\n );\n};\n\nexport default PercentageSlider;","import React, { useState, InputHTMLAttributes } from 'react';\nimport Input from '../atoms/Input';\nimport Label from '../atoms/Label';\nimport { TypeFieldState } from '..';\n\ninterface OwnProps {\n name: string\n label: string\n fieldState: TypeFieldState\n showFeedback?: boolean\n feedbackMessage?: string\n}\ntype Props = OwnProps & InputHTMLAttributes<HTMLInputElement>\n\n\nconst PasswordField : React.FC<Props> = ({ name, label, fieldState, feedbackMessage, required, children, formAction, ...props}) => {\n\n const [ showValue, setShowValue ] = useState<boolean>(false);\n const [ actionIcon, setActionIcon ] = useState<string>('PasswordHide');\n\n const actionCallback = () => {\n // Toggle show / hide and replace icon.\n const newValue : boolean = !showValue;\n\n setShowValue(newValue);\n setActionIcon(newValue ? 'PasswordShow' : 'PasswordHide');\n };\n\n return (\n <Label htmlFor={name} labelText={label} {...{required}}>\n <Input\n type={showValue ? 'text' : 'password'}\n actionCallback={actionCallback}\n actionIcon={actionIcon}\n {...{ name, fieldState, feedbackMessage, required, ...props }}\n />\n </Label>)\n ;\n\n};\n\nexport default PasswordField;\n","import React from 'react';\nimport Input, { InputProps } from '../atoms/Input';\nimport Label from '../atoms/Label';\nimport { TypeFieldState } from '..';\n\ninterface OwnProps {\n name: string\n label: string\n fieldState: TypeFieldState\n showFeedback?: boolean\n feedbackMessage?: string\n}\n\ntype Props = OwnProps & InputProps\n\n\nconst TextField : React.FC<Props> = ({ name, label, fieldState='default', feedbackMessage, required, type:_type , ...props }) => {\n return (\n <Label htmlFor={name} labelText={label} {...{required}}>\n <Input type='text' {...{fieldState, feedbackMessage, required, name, ...props }} />\n </Label>\n );\n};\n\n\nexport default TextField;","import React, { TextareaHTMLAttributes } from 'react';\nimport { TypeFieldState } from '..';\nimport Label from '../atoms/Label';\nimport TextArea from '../atoms/TextArea';\n\ninterface OwnProps {\n name: string\n label: string\n fieldState: TypeFieldState\n showFeedback?: boolean\n feedbackMessage?: string\n}\n\ntype Props = OwnProps & TextareaHTMLAttributes<HTMLTextAreaElement>\n\nconst TextAreaField : React.FC<Props> = ({\n name,\n label,\n fieldState='default',\n feedbackMessage,\n required = false,\n children,\n ...props\n}) => {\n return(\n <Label htmlFor={name} labelText={label} {...{required}}>\n <TextArea {...{ fieldState, feedbackMessage, name, required, ...props }} />\n </Label>\n );\n};\n\nexport default TextAreaField;","import React, { useState, useCallback, useEffect} from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div<{$height?: string}>`\n ${({$height}) => $height ? `height: ${$height}` : null};\n position: relative;\n`;\n\nconst DragAndDrop = styled.div<{$inDropZone: boolean}>`\n border-radius: 5px;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: ${({$inDropZone}) => $inDropZone ? `dashed var(--grey-8) 2px` : null};\n`;\n\ninterface IDropArea {\n height?: string\n text?: string\n dropCallback?: (newFiles: FileList) => void\n}\n\nconst DropArea : React.FC<IDropArea> = ({height, text, dropCallback, ...props}) => {\n const [inDropZone, setInDropZone] = useState(false);\n\nconst onDragEnter = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n setInDropZone(true);\n},[]);\n\nconst onDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n setInDropZone(false);\n},[]);\n\nconst onDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n},[]);\n\nconst onDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if(e.dataTransfer?.files && dropCallback) {\n dropCallback(e.dataTransfer.files);\n }\n setInDropZone(false);\n},[dropCallback]);\n\nconst handleWindowDragAndDrop = useCallback((e: Event) => {\n e.preventDefault();\n}, []);\n\nuseEffect(() => {\n window.addEventListener(\"dragover\", handleWindowDragAndDrop);\n window.addEventListener(\"drop\", handleWindowDragAndDrop);\n return () => {\n window.removeEventListener('dragover', handleWindowDragAndDrop);\n window.removeEventListener('drop', handleWindowDragAndDrop);\n };\n}, [handleWindowDragAndDrop]);\n\n return(\n <Container $height={height} {...props}>\n <DragAndDrop\n $inDropZone={inDropZone}\n {...{\n onDragEnter,\n onDragLeave,\n onDrop,\n onDragOver\n }}\n >\n {text}\n </DragAndDrop>\n </Container>\n );\n};\n\nexport default DropArea;","import { clamp } from './index';\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/cursor //\ntype ICursorStyles = (\n 'ne-resize'\n | 'nw-resize'\n | 'n-resize'\n | 'se-resize'\n | 'sw-resize'\n | 's-resize'\n | 'e-resize'\n | 'w-resize'\n | 'move'\n | 'default'\n);\n\nconst updateCursorStyle = (\n left: number,\n top: number,\n width: number,\n height: number,\n clientX: number,\n clientY: number\n): ICursorStyles => {\n let cursorStyle: ICursorStyles = 'default';\n\n if (clientY - top < 5) {\n if (width - (clientX - left) < 5) {\n cursorStyle = 'ne-resize';\n } else if (clientX - left < 5) {\n cursorStyle = 'nw-resize';\n } else {\n cursorStyle = 'n-resize';\n }\n } else if (height - (clientY - top) < 5) {\n if (width - (clientX - left) < 5) {\n cursorStyle = 'se-resize';\n } else if (clientX - left < 5) {\n cursorStyle = 'sw-resize';\n } else {\n cursorStyle = 's-resize';\n }\n } else if (width - (clientX - left) < 5) {\n cursorStyle = 'e-resize';\n } else if (clientX - left < 5) {\n cursorStyle = 'w-resize';\n } else {\n cursorStyle = 'move';\n }\n\n return cursorStyle;\n};\n\nconst drawImgValues = (img: HTMLImageElement, canvasHeight: number, canvasWidth: number): IDrawArea => {\n\n const scale = Math.min(\n canvasWidth / img.naturalWidth,\n canvasHeight / img.naturalHeight\n );\n\n const width = Math.floor(img.naturalWidth * scale);\n const height = Math.floor(img.naturalHeight * scale);\n const top = 0 + Math.floor((canvasHeight - height) / 2);\n const left = 0 + Math.floor((canvasWidth - width) / 2);\n\n const imageDraw: IDrawArea = {\n left,\n top,\n width,\n height,\n };\n\n return imageDraw;\n};\n\n\nconst calculateAspectSizes = (baseHeight: number, baseWidth: number, aspectRatio: number) => {\n const aspect = aspectRatio ? aspectRatio : 1;\n let height, width;\n\n if (baseWidth > (baseHeight * aspect)) {\n width = Math.floor(baseHeight * aspect);\n height = baseHeight;\n } else {\n width = baseWidth;\n height = Math.floor(baseWidth / aspect);\n }\n\n return {\n height,\n width\n };\n};\n\nconst initialCropValues = (\n cropWidth: number,\n cropHeight: number,\n canvasWidth: number,\n canvasHeight: number,\n imgWidth: number,\n imgHeight: number,\n aspectRatio?: number,\n) => {\n\n let height, width;\n const aspect = aspectRatio ? aspectRatio : 1;\n const minWidth = Math.min(cropWidth, canvasWidth, imgWidth);\n const minHeight = Math.min(cropHeight, canvasHeight, imgHeight);\n\n if (minWidth > (minHeight * aspect)) {\n width = Math.floor(minHeight * aspect);\n height = minHeight;\n } else {\n width = minWidth;\n height = Math.floor(minWidth / aspect);\n }\n\n const top = 0 + Math.floor((canvasHeight / 2) - (height / 2));\n const left = 0 + Math.floor((canvasWidth / 2) - (width / 2));\n\n return {\n left,\n top,\n width,\n height,\n };\n};\n\nconst isLeftMouseButton = (e: MouseEvent) => {\n\n let mouseButton;\n if (typeof (e.buttons) !== 'undefined') {\n mouseButton = e.buttons;\n } else if (typeof (e.button) !== 'undefined') {\n mouseButton = e.button;\n } else {\n mouseButton = e.which;\n }\n\n if (mouseButton === 1) {\n return true;\n }\n\n return false;\n};\n\ninterface ISelectedArea {\n cropLeft: number\n cropTop: number\n cropWidth: number\n cropHeight: number\n mouseStartX: number\n mouseStartY: number\n imgLeft: number\n imgTop: number\n imgWidth: number\n imgHeight: number\n cursorStart: ICursorStyles\n isResizing: boolean\n}\n\nconst updateCropValues = (\n oldSelection: ISelectedArea,\n newX: number,\n newY: number,\n) => {\n\n let [updatedLeft, updatedTop, updatedWidth, updatedHeight] =\n [oldSelection.cropLeft, oldSelection.cropTop, oldSelection.cropWidth, oldSelection.cropHeight];\n\n const diffX = newX - oldSelection.mouseStartX;\n const diffY = newY - oldSelection.mouseStartY;\n\n switch (oldSelection.cursorStart) {\n case 'ne-resize':\n updatedTop = oldSelection.cropTop + diffY;\n updatedHeight = oldSelection.cropHeight - diffY;\n updatedWidth = oldSelection.cropWidth + diffX;\n\n break;\n\n case 'nw-resize':\n updatedTop = oldSelection.cropTop + diffY;\n updatedLeft = oldSelection.cropLeft + diffX;\n updatedHeight = oldSelection.cropHeight - diffY;\n updatedWidth = oldSelection.cropWidth - diffX;\n break;\n\n case 'n-resize':\n updatedTop = oldSelection.cropTop + diffY;\n updatedHeight = oldSelection.cropHeight - diffY;\n break;\n\n case 'se-resize':\n updatedHeight = oldSelection.cropHeight + diffY;\n updatedWidth = oldSelection.cropWidth + diffX;\n break;\n\n case 'sw-resize':\n updatedLeft = oldSelection.cropLeft + diffX;\n updatedHeight = oldSelection.cropHeight + diffY;\n updatedWidth = oldSelection.cropWidth - diffX;\n break;\n\n case 's-resize':\n updatedHeight = oldSelection.cropHeight + diffY;\n break;\n\n case 'e-resize':\n updatedWidth = oldSelection.cropWidth + diffX;\n break;\n\n case 'w-resize':\n updatedLeft = oldSelection.cropLeft + diffX;\n updatedWidth = oldSelection.cropWidth - diffX;\n break;\n\n case 'move':\n updatedTop = oldSelection.cropTop + diffY;\n updatedLeft = oldSelection.cropLeft + diffX;\n break;\n\n default:\n break;\n }\n\n const width = clamp(updatedWidth, 0, oldSelection.imgWidth);\n const height = clamp(updatedHeight, 0, oldSelection.imgHeight);\n const left = clamp(updatedLeft, oldSelection.imgLeft, (oldSelection.imgWidth - oldSelection.cropWidth + oldSelection.imgLeft));\n const top = clamp(updatedTop, oldSelection.imgTop, (oldSelection.imgHeight - oldSelection.cropHeight + oldSelection.imgTop));\n\n const isUpdateRequired = areDimensionsDiff(oldSelection, {left, top, height, width});\n\n return {\n left,\n top,\n width,\n height,\n isUpdateRequired,\n };\n};\n\nconst updateCropWithAspect = (\n oldSelection: ISelectedArea,\n newX: number,\n newY: number,\n aspectRatio?: number,\n) => {\n\n const aspect = aspectRatio ? aspectRatio : 1;\n let [updatedLeft, updatedTop, updatedWidth, updatedHeight] =\n [oldSelection.cropLeft, oldSelection.cropTop, oldSelection.cropWidth, oldSelection.cropHeight];\n\n const diffX = newX - oldSelection.mouseStartX;\n const diffY = newY - oldSelection.mouseStartY;\n\n switch (oldSelection.cursorStart) {\n case 'ne-resize':\n updatedTop = oldSelection.cropTop + diffY;\n updatedHeight = oldSelection.cropHeight - diffY;\n updatedWidth = Math.floor(updatedHeight * aspect);\n\n break;\n\n case 'nw-resize':\n updatedTop = oldSelection.cropTop + diffY;\n updatedLeft = oldSelection.cropLeft + (diffY * aspect);\n updatedHeight = oldSelection.cropHeight - diffY;\n updatedWidth = Math.floor(updatedHeight * aspect);\n break;\n\n case 'se-resize':\n updatedHeight = oldSelection.cropHeight + diffY;\n updatedWidth = Math.floor(updatedHeight * aspect);\n break;\n\n case 'sw-resize':\n updatedLeft = oldSelection.cropLeft + diffX;\n updatedWidth = oldSelection.cropWidth - diffX;\n updatedHeight = Math.floor(updatedWidth / aspect);\n break;\n\n case 'move':\n updatedTop = oldSelection.cropTop + diffY;\n updatedLeft = oldSelection.cropLeft + diffX;\n break;\n\n default:\n break;\n }\n\n /**img values only change if the image is updated */\n\n const imgBoundLeft = clamp(updatedLeft, oldSelection.imgLeft, (oldSelection.imgWidth - oldSelection.cropWidth + oldSelection.imgLeft));\n const imgBoundTop = clamp(updatedTop, oldSelection.imgTop, (oldSelection.imgHeight - oldSelection.cropHeight + oldSelection.imgTop));\n const imgBoundWidth = clamp(updatedWidth, 0, oldSelection.imgWidth);\n const imgBoundHeight = clamp(updatedHeight, 0, oldSelection.imgHeight);\n\n\n let left = imgBoundLeft;\n let top = imgBoundTop;\n let width = imgBoundWidth;\n let height = imgBoundHeight;\n\n if ((oldSelection.cursorStart !== 'move') && (imgBoundWidth === oldSelection.imgWidth)) {\n height = oldSelection.cropHeight;\n top = oldSelection.cropTop;\n }\n\n if ((oldSelection.cursorStart !== 'move') && (imgBoundHeight === oldSelection.imgHeight)) {\n width = oldSelection.cropWidth;\n left = oldSelection.cropLeft;\n }\n\n const isUpdateRequired = areDimensionsDiff(oldSelection, {left, top, height, width});\n\n return {\n left,\n top,\n width,\n height,\n isUpdateRequired,\n };\n};\n\ninterface IDrawArea {\n left: number\n top: number\n width: number\n height: number\n}\n\nconst areDimensionsDiff = (oldDimensions: ISelectedArea, newValues: IDrawArea) => {\n let isDifferent = false;\n\n if(oldDimensions.cropLeft !== newValues.left) {\n isDifferent = true;\n }\n\n if(oldDimensions.cropTop !== newValues.top) {\n isDifferent = true;\n }\n\n if(oldDimensions.cropHeight !== newValues.height) {\n isDifferent = true;\n }\n\n if(oldDimensions.cropWidth !== newValues.width) {\n isDifferent = true;\n }\n\n return isDifferent;\n};\n\nexport type {\n ICursorStyles,\n IDrawArea,\n ISelectedArea,\n};\n\nexport {\n initialCropValues,\n drawImgValues,\n updateCursorStyle,\n isLeftMouseButton,\n updateCropValues,\n updateCropWithAspect,\n calculateAspectSizes,\n};","import React, { Fragment } from 'react';\nimport styled, { css } from 'styled-components';\n\nconst CropLineStyle = css`\n position: absolute;\n display: block;\n opacity: 0.1;\n`;\nconst TopLine = styled.div`\n ${CropLineStyle};\n cursor: n-resize;\n width: 100%;\n height: 5px;\n left: 0;\n top: -3px;\n`;\n\nconst RightLine = styled.div`\n ${CropLineStyle};\n cursor: e-resize;\n right: -3px;\n top: 0;\n width: 5px;\n height: 100%;\n`;\n\nconst BottomLine = styled.div`\n ${CropLineStyle}\n cursor: s-resize;\n bottom: -3px;\n height: 5px;\n width: 100%;\n left: 0;\n`;\n\nconst LeftLine = styled.div`\n ${CropLineStyle};\n cursor: w-resize;\n left: -3px;\n top: 0;\n width: 5px;\n height: 100%;\n`;\n\nconst resizeSquaresCss = css`\n position: absolute;\n width: 10px;\n height: 10px;\n border: solid 1px var(--black-a12);\n background-color: var(--white-1);\n`;\n\nconst PointN = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n top: -5px;\n margin-left: -5px;\n left: 50%;\n ${({ $isResizable }) => $isResizable && css`\n cursor: n-resize;\n `};\n`;\nconst PointNW = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n top: -5px;\n left: -5px;\n ${({ $isResizable }) => $isResizable && css`\n cursor: nw-resize;\n `};\n`;\n\nconst PointNE = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n top: -5px;\n right: -5px;\n ${({ $isResizable }) => $isResizable && css`\n cursor: ne-resize;\n `};\n`;\nconst PointE = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n margin-top: -5px;\n top: 50%;\n right: -5px;\n ${({ $isResizable }) => $isResizable && css`\n cursor: e-resize;\n `};\n`;\nconst PointSE = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n bottom: -5px;\n right: -5px;\n ${({ $isResizable }) => $isResizable && css`\n cursor: se-resize;\n `};\n`;\nconst PointS = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n bottom: -5px;\n left: 50%;\n margin-left: -5px;\n ${({ $isResizable }) => $isResizable && css`\n cursor: s-resize;\n `};\n`;\nconst PointSW = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n bottom: -5px;\n left: -5px;\n ${({ $isResizable }) => $isResizable && css`\n cursor: sw-resize;\n `};\n`;\nconst PointW = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n margin-top: -5px;\n top: 50%;\n left: -5px;\n ${({ $isResizable }) => $isResizable && css`\n cursor: w-resize;\n `};\n`;\n\ninterface ICropArea {\n isResizable: boolean\n hasAspectRatio: boolean\n}\n\nconst CropArea: React.FC<ICropArea> = ({\n isResizable,\n hasAspectRatio\n}) => {\n\n return (\n <Fragment>\n {(isResizable && (!hasAspectRatio)) ? (\n <Fragment>\n {/* This lines are just for cursor css */}\n <TopLine />\n <RightLine />\n <BottomLine />\n <LeftLine />\n </Fragment>)\n : null}\n\n {hasAspectRatio ? null\n : (\n <Fragment>\n <PointN data-point='cursor-n' $isResizable={isResizable} />\n <PointE data-point='cursor-e' $isResizable={isResizable} />\n <PointS data-point='cursor-s' $isResizable={isResizable} />\n <PointW data-point='cursor-w' $isResizable={isResizable} />\n </Fragment>\n )}\n\n\n <PointNW data-point='cursor-nw' $isResizable={isResizable} />\n <PointNE data-point='cursor-ne' $isResizable={isResizable} />\n <PointSE data-point='cursor-se' $isResizable={isResizable} />\n <PointSW data-point='cursor-sw' $isResizable={isResizable} />\n </Fragment>\n );\n};\n\nexport default CropArea;","import React, { useState, useCallback, useRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport ReactDom from 'react-dom';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport Button from '../atoms/Button';\nimport ButtonWithLoading from '../atoms/ButtonWithLoading';\nimport {\n ICursorStyles,\n IDrawArea,\n ISelectedArea,\n updateCursorStyle,\n isLeftMouseButton,\n updateCropValues,\n drawImgValues,\n initialCropValues,\n updateCropWithAspect,\n} from '../../helpers/cropToolHelpers';\nimport { getImageType } from '../../helpers';\nimport CropArea from '../atoms/CropArea';\n\n// TODO: Add throttle or window.requestAnimationFrame()//\nconst Container = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--grey-3);\n -webkit-backdrop-filter: blur(5px);\n backdrop-filter: blur(5px);\n font-family: ${({ theme }) => theme.fontFamily.ui};\n z-index: 999;\n`;\n\nconst InnerContainer = styled.div`\n position: relative;\n z-index: 99;\n`;\n\nconst ToolHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 17px;\n`;\n\nconst TextGroup = styled.div`\n display: flex;\n align-items: center;\n font-size: 20px;\n font-weight: 500;\n color: var(--mono);\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n margin-right: 14px;\n }\n`;\n\nconst ButtonsGroup = styled.div`\n button + button {\n margin-left: 10px;\n }\n`;\n\nconst PreviewArea = styled.div<{ $canvasHeight?: number, $canvasWidth?: number }>`\n position: relative;\n overflow: hidden;\n height: ${({ $canvasHeight }) => $canvasHeight ? `${$canvasHeight}px` : `462px`};\n width: ${({ $canvasWidth }) => $canvasWidth ? `${$canvasWidth}px` : `485px`};\n border-radius: 5px;\n background-color: var(--grey-3);\n background-image: repeating-linear-gradient(45deg, transparent, transparent 35px, var(--white-a10) 35px, var(--white-a10) 70px);\n`;\n\nconst HiddenImage = styled.img`\n display: none;\n`;\n\nconst SelectedArea = styled.div<{ $cropLeft: number, $cropTop: number, $cropWidth: number, $cropHeight: number }>`\n position: absolute;\n border: dashed 1px var(--black-a12);\n box-shadow: 0 0 0 9999em var(--black-a11);\n ${({ $cropLeft, $cropTop, $cropWidth, $cropHeight }) => css`\n top: ${$cropTop}px;\n left: ${$cropLeft}px;\n width: ${$cropWidth}px;\n height: ${$cropHeight}px;\n `};\n cursor: move;\n`;\n\nconst viewDimensions: ISelectedArea = {\n cropLeft: 0,\n cropTop: 0,\n cropWidth: 350,\n cropHeight: 300,\n mouseStartX: 0,\n mouseStartY: 0,\n imgLeft: 0,\n imgTop: 0,\n imgWidth: 400,\n imgHeight: 400,\n cursorStart: 'default',\n isResizing: false,\n};\n\ninterface ICrop {\n title?: string\n cancelBtnTxt?: string\n cropBtnTxt?: string\n imgUrl: string\n isResizable?: boolean\n cropHeight?: number\n cropWidth?: number\n canvasHeight: number\n canvasWidth: number\n aspectRatio?: number\n onCrop?: (newFileUrl: string, fileType: string) => void\n onClose?: () => void\n onError?: (msg: string) => void\n}\n\nconst CropTool: React.FC<ICrop> = ({\n title = 'Crop Image',\n cancelBtnTxt = 'Cancel',\n cropBtnTxt = 'Crop & Save',\n isResizable = true,\n cropHeight = 300,\n cropWidth = 350,\n canvasHeight = 400,\n canvasWidth = 450,\n aspectRatio,\n imgUrl,\n onCrop,\n onClose = () => { },\n onError = () => { }\n}) => {\n\n const [isLoading, setIsLoading] = useState(false);\n const [_loadDimensions, setLoadDimensions] = useState(viewDimensions);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const imgRef = useRef<HTMLImageElement>(null);\n const cropRef = useRef<HTMLDivElement | null>(null);\n\n const drawImgOnCanvas = useCallback(() => {\n if (!canvasRef || !imgRef) { return; }\n const newImage = imgRef.current;\n if (!newImage) {\n onError('error loading image');\n return;\n }\n const canvas = canvasRef.current;\n if (!canvas) {\n onError('error loading canvas');\n return;\n }\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n onError('error drawing image');\n return;\n }\n\n const newImgDraw = drawImgValues(newImage, canvasHeight, canvasWidth);\n ctx?.drawImage(newImage, newImgDraw.left, newImgDraw.top, newImgDraw.width, newImgDraw.height);\n const newCrop: IDrawArea = initialCropValues(\n cropWidth,\n cropHeight,\n canvasWidth,\n canvasHeight,\n newImgDraw.width,\n newImgDraw.height,\n aspectRatio\n );\n // triggers a render to repaint canvas\n setLoadDimensions((prevState) =>\n ({\n ...prevState,\n cropLeft: newCrop.left,\n cropTop: newCrop.top,\n cropWidth: newCrop.width,\n cropHeight: newCrop.height,\n imgLeft: newImgDraw.left,\n imgTop: newImgDraw.top,\n imgWidth: newImgDraw.width,\n imgHeight: newImgDraw.height,\n })\n );\n\n viewDimensions.cropLeft = newCrop.left;\n viewDimensions.cropTop = newCrop.top;\n viewDimensions.cropWidth = newCrop.width;\n viewDimensions.cropHeight = newCrop.height;\n viewDimensions.imgLeft = newImgDraw.left;\n viewDimensions.imgTop = newImgDraw.top;\n viewDimensions.imgWidth = newImgDraw.width;\n viewDimensions.imgHeight = newImgDraw.height;\n viewDimensions.cursorStart = 'default';\n viewDimensions.isResizing = false;\n setIsLoading(false);\n }, [aspectRatio, canvasHeight, canvasWidth, cropHeight, cropWidth, onError]);\n\n // Mouse handlers //\n const handleCrop = useCallback(async (cropArea: IDrawArea) => {\n setIsLoading(true);\n if (!canvasRef || !canvasRef.current || !imgRef) { return; }\n\n const newImage = imgRef.current;\n if (!newImage) { return; }\n\n const canvas = canvasRef.current;\n if (!canvas) { return; }\n\n const ctx = canvas.getContext(\"2d\");\n // ctx.imageSmoothingEnabled = false; </// not sure required\n const cropImageData = ctx?.getImageData(cropArea.left, cropArea.top, cropArea.width, cropArea.height);\n if (!cropImageData) { return; }\n\n const canvasCropped = document.createElement('canvas');\n const cropContext = canvasCropped.getContext('2d');\n canvasCropped.width = cropArea.width;\n canvasCropped.height = cropArea.height;\n\n cropContext?.putImageData(cropImageData, 0, 0);\n const imgType = getImageType(newImage);\n const newImgUrl = canvasCropped.toDataURL(imgType);\n if (onCrop) {\n onCrop(newImgUrl, imgType);\n }\n }, [onCrop]);\n\n const handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (!cropRef) { return; }\n if (!isLeftMouseButton(e.nativeEvent)) { return; }\n\n const rect = cropRef.current?.getBoundingClientRect();\n if (!rect) { return; }\n const { left, top, width, height } = rect;\n const [posX, posY] = [e.clientX, e.clientY];\n let newCursorStyle: ICursorStyles;\n if (!isResizable) {\n newCursorStyle = 'move';\n } else {\n newCursorStyle = updateCursorStyle(left, top, width, height, posX, posY);\n }\n\n viewDimensions.mouseStartX = posX;\n viewDimensions.mouseStartY = posY;\n viewDimensions.cursorStart = newCursorStyle;\n viewDimensions.isResizing = true;\n }, [isResizable]);\n\n const handleMouseUp = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (!viewDimensions.isResizing) { return; }\n viewDimensions.isResizing = false;\n }, []);\n\n const updateSelect = useCallback((left: number, top: number, width: number, height: number) => {\n if (!cropRef.current) { return; }\n cropRef.current.style.left = `${left}px`;\n cropRef.current.style.top = `${top}px`;\n cropRef.current.style.width = `${width}px`;\n cropRef.current.style.height = `${height}px`;\n\n }, []);\n\n const handleMouseMove = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (!cropRef) { return; }\n if (!viewDimensions.isResizing) { return; }\n\n const rect = cropRef.current?.getBoundingClientRect();\n if (!rect) { return; }\n\n const [posX, posY] = [e.clientX, e.clientY];\n const newDimensions = aspectRatio\n ? updateCropWithAspect(viewDimensions, posX, posY, aspectRatio)\n : updateCropValues(viewDimensions, posX, posY);\n\n if (!newDimensions.isUpdateRequired) { return; }\n\n viewDimensions.cropTop = newDimensions.top;\n viewDimensions.cropLeft = newDimensions.left;\n viewDimensions.cropWidth = newDimensions.width;\n viewDimensions.cropHeight = newDimensions.height;\n viewDimensions.mouseStartX = posX;\n viewDimensions.mouseStartY = posY;\n\n updateSelect(viewDimensions.cropLeft,\n viewDimensions.cropTop,\n viewDimensions.cropWidth,\n viewDimensions.cropHeight);\n\n }, [aspectRatio, updateSelect]);\n\n const handleOnMouseLeave = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (!viewDimensions.isResizing) { return; }\n viewDimensions.isResizing = false;\n }, []);\n //End of Mouse handlers//\n\n return (\n ReactDom.createPortal(\n <Container>\n <InnerContainer>\n <ToolHeader>\n <TextGroup>\n <Icon icon='Crop' size={20} color='mono' />\n {title}\n </TextGroup>\n <ButtonsGroup>\n <Button\n design='secondary'\n size='small'\n onClick={onClose}\n >\n {cancelBtnTxt}\n </Button>\n <ButtonWithLoading\n loading={isLoading}\n size='small'\n onClick={() => handleCrop({\n left: viewDimensions.cropLeft,\n top: viewDimensions.cropTop,\n width: viewDimensions.cropWidth,\n height: viewDimensions.cropHeight\n })}\n > {cropBtnTxt}\n </ButtonWithLoading>\n </ButtonsGroup>\n </ToolHeader>\n <PreviewArea\n $canvasHeight={canvasHeight}\n $canvasWidth={canvasWidth}\n onMouseUp={handleMouseUp}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleOnMouseLeave}\n >\n <HiddenImage ref={imgRef} src={imgUrl} onLoad={drawImgOnCanvas} crossOrigin='anonymous' />\n <canvas\n ref={canvasRef}\n width={`${canvasWidth}px`}\n height={`${canvasHeight}px`}\n />\n <SelectedArea\n ref={cropRef}\n onMouseDown={handleMouseDown}\n $cropLeft={viewDimensions.cropLeft}\n $cropTop={viewDimensions.cropTop}\n $cropWidth={viewDimensions.cropWidth}\n $cropHeight={viewDimensions.cropHeight}\n >\n <CropArea\n {...{ isResizable }}\n hasAspectRatio={aspectRatio ? true : false}\n />\n </SelectedArea>\n </PreviewArea>\n </InnerContainer>\n </Container>, document.body)\n );\n};\n\nexport default CropTool;","import React, { useState, useCallback, useEffect } from 'react';\nimport styled, { css } from 'styled-components';\nimport InputFileButton from '../atoms/InputFileButton';\nimport ButtonWithIcon from '../atoms/ButtonWithIcon';\nimport DropArea from '../atoms/DropArea';\nimport CropTool from '../molecules/CropTool';\nimport { AvatarPlaceholder } from '../../svg';\nimport Label from '../atoms/Label';\nimport { isValidImage } from '../../helpers';\n\n/** TODO update to useReduce for better state management*/\n\nconst CROP_HEIGHT_AREA = 500;\nconst CROP_WIDTH_AREA = 475;\nconst CANVAS_HEIGHT = 490;\nconst CANVAS_WIDTH = 460;\n\n// 0.95\nconst ratio = Math.round((CROP_WIDTH_AREA / CROP_HEIGHT_AREA) * 100) / 100;\n\nconst PHOTO_HEIGHT = `150px`;\nconst PHOTO_WIDTH = `142px`;\n\nconst Container = styled.div`\n position: relative;\n width: ${PHOTO_WIDTH};\n ${({ theme }) => css`\n font-family: ${theme.fontFamily.ui};\n `}\n button {\n width: 100%;\n }\n`;\n\nconst PreviewImageGroup = styled.div`\n position: relative;\n margin-bottom: 17px;\n height: ${PHOTO_HEIGHT};\n width: ${PHOTO_WIDTH};\n`;\n\nconst PhotoContainerStyle = css`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n border-radius: 5px;\n background-color: var(--grey-5);\n`;\nconst PreviewImage = styled.img`\n ${PhotoContainerStyle}\n object-fit: cover;\n`;\n\nconst PlaceholderText = styled.div`\n color: var(--grey-10);\n font-size: 14px;\n`;\n\nconst NoPhoto = styled.div`\n ${PhotoContainerStyle}\n padding-top: 15px;\n ${PlaceholderText} {\n margin-top: 18px;\n }\n`;\n\nconst StyledInputFileButton = styled(InputFileButton)`\n width: 100%;\n`;\n\nconst ButtonsWrapper = styled.div`\n display: flex;\n flex-direction: column;\n\n button {\n margin-bottom: 10px;\n }\n\n`;\n\ninterface IAvatar {\n title?: string\n photoText?: string\n buttonText?: string\n buttonTextReplace?: string\n cropToolTitle?: string\n cropToolCancelTxt?: string\n cropToolConfirmTxt?: string\n uploaderCropText?: string\n deletePhotoText?: string\n currentImg?: string\n hasCrop?: boolean\n onAvatarUpdate?: (imgFile: File) => void\n onError?: (msg: string) => void\n onRemove?: () => void\n}\n\nconst AvatarUploader: React.FC<IAvatar> = ({\n title = 'Photograph',\n photoText = 'Drop Photo',\n buttonText = 'Select File',\n buttonTextReplace = 'Replace Photo',\n uploaderCropText = 'Crop Image',\n deletePhotoText = 'Remove',\n cropToolTitle,\n cropToolCancelTxt,\n cropToolConfirmTxt,\n currentImg,\n hasCrop = true,\n onAvatarUpdate = () => { },\n onError = () => { },\n onRemove = () => { }\n}) => {\n\n const [avatarImg, setAvatarImg] = useState(currentImg);\n const [cropImg, setCropImg] = useState('');\n const [isCropOpen, setIsCropOpen] = useState(false);\n\n const handleCrop = useCallback(async (newFileUrl: string, fileType: string) => {\n setAvatarImg(newFileUrl);\n const newFile = await fetch(\n newFileUrl).then(r => r.blob()).then(blobFile => new File([blobFile], \"newAvatar\", { type: fileType })\n );\n\n onAvatarUpdate(newFile);\n\n setIsCropOpen(false);\n }, [onAvatarUpdate]);\n\n const handleCropClose = useCallback(() => {\n setIsCropOpen(false);\n setCropImg('');\n URL.revokeObjectURL(cropImg);\n }, [cropImg]);\n\n const handleFileUpload = useCallback((newFiles: FileList) => {\n if (newFiles.length === 1) {\n if (!isValidImage(newFiles[0])) {\n onError('Please upload only jpeg and png file');\n return;\n }\n const prevImg = URL.createObjectURL(newFiles[0]);\n\n if (hasCrop) {\n setCropImg(prevImg);\n setIsCropOpen(true);\n } else {\n onAvatarUpdate(newFiles[0]);\n setAvatarImg(prevImg);\n }\n\n } else {\n onError('Drop only one file');\n }\n }, [hasCrop, onError, onAvatarUpdate]);\n\n const handleEdit = useCallback((fileUrl: string) => {\n setCropImg(fileUrl);\n setIsCropOpen(true);\n }, []);\n\n useEffect(() => {\n setAvatarImg(currentImg);\n return () => {\n setAvatarImg('');\n };\n }, [currentImg]);\n\n const handleRemove = useCallback(() => {\n setAvatarImg('');\n onRemove();\n }, [onRemove]);\n\n return (\n <Container>\n <Label labelText={title} htmlFor='avatar-upload' />\n <PreviewImageGroup>\n {avatarImg\n ? <PreviewImage src={avatarImg} alt='avatar image' crossOrigin='anonymous' />\n : (\n <NoPhoto>\n <AvatarPlaceholder />\n <PlaceholderText>{photoText}</PlaceholderText>\n </NoPhoto>\n )}\n {((currentImg && (!hasCrop)) || !currentImg) && <DropArea height={PHOTO_HEIGHT} dropCallback={handleFileUpload} />}\n </PreviewImageGroup>\n {avatarImg\n ? (\n <ButtonsWrapper>\n {hasCrop\n ? <ButtonWithIcon icon='Crop' design='secondary' position='left' size='small' onClick={() => handleEdit(avatarImg)}>{uploaderCropText}</ButtonWithIcon>\n : <StyledInputFileButton\n id='avatar-upload'\n text={buttonTextReplace}\n buttonSize='small'\n buttonDesign='secondary'\n accept='image/*'\n inputCallback={handleFileUpload}\n />}\n <ButtonWithIcon icon='Delete' design='secondary' position='left' size='small' onClick={handleRemove}>{deletePhotoText}</ButtonWithIcon>\n </ButtonsWrapper>\n )\n : <StyledInputFileButton\n id='avatar-upload'\n text={buttonText}\n buttonSize='small'\n accept='image/*'\n inputCallback={handleFileUpload}\n />}\n {isCropOpen && hasCrop\n ? <CropTool\n imgUrl={cropImg}\n onCrop={handleCrop}\n onClose={handleCropClose}\n onError={onError}\n canvasHeight={CANVAS_HEIGHT}\n canvasWidth={CANVAS_WIDTH}\n cropHeight={CROP_WIDTH_AREA}\n cropWidth={CROP_HEIGHT_AREA}\n aspectRatio={ratio}\n title={cropToolTitle}\n cancelBtnTxt={cropToolCancelTxt}\n cropBtnTxt={cropToolConfirmTxt}\n isResizable\n />\n : null}\n </Container>\n );\n};\n\nexport default AvatarUploader;","import React, {Fragment} from 'react';\nimport styled from 'styled-components';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 27px;\n ${IconWrapper} {\n display: flex;\n align-items: center;\n }\n`;\n\nconst PlusIcon = styled(Icon)``;\n\nconst PlusIconWrapper = styled.div`\n margin: 0 30px;\n ${IconWrapper}{\n transform: rotate(45deg);\n [stroke]{\n stroke: var(--primary-7);\n }\n }\n`;\n\ninterface IBigIconsSummary {\n icons: string[]\n color?: ISvgIcons['color']\n size?: number,\n weight?: 'light' | 'regular' | 'heavy' | 'strong'\n}\n\nconst BigIconsSummary: React.FC<IBigIconsSummary> = ({\n icons,\n color = 'dimmed',\n size = 72,\n weight='light',\n ...props\n}) => {\n return (\n <Container {...props}>\n {icons.map((icon, index) => {\n return (\n <Fragment key={`type-upload-${icon}}`}>\n {(index !== 0) && <PlusIconWrapper><PlusIcon icon='CloseCompact' size={22} /></PlusIconWrapper>}\n <Icon icon={icon} {...{color, size, weight}} />\n </Fragment>\n );\n })}\n </Container>\n );\n};\n\nexport default BigIconsSummary;","import React, { Fragment, ReactElement, useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport BigIconsSummary from '../../Misc/atoms/BigIconsSummary';\nimport DropArea from '../atoms/DropArea';\nimport InputFileButton from '../atoms/InputFileButton';\nimport Button from '../atoms/Button';\n\nconst Container = styled.div`\n font-family: ${({ theme }) => theme.fontFamily.ui};\n`;\n\nconst StyledDropArea = styled(DropArea)`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n`;\n\nconst InputButtonWrapper = styled.div`\n z-index: 99;\n margin-top: 20px;\n display: flex;\n gap: 20px;\n`;\n\nconst FilesUploadGroup = styled.div<{ $height?: string, $hasFiles: boolean }>`\n padding: ${({ $hasFiles }) => $hasFiles ? '26px 0 20px 0' : '65px 0 42px 0'};\n display: flex;\n flex-direction: column;\n align-items: center;\n border-radius: 5px;\n background-color: var(--grey-4);\n position: relative;\n`;\n\nconst Title = styled.div`\n color: var(--grey-11);\n font-size: 20px;\n`;\n\nconst Description = styled.div`\n font-size: 14px;\n line-height: 2.14;\n text-align: center;\n color: var(--grey-10);\n margin-top: 10px;\n max-width: 386px;\n`;\n\nconst getUpdateFiles = (newFiles: FileList, files: FileList | null, allowedFileTypes?: string[]): IUploadedFiles => {\n\n // creates a newFiles variable to prevent errors with input\n const newFilesTransfer = new DataTransfer();\n const rejectedFilesTransfer = new DataTransfer();\n\n for (let index = 0; index < newFiles.length; index++) {\n\n const isCorrectType = (allowedFileTypes === undefined) || (allowedFileTypes.length === 0) ? true : allowedFileTypes.includes(newFiles[index].type);\n if (isCorrectType) {\n newFilesTransfer.items.add(newFiles[index]);\n } else {\n rejectedFilesTransfer.items.add(newFiles[index]);\n }\n }\n\n if (files === null) {\n const result: IUploadedFiles = { goodFiles: newFilesTransfer.files, rejectedFiles: rejectedFilesTransfer.files };\n return result;\n }\n\n const updatedFilesTransfer = new DataTransfer();\n const fileNamesSet = new Set();\n\n for (let index = 0; index < files.length; index++) {\n updatedFilesTransfer.items.add(files[index]);\n const name = files[index].name;\n fileNamesSet.add(name);\n }\n\n for (let index = 0; index < newFilesTransfer.files.length; index++) {\n\n const isAlready = fileNamesSet.has(newFilesTransfer.files[index].name);\n const isCorrectType = (allowedFileTypes === undefined) || (allowedFileTypes.length === 0) ? true : allowedFileTypes.includes(newFiles[index].type);\n\n if (isAlready || !isCorrectType) {\n rejectedFilesTransfer.items.add(newFiles[index]);\n } else {\n updatedFilesTransfer.items.add(newFilesTransfer.files[index]);\n }\n }\n const result: IUploadedFiles = { goodFiles: updatedFilesTransfer.files, rejectedFiles: rejectedFilesTransfer.files };\n\n return result;\n};\n\ninterface IUploadedFiles {\n goodFiles: FileList\n rejectedFiles: FileList\n}\n\ninterface IAreaUploaderManager {\n title?: string\n description?: string\n fileIcons?: string[]\n selectFilesText?: string\n addMoreFilesText?: string\n clearFilesText?: string\n beginUploadText?: string\n allowedFileTypes?: string[]\n customComponent?: ReactElement\n onChangeCallback?: (goodFiles: FileList, rejectedFiles: FileList) => void\n clearFilesCallback?: () => void\n beginUploadCallback?: () => void\n}\n\nconst AreaUploadManager: React.FC<IAreaUploaderManager> = ({\n title = 'Select Files',\n description,\n fileIcons,\n selectFilesText = 'Select Files',\n addMoreFilesText = 'Add More Files',\n clearFilesText = 'Clear Files',\n beginUploadText = 'Begin Upload',\n allowedFileTypes,\n customComponent,\n onChangeCallback = () => { },\n clearFilesCallback = () => { },\n beginUploadCallback = () => { }\n}) => {\n\n const [files, setFiles] = useState<FileList | null>(null);\n\n const handleFiles = useCallback((newFiles: FileList) => {\n if (newFiles === null) {\n return;\n }\n const { goodFiles, rejectedFiles } = getUpdateFiles(newFiles, files, allowedFileTypes);\n setFiles(goodFiles);\n onChangeCallback(goodFiles, rejectedFiles);\n\n }, [files, allowedFileTypes, onChangeCallback]);\n\n const clearFiles = useCallback(() => {\n setFiles(null);\n clearFilesCallback();\n },[clearFilesCallback]);\n\n return (\n <Container>\n <FilesUploadGroup $hasFiles={files !== null}>\n <StyledDropArea dropCallback={handleFiles} />\n {\n customComponent\n ? customComponent\n : (\n <Fragment>\n {fileIcons && <BigIconsSummary icons={fileIcons} />}\n <Title>{title}</Title>\n {files === null && <Description>{description}</Description>}\n </Fragment>\n )\n }\n\n <InputButtonWrapper>\n <InputFileButton\n buttonSize='small'\n text={files !== null ? addMoreFilesText : selectFilesText}\n inputCallback={handleFiles}\n multiple\n buttonDesign={files !== null ? 'secondary' : 'primary'}\n accept={allowedFileTypes?.join(', ')}\n />\n {files !== null &&\n <Fragment>\n <Button\n size='small'\n onClick={beginUploadCallback}\n design='primary'\n >{beginUploadText}\n </Button>\n <Button\n size='small'\n onClick={clearFiles}\n design='secondary'\n >{clearFilesText}\n </Button>\n </Fragment>}\n </InputButtonWrapper>\n </FilesUploadGroup>\n </Container>\n );\n};\n\nexport default AreaUploadManager;","import React, { FormHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport { StyledLabel } from './atoms/Label';\n\nconst FormContainer = styled.form<{$spacing: string}>`\n ${({$spacing})=> $spacing && css`\n & > ${StyledLabel} {\n margin-bottom: ${$spacing};\n }\n `}\n`;\n\ninterface OwnProps {\n spacing?: string;\n}\n\ntype Props = OwnProps & FormHTMLAttributes<HTMLFormElement>\n\nconst Form : React.FC<Props> = ({ children, spacing = '45px;', action, ...props }) => {\n return (\n <FormContainer $spacing={spacing} action={typeof action === 'string' ? action : undefined} {...props}>\n <>{children}</>\n </FormContainer>\n );\n};\n\nexport default Form;","import React, { ButtonHTMLAttributes, FC, useCallback, useState, useEffect, useRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport Spinner from '../../Indicators/Spinner';\nimport { resetButtonStyles } from '../../common';\nimport { TypeButtonDesigns } from '..';\n\nconst StyledButton = styled.button<{$noBorderTop?: boolean}>`\n ${resetButtonStyles}\n ${({$noBorderTop}) => $noBorderTop ?\n `border-top: none`\n : css`\n border-top: 1px solid var(--border-color)`\n };\n\n color: var(--text-color);\n height: var(--button-height);\n display: flex;\n flex: 1 0 0;\n align-items: center;\n align-self: stretch;\n\n &:hover:enabled {\n background: var(--button-hover-bg);\n\n ${IconWrapper} {\n svg g, svg path {\n stroke: var(--white-a12);\n }\n }\n }\n\n &:active:enabled {\n background: var(--button-active-bg);\n\n ${({$noBorderTop}) => $noBorderTop ?\n `border-top: none`\n : css`\n border-top: 1px solid var(--border-active-color)`\n };\n\n ${IconWrapper} {\n svg g, svg path {\n stroke: var(--white-a12);\n }\n }\n }\n\n &:disabled {\n color: var(--text-disabled-color);\n cursor: not-allowed;\n }\n`;\n\nconst OptionText = styled.div`\n font-family: var(--font-ui);\n font-size: var(--button-font-size);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: center;\n font-style: normal;\n font-weight: 600;\n line-height: normal;\n`;\n\nconst TextWrapper = styled.div<{$textMaxWidth?:string}>`\n ${({$textMaxWidth}) => $textMaxWidth && css `max-width: ${$textMaxWidth};`}\n display: flex;\n padding: 0px var(--button-h-padding);\n justify-content: center;\n align-items: center;\n gap: 8px;\n align-self: stretch;\n`;\n\nconst LeftIconWrapper = styled.div<{ $isAscendingIcon: boolean }>`\n ${({ $isAscendingIcon }) => $isAscendingIcon && css`\n transform: scaleY(-1);\n `};\n\n height: var(--button-height);\n display: flex;\n padding: 3px var(--button-icon-h-padding);\n align-items: center;\n align-self: stretch;\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n justify-content: center;\n\n svg {\n display: flex;\n justify-content: center;\n align-items: center;\n height: var(--button-icon-size);\n width: var(--button-icon-size);\n g, path {\n stroke: var(--white-a10);\n }\n }\n }\n`;\n\nexport interface IMOption {\n text: string\n icon?: string\n hasOnSelectLoading?: boolean\n design?: TypeButtonDesigns | string\n noBorderTop?: boolean\n textMaxWidth?: string\n onClickCallback?: () => void\n closeCallback: () => void\n}\n\n\nexport type ISplitButtonOption = IMOption & ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst SplitButtonOption : FC<ISplitButtonOption> = ({\n text,\n icon = '',\n design = 'primary',\n noBorderTop = false,\n textMaxWidth='',\n onClickCallback,\n closeCallback,\n hasOnSelectLoading,\n children,\n formAction,\n ...props\n}) => {\n\n const buttonRef = useRef<HTMLButtonElement>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [ iconSize, setIconSize ] = useState<number>(0);\n\n const handleClick = useCallback(() => {\n\n onClickCallback && onClickCallback();\n\n if(hasOnSelectLoading) {\n setIsLoading(true);\n\n setTimeout( () => {\n setIsLoading(false);\n closeCallback();\n }, 2000);\n }else {\n setTimeout( () => {\n closeCallback();\n }, 200);\n }\n\n },[closeCallback, hasOnSelectLoading, onClickCallback]);\n\n useEffect(() => {\n if(buttonRef.current){\n setIconSize( parseInt( getComputedStyle(buttonRef.current).getPropertyValue('--button-icon-size') ));\n }\n }, [buttonRef]);\n\n return(\n <StyledButton\n ref={buttonRef}\n $noBorderTop={noBorderTop}\n onClick={handleClick}\n {...props}>\n <LeftIconWrapper $isAscendingIcon={icon === 'FilterAscending'} >\n {isLoading ? <Spinner custom={{size: iconSize}} styling={design} /> : <Icon icon={icon} />}\n </LeftIconWrapper>\n <TextWrapper $textMaxWidth={textMaxWidth}><OptionText>{text}</OptionText></TextWrapper>\n </StyledButton>\n );\n};\n\nexport default SplitButtonOption;","import { useEffect, useRef } from 'react';\n\nexport function useInterval(callback: ()=>void, delay: number) {\n const savedCallback = useRef<(()=>void) | undefined>(undefined);\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n savedCallback.current && savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}","import { useCallback } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\n\nexport const useTo = ()=>{\n const navigate = useNavigate();\n const to = useCallback((url: string) => () => navigate(url),[navigate]);\n return to;\n};","import { useEffect, useLayoutEffect } from 'react';\n\nexport const useTitle = (title : string, area? : string, delimiter?: string, update= true) => {\n\n// Index Title\nconst baseTitle = document.title.split('|').slice(-1)[0].trim();\n\n// on unmount will return the baseTitle to Index Title for pages not using this hook.\n// useLayoutEffect ensures the cleanup (title restore) runs synchronously on unmount,\n// before the browser paints and before the next page's effects set their own title.\n// With plain useEffect the async cleanup could overwrite the incoming page's title.\nuseLayoutEffect(() => {\n return () => {\n document.title = baseTitle;\n };\n}, [baseTitle]);\n\n useEffect(() => {\n if(!update) return;\n document.title = makeTitle([\n ...(title ? [title] : []),\n ...(area ? [area] : []),\n ...(baseTitle? [baseTitle] : [])\n ], delimiter);\n\n },[title, area, delimiter, update, baseTitle]);\n};\n\n/**\n * Put the parts together for title use.\n * @param parts Each part to make up the title.\n * @param delimiter Character used for delimiting\n */\nconst makeTitle = (parts: string[], delimiter : string = '|') : string => {\n\n let title = '';\n delimiter = ' ' + delimiter + ' ';\n\n parts.forEach((part, key) => {\n title += part;\n if(parts.length - 1 !== key){\n title += delimiter;\n }\n });\n\n return title;\n\n};","import { useCallback } from 'react';\n\nexport const useCopyToClipboard = () => {\n const copyToClipboard = useCallback((str : string) : boolean => {\n\n // Make an area to allow for copying.\n const el = document.createElement('textarea');\n el.value = str;\n el.setAttribute('readonly', '');\n el.style.position = 'absolute';\n el.style.left = '-9999px';\n document.body.appendChild(el);\n\n const selection = document.getSelection();\n\n if(selection){\n const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false;\n el.select();\n\n const success = document.execCommand('copy');\n document.body.removeChild(el);\n if(selected) {\n selection.removeAllRanges();\n selection.addRange(selected);\n }\n return success;\n }\n\n return false;\n\n },[]);\n\n return {copyToClipboard};\n};","import { useCallback, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, initialValue: T) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue;\n }\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key);\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n console.warn(`[useLocalStorage] Failed to parse key \"${key}\" from localStorage, using initial value:`, error);\n return initialValue;\n }\n });\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue = useCallback((value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have same API as useState\n \n // Save state\n setStoredValue((storedValue)=>{\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n // Save to local storage\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n }\n return valueToStore;\n });\n \n } catch (error) {\n console.error(`[useLocalStorage] Failed to write key \"${key}\" to localStorage:`, error);\n }\n },[key]);\n\n return [storedValue, setValue] as const;\n}","import { useEffect, useRef } from 'react';\n\nexport type outClickType = (eve: MouseEvent) => void;\nexport function useClickOutside(elRef: any, elCallback: outClickType) {\n\n const callbackRef = useRef<outClickType>(elCallback);\n callbackRef.current = elCallback;\n\n useEffect(() => {\n const handleClickOutside = (eve: MouseEvent) => {\n if (!(elRef?.current?.contains(eve.target))) {\n callbackRef.current(eve);\n }\n };\n\n document.addEventListener('click', handleClickOutside, true);\n return () => {\n document.removeEventListener('click', handleClickOutside, true);\n };\n }, [elCallback, elRef]);\n}","import React, { ReactElement, useCallback, useRef } from 'react';\nimport ReactDom from 'react-dom';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../common';\nimport Icon, {IconWrapper} from '../Icons/Icon';\nimport { useClickOutside } from '../hooks/useClickOutside';\n\n\nconst Container = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--grey-3);\n -webkit-backdrop-filter: blur(5px);\n backdrop-filter: blur(5px);\n z-index: 999;\n font-family: var(--font-ui);\n background-color: var(--grey-a3);\n`;\n\nconst CloseButton = styled.button<{ $selected?: boolean }>`\n ${resetButtonStyles};\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n right: 0;\n top: -30px;\n color: var(--mono);\n font-size: 14px;\n font-weight: 500;\n\n ${IconWrapper} {\n display: flex;\n margin-left: 12px;\n }\n ${({ $selected = false }) => $selected && css`\n border-bottom: 5px solid var(--primary-7);\n `}\n &:focus {\n outline: none;\n }\n\n &:hover:enabled {\n opacity: .8;\n transition: transform var(--speed-normal) var(--easing-primary-in-out);\n }\n\n &:active:enabled {\n opacity: .9;\n }\n &:disabled {\n opacity: 0.1;\n }\n`;\n\nconst LightBox = styled.div<{ $padding?: boolean, $width?: string, $isCloseEnable?: boolean}>`\n position: relative;\n margin: ${({ $isCloseEnable }) => $isCloseEnable ? `27px 0 0` : `0`};\n z-index: 9999;\n width: ${({ $width }) => $width ? $width : `580px`};\n padding: ${({ $padding }) => $padding ? `30px 40px` : `0`};\n border-radius: 5px;\n box-shadow: 0px 10px 15px 0px var(--primary-a1);\n background-color: var(--grey-1);\n border: var(--grey-6) 1px solid;\n`;\n\nexport interface IModalProps {\n isOpen: boolean;\n isCloseEnable?: boolean;\n closeText?: string;\n width?: string;\n padding?: boolean;\n customComponent?: ReactElement;\n onDismiss: () => void;\n dismissCallback?: () => void;\n}\n\nconst Modal: React.FC<IModalProps> = ({\n isOpen = false,\n isCloseEnable = true,\n closeText = '',\n width = '',\n padding = true,\n customComponent,\n onDismiss,\n dismissCallback,\n}) => {\n\n const lightBoxRef = useRef<HTMLDivElement>(null);\n const onClickOutside = () => {\n if (isCloseEnable) {\n if(dismissCallback) {\n dismissCallback();\n }\n dismiss();\n }\n };\n\n useClickOutside(lightBoxRef, onClickOutside);\n\n const dismiss = useCallback(() => {\n if(dismissCallback) {\n dismissCallback();\n }\n onDismiss();\n }, [onDismiss, dismissCallback]);\n\n return (isOpen\n ? ReactDom.createPortal(\n <Container>\n <LightBox ref={lightBoxRef} $width={width} $padding={padding} $isCloseEnable={isCloseEnable}>\n <>\n {isCloseEnable\n ?\n <CloseButton onClick={() => dismiss()}>\n {closeText ? closeText : 'CLOSE'}\n <Icon icon='CloseCompact' size={15} color='grey-12' weight='regular' />\n </CloseButton>\n : null}\n {customComponent}\n </>\n </LightBox>\n </Container>, document.body)\n : null\n );\n};\n\nexport default Modal;","import React, { useState } from 'react';\nimport Modal, { IModalProps } from '../Modals/Modal';\n\nconst defaultModalProps: IModalProps = {\n isOpen: false,\n onDismiss: () => null,\n};\n\ninterface ModalContextType {\n modalProps: IModalProps;\n setModalProps: (newProps: IModalProps) => void;\n}\n\nconst defaultContext: ModalContextType = {\n modalProps: defaultModalProps,\n setModalProps: (newProps: IModalProps) => { console.debug(newProps); },\n};\n\nconst ModalContext = React.createContext<ModalContextType>(defaultContext);\n\nconst ModalProvider: React.FC<React.PropsWithChildren> = ({ children }) => {\n\n const [modalProps, setProps] = useState<IModalProps>(defaultContext.modalProps);\n\n const setModalProps = (newProps: IModalProps) => {\n setProps(newProps);\n };\n\n return (\n <ModalContext.Provider value={{ modalProps, setModalProps }}>\n <Modal {...modalProps} />\n {children}\n </ModalContext.Provider>\n );\n};\n\nexport { ModalContext };\nexport default ModalProvider;","import { ReactElement, useCallback, useContext} from 'react';\nimport { ModalContext } from '../context/ModalContext';\nimport { IModalProps } from '../Modals/Modal';\n\n/**\n * This type is a reduced version of the modalProps\n * but with the possibilities to grow beyond the basic modal\n * features\n */\nexport type IModal = {\n closeText?: string,\n isCloseEnable?: boolean,\n width?: string,\n padding?: boolean,\n dismissCallback?: () => void,\n customComponent?: ReactElement\n}\nexport const useModal = () => {\n const { modalProps, setModalProps } = useContext(ModalContext);\n\n const setModalOpen = useCallback((newStatus: boolean) => {\n if (newStatus === undefined) { return;}\n\n const updateProps: IModalProps = {\n ...modalProps,\n isOpen: newStatus,\n };\n setModalProps(updateProps);\n }, [modalProps, setModalProps]);\n\n const onDismiss = useCallback(() => {\n setModalOpen(false);\n }, [setModalOpen]);\n\n const createModal = useCallback((modal?: IModal) => {\n\n if(!modal) {\n setModalProps({isOpen: true, onDismiss});\n }\n\n const updateProps = {\n isOpen: true,\n closeText: modal?.closeText,\n isCloseEnable: modal?.isCloseEnable,\n width: modal?.width,\n padding: modal?.padding,\n dismissCallback: modal?.dismissCallback,\n customComponent: modal?.customComponent,\n onDismiss,\n };\n\n setModalProps(updateProps);\n }, [onDismiss, setModalProps]);\n\n return {\n createModal,\n isModalOpen: modalProps.isOpen,\n setModalOpen,\n };\n};","import React, { useState, useCallback, useMemo, useRef } from 'react';\nimport Notification, { INotificationProps } from '../Alerts/atom/Notification';\nimport { uniqueID } from '../helpers';\n\ntype NotificationContextType = {\n sendNotification: (newNotification: INotificationProps) => void\n clearNotifications: () => void\n};\n\nconst defaultContext: NotificationContextType = {\n sendNotification: () => console.debug(\"This is the context initialization should not appear\"),\n clearNotifications: () => console.debug(\"This is the context initialization should not appear\"),\n};\n\nconst NotificationContext = React.createContext<NotificationContextType>(defaultContext);\n\nconst NotificationProvider: React.FC<React.PropsWithChildren> = ({ children }) => {\n const [activeNotification, setActiveNotification] = useState<INotificationProps | null>(null);\n const notificationListRef = useRef<INotificationProps[]>([]);\n\n const showNotification = useCallback(() => {\n const nextNotification = notificationListRef.current.shift();\n\n if (!nextNotification) { return; }\n\n const updateOnClose = () => {\n if (nextNotification.closeCallback) {\n nextNotification.closeCallback();\n }\n setActiveNotification(null);\n showNotification();\n };\n\n const displayedNotification = { ...nextNotification, closeCallback: updateOnClose };\n\n setActiveNotification(displayedNotification);\n }, []);\n\n const sendNotification = useCallback(async (newNotification: INotificationProps) => {\n\n const validNotification: INotificationProps = {\n message: newNotification.message,\n type: newNotification.type,\n id: uniqueID()\n };\n\n if (newNotification.icon) {\n validNotification.icon = newNotification.icon;\n }\n\n if (newNotification.actionTextButton) {\n validNotification.actionTextButton = newNotification.actionTextButton;\n }\n\n if (newNotification.onTextButtonClick) {\n validNotification.onTextButtonClick = newNotification.onTextButtonClick;\n }\n\n if (newNotification.closeCallback) {\n validNotification.closeCallback = newNotification.closeCallback;\n }\n\n if (newNotification.isPinned) {\n validNotification.isPinned = newNotification.isPinned;\n }\n\n notificationListRef.current.push(validNotification);\n\n if (notificationListRef.current.length === 1 && activeNotification === null) {\n showNotification();\n }\n },[activeNotification, showNotification]);\n\n const clearNotifications = useCallback(() => {\n notificationListRef.current.length = 0;\n setActiveNotification((prev) => {\n\n if(prev !== null) {\n return {...prev, closeNow: true};\n }\n\n return prev;\n });\n },[]);\n\n const contextValue = useMemo(() => ({sendNotification, clearNotifications}),[clearNotifications, sendNotification]);\n\n return (\n <NotificationContext.Provider value={contextValue}>\n {activeNotification\n ? <Notification {...activeNotification} />\n : null}\n {children}\n </NotificationContext.Provider>\n );\n};\n\nexport { NotificationContext };\nexport type { NotificationContextType };\nexport default NotificationProvider;","import React from 'react';\nimport { NotificationContext } from '../context/NotificationContext';\n\nexport const useNotification = () => React.useContext(NotificationContext);","import { useRef, useCallback, useEffect } from 'react';\n\n\nexport const usePoll = (callback = ()=>{}, interval = 1000) => {\n const timeoutIDRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef<()=>void>(callback);\n const canceled = useRef<boolean>(false);\n\n\n const pollOnce = useCallback(async()=>{\n if(timeoutIDRef.current !== null){\n console.debug('Clearing previous');\n clearTimeout(timeoutIDRef.current);\n timeoutIDRef.current = null;\n }\n\n await callbackRef.current();\n //Start next one in the chain\n if(!canceled.current){\n console.debug('Starting next timeout');\n timeoutIDRef.current = setTimeout(pollOnce, interval);\n }\n },[interval]);\n\n useEffect(()=>{\n callbackRef.current = callback;\n },[callback]);\n\n useEffect(()=>{\n canceled.current = false;\n pollOnce();\n\n return () => {\n console.debug('canceled');\n canceled.current = true;\n if(timeoutIDRef.current !== null){\n console.debug('clearing final', timeoutIDRef.current);\n clearTimeout(timeoutIDRef.current);\n timeoutIDRef.current = null;\n }\n };\n },[pollOnce]);\n};\n","import {useState, useLayoutEffect } from \"react\";\n\n/**\n * Custom hook that tells you whether a given media query is active.\n */\n\nexport default function useMediaQuery(query: string) {\n\n const [matches, setMatches] = useState(false);\n useLayoutEffect(\n () => {\n\n const mediaQuery = window.matchMedia(query);\n setMatches(mediaQuery.matches);\n const handler = (event: MediaQueryListEvent) => setMatches(event.matches);\n\n mediaQuery.addEventListener(\"change\", handler);\n\n return () => mediaQuery.removeEventListener(\"change\", handler);\n\n },\n // eslint-disable-next-line\n [] // Empty array ensures effect is only run on mount and unmount\n );\n return matches;\n}","import useMediaQuery from \"./useMediaQuery\";\nimport {deviceMediaQuery} from '../theme/common';\n\n/**\n * Get a set of boolean representing which breakpoint is activeScreen\n * and which breakpoints are inactiveScreen.\n */\n\nexport type IBreakpoints = 'small'\n| 'medium'\n| 'large'\n| 'xlarge'\n| 'xxlarge';\n\ninterface OwnProps {\n isSmall: boolean\n isMedium: boolean\n isLarge: boolean\n isXLarge: boolean\n isXXLarge: boolean\n activeScreen: IBreakpoints\n}\n\nexport default function useBreakpoints() {\n const breakpoints : OwnProps= {\n isSmall: useMediaQuery(deviceMediaQuery.small),\n isMedium: useMediaQuery(deviceMediaQuery.medium),\n isLarge: useMediaQuery(deviceMediaQuery.large),\n isXLarge: useMediaQuery(deviceMediaQuery.xlarge),\n isXXLarge: useMediaQuery(deviceMediaQuery.xxlarge),\n activeScreen: \"small\"\n };\n\n if (breakpoints.isSmall) breakpoints.activeScreen = 'small';\n if (breakpoints.isMedium) breakpoints.activeScreen = 'medium';\n if (breakpoints.isLarge) breakpoints.activeScreen = 'large';\n if (breakpoints.isXLarge) breakpoints.activeScreen = 'xlarge';\n if (breakpoints.isXXLarge) breakpoints.activeScreen = 'xxlarge';\n\n return breakpoints;\n}","import * as React from \"react\";\n\nfunction SvgNoImageBig(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n width={610}\n height={446}\n viewBox=\"0 0 610 446\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect width={609.91} height={446} fill=\"#DDDDDD\" />\n <path\n d=\"M242.675 210.273V235H239.246L226.677 216.865H226.447V235H222.717V210.273H226.17L238.751 228.432H238.98V210.273H242.675ZM269.596 222.636C269.596 225.277 269.113 227.546 268.148 229.446C267.182 231.338 265.858 232.795 264.175 233.817C262.501 234.831 260.597 235.338 258.464 235.338C256.323 235.338 254.412 234.831 252.729 233.817C251.055 232.795 249.735 231.334 248.769 229.434C247.803 227.534 247.32 225.268 247.32 222.636C247.32 219.996 247.803 217.73 248.769 215.839C249.735 213.939 251.055 212.482 252.729 211.468C254.412 210.446 256.323 209.935 258.464 209.935C260.597 209.935 262.501 210.446 264.175 211.468C265.858 212.482 267.182 213.939 268.148 215.839C269.113 217.73 269.596 219.996 269.596 222.636ZM265.902 222.636C265.902 220.624 265.576 218.93 264.924 217.553C264.28 216.169 263.394 215.122 262.268 214.414C261.149 213.698 259.881 213.339 258.464 213.339C257.04 213.339 255.768 213.698 254.649 214.414C253.53 215.122 252.645 216.169 251.993 217.553C251.349 218.93 251.027 220.624 251.027 222.636C251.027 224.649 251.349 226.347 251.993 227.732C252.645 229.108 253.53 230.154 254.649 230.871C255.768 231.579 257.04 231.933 258.464 231.933C259.881 231.933 261.149 231.579 262.268 230.871C263.394 230.154 264.28 229.108 264.924 227.732C265.576 226.347 265.902 224.649 265.902 222.636ZM286.977 210.273V235H283.246V210.273H286.977ZM292.41 210.273H296.938L304.81 229.494H305.1L312.972 210.273H317.499V235H313.95V217.107H313.72L306.428 234.964H303.482L296.189 217.094H295.96V235H292.41V210.273ZM325.012 235H321.052L329.951 210.273H334.261L343.159 235H339.199L332.208 214.764H332.015L325.012 235ZM325.676 225.317H338.523V228.456H325.676V225.317ZM362.303 218.085C362.069 217.352 361.755 216.696 361.361 216.116C360.974 215.529 360.512 215.03 359.972 214.619C359.433 214.201 358.817 213.883 358.125 213.665C357.441 213.448 356.688 213.339 355.867 213.339C354.475 213.339 353.219 213.698 352.1 214.414C350.981 215.13 350.096 216.181 349.444 217.565C348.8 218.942 348.478 220.628 348.478 222.624C348.478 224.629 348.804 226.323 349.456 227.707C350.108 229.092 351.001 230.142 352.136 230.859C353.271 231.575 354.563 231.933 356.012 231.933C357.356 231.933 358.527 231.66 359.526 231.112C360.532 230.565 361.308 229.792 361.856 228.794C362.411 227.788 362.689 226.605 362.689 225.244L363.655 225.425H356.58V222.347H366.299V225.16C366.299 227.237 365.856 229.04 364.971 230.569C364.094 232.09 362.878 233.265 361.325 234.094C359.779 234.924 358.008 235.338 356.012 235.338C353.774 235.338 351.81 234.823 350.12 233.793C348.438 232.762 347.126 231.301 346.184 229.41C345.242 227.51 344.771 225.256 344.771 222.648C344.771 220.676 345.045 218.906 345.592 217.336C346.14 215.766 346.908 214.434 347.898 213.339C348.897 212.237 350.068 211.396 351.412 210.816C352.764 210.228 354.241 209.935 355.843 209.935C357.179 209.935 358.423 210.132 359.574 210.526C360.733 210.921 361.763 211.48 362.665 212.205C363.574 212.929 364.327 213.79 364.923 214.788C365.518 215.778 365.921 216.877 366.13 218.085H362.303ZM371.035 235V210.273H386.538V213.484H374.766V221.018H385.729V224.218H374.766V231.788H386.683V235H371.035Z\"\n fill=\"#656565\"\n />\n </svg>\n );\n}\n\nexport default SvgNoImageBig;\n","import React, { useState, useCallback, VideoHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport Spinner from '../../Indicators/Spinner';\nimport { IMediaType } from '../../index';\nimport NoImage from '../../svg/NoImageBig';\n\nexport const MediaBoxWrapper = styled.div<{$minWidth?: string, $minHeight?: string}>`\n position: relative;\n line-height: 0;\n ${({$minHeight}) => $minHeight && `min-height: ${$minHeight}`};\n ${({$minWidth}) => $minWidth && `min-width: ${$minWidth}`};\n`;\n\nconst mediaStyle = `\n max-width: 100%;\n max-height: 100%;\n border-radius: 3px;\n background-color: var(--grey-11);\n`;\n\nconst LoadingOverlay = styled.div`\n position: absolute;\n top:0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`;\n\nconst Video = styled.video<{ $isLoaded?: boolean, $hasModalLimits?: boolean }>`\n ${mediaStyle};\n outline: none;\n\n ${({ $isLoaded, $hasModalLimits }) => css`\n transition: opacity var(--speed-slow) var(--easing-primary-out);\n opacity: ${$isLoaded ? `1` : `0`};\n\n ${$hasModalLimits && css`\n max-height: calc(100vh - 100px);\n max-width: calc(100vw - 100px);\n `};\n `};\n`;\n\nconst StyledImage = styled.img<{ $isLoaded?: boolean, $hasModalLimits?: boolean }>`\n ${mediaStyle};\n\n ${({ $isLoaded, $hasModalLimits }) => css`\n transition: opacity var(--speed-slow) var(--easing-primary-out);\n display: ${$isLoaded ? `block` : `none`};\n opacity: ${$isLoaded ? `1` : `0`};\n\n ${$hasModalLimits && css`\n max-height: calc(100vh - 100px);\n max-width: calc(100vw - 100px);\n `};\n `};\n`;\n\nexport interface IMediaModal {\n src: string\n mediaType: IMediaType\n alt?: string\n videoOptions?: VideoHTMLAttributes<HTMLVideoElement>\n hasModalLimits?: boolean\n retryLoading?: boolean\n retryLimit?: number\n minWidth?: string\n minHeight?: string\n onError?: (e: Event) => void\n onMediaLoad?: () => void\n}\n\nconst MediaBox: React.FC<IMediaModal> = ({\n src: incomingSrc,\n alt,\n videoOptions = {},\n mediaType,\n hasModalLimits,\n retryLoading= false,\n retryLimit=5,\n minWidth,\n minHeight,\n onError: onErrorCallback = () => { },\n onMediaLoad = () => { },\n}) => {\n const [retryCount, setRetryCount] = useState(0);\n const [src, setSrc] = useState(incomingSrc);\n const [loadFailed, setLoadFailed] = useState(false);\n const [loaded, setLoaded] = useState(false);\n\n const {\n loop = false,\n autoPlay = true,\n controls = false,\n muted = true,\n children,\n ...videoValues\n } = videoOptions;\n\n const onError = useCallback((e: React.SyntheticEvent<HTMLVideoElement | HTMLImageElement, Event>) => {\n if(!retryLoading || retryCount >= retryLimit) {\n onErrorCallback(e.nativeEvent);\n setLoaded(true);\n setLoadFailed(true);\n } else {\n const randomDelay = (1000 * (retryCount ** 2 + Math.random())); // exponential back off retry\n setRetryCount(count => count+1);\n setTimeout(()=>{\n setSrc(`${incomingSrc}?v=${Date.now()}`);\n }, randomDelay);\n }\n\n },[incomingSrc, onErrorCallback, retryCount, retryLoading, retryLimit]);\n\n const handleLoad = useCallback(() => {\n onMediaLoad();\n setLoaded(true);\n }, [onMediaLoad, setLoaded]);\n\n return (\n <MediaBoxWrapper {...{$minWidth: minWidth, $minHeight: minHeight}}>\n {mediaType === 'video'\n ? <Video\n {...{ loop, autoPlay, controls, muted, onError }}\n {...videoValues}\n $hasModalLimits={hasModalLimits}\n src={loadFailed ? '' : src}\n $isLoaded={loaded && !loadFailed}\n preload='metadata'\n onCanPlayThrough={handleLoad}\n >\n <>{children}</>\n </Video>\n : <StyledImage\n {...{ alt, onError }}\n $hasModalLimits={hasModalLimits}\n src={loadFailed ? '' : src}\n onLoad={handleLoad}\n $isLoaded={loaded && !loadFailed}\n />}\n {(!loaded) && <LoadingOverlay><Spinner size='large' styling='primary' /></LoadingOverlay>}\n {loadFailed && <NoImage />}\n </MediaBoxWrapper>\n );\n};\n\nexport default MediaBox;","import React, {useCallback, VideoHTMLAttributes } from 'react';\nimport { IMediaType } from '..';\nimport MediaBox, { IMediaModal } from \"../Misc/atoms/MediaBox\";\nimport { useModal, IModal } from \"./useModal\";\n\n\nexport type ICreateMediaModal = IMediaModal & IModal;\n\nconst videoDefaultOptions: VideoHTMLAttributes<HTMLVideoElement> = { controls: true };\n\nexport const useMediaModal = () => {\n\n // default options for media box\n const { createModal, isModalOpen, setModalOpen } = useModal();\n\n async function isMediaUrlValid(src: string, mediaType: IMediaType): Promise<boolean> {\n let isValid = false;\n\n if (mediaType === 'img') {\n const img = new Image();\n img.src = src;\n try {\n await new Promise((resolve, reject) => {\n img.onload = () => resolve(isValid = true);\n img.onerror = reject;\n });\n } catch (error) {\n isValid = false;\n }\n }\n\n if (mediaType === 'video') {\n const videoElement = document.createElement('video');\n videoElement.src = src;\n\n try {\n await new Promise((resolve, reject) => {\n videoElement.oncanplaythrough = () => resolve(isValid = true);\n videoElement.onerror = reject;\n });\n\n } catch (error) {\n isValid = false;\n }\n }\n\n return isValid;\n }\n\n\n const createMediaModal = useCallback(async (mediaModal: ICreateMediaModal) => {\n const {\n src,\n mediaType,\n alt,\n videoOptions = videoDefaultOptions,\n onError,\n onMediaLoad,\n closeText,\n dismissCallback,\n retryLoading = false,\n retryLimit=5,\n minHeight='300px',\n minWidth='300px',\n } = mediaModal;\n\n createModal({\n padding: false,\n width: 'auto',\n closeText,\n dismissCallback,\n customComponent: (\n <MediaBox\n {...{\n src,\n mediaType,\n alt,\n videoOptions,\n onError,\n onMediaLoad,\n retryLoading,\n retryLimit,\n minHeight,\n minWidth,\n }}\n hasModalLimits\n />\n )\n });\n\n }, [createModal]);\n\n return {\n createMediaModal,\n isMediaUrlValid,\n isMediaModalOpen: isModalOpen,\n setMediaModalOpen: setModalOpen,\n };\n};","import { useCallback, useEffect, useState } from 'react';\n\nconst matchDark = '(prefers-color-scheme: dark)';\n\n//Current state of Dark changes to the opposite\nconst toggleThemeClass = (isDarkEnabled: boolean) => {\n\n if (isDarkEnabled) {\n document.body.classList.add('light-theme');\n document.body.classList.remove('dark-theme');\n } else {\n document.body.classList.add('dark-theme');\n document.body.classList.remove('light-theme');\n }\n};\n\nconst setInitial = () => {\n\n const localStorageTheme = localStorage.getItem('isDarkThemeEnabled');\n let startDark = true;\n\n if(localStorageTheme === null){\n startDark = window.matchMedia(matchDark) && window.matchMedia(matchDark).matches;\n } else {\n startDark = localStorageTheme !== 'false';\n }\n\n toggleThemeClass(!startDark);\n\n return startDark;\n};\n\nconst useThemeToggle = () => {\n\n const [isDarkThemeEnabled, setIsDarkThemeEnabled] = useState(setInitial);\n\n // toggle with Button\n const onThemeToggle = useCallback(() => {\n setIsDarkThemeEnabled((enabled) => {\n localStorage.isDarkThemeEnabled = !enabled;\n toggleThemeClass(enabled);\n\n return !enabled;\n });\n }, []);\n\n // Toggle when changing with OS and no local Storage variable has been set yet\n const osThemeToggle = useCallback((event: MediaQueryListEvent ) => {\n\n const localStorageTheme = localStorage.getItem('isDarkThemeEnabled');\n if(localStorageTheme !== null) { return; }\n\n const isDark = event.matches;\n\n setIsDarkThemeEnabled(() => {\n toggleThemeClass(!isDark);\n return isDark;\n });\n\n },[]);\n\n useEffect(() => {\n const matcher = window.matchMedia(matchDark);\n matcher.addEventListener('change', osThemeToggle);\n\n return () => {\n matcher.removeEventListener('change', osThemeToggle);\n };\n\n }, [onThemeToggle, osThemeToggle]);\n\n return {\n isDarkThemeEnabled,\n setIsDarkThemeEnabled,\n onThemeToggle,\n isLightMode: !isDarkThemeEnabled\n };\n\n};\n\nexport default useThemeToggle;\n","import React, { ButtonHTMLAttributes, Fragment, useCallback, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport SplitButtonOption from '../atoms/SplitButtonOption';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport { TypeButtonSizes, TypeButtonDesigns } from '..';\nimport { resetButtonStyles } from '../../common';\nimport { useClickOutside } from '../../hooks';\n\nconst TOGGLE_ICON_WIDTH = 30;\n\nconst Container = styled.div`\n height: var(--button-height);\n overflow: visible;\n`;\n\nconst ButtonsWrapper = styled.div<{ $isOpen: boolean }>`\n ${({ $isOpen }) => $isOpen && `z-index: 100`};\n font-family: var(--font-ui);\n position: relative;\n display: inline-flex;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n border-radius: 3px;\n border: 1px solid var(--border);\n background: linear-gradient(135deg, var(--gradient-1) 0%, var(--gradient-2) 100%);\n box-shadow: var(--button-lift-default-x, 0px) var(--button-lift-default-y, 2px) var(--button-lift-default-blur, 4px) var(--button-lift-default-spread, 2px) var(--button-lift-default-color, rgba(221, 234, 248, 0.08));\n`;\n\ninterface IButtonItem {\n id: string\n icon?: string\n text: string\n hasOnSelectLoading?: boolean\n onClickCallback?: () => void\n}\n\ntype ISplitButtonItem = IButtonItem & ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport interface ISplitButtonProps {\n mainButtonId: string\n buttonList: ISplitButtonItem[]\n isSortAscending?: boolean\n size?: TypeButtonSizes\n design?: TypeButtonDesigns | string\n textMaxWidth?: string\n disabled?: boolean\n}\n\nconst MainButtonWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n align-self: stretch;\n`;\n\nconst ToggleIcon = styled.button`\n ${resetButtonStyles}\n display: flex;\n height: var(--button-height);\n padding: 3px var(--button-icon-h-padding);\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n border-left: 1px solid var(--toggle-icon-border);\n cursor: pointer;\n\n ${IconWrapper} {\n svg {\n display: flex;\n justify-content: center;\n align-items: center;\n path, g {\n stroke: var(--toggle-icon);\n }\n }\n }\n\n &:hover:enabled {\n background: var(--toggle-icon-hover-bg);\n }\n\n &:active:enabled {\n background: var(--toggle-icon-active-bg);\n ${IconWrapper} {\n svg path, svg g {\n stroke: var(--toggle-icon-active);\n }\n }\n }\n\n &:disabled {\n cursor: not-allowed;\n\n ${IconWrapper} {\n svg path {\n stroke: var(--toggle-icon-disabled);\n }\n }\n }\n\n`;\n\nconst validateMaxWidth = (btnTextMaxWidth: number | null | undefined, textMaxWidth?: string): string | undefined => {\n\n if (textMaxWidth)\n return textMaxWidth;\n\n if (btnTextMaxWidth)\n return `${btnTextMaxWidth - TOGGLE_ICON_WIDTH}px`;\n\n return undefined;\n};\n\nconst SplitButton: React.FC<ISplitButtonProps> = ({ mainButtonId, buttonList, design = 'primary', size, textMaxWidth, disabled = false, ...rest }) => {\n\n const [isOpen, setIsOpen] = useState(false);\n const mainButtonRef = useRef<HTMLDivElement>(null);\n const buttonsWrapperRef = useRef<HTMLDivElement>(null);\n\n const toggleOpen = useCallback(() => {\n setIsOpen((prev) => !prev);\n }, []);\n\n const closeCallback = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n useClickOutside(buttonsWrapperRef, closeCallback);\n\n return (\n <Container>\n <ButtonsWrapper ref={buttonsWrapperRef} className={`split-button-${design} split-button-size-${size}`} $isOpen={isOpen} {...rest}>\n <MainButtonWrapper ref={mainButtonRef}>\n {buttonList.filter((button) => button.id === mainButtonId)\n .map(({ id, text, icon, disabled: disabledItemProp, ...props }) => (\n <SplitButtonOption\n key={id}\n noBorderTop\n disabled={disabled || disabledItemProp}\n closeCallback={closeCallback}\n icon={icon || 'NoIcon'}\n {...{ text, design }}\n {...props}\n />\n ))\n }\n <ToggleIcon onClick={toggleOpen} disabled={disabled}>\n {<Icon icon={isOpen ? 'Close' : 'Down'} size={8} />}\n </ToggleIcon>\n </MainButtonWrapper>\n {(isOpen && !disabled) ?\n <Fragment>\n {buttonList.filter((button) => button.id !== mainButtonId)\n .map(({ id, text, icon, disabled: disabledItemProp, ...props }) => (\n <SplitButtonOption\n key={id}\n icon={icon || 'NoIcon'}\n {...{ text, design }}\n disabled={disabledItemProp}\n textMaxWidth={validateMaxWidth(mainButtonRef.current?.clientWidth, textMaxWidth)}\n {...props}\n closeCallback={closeCallback}\n />\n ))\n }\n </Fragment>\n : null\n }\n </ButtonsWrapper>\n </Container>\n );\n};\n\nexport default SplitButton;","import React from 'react';\nimport styled from 'styled-components';\nimport ButtonWithIcon from '../atoms/ButtonWithIcon';\nimport Button from '../atoms/Button';\nimport { IButtonProps } from '..';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n button {\n text-wrap: nowrap;\n }\n`;\n\nexport type IButtonType = 'default' | 'icon-button'\n\nexport interface IButtonStack extends IButtonProps {\n id?: string\n buttonType?: IButtonType\n icon?: string\n iconPosition?: 'left' | 'right'\n text: string\n}\n\nexport interface IButtonsStack {\n buttons : IButtonStack[]\n}\n\nconst ButtonsStack : React.FC<IButtonsStack>= ({buttons}) => {\n return(\n <Container>\n {buttons.map(({id, buttonType, icon, text, iconPosition, size, ...buttonProps}) => {\n\n if(buttonType === 'icon-button')\n return <ButtonWithIcon key={id || `button-stack-${id}`} size={size || 'small'} icon={icon || ''} position={iconPosition} {...buttonProps} >{text}</ButtonWithIcon>;\n\n return <Button key={id || `button-stack-${id}`} size={size || 'small'} {...buttonProps} >{text}</Button>;\n\n })}\n </Container>\n );\n};\n\nexport default ButtonsStack;","import React, { useCallback, useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport {endOfDay, format,isEqual,min,set } from 'date-fns';\nimport {isNotNumber} from '../../helpers/index';\nimport Icon from '../../Icons/Icon';\n\nconst Container = styled.div<{$hide:boolean}>`\n display: flex;\n flex-direction: column;\n\n ${({$hide}) => $hide && css`\n display: none;\n `}\n`;\n\nconst Label = styled.label`\n font-family: var(--font-ui);\n text-align: left;\n font-size: 12px;\n font-weight: 500;\n text-decoration: none;\n color: var(--primary-10);\n padding: 12px;\n border-bottom: var(--grey-6) 1px solid;\n`;\n\nconst Item = styled.div`\n padding: 12px;\n display: flex;\n justify-content: left;\n`;\n\nconst IconWrap = styled.div`\n flex: 0 0 32px;\n align-items: center;\n display: flex;\n padding-top: 1px;\n`;\n\nconst Input = styled.input<{ readOnly? : boolean, $isTimeRangeValid: boolean, $isTimeInput?: boolean }>`\n font-family: var(--font-data);\n text-align: left;\n font-size: 14px;\n font-weight: 500;\n letter-spacing: 0.2px;\n text-decoration: none;\n color: var(--grey-12);\n background-color: transparent;\n\n width: 100%;\n border: ${({ $isTimeInput }) => $isTimeInput ?\n ({ $isTimeRangeValid }) => $isTimeRangeValid ? 'transparent 1px solid' : 'var(--warning-a9) 1px solid'\n : 'transparent 1px solid'\n };\n outline: none;\n flex: 1;\n justify-content: space-between;\n border-radius: 3px;\n\n &:focus, &:hover {\n\n border-color: ${({ $isTimeInput }) => $isTimeInput ?\n ({ $isTimeRangeValid }) => $isTimeRangeValid ? 'transparent' : 'var(--warning-a9)'\n : 'transparent'\n };\n }\n`;\n\nconst TimeColon = styled.div`\n flex: 0 0 20px;\n text-align: center;\n`;\n\nconst InputWrap = styled.div`\n display: flex;\n flex: 1;\n box-sizing: border-box;\n border-radius: 3px;\n\n &:focus-within {\n background: var(--primary-9);\n box-shadow: 0px 0px 0px 5px var(--primary-9); \n ${Input}{\n color: var(--white-1);\n border-color: transparent;\n }\n\n ${TimeColon}{\n color: var(--white-1);\n text-align: center;\n }\n }\n`;\n\ninterface IProps {\n title: string\n hasDate: boolean\n hasTime: boolean\n date?: Date\n setDateCallback?: (date: Date) => void\n setTimeCallback?: (date: Date) => void\n allowAfterMidnight?: boolean,\n isTimeRangeValid?: boolean,\n}\n\nconst DateTimeBlock : React.FC<IProps> = ({\n allowAfterMidnight = false,\n title,\n hasDate,\n hasTime,\n isTimeRangeValid = true,\n date = new Date(),\n setDateCallback = ()=>{},\n}) => {\n\n /**\n *\n * Description of the rules can be found int https://docs.google.com/spreadsheets/d/1POe9uZxKXtLhQFF6DIV-RclUp7T7oXgSeSLlbYmE38g/edit?usp=sharing\n */\n const validHourMin = (textHour: string, textMin: string, hasDate: boolean, allowAfterMidnight?: boolean): {newHour: number, newMin: number} => {\n\n const intHour = Number(textHour.slice(-2));\n const intMin = Number(textMin.slice(-2));\n\n const newHour = intHour > 24 ? Number(textHour.slice(-1)) : intHour;\n const newMin = intMin > 60 ? Number(textMin.slice(-1)) : intMin;\n\n //Rule 8\n if(newHour >= 24 && newMin !== -1 && allowAfterMidnight ) {\n return { newHour: 24, newMin: 0};\n }\n\n // Rule 7\n if(newHour === 0 && newMin === 0 && allowAfterMidnight && !hasDate) {\n return {newHour: 0, newMin: 1};\n }\n\n // Rule 6\n if(newHour === 23 && newMin === 60 && !allowAfterMidnight) {\n return { newHour:23, newMin: 59};\n }\n\n // Rule 5\n if(newHour >= 24 && !allowAfterMidnight) {\n return {newHour: 23, newMin};\n }\n\n // Rule 4\n if(newMin === 60) {\n return { newHour: newHour + 1, newMin: 0};\n }\n\n // Rule 3\n if(newHour > 0 && newMin === -1){\n return { newHour: newHour -1, newMin: 59};\n }\n\n // Rule 2\n if(newHour === 0 && newMin === -1) {\n return { newHour, newMin:0};\n }\n\n // Rule 1\n if(newHour === -1) {\n return {newHour: 0, newMin};\n }\n\n return { newHour, newMin };\n };\n\n\n const [displayHours, setDisplayHours] = useState<string>(format(date, \"mm\"));\n const [displayMinutes, setDisplayMinutes] = useState<string>(format(date,'HH'));\n\n const setDateHours = useCallback(({target: {value}}: React.ChangeEvent<HTMLInputElement>) => {\n\n if(isNotNumber(value)) {\n return;\n }\n\n const {newHour, newMin} = validHourMin(value, displayMinutes, hasDate, allowAfterMidnight);\n\n setDateCallback(\n min([\n endOfDay(date),\n set(date, {\n hours: newHour,\n minutes: newMin,\n seconds: 0,\n milliseconds: 0\n })\n ])\n );\n }, [allowAfterMidnight, date, displayMinutes, hasDate, setDateCallback]);\n\n const setDateMinutes = useCallback(({target: {value}}: React.ChangeEvent<HTMLInputElement>) => {\n\n if(isNotNumber(value)) {\n return;\n }\n\n const {newHour, newMin} = validHourMin(displayHours, value, hasDate, allowAfterMidnight);\n\n setDateCallback(\n min([\n endOfDay(date),\n set(date, {\n hours: newHour,\n minutes: newMin,\n seconds: 0,\n milliseconds: 0\n })\n ])\n );\n }, [allowAfterMidnight, date, displayHours, hasDate, setDateCallback]);\n\n useEffect(()=>{\n if(allowAfterMidnight && isEqual(date, endOfDay(date))){\n setDisplayHours('24');\n setDisplayMinutes('00');\n } else {\n setDisplayMinutes(format(date, 'mm'));\n setDisplayHours(format(date,'HH'));\n }\n },[date, allowAfterMidnight]);\n\n return (\n <Container $hide={!hasDate && !hasTime}>\n <Label>{title}</Label>\n\n {hasDate && (\n <Item>\n <IconWrap>\n <Icon icon='Date' color='dimmed' size={14} weight='light' />\n </IconWrap>\n <InputWrap>\n <Input type='text' readOnly value={format(date, \"yyyy/MM/dd\")} $isTimeRangeValid={isTimeRangeValid} />\n </InputWrap>\n </Item>\n )}\n\n {hasTime && (\n <Item>\n <IconWrap>\n <Icon icon='Time' color='dimmed' size={14} weight='light' />\n </IconWrap>\n <InputWrap>\n <Input name='hours' type='number' min='-1' max={allowAfterMidnight ? 24: 23} value={displayHours} onChange={setDateHours} $isTimeRangeValid={isTimeRangeValid} autoComplete='off' $isTimeInput />\n <TimeColon>:</TimeColon>\n <Input name='minutes' type='number' min='-1' max='60' value={displayMinutes} onChange={setDateMinutes} $isTimeRangeValid={isTimeRangeValid} autoComplete='off' $isTimeInput />\n </InputWrap>\n </Item>\n )}\n </Container>\n );\n};\n\nexport default DateTimeBlock;","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport Icon from '../../Icons/Icon';\nimport DateTimeBlock from '../atoms/DateTimeBlock';\n\nimport { format, startOfMonth, endOfMonth, eachDayOfInterval, isAfter, eachWeekOfInterval, addMonths, endOfWeek, intervalToDuration, isSameMonth, isSameDay, isToday, startOfDay, endOfDay, isWithinInterval, set, add, isEqual, Interval } from 'date-fns';\nimport { ja, enUS } from 'date-fns/locale';\nimport { resetButtonStyles } from '../../common';\nimport Button from '../../Form/atoms/Button';\nimport { IDateInterval, IDateRange } from '..';\n\n/**\n * Convert a single days duration to an interval.\n * @param day The day to convert to an interval\n */\n\nconst initializeInterval = (day: Date): IDateInterval => {\n return {\n start: set(day, { seconds: 0, milliseconds: 0 }),\n end: endOfDay(day)\n };\n};\n\nconst TODAY = new Date();\nconst TODAY_INTERVAL: IDateInterval = initializeInterval(startOfDay(new Date()));\n\ntype CellStates = \"off\" | \"single\" | \"start\" | \"end\" | \"inside\" | \"hover\" | \"insideHover\";\ntype DateMode = \"single\" | \"interval\";\ntype TimeMode = \"off\" | \"single\" | \"interval\";\n\n// interface TimeProperties {\n// hours: number\n// minutes: number\n// seconds: number\n// milliseconds: number\n// }\n\n// interface TimeRange {\n// start: TimeProperties\n// end: TimeProperties\n// }\n\nconst Container = styled.div`\n display: flex;\n`;\n\nconst DateTimeArea = styled.div`\n border-right: var(--grey-6) 1px solid;\n width: 170px;\n display: flex;\n flex-direction: column;\n`;\n\nconst TimeZoneOption = styled.div`\n border-top: var(--grey-6) 1px solid;\n margin-top: auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 11px;\n box-sizing: border-box;\n`;\n\nconst TimeZoneLabel = styled.div`\n font-family: var(--font-ui);\n text-align: left;\n font-size: 12px;\n font-weight: 400;\n color: var(--grey-11);\n`;\nconst TimeZoneValue = styled.div`\n font-family: var(--font-data);\n text-align: left;\n font-size: 12px;\n font-weight: 400;\n color: var(--grey-11);\n`;\n\nconst CalendarArea = styled.div`\n user-select: none;\n`;\n\nconst CalendarHeader = styled.div`\n display: flex;\n height: 70px;\n border-bottom: var(--grey-6) 1px solid;\n text-align: center;\n`;\n\nconst CurrentMonth = styled.div`\n flex: 1;\n flex-direction: column;\n display: flex;\n align-items: center;\n justify-content: center;\n\n text-align: center;\n font-size: 20px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: 0.5px;\n color: var(--primary-10);\n\n span {\n display: block;\n flex: 0;\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.33px;\n }\n`;\n\nconst IconWrap = styled.div`\n [stroke]{\n stroke: var(--grey-8);\n }\n`;\n\nconst PaginateMonth = styled.button`\n cursor: pointer;\n flex: 0 0 72px;\n border: none;\n background: transparent;\n outline: none;\n text-align: center;\n font-size: 12px;\n font-weight: 700;\n line-height: 20px;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--grey-10);\n display: flex;\n justify-content: space-around;\n align-items: center;\n\n transition: color var(--speed-fast) var(--easing-primary-in-out);\n\n ${IconWrap}{\n svg * {\n transition: stroke var(--speed-fast) var(--easing-primary-in-out);\n }\n }\n\n &:hover:enabled {\n color: var(--grey-12);\n\n ${IconWrap}{\n [stroke]{\n stroke: var(--grey-12);\n }\n }\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n`;\n\nconst CalBody = styled.div`\n padding: 5px 0;\n`;\n\nconst CalButtons = styled.div`\n display: flex;\n padding: 4px;\n justify-content: flex-end;\n align-items: flex-start;\n gap: 4px;\n align-self: stretch;\n border-top: 1px solid var(--grey-6);\n`;\n\nconst CalRightButtons = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n`;\n\nconst CalRow = styled.div`\n display: grid;\n grid-template-columns: repeat(7, 40px);\n height: 40px;\n box-sizing: border-box;\n\n padding: 0 10px;\n`;\n\nconst CalHRow = styled(CalRow)`\n border-bottom: var(--grey-6) 1px solid;\n`;\n\nconst CalCell = styled.button`\n ${resetButtonStyles};\n display: flex;\n text-align: center;\n justify-content: center;\n align-items: center;\n border-radius: 5px;\n font-size: 14px;\n font-weight: 400;\n text-decoration: none;\n color: var(--grey-12);\n font-family: var(--font-data);\n`;\n\nconst CalHCell = styled(CalCell)`\n text-align: center;\n font-size: 12px;\n font-weight: 700;\n color: var(--grey-a11);\n`;\n\nconst ContentDot = styled.div<{ $hasContent: boolean, $state?: CellStates, $isToday?: boolean, }>`\n position: absolute;\n left: 18px;\n bottom: 5px;\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background-color: var(--primary-11);\n\n ${({ $state }) => ($state === 'single' || $state === 'start' || $state === 'end') && css`\n background-color: var(--white-12);`\n }\n\n ${({ $state }) => ($state === 'inside') && css`\n background-color: var(--primary-12);`\n }\n\n ${({ $isToday }) => $isToday && css`\n left: 16px;\n bottom: 3px;\n `}\n\n ${({ $hasContent }) => !$hasContent && css`\n display: none;\n `}\n`;\n\nconst DayText = styled.span`\n transform: translateY(-1px);\n`;\n\nconst CalCellB = styled(CalCell) <{ $thisMonth?: boolean, $isToday?: boolean, $state?: CellStates }>`\n cursor: pointer;\n position: relative;\n text-align: center;\n font-size: 14px;\n font-weight: 400;\n\n ${({ $thisMonth }) => !$thisMonth && css`\n color: var(--grey-a8);\n `}\n\n ${({ $isToday }) => $isToday && css`\n border: 2px solid var(--primary-a7);\n `}\n\n ${({ $state }) => ($state !== 'single' && $state !== 'start' && $state !== 'end') && css`\n &:hover:enabled {\n background: var(--primary-a6);\n color: var(--white-1);\n }\n `};\n\n ${({ $state }) => ($state === 'single' || $state === 'start' || $state === 'end') && css`\n background: var(--primary-9);\n color: var(--white-1);\n `}\n\n ${({ $state }) => ($state === 'start') && css`\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n `}\n\n ${({ $state }) => ($state === 'end') && css`\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n `}\n\n ${({ $state }) => ($state === 'insideHover') && css`\n background: var(--primary-a9) !important;\n color: var(--white-1);\n `}\n\n ${({ $state }) => ($state === 'inside') && css`\n background: var(--primary-a5);\n border-radius: 0;\n opacity: 1;\n\n &:nth-child(7n+1), &:nth-child(7n){\n &::after {\n background: var(--primary-a5);\n display: block;\n content: '';\n position: absolute;\n left: -10px;\n width: 10px;\n top: 0;\n height: 40px;\n }\n }\n\n &:nth-child(7n)::after {\n left: auto;\n right: -10px;\n }\n `}\n\n &:disabled {\n color: var(--grey-6);\n cursor: not-allowed;\n\n ${({ $state }) => ($state === 'single' || $state === 'start' || $state === 'end') && css`\n color: var(--white-1);\n background: var(--red-a9);\n `}\n\n ${({ $state }) => ($state === 'inside') && css`\n color: var(--white-1);\n background: var(--red-a7);\n &:nth-child(7n+1), &:nth-child(7n){\n &::after {\n background: var(--red-a7);\n }\n }\n `};\n }\n\n`;\n\nconst enDayGuide: string[] = [\n \"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"\n];\n\nconst jpDayGuide: string[] = ['日', '月', '火', '水', '木', '金', '土'];\n\n\n\n\nexport interface IDatePicker {\n initialValue?: Date | IDateInterval\n dateMode?: DateMode\n timeMode?: TimeMode\n hasEmptyValue?: boolean\n dateTimeTextUpper?: string\n dateTimeTextLower?: string\n timeZoneTitle?: string\n timeZoneValueTitle?: string\n availableRange?: IDateRange\n contentDays?: Date[]\n lang?: 'en' | 'ja'\n cancelText?: string\n applyText?: string\n hasApply?: boolean\n disableApply?: boolean\n updateCallback?: (data: IDateInterval | Date) => void\n applyCallback?: () => void\n cancelCallback?: () => void\n}\n\nconst DatePicker: React.FC<IDatePicker> = ({\n dateMode = 'interval',\n timeMode = 'interval',\n dateTimeTextUpper = 'From',\n dateTimeTextLower = 'To',\n timeZoneTitle = 'Timezone',\n timeZoneValueTitle = 'JST',\n hasEmptyValue = false,\n updateCallback = () => { },\n initialValue,\n availableRange,\n contentDays,\n lang = 'en',\n cancelText = 'Cancel',\n applyText = 'Apply',\n hasApply = false,\n disableApply = false,\n applyCallback = () => { },\n cancelCallback = () => { }\n}) => {\n\n // TODO: Have a function to output tidied up data for the configuration.\n\n const [selectedRange, setSelectedRange] = useState<IDateInterval | null>(getInitialValue(hasEmptyValue, initialValue));\n const [focusedMonth, setFocusedMonth] = useState(selectedRange === null ? TODAY : selectedRange.start);\n const [targetedDate, setTargetedDate] = useState<'start' | 'end' | 'done'>('start');\n const [weeksOfMonth, setWeeksOfMonth] = useState<Date[]>([]);\n const isInitialMount = useRef(true);\n const [isTimeRangeValid, setIsTimeRangeValid] = useState<boolean>(true);\n const dayGuide = lang === 'ja' ? jpDayGuide : enDayGuide;\n\n useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n } else {\n const now = new Date();\n setSelectedRange(initializeInterval(startOfDay(now)));\n setFocusedMonth(now);\n }\n\n }, [dateMode, timeMode]);\n\n useEffect(() => {\n setWeeksOfMonth(eachWeekOfInterval({\n start: startOfMonth(focusedMonth),\n end: endOfMonth(focusedMonth)\n }));\n }, [focusedMonth]);\n\n useEffect(() => {\n if (selectedRange !== null) {\n updateCallback((dateMode === 'interval' || timeMode === 'interval') ? selectedRange : selectedRange.start);\n }\n }, [dateMode, selectedRange, timeMode, updateCallback]);\n\n /**\n * Handler for updating picked dates when a calendar day has been selected.\n * @param day The day of the cell that has been clicked / actioned.\n */\n const onCellClick = useCallback((day: Date) => {\n\n // The first click will initialize the range when empty is valid\n const validRange = selectedRange ? selectedRange : TODAY_INTERVAL;\n\n if (dateMode === 'single') {\n\n // === Single Mode ===\n const start = updateDay(validRange.start, day);\n const end = updateDay(validRange.end, day);\n setSelectedRange({\n start,\n end\n });\n } else {\n\n // === Interval Mode ===\n // Setting the interval end (assuming it's later than the start).\n if (targetedDate === 'end' && isAfter(day, validRange.start)) {\n const end = updateDay(validRange.end, day);\n setSelectedRange({\n ...validRange,\n end\n });\n\n setTargetedDate('done');\n\n // For first interaction || setting the end date correctly || if completed and restarting.\n } else if (targetedDate === 'start' || targetedDate === 'end' || targetedDate === 'done') {\n\n const start = updateDay(validRange.start, day);\n const end = updateDay(validRange.end, day);\n setSelectedRange({\n start,\n end\n });\n setTargetedDate('end');\n\n }\n }\n }, [dateMode, selectedRange, targetedDate]);\n\n useEffect(() => {\n const { start, end } = selectedRange ? selectedRange : TODAY_INTERVAL;\n\n if ((timeMode === 'interval' && isAfter(add(start, { minutes: 1 }), end))) {\n if (isEqual(end, endOfDay(start)) && end.getSeconds() > 0) { // Midnight exception\n setIsTimeRangeValid(true);\n } else {\n setIsTimeRangeValid(false);\n }\n\n } else {\n setIsTimeRangeValid(true);\n }\n\n }, [selectedRange, timeMode]);\n\n const updateStartDate = useCallback((start: Date) => {\n const { end } = selectedRange ? selectedRange : TODAY_INTERVAL;\n\n setSelectedRange({ start, end });\n }, [selectedRange]);\n\n const updateEndDate = useCallback((end: Date) => {\n const { start } = selectedRange ? selectedRange : TODAY_INTERVAL;\n\n setSelectedRange({ start, end });\n }, [selectedRange]);\n\n return (\n <Container>\n\n <DateTimeArea>\n <DateTimeBlock {...{ isTimeRangeValid }} title={dateTimeTextUpper} hasDate hasTime={timeMode !== 'off'} date={selectedRange ? selectedRange.start : TODAY_INTERVAL.start} setDateCallback={updateStartDate} />\n <DateTimeBlock {...{ isTimeRangeValid }} title={dateTimeTextLower} hasDate={dateMode === 'interval'} hasTime={timeMode === 'interval'} date={selectedRange ? selectedRange.end : TODAY_INTERVAL.end} allowAfterMidnight setDateCallback={updateEndDate} />\n\n <TimeZoneOption>\n <TimeZoneLabel>{timeZoneTitle}</TimeZoneLabel>\n <TimeZoneValue>{timeZoneValueTitle}</TimeZoneValue>\n </TimeZoneOption>\n\n </DateTimeArea>\n\n <CalendarArea>\n <CalendarHeader>\n\n <PaginateMonth type='button' disabled={isPrevMonthOutOfRange(focusedMonth, availableRange)} onClick={() => setFocusedMonth(addMonths(focusedMonth, -1))}>\n <IconWrap><Icon icon='Left' color='dimmed' size={10} /></IconWrap>\n {format(addMonths(focusedMonth, -1), \"MMM\", { locale: lang === 'ja' ? ja : enUS })}\n </PaginateMonth>\n\n <CurrentMonth>\n <span>{format(focusedMonth, \"yyyy\")}</span>\n {format(focusedMonth, \"MMMM\", { locale: lang === 'ja' ? ja : enUS })}\n </CurrentMonth>\n\n <PaginateMonth type='button' disabled={isNextMonthOutOfRange(focusedMonth, availableRange)} onClick={() => setFocusedMonth(addMonths(focusedMonth, 1))}>\n {format(addMonths(focusedMonth, 1), \"MMM\", { locale: lang === 'ja' ? ja : enUS })}\n <IconWrap><Icon icon='Right' color='dimmed' size={10} /></IconWrap>\n </PaginateMonth>\n\n </CalendarHeader>\n\n <CalHRow>\n {dayGuide.map((day, index) => {\n return <CalHCell key={index}>{day}</CalHCell>;\n })}\n </CalHRow>\n\n <CalBody>\n {weeksOfMonth.map((week, index) => {\n const days = eachDayOfInterval({\n start: week,\n end: endOfWeek(week)\n });\n\n return (\n <CalRow key={index}>\n {days.map((day, index) => {\n const dayState = cellState(day, selectedRange);\n const isTodayValue = isToday(day);\n\n return (\n <CalCellB\n key={index}\n disabled={isDayOutOfRange(day, availableRange)}\n onClick={() => onCellClick(day)}\n $state={dayState}\n $thisMonth={isSameMonth(day, focusedMonth)}\n $isToday={isTodayValue}>\n <DayText>\n {format(day, \"d\")}\n </DayText>\n <ContentDot $hasContent={dayHasContent(day, contentDays)} $state={dayState} $isToday={isTodayValue} />\n </CalCellB>\n );\n })}\n </CalRow>\n );\n })}\n </CalBody>\n\n {hasApply && (\n <CalButtons>\n {hasApply && (\n <CalRightButtons>\n <Button design='secondary' onClick={cancelCallback}>{cancelText}</Button>\n <Button onClick={applyCallback} disabled={!isTimeRangeValid || selectedRange === null || disableApply }>{applyText}</Button>\n </CalRightButtons>)\n }\n </CalButtons>)\n }\n\n </CalendarArea>\n </Container>\n );\n\n};\n\nexport default DatePicker;\n\n/**\n * Used to work out the state of the calendar cell in regards to selection or position in\n * the date range.\n * @param day Date - The date of the cell in the calendar.\n * @param interval Interval - The date range that is active in the calendar.\n */\nconst cellState = (day: Date, interval: Interval | null, _hoverDate?: Date): CellStates => {\n\n let state: CellStates = \"off\";\n let isInsideInterval = false;\n\n if (interval === null) {\n return state;\n }\n\n const singleDayRange: boolean = intervalToDuration(interval).days === 0;\n\n try {\n isInsideInterval = isWithinInterval(day, interval);\n } catch (error) {\n isInsideInterval = false;\n }\n\n if (isInsideInterval || isSameDay(interval.start, day)) {\n\n if (singleDayRange) {\n state = \"single\";\n } else if (isSameDay(interval.start, day)) {\n state = \"start\";\n } else if (isSameDay(interval.end, day)) {\n state = \"end\";\n } else {\n state = \"inside\";\n }\n }\n\n return state;\n};\n\nconst updateDay = (date: Date, target: Date) => {\n\n const newDate = set(target, {\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n milliseconds: date.getMilliseconds(),\n });\n\n return newDate;\n};\n\nconst getInitialValue = (hasEmptyValue: boolean, initialValue?: Date | IDateInterval): IDateInterval | null => {\n if (hasEmptyValue && initialValue === undefined) {\n return null;\n }\n\n const validInitial = initialValue ? initialValue : initializeInterval(startOfDay(new Date()));\n\n return (validInitial instanceof Date) ? initializeInterval(validInitial) : validInitial;\n};\n\nconst isPrevMonthOutOfRange = (focusedMonth: Date, availableRange?: IDateRange): boolean => {\n if (!availableRange?.start) return false;\n\n try {\n const startYear = availableRange.start.getFullYear();\n const startMonth = availableRange.start.getMonth();\n\n if (focusedMonth.getFullYear() < startYear ||\n (focusedMonth.getFullYear() === startYear && focusedMonth.getMonth() <= startMonth)) {\n return true;\n }\n } catch (error) {\n console.warn('Invalid available range:', availableRange, error);\n }\n\n return false;\n};\n\nconst isNextMonthOutOfRange = (focusedMonth: Date, availableRange?: IDateRange): boolean => {\n if (!availableRange?.end) return false;\n\n try {\n const endYear = availableRange.end.getFullYear();\n const endMonth = availableRange.end.getMonth();\n\n if (focusedMonth.getFullYear() > endYear ||\n (focusedMonth.getFullYear() === endYear && focusedMonth.getMonth() >= endMonth)) {\n return true;\n }\n } catch (error) {\n console.warn('Invalid available range:', availableRange, error);\n }\n\n return false;\n};\n\n\nconst isDayOutOfRange = (currentDay: Date, availableRange?: IDateRange): boolean => {\n if (!availableRange) return false;\n\n const { start, end } = availableRange;\n\n try {\n if (start && currentDay < start && !isSameDay(currentDay, start)) {\n return true;\n }\n\n if (end && currentDay > end && !isSameDay(currentDay, end)) {\n return true;\n }\n } catch (error) {\n console.warn('Invalid available range:', availableRange, error);\n }\n\n return false;\n};\n\nconst dayHasContent = (currentDay: Date, contentDays?: Date[]): boolean => {\n if (!contentDays) return false;\n\n return contentDays.some(day => isSameDay(currentDay, day));\n};","import React, { HTMLAttributes } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div<{ $height?: string }>`\n box-shadow: 0px 5px 25px 0px var(--filter-button-shadow-color);\n background-color: var(--filter-dropdown-background-color-fallback);\n @supports( background-color: var(--filter-dropdown-background-color) ){\n background-color: var(--filter-dropdown-background-color);\n };\n\n backdrop-filter: blur(20px);\n border-right: 1px solid var(--grey-6);\n border-bottom: 1px solid var(--grey-6);\n border-left: 1px solid var(--grey-6);\n border-radius: 3px;\n position: relative;\n display: inline-flex;\n overflow: visible;\n padding-top: 5px;\n\n &::before {\n content: '';\n background-color: var(--filter-dropdown-accent);\n border-radius: 3px 3px 0 0;\n box-shadow: 0px 5px 25px 0px var(--primary-a5);\n\n display: block;\n height: 5px;\n position: absolute;\n left: -1px;\n top: -1px;\n right: -1px;\n z-index: 1;\n }\n\n`;\n\nconst Inner = styled.div`\n display: inline-flex;\n flex-direction: column;\n`;\n\ninterface IProps {\n $height?: string\n}\n\ntype Props = IProps & HTMLAttributes<HTMLDivElement>\n\nconst FilterDropdownContainer : React.FC<Props> = ({children,...props}) => {\n return (\n <Container {...props}>\n <Inner>\n <>{children}</>\n </Inner>\n </Container>\n );\n};\n\nexport default FilterDropdownContainer;","import React, { ButtonHTMLAttributes } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport { animation } from '../../theme/common';\nimport { FilterButtonDesign } from '../FilterTypes';\n\nconst LeftIconWrapper = styled.div<{ $isSortAscending: boolean }>`\n ${({ $isSortAscending }) => $isSortAscending && css`\n transform: scaleY(-1);\n `};\n padding: 0 6px;\n`;\n\nconst fadeInAnimation = keyframes`\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nconst FlipArrowContainer = styled.div<{ $design?: FilterButtonDesign }>`\n ${({ $design }) => $design === 'default' ?\n `padding: 0px 12px 0px 8px;`\n :\n `padding: 0px 8px;`\n };\n`;\n\nconst StyledButton = styled.button<{ $isOpen?: boolean, $hasFlipArrow?: boolean, $design?: FilterButtonDesign }>`\n ${resetButtonStyles};\n border-radius: 3px;\n height: var(--common-height);\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n padding: 4px 10px 4px 4px;\n\n ${({ $design }) => $design === 'basic' ?\n `\n background-color: transparent;\n border: 1px solid transparent;\n padding: 4px;\n `\n :\n `\n background-color: var(--filter-button-background-color);\n border: var(--filter-button-stroke-color) 1px solid;\n box-shadow: 0px 4px 9px 0px var(--filter-button-shadow-color);\n `\n };\n\n ${({ $hasFlipArrow }) => $hasFlipArrow && `padding: 4px 0px 4px 4px;`};\n\n text-align: left;\n font-size: 12px;\n font-weight: 500;\n text-decoration: none;\n color: var(--filter-button-text-color);\n font-family: var(--font-ui);\n transition:\n opacity ${animation.speed.fast} ${animation.easing.primary.out},\n background-color ${animation.speed.fast} ${animation.easing.primary.out},\n box-shadow ${animation.speed.fast} ${animation.easing.primary.out},\n color ${animation.speed.fast} ${animation.easing.primary.out},\n border ${animation.speed.fast} ${animation.easing.primary.out};\n\n animation: ${fadeInAnimation} ${animation.speed.slower} ${animation.easing.primary.out};\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n [stroke]{\n transition: stroke ${animation.speed.fast} ${animation.easing.primary.out};\n }\n }\n\n &:hover:enabled, &:active:enabled {\n color: var(--grey-12);\n\n ${({$design}) => $design === 'basic'? '' : css`\n box-shadow: 0px 4px 9px 0px var(--primary-a2);\n border-color: var(--primary-7);\n `};\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--primary-9);\n }\n }\n\n ${({$isOpen}) => !$isOpen && css`\n ${FlipArrowContainer} ${IconWrapper} {\n [stroke]{\n stroke: var(--grey-12);\n }\n };\n `};\n\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 50%;\n }\n\n ${({ $isOpen, $hasFlipArrow }) => $isOpen && $hasFlipArrow && css`\n background-color: var(--primary-9);\n border: solid 1px var(--primary-9);\n color: var(--white-1);\n\n &, &:hover:enabled, &:active:enabled {\n color: var(--white-1);\n ${IconWrapper} {\n [stroke]{\n stroke: var(--white-1);\n }\n }\n }\n\n ${FlipArrowContainer} ${IconWrapper} {\n [stroke]{\n stroke: var(--white-1);\n }\n };\n `};\n\n`;\n\n\n\nconst InnerContainer = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n`;\n\nconst ButtonText = styled.div<{ $hasFlipArrow: boolean }>``;\n\ninterface OwnProps {\n icon: string\n hasFlipArrow?: boolean\n isSortAscending?: boolean\n isOpen?: boolean\n design?: FilterButtonDesign\n}\n\ntype IFilterButton = OwnProps & ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst FilterButton: React.FC<IFilterButton> = ({\n icon,\n hasFlipArrow = false,\n isSortAscending = false,\n isOpen,\n design = 'default',\n children,\n formAction,\n ...props\n}) => {\n\n return (\n <StyledButton type='button' {...props} $isOpen={isOpen} $hasFlipArrow={hasFlipArrow} $design={design}>\n <InnerContainer>\n <LeftIconWrapper $isSortAscending={isSortAscending}>\n <Icon\n icon={icon}\n size={12}\n weight='light'\n color='filter-button-icon-color'\n />\n </LeftIconWrapper>\n <ButtonText $hasFlipArrow={hasFlipArrow}><>{children}</></ButtonText>\n\n {hasFlipArrow && <FlipArrowContainer $design={design}><Icon icon={isOpen ? 'Up' : 'Down'} size={6} color='grey-11' /></FlipArrowContainer>}\n\n </InnerContainer>\n </StyledButton>\n );\n};\n\nexport default FilterButton;","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { CheckMark } from '../../svg';\nimport { IInputOptionsType } from '..';\nimport { dimensions } from '../../theme/common';\n\nconst Title = styled.div`\n font-family: var(--font-ui);\n display: block;\n color: var(--grey-12);\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n pointer-events: none;\n white-space: nowrap;\n`;\n\nconst FakeCheckbox = styled.div`\n box-sizing: border-box;\n position: relative;\n width: 18px;\n height: 18px;\n border-radius: 5px;\n border-width: 2px;\n border-style: solid;\n`;\n\nconst FakeCheckboxInner = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n box-sizing: border-box;\n`;\n\nconst CheckMarkWrapper = styled.div`\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n svg {\n display: block;\n [stroke]{\n stroke: transparent;\n }\n [fill] {\n fill: var(--inverse);\n }\n }\n`;\n\nconst FakeRadioButton = styled.div`\n position: relative;\n display: inline-block;\n width: 18px;\n height: 18px;\n user-select: none;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border-width: 2px;\n border-style: solid;\n`;\n\nconst FakeInnerRadio = styled.div`\n width: 10px;\n height: 10px;\n border-radius: 50%;\n user-select: none;\n`;\n\nconst Container = styled.div<{ $disabled: boolean, $selected: boolean }>`\n display: flex;\n align-items: center;\n height: 100%;\n width: 100%;\n gap: 12px;\n\n ${({ $selected, $disabled }) => css`\n \n ${FakeCheckbox}, ${FakeRadioButton} {\n border-color: var(--input-toggle-unchecked-border-color);\n }\n\n &:hover {\n cursor: pointer;\n ${Title} {\n color: var(--input-label-hover);\n }\n\n ${FakeCheckbox}, ${FakeRadioButton} {\n border-color: var(--input-toggle-unchecked-hover-border-color);\n ${FakeInnerRadio}, ${FakeCheckboxInner} {\n background-color: var(--input-toggle-unchecked-background-color);\n }\n }\n }\n\n ${$selected && css`\n ${Title} {\n color: var(--input-label-active);\n font-weight: 600;\n }\n\n ${FakeCheckbox}, ${FakeRadioButton} {\n border-color: var(--input-toggle-checked-border-color);\n ${FakeInnerRadio}, ${FakeCheckboxInner} {\n background-color: var(--input-toggle-checked-background-color);\n }\n }\n \n &:hover {\n cursor: pointer;\n ${Title} {\n color: var(--input-label-hover);\n }\n\n ${FakeCheckbox}, ${FakeRadioButton} {\n border-color: var(--input-toggle-checked-hover-border-color);\n ${FakeInnerRadio}, ${FakeCheckboxInner} {\n background-color: var(--input-toggle-checked-hover-background-color);\n }\n }\n }\n \n\n `};\n\n ${$disabled && css`\n cursor: not-allowed;\n `};\n\n ${FakeCheckbox}, ${FakeRadioButton} {\n transition: border-color var(--speed-faster) var(--easing-primary-out);\n }\n\n ${FakeInnerRadio} {\n transition: background-color var(--speed-faster) var(--easing-primary-out);\n }\n\n ${Title}{\n transition: color var(--speed-faster) var(--easing-primary-out);\n }\n \n `};\n`;\n\ninterface IFilterOption {\n title: string\n value?: string | number\n optionType?: IInputOptionsType\n selected?: boolean\n disabled?: boolean\n onClick?: () => void\n}\n\nconst FilterOption: React.FC<IFilterOption> = ({\n title,\n value,\n optionType = \"text\",\n selected = false,\n disabled = false,\n onClick = () => { },\n ...props\n}) => {\n\n const iconWeight: number = dimensions.icons.weights['regular'];\n\n return (\n\n <Container\n onClick={onClick}\n $disabled={disabled}\n $selected={selected}\n {...props}\n >\n {(optionType === 'checkbox') && (\n <FakeCheckbox>\n <FakeCheckboxInner>\n {selected && <CheckMarkWrapper><CheckMark color='inverse' stroke='inverse' size={12} weight={iconWeight} /></CheckMarkWrapper>}\n </FakeCheckboxInner>\n </FakeCheckbox>\n )}\n {(optionType === 'radio') && <FakeRadioButton><FakeInnerRadio /></FakeRadioButton>}\n <Title>{title}</Title>\n </Container>\n );\n};\n\nexport default FilterOption;","import React, { InputHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport { removeAutoFillStyle, resetButtonStyles } from '../../common';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\n\nconst IconContainer = styled.div`\n padding: 0 2px;\n`;\n\nconst Container = styled.div<{ $hasBorder: boolean, $disabled: boolean, $noBackground: boolean, $width?: string }>`\n ${({ $hasBorder, $disabled, $noBackground, $width }) => css`\n\n transition: all var(--speed-normal) var(--easing-primary-in);\n gap: var(--search-input-container-gap, 6px);\n height: var(--input-compact-height);\n padding: 0;\n align-items: center;\n display: flex;\n border-radius: 3px;\n\n ${$hasBorder && css`\n padding: 0 8px;\n border: 1px solid var(--filter-button-stroke-color);\n box-shadow: 0px 4px 9px 0px var(--filter-button-shadow-color);\n\n &:hover {\n border: var(--primary-7) 1px solid;\n box-shadow: 0px 4px 9px 0px var(--primary-a2);\n\n }\n ${IconContainer}{\n padding: 0;\n }\n `};\n\n ${$disabled && css`\n opacity: 50%;\n cursor: not-allowed;\n `\n };\n\n ${$width && css`\n width: ${$width};\n `};\n\n background-color: ${$noBackground ? 'transparent' : 'var(--grey-1)'};\n\n &:focus-within {\n background-color: ${$noBackground ? 'transparent' : 'var(--grey-1)'};\n border: ${$hasBorder ? '1px solid var(--primary-9)' : 'none'};\n box-shadow: 0px 4px 9px 0px ${$noBackground ? 'transparent' : 'var(--primary-a2)'};\n }\n\n `};\n\n ${IconWrapper} {\n flex-shrink: 0;\n display: flex;\n }\n\n\n`;\n\nconst CrossButton = styled.button`\n ${resetButtonStyles};\n flex-shrink: 0;\n flex-grow: 0;\n flex-basis: auto;\n width: 26px;\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n`;\n\n\n\nconst StyledInput = styled.input<{ $color: string }>`\n ${removeAutoFillStyle};\n\n font-family: var(--search-input-font-family,var(--font-ui));\n font-size: var(--search-input-font-size, 12px);\n font-weight: 500;\n color: var(--grey-12);\n\n &::placeholder {\n ${({$color}) => $color && `color: var(--${$color})`};\n color: var(--grey-11);\n font-style: italic;\n }\n\n &:lang(ja)::placeholder {\n font-style: normal;\n };\n\n &:disabled {\n cursor: not-allowed;\n }\n\n border: none;\n height: 100%;\n width: 100%;\n background-color: transparent;\n box-sizing: border-box;\n border-radius: 3px;\n outline: none;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n`;\n\ninterface OwnProps {\n color?: 'mono' | 'dimmed' | 'subtle';\n hasBorder?: boolean\n iconSize?: number\n noBackground?: boolean\n width?: string\n hasCrossButton?: boolean\n onCrossClick?: () => void\n}\n\nexport type IBasicSearchInput = OwnProps & InputHTMLAttributes<HTMLInputElement>\n\nconst BasicSearchInput: React.FC<IBasicSearchInput> = ({\n color = 'subtle',\n hasBorder = true,\n iconSize = 12,\n disabled = false,\n noBackground = false,\n hasCrossButton = false,\n onCrossClick = () => {},\n width,\n children,\n formAction,\n ...props\n}) => {\n return (\n <Container {...{ $hasBorder: hasBorder, $disabled: disabled, $noBackground: noBackground, $width: width }}>\n <IconContainer>\n <Icon {...{ color }} icon='Search' weight='regular' size={iconSize} />\n </IconContainer>\n <StyledInput\n {...{ $color: color, disabled }}\n {...props}\n />\n {hasCrossButton && <CrossButton onClick={onCrossClick}> <Icon icon='CloseCompact' color='dimmed' size={12} /></CrossButton>}\n </Container>\n );\n};\n\nexport default BasicSearchInput;","import { IInputOptionsType } from '../Form';\nimport { IBasicSearchInput } from '../Misc/atoms/BasicSearchInput';\nimport { IDropdownDatePicker } from './molecules/DropdownDatePicker';\nimport { IFilterDropdown } from './molecules/FilterDropdown';\nimport { IDateInterval } from '.';\nimport { IFilterFooterControls } from './atoms/FooterControls';\n\ntype IFilterItem = { text: string; value: string | number; }\ntype IFilterValue = IFilterItem | IFilterItem[] | null;\ntype IFilterType = 'search' | 'dropdown' | 'datepicker';\ntype IToggleOption = { text: string; value: string | number; icon: string }\n\n// Type checking for IFilterItem\n// https://stackoverflow.com/questions/14425568/interface-type-check-with-typescript\nconst isFilterItem = (item: any): item is IFilterItem => {\n if (item === null || item === undefined) { return false; }\n\n if (item.value === undefined || item.value === null) {\n return false;\n }\n\n if (item.text === null) {\n return false;\n }\n\n return ((typeof item.value === 'number') || (typeof item.value === 'string')) && (typeof item.text === 'string');\n};\n\ninterface IFilterResult {\n id: string\n type: IFilterType\n selected: IFilterItem | IFilterItem[] | IDateInterval | Date | null;\n}\n\ninterface ISearchFilter extends IBasicSearchInput {\n id: string\n canHide?: boolean\n showFieldText?: string\n selected?: IFilterItem\n}\n\ninterface IFilterDropdownExt extends IFilterDropdown {\n id: string\n canHide?: boolean\n}\n\ninterface IFilterDatePicker extends IDropdownDatePicker {\n id: string\n canHide?: boolean\n name?: string\n}\n\ninterface IFilterDropdownConfig extends IFilterFooterControls {\n id: string\n canHide?: boolean\n buttonIcon: string\n buttonText: string\n list: IFilterItem[];\n selected?: IFilterValue;\n disabled?: boolean\n optionType?: IInputOptionsType\n isLoading?: boolean\n loadingText?: string\n hasOptionsFilter?: boolean\n searchPlaceholder?: string\n maxDisplayedItems?: number\n emptyResultText?: string\n searchResultText?: string\n name?: string\n design?: FilterButtonDesign\n ascendingText?: string\n descendingText?: string\n isListAscending?: boolean\n onResetCallback?: () => void\n onCancelCallback?: () => void\n}\n\ntype FilterButtonDesign = 'default' | 'basic'\n\nexport {\n isFilterItem\n};\n\nexport type {\n IFilterType,\n IFilterItem,\n IFilterResult,\n IFilterValue,\n ISearchFilter,\n IFilterDropdownExt,\n IFilterDatePicker,\n IFilterDropdownConfig,\n IToggleOption,\n FilterButtonDesign,\n};","import React, { useState, useRef, useCallback, forwardRef, useImperativeHandle } from 'react';\nimport styled, { css } from 'styled-components';\nimport FilterButton from '../atoms/FilterButton';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { FilterButtonDesign } from '../FilterTypes';\n\nconst Container = styled.div`\n position: relative;\n`;\n\nconst ButtonWrapper = styled.div`\n display: inline-block;\n`;\n\nconst ContentBox = styled.div<{ $openState: IDropOpen, $disabled: boolean, $minWidth: number }>`\n z-index: 100;\n min-width: ${({ $minWidth }) => $minWidth}px;\n position: absolute;\n\n ${({ $openState, $disabled }) => $openState && css`\n display: ${$openState.isOpen ? 'inline-block' : 'none'};\n display: ${$disabled && 'none'};\n\n ${$openState.position === 'bottom-right' && `\n bottom: 0;\n left: 0;\n transform: translateY(calc(100% + 5px ));\n `};\n\n ${$openState.position === 'bottom-left' && `\n bottom: 0;\n right: 0;\n transform: translateY(calc(100% + 5px ));\n `};\n\n ${$openState.position === 'top-left' && `\n top: 0;\n right: 0;\n transform: translateY(calc( -100% - 5px ));\n `};\n\n ${$openState.position === 'top-right' && `\n top: 0;\n left: 0;\n transform: translateY(calc( -100% - 5px ));\n `};\n\n `};\n`;\n\nconst getDropPosition = (buttonRect: DOMRect, minWidth: number, minHeight: number): IOpenPos => {\n let position: IOpenPos = 'bottom-right';\n const openLeft = (buttonRect.left + minWidth) > window.innerWidth;\n const openTop = (buttonRect.bottom + minHeight) > window.innerHeight;\n const spaceTop = buttonRect.bottom > minHeight;\n\n if (openLeft && openTop && spaceTop) {\n position = 'top-left';\n }\n\n if (openTop && !openLeft && spaceTop) {\n position = 'top-right';\n }\n\n if (!openTop && openLeft) {\n position = 'bottom-left';\n }\n\n return position;\n};\n\ntype IOpenPos = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n\ninterface IDropOpen {\n isOpen: boolean,\n position: IOpenPos,\n}\n\ninterface IFilterDropHandler {\n buttonIcon: string\n buttonText: string\n disabled?: boolean\n minWidth?: number\n minHeight?: number\n isSortAscending?: boolean\n design?: FilterButtonDesign\n noCloseOnClickOutside?: boolean\n onToggleOpenCallback?: (isOpen: boolean) => void\n onCloseCallback?: () => void\n children?: React.ReactNode;\n}\n\nexport interface FilterDropHandlerRef {\n imperativeClose: () => void;\n}\n\nconst FilterDropHandler = forwardRef<FilterDropHandlerRef, IFilterDropHandler>(\n (\n {\n buttonIcon,\n buttonText,\n disabled = false,\n minWidth = 270,\n minHeight = 190,\n isSortAscending,\n design = 'default',\n noCloseOnClickOutside,\n children,\n onToggleOpenCallback = () => { },\n onCloseCallback = () => { },\n ...props\n },\n imperativeRef\n ) => {\n\n const [openState, setOpenState] = useState<IDropOpen>({\n isOpen: false,\n position: 'bottom-right',\n });\n\n const buttonWrapperRef = useRef<HTMLDivElement>(null);\n const mainRef = useRef<HTMLDivElement>(null);\n\n const clickOutsideClose = useCallback(() => {\n if(noCloseOnClickOutside) {\n return;\n }\n\n if (openState.isOpen) {\n onCloseCallback();\n }\n\n setOpenState((prev) => {\n const isOpen = false;\n return { ...prev, isOpen };\n });\n\n }, [noCloseOnClickOutside, onCloseCallback, openState.isOpen]);\n\n useClickOutside(mainRef, clickOutsideClose);\n\n const handleToggleOpen = useCallback((minWidth: number, minHeight: number) => {\n if (!buttonWrapperRef.current) { return; }\n\n const buttonRect = buttonWrapperRef.current.getBoundingClientRect();\n if (!buttonRect) { return; }\n const position: IOpenPos = getDropPosition(buttonRect, minWidth, minHeight);\n\n onToggleOpenCallback(!openState.isOpen);\n setOpenState((prev) => {\n const isOpen = !prev.isOpen;\n return { ...prev, isOpen, position };\n });\n }, [onToggleOpenCallback, openState.isOpen]);\n\n const handleImperativeClose = useCallback(() => {\n setOpenState((prev) => {\n const isOpen = false;\n return { ...prev, isOpen };\n });\n }, []);\n\n // Expose imperativeClose method via ref\n useImperativeHandle(imperativeRef, () => ({\n imperativeClose: handleImperativeClose,\n }));\n\n return (\n <Container ref={mainRef} {...props}>\n <ButtonWrapper ref={buttonWrapperRef}>\n <FilterButton\n icon={buttonIcon}\n isOpen={openState.isOpen}\n onClick={() => handleToggleOpen(minWidth, minHeight)}\n {...{ disabled, isSortAscending, design }}\n hasFlipArrow\n >{buttonText}\n </FilterButton>\n </ButtonWrapper>\n <ContentBox $openState={openState} $disabled={disabled} $minWidth={minWidth}>\n <>{children}</>\n </ContentBox>\n </Container>\n );\n }\n);\n\nexport default FilterDropHandler;","import React from 'react';\nimport styled from 'styled-components';\nimport Spinner from '../../Indicators/Spinner';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 146px;\n border-top: 1px solid var(--grey-5);\n`;\n\nconst LoadingText = styled.div`\n font-family: var(--font-data);\n color: var(--grey-11);\n font-size: 12px;\n font-style: italic;\n &:lang(ja) {\n font-style: normal;\n }\n padding: 15px 0;\n`;\n\ninterface ILoadingBox {\n loadingText?: string\n}\n\nconst LoadingBox: React.FC<ILoadingBox> = ({ loadingText }) => {\n return (\n <Container>\n <Spinner size='large' styling='primary' />\n <LoadingText>{loadingText}</LoadingText>\n </Container>\n );\n};\n\nexport default LoadingBox;","import React from 'react';\nimport styled from 'styled-components';\nimport Button from '../../Form/atoms/Button';\n\nconst FooterContainer = styled.div`\n display: flex;\n padding: 8px;\n justify-content: space-between;\n align-items: flex-start;\n border-top: 1px solid var(--grey-6);\n background: var(--grey-a2);\n box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.05);\n`;\n\nconst FooterLeftSection = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst FooterRightSection = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\ninterface OwnProps {\n onReset?: () => void\n onCancel?: () => void\n onApply?: () => void\n}\n\nexport interface IFilterFooterControls {\n resetText?: string\n cancelText?: string\n closeText?: string\n applyText?: string\n hasReset?: boolean\n hasApply?: boolean\n disableApply?: boolean\n disableReset?: boolean\n}\n\ntype IFooterControls = OwnProps & IFilterFooterControls\n\nconst FooterControls: React.FC<IFooterControls> = ({\n resetText = 'Reset',\n cancelText = 'Cancel',\n closeText = 'Close',\n applyText = 'Apply',\n hasReset = false,\n hasApply = false,\n disableApply = false,\n disableReset = true,\n onReset = () => { },\n onCancel = () => { },\n onApply = () => { },\n}) => {\n return (\n <FooterContainer>\n <FooterLeftSection>\n {hasReset && <Button size='small' design=\"text-only\" disabled={disableReset} onClick={onReset}>{resetText}</Button>}\n </FooterLeftSection>\n {hasApply && (\n <FooterRightSection>\n <Button size='small' design='secondary' onClick={onCancel}>{disableApply ? closeText : cancelText }</Button>\n <Button size='small' onClick={onApply} disabled={disableApply}>{applyText}</Button>\n </FooterRightSection>\n )}\n </FooterContainer>\n );\n};\n\nexport default FooterControls;","import React, { useState, useCallback, useEffect, useRef, useMemo } from 'react';\nimport styled from 'styled-components';\nimport { ButtonWithIcon, IInputOptionsType } from '../../Form';\nimport FilterOption from '../../Form/atoms/FilterOption';\nimport BasicSearchInput from '../../Misc/atoms/BasicSearchInput';\n\nimport { IFilterItem, IFilterValue, isFilterItem } from '../FilterTypes';\nimport FilterDropHandler, { FilterDropHandlerRef } from '../atoms/FilterDropHandler';\nimport FilterDropdownContainer from '../atoms/FilterDropdownContainer';\nimport LoadingBox from '../atoms/LoadingBox';\nimport { FilterButtonDesign } from '../FilterTypes';\nimport FooterControls, { IFilterFooterControls } from '../atoms/FooterControls';\n\nconst Container = styled.div`\n display: inline-block;\n position: relative;\n`;\n\nconst StyledFilterOption = styled(FilterOption)`\n letter-spacing: 0.2px;\n`;\n\nconst OptionList = styled.div<{ $moreItem?: boolean }>`\n max-height: ${({ $moreItem }) => $moreItem ? '228px' : '196px'};\n min-height: 40px;\n position: relative;\n overflow-y: auto;\n padding: 8px 0;\n\n ${StyledFilterOption} {\n height: 40px;\n padding-left: 16px;\n }\n`;\n\nconst ResultsContainer = styled.div`\n min-width: 252px;\n`;\n\nconst SortingButtonWrapper = styled.div`\n display: flex;\n height: 24px;\n padding: 0px 8px;\n align-items: center;\n justify-content: left;\n gap: 8px;\n border-left: 1px solid var(--grey-6);\n width: auto;\n`;\n\nconst FilterResultsToolbar = styled.div`\n display: flex;\n height: 24px;\n padding-left: 16px;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n border-top: 1px solid var(--grey-5);\n border-bottom: 1px solid var(--grey-5);\n`;\n\nconst ResultCounter = styled.div`\n font-family: var(--font-ui);\n color: var(--grey-11);\n font-size: 12px;\n text-align: center;\n white-space: nowrap;\n &:lang(ja) {\n font-style: normal;\n }\n line-height: 12px;\n`;\n\nconst SearchWrapper = styled.div`\n --search-input-font-size: 14px;\n --search-input-font-family: var(--font-data);\n --search-input-container-gap: 10px;\n height: 40px;\n display: flex;\n align-items: center;\n padding: 4px 4px 4px 14px;\n`;\n\nconst EmptyResultText = styled.div`\n display: block;\n height: 24px;\n color: var(--grey-11);\n font-weight: 700;\n margin-left: 12px;\n user-select: none;\n pointer-events: none;\n height: inherit;\n display: flex;\n align-items: center;\n font-size: 12px;\n`;\n\nconst OptionListGradient = styled.div`\n position: absolute;\n bottom: 0px;\n height: 15px;\n background-image: linear-gradient(to bottom, transparent, var(--grey-3));\n width: 99%;\n left: 50%;\n transform: translateX(-50%);\n pointer-events: none;\n`;\n\nconst isValueSelected = (item: IFilterItem, selected: IFilterValue) => {\n let isItemSelected = false;\n\n if (Array.isArray(selected)) {\n selected.forEach((element: IFilterItem) => {\n if (element.value === item.value) {\n isItemSelected = true;\n }\n });\n\n } else {\n if (isFilterItem(selected)) {\n isItemSelected = item.value === selected.value;\n }\n }\n\n return isItemSelected;\n};\n\nconst getNewSelected = (item: IFilterItem, selected: IFilterValue, optionType: IInputOptionsType): IFilterValue => {\n let isItemSelected = false;\n\n if (optionType === 'checkbox') {\n const validSelected = Array.isArray(selected)\n ? selected\n : isFilterItem(selected) ? [selected] : [];\n\n const newSelected: IFilterItem[] = [];\n validSelected.forEach((element: IFilterItem) => {\n if (item.value === element.value) {\n isItemSelected = true;\n } else {\n newSelected.push(element);\n }\n });\n if (!isItemSelected) {\n newSelected.push(item);\n }\n\n if (newSelected.length === 0) {\n return null;\n }\n\n return newSelected;\n }\n\n return item;\n};\n\nconst sortList = (unSortedList: IFilterItem[], isSortAscending: boolean): IFilterItem[] => {\n\n if (unSortedList.length <= 1) {\n return unSortedList;\n }\n\n const sorted = [...unSortedList];\n const lang = document.documentElement.lang || 'en';\n\n sorted.sort((a, b) => {\n const diff = a.text.localeCompare(b.text, lang);\n\n return isSortAscending ? diff : -diff;\n });\n\n return sorted;\n};\n\n\nconst selectedOrderList = (list: IFilterItem[], maxItems: number, selected: IFilterValue, isSortAscending: boolean): IFilterItem[] => {\n\n if (list.length <= maxItems || selected === null) {\n return sortList(list, isSortAscending);\n }\n\n // Handle single selection case\n if (isFilterItem(selected)) {\n const index = list.findIndex(item => item.value === selected.value);\n\n // Return original list if item doesn't exist or is already in visible range\n if (index === -1 || index < maxItems) {\n return sortList(list, isSortAscending);\n }\n\n // Create new list with selected item at the top\n const newList = list.filter(item => item.value !== selected.value);\n const orderedList = sortList(newList, isSortAscending);\n orderedList.unshift(list[index]);\n\n return orderedList;\n }\n\n // Handle multiple selection case\n if (Array.isArray(selected)) {\n\n const selectedValues = new Set(selected.map(item => item.value));\n\n // Create a map to preserve original items\n const selectedItems: IFilterItem[] = [];\n const unselectedItems: IFilterItem[] = [];\n\n // Single pass through the list to separate selected and unselected items\n for (const item of list) {\n if (selectedValues.has(item.value)) {\n selectedItems.push(item);\n } else {\n unselectedItems.push(item);\n }\n }\n\n const orderedSelected = sortList(selectedItems, isSortAscending);\n const unSelectedItems = sortList(unselectedItems, isSortAscending);\n\n // Return combined list with selected items first\n return [...orderedSelected, ...unSelectedItems];\n }\n\n return list;\n};\n\nconst getFilteredList = (list: IFilterItem[], newValue: string): IFilterItem[] => {\n return list.filter(element => {\n const valueString = element.text.toLowerCase();\n return valueString.includes(newValue.toLowerCase());\n });\n};\n\nconst getResultText = (template: string, visible: number, total: number) => {\n const newMessage = template.replace('[TOTAL]', `${total}`);\n return newMessage.replace('[VISIBLE]', `${visible}`);\n};\n\nconst areSelectionsEqual = (tempSelected: IFilterValue, selected: IFilterValue): boolean => {\n\n if (tempSelected === null && selected === null) {\n return true;\n }\n\n // If only one is null, they are not equal\n if (tempSelected === null || selected === null) {\n return false;\n }\n\n // If both are arrays\n if (Array.isArray(tempSelected) && Array.isArray(selected)) {\n // If arrays have different lengths, they are not equal\n if (tempSelected.length !== selected.length) {\n return false;\n }\n\n // Check if every item in tempSelected exists in selected with the same value\n return tempSelected.every(tempItem =>\n selected.some(selectedItem => selectedItem.value === tempItem.value)\n );\n }\n\n // If one is array and the other is not, they are not equal\n if (Array.isArray(tempSelected) || Array.isArray(selected)) {\n return false;\n }\n\n return tempSelected.value === selected.value;\n};\n\nexport type IFilterDropdownOwn = {\n buttonIcon: string\n buttonText: string\n list: IFilterItem[];\n selected: IFilterValue;\n disabled?: boolean\n optionType?: IInputOptionsType\n isLoading?: boolean\n loadingText?: string\n hasOptionsFilter?: boolean\n searchPlaceholder?: string\n maxDisplayedItems?: number\n searchResultText?: string\n emptyResultText?: string\n design?: FilterButtonDesign\n ascendingText?: string\n descendingText?: string\n isListAscending?: boolean\n onSelect: (newSelection: IFilterValue) => void;\n onResetCallback?: () => void\n onCancelCallback?: () => void\n}\n\nexport type IFilterDropdown = IFilterDropdownOwn & IFilterFooterControls & Omit<React.HTMLAttributes<HTMLDivElement>, keyof IFilterDropdownOwn>\n\nconst FilterDropdown: React.FC<IFilterDropdown> = ({\n buttonIcon,\n buttonText,\n list,\n selected = null,\n disabled = false,\n isLoading = false,\n loadingText,\n optionType = 'text',\n hasOptionsFilter,\n searchPlaceholder,\n maxDisplayedItems = 5,\n searchResultText = 'Showing [VISIBLE] of [TOTAL]',\n emptyResultText,\n design = 'default',\n resetText,\n cancelText,\n closeText,\n applyText,\n hasReset,\n hasApply,\n descendingText = 'Descending',\n ascendingText = 'Ascending',\n isListAscending = true,\n onSelect = () => { },\n onResetCallback = () => { },\n onCancelCallback = () => { },\n ...props\n}) => {\n const [isSortAscending, setIsSortAscending] = useState(isListAscending);\n const [visibleList, setVisibleList] = useState(selectedOrderList(list, maxDisplayedItems, selected, isSortAscending));\n const [searchText, setSearchText] = useState<string>('');\n const [tempSelected, setTempSelected] = useState(selected);\n\n const dropdownHandlerRef = useRef<FilterDropHandlerRef>(null);\n\n const handleClose = useCallback(() => {\n setVisibleList(selectedOrderList(list, maxDisplayedItems, tempSelected, isSortAscending));\n }, [isSortAscending, list, maxDisplayedItems, tempSelected]);\n\n const handleToggleOpen = useCallback(() => {\n setSearchText('');\n setTempSelected(selected);\n setIsSortAscending(isListAscending);\n setVisibleList(selectedOrderList(list, maxDisplayedItems, selected, isListAscending));\n }, [isListAscending, list, maxDisplayedItems, selected]);\n\n const handleSelection = useCallback((item: IFilterItem) => {\n const newSelected = getNewSelected(item, tempSelected, optionType);\n\n // onSelect is unavailable if hasApply feature is enabled to prevent misusage\n if (!hasApply) {\n onSelect(newSelected);\n }\n setTempSelected(newSelected);\n setVisibleList(selectedOrderList(list, maxDisplayedItems, newSelected, isSortAscending));\n setSearchText('');\n }, [tempSelected, optionType, hasApply, list, maxDisplayedItems, isSortAscending, onSelect]);\n\n const handleInputFilter = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const value: string = e.target.value.replace(/<[^>]*>/g, '').trim();\n setSearchText(value);\n\n if (value === '') {\n setVisibleList(selectedOrderList(list, maxDisplayedItems, tempSelected, isSortAscending));\n return;\n }\n const newList = getFilteredList(list, value);\n\n // sending null so the filtered list doesn't force the selected values to appear.\n setVisibleList(selectedOrderList(newList, maxDisplayedItems, null, isSortAscending));\n }, [isSortAscending, list, maxDisplayedItems, tempSelected]);\n\n const handleCancel = useCallback(() => {\n setTempSelected(selected);\n onCancelCallback();\n dropdownHandlerRef.current?.imperativeClose();\n }, [onCancelCallback, selected]);\nconst handleApply = useCallback(() => {\n onSelect(tempSelected);\n dropdownHandlerRef.current?.imperativeClose();\n}, [onSelect, tempSelected]);\n\n\n\n const handleReset = useCallback(() => {\n if (!hasApply) {\n onSelect(null);\n }\n setSearchText('');\n setVisibleList(selectedOrderList(list, maxDisplayedItems, null, isListAscending));\n setTempSelected(null);\n setIsSortAscending(isListAscending);\n onResetCallback();\n }, [hasApply, list, maxDisplayedItems, isListAscending, onResetCallback, onSelect]);\n\n const handleSort = useCallback(() => {\n setIsSortAscending((prev) => {\n setVisibleList(selectedOrderList(list, maxDisplayedItems, tempSelected, !prev));\n return !prev;\n });\n\n }, [list, maxDisplayedItems, tempSelected]);\n\n // This UseEffect ensures visible list is updated when toggling language\n useEffect(() => {\n let isActive = true;\n if (isActive) {\n setSearchText(''); // clears searchText if something was selected and the dropdown is still open\n setVisibleList(selectedOrderList(list, maxDisplayedItems, tempSelected, isSortAscending));\n }\n\n return () => {\n isActive = false;\n };\n\n }, [isSortAscending, list, maxDisplayedItems, tempSelected]);\n\n useEffect(() => {\n setTempSelected(selected);\n }, [selected]);\n\n const noChangeInSelection = useMemo(() => {\n return areSelectionsEqual(tempSelected, selected);\n }, [selected, tempSelected]);\n\n return (\n <Container {...props}>\n <FilterDropHandler\n ref={dropdownHandlerRef}\n {...{ buttonIcon, buttonText, disabled, design }}\n onCloseCallback={handleClose}\n onToggleOpenCallback={handleToggleOpen}\n noCloseOnClickOutside={hasApply}\n >\n <FilterDropdownContainer>\n {hasOptionsFilter && (\n <SearchWrapper>\n <BasicSearchInput\n type='text'\n hasBorder={false}\n placeholder={searchPlaceholder}\n color='dimmed'\n iconSize={12}\n value={searchText}\n onChange={handleInputFilter}\n noBackground\n />\n </SearchWrapper>\n )}\n {isLoading || !list\n ? (\n <LoadingBox {...{ loadingText }} />)\n : (\n <ResultsContainer>\n {hasOptionsFilter && (\n <FilterResultsToolbar>\n <ResultCounter>{getResultText(searchResultText, visibleList.length, list.length)}</ResultCounter>\n <SortingButtonWrapper>\n <ButtonWithIcon design='text-only' position='left' size='xsmall' weight='light' onClick={handleSort} icon={isSortAscending ? 'FilterAscending' : 'FilterDescending'}>{isSortAscending ? ascendingText : descendingText}</ButtonWithIcon>\n </SortingButtonWrapper>\n </FilterResultsToolbar>\n )}\n <OptionList $moreItem={list.length > 5}>\n {(visibleList.length > 0)\n\n ? visibleList.map((item: IFilterItem, index) => {\n const value = item.value;\n const text = item.text;\n return (\n <StyledFilterOption\n key={index}\n title={text}\n onClick={() => handleSelection(item)}\n selected={isValueSelected(item, tempSelected)}\n {...{ optionType, value }}\n />\n );\n })\n\n : <EmptyResultText>{emptyResultText}</EmptyResultText>}\n </OptionList>\n {list.length > 5 && <OptionListGradient />}\n </ResultsContainer>)}\n\n {(hasApply || hasReset) && (\n <FooterControls\n {...{ hasApply, hasReset, resetText, cancelText, closeText, applyText }}\n onCancel={handleCancel}\n onApply={handleApply}\n disableApply={noChangeInSelection}\n onReset={handleReset}\n disableReset={(tempSelected === null) && (isSortAscending === isListAscending) && (searchText === '')}\n />)\n }\n </FilterDropdownContainer>\n\n </FilterDropHandler>\n </Container>\n );\n};\n\nexport default FilterDropdown;","import React, { useCallback } from 'react';\nimport styled, { css } from 'styled-components';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport FilterOption from '../../Form/atoms/FilterOption';\nimport FilterDropHandler from '../atoms/FilterDropHandler';\nimport LoadingBox from '../atoms/LoadingBox';\nimport { IFilterItem, FilterButtonDesign } from '../FilterTypes';\nimport { resetButtonStyles } from '../../common';\nimport FilterDropdownContainer from '../atoms/FilterDropdownContainer';\n\nconst Container = styled.div`\n display: inline-block;\n position: relative;\n`;\n\nconst StyledFilterOption = styled(FilterOption)`\n letter-spacing: 0.2px;\n`;\n\nconst OptionList = styled.div`\n padding: 8px 0;\n ${StyledFilterOption} {\n height: 40px;\n padding: 16px;\n }\n`;\n\nconst OrderGroup = styled.div`\n font-family: var(--font-ui);\n display: flex;\n border-top: var(--grey-6) 1px solid;\n margin-top: 5px;\n\n button:first-child {\n border-right: var(--grey-6) 1px solid;\n }\n`;\n\nconst OrderButton = styled.button<{ $isSelected: boolean }>`\n ${resetButtonStyles};\n width: 100%;\n display: flex;\n align-items: center;\n font-family: var(--font-data);\n color: var(--grey-12);\n font-size: 14px;\n height: 40px;\n padding: 0 16px;\n gap: 12px;\n\n ${({ $isSelected }) => css`\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n [stroke]{\n stroke: var(--grey-11);\n }\n }\n\n &:hover {\n ${IconWrapper} {\n [stroke]{\n stroke: var(--primary-9);\n }\n }\n }\n\n ${$isSelected && css`\n ${IconWrapper} {\n [stroke]{\n stroke: var(--primary-9);\n }\n }\n `}\n\n `}\n`;\n\n\nexport interface ISortDropdown {\n buttonText: string\n list: IFilterItem[]\n disabled?: boolean\n isLoading?: boolean\n loadingText?: string\n ascendingText?: string\n descendingText?: string\n isSortAscending?: boolean\n selected: IFilterItem\n design?: FilterButtonDesign\n onSelect: (newSort: IFilterItem, isSortAscending: boolean) => void\n}\n\nconst SortDropdown: React.FC<ISortDropdown> = ({\n buttonText,\n disabled,\n list,\n isLoading,\n loadingText,\n isSortAscending = true,\n selected,\n descendingText = 'Descending',\n ascendingText = 'Ascending',\n design = 'basic',\n onSelect,\n ...props }) => {\n\n\n const handleSortSelect = useCallback((newValue: IFilterItem) => {\n if (newValue.value === selected.value) {\n return;\n }\n\n onSelect(newValue, isSortAscending);\n\n }, [isSortAscending, onSelect, selected.value]);\n\n const handleOrderSelect = useCallback((isAscending: boolean) => {\n if (isSortAscending === isAscending) {\n return;\n }\n\n onSelect(selected, isAscending);\n\n }, [isSortAscending, onSelect, selected]);\n\n return (\n <Container {...props}>\n <FilterDropHandler\n {...{ buttonText, disabled, isSortAscending, design }}\n buttonIcon='FilterSorting'\n >\n <FilterDropdownContainer>\n {(isLoading || list.length === 0)\n ? (\n <LoadingBox {...{ loadingText }} />\n )\n : (\n <OptionList>\n {list.map((item, index) => {\n return (\n <StyledFilterOption\n key={index}\n title={item.text}\n optionType='radio'\n selected={selected.value === item.value}\n onClick={() => handleSortSelect(item)}\n />\n );\n })}\n </OptionList>\n )}\n <OrderGroup>\n <OrderButton $isSelected={isSortAscending} onClick={() => handleOrderSelect(true)}>\n <Icon\n icon='FilterAscending'\n size={16}\n weight='light'\n />\n <FilterOption selected={isSortAscending} title={ascendingText} />\n </OrderButton>\n <OrderButton $isSelected={!isSortAscending} onClick={() => handleOrderSelect(false)}>\n <Icon\n icon='FilterDescending'\n size={16}\n weight='light'\n />\n <FilterOption selected={!isSortAscending} title={descendingText} />\n </OrderButton>\n </OrderGroup>\n </FilterDropdownContainer>\n </FilterDropHandler>\n\n </Container>\n );\n};\n\nexport default SortDropdown;","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport SelectField from '../../Form/atoms/SelectField';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport Icon from '../../Icons/Icon';\nimport FilterDropdownContainer from '../atoms/FilterDropdownContainer';\n\nconst Container = styled.div`\n display: inline-block;\n position: relative;\n`;\n\nconst ContextActionBaseCSS = css`\n -webkit-tap-highlight-color: transparent;\n border: none;\n background: none;\n display: flex;\n justify-content:left;\n align-items:center;\n flex-wrap: wrap;\n cursor: pointer;\n outline: none;\n text-decoration: none;\n padding: 0;\n`;\n\nconst ContextIcon = styled.div`\n background-color: var(--grey-2);\n transition: background-color var(--speed-fast) var(--easing-primary-in-out);\n width: 30px;\n height: 30px;\n border-radius: 3px;\n display:flex;\n justify-content:center;\n align-items:center;\n svg {\n display: block;\n }\n`;\n\nconst ContextActionButton = styled.button<{ $isActive?: boolean, $isInnerContextButton?: boolean }>`\n ${ContextActionBaseCSS}\n ${ContextIcon}{\n cursor: pointer;\n }\n &:hover {\n div > svg > g {\n stroke: var(--white-1);\n }\n }\n &:hover ${ContextIcon}{\n background-color: var(--primary-9);\n }\n }\n ${({ $isActive }) => $isActive && css`\n ${ContextIcon} {\n background-color: var(--primary-9);\n [stroke]{\n stroke: var(--white-1);\n }\n }\n &:hover ${ContextIcon}{\n cursor: pointer;\n }\n `}\n ${({ $isInnerContextButton }) => $isInnerContextButton && css`\n margin-right: 5px;\n `}\n`;\n\nconst ContentBox = styled.div<{ $openState: IDropOpen, $disabled: boolean, $minWidth: number }>`\n z-index: 100;\n min-width: ${({ $minWidth }) => $minWidth}px;\n position: absolute;\n ${({ $openState, $disabled }) => $openState && css`\n display: ${$openState.isOpen ? 'inline-block' : 'none'};\n display: ${$disabled && 'none'};\n ${$openState.position === 'bottom-right' && css`\n bottom: 0;\n left: 0;\n transform: translateY(calc(100% + 5px ));\n `};\n ${$openState.position === 'bottom-left' && css`\n bottom: 0;\n right: 0;\n transform: translateY(calc(100% + 5px ));\n `};\n ${$openState.position === 'top-left' && css`\n top: 0;\n right: 0;\n transform: translateY(calc( -100% - 5px ));\n `};\n ${$openState.position === 'top-right' && css`\n top: 0;\n left: 0;\n transform: translateY(calc( -100% - 5px ));\n `};\n `};\n`;\n\nconst ButtonWrapper = styled.div`\n display: inline-block;\n`;\n\nconst GroupStyles = css`\n display: flex;\n justify-content: space-between;\n width: auto;\n align-items: center;\n gap: 16px;\n`;\n\nconst LayoutGroup = styled.div`\n ${GroupStyles};\n padding: 4px 8px 4px 10px;\n`;\n\nconst PaginationGroup = styled.div`\n ${GroupStyles};\n border-top: var(--grey-6) 1px solid;\n padding: 4px 8px 4px 10px;\n`;\n\nconst IconWrapper = styled.div`\n display: flex;\n`;\n\nconst RowLabel = styled.p`\n font-family: var(--font-ui);\n font-size: 14px;\n color: var(--grey-11);\n font-weight: 500;\n`;\n\nconst PageSizeContainer = styled.div`\n display: flex;\n`;\n\nconst SelectFieldContainer = styled.div`\n select{\n background-color: transparent;\n }\n`;\n\ninterface IOptionsItem {\n id: string\n icon: string\n tooltipText: string\n}\n\ninterface IProps {\n disabled?: boolean\n onToggleOpenCallback?: (isOpen: boolean) => void\n onCloseCallback?: () => void;\n pageSizeOptions?: number[],\n onPageSizeChange: (size: number) => void,\n defaultPage?: number,\n defaultPageSize?: number,\n getLayout: (layout: string) => void,\n layoutText?: string,\n pageSizeText?: string,\n contentArray: IOptionsItem[];\n minWidth?: number;\n minHeight?: number;\n hasPageSettings?: boolean;\n}\n\nconst getDropPosition = (buttonRect: DOMRect, minWidth: number, minHeight: number): IOpenPos => {\n let position: IOpenPos = 'bottom-right';\n const openLeft = (buttonRect.left + minWidth) > window.innerWidth;\n const openTop = (buttonRect.bottom + minHeight) > window.innerHeight;\n const spaceTop = buttonRect.bottom > minHeight;\n\n if (openLeft && openTop && spaceTop) {\n position = 'top-left';\n } else if (openTop && !openLeft && spaceTop) {\n position = 'top-right';\n } else if (!openTop && openLeft) {\n position = 'bottom-left';\n }\n\n return position;\n};\n\ntype IOpenPos = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\ninterface IDropOpen {\n isOpen: boolean,\n position: IOpenPos,\n}\n\nconst FilterLayout: React.FC<IProps> = ({disabled = false, onToggleOpenCallback = () => { }, onCloseCallback= () => { }, pageSizeOptions = [10, 20, 30, 50, 100], onPageSizeChange = () =>{}, defaultPageSize = 10, getLayout = () => {}, layoutText='Layout', pageSizeText='Items Per Page', contentArray, minWidth=250, minHeight=90, hasPageSettings=true}) => {\n const [openState, setOpenState] = useState<IDropOpen>({ isOpen: false, position: 'bottom-right'});\n const buttonWrapperRef = useRef<HTMLDivElement>(null);\n const mainRef = useRef<HTMLDivElement>(null);\n const [isGridLayout, setIsGridLayout] = useState<string>('grid');\n const [pageSize, setPageSize] = useState(defaultPageSize);\n\n const handleClose = useCallback(() => {\n if (openState.isOpen) {\n onCloseCallback();\n }\n\n setOpenState((prev) => {\n const isOpen = false;\n return { ...prev, isOpen };\n });\n\n }, [onCloseCallback, openState.isOpen]);\n\n useClickOutside(mainRef, handleClose);\n\n const handleToggleOpen = useCallback((minWidth: number, minHeight: number) => {\n if (!buttonWrapperRef.current) { return; }\n\n const buttonRect = buttonWrapperRef.current.getBoundingClientRect();\n if (!buttonRect) { return; }\n const position: IOpenPos = getDropPosition(buttonRect, minWidth, minHeight);\n\n onToggleOpenCallback(openState.isOpen);\n setOpenState((prev) => {\n const isOpen = !prev.isOpen;\n return { ...prev, isOpen, position };\n });\n }, [onToggleOpenCallback, openState.isOpen]);\n\n const switchLayout = useCallback((layout: string) => {\n setIsGridLayout(layout);\n getLayout(layout);\n },[getLayout]);\n\n const handlePageSizeChange = useCallback((size:string)=> {\n onPageSizeChange(Number(size));\n },[onPageSizeChange]);\n\n useEffect(() => {\n setPageSize(defaultPageSize);\n }, [defaultPageSize]);\n\n const internal = (\n <React.Fragment>\n <ContextIcon>\n <Icon icon='ViewSettings' color={openState.isOpen ? 'inverse' : 'dimmed'} size={16} />\n </ContextIcon>\n </React.Fragment>);\n\n return(\n <Container ref={mainRef}>\n <ButtonWrapper ref={buttonWrapperRef}>\n <ContextActionButton\n $isActive={openState.isOpen}\n $isInnerContextButton={false}\n onClick={() => handleToggleOpen(minWidth, minHeight)}\n >\n {internal}\n </ContextActionButton>\n </ButtonWrapper>\n <ContentBox $openState={openState} $disabled={disabled} $minWidth={minWidth}>\n <FilterDropdownContainer>\n <LayoutGroup>\n <RowLabel>{layoutText}</RowLabel>\n <IconWrapper>\n {contentArray.map((item, index) => {\n return (\n <ContextActionButton key={index} $isInnerContextButton={index !== contentArray.length-1} $isActive={isGridLayout === item.id} onClick={() => switchLayout(item.id)}>\n <ContextIcon title={item.tooltipText}>\n <Icon icon={item.icon} color={isGridLayout === item.id ? 'inverse' : 'dimmed'} size={16} />\n </ContextIcon>\n </ContextActionButton>\n );\n })}\n </IconWrapper>\n </LayoutGroup>\n {hasPageSettings &&\n <PaginationGroup>\n <RowLabel>{pageSizeText}</RowLabel>\n {pageSizeOptions &&\n <PageSizeContainer>\n <SelectFieldContainer>\n <SelectField\n changeCallback={handlePageSizeChange}\n defaultValue={pageSize}\n isCompact\n value={pageSize}\n >\n {pageSizeOptions.map((size: number, index: number) => <option key={index} value={size}>{size}</option>)}\n </SelectField>\n </SelectFieldContainer>\n </PageSizeContainer>}\n </PaginationGroup>}\n </FilterDropdownContainer>\n\n </ContentBox>\n </Container>\n );\n};\n\nexport default FilterLayout;\n","import React, { useRef, useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport FilterDropdownContainer from '../atoms/FilterDropdownContainer';\nimport DatePicker from './DatePicker';\nimport FilterDropHandler, { FilterDropHandlerRef } from '../atoms/FilterDropHandler';\nimport { areDatesEqual } from '../../helpers';\nimport { IDateInterval, IDatePicker } from '..';\n\nconst MIN_WIDTH = 470;\nconst MIN_HEIGHT = 360;\n\nconst Container = styled.div``;\n\ninterface IMountPicker {\n initialValue: IDateInterval | Date | undefined\n isMount: boolean\n}\n\nexport interface IDropdownDatePicker extends IDatePicker {\n buttonIcon: string\n buttonText: string\n disabled?: boolean\n selected?: IDateInterval | Date | null;\n onCloseCallback?: (value: IDateInterval | Date | null) => void\n onUpdateCallback?: (value: IDateInterval | Date | null) => void\n onToggleCallback?: (value: IDateInterval | Date | null, isOpen: boolean) => void\n onCancelCallback?: () => void\n onApplyCallback?: (data: IDateInterval | Date) => void\n}\n\nconst DropdownDatePicker: React.FC<IDropdownDatePicker> = ({\n buttonIcon,\n buttonText,\n disabled,\n initialValue,\n dateMode,\n timeMode,\n selected,\n dateTimeTextUpper,\n dateTimeTextLower,\n timeZoneTitle,\n timeZoneValueTitle,\n lang,\n hasEmptyValue,\n availableRange,\n contentDays,\n cancelText = 'Cancel',\n applyText = 'Apply',\n hasApply = true,\n onCloseCallback = () => { },\n onUpdateCallback = () => { },\n onToggleCallback = () => { },\n onCancelCallback = () => { },\n onApplyCallback = () => { },\n ...props }) => {\n\n /**\n * This will keep the value of the picker when it updates so on close will send the most fresh value\n * without re-renders.\n */\n const pickerValue = useRef<IDateInterval | Date | null>(null);\n const [mountedPicker, setMountedPicker] = useState<IMountPicker>({ initialValue: initialValue, isMount: true });\n const [disableApply, setDisableApply] = useState(false);\n\n const DropdownHandlerRef = useRef<FilterDropHandlerRef>(null);\n const handleUpdateCallback = useCallback((data: IDateInterval | Date) => {\n pickerValue.current = data;\n onUpdateCallback(data);\n setDisableApply(areDatesEqual(selected, data));\n }, [onUpdateCallback, selected]);\n\n const handleOnClose = useCallback(() => {\n if (pickerValue.current && (pickerValue.current !== selected)) {\n onCloseCallback(pickerValue.current);\n }\n }, [onCloseCallback, selected]);\n\n const handleOnToggle = useCallback((isOpen: boolean) => {\n\n if (!hasApply && pickerValue.current && (pickerValue.current !== selected)) {\n onToggleCallback(pickerValue.current, isOpen);\n }\n\n /** Verify if the picker needs to be mounted again to force initialValue set in Datepicker Component */\n if (isOpen && (!mountedPicker.isMount)) {\n setMountedPicker((prev) => {\n return { ...prev, isMount: true };\n });\n }\n }, [hasApply, mountedPicker.isMount, onToggleCallback, selected]);\n\n const handleOnCancel = useCallback(() => {\n if (pickerValue.current && (pickerValue.current !== selected)) {\n pickerValue.current = selected === undefined ? null : selected;\n const validInitialValue = selected === null ? undefined : selected;\n setMountedPicker({ initialValue: validInitialValue, isMount: false });\n }\n onCancelCallback();\n DropdownHandlerRef.current?.imperativeClose();\n }, [onCancelCallback, selected]);\n\n\n const handleOnApply = useCallback(() => {\n if (pickerValue.current && (pickerValue.current !== selected)) {\n onApplyCallback(pickerValue.current);\n }\n DropdownHandlerRef.current?.imperativeClose();\n },[onApplyCallback, selected]);\n\n /**\n * Caching the selected null /clear flag for this picker from parent component\n */\n useEffect(() => {\n let canUnmount = true;\n\n if (canUnmount && selected === null && pickerValue.current !== null) {\n pickerValue.current = selected;\n setMountedPicker({ initialValue: undefined, isMount: false });\n }\n return () => {\n canUnmount = false;\n };\n }, [selected]);\n\n return (\n <Container {...props}>\n <FilterDropHandler\n ref={DropdownHandlerRef}\n minWidth={MIN_WIDTH}\n minHeight={MIN_HEIGHT}\n onCloseCallback={handleOnClose}\n onToggleOpenCallback={handleOnToggle}\n noCloseOnClickOutside={hasApply}\n {...{ buttonIcon, buttonText, disabled }}\n >\n <FilterDropdownContainer>\n {mountedPicker.isMount && (\n <DatePicker\n {...{\n dateMode,\n timeMode,\n dateTimeTextUpper,\n dateTimeTextLower,\n timeZoneTitle,\n timeZoneValueTitle,\n lang,\n availableRange,\n contentDays,\n cancelText,\n applyText,\n hasApply,\n }}\n updateCallback={handleUpdateCallback}\n cancelCallback={handleOnCancel}\n applyCallback={handleOnApply}\n hasEmptyValue\n initialValue={mountedPicker.initialValue}\n disableApply={disableApply}\n />)}\n </FilterDropdownContainer>\n </FilterDropHandler>\n </Container>\n );\n};\n\nexport default DropdownDatePicker;","import React, { useState, useCallback } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport BasicSearchInput from '../../Misc/atoms/BasicSearchInput';\nimport FilterDropdown from '../../Filters/molecules/FilterDropdown';\nimport FilterButton from '../../Filters/atoms/FilterButton';\nimport DropdownDatePicker from './DropdownDatePicker';\nimport { IFilterDatePicker, IFilterDropdownExt, ISearchFilter } from '../FilterTypes';\n\nconst fadeInAnimation = keyframes`\n 0% {\n width: 50%;\n opacity: .5;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n width: 100%;\n }\n`;\n\nconst SearchInputWrapper = styled.div`\n flex: 1 1 200px;\n max-width: 320px;\n`;\n\nconst CloseSearchInputWrapper = styled.div`\n ${({ theme }) => theme && css`\n animation: ${fadeInAnimation} ${theme.animation.speed.slow} ${theme.animation.easing.primary.inOut};\n `};\n`;\n\nconst StyledFilterButton = styled(FilterButton)``;\nconst StyledDropdown = styled(FilterDropdown)``;\nconst StyledDropdownDatePicker = styled(DropdownDatePicker)``;\n\nconst Container = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: 8px 6px;\n`;\n\nconst renderDropdowns = (dropdownFilters: IFilterDropdownExt[], showMoreDropdowns: boolean, hasShowMore: boolean) => {\n return dropdownFilters.map(({ id, canHide, ...dropdownProps }: IFilterDropdownExt) => {\n if (!canHide || !showMoreDropdowns || (canHide && !hasShowMore)) {\n return <StyledDropdown key={`dropdownFilter-id-${id}`} {...dropdownProps} />;\n }\n return null;\n });\n};\n\nconst renderSearchInputs = (\n searchFilters: ISearchFilter[],\n visibleSearchInputs: String[],\n handleVisibleSearch: (searchId: string) => void\n) => {\n return searchFilters.map(({ id, canHide, showFieldText, selected, ...searchInputProps }: ISearchFilter) => {\n\n if (visibleSearchInputs.includes(id)) {\n return (\n <SearchInputWrapper key={`searchFilter-id-${id}`}>\n {canHide\n ? (\n <CloseSearchInputWrapper>\n <BasicSearchInput {...searchInputProps} hasCrossButton onCrossClick={() => handleVisibleSearch(id)} />\n </CloseSearchInputWrapper>\n )\n : <BasicSearchInput {...searchInputProps} />}\n </SearchInputWrapper>\n );\n }\n return null;\n });\n};\n\nconst renderDatePickers = (datePickerFilters: IFilterDatePicker[]) => {\n return datePickerFilters.map(({ id, canHide, ...datePickerProps }: IFilterDatePicker) => {\n return (\n <StyledDropdownDatePicker\n key={`datePicker-filter-${id}`}\n {...datePickerProps}\n />\n );\n });\n};\n\nconst renderAddSearchButtons = (\n searchFilters: ISearchFilter[],\n visibleSearchInputs: String[],\n handleVisibleSearch: (searchId: string) => void\n) => {\n return searchFilters.map((element) => {\n if (element.canHide && !visibleSearchInputs.includes(element.id)) {\n const searchId = element.id;\n return (\n <StyledFilterButton\n key={`search-button-id-${element.id}`}\n icon='Add'\n onClick={() => handleVisibleSearch(searchId)}\n >\n {element.showFieldText}\n </StyledFilterButton>\n );\n }\n return null;\n });\n};\n\n// initially visible are only the ones that can't hide\nconst initialSearchFilters = (searchFilters: ISearchFilter[]): String[] => {\n const currentVisible: String[] = [];\n\n searchFilters.forEach(element => {\n if (!element.canHide) {\n currentVisible.push(element.id);\n }\n });\n\n return currentVisible;\n};\n\nexport interface IFilterInputs {\n searchFilters?: ISearchFilter[]\n dropdownFilters?: IFilterDropdownExt[]\n datePickerFilters?: IFilterDatePicker[]\n hasShowMore?: boolean\n showMoreText?: string\n showLessText?: string\n}\n\nconst FilterInputs: React.FC<IFilterInputs> = ({\n hasShowMore = false,\n searchFilters = [],\n datePickerFilters = [],\n dropdownFilters = [],\n showMoreText = 'Show More',\n showLessText = 'Show Less',\n ...props\n}) => {\n\n const [visibleSearchInputs, setVisibleSearchInputs] = useState<String[]>(initialSearchFilters(searchFilters));\n const [showMoreDropdowns, setShowMoreDropdowns] = useState(hasShowMore ? true : false);\n\n const toggleShowMore = useCallback(() => {\n setShowMoreDropdowns((prev) => !prev);\n }, []);\n\n const handleVisibleSearch = useCallback((searchId: string) => {\n\n if (visibleSearchInputs.includes(searchId)) {\n const newVisible = visibleSearchInputs.filter((id) => searchId !== id);\n setVisibleSearchInputs(newVisible);\n } else {\n const newVisible = [...visibleSearchInputs, searchId];\n setVisibleSearchInputs(newVisible);\n }\n\n }, [visibleSearchInputs]);\n\n return (\n <Container {...props}>\n {renderSearchInputs(searchFilters, visibleSearchInputs, handleVisibleSearch)}\n {renderDatePickers(datePickerFilters)}\n {renderDropdowns(dropdownFilters, showMoreDropdowns, hasShowMore)}\n\n {/* {When the Dev does not initialize hasShowMore as true but has hidden inputs, it will show the add Searcher of the canHide} */}\n {(!hasShowMore || !showMoreDropdowns) && renderAddSearchButtons(searchFilters, visibleSearchInputs, handleVisibleSearch)}\n {hasShowMore && (\n <FilterButton\n icon='FilterEllipsis'\n onClick={toggleShowMore}\n >\n {showMoreDropdowns ? showMoreText : showLessText}\n </FilterButton>)}\n </Container>\n );\n};\n\nexport default FilterInputs;","import React from 'react';\nimport styled from 'styled-components';\nimport { IFilterItem, IFilterType } from '../FilterTypes';\nimport { resetButtonStyles } from '../../common/index';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport { isFilterItem } from '../FilterTypes';\nimport { format, add, startOfDay } from 'date-fns';\nimport { isDateInterval } from '../../helpers';\nimport { IDateInterval } from '..';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n font-size: 12px;\n min-height: 22px;\n`;\n\nconst ResultsTextWrapper = styled.div`\n font-family: var(--font-ui);\n color: var(--grey-9);\n`;\n\nconst FilterLabel = styled.div`\n height: 18px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n padding: 0 11px 0 8px;\n margin-left: 3px;\n color: var(--grey-9);\n font-family: var(--font-data);\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n }\n border-right: 1px solid var(--grey-8);\n`;\nconst FilterLabelText = styled.div<{ $hasIcon?: boolean }>`\n padding: ${({ $hasIcon }) => $hasIcon ? '0 15px 0 9px' : '0 15px 0 0'};\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: 300px;\n`;\n\nconst ClearTextButton = styled.button`\n ${resetButtonStyles};\n font-family: var(--font-data);\n color: var(--grey-10);\n margin-left: 11px;\n font-size: 12px;\n`;\n\nconst RemoveButton = styled.button`\n ${resetButtonStyles};\n`;\n\nconst FilterLabelsGroup = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n margin-left: 10px;\n`;\n\n/**\n * Date from Datepicker, since it does not support seconds input, we assumed that 23:59:59 value is showing 24:00 in display\n * Here is not changing the value that the developer receives, just displaying 00:00 of the next Day\n */\n\nconst validWithMidnight = (endDate: Date, resultsDateFormat: string) => {\n\n if (endDate.getHours() === 23 && endDate.getSeconds() > 0) {\n return format( add(startOfDay(endDate), {days:1}), resultsDateFormat);\n }\n\n return format(endDate, resultsDateFormat);\n};\n\nconst validateDateFormat = (resultsDateFormat: string): boolean => {\n let isFormatValid = false;\n\n if (resultsDateFormat !== '') {\n try {\n const tryDate = new Date();\n format(tryDate, resultsDateFormat);\n isFormatValid = true;\n } catch (error) {\n isFormatValid = false;\n }\n }\n\n return isFormatValid;\n};\n\nconst renderResults = (template: string, total: number) => {\n return template.replace('[TOTAL_RESULTS]', `${total}`);\n};\n\n\nconst renderLabel = (item: IFilterItem | IDateInterval | Date, resultsDateFormat: string, icon?: string, filterName?: string) => {\n\n let textLabel: string = \"\";\n const isDateFormatValid = validateDateFormat(resultsDateFormat);\n\n if (filterName && isFilterItem(item)) {\n textLabel = `${filterName}: ${item.text}`;\n } else if (filterName && item instanceof Date) {\n textLabel = isDateFormatValid\n ? `${filterName}: ${format(item, resultsDateFormat)}`\n : `${filterName}: ${item.toDateString()}`;\n } else if (filterName && isDateInterval(item)) {\n textLabel = isDateFormatValid\n ? `${filterName}: ${format(item.start, resultsDateFormat)} - ${validWithMidnight(item.end, resultsDateFormat)}`\n : `${filterName}: ${item.start.toDateString()} - ${item.end.toDateString()}`;\n } else if (!filterName && isFilterItem(item)) {\n textLabel = item.text;\n } else if (!filterName && item instanceof Date) {\n textLabel = isDateFormatValid\n ? format(item, resultsDateFormat)\n : item.toDateString();\n } else if (!filterName && isDateInterval(item)) {\n textLabel = isDateFormatValid\n ? `${format(item.start, resultsDateFormat)} - ${validWithMidnight(item.end, resultsDateFormat)}`\n : `${item.start.toDateString()} - ${item.end.toDateString()}`;\n }\n\n return <FilterLabelText $hasIcon={!!icon}>{textLabel}</FilterLabelText>;\n};\n\nexport interface IFilterLabel {\n filterId: string\n item: IFilterItem | Date | IDateInterval\n type: IFilterType\n icon?: string\n filterName?: string\n}\n\ninterface IFilterResults {\n labelLists: IFilterLabel[]\n totalResults: number\n resultTextTemplate?: string\n clearText?: string\n resultsDateFormat?: string\n onRemoveFilter?: (filterId: string, type: IFilterType, item: IFilterItem | Date | IDateInterval) => void\n onClearAll?: () => void\n}\n\nconst FiltersResults: React.FC<IFilterResults> = ({\n labelLists,\n totalResults,\n resultTextTemplate = 'Showing Results ([TOTAL_RESULTS]):',\n clearText = 'CLEAR ALL',\n resultsDateFormat = '',\n onRemoveFilter = () => { },\n onClearAll = () => { },\n ...props\n}) => {\n return (\n <Container {...props}>\n <ResultsTextWrapper>{renderResults(resultTextTemplate, totalResults)}</ResultsTextWrapper>\n <FilterLabelsGroup>\n {labelLists.map(({ icon, item, filterName, filterId, type }, index) => {\n return (\n <FilterLabel key={`Filter-Label-id-${index}`}>\n {icon && <Icon icon={icon} color='dimmed' size={10} weight='light' />}\n {renderLabel(item, resultsDateFormat, icon, filterName)}\n <RemoveButton\n onClick={() => onRemoveFilter(filterId, type, item)}\n >\n <Icon icon='CloseCompact' color='dimmed' size={10} weight='light' />\n </RemoveButton>\n </FilterLabel>\n );\n })}\n {(labelLists.length > 0) && <ClearTextButton onClick={onClearAll}>{clearText}</ClearTextButton>}\n </FilterLabelsGroup>\n\n </Container>\n );\n};\n\nexport default FiltersResults;","import React, { useCallback, useState, useEffect, useRef } from 'react';\nimport styled from 'styled-components';\nimport {\n IFilterItem,\n IFilterResult,\n IFilterType,\n IFilterValue,\n isFilterItem,\n IFilterDropdownConfig\n} from '../FilterTypes';\nimport FilterInputs from '../molecules/FilterInputs';\nimport { IFilterDropdownExt, ISearchFilter, IFilterDatePicker } from '../FilterTypes';\nimport FiltersResults, { IFilterLabel } from '../../Filters/molecules/FiltersResults';\nimport { isDateInterval } from '../../helpers';\nimport { IDateInterval } from '..';\nimport isequal from 'lodash.isequal';\nimport debounce from 'lodash.debounce';\n\nconst Title = styled.div`\n font-family: var(--font-ui);\n color: var(--grey-10);\n font-size: 12px;\n font-weight: 700;\n margin-bottom: 17px;\n`;\n\nconst StyledFilterResults = styled(FiltersResults)``;\n\nconst Container = styled.div`\n ${StyledFilterResults} {\n margin-top: 29px;\n min-height: 19px;\n }\n`;\n\nconst getDisableValue = (\n filtersValues: IFilterResult[],\n singleFilter: boolean,\n filter: ISearchFilter | IFilterDropdownConfig | IFilterDatePicker,\n) => {\n let disabled = false;\n\n if (filter.disabled) {\n disabled = filter.disabled;\n } else if (singleFilter) {\n const notNullValues = filtersValues.filter((filter) => filter.selected !== null);\n if (notNullValues) {\n disabled = (notNullValues.length > 1 || (notNullValues[0] && notNullValues[0].id !== filter.id));\n }\n }\n return disabled;\n};\n\nconst createDropdownFilters = (\n dropdownsConfig: IFilterDropdownConfig[],\n filtersValues: IFilterResult[],\n singleFilter: boolean,\n handleDropdownsSelected: (newValue: IFilterValue, filterId: string) => void\n): IFilterDropdownExt[] => {\n\n const dropdownFilters: IFilterDropdownExt[] = [];\n dropdownsConfig.forEach(dropdown => {\n const filter = filtersValues.find(filter => filter.id === dropdown.id);\n if (filter) {\n const selected = (Array.isArray(filter.selected) || isFilterItem(filter.selected))\n ? filter.selected\n : null;\n const onSelect = (newSelection: IFilterValue) => { handleDropdownsSelected(newSelection, filter.id); };\n const disabled = getDisableValue(filtersValues, singleFilter, dropdown);\n const newDropdown: IFilterDropdownExt = { ...dropdown, selected, disabled, onSelect };\n dropdownFilters.push(newDropdown);\n }\n });\n return dropdownFilters;\n};\n\nconst createSearchers = (\n searchersConfig: ISearchFilter[],\n filtersValues: IFilterResult[],\n singleFilter: boolean,\n handleSearchers: (newValue: string, filterId: string) => void,\n): ISearchFilter[] => {\n const searchersFilters: ISearchFilter[] = [];\n\n searchersConfig.forEach(searcher => {\n const filter = filtersValues.find(filter => filter.id === searcher.id);\n if (filter && !Array.isArray(filter.selected)) {\n const value: string = (filter.selected === null) || (!isFilterItem(filter.selected)) ? '' : filter.selected.text;\n\n const onChange = (e: React.FormEvent<HTMLInputElement>) => {\n const newValue = e.currentTarget.value;\n handleSearchers(newValue, filter.id);\n };\n\n const disabled = getDisableValue(filtersValues, singleFilter, searcher);\n\n const newSearcher: ISearchFilter = { ...searcher, value, disabled, onChange };\n searchersFilters.push(newSearcher);\n }\n });\n\n return searchersFilters;\n};\n\nconst createDatePickers = (\n datePickersConfig: IFilterDatePicker[],\n filtersValues: IFilterResult[],\n singleFilter: boolean,\n handleDatePickers: (selection: IDateInterval | Date | null, filterId: string) => void,\n): IFilterDatePicker[] => {\n const datePickersFilters: IFilterDatePicker[] = [];\n\n datePickersConfig.forEach((datePicker) => {\n const onCloseCallback = (value: IDateInterval | Date | null) => {\n handleDatePickers(value, datePicker.id);\n };\n\n const onToggleCallback = (value: IDateInterval | Date | null, isOpen: boolean) => {\n // if it was open before toggle means the user closed it and value should be updated.\n if (!isOpen) {\n handleDatePickers(value, datePicker.id);\n }\n };\n\n const onApplyCallback = (value: IDateInterval | Date) => {\n handleDatePickers(value, datePicker.id);\n };\n\n const disabled = getDisableValue(filtersValues, singleFilter, datePicker);\n const foundPicker = filtersValues.find(filter => filter.id === datePicker.id);\n let validInitialValue: Date | IDateInterval | undefined = undefined;\n\n if (datePicker.selected) {\n validInitialValue = datePicker.selected;\n } else if (datePicker.initialValue) {\n validInitialValue = datePicker.initialValue;\n }\n\n const newPicker: IFilterDatePicker = {\n ...datePicker,\n onCloseCallback,\n onToggleCallback,\n onApplyCallback,\n disabled,\n selected: foundPicker && (foundPicker.selected instanceof Date || isDateInterval(foundPicker.selected)) ? foundPicker.selected : null,\n initialValue: validInitialValue,\n };\n datePickersFilters.push(newPicker);\n });\n\n return datePickersFilters;\n};\n\nconst createLabelResults = (\n searchersConfig: ISearchFilter[],\n dropdownsConfig: IFilterDropdownConfig[],\n datePickersConfig: IFilterDatePicker[],\n filtersValues: IFilterResult[],\n): IFilterLabel[] => {\n\n const labelLists: IFilterLabel[] = [];\n\n searchersConfig.forEach((searcher) => {\n const foundSearcher = filtersValues.find(element => element.id === searcher.id);\n if (!foundSearcher) {\n return;\n\n // searchers are never arrays or date but Typescript requires this type check\n } else if (isFilterItem(foundSearcher.selected)) {\n const newLabel: IFilterLabel = {\n filterId: foundSearcher.id,\n item: foundSearcher.selected,\n filterName: searcher.name,\n type: foundSearcher.type,\n };\n labelLists.push(newLabel);\n }\n });\n\n dropdownsConfig.forEach((dropdown) => {\n\n const foundDropdown = filtersValues.find(element => element.id === dropdown.id);\n if (!foundDropdown || foundDropdown.selected === null) {\n return;\n } else if (Array.isArray(foundDropdown.selected)) {\n foundDropdown.selected.forEach((dropdownLabelVal) => {\n const newLabel: IFilterLabel = {\n filterId: foundDropdown.id,\n item: dropdownLabelVal,\n icon: dropdown.buttonIcon,\n filterName: dropdown.name,\n type: foundDropdown.type\n };\n labelLists.push(newLabel);\n });\n } else if (isFilterItem(foundDropdown.selected)) {\n const newLabel: IFilterLabel = {\n filterId: foundDropdown.id,\n item: foundDropdown.selected,\n icon: dropdown.buttonIcon,\n filterName: dropdown.name,\n type: foundDropdown.type\n };\n\n labelLists.push(newLabel);\n }\n });\n\n datePickersConfig.forEach((datePicker) => {\n const foundPicker = filtersValues.find(element => element.id === datePicker.id);\n if (!foundPicker || foundPicker.selected === null || Array.isArray(foundPicker.selected) || isFilterItem(foundPicker.selected)) {\n return;\n } else {\n const newLabel: IFilterLabel = {\n filterId: foundPicker.id,\n item: foundPicker.selected,\n icon: datePicker.buttonIcon,\n filterName: datePicker.name,\n type: foundPicker.type\n };\n labelLists.push(newLabel);\n }\n });\n\n return labelLists;\n};\n\nconst initFilters = (\n searchersConfig: ISearchFilter[],\n dropdownsConfig: IFilterDropdownConfig[],\n datePickersConfig: IFilterDatePicker[],\n): IFilterResult[] => {\n\n const newFilters: IFilterResult[] = [];\n\n searchersConfig.forEach(({ id, value, selected }) => {\n\n let validatedSelected: IFilterItem | null = null;\n if (typeof value === 'number') {\n validatedSelected = { text: value.toString(), value: value };\n } else if (value === 'string') {\n validatedSelected = { text: value, value: value };\n } else if (isFilterItem(selected)) {\n validatedSelected = selected;\n }\n\n const initialSearch: IFilterResult = { id, type: 'search', selected: validatedSelected };\n\n newFilters.push(initialSearch);\n });\n\n dropdownsConfig.forEach(({ id, selected }) => {\n\n const initialDropdown: IFilterResult = {\n id,\n type: 'dropdown',\n selected: (isFilterItem(selected) || Array.isArray(selected)) ? selected : null,\n };\n\n newFilters.push(initialDropdown);\n });\n\n datePickersConfig.forEach(({ id, initialValue, selected }) => {\n\n let validSelected: Date | IDateInterval | null = null;\n\n if (initialValue) {\n validSelected = initialValue;\n } else if (selected) {\n validSelected = selected;\n }\n\n newFilters.push({ id, type: 'datepicker', selected: validSelected });\n });\n\n return newFilters;\n};\n\ninterface IFilterBar {\n filtersTitle?: string\n searchersConfig?: ISearchFilter[]\n dropdownsConfig?: IFilterDropdownConfig[]\n datePickersConfig?: IFilterDatePicker[]\n hasShowMore?: boolean\n showMoreText?: string\n showLessText?: string\n resultTextTemplate?: string\n totalResults: number\n clearText?: string\n isLoading?: boolean\n singleFilter?: boolean\n resultsDateFormat?: string\n onChangeCallback?: (currentSelected: IFilterResult[]) => void\n}\n\nconst FilterBar: React.FC<IFilterBar> = ({\n filtersTitle = 'Filters:',\n hasShowMore,\n searchersConfig = [],\n dropdownsConfig = [],\n datePickersConfig = [],\n showMoreText,\n showLessText,\n resultTextTemplate,\n clearText,\n totalResults,\n singleFilter = false,\n resultsDateFormat,\n onChangeCallback = () => { },\n ...props\n}) => {\n\n const [filtersValues, setFiltersValues] = useState<IFilterResult[]>(initFilters(searchersConfig, dropdownsConfig, datePickersConfig));\n const dropdownsConfigRef = useRef<IFilterDropdownConfig[]>(dropdownsConfig);\n\n // Prevents extra-renders only updating if the dropdowns config actually changed\n if (dropdownsConfigRef.current && !isequal(dropdownsConfigRef.current, dropdownsConfig)) {\n dropdownsConfigRef.current = dropdownsConfig;\n }\n\n // saves a reference of the debounce for searchers\n const debounceSearcher = useRef(debounce(updatedFilters => handleChange(updatedFilters), 600)).current;\n\n const handleChange = useCallback((newValues: IFilterResult[]) => {\n const notNullValues = newValues.filter((filter) => filter.selected !== null);\n\n onChangeCallback(notNullValues);\n\n }, [onChangeCallback]);\n\n const handleDropdownsSelected = useCallback((newValue: IFilterValue, filterId: string) => {\n setFiltersValues((prev) => {\n const updatedFilters = [...prev];\n const foundFilter = updatedFilters.find((filter) => filter.id === filterId);\n if (foundFilter && foundFilter.selected !== newValue) {\n foundFilter.selected = newValue;\n handleChange(updatedFilters);\n return updatedFilters;\n }\n return prev;\n });\n }, [handleChange]);\n\n const handleSearchers = useCallback((newValue: string, filterId: string) => {\n\n const updatedFilters = [...filtersValues];\n const foundFilter = updatedFilters.find((filter) => filter.id === filterId);\n if (foundFilter) {\n foundFilter.selected = newValue === '' ? null : { text: newValue, value: newValue };\n }\n\n debounceSearcher(updatedFilters);\n setFiltersValues(updatedFilters);\n\n }, [debounceSearcher, filtersValues]);\n\n const handleOnClear = useCallback(() => {\n\n const updatedFilters = [...filtersValues];\n updatedFilters.forEach((filterElement) => {\n if (filterElement.selected === null) {\n return;\n }\n filterElement.selected = null;\n });\n\n handleChange(updatedFilters);\n setFiltersValues(updatedFilters);\n }, [filtersValues, handleChange]);\n\n const handleOnRemoveFilter = useCallback((filterId: string, type: IFilterType, item: IFilterItem | Date | IDateInterval) => {\n\n setFiltersValues((prev) => {\n const updatedFilters = [...prev];\n\n const foundFilter = updatedFilters.find((filterElement) => filterElement.id === filterId);\n\n if (!foundFilter) {\n return prev;\n } else if (Array.isArray(foundFilter.selected) && type === 'dropdown') {\n const selectedFiltered = foundFilter.selected.filter((oldItem) => {\n if (isFilterItem(oldItem) && isFilterItem(item)) {\n return oldItem.value !== item.value;\n }\n // it's required to have return a value usually will always receive filterItems and all will enter the if\n // but just in case if it's not a Filter item it will filter the value.\n return true;\n });\n foundFilter.selected = selectedFiltered.length === 0 ? null : selectedFiltered;\n } else {\n foundFilter.selected = null;\n }\n\n handleChange(updatedFilters);\n return updatedFilters;\n });\n\n }, [handleChange]);\n\n const handleDatePickers = useCallback((selection: IDateInterval | Date | null, filterId: string) => {\n\n const updatedDatePickers = [...filtersValues];\n const foundFilter = updatedDatePickers.find((datePicker) => datePicker.id === filterId);\n\n if (foundFilter) {\n foundFilter.selected = selection;\n handleChange(filtersValues);\n setFiltersValues(updatedDatePickers);\n }\n\n }, [filtersValues, handleChange]);\n\n /**\n * This use Effect will update filters text selections in case the language is changed.\n * Dropdowns are the only ones that required this because Inputs text are the user type data.\n * DatePickers do not change text for now\n */\n useEffect(() => {\n let mountConfig = true;\n\n if (mountConfig && dropdownsConfigRef.current) {\n setFiltersValues((prev) => {\n const updatedFilters = [...prev];\n updatedFilters.forEach((filter: IFilterResult) => {\n\n const foundDropdown = dropdownsConfigRef.current.find((dropdown) => dropdown.id === filter.id);\n\n if (foundDropdown) {\n\n if (Array.isArray(filter.selected)) {\n filter.selected.forEach(item => {\n const foundItem = foundDropdown.list.find((dropdownItem) => dropdownItem.value === item.value);\n\n if (foundItem) {\n item.text = foundItem.text;\n }\n });\n } else if (isFilterItem(filter.selected)) {\n const foundItem = foundDropdown.list.find((item: IFilterItem) => {\n return filter.selected === null\n ? false\n : isFilterItem(filter.selected) ? item.value === filter.selected.value : false;\n });\n\n if (foundItem) {\n filter.selected.text = foundItem.text;\n }\n }\n }\n });\n\n return updatedFilters;\n });\n }\n\n return () => {\n mountConfig = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dropdownsConfigRef.current]);\n\n return (\n <Container {...props}>\n <Title>{filtersTitle}</Title>\n <FilterInputs\n {...{\n hasShowMore,\n showMoreText,\n showLessText,\n }}\n searchFilters={createSearchers(searchersConfig, filtersValues, singleFilter, handleSearchers)}\n dropdownFilters={createDropdownFilters(dropdownsConfigRef.current, filtersValues, singleFilter, handleDropdownsSelected)}\n datePickerFilters={datePickersConfig ? createDatePickers(datePickersConfig, filtersValues, singleFilter, handleDatePickers) : undefined}\n />\n <StyledFilterResults\n {...{ resultTextTemplate, clearText, totalResults, resultsDateFormat }}\n labelLists={createLabelResults(searchersConfig, dropdownsConfigRef.current, datePickersConfig, filtersValues)}\n onClearAll={handleOnClear}\n onRemoveFilter={handleOnRemoveFilter}\n />\n </Container>\n );\n};\n\nexport default FilterBar;","import React, { useCallback } from 'react';\nimport { IToggleOption } from '../FilterTypes';\nimport FilterButton from './FilterButton';\nimport { FilterButtonDesign } from '../FilterTypes';\n\ntype IToggleButton = {\n options: IToggleOption[]\n categoryLabel: String\n selectedIndex: number\n design?: FilterButtonDesign\n onToggle: (index: number, value: string | number) => void\n}\n\nconst ToggleButton: React.FC<IToggleButton> = ({ options, categoryLabel, selectedIndex, design = 'basic', onToggle, ...props }) => {\n\n const onToggleCallback = useCallback((currentIndex: number) => {\n const selected = currentIndex === 1 ? 0 : 1;\n onToggle(selected, options[selected].value);\n\n }, [onToggle, options]);\n\n if (selectedIndex !== 0 && selectedIndex !== 1) return null;\n\n return (\n <FilterButton icon={options[selectedIndex].icon} onClick={() => onToggleCallback(selectedIndex)} {...{design}} {...props}>\n { categoryLabel && `${categoryLabel}: `}\n {`${options[selectedIndex].text}`}\n </FilterButton>\n );\n};\n\nexport default ToggleButton;","import React from 'react';\nimport styled from 'styled-components';\nimport Icon from './Icon';\nimport { IStatusDot } from '..';\n\nconst Container = styled.div`\n position: relative;\n display: inline-block;\n`;\n\nconst StatusCounter = styled.div<{ $color?: IStatusDot }>`\n position: absolute;\n left: 14px;;\n top: -12px;\n border-radius: 4px;\n height: 14px;\n min-width: 14px;\n padding: 2px;\n font-size: 10px;\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color var(--speed-slow) var(--easing-primary-in-out);\n background-color: ${({ theme, $color }) => $color ? theme.colors.status[$color] : 'var(--grey-5)'};\n`;\n\nconst StatusDot = styled.div<{ $color?: IStatusDot }>`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n position: absolute;\n top: -6px;\n right: -6px;\n transition: background-color var(--speed-slow) var(--easing-primary-in-out);\n background-color: ${({ theme, $color }) => $color ? theme.colors.status[$color] : 'var(--grey-5)'};\n`;\n\ninterface IStatusIcon {\n icon: string\n status?: IStatusDot\n counter?: number\n maxCounter?: number\n}\n\nconst StatusIcon: React.FC<IStatusIcon> = ({icon, status, counter, maxCounter = 999}) => {\n return (\n <Container>\n {status && (counter === undefined)\n ? <StatusDot $color={status} />\n : (counter === undefined) ? null : <StatusCounter $color={status}>{counter > maxCounter ? `${maxCounter}+` : counter}</StatusCounter>}\n <Icon icon={icon} size={18} color='dimmed' />\n </Container>\n );\n};\n\nexport default StatusIcon;","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport { IDragLineUISharedOptions } from '.';\n\n\nconst HandleTouchReactionKeyframes = keyframes`\n 0% {\n transform: scale(1);\n }\n\n 75% {\n transform: scale(3);\n }\n\n 100% {\n transform: scale(1.75);\n }\n`;\n\nconst HandleMouseReactionKeyframes = keyframes`\n 0% {\n transform: scale(1);\n }\n\n 75% {\n transform: scale(0);\n }\n\n 100% {\n transform: scale(0.5);\n }\n`;\n\n\nconst HandleBase = styled.svg<{ $mouseDragging: boolean, $styling: string}>`\n touch-action: none;\n user-select: none;\n overflow: visible;\n cursor: pointer;\n fill: ${({theme, $styling}) => theme.custom.lines[$styling].handleBase.fill};\n appearance: none;\n`;\n\nconst HandleRingLayer = styled.circle<{$maskID: string, $styling: string}>`\n fill: none;\n stroke: ${({theme, $styling}) => theme.custom.lines[$styling].handleRingLayer.stroke};\n mask: url(#${props => (props.$maskID)});\n`;\nconst HandleReactiveGroup = styled.g<{$touchDragging: boolean, $mouseDragging: boolean}>`\n opacity: 0.65;\n cursor: pointer;\n transform: scale(1);\n\n ${props => props.$touchDragging && css`\n animation: ${HandleTouchReactionKeyframes} 0.5s forwards cubic-bezier(0.175, 0.885, 0.32, 1.275) 1;\n `}\n\n ${props => props.$mouseDragging && css`\n animation: ${HandleMouseReactionKeyframes} 0.25s forwards cubic-bezier(0.175, 0.885, 0.32, 1.275) 1;\n `}\n\n`;\nconst HandleReactiveFill = styled.circle<{$styling: string}>`\n mix-blend-mode: multiply;\n fill: ${({theme, $styling}) => theme.custom.lines[$styling].handleReactiveFill.fill};\n stroke: none;\n`;\nconst HandleReactiveRing = styled.circle<{$styling: string}>`\n fill: none;\n stroke: ${({theme, $styling}) => theme.custom.lines[$styling].handleReactiveRing.stroke};\n`;\n\nconst HandleContrastLayer = styled.circle<{$styling: string}>`\n overflow: visible;\n mix-blend-mode: multiply;\n fill: none;\n stroke: ${({theme, $styling}) => theme.custom.lines[$styling].handleContrastLayer.stroke};\n`;\nconst HandleShadowLayer = styled.circle<{$fillID: string}>`\n mix-blend-mode: multiply;\n fill: url(#${props => (props.$fillID)});\n`;\n\nconst GrabHandleIndexGroup = styled.g<{$showIndex: boolean}>`\n opacity: 0;\n pointer-events: none;\n ${props => props.$showIndex && css`\n opacity: 1;\n `};\n\n`;\n\nconst StopStart = styled.stop<{$styling: string}>`\n stop-color: ${({theme, $styling}) => theme.custom.lines[$styling].stopStart.stopColor };\n`;\nconst StopEnd = styled.stop<{$styling: string}>`\n stop-color: ${({theme, $styling}) => theme.custom.lines[$styling].stopEnd.stopColor };\n`;\n\n\nconst GrabHandleIndexText = styled.text<{$showIndex: boolean, $styling: string}>`\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n stroke: ${({theme, $styling}) => theme.custom.lines[$styling].grabHandleText.stroke};\n text-align: center;\n\n font-weight: bold;\n transition: opacity 250ms ease;\n pointer-events: none;\n\n\n`;\n\nconst IconGroup = styled.g`\n\n`;\n\ninterface IHandleUnitProps {\n lineSetId: number\n index: number\n angle: number | null\n useAngles: boolean\n unit: number\n size: number\n x: number;\n y: number;\n Icon?: React.FunctionComponent<React.SVGProps<SVGSVGElement>> & {rotate?: number};\n rotate?: number;\n moveCallback: any;\n moveEndCB?: ()=>void;\n options: IDragLineUISharedOptions;\n readOnlyHandle?: boolean;\n styling?: string;\n}\n\nconst HandleUnit : React.FC<IHandleUnitProps> = (props) => {\n // console.log(props.lineSetId, typeof props.lineSetId)\n const { index, useAngles, angle, unit, size, lineSetId, x, y, moveCallback, moveEndCB=()=>{}, Icon, rotate=0, options, readOnlyHandle = false, styling='primary'} = props;\n // console.log(\"Handle \"+ index +\" from set \"+ lineSetId + \" :: \" + x, \", \" + y)\n const handleInstance = useRef<SVGSVGElement>(null);\n\n const [ touchDragging, setTouchDragging ] = useState(false);\n const [ mouseDragging, setMouseDragging ] = useState(false);\n const [ touchIndex, setTouchIndex ] = useState<number | null>(null);\n\n\n /** --- Toucher Events Section --- */\n const handleTouchStart = useCallback((e: any) => {\n e.preventDefault();\n if (readOnlyHandle) { return; }\n // Remember what touch event index is for this handle.\n for (let i = 0; i < e.touches.length; i++) {\n const touch = e.touches[i];\n if(touch.target.parentNode.parentElement === handleInstance.current || touch.target.parentNode.parentElement.parentElement){\n setTouchDragging(true);\n setTouchIndex(i);\n }\n }\n },[readOnlyHandle]);\n\n\n const handleTouchEnd = useCallback(() => {\n if (readOnlyHandle) { return; }\n setTouchDragging(false);\n setTouchIndex(null);\n moveEndCB();\n },[moveEndCB, readOnlyHandle]);\n\n const handleTouchMove = useCallback((e: React.TouchEvent<SVGSVGElement>) => {\n if (readOnlyHandle) { return; }\n for (let i = 0; i < e.touches.length; i++) {\n if(i === touchIndex){\n moveCallback({ x: e.touches[i].pageX, y: e.touches[i].pageY}, index);\n }\n }\n },[index, moveCallback, readOnlyHandle, touchIndex]);\n\n /** --- Mouse Events Section --- */\n\n const handleMouseMoveRef = useRef<((e: MouseEvent) => void) | null>(null);\n const handleMouseUpRef = useRef<((e: MouseEvent) => void) | null>(null);\n\n const cleanupMouseListeners = useCallback(() => {\n if(handleMouseMoveRef.current){\n window.removeEventListener('mousemove', handleMouseMoveRef.current);\n handleMouseMoveRef.current = null;\n }\n if(handleMouseUpRef.current){\n window.removeEventListener('mouseup', handleMouseUpRef.current);\n handleMouseUpRef.current = null;\n }\n }, []);\n\n const handleMouseMove = useCallback((e: MouseEvent) => {\n e.preventDefault();\n if (readOnlyHandle) { return; }\n moveCallback({ x: e.pageX, y: e.pageY}, index);\n },[index, moveCallback, readOnlyHandle]);\n\n const handleMouseUp = useCallback((e: MouseEvent) => {\n e.preventDefault();\n if (readOnlyHandle) { return; }\n setMouseDragging(false);\n cleanupMouseListeners();\n moveCallback({ x: e.pageX, y: e.pageY}, index);\n setTimeout(moveEndCB);\n },[cleanupMouseListeners, index, moveCallback, moveEndCB, readOnlyHandle]);\n\n const handleMouseDown = useCallback((e: React.MouseEvent<SVGSVGElement, MouseEvent>) => {\n e.preventDefault();\n if (readOnlyHandle) { return; }\n cleanupMouseListeners();\n setMouseDragging(true);\n handleMouseMoveRef.current = handleMouseMove;\n handleMouseUpRef.current = handleMouseUp;\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n },[cleanupMouseListeners, handleMouseMove, handleMouseUp, readOnlyHandle]);\n\n useEffect(() => {\n return cleanupMouseListeners;\n }, [cleanupMouseListeners]);\n\n const maskID = useAngles ? \"mask-\" + lineSetId + '-' + index : '';\n const shadowGradientID = \"shadowGradient-\" + lineSetId + '-' + index;\n const {showPointHandle = true, showPointLabel= false, pointIndexOffset} = options as IDragLineUISharedOptions;\n\n return (\n\n <HandleBase ref={handleInstance} $styling={styling} x={x} y={y} $mouseDragging={mouseDragging} onTouchStart={handleTouchStart} onTouchEnd={handleTouchEnd} onTouchMove={handleTouchMove} onMouseDown={handleMouseDown}>\n <defs>\n <mask id={maskID}>\n <rect width='100%' height='100%' x='-50%' y='-50%' fill='white' />\n <rect width={size / 3} height={size / 0.9} x={-((size / 3) /2)} y={-((size / 0.9) + 5)} fill='black' transform={`rotate(${angle || 0} 0 0)`} />\n </mask>\n <radialGradient id={shadowGradientID}>\n <StopStart $styling={styling} offset='0%' />\n <StopEnd $styling={styling} offset='80%' />\n </radialGradient>\n </defs>\n\n {\n Icon ?\n <IconGroup transform={`scale(${unit * 1.5 }) translate(-21 -21) rotate(${rotate}, 21, 21 )`}>\n <Icon height='42' width='42' />\n </IconGroup>\n :\n showPointHandle &&\n <g transform={`scale(${ unit })`}>\n\n <HandleShadowLayer r={size * 1} $fillID={shadowGradientID} />\n <HandleContrastLayer $styling={styling} r={size / 2.4} strokeWidth={size / 3} />\n\n <HandleReactiveGroup $touchDragging={touchDragging} $mouseDragging={mouseDragging}>\n <HandleReactiveFill $styling={styling} r={size / 1.8} />\n <HandleReactiveRing $styling={styling} r={size / 2.25} strokeWidth={size / 3} />\n </HandleReactiveGroup>\n\n <HandleRingLayer $styling={styling} r={size / 2} strokeWidth={size / 6} $maskID={maskID} />\n\n {showPointLabel &&\n <GrabHandleIndexGroup $showIndex>\n <GrabHandleIndexText $styling={styling} transform='translate(-5,6)' fontSize='20px' $showIndex>\n {index + pointIndexOffset}\n </GrabHandleIndexText>\n </GrabHandleIndexGroup>}\n\n </g>\n }\n\n\n\n </HandleBase>\n );\n};\n\nexport default HandleUnit;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { IDragLineUISharedOptions } from '.';\nimport Icon from '../Icons/Icon';\n\n\nconst ContrastLine = styled.line<{$styling: string, $lineClickSensing?: number, $showLineBorder?: boolean}>`\n stroke: ${({theme, $styling}) => theme.custom.lines[$styling].contrastLine.stroke};\n mix-blend-mode: multiply;\n stroke-width: ${({ $lineClickSensing }) => $lineClickSensing}px;\n stroke-opacity: ${({ $showLineBorder }) => $showLineBorder ? '0.35' : '0'};\n cursor: pointer;\n`;\n\nconst HighlightLine = styled.line<{$styling: string}>`\n pointer-events: none;\n stroke: ${({theme, $styling}) => theme.custom.lines[$styling].highlightLineBorder.stroke};\n`;\n\n\n\nconst GrabHandle = styled.circle<{$hide: boolean, $styling: string}>`\n fill: ${({theme, $styling}) => theme.custom.lines[$styling].grabHandle.fill};\n stroke: ${({theme, $styling}) => theme.custom.lines[$styling].grabHandle.stroke};\n opacity: 1;\n transition: opacity 250ms ease;\n cursor: grab;\n\n ${props => props.$hide && css`\n pointer-events: none;\n opacity: 0;\n `};\n`;\n\n\nconst GrabHandleIndexGroup = styled.g<{$showIndex: boolean}>`\n opacity: 0;\n pointer-events: none;\n ${props => props.$showIndex && css`\n opacity: 1;\n `};\n\n`;\n\nconst GrabHandleIndexText = styled.text<{$showIndex: boolean, $styling: string}>`\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n text-align: center;\n fill: ${({theme, $styling}) => theme.custom.lines[$styling].grabHandleText.stroke};\n font-weight: bold;\n transition: opacity 250ms ease;\n pointer-events: none;\n`;\n\nconst LabelText = styled.text<{$showIndex: boolean, $styling: string, $showLabelShadow: boolean}>`\n text-align: center;\n fill: ${({theme, $styling}) => theme.custom.lines[$styling].label.fill};\n font-weight: bold;\n transition: opacity 250ms ease;\n cursor: pointer;\n ${({$showLabelShadow}) => $showLabelShadow && css`\n text-shadow:\n -1px -1px 0 #000,\n 1px -1px 0 #000,\n -1px 1px 0 #000,\n 1px 1px 0 #000;\n `}\n`;\n\nconst GrabHandleContrast = styled(GrabHandle)`\n fill: none;\n stroke: ${({theme, $styling}) => theme.custom.lines[$styling].grabHandleContrast.stroke};\n`;\n\nconst GrabHandleGroup = styled.g<{ $showIndex: boolean, $originalRadius: number, $styling: string}>`\n\n ${GrabHandle}, ${GrabHandleContrast} {\n transition: r 250ms ease;\n }\n\n ${props => props.$showIndex && css`\n ${GrabHandle}, ${GrabHandleContrast} {\n pointer-events: none;\n r: ${props.$originalRadius * 1.75};\n }\n `};\n`;\n\nconst DMCircle = styled.circle`\n fill: hsla(203, 100%, 35%, 0.49);\n cursor: pointer;\n`;\n\nconst IconFormat = styled(Icon)`\n cursor: pointer;\n`;\n\ninterface ILineUnitProps {\n lineSetId: number,\n options: IDragLineUISharedOptions,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n unit: number,\n lineClickCallback?: (lineSetId: number) => void,\n lineMoveCallback: any,\n lineMoveStartCallback: any,\n moveEndCB?: () => void;\n label?: string;\n styling?: string;\n showSmallDirectionMark?: boolean;\n overrideShowMoveHandle?: boolean;\n lineClickSensingBorder?: string;\n hasClickSensingBorder?: boolean;\n}\n\n\n\nconst LineUnit : React.FC<ILineUnitProps> = (props) => {\n const { x1, y1, x2, y2, unit, lineMoveCallback, lineMoveStartCallback, options, lineSetId, label, styling = 'primary', moveEndCB = () => { }, lineClickCallback = () => { }, showSmallDirectionMark = false, overrideShowMoveHandle = true } = props;\n const { handleFinderActive, revealSetIndex, showMoveHandle, setIndexOffset, showDirectionMark, showLabelShadow = false } = options;\n const [showLineBorder, setShowLineBorder] = useState<boolean>();\n\n // const a = x1 - x2;\n // const b = y1 - y2;\n // const distance = Math.sqrt( a*a + b*b );\n //this distance 60 doesn't work now...\n // const hideGrabHandle = showMoveHandle === false || (showMoveHandle !== true && distance < 60);\n\n const hideGrabHandle = !showMoveHandle || !overrideShowMoveHandle;\n const lineClickSensing = parseInt(props.lineClickSensingBorder as string);\n\n\n /** --- Toucher Events Section --- */\n const grabTouchMove = (e: any) => {\n for (let i = 0; i < e.touches.length; i++) {\n // if(i === touchIndex){\n lineMoveCallback({ x: e.touches[i].pageX, y: e.touches[i].pageY});\n // }\n }\n moveEndCB();\n };\n\n const grabTouchStart = (e: any) => {\n for (let i = 0; i < e.touches.length; i++) {\n // if(i === touchIndex){\n lineMoveStartCallback({ x: e.touches[i].pageX, y: e.touches[i].pageY});\n // }\n }\n };\n\n\n /** --- Mouse Events Section --- */\n const mouseMoveRef = useRef<((e: MouseEvent) => void) | null>(null);\n const mouseUpRef = useRef<((e: MouseEvent) => void) | null>(null);\n\n const cleanupMouseListeners = useCallback(() => {\n if(mouseMoveRef.current){\n window.removeEventListener(\"mousemove\", mouseMoveRef.current);\n mouseMoveRef.current = null;\n }\n if(mouseUpRef.current){\n window.removeEventListener(\"mouseup\", mouseUpRef.current);\n mouseUpRef.current = null;\n }\n }, []);\n\n const handleMouseMove = useCallback((e: MouseEvent) => {\n lineMoveCallback({ x: e.pageX, y: e.pageY });\n e.preventDefault();\n }, [lineMoveCallback]);\n\n const handleMouseUp = useCallback((e: MouseEvent) => {\n cleanupMouseListeners();\n lineMoveCallback({ x: e.pageX, y: e.pageY });\n moveEndCB();\n e.preventDefault();\n }, [cleanupMouseListeners, lineMoveCallback, moveEndCB]);\n\n const handleMouseDown = useCallback((e: React.MouseEvent<SVGCircleElement, MouseEvent>) => {\n cleanupMouseListeners();\n lineMoveStartCallback({ x: e.pageX, y: e.pageY });\n mouseMoveRef.current = handleMouseMove;\n mouseUpRef.current = handleMouseUp;\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n e.preventDefault();\n }, [cleanupMouseListeners, lineMoveStartCallback, handleMouseMove, handleMouseUp]);\n\n useEffect(() => {\n return cleanupMouseListeners;\n }, [cleanupMouseListeners]);\n const midpoint = {\n x: (x2 + x1) / 2,\n y: (y2 + y1) / 2\n };\n\n const directionMarkCoordinate = () => {\n const angle = Math.atan2((y2 - y1), (x2 - x1));\n const angleMode = (Math.PI / 2) - angle;\n const x = midpoint.x + Math.sin(angleMode) -5;\n const y = midpoint.y + Math.cos(angleMode);\n const rotate = (180 / Math.PI) * Math.atan2(y2 - y1, x2 - x1);\n const labelRotate = -rotate;\n return {x, y, rotate, labelRotate};\n };\n\n const getDirectionMarkLine = () => {\n const dmCoordinate = directionMarkCoordinate();\n return (\n <g transform={`translate(${dmCoordinate.x},${dmCoordinate.y}) rotate(${dmCoordinate.rotate}) scale(${unit * 1})`} style={{cursor:'pointer'}}>\n <g onClick={() => lineClickCallback(lineSetId)} transform='translate(-3,-30) scale(0.8)'>\n <DMCircle r={12} cx={6} cy={7} />\n <IconFormat color='inverse' icon='Up' size={12} weight='heavy' forSvgUsage />\n </g>\n {showSmallDirectionMark &&\n <g onClick={() => lineClickCallback(lineSetId)} transform='translate(5,25) rotate(-180) scale(0.8)'>\n <DMCircle r={8} cx={3.5} cy={4.5} />\n <IconFormat color='inverse' icon='Up' size={7} weight='heavy' forSvgUsage />\n </g>}\n {label &&\n <g transform={`translate(0,${showSmallDirectionMark ? 45 : 30}) rotate(${dmCoordinate.labelRotate})`}>\n <LabelText onClick={() => lineClickCallback(lineSetId)} textAnchor={showSmallDirectionMark ? dmCoordinate.labelRotate < 0 ? 'end' : 'start' : 'middle'} dominantBaseline='middle' $styling={styling} fontSize={`${14}px`} x={0} y={0} $showIndex={revealSetIndex || handleFinderActive} $showLabelShadow={showLabelShadow}>\n {label}\n </LabelText>\n </g>}\n </g>\n );\n };\n\n //hover on line show border\n const getMouseOver = useCallback(() =>{\n if(props.hasClickSensingBorder){\n setShowLineBorder(true);\n }\n }, [props.hasClickSensingBorder]);\n\n const getMouseOut = useCallback(() =>{\n if(props.hasClickSensingBorder){\n setShowLineBorder(false);\n }\n }, [props.hasClickSensingBorder]);\n\n return (\n <g>\n <ContrastLine onMouseOver={getMouseOver} onMouseOut={getMouseOut} $lineClickSensing={lineClickSensing} $showLineBorder={showLineBorder} onClick={() => lineClickCallback(lineSetId)} $styling={styling} strokeLinecap='round' x1={x1} y1={y1} x2={x2} y2={y2} strokeWidth={4 * unit} />\n <HighlightLine $styling={styling} x1={x1} y1={y1} x2={x2} y2={y2} strokeWidth={2 * unit} />\n\n <GrabHandleGroup $styling={styling} $showIndex={handleFinderActive && revealSetIndex} $originalRadius={8 * unit}>\n <GrabHandleContrast $styling={styling} r={8 * unit} strokeWidth={4 * unit} cx={midpoint.x} cy={midpoint.y} $hide={hideGrabHandle} />\n <GrabHandle $styling={styling} textAnchor='middle' r={8 * unit} strokeWidth={1 * unit} cx={midpoint.x} cy={midpoint.y} $hide={hideGrabHandle} onTouchMove={grabTouchMove} onTouchStart={grabTouchStart} onMouseDown={handleMouseDown} />\n </GrabHandleGroup>\n\n <GrabHandleIndexGroup $showIndex={!hideGrabHandle && (handleFinderActive || revealSetIndex)}>\n <GrabHandleIndexText $styling={styling} fontSize={`${unit * 10}px`} x={midpoint.x - (3 * unit)} y={midpoint.y + (4 * unit)} $showIndex={revealSetIndex || handleFinderActive}>\n {lineSetId + setIndexOffset}\n </GrabHandleIndexText>\n </GrabHandleIndexGroup>\n\n {/* <circle r={1* unit} cx={x1} cy={y1} fill='white' /> */}\n {/* <circle r={1* unit} cx={x2} cy={y2} fill='white' /> */}\n\n {showDirectionMark ?\n getDirectionMarkLine()\n :\n label &&\n <LabelText $styling={styling} fontSize={`${unit * 14}px`} x={midpoint.x - (16 * unit)} y={midpoint.y - (15 * unit)} $showIndex={revealSetIndex || handleFinderActive} $showLabelShadow={showLabelShadow}>\n {label}\n </LabelText>}\n </g>\n );\n\n};\n\nexport default LineUnit;\n","import { createContext } from 'react';\nimport { IPointSet } from '.';\n\ninterface IContextProps {\n state: IPointSet[]// IState;\n dispatch: any// ({type}:{type:any}) => void;\n }\n\nexport const LineSetContext = createContext({} as IContextProps);\n","import React, { useState, useEffect, useCallback, useContext, useRef } from 'react';\nimport HandleUnit from './HandleUnit';\nimport LineUnit from './LineUnit';\nimport update from 'immutability-helper';\nimport { LineSetContext } from './Contexts';\nimport { IPointSet, IDragLineUISharedOptions, IVector2 } from '.';\nimport styled, { css } from 'styled-components';\n\nconst FilledPolygon = styled.polygon<{ $color: string; $opacity: number }>`\n fill: ${({ $color }) => $color };\n opacity: ${({ $opacity }) => $opacity };\n`;\n\nconst Point = styled.circle<{$styling: string}>`\n fill: ${({theme, $styling}) => theme.custom.lines[$styling].point.fill};\n`;\n\nconst AreaLabelText = styled.text<{$styling: string, $showAreaLabelShadow: boolean}>`\n text-align: center;\n fill: ${({theme, $styling}) => theme.custom.lines[$styling].label.fill};\n font-weight: bold;\n transition: opacity 250ms ease;\n pointer-events: none;\n ${({$showAreaLabelShadow}) => $showAreaLabelShadow && css`\n text-shadow:\n -1px -1px 0 #000,\n 1px -1px 0 #000,\n -1px 1px 0 #000,\n 1px 1px 0 #000;\n `}\n`;\n\ninterface ILineSetProps {\n lineSetId: number,\n boundaries: any,\n size: number,\n unit: number,\n lineData: IPointSet,\n options: IDragLineUISharedOptions,\n onLineMoveEnd: () => void;\n onLineClick: (lineSetId: number) => void;\n getCTM: () => DOMMatrix | null;\n lineClickSensingBorder?: string;\n hasClickSensingBorder?: boolean;\n}\n\ninterface AreaLabelProps {\n lineSetData: IPointSet,\n unit: number,\n showAreaLabelShadow: boolean\n}\n\nconst AreaLabel : React.FC<AreaLabelProps> = ( { lineSetData, unit, showAreaLabelShadow } ) => {\n const pointsLength = lineSetData.points.length;\n if (pointsLength < 3) return null;\n let midpoint = { x: 0, y: 0 };\n\n lineSetData.points.map(({ x, y }) => {\n midpoint.x += x;\n midpoint.y += y;\n return null;\n });\n\n midpoint = { x: midpoint.x / pointsLength, y: midpoint.y / pointsLength };\n const Textlen = lineSetData.areaName?.length || 1;\n return <AreaLabelText fontSize={`${unit * 14}px`} $styling={lineSetData.styling || 'primary'} x={midpoint.x - (4 * Textlen * unit)} y={midpoint.y + (6 * unit)} $showAreaLabelShadow={showAreaLabelShadow}>{lineSetData.areaName}</AreaLabelText>;\n};\n\nconst LineSet: React.FC<ILineSetProps> = ({ getCTM, boundaries, unit, size, lineSetId, options, onLineMoveEnd, onLineClick, lineClickSensingBorder, hasClickSensingBorder }) => {\n // console.log(\"Unit \" + lineSetId + \", reporting in...\")\n\n const {state, dispatch} = useContext(LineSetContext);\n const lineSetData = state[lineSetId];\n const { showLabelShadow = false } = options;\n\n const [handleAngles, setHandleAngles] = useState<number[]>([]);\n\n const handleRelation = useRef<{offsetX: number, offsetY: number}[]>([]);\n const handleRadius : number = size / 2;\n const handleUsesAngles : boolean = lineSetData.points.length === 2;\n\n /**\n * Ensure provided position vector is within the boundaries (of the container)\n * @param {IVector2} position Vector to be enforced.\n * @returns {IVector2} The position updated clamped to range.\n */\n const enforceBoundaries = useCallback((position: IVector2) => {\n\n if(position.x < boundaries.x.min){\n position.x = boundaries.x.min;\n } else if (position.x > boundaries.x.max){\n position.x = boundaries.x.max;\n }\n\n if(position.y < boundaries.y.min){\n position.y = boundaries.y.min;\n } else if (position.y > boundaries.y.max){\n position.y = boundaries.y.max;\n }\n\n return position;\n\n }, [boundaries]);\n\n\n const handleMoveCallback = useCallback((pointerPosition: IVector2, index: number) => {\n const screenCTM = getCTM();\n if(!screenCTM){ return; }\n\n const pointer = enforceBoundaries({\n x: (((pointerPosition.x - window.scrollX) - screenCTM.e ) / screenCTM.a),\n y: (((pointerPosition.y - window.scrollY) - screenCTM.f ) / screenCTM.d)\n });\n const point ={\n x: Math.round(pointer.x),\n y: Math.round(pointer.y)\n };\n const newLineSetData = update(lineSetData, {points:{[index]: {$merge: point}}});\n\n dispatch({type: \"UPDATE\", index: lineSetId, data: newLineSetData });\n\n }, [getCTM, enforceBoundaries, lineSetData, dispatch, lineSetId]);\n\n const lineDragStart = useCallback((pointerPosition: IVector2) => {\n const screenCTM = getCTM();\n if(!screenCTM){ return; }\n\n const pointer = {\n x: (((pointerPosition.x - window.scrollX) - screenCTM.e) / screenCTM.a) - handleRadius,\n y: (((pointerPosition.y - window.scrollY) - screenCTM.f) / screenCTM.d) - handleRadius\n };\n\n handleRelation.current = lineSetData.points.map((handle) => {\n const xDiff = pointer.x - handle.x;\n const yDiff = pointer.y - handle.y;\n return {\n offsetX: xDiff,\n offsetY: yDiff\n };\n });\n\n },[handleRadius, lineSetData.points, getCTM]);\n\n const lineDragUpdate = useCallback((pointerPosition: IVector2) => {\n const screenCTM = getCTM();\n if(!screenCTM){ return; }\n\n const { points } = lineSetData;\n\n const pointer = {\n x: (((pointerPosition.x - window.scrollX) - screenCTM.e) / screenCTM.a) - handleRadius,\n y: (((pointerPosition.y - window.scrollY) - screenCTM.f) / screenCTM.d) - handleRadius\n };\n\n const newPoints = points.map((_handle, index) => {\n const {offsetX=0, offsetY=0} = handleRelation.current[index]||{};\n\n return enforceBoundaries({\n x: Math.round(pointer.x - offsetX),\n y: Math.round(pointer.y - offsetY)\n });\n\n });\n\n dispatch({type: \"UPDATE\", index: lineSetId, data: { ...lineSetData, points: [...newPoints] } });\n\n }, [getCTM, lineSetData, handleRadius, dispatch, lineSetId, enforceBoundaries]);\n\n\n\n const calcAngle = (originX: number, originY: number, towardsX: number, towardsY: number) => {\n const angle = Math.atan2(towardsY-originY,towardsX-originX);\n const degrees = angle*180/Math.PI + 90;\n return degrees;\n };\n\n // useCallback maybe to reduce unchanged deals?\n const updateHandleAngles = useCallback((inputHandleData: IPointSet) => {\n const { points } = inputHandleData;\n const outputData : number[] = [];\n\n // Update all handle angles in data set.\n inputHandleData.points.forEach((handle, index) => {\n const nextIndex = ( index + 2 > points.length ) ? 0 : index + 1 ;\n const nextHandle = points[nextIndex];\n const angle = calcAngle(handle.x, handle.y, nextHandle.x, nextHandle.y);\n outputData.push(angle);\n });\n\n setHandleAngles(outputData);\n }, []);\n\n\n useEffect(() => {\n // Update angles when the line's data set has changed.\n if(handleUsesAngles){\n updateHandleAngles(lineSetData);\n }\n }, [lineSetData, updateHandleAngles, handleUsesAngles]);\n\n const initialClampDone = useRef(false);\n useEffect(() => {\n // Clamp existing points to boundaries once when boundaries first become valid (video load)\n if(boundaries.x.max === 0 && boundaries.y.max === 0) { return; }\n if(initialClampDone.current) { return; }\n initialClampDone.current = true;\n\n const needsUpdate = lineSetData.points.some(({x, y}) =>\n x < boundaries.x.min || x > boundaries.x.max ||\n y < boundaries.y.min || y > boundaries.y.max\n );\n\n if(needsUpdate){\n const clampedPoints = lineSetData.points.map(point => enforceBoundaries({...point}));\n dispatch({type: \"UPDATE\", index: lineSetId, data: { ...lineSetData, points: clampedPoints }});\n }\n }, [boundaries]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handles = (lineSetData?.showPointHandle === undefined || lineSetData?.showPointHandle) &&\n lineSetData.points.map(({ x, y }, index) =>\n <HandleUnit\n key={index+lineSetId}\n lineSetId={lineSetId}\n rotate={lineSetData.rotate}\n Icon={lineSetData.icon}\n index={index}\n unit={unit}\n size={size}\n useAngles={handleUsesAngles}\n angle={handleAngles[index]}\n x={x}\n y={y}\n moveEndCB={onLineMoveEnd}\n moveCallback={handleMoveCallback}\n options={options}\n styling={lineSetData.styling}\n readOnlyHandle={lineSetData.readOnly}\n />\n );\n\n const points = options.showPoint && (lineSetData.points.map(({x,y}, index) => <Point $styling={lineSetData.styling||'primary'} key={index} r={unit} cx={x} cy={y} />));\n\n const lines = lineSetData.points.map(({x:x1,y:y1}, index) => {\n const {points, name, styling = 'primary'} = lineSetData;\n //nextIndex index is next Point's index\n const nextIndex = ( index + 1 >= points.length ) ? 0 : index + 1 ;\n //in the case of a line don't draw line back from second point\n if(index === 1 && nextIndex === 0){\n return null;\n }\n const {x:x2,y:y2} = points[nextIndex];\n\n return (\n <LineUnit\n key={index}\n moveEndCB={onLineMoveEnd}\n lineSetId={lineSetId}\n options={options}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n unit={unit}\n label={name}\n styling={styling}\n lineClickCallback={onLineClick}\n lineMoveCallback={lineDragUpdate}\n lineMoveStartCallback={lineDragStart}\n showSmallDirectionMark={lineSetData.showSmallDirectionMark}\n overrideShowMoveHandle={lineSetData.showMoveHandle}\n lineClickSensingBorder={lineClickSensingBorder}\n hasClickSensingBorder={hasClickSensingBorder}\n />\n );});\n\n const polygonPoints = lineSetData.points.map((point) => `${point.x},${point.y}`).join(\" \");\n\n return (\n <g>\n <FilledPolygon points={polygonPoints} $color={lineSetData.areaFillColor ? lineSetData.areaFillColor : 'transparent'} $opacity={lineSetData.areaTransparencyLevel ? lineSetData.areaTransparencyLevel / 100 : 0} />\n {lines}\n {handles}\n {points}\n <AreaLabel lineSetData={lineSetData} unit={unit} showAreaLabelShadow={showLabelShadow} />\n </g>\n );\n};\n\nexport default LineSet;\n","import React, { useState, useEffect, useCallback, useRef, useContext } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport LineSet from './LineSet';\nimport { LineSetContext } from './Contexts';\nimport { LineUIOptions, IBoundary } from '.';\nimport Spinner from '../Indicators/Spinner';\n\n\nconst Container = styled.div`\n position: relative;\n line-height: 0;\n user-select: none;\n touch-action: none;\n /* box-shadow: 0 10px 20px hsla(195deg, 65%, 5%, 35%); */\n /* border: 10px solid hsla(195deg, 45%, 35%, 45%); */\n /* border-radius:3px; */\n\n width: auto;\n /* transform: translateY(-70%); */\n\n`;\n\nconst LoadingOverlay =styled.div`\n position: absolute;\n top:0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`;\n\nconst Frame = styled.svg<{ $transculent?: boolean }>`\n touch-action: none;\n user-select: none;\n margin: 0;\n\n overflow: visible;\n\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n transition: background 250ms ease;\n background: hsla(0deg, 0%, 0%, 0%);\n\n ${props => props.$transculent && css`\n background: hsla(0deg, 0%, 0%, 35%);\n `}\n\n`;\nconst Image = styled.img`\n object-fit: contain;\n width: 100%;\n height: 100%;\n`;\n\n\ninterface LineUIProps {\n src: string;\n onSizeChange?: (size: { h: number; w: number }) => void;\n onLineMoveEnd?: () => void;\n onLineClick?: (lineSetId: number) => void;\n options?: LineUIOptions;\n showDirectionMark?: boolean;\n lineClickSensingBorder?: string;\n hasClickSensingBorder?: boolean;\n}\nconst LineUI: React.FC<LineUIProps> = ({\n src,\n onSizeChange = () => { },\n onLineMoveEnd = () => { },\n onLineClick = () => { },\n lineClickSensingBorder = '65',\n hasClickSensingBorder = true,\n options: {\n showHandleFinder,\n showSetIndex,\n showPointLabel = false,\n showLabelShadow = false,\n showPointHandle,\n showMoveHandle,\n showGrabHandle,\n setIndexOffset = 0,\n pointIndexOffset = 0,\n showPoint = false,\n fixedImgDimensions,\n boundaryOffset = 0,\n showDirectionMark = false\n } = {}\n}) => {\n\n\n const [boundaries, setBoundaries] = useState<IBoundary>({ x: { min: 0, max: 0 }, y: { min: 0, max: 0 } });\n const { state } = useContext(LineSetContext);\n\n const [handleFinder, setHandleFinder] = useState<boolean>(false);\n\n const [loaded, setLoaded] = useState(false);\n\n\n // Scale Code\n const [imgSize, setImgSize] = useState({ h: 1, w: 1 });\n const [unit, setUnit] = useState(1);\n const imgRef = useRef<HTMLImageElement>(null);\n const frame = useRef<SVGSVGElement>(null);\n\n\n\n // Initialization functions.\n const initScaleAndBounds = useCallback(() => {\n if (!imgRef.current) {\n return;\n }\n\n const { naturalHeight, naturalWidth, clientHeight } = imgRef.current;\n const h = (fixedImgDimensions && fixedImgDimensions.y) || naturalHeight;\n const w = (fixedImgDimensions && fixedImgDimensions.x) || naturalWidth;\n if (h !== imgSize.h || w !== imgSize.w) {\n setImgSize({ h, w });\n onSizeChange({ h, w });\n console.debug('image size:', { naturalHeight, naturalWidth, clientHeight, unit: naturalHeight / clientHeight });\n }\n\n if (h / clientHeight !== unit) {\n setUnit(h / clientHeight);\n }\n setLoaded(true);\n }, [fixedImgDimensions, imgSize.h, imgSize.w, onSizeChange, unit]);\n\n const calculateCTM = useCallback(() => {\n if (!frame.current) { return null; }\n //On size change make sure to refresh CTM\n const ctm = frame.current.getScreenCTM();\n console.debug('calculateCTM', ctm);\n return ctm;\n }, []);\n\n const handlePositionTipShow = (e: any) => {\n if (e.target === frame.current) {\n setHandleFinder((!handleFinder === false) && true);\n }\n };\n\n const handlePositionTipHide = () => {\n setHandleFinder(showHandleFinder || false);\n };\n\n useEffect(() => {\n if (!frame.current) { return; }\n\n // Redefine boundaries loaded image changes our svg viewbox.\n const { viewBox } = frame.current;\n const bounds = {\n x: {\n min: viewBox.baseVal.x + boundaryOffset,\n max: viewBox.baseVal.x + viewBox.baseVal.width - boundaryOffset\n },\n y: {\n min: viewBox.baseVal.y + boundaryOffset,\n max: viewBox.baseVal.y + viewBox.baseVal.height - boundaryOffset\n },\n };\n console.debug('setBoundaries', bounds);\n setBoundaries(bounds);\n }, [imgSize, boundaryOffset]);\n\n useEffect(() => {\n\n // Make sure we always keep scale up to date on resize.\n window.addEventListener('resize', initScaleAndBounds);\n return () => {\n window.removeEventListener('resize', initScaleAndBounds);\n };\n }, [initScaleAndBounds]);\n\n\n const options = {\n handleFinderActive: handleFinder,\n revealSetIndex: showSetIndex !== false && (showSetIndex || state.length > 1),\n showPointLabel,\n showLabelShadow,\n showPointHandle: showPointHandle || (showPointHandle !== false && showGrabHandle !== false),\n showMoveHandle: showMoveHandle || (showMoveHandle !== false && showGrabHandle !== false),\n setIndexOffset,\n pointIndexOffset,\n showPoint,\n showDirectionMark\n };\n\n return (\n <Container>\n <Image ref={imgRef} onLoad={initScaleAndBounds} src={src} alt='' />\n {\n (loaded && boundaries) ?\n <Frame ref={frame} viewBox={`0 0 ${imgSize.w} ${imgSize.h} `} version='1.1' xmlns='http://www.w3.org/2000/svg' onPointerDown={handlePositionTipShow} onPointerUp={handlePositionTipHide} onPointerLeave={handlePositionTipHide} $transculent={handleFinder}>\n {state.map((lineSet, index) => (\n <LineSet hasClickSensingBorder={hasClickSensingBorder} lineClickSensingBorder={lineClickSensingBorder} key={index} onLineMoveEnd={onLineMoveEnd} onLineClick={onLineClick} lineSetId={index} lineData={lineSet} getCTM={calculateCTM} boundaries={boundaries} unit={unit} size={30} options={options} />\n ))}\n </Frame>\n :\n <LoadingOverlay><Spinner size='large' styling='primary' /></LoadingOverlay>\n }\n </Container>\n );\n\n};\n\nexport default LineUI;\n","import React, { useState, useEffect, useCallback, useRef, useContext } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport LineSet from './LineSet';\nimport { LineSetContext } from './Contexts';\nimport Spinner from '../Indicators/Spinner';\nimport { LineUIOptions, IBoundary, LineUIVideoOptions } from '.';\n\n\nconst Container = styled.div`\n position: relative;\n line-height: 0;\n user-select: none;\n touch-action: none;\n /* box-shadow: 0 10px 20px hsla(195deg, 65%, 5%, 35%); */\n /* border: 10px solid hsla(195deg, 45%, 35%, 45%); */\n /* border-radius:3px; */\n\n width: auto;\n /* transform: translateY(-70%); */\n`;\nconst Video = styled.video`\n width: 100%;\n height: 100%;\n border-radius: 3px;\n background-color: hsla(0deg, 0%, 0%, 35%);\n`;\nconst LoadingOverlay =styled.div`\n position: absolute;\n top:0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`;\n\nconst Frame = styled.svg<{$transcalent?: boolean}>`\n touch-action: none;\n user-select: none;\n margin: 0;\n\n overflow: visible;\n\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n transition: background 250ms ease;\n background: hsla(0deg, 0%, 0%, 0%);\n\n ${props => props.$transcalent && css`\n background: hsla(0deg, 0%, 0%, 35%);\n `}\n\n`;\n\n\n\ninterface LineUIProps {\n src: string;\n onSizeChange?: (size: {h: number; w: number}) => void;\n onLineMoveEnd?: ()=> void;\n onLineClick?: (lineSetId: number) => void;\n onLoaded?: (metadata: {height: number; width: number; }) => void;\n options?: LineUIOptions;\n videoOptions: LineUIVideoOptions;\n lineClickSensingBorder?: string;\n hasClickSensingBorder?: boolean;\n}\nconst LineUIVideo : React.FC<LineUIProps> = ({\n src,\n onSizeChange = ()=>{},\n onLineMoveEnd = ()=>{},\n onLineClick = ()=>{},\n onLoaded = ()=>{},\n lineClickSensingBorder = '65',\n hasClickSensingBorder = true,\n videoOptions: {\n loop = false,\n autoPlay = false,\n controls = false,\n muted = true,\n ...videoOptions\n },\n options: {\n showHandleFinder,\n showSetIndex,\n showPointLabel = false,\n showPointHandle,\n showLabelShadow,\n showMoveHandle,\n showGrabHandle,\n setIndexOffset = 0,\n pointIndexOffset = 0,\n showPoint = false,\n boundaryOffset = 0,\n showDirectionMark = false\n }={}\n}) => {\n\n const frame = useRef<SVGSVGElement>(null);\n const videoRef = useRef<HTMLVideoElement>(null);\n\n const [boundaries, setBoundaries] = useState<IBoundary>({ x: { min: 0, max: 0 }, y: { min: 0, max: 0 } });\n const {state} = useContext(LineSetContext);\n\n const [handleFinder, setHandleFinder] = useState<boolean>(false);\n\n\n // Scale Code\n const [videoSize, setVideoSize] = useState({ h: 768, w: 1024 });\n const [unit, setUnit] = useState(1);\n const [loaded, setLoaded] = useState(false);\n\n // Initialization functions.\n const initScaleAndBounds = useCallback(() => {\n if(!videoRef.current) {return;}\n const { videoHeight, videoWidth, clientHeight } = videoRef.current;\n\n if(videoHeight !== videoSize.h || videoWidth !== videoSize.w) {\n setVideoSize({ h: videoHeight, w: videoWidth });\n onSizeChange({ h: videoHeight, w: videoWidth });\n }\n\n if(videoHeight / clientHeight !== unit) {\n setUnit(videoHeight / clientHeight);\n }\n }, [videoSize.h, videoSize.w, unit, onSizeChange]);\n\n const handlePositionTipShow = (e: any) => {\n if(e.target === frame.current){\n setHandleFinder((!handleFinder === false) && true);\n }\n };\n\n const handlePositionTipHide = () => {\n setHandleFinder(showHandleFinder ||false);\n };\n\n const calculateCTM = useCallback(()=>{\n if(!frame.current) {return null;}\n //On size change make sure to refresh CTM\n return frame.current.getScreenCTM();\n },[]);\n\n useEffect(() => {\n // Redefine boundaries and screen matrix when the loaded video changes our svg viewbox.\n if(!frame.current || !loaded) {return;}\n const { viewBox } = frame.current;\n const bounds = {\n x: {\n min: viewBox.baseVal.x + boundaryOffset,\n max: viewBox.baseVal.x + viewBox.baseVal.width - boundaryOffset\n },\n y: {\n min: viewBox.baseVal.y + boundaryOffset,\n max: viewBox.baseVal.y + viewBox.baseVal.height - boundaryOffset\n },\n };\n setBoundaries(bounds);\n }, [videoSize, loaded, boundaryOffset]);\n\n const onLoadedMetadata = useCallback(({target}: React.SyntheticEvent<HTMLVideoElement>) =>{\n if(target){\n setLoaded(true);\n initScaleAndBounds();\n const {videoHeight=1, videoWidth=1} = target as HTMLVideoElement;\n onLoaded({height: videoHeight, width: videoWidth});\n }\n },[initScaleAndBounds, onLoaded]);\n\n useEffect(() => {\n // Make sure we always keep scale up to date on resize.\n window.addEventListener('resize', initScaleAndBounds);\n return () => {\n window.removeEventListener('resize', initScaleAndBounds);\n };\n }, [initScaleAndBounds]);\n\n const options = {\n handleFinderActive: handleFinder,\n revealSetIndex: showSetIndex !== false && (showSetIndex || state.length > 1),\n showPointLabel,\n showLabelShadow,\n showPointHandle: showPointHandle || (showPointHandle !== false && showGrabHandle !== false),\n showMoveHandle: showMoveHandle || (showMoveHandle !== false && showGrabHandle !== false),\n setIndexOffset,\n pointIndexOffset,\n showPoint,\n showDirectionMark\n };\n\n return (\n <Container>\n <Video ref={videoRef} controls={controls} muted={muted} autoPlay={autoPlay} loop={loop} {...videoOptions} onLoadedMetadata={onLoadedMetadata} src={src} id='1'> </Video>\n {!loaded && <LoadingOverlay><Spinner size='large' styling='primary' /></LoadingOverlay>}\n {\n loaded &&\n <Frame ref={frame} viewBox={`0 0 ${videoSize.w} ${videoSize.h} `} version='1.1' xmlns='http://www.w3.org/2000/svg' onPointerDown={handlePositionTipShow} onPointerUp={handlePositionTipHide} onPointerLeave={handlePositionTipHide} $transcalent={handleFinder}>\n {state.map((lineSet, index) => (\n <LineSet key={index} hasClickSensingBorder={hasClickSensingBorder} lineClickSensingBorder={lineClickSensingBorder} onLineMoveEnd={onLineMoveEnd} onLineClick={onLineClick} lineSetId={index} lineData={lineSet} getCTM={calculateCTM} boundaries={boundaries} unit={unit} size={30} options={options} />\n ))}\n </Frame>\n }\n </Container>\n );\n\n};\n\nexport default LineUIVideo;\n","import React, { useEffect, useRef, VideoHTMLAttributes } from 'react';\nimport styled from 'styled-components';\n\nconst Video = styled.video`\n /* width: 800px; */\n`;\ninterface WebRTCMessage {\n sdp?: RTCSessionDescriptionInit;\n ice?: RTCIceCandidate;\n}\ninterface OwnProps {\n enabled: boolean;\n peerAddress: string;\n maxConnectionAttempts?: number;\n rtcConfiguration?: RTCConfiguration\n id?: string;\n setStatus?: (status: string) => void;\n setError?: (error: string | null) => void;\n}\ntype Props = OwnProps & VideoHTMLAttributes<HTMLVideoElement>\n\nconst WebRTCPlayer: React.FC<Props> = ({\n id = \"1\",\n enabled,\n peerAddress,\n maxConnectionAttempts = 30,\n rtcConfiguration = {},\n setStatus = () => {},\n setError = () => {},\n // Video element defaults\n autoPlay = true,\n muted = true,\n children,\n ...props\n }) => {\n\n const connectionAttemptsRef = useRef(0);\n const videoRef = useRef<HTMLVideoElement>(null);\n const webSocket = useRef<WebSocket|null>(null);\n const peerConnection = useRef<RTCPeerConnection|null>(null);\n const mountedRef = useRef(false);\n const reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const helloIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const enabledRef = useRef(enabled);\n\n\n function handleIncomingError(error: string) {\n setError(error);\n closeWebSocket();\n }\n\n // SDP offer received from peer, set remote description and create an answer\n const onIncomingSDP = async (description: RTCSessionDescriptionInit) => {\n if (!peerConnection.current || !webSocket.current) {\n return;\n }\n\n try {\n if (description.type === \"offer\" && peerConnection.current.signalingState !== \"stable\") {\n await Promise.all([\n peerConnection.current.setLocalDescription({type: \"rollback\"}),\n peerConnection.current.setRemoteDescription(description)\n ]);\n\n } else {\n if(description.sdp){\n //HACK: this seems to allow more clients to negotiate.64002a\n // seems to use [codec] H264 (96, level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f)\n description.sdp = description.sdp.replace(/profile-level-id=(640028|64001f|64002a);/,'');\n }\n await peerConnection.current.setRemoteDescription(new RTCSessionDescription(description));\n setStatus('Remote Description set');\n }\n } catch (error){\n console.error('Error:', error);\n setError('Error Setting remote description');\n return;\n }\n\n // what is this case?\n if (description.type !== 'offer') {\n return;\n }\n\n setStatus('Creating Answer');\n try {\n const answer = await peerConnection.current.createAnswer();\n console.debug('Got local description: ' + JSON.stringify(answer));\n await peerConnection.current.setLocalDescription(answer);\n } catch (error){\n console.error(error);\n if(error instanceof Error){\n setError(error.message);\n }\n return;\n }\n\n // TODO: Why was this being set to null and why AFTER setting it??\n // peerConnection.current.localDescription['ice-option'] = null\n const message = {\n sdp: peerConnection.current.localDescription\n };\n setStatus('Sending Local Description');\n // console.debug('Local Description:' + JSON.stringify(message));\n try {\n webSocket.current.send(JSON.stringify(message));\n setStatus('Connected');\n } catch (error) {\n console.error(error);\n if(error instanceof Error){\n setError(error.message);\n }\n }\n };\n\n // ICE candidate received from peer, add it to the peer connection\n function onIncomingICE(ice:RTCIceCandidateInit) {\n if(!peerConnection.current){\n console.error('peerConnection.current not found onIncomingICE ');\n return;\n }\n const candidate = new RTCIceCandidate(ice);\n peerConnection.current.addIceCandidate(candidate).catch(setError);\n }\n\n const onServerMessage = ({data = ''}: MessageEvent) => {\n if(data ==='HELLO') {\n console.debug('Received HELLO');\n setStatus('Registered with server, waiting for offer.');\n } else if (data.startsWith('ERROR')) {\n console.error('Received ' + data);\n handleIncomingError(data);\n } else {\n // Handle incoming JSON SDP and ICE messages\n let msg: WebRTCMessage;\n try {\n msg = JSON.parse(data);\n } catch (e) {\n if (e instanceof SyntaxError) {\n handleIncomingError('Error parsing incoming JSON: ' + data);\n } else {\n handleIncomingError('Unknown error parsing response: ' + data);\n }\n return;\n }\n // Incoming JSON signals the beginning of a call\n if (!peerConnection.current) {\n createCall(msg);\n }\n\n if (msg.sdp != null) {\n console.debug('Received Remote SDP:' + JSON.stringify(msg.sdp));\n onIncomingSDP(msg.sdp);\n } else if (msg.ice != null) {\n console.debug('Received Remote ICE:' + JSON.stringify(msg.ice));\n onIncomingICE(msg.ice);\n } else {\n handleIncomingError('Unknown incoming JSON: ' + msg);\n }\n }\n };\n\n function onServerClose(event: CloseEvent) {\n console.debug('serverClose');\n // Ignore close events from stale WebSocket connections (e.g. StrictMode cleanup)\n if(!webSocket.current || event.target !== webSocket.current){\n return;\n }\n setStatus('Disconnected from server');\n closePeerConnection();\n if (event.code !== 1000 && enabledRef.current && mountedRef.current) {\n if (reconnectTimeoutRef.current !== null) {\n clearTimeout(reconnectTimeoutRef.current);\n }\n reconnectTimeoutRef.current = setTimeout(connectToPeer, 3000);\n }\n }\n\n function onServerError(event: Event) {\n // Ignore errors from stale WebSocket connections\n if(event.target !== webSocket.current){ return; }\n console.debug(event);\n setError('Unable to connect to server');\n closeWebSocket();\n }\n\n function connectToPeer() {\n if(!mountedRef.current) { return; }\n\n console.debug('connectToPeer', connectionAttemptsRef.current);\n if (connectionAttemptsRef.current >= maxConnectionAttempts) {\n setError('Too many connection attempts, aborting. Refresh page to try again');\n return;\n }\n setError(null);\n\n const peerId = getPeerId(id);\n setStatus('Connecting to server ' + peerAddress);\n const ws = new WebSocket(peerAddress);\n webSocket.current = ws;\n /* When connected, immediately register with the server */\n ws.addEventListener('open', () => {\n if(helloIntervalRef.current !== null){\n clearInterval(helloIntervalRef.current);\n }\n helloIntervalRef.current = setInterval(() => {\n try {\n ws.send('HELLO ' + peerId);\n if(helloIntervalRef.current !== null){\n clearInterval(helloIntervalRef.current);\n helloIntervalRef.current = null;\n }\n setStatus('Registering with server (sent HELLO) for peer id: ' + peerId);\n } catch (error) {\n console.debug(error);\n }\n }, 3000);\n });\n ws.addEventListener('error', onServerError);\n ws.addEventListener('message', onServerMessage);\n ws.addEventListener('close', onServerClose);\n connectionAttemptsRef.current += 1;\n }\n\n function onRemoteTrack(event: RTCTrackEvent) {\n if (videoRef.current && videoRef.current.srcObject !== event.streams[0]) {\n console.debug('Incoming stream');\n videoRef.current.srcObject = event.streams[0];\n setStatus('Adding Track');\n }\n }\n\n function createCall(msg: WebRTCMessage) {\n // Reset connection attempts because we connected successfully\n connectionAttemptsRef.current = 0;\n console.debug('Creating RTCPeerConnection');\n\n if (!msg.sdp) {\n console.debug('WARNING: First message wasn\\'t an SDP message!?');\n return;\n }\n\n const pc = new RTCPeerConnection(rtcConfiguration);\n peerConnection.current = pc;\n pc.addEventListener('track', onRemoteTrack);\n\n pc.addEventListener('icecandidate', ({candidate = null}) => {\n\n if (!candidate) {\n console.debug('All local ICE Candidates sent.');\n return;\n }\n // We have a local ICE candidate, send it to the remote party with the same uuid\n if(webSocket.current){\n webSocket.current.send(JSON.stringify({ 'ice': candidate }));\n //TODO: try catch here?\n } else {\n console.debug('no WS found on peer connection \\'icecandidate\\' event... how?');\n }\n });\n // pc.addEventListener('negotiationneeded', ()=>{console.debug('negotiationneeded')})\n\n setStatus('RTCPeerConnection created, waiting for SDP');\n }\n\n const closeWebSocket = () => {\n console.debug('closeWebSocket');\n closePeerConnection();\n if(webSocket.current){\n webSocket.current.close();\n webSocket.current = null;\n }\n };\n\n const closePeerConnection = () => {\n console.debug('closePeerConnection');\n if (peerConnection.current) {\n peerConnection.current.close();\n peerConnection.current = null;\n }\n };\n\n useEffect(() => {\n enabledRef.current = enabled;\n }, [enabled]);\n\n useEffect(() => {\n mountedRef.current = true;\n\n if (enabled === true) {\n connectToPeer();\n } else {\n if (webSocket.current) {\n webSocket.current.close(1000, 'WebRTC Disabled');\n }\n }\n return ()=>{\n console.debug('cleanup');\n mountedRef.current = false;\n\n if(reconnectTimeoutRef.current !== null){\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n if(helloIntervalRef.current !== null){\n clearInterval(helloIntervalRef.current);\n helloIntervalRef.current = null;\n }\n\n closeWebSocket();\n };\n }, [enabled]);// eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <Video {...props} autoPlay={autoPlay} muted={muted} ref={videoRef}><>{children}</></Video>\n );\n};\n\nexport default WebRTCPlayer;\n\n\n\nfunction getPeerId(id: string) {\n return 'WRP_' + id + '_' + Math.floor(Math.random() * (9000 - 10) + 10).toString();\n}","import React, { useState, useEffect, useCallback, useRef, useContext } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport LineSet from './LineSet';\nimport { LineSetContext } from './Contexts';\nimport WebRTCClient from '../WebRTCClient';\nimport Spinner from '../Indicators/Spinner';\nimport { LineUIOptions, IBoundary, LineUIVideoOptions } from '.';\n\n\nconst Container = styled.div`\n position: relative;\n line-height: 0;\n user-select: none;\n touch-action: none;\n /* box-shadow: 0 10px 20px hsla(195deg, 65%, 5%, 35%); */\n /* border: 10px solid hsla(195deg, 45%, 35%, 45%); */\n /* border-radius:3px; */\n\n width: auto;\n /* transform: translateY(-70%); */\n`;\nconst Video = styled(WebRTCClient)`\n width: 100%;\n height: 100%;\n border-radius: 3px;\n background-color: hsla(0deg, 0%, 0%, 35%);\n`;\nconst LoadingOverlay =styled.div`\n position: absolute;\n top:0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`;\n\nconst Frame = styled.svg<{$transcalent?: boolean}>`\n touch-action: none;\n user-select: none;\n margin: 0;\n\n overflow: visible;\n\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n transition: background 250ms ease;\n background: hsla(0deg, 0%, 0%, 0%);\n\n ${props => props.$transcalent && css`\n background: hsla(0deg, 0%, 0%, 35%);\n `}\n\n`;\n\n\n\ninterface LineUIProps {\n ws: string;\n onSizeChange?: (size: {h: number; w: number}) => void;\n onLineMoveEnd?: ()=> void;\n onLineClick?: (lineSetId: number) => void;\n onLoaded?: (metadata: {height: number; width: number; }) => void;\n options?: LineUIOptions;\n videoOptions?: LineUIVideoOptions;\n lineClickSensingBorder?: string;\n hasClickSensingBorder?: boolean;\n}\nconst LineUI : React.FC<LineUIProps> = ({\n ws,\n onSizeChange = ()=>{},\n onLineMoveEnd = ()=>{},\n onLineClick = ()=>{},\n onLoaded = ()=>{},\n lineClickSensingBorder = '65',\n hasClickSensingBorder = true,\n videoOptions,\n options: {\n showHandleFinder,\n showSetIndex,\n showPointLabel = false,\n showLabelShadow = false,\n showPointHandle,\n showMoveHandle,\n showGrabHandle,\n setIndexOffset = 0,\n pointIndexOffset = 0,\n showPoint = false,\n boundaryOffset = 0,\n showDirectionMark = false\n }={}\n}) => {\n\n const frame = useRef<SVGSVGElement>(null);\n const videoRef = useRef<HTMLVideoElement | null>(null);\n\n const [boundaries, setBoundaries] = useState<IBoundary>({ x: { min: 0, max: 0 }, y: { min: 0, max: 0 } });\n const {state} = useContext(LineSetContext);\n\n const [handleFinder, setHandleFinder] = useState<boolean>(false);\n\n\n // Scale Code\n const [videoSize, setVideoSize] = useState({ h: 768, w: 1024 });\n const [unit, setUnit] = useState(1);\n const [loaded, setLoaded] = useState(false);\n\n // Initialization functions.\n const initScaleAndBounds = useCallback(() => {\n if(!videoRef.current) {return;}\n const { videoHeight, videoWidth, clientHeight } = videoRef.current;\n\n if(videoHeight !== videoSize.h || videoWidth !== videoSize.w) {\n setVideoSize({ h: videoHeight, w: videoWidth });\n onSizeChange({ h: videoHeight, w: videoWidth });\n }\n\n if(videoHeight / clientHeight !== unit) {\n setUnit(videoHeight / clientHeight);\n }\n }, [videoSize.h, videoSize.w, unit, onSizeChange]);\n\n const handlePositionTipShow = (e: any) => {\n if(e.target === frame.current){\n setHandleFinder((!handleFinder === false) && true);\n }\n };\n\n const handlePositionTipHide = () => {\n setHandleFinder(showHandleFinder ||false);\n };\n\n const calculateCTM = useCallback(()=>{\n if(!frame.current) {return null;}\n //On size change make sure to refresh CTM\n return frame.current.getScreenCTM();\n },[]);\n\n useEffect(() => {\n // Redefine boundaries and screen matrix when the loaded video changes our svg viewbox.\n if(!frame.current || !loaded) {return;}\n const { viewBox } = frame.current;\n const bounds = {\n x: {\n min: viewBox.baseVal.x + boundaryOffset,\n max: viewBox.baseVal.x + viewBox.baseVal.width - boundaryOffset\n },\n y: {\n min: viewBox.baseVal.y + boundaryOffset,\n max: viewBox.baseVal.y + viewBox.baseVal.height - boundaryOffset\n },\n };\n setBoundaries(bounds);\n }, [videoSize, loaded, boundaryOffset]);\n\n const onLoadedMetadata = useCallback(({target}: React.SyntheticEvent<HTMLVideoElement>) =>{\n if(target){\n setLoaded(true);\n const videoTarget = target as HTMLVideoElement;\n videoRef.current = videoTarget;\n initScaleAndBounds();\n const {videoHeight=1, videoWidth=1} = videoTarget;\n onLoaded({height: videoHeight, width: videoWidth});\n }\n },[initScaleAndBounds, onLoaded]);\n\n useEffect(() => {\n // Make sure we always keep scale up to date on resize.\n window.addEventListener('resize', initScaleAndBounds);\n return () => {\n window.removeEventListener('resize', initScaleAndBounds);\n };\n }, [initScaleAndBounds]);\n\n const options = {\n handleFinderActive: handleFinder,\n revealSetIndex: showSetIndex !== false && (showSetIndex || state.length > 1),\n showPointLabel,\n showLabelShadow,\n showPointHandle: showPointHandle || (showPointHandle !== false && showGrabHandle !== false),\n showMoveHandle: showMoveHandle || (showMoveHandle !== false && showGrabHandle !== false),\n setIndexOffset,\n pointIndexOffset,\n showPoint,\n showDirectionMark\n };\n\n return (\n <Container>\n <Video onLoadedMetadata={onLoadedMetadata} peerAddress={ws} id='1' {...videoOptions} enabled> </Video>\n {!loaded && <LoadingOverlay><Spinner size='large' styling='primary' /></LoadingOverlay>}\n {\n loaded &&\n <Frame ref={frame} viewBox={`0 0 ${videoSize.w} ${videoSize.h} `} version='1.1' xmlns='http://www.w3.org/2000/svg' onPointerDown={handlePositionTipShow} onPointerUp={handlePositionTipHide} onPointerLeave={handlePositionTipHide} $transcalent={handleFinder}>\n {state.map((lineSet, index) => (\n <LineSet key={index} hasClickSensingBorder={hasClickSensingBorder} lineClickSensingBorder={lineClickSensingBorder} onLineMoveEnd={onLineMoveEnd} onLineClick={onLineClick} lineSetId={index} lineData={lineSet} getCTM={calculateCTM} boundaries={boundaries} unit={unit} size={30} options={options} />\n ))}\n </Frame>\n }\n </Container>\n );\n\n};\n\nexport default LineUI;\n","import { IPointSet, IVector2 } from './';\nimport update from 'immutability-helper';\n\nexport type IReducerActions =\n | UpdateAction\n | LoadAction\n | AddSetAction\n | RemoveAction\n | AddPointAction\n | RemovePointAction\n | UpdateSetOptions\n | RenameSetAction\n | ChangeFillColorAction\n | ChangeTranparencyLevelAction\n ;\n\ninterface AddSetAction{\n type: 'ADD_SET';\n data: IPointSet;\n}\ninterface UpdateAction {\n type: 'UPDATE'|'UPDATE_SET_POINTS';\n index: number;\n data: IPointSet;\n}\n\ninterface RenameSetAction {\n type: 'RENAME_SET';\n index: number;\n data: {\n name: string;\n };\n}\ninterface UpdateSetOptions {\n type: 'UPDATE_SET_OPTIONS';\n index: number;\n data: Partial<IPointSet>;\n}\ninterface RemoveAction {\n type: 'REMOVE_SET';\n index: number;\n}\ninterface LoadAction {\n type: 'LOAD';\n state: IPointSet[];\n}\ninterface AddPointAction {\n type: 'ADD_POINT';\n index: number;\n}\ninterface RemovePointAction {\n type: 'REMOVE_POINT';\n index: number;\n}\n\ninterface ChangeFillColorAction {\n type: 'UPDATE_FILL_COLOR';\n index: number;\n data: {\n areaFillColor: string;\n };\n}\n\ninterface ChangeTranparencyLevelAction {\n type: 'UPDATE_TRANSPARENCY_LEVEL';\n index: number;\n data: {\n areaTransparencyLevel: number;\n };\n}\n\nconst getMidpoint = (pointA : IVector2, pointB : IVector2) => {\n return({\n x: pointA.x + (pointB.x - pointA.x) * 0.5,\n y: pointA.y + (pointB.y - pointA.y) * 0.5\n });\n};\n\nexport default (state : IPointSet[], action: IReducerActions) => {\n\n switch(action.type){\n //This UPDATE is better named 'UPDATE_SET_POINTS'\n case \"UPDATE_SET_POINTS\":\n case \"UPDATE\": {\n const points = action.data.points.map((point) => ({...point}));\n return update(state, {[action.index]: { points: {$set: points}}});\n }\n\n case \"RENAME_SET\": {\n const set = { ...state[action.index], name: action.data.name};\n return update(state, {[action.index]: {$set: set}});\n }\n\n case \"UPDATE_SET_OPTIONS\": {\n const set = { ...state[action.index], ...action.data};\n return update(state, {[action.index]: {$set: set}});\n }\n\n case \"ADD_SET\":\n return [...state, action.data];\n\n case \"REMOVE_SET\":\n return update(state, { $splice: [[action.index,1]]});\n\n case \"ADD_POINT\": {\n const newPoint: IVector2 = getMidpoint(state[action.index].points[0], state[action.index].points[1]);\n return update(state, {[action.index]: {points: {$splice: [[1, 0, newPoint]]}}});\n }\n\n case \"REMOVE_POINT\":\n if(state[action.index].points.length <= 2){ return state; }\n return update(state, {[action.index]: {points: {$splice: [[state[action.index].points.length - 1, 1]]}}});\n\n case 'LOAD': {\n const newState = action.state.map(\n ({name, points, ...rest}) => ({\n name,\n points: points.map( ({x,y}) => ({x,y}) ),\n ...rest\n })\n );\n return newState;\n }\n\n case \"UPDATE_FILL_COLOR\": {\n const set = { ...state[action.index], areaFillColor: action.data.areaFillColor};\n return update(state, {[action.index]: {$set: set}});\n }\n\n case \"UPDATE_TRANSPARENCY_LEVEL\": {\n const set = { ...state[action.index], areaTransparencyLevel: action.data.areaTransparencyLevel};\n return update(state, {[action.index]: {$set: set}});\n }\n\n default:\n console.error(`Action ${action['type']} not registered.`);\n return state;\n }\n};\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Icon from '../../Icons/Icon';\nimport { Link } from 'react-router-dom';\nimport { useTitle } from '../../hooks/useTitle';\nimport { deviceMediaQuery } from '../../theme/common';\nimport { resetButtonStyles } from '../../common';\n\nconst ICON_SIZE = 24;\nconst GAP_LEFT = 20;\nconst ICON_MARGIN_LEFT = -GAP_LEFT - ICON_SIZE ;\n\nconst Container = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n @media ${deviceMediaQuery.large} {\n gap: ${GAP_LEFT}px;\n flex-direction: row;\n }\n`;\n\nconst TitlesWrapper = styled.div<{$areaTitleBottom: boolean}>`\n position: relative;\n display: flex;\n flex-direction: ${({$areaTitleBottom}) => $areaTitleBottom ? `column-reverse` : `column` };\n gap: 4px;\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n align-items: center;\n margin-left: 0px;\n justify-content: left;\n\n @media ${deviceMediaQuery.large} {\n margin-left: ${ICON_MARGIN_LEFT}px;\n justify-content: center;\n }\n\n svg {\n display: block;\n }\n`;\n\nconst Title = styled.h1`\n font-family: var(--font-ui);\n text-align: left;\n font-size: 26px;\n font-weight: 600;\n text-decoration: none;\n color: var(--grey-12);\n margin: 0;\n`;\n\nconst AreaTitleCss = css`\n font-family: var(--font-ui);\n text-align: left;\n font-size: 18px;\n font-weight: 600;\n text-decoration: none;\n color: var(--grey-11);\n`;\n\nconst AreaTitle = styled.div`\n ${AreaTitleCss}\n`;\n\nconst AreaLinkTitle = styled(Link)`\n ${AreaTitleCss}\n &:hover {\n text-decoration: underline;\n }\n`;\n\nconst AreaButton = styled.button`\n ${resetButtonStyles};\n ${AreaTitleCss};\n &:hover {\n text-decoration: underline;\n }\n`;\n\ninterface IProps {\n title: string\n icon?: string\n iconColor?: ISvgIcons['color']\n areaTitle?: string\n areaHref?: string\n updateDocTitle?: boolean\n hideAreaInDocTitle? : boolean\n areaTitleBottom?: boolean\n onAreaClick?: () => void\n}\n\nconst PageTitle : React.FC<IProps> = ({title, icon, areaTitle, areaHref, updateDocTitle = true, hideAreaInDocTitle=false, areaTitleBottom=false, iconColor='dimmed', onAreaClick }) => {\n // Set <title> attribute automagically.\n\n useTitle(title, hideAreaInDocTitle ? undefined : areaTitle || '', undefined, updateDocTitle);\n\n return (\n <Container>\n {icon ?\n <IconContainer ><Icon size={ICON_SIZE} color={iconColor} {...{icon}} /></IconContainer>\n : null}\n\n <TitlesWrapper $areaTitleBottom={areaTitleBottom}>\n {areaTitle && onAreaClick ? (\n <AreaButton onClick={onAreaClick} type=\"button\">{areaTitle}</AreaButton>\n ) : areaTitle && areaHref ? (\n <AreaLinkTitle to={areaHref}>{areaTitle}</AreaLinkTitle>\n ) : areaTitle ? (\n <AreaTitle>{areaTitle}</AreaTitle>\n ) : null}\n <Title>{title}</Title>\n </TitlesWrapper>\n\n\n </Container>\n );\n};\n\nexport default PageTitle;","import React from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.p`\n font-family: var(--font-ui);\n color: var(--grey-11);\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px; /* 142.857% */\n`;\n\ninterface IProps {\n children?: React.ReactNode;\n}\n\nconst IntroductionText : React.FC<IProps> = ({children}) => {\n return (\n <Container>\n <>{children}</>\n </Container>\n );\n};\n\nexport default IntroductionText;","import React, { useMemo } from 'react';\nimport styled, { css } from 'styled-components';\nimport Icon, { IconProps, IconWrapper } from '../../Icons/Icon';\nimport { Link } from 'react-router-dom';\nimport { resetButtonStyles } from '../../common';\n\nconst TextContainer = styled.div`\n user-select: none;\n`;\n\nconst StyledLink = styled(Link)`\n text-decoration: none;\n display: flex;\n`;\n\nconst StyledButton = styled.button`\n ${resetButtonStyles};\n text-decoration: none;\n display: flex;\n`;\n\nexport const TagWrapper = styled.div<{ $hoverColor: ISvgIcons['color']; $enableHover: boolean; $size: number, $tagSize?: TypeTagSize, $noBorder: boolean }>`\n font-family: var(--font-data);\n font-size: ${({ $size }) => $size}px;\n font-weight: 500;\n color: var(--grey-11);\n padding: 4px 10px;\n\n ${({ $noBorder }) => !$noBorder && css`\n border: solid 1px var(--grey-8);\n border-radius: 3px;\n `\n };\n\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n gap: 8px;\n\n ${({ $tagSize }) => $tagSize === 'compact' && css`\n padding: 2px 6px;\n gap: 4px;\n `};\n\n ${({ $tagSize }) => $tagSize === 'default' && css`\n padding: 3px 8px;\n `};\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--dimmed);\n }\n\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n ${({ $hoverColor, $enableHover }) => $enableHover && css`\n &:hover {\n cursor: pointer;\n border-color: var(--${$hoverColor});\n color: var(--${$hoverColor});\n ${IconWrapper} {\n [stroke]{\n stroke: var(--${$hoverColor});\n }\n }\n }\n `};\n`;\n\nexport type TypeTagSize = undefined | 'compact' | 'default'\n\ninterface OwnProps {\n label?: string\n linkTo?: string\n noBorder?: boolean\n tagSize?: TypeTagSize\n onTagClick?: () => void\n}\n\nexport type ITag = OwnProps & IconProps;\n\nconst Tag: React.FC<ITag> = ({\n icon = '',\n size = 12,\n weight = 'regular',\n label = '',\n linkTo,\n noBorder = false,\n tagSize,\n onTagClick,\n ...props\n}) => {\n\n const iconTagSize = useMemo(() => tagSize === 'compact' ? 8 : 10, [tagSize]);\n const textTagSize = useMemo(() => tagSize === 'compact' ? 12 : 14, [tagSize]);\n\n const renderTag = () => (\n <TagWrapper $hoverColor='primary' $enableHover={onTagClick || linkTo ? true : false} $size={tagSize ? textTagSize : size} $tagSize={tagSize} $noBorder={noBorder}>\n {icon && (\n <Icon\n icon={icon}\n size={tagSize ? iconTagSize : size}\n weight={weight}\n {...props}\n />\n )}\n <TextContainer>{label}</TextContainer>\n </TagWrapper>\n );\n\n return (\n onTagClick ? (\n <StyledButton onClick={onTagClick} type=\"button\">\n {renderTag()}\n </StyledButton>\n ) : linkTo ? (\n <StyledLink to={linkTo}>\n {renderTag()}\n </StyledLink>\n ) : renderTag()\n );\n};\n\nexport default Tag;","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport PageTitle from '../atoms/PageTitle';\nimport IntroductionText from '../atoms/IntroductionText';\nimport Tag from '../../Misc/atoms/Tag';\nimport { deviceMediaQuery } from '../../theme/common';\n\nconst Container = styled.div`\n display: flex;\n justify-content: space-between;\n gap: 32px;\n`;\n\nconst LeftPanel = styled.div`\n`;\n\nconst IntroductionTextWrapper = styled.div`\n max-width: 648px;\n`;\n\nconst RightPanel = styled.div<{$iconLeftPanel: boolean}>`\n ${({$iconLeftPanel}) => $iconLeftPanel && css`\n padding-top: 32px;\n `};\n\n @media ${deviceMediaQuery.large} {\n padding-top: 0px;\n }\n\n`;\n\nconst TagListWrapper = styled.div`\n display: inline-flex;\n align-items: flex-start;\n flex-wrap: wrap;\n gap: 4px;\n margin-bottom: 5px;\n margin-top: 29px;\n`;\n\nconst BottomLeft = styled.div``;\n\nexport type IHeaderTag = {\n label: string\n linkTo?: string\n icon?: string\n onTagClick?: () => void\n}\n\ninterface IProps {\n title: string\n areaHref?: string\n areaTitle?: string\n icon?: string\n iconColor?: string\n introductionText?: string\n updateDocTitle?: boolean\n hideAreaInDocTitle?: boolean\n tagList?: IHeaderTag[]\n areaTitleBottom?: boolean\n rightContent?: React.ReactNode;\n bottomLeftContent?: React.ReactNode;\n onAreaClick?: () => void\n}\n\nconst PageHeader: React.FC<IProps> = ({\n title,\n icon,\n iconColor='primary-9',\n introductionText,\n areaHref,\n areaTitle,\n updateDocTitle = true,\n hideAreaInDocTitle,\n tagList,\n areaTitleBottom,\n rightContent,\n bottomLeftContent,\n onAreaClick,\n}) => {\n\n return (\n <Container>\n <LeftPanel>\n <PageTitle iconColor={iconColor} {...{ title, icon, areaHref, areaTitle, updateDocTitle, hideAreaInDocTitle, areaTitleBottom, onAreaClick, bottomLeftContent }} />\n {!tagList ?\n null\n :\n <TagListWrapper>\n {\n tagList.map(({ icon, label, linkTo, onTagClick }) => (\n <Tag key={`tag-`} icon={icon || ''} noBorder={true} tagSize='compact' {...{ label, linkTo, onTagClick }} />\n ))\n }\n </TagListWrapper>\n }\n {introductionText ?\n <IntroductionTextWrapper>\n <IntroductionText>{introductionText}</IntroductionText>\n </IntroductionTextWrapper>\n : null\n }\n {\n <BottomLeft>\n <>{bottomLeftContent}</>\n </BottomLeft>\n }\n </LeftPanel>\n {rightContent ?\n <RightPanel $iconLeftPanel={!!icon}>\n <>{rightContent}</>\n </RightPanel>\n : null\n }\n </Container>\n );\n};\n\nexport default PageHeader;","import React, { ReactElement } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\n/**\n * This component creates a column of ReactElements\n */\nexport interface IMultiContent {\n contentArray: ReactElement[];\n}\n\nconst MultilineContent : React.FC<IMultiContent> = ({contentArray}) => {\n return(\n <Container>\n {contentArray.map((element, index) => {\n return <div key={`element-${index}`}>{element}</div>;\n })}\n </Container>\n );\n};\n\nexport default MultilineContent;","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { useMediaModal } from '../../hooks/useMediaModal';\nimport { IMediaType } from '../..';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport { NoImage } from '../../svg';\n\ntype VideoAspects = '4:3' | '16:9';\n\nconst Container = styled.div<{ $hoverZoom?: boolean, $aspect?: VideoAspects, $mediaUrl?: string}>`\n position: relative;\n height: inherit;\n background: grey;\n border-radius: 3px;\n overflow: hidden;\n width: 55px;\n height: auto;\n opacity: 0.65;\n margin-right: 10px;\n\n &::after {\n content: '';\n display: block;\n padding-bottom: 75%;\n ${({ $aspect }) => $aspect === '16:9' && css`\n padding-left: 56.25%;\n `}\n }\n\n transition:\n opacity var(--speed-normal) var(--easing-primary-out),\n transform var(--speed-fast) var(--easing-primary-out);\n\n &:hover {\n cursor: pointer;\n\n ${({ $hoverZoom }) => $hoverZoom && css`\n transform: scale(1.5);\n opacity: 1;\n transition: transform var(--speed-normal) var(--easing-primary-out);\n `}\n }\n\n`;\nconst ImageWrapper = styled.img`\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n`;\n\nconst NoImageWrapper = styled.div`\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n height: 41px;\n width: 55px;\n object-fit: cover;\n display: block;\n`;\n\nconst PlayableDrop = styled.div`\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--black-a1);\n height: 24px;\n width: 24px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n ${IconWrapper} {\n display: flex;\n svg {\n padding-left: 2px;\n path {\n stroke: var(--white-1);\n }\n }\n };\n`;\n\nexport interface ITableRowThumbnail {\n image?: string\n hoverZoom?: boolean,\n aspect?: VideoAspects\n mediaUrl?: string\n mediaType?: IMediaType\n retryImageLoad?: boolean\n retryLimit?: number;\n closeText?: string;\n onClickThumbnail?: () => void\n}\n\n// Image\n// No Image Placeholder\n\nconst TableRowThumbnail: React.FC<ITableRowThumbnail> = ({ hoverZoom = true, image='', mediaUrl, mediaType, retryImageLoad= false, retryLimit=5, closeText, onClickThumbnail}) => {\n const [showImage, setShowImage] = useState(!!image);\n const [imgSrc, setImgSrc] = useState(image);\n const { createMediaModal } = useMediaModal();\n const [retryCount, setRetryCount] = useState(0);\n const imgRef = useRef<HTMLImageElement>(null);\n const timeoutRef = useRef<(ReturnType<typeof setTimeout>)|null>(null);\n\n const handleModal = useCallback(async () => {\n createMediaModal({\n src: showImage && mediaUrl ? mediaUrl :'',\n mediaType: mediaType ? mediaType : 'img',\n minHeight: '240px',\n closeText\n });\n }, [closeText, createMediaModal, mediaType, mediaUrl, showImage]);\n\n useEffect(()=>{\n setShowImage(false);\n setRetryCount(0);\n setImgSrc(image);\n },[image]);\n\n useEffect(()=>{\n if(imgRef.current && imgRef.current.complete && imgSrc !== ''){\n timeoutRef.current && clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n setShowImage(true);\n }\n },[imgSrc]);\n\n const retryTimeout = useCallback(()=>{\n timeoutRef.current = null;\n setImgSrc(`${image}?v=${Date.now()}`);\n },[image]);\n\n const retryImage = useCallback(()=>{\n setShowImage(false);\n if(!retryImageLoad || retryCount >= retryLimit ||timeoutRef.current) return;\n const randomDelay = (1000 * (retryCount ** 2 + Math.random())); // exponential back off retry\n setRetryCount(count => count+1);\n timeoutRef.current = setTimeout(retryTimeout, randomDelay);\n },[retryCount, retryImageLoad, retryLimit, retryTimeout]);\n\n const onLoad = useCallback(()=>{\n timeoutRef.current && clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n setShowImage(true);\n },[]);\n\n const checkIfImageExists = (url: string, imageExistsCallback: (exists: boolean) => void) => {\n if (!url) { imageExistsCallback(false); return; }\n const img = new Image();\n img.src = url;\n\n if (img.complete) {\n imageExistsCallback(true);\n } else {\n img.onload = () => {\n imageExistsCallback(true);\n };\n\n img.onerror = () => {\n imageExistsCallback(false);\n };\n }\n };\n\n useEffect(() => {\n checkIfImageExists(image, (exists) => {\n if (exists) {\n setShowImage(true);\n } else {\n setShowImage(false);\n }\n });\n },[image]);\n\n return (\n <Container $hoverZoom={hoverZoom} $mediaUrl={mediaUrl} $aspect='16:9' onClick={ onClickThumbnail || handleModal}>\n {showImage ?\n <ImageWrapper ref={imgRef} src={imgSrc} onError={retryImage} onLoad={onLoad} /> :\n <NoImageWrapper><NoImage /></NoImageWrapper>}\n {mediaUrl && (mediaType === 'video') &&\n <PlayableDrop>\n <Icon size={12} icon='Play' color='inverse' />\n </PlayableDrop>}\n </Container>\n );\n};\n\nexport default TableRowThumbnail;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport {IDeviceStatus} from '..';\n\ntype TypeDeviceStatus = IDeviceStatus;\n\nconst Container = styled.div<{ $status: TypeDeviceStatus }>`\n height: 42px;\n width: 4px;\n border-radius: 3px;\n display: block;\n\n ${({$status, theme: {colors}}) => css`\n background: ${colors.status[$status]};\n content:'${$status}';\n `}\n\n`;\n\ninterface IProps {\n status: TypeDeviceStatus\n}\n\nconst TypeTableDeviceStatus : React.FC<IProps> = ({status = 'neutral'}) => {\n return <Container $status={status} />;\n};\n\nexport default TypeTableDeviceStatus;","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Icon from '../../Icons/Icon';\nimport { useCopyToClipboard } from '../../hooks/useCopyToClipboard';\nimport {TypeCellStyle, TypeCellAlignment} from '..';\n\nconst CopyToClipboard = styled.button`\n\n cursor: pointer;\n opacity: 0;\n\n position: absolute;\n right: 0;\n top: 14px;\n width: 20px;\n height: 20px;\n background: transparent;\n border: none;\n outline: none;\n\n transition: var(--speed-normal) var(--easing-primary-out);\n\n svg {\n display: block;\n }\n\n &:hover {\n opacity: 1 !important;\n }\n\n`;\n\nconst CellContainer = styled.div<{ $cellStyle: TypeCellStyle, $alignment: TypeCellAlignment, $hideDivider?: boolean, $hasCopyButton?:boolean }>`\n display: table-cell;\n height: 50px;\n vertical-align: middle;\n position: relative;\n line-height: 30px;\n font-family: ${p => p.theme.fontFamily.data};\n\n &:hover ${CopyToClipboard}{\n opacity: 0.5;\n }\n\n &, a {\n ${({theme, $cellStyle, $alignment}) => $cellStyle === 'firstColumn' ? css`\n ${theme.typography.table.columnData[$cellStyle]};\n ` : css`\n ${theme.typography.table.columnData[$cellStyle][$alignment]};\n `}\n }\n\n a:hover {\n text-decoration: underline;\n }\n\n ${({$hasCopyButton}) => $hasCopyButton && css`\n padding-right: 20px;\n `};\n\n ${({theme: {styles}, $hideDivider}) => !$hideDivider && css`\n &::after {\n ${styles.tables.rows.divider};\n content: '';\n display: block;\n height: 1px;\n left: 0;\n right: 0;\n width: 100%;\n bottom: 0px;\n position: absolute;\n }\n `}\n`;\n\nconst UnitText = styled.span`\n ${({theme}) => css`\n ${theme.typography.table.columnData.unit};\n `}\n`;\n\nconst StatusBlip = styled.div<{$status?:string}>`\n display: inline-block;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n margin-right: 8px;\n ${({$status = 'neutral', theme: {colors}}) => css`\n background: ${colors.status[$status]};\n `}\n`;\ninterface IProps {\n isLastRow?: boolean\n hideDivider?: boolean\n cellStyle?: TypeCellStyle\n alignment?: TypeCellAlignment\n href?: string\n showUnit?: boolean\n showStatus?: boolean\n unit?: string\n status?: string\n hasCopyButton?: boolean\n children?: React.ReactNode\n}\n\nconst TypeTableCell : React.FC<IProps> = ({ showUnit = false, showStatus = false, status, unit = '', cellStyle = 'normalImportance', alignment = 'left', hideDivider, isLastRow, hasCopyButton, href, children }) => {\n\n // No divider on the last row.\n hideDivider = isLastRow ? true : hideDivider;\n\n const {copyToClipboard} = useCopyToClipboard();\n\n\n return (\n <CellContainer $cellStyle={cellStyle} $alignment={alignment} $hideDivider={hideDivider} $hasCopyButton={hasCopyButton}>\n <>\n {showStatus ? <StatusBlip $status={status} /> : null}\n {href ? <a href={href}>{children}</a> : children}\n {showUnit ? <UnitText>{unit}</UnitText> : null}\n {hasCopyButton ? <CopyToClipboard onClick={() => typeof children === 'string' && copyToClipboard(children)}><Icon icon='Copy' size={16} /></CopyToClipboard> : null}\n </>\n </CellContainer>\n );\n};\n\nexport default TypeTableCell;\n\n","import React, { useCallback } from 'react';\nimport styled, {css} from 'styled-components';\n\nimport Checkbox from '../../Form/atoms/Checkbox';\nimport TableRowThumbnail from './TableRowThumbnail';\nimport TypeTableDeviceStatus from './TypeTableDeviceStatus';\nimport TypeTableCell from './TypeTableCell';\nimport Icon from '../../Icons/Icon';\nimport { ITableColumnConfig, IRowData } from '..';\n\n\nconst RowContainer = styled.div<{$isEmpty: boolean}>`\n display: table-row;\n ${({$isEmpty}) => $isEmpty && css`\n visibility: hidden;\n `};\n`;\n\ninterface IProps {\n isLastRow?: boolean\n selectable?: boolean\n hasStatus?: boolean\n hasThumbnail?: boolean\n hasTypeIcon?: boolean\n columnConfig: ITableColumnConfig[]\n rowData: IRowData\n selectCallback? : (event: any, id?: string | number) => void\n closeText?: string\n}\n\nconst TypeTableRow : React.FC<IProps> = ({selectable = false, selectCallback, hasStatus, hasThumbnail, hasTypeIcon, rowData, isLastRow, columnConfig, closeText }) => {\n\n const wrappedSelectCallback = useCallback((checked: boolean) => {\n if(selectCallback){ selectCallback(checked, rowData.id); }\n }, [rowData.id, selectCallback]);\n\n const isEmpty = rowData.columns.length === 0;\n\n return (\n <RowContainer $isEmpty={isEmpty}>\n {selectable ? <TypeTableCell hideDivider><Checkbox checked={rowData._checked} disabled={rowData.checkboxDisabled} onChangeCallback={wrappedSelectCallback} /></TypeTableCell> : null}\n {hasStatus ? <TypeTableCell hideDivider><TypeTableDeviceStatus status={rowData.header?.status} /></TypeTableCell> : null}\n {hasThumbnail ? <TypeTableCell hideDivider><TableRowThumbnail image={rowData.header?.image} mediaUrl={rowData.header?.mediaUrl} mediaType={rowData.header?.mediaType} closeText={closeText} onClickThumbnail={rowData.header?.onClickThumbnail}/></TypeTableCell> : null}\n {hasTypeIcon ? <TypeTableCell hideDivider><Icon icon={rowData.header?.icon || ''} color='dimmed' weight='regular' size={16} /></TypeTableCell> : null}\n\n {rowData.columns.map((cell, key) => {\n const {cellStyle, alignment, showUnit, showStatus, hasCopyButton} = columnConfig[key];\n const {unit, status, text, customComponent} = cell;\n return <TypeTableCell key={key} href={cell.href} {...{cellStyle, alignment, showUnit, showStatus, hasCopyButton, unit, status, isLastRow}}>{customComponent ? customComponent : text}</TypeTableCell>;\n })}\n\n </RowContainer>\n );\n};\n\n\nexport default TypeTableRow;","import React from 'react';\nimport styled, {css}from 'styled-components';\nimport Icon, {IconWrapper} from '../../Icons/Icon';\n\nconst HeaderTitle = styled.div<{$sortable?: boolean, $isSortActive?: boolean, $ascending?:boolean}>`\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n display: inline-flex;\n justify-content: center;\n align-content: center;\n position: relative;\n padding: 0 2px;\n user-select: none;\n z-index: 99;\n\n ${IconWrapper} {\n position: absolute;\n top: 0px;\n left: -15px;\n display: none;\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n padding: 3px 1px;\n\n ${({$ascending}) => $ascending && css`\n transform: rotate(180deg);\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n top: 0;\n `}\n }\n\n ${({$isSortActive}) => $isSortActive && css`\n &:not(hover) {\n ${IconWrapper} {\n display: inline-flex;\n }\n }\n `}\n\n ${({theme: { styles }, $sortable}) => $sortable && css`\n\n ${styles.tables.header.sortable.default};\n\n &:hover {\n cursor: pointer;\n ${styles.tables.header.sortable.hover};\n\n ${IconWrapper} {\n ${styles.tables.header.sortable.hover};\n display: inline-flex;\n }\n }\n `}\n`;\n\ninterface IHeaderProps {\n isSortActive?: boolean\n header: string\n sortable?: boolean\n ascending?: boolean\n columnId?: string\n indexKey: number\n toggleSort: (dataKey: number, columnId?: string) => void\n}\n\nconst TableHeaderTitle : React.FC<IHeaderProps> = ({\n header,\n sortable,\n isSortActive,\n ascending,\n columnId,\n indexKey,\n toggleSort\n}) => {\n\n const handleClick = (key: number, colId?: string) => {\n toggleSort(key, colId);\n };\n\n return(\n <HeaderTitle\n $sortable={sortable}\n $isSortActive={isSortActive}\n $ascending={ascending}\n onClick={() => {handleClick(indexKey, columnId);}}\n >\n {sortable && <Icon icon='FilterSorting' size={14} color='dimmed' />}\n {header}\n </HeaderTitle>\n );\n};\n\nexport default TableHeaderTitle;","import React, { useState, useCallback, Fragment } from 'react';\nimport styled, { css } from 'styled-components';\nimport { TypeCellAlignment, ITableColumnConfig } from '..';\nimport Checkbox from '../../Form/atoms/Checkbox';\nimport TableHeaderTitle from '../atoms/TableHeaderTitle';\n\nconst HeaderRow = styled.div`\n display: table-row;\n height: 50px;\n`;\n\nconst HeaderItem = styled.div<{ $fixedWidth?: number, $alignment?: TypeCellAlignment, $hasCopyButton?: boolean, $minWidth?: number, $headerStyle: 'header' | 'subHeader', $isSortActive?: boolean }>`\n display: table-cell;\n height: inherit;\n vertical-align:top;\n line-height: 20px;\n position: relative;\n font-family: ${p => p.theme.fontFamily.ui};\n\n ${({ $hasCopyButton }) => $hasCopyButton && css`\n padding-right: 20px;\n `};\n\n ${({ theme, $alignment, $headerStyle }) => $alignment ? css`\n ${theme.typography.table[$headerStyle][$alignment]};\n ` : css`\n ${theme.typography.table[$headerStyle]['left']};\n `};\n\n ${p => p.$fixedWidth && css`\n width: ${p.$fixedWidth}px;\n `};\n\n ${({ $minWidth }) => $minWidth && css`\n min-width:${$minWidth}px;\n `};\n\n ${({ theme: {styles}, $headerStyle, $isSortActive }) => $headerStyle === 'subHeader' && css`\n padding-bottom: 15px;\n\n &::after {\n ${styles.tables.header.divider};\n content: '';\n display: block;\n height: 1px;\n left: ${$isSortActive ? '-15px' : '0'};\n right: 0;\n width: ${$isSortActive ? 'calc(100% + 15px)' : '100%'};\n bottom: 0px;\n position: absolute;\n }\n`};\n`;\n\n// Default alignment is left//\nconst TitleItems = styled.div<{ $alignment?: TypeCellAlignment }>`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n ${({ $alignment }) => $alignment && css`\n ${$alignment === 'right' ? 'align-items: flex-end' : null};\n ${$alignment === 'center' ? 'align-items: center' : null};\n `};\n`;\n\nconst GroupTitle = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n margin-bottom: 4px;\n`;\n\nconst Title = styled.div`\n ${({ theme: {typography} }) => css`\n ${typography.tables['groupName']};\n `};\n padding-left: 2px;\n padding-right: 8px;\n white-space: nowrap;\n`;\n\n// Keeps the height consistent with other rows\nconst EmptyTitle = styled.div`\n height: 20px;\n`;\n\nconst MiddleLine = styled.div<{ $isLastOfGroup?: boolean }>`\n ${({ theme: {styles} }) => css`\n ${styles.tables.header.groupLine};\n `};\n\n height: 1px;\n flex: 1;\n ${({ $isLastOfGroup }) => $isLastOfGroup && css`\n margin-right: 15px;\n `};\n`;\n\nconst renderGroupHeader = (columnConfig: ITableColumnConfig[], index: number) => {\n if (index < 0) { return null; }\n\n let isLastOfGroup: boolean = true;\n\n // Is Last of the group if the next is different\n if (index < (columnConfig.length - 1)) {\n isLastOfGroup = (columnConfig[index].groupTitle !== columnConfig[index + 1].groupTitle);\n }\n\n // if the column doesn't belong to any group\n if (!columnConfig[index].groupTitle) {\n return (\n <EmptyTitle />\n );\n }\n\n // has group, previous was equal\n if ((index !== 0) && (columnConfig[index - 1].groupTitle === columnConfig[index].groupTitle)) {\n return (\n <Fragment>\n <EmptyTitle />\n <MiddleLine $isLastOfGroup={isLastOfGroup} />\n </Fragment>\n );\n }\n\n // New GroupTitle\n return (\n <Fragment>\n <Title>{columnConfig[index].groupTitle}</Title>\n <MiddleLine $isLastOfGroup={isLastOfGroup} />\n </Fragment>\n );\n};\n\ninterface ITableHeader {\n selectable?: boolean\n hasStatus: boolean\n hasThumbnail: boolean\n hasTypeIcon: boolean\n allChecked: boolean\n disableAllChecked: boolean\n hasHeaderGroups: boolean\n columnConfig: ITableColumnConfig[]\n defaultAscending: boolean\n toggleAllCallback?: (checked: boolean) => void\n sortCallback?: (ascending: boolean, columnId: string) => void\n}\n\nconst TypeTableHeader: React.FC<ITableHeader> = ({\n selectable,\n hasStatus,\n hasThumbnail,\n hasTypeIcon,\n allChecked,\n disableAllChecked,\n hasHeaderGroups,\n columnConfig,\n defaultAscending,\n toggleAllCallback = () => { },\n sortCallback = () => { },\n}) => {\n\n const [sortSpec, setSortSpec] = useState(columnConfig);\n const [ascendingState, setAscendingState] = useState(defaultAscending);\n\n const toggleAllCallbackWrapper = useCallback((checked: boolean) => {\n toggleAllCallback(checked);\n }, [toggleAllCallback]);\n\n\n /**\n * Rules for toggling ascending value\n * - Clicked column was active, toggle value of ascending.\n * - No column was sorted before, keep the sorting ascending.\n * - Clicked column was not active persist the last ascending option\n */\n const toggleSort = useCallback((indexKey: number, columnId?: string) => {\n\n if (sortSpec[indexKey] === undefined) { return; }\n if (!sortSpec[indexKey].sortable) { return; }\n\n const updatedSort = [...sortSpec];\n\n let lastActiveKey: number | null = null;\n updatedSort.forEach((col, key) => {\n if (col.sortActive) {\n lastActiveKey = key;\n }\n if (key === indexKey) {\n col.sortActive = true;\n } else {\n col.sortActive = false;\n }\n });\n\n const newAscending: boolean = (lastActiveKey === indexKey) ? !ascendingState : ascendingState;\n const colId: string = (columnId === undefined) ? `column_${indexKey}` : columnId;\n sortCallback(newAscending, colId);\n setSortSpec(updatedSort);\n setAscendingState(newAscending);\n }, [ascendingState, sortCallback, sortSpec]);\n\n return (\n <HeaderRow>\n {selectable ? (\n <HeaderItem $headerStyle='header' $fixedWidth={30}>\n <Checkbox checked={allChecked} disabled={disableAllChecked} onChangeCallback={toggleAllCallbackWrapper} />\n </HeaderItem>)\n : null}\n {hasStatus ? <HeaderItem $headerStyle='header' $fixedWidth={10} /> : null}\n {hasThumbnail ? <HeaderItem $headerStyle='header' $fixedWidth={70} /> : null}\n {hasTypeIcon ? <HeaderItem $headerStyle='header' $fixedWidth={35} /> : null}\n\n {columnConfig.map((column, key, allColls) => {\n const { header, alignment, hasCopyButton, sortActive, columnId, sortable, minWidth }: ITableColumnConfig = column;\n return (\n <HeaderItem\n key={key}\n $alignment={alignment}\n $hasCopyButton={hasCopyButton}\n $minWidth={minWidth}\n $headerStyle={hasHeaderGroups ? 'subHeader' : 'header'}\n $isSortActive={sortActive}\n >\n <TitleItems $alignment={alignment}>\n {hasHeaderGroups &&\n <GroupTitle>\n {hasHeaderGroups && renderGroupHeader(allColls, key)}\n </GroupTitle>}\n <TableHeaderTitle\n header={header}\n sortable={sortable}\n indexKey={key}\n columnId={columnId}\n isSortActive={sortActive}\n ascending={ascendingState}\n toggleSort={toggleSort}\n />\n </TitleItems>\n </HeaderItem>);\n })}\n </HeaderRow>\n );\n};\n\nexport default TypeTableHeader;","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport Spinner from '../../Indicators/Spinner';\nimport TypeTableRow from '../atoms/TypeTableRow';\nimport { ITableColumnConfig, ITypeTableData, IRowData } from '..';\nimport TypeTableHeader from '../molecules/TypeTableHeader';\n\nconst Container = styled.div``;\n\nconst TableContainer = styled.div`\n display: table;\n width: 100%;\n position: relative;\n`;\n\nconst LoadingText = styled.div`\n color: var(--grey-a11);\n`;\n\nconst LoadingBox = styled.div`\n position: absolute;\n left: 0;\n z-index: 99;\n background-color: ${({ theme }) => theme.colors[\"pureBase\"]};\n height: calc(100% - 50px);\n opacity: 85%;\n width: 100%;\n min-height: 100px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 20px;\n\n ${LoadingText} {\n margin-top: 10px;\n }\n`;\n\nconst EmptyTableBox = styled.div`\n position: absolute;\n left: 0;\n z-index: 99;\n padding: 20px;\n width: 100%;\n min-height: 100px;\n text-align: center;\n h3 {\n font-weight: 500;\n color: var(--grey-11);\n }\n color: var(--grey-10);\n`;\n\nconst isChecked = ({ _checked = false }: IRowData) => {\n return _checked === true;\n};\n\nconst isCheckBoxDisabled = ({checkboxDisabled = false}: IRowData) => {\n return checkboxDisabled === true;\n};\n\ninterface IProps {\n columnConfig: ITableColumnConfig[]\n rows: ITypeTableData\n selectable?: boolean\n hasStatus?: boolean\n hasThumbnail?: boolean\n hasTypeIcon?: boolean\n defaultAscending?: boolean\n isLoading?: boolean\n loadingText?: string\n emptyTableTitle?: string\n emptyTableText?: string\n hasHeaderGroups?: boolean\n selectCallback?: (checked: boolean, id?: string | number) => void\n toggleAllCallback?: (checked: boolean) => void\n sortCallback?: (ascending: boolean, columnId: string) => void\n closeText?:string\n}\n\nconst TypeTable: React.FC<IProps> = ({\n columnConfig,\n selectable,\n rows = [],\n closeText,\n hasStatus = false,\n hasThumbnail = false,\n hasTypeIcon = false,\n defaultAscending = false,\n isLoading = false,\n loadingText = 'Loading Data...',\n emptyTableTitle = '',\n emptyTableText = '',\n hasHeaderGroups = false,\n sortCallback = () => { },\n selectCallback = () => { },\n toggleAllCallback = () => { },\n}) => {\n\n /* Note about Empty table\n Currently IRowData Type enforces user to send columns\n so rows length will always be at least 1\n I wasn't sure if I should edit IRowData to have columns optional\n If we allow columns to be optional, previous implementations\n wont be able to have \"No data\" Message\n*/\n\n const [allChecked, setAllChecked] = useState(false);\n const [disableAllChecked, setDisableAllChecked] = useState(false);\n const isEmptyTable = (rows.length === 1) && (rows[0].columns.length === 0) && (!isLoading);\n\n useEffect(() => {\n let areAllChecked = false;\n let disableCheckAll = false;\n\n if (rows.every(isChecked) && (rows.length > 0) && !isEmptyTable) {\n areAllChecked = true;\n }\n\n if (rows.some(isCheckBoxDisabled) || isEmptyTable || isLoading) {\n disableCheckAll = true;\n }\n\n setAllChecked(areAllChecked);\n setDisableAllChecked(disableCheckAll);\n\n }, [isEmptyTable, isLoading, rows]);\n\n return (\n <Container>\n <TableContainer>\n <TypeTableHeader\n {...{\n selectable,\n hasStatus,\n hasThumbnail,\n hasTypeIcon,\n defaultAscending,\n allChecked,\n disableAllChecked,\n hasHeaderGroups,\n columnConfig,\n toggleAllCallback,\n sortCallback,\n }}\n />\n {isLoading ? (\n <LoadingBox>\n <Spinner size='large' styling='primary' />\n <LoadingText>{loadingText}</LoadingText>\n </LoadingBox>\n ) : null}\n {isEmptyTable\n ? (\n <EmptyTableBox>\n <h3>{emptyTableTitle}</h3>\n <p>{emptyTableText}</p>\n </EmptyTableBox>\n )\n : null}\n {rows.map((rowData, key) => {\n const isLastRow = (rows.length - 1 === key) ? true : false;\n return (\n <TypeTableRow\n key={key} {...{\n rowData,\n isLastRow,\n selectable,\n selectCallback,\n columnConfig,\n hasStatus,\n hasThumbnail,\n hasTypeIcon,\n closeText\n }}\n />\n );\n })}\n </TableContainer>\n </Container>\n );\n};\n\nexport default TypeTable;","import React, { InputHTMLAttributes, useState, useCallback, useRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport SmallInput from '../../Form/atoms/SmallInput';\nimport Button from '../../Form/atoms/Button';\nimport ButtonWithLoading from '../../Form/atoms/ButtonWithLoading';\nimport { StyledLabel } from '../../Form/atoms/Label';\nimport IconButton from '../../Form/atoms/IconButton';\nimport { TypeCellAlignment } from '../';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { Link } from 'react-router-dom';\n\nconst Container = styled.div`\n position: relative;\n ${({ theme }) => css`\n font-family: ${theme.fontFamily.ui};\n `}\n`;\nconst StyledButton = styled(Button)`\n flex-shrink: 0;\n`;\n\nconst StyledLoadingButton = styled(ButtonWithLoading)`\n flex-shrink: 0;\n`;\n\nconst StyledLink = styled(Link)`\n color: inherit;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n`;\n\nconst EditContainer = styled.div`\n min-width: 320px;\n background-color: var(--grey-2);\n z-index: 99;\n position: absolute;\n bottom: -15px;\n left: -11px;\n display: flex;\n align-items: center;\n justify-content: center;\n ${StyledLabel} {\n margin:0;\n span {\n margin: 0;\n }\n }\n ${StyledButton} {\n margin-left: 5px;\n }\n ${StyledLoadingButton} {\n margin-left: 5px;\n }\n`;\n\nconst StyledIconButton = styled(IconButton)``;\n\nconst TextContainer = styled.div<{ $alignment: TypeCellAlignment }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-right: 18px;\n\n ${({ $alignment }) => $alignment === 'center' && css`\n justify-content: center;\n `}\n\n ${({ $alignment }) => $alignment === 'right' && css`\n justify-content: flex-end;\n`}\n\n ${StyledIconButton} {\n opacity: 0;\n position: absolute;\n top: 7px;\n right: 0;\n };\n\n &:hover {\n ${StyledIconButton} {\n opacity: 1;\n };\n }\n`;\n\nexport interface OwnProps {\n defaultValue: string\n rowKey: string\n alignment?: TypeCellAlignment\n toLink?: string\n saveCallback?: (inputValue: string, rowKey: string) => void\n}\n\ntype IEditableCell = OwnProps & InputHTMLAttributes<HTMLInputElement>\n\nconst EditCell: React.FC<IEditableCell> = ({\n type = 'text',\n placeholder = '',\n defaultValue,\n rowKey,\n alignment = 'left',\n toLink = '',\n saveCallback,\n ...props\n}) => {\n const [isEditMode, setIsEditMode] = useState(false);\n const [updatedValue, setUpdatedValue] = useState(defaultValue);\n const [loading, setLoading] = useState(false);\n\n const handleSave = useCallback(async (value: string) => {\n setLoading(true);\n if (saveCallback) {\n await saveCallback(value, rowKey);\n }\n setIsEditMode(false);\n setLoading(false);\n }, [rowKey, saveCallback]);\n\n const verifyKeyPress = useCallback(async (eve: React.KeyboardEvent<HTMLInputElement>) => {\n\n // var code = parseInt(eve.key, 10);\n const code = eve.keyCode | eve.which | parseInt(eve.key, 10);\n\n if (code === 13 && handleSave) {\n await handleSave(updatedValue);\n setIsEditMode(false);\n }\n\n if (code === 27) {\n setUpdatedValue(defaultValue);\n setIsEditMode(false);\n }\n\n }, [handleSave, updatedValue, defaultValue]);\n\n const editContainerRef = useRef<HTMLDivElement>(null);\n\n const onClickOutsideEdit = () => {\n setUpdatedValue(defaultValue);\n setIsEditMode(false);\n };\n\n useClickOutside(editContainerRef, onClickOutsideEdit);\n\n return (\n <Container>\n {isEditMode\n ? (\n <EditContainer ref={editContainerRef}>\n <SmallInput\n {...props}\n autoFocus\n label=''\n disabled={loading}\n type={type}\n placeholder={placeholder}\n defaultValue={defaultValue}\n onKeyUp={(eve: React.KeyboardEvent<HTMLInputElement>) => verifyKeyPress(eve)}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => { setUpdatedValue(e.target.value); }}\n />\n <StyledLoadingButton\n onClick={() => {\n handleSave(updatedValue);\n }}\n size='small'\n loading={loading}\n >\n {loading ? 'Saving' : 'Save'}\n </StyledLoadingButton>\n {!loading && (\n <StyledButton\n onClick={() => setIsEditMode(false)}\n design='secondary'\n size='small'\n >Cancel\n </StyledButton>)}\n </EditContainer>)\n : (\n <TextContainer $alignment={alignment}>\n {toLink ? <StyledLink to={toLink}>{updatedValue}</StyledLink> : updatedValue}\n <StyledIconButton icon='Edit' weight='light' size={16} onClick={() => setIsEditMode(true)} />\n </TextContainer>)}\n </Container>\n );\n};\n\nexport default EditCell;","import React from 'react';\nimport styled from 'styled-components';\nimport { MediaBoxWrapper } from '../../Misc/atoms/MediaBox';\nimport { IFeedbackColor } from '../..';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport MediaBox, { IMediaModal } from '../../Misc/atoms/MediaBox';\nimport { EllipsisStyles } from '../../common';\n\nconst Container = styled.div`\n width: 100%;\n height: 170px;\n border-radius: 3px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n position: relative;\n\n ${MediaBoxWrapper} {\n height: 100%;\n width: 100%;\n text-align: center;\n img, video {\n border-radius: 3px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n }\n`;\n\nconst EmptyWithIcon = styled.div<{$hasPadding: boolean}>`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n ${({$hasPadding})=> $hasPadding && `\n padding-bottom: 43px\n `}\n;\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n`;\nconst Notice = styled.div<{ $color?: IFeedbackColor }>`\n background-color: ${({$color }) => $color && `var(--${$color})`};\n color: var(--inverse);\n opacity: 0.85;\n height: 46px;\n width: 300px;\n position: absolute;\n bottom: 0px;\n left: 0px;\n display: flex;\n align-items: center;\n padding: 10px;\n`;\n\nconst NoticeMessage = styled.div`\n ${EllipsisStyles};\n max-width: 245px;\n font-size: 10px;\n`;\n\nconst NoticeTitle = styled.div`\n ${EllipsisStyles};\n max-width: 245px;\n font-size: 12px;\n`;\n\nconst NoticeIcon = styled.div`\n height: 20px;\n width: 20px;\n margin-left: 2px;\n\n ${IconWrapper} {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n }\n`;\n\nconst NoticeTextGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: 14px;\n`;\n\nconst StatusLine = styled.div<{ $color: IFeedbackColor }>`\n background-color: ${({$color }) => $color && `var(--${$color})`};\n height: 3px;\n width: 100%;\n`;\n\nexport interface IMediaStream extends IMediaModal {\n isEmptyWithIcon?: boolean\n emptyIcon?: string\n status?: IFeedbackColor\n noticeMessage?: string\n noticeTitle?: string\n noticeIcon?: string\n hasNotice?: boolean\n}\n\nconst MediaStream: React.FC<IMediaStream> = ({\n isEmptyWithIcon = false,\n status = 'neutral',\n noticeIcon,\n hasNotice = false,\n noticeMessage,\n noticeTitle,\n emptyIcon,\n ...props\n}) => {\n return (\n <Container>\n {isEmptyWithIcon\n ? <EmptyWithIcon $hasPadding={hasNotice}><Icon icon={emptyIcon ? emptyIcon : 'PasswordHide'} color='dimmed' size={41} /></EmptyWithIcon>\n : <MediaBox {...{ ...props }} />}\n {hasNotice && (\n <Notice $color={status}>\n {noticeIcon && <NoticeIcon><Icon icon={noticeIcon} size={20} color='inverse' /></NoticeIcon>}\n <NoticeTextGroup>\n {noticeTitle && <NoticeTitle>{noticeTitle}</NoticeTitle>}\n {noticeMessage && <NoticeMessage>{noticeMessage}</NoticeMessage>}\n </NoticeTextGroup>\n </Notice>\n )}\n <StatusLine $color={status} />\n </Container>\n );\n};\n\nexport default MediaStream;","import React, { useMemo } from 'react';\nimport styled, { css } from 'styled-components';\nimport { EllipsisStyles } from '../../common';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\n\nconst Container = styled.div`\n display: flex;\n height: 60px;\n`;\n\nconst LeftData = styled.div<{ $hasRightData: boolean }>`\n ${({ $hasRightData }) => $hasRightData && css`\n border-right: var(--grey-6) 1px solid;\n width: 195px;\n `};\n\n padding: 0 12px 0 12px;\n display: flex;\n\n ${IconWrapper} {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n }\n`;\n\nconst RightData = styled.div`\n padding: 0 12px 0 16px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n`;\n\nconst DeviceDataGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: 14px;\n justify-content: center;\n`;\n\nconst LeftTitle = styled.div<{ $hasMarginBottom: boolean, $hasRightData: boolean }>`\n ${EllipsisStyles};\n ${({ $hasRightData }) => $hasRightData\n ? `max-margin: 140px;`\n : `max-margin: 250px;`\n }};\n ${({ $hasMarginBottom }) => $hasMarginBottom && `margin-bottom: 1px;`};\n\n color: var(--grey-a10);\n font-size: 10px;\n`;\n\nconst LeftSubTitle = styled.div<{ $hasRightData: boolean }>`\n font-family: var(--font-data);\n ${EllipsisStyles};\n ${({ $hasRightData }) => $hasRightData\n ? `max-width: 140px;`\n : `max-width: 250px;`\n }\n\n color: var(--grey-11);\n font-size: 16px;\n`;\n\nconst Title = styled.div<{ $hasMarginBottom: boolean }>`\n ${EllipsisStyles};\n max-width: 80px;\n color: var(--grey-a10);\n font-size: 10px;\n ${({ $hasMarginBottom }) => $hasMarginBottom && `margin-bottom: 6px;`};\n`;\n\nconst SubTitle = styled.div`\n ${EllipsisStyles};\n max-width: 80px;\n color: var(--grey-11);\n font-size: 12px;\n`;\n\nexport interface IPanelMetaData {\n deviceIcon?: string\n leftSubTitle?: string\n leftTitle?: string\n rightTitle?: string\n rightSubTitle?: string\n hideIcon?: boolean\n}\n\nconst PanelMetaData: React.FC<IPanelMetaData> = ({\n deviceIcon = 'Camera',\n leftSubTitle,\n leftTitle,\n rightTitle,\n rightSubTitle,\n hideIcon = false\n}) => {\n\n const hasRightData = useMemo(() => (!!rightTitle || !!rightSubTitle) , [rightSubTitle, rightTitle]);\n\n return (\n <Container>\n <LeftData $hasRightData={hasRightData}>\n {!hideIcon && <Icon icon={deviceIcon} color='dimmed' size={18} />}\n <DeviceDataGroup>\n {leftTitle && <LeftTitle $hasMarginBottom={!!leftSubTitle} $hasRightData={hasRightData}>{leftTitle}</LeftTitle>}\n {leftSubTitle && <LeftSubTitle $hasRightData={hasRightData}>{leftSubTitle}</LeftSubTitle>}\n </DeviceDataGroup>\n </LeftData>\n {hasRightData && (\n <RightData>\n {rightTitle && <Title $hasMarginBottom={!!rightSubTitle}>{rightTitle}</Title>}\n {rightSubTitle && <SubTitle>{rightSubTitle}</SubTitle>}\n </RightData>\n )}\n </Container>\n );\n};\n\nexport default PanelMetaData;","import React, { ReactElement } from 'react';\nimport styled from 'styled-components';\nimport MediaStream, { IMediaStream } from '../atoms/MediaStream';\nimport PanelMetaData, { IPanelMetaData } from '../atoms/PanelMetaData';\n\nexport const CameraPanelWrapper = styled.div<{$hasOnClick: boolean}>`\n width: 300px;\n height: 230px;\n border-radius: 3px;\n box-shadow: 0 2px 10px 0 var(--grey-a5);\n background-color: linear-gradient(180.00deg, var(--grey-2) 0%, var(--grey-3) 100%);\n }\n\n ${({$hasOnClick}) => $hasOnClick &&`\n cursor: pointer;\n `};\n`;\n\nexport interface ICameraPanel {\n streamProps: IMediaStream\n panelMetaData?: IPanelMetaData\n customBottom?: ReactElement\n panelOnClick?: () => void\n}\n\nconst NewComponent : React.FC<ICameraPanel> = ({\n streamProps,\n panelMetaData,\n customBottom,\n panelOnClick,\n ...props}) => {\n return(\n <CameraPanelWrapper onClick={panelOnClick} $hasOnClick={panelOnClick === undefined? false : true} {...props}>\n <MediaStream {...streamProps} />\n {customBottom\n ? customBottom\n : panelMetaData && <PanelMetaData {... panelMetaData} />}\n </CameraPanelWrapper>\n );\n};\n\nexport default NewComponent;","import React from 'react';\nimport styled from 'styled-components';\nimport CameraPanel, { ICameraPanel } from '../molecules/CameraPanel';\n\nconst CameraGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fill, 300px);\n gap: 20px 20px;\n`;\n\ninterface ICameraPanels {\n panels: ICameraPanel[]\n}\n\nconst CameraPanels: React.FC<ICameraPanels> = ({ panels }) => {\n return (\n <CameraGrid>\n {panels.map((props, index) => {\n return <CameraPanel key={index} {...props} />;\n })}\n </CameraGrid>\n );\n};\n\nexport default CameraPanels;","import React from 'react';\nimport styled from 'styled-components';\nimport Tag, {ITag, TagWrapper} from '../atoms/Tag';\n\n\nexport const TagListWrapper = styled.div`\n display: flex;\n ${TagWrapper} {\n margin-right: 10px;\n margin-bottom: 6px;\n flex-shrink: 0;\n }\n flex-wrap: wrap;\n`;\n\nexport interface ITagList {\n tagsConfig: ITag[]\n}\n\nconst TagList : React.FC<ITagList> = ({tagsConfig}) => {\n return(\n <TagListWrapper>\n {tagsConfig.map((tagProps, index) => {\n return (\n <Tag key={`tag-${index}`} {...tagProps} />\n );\n })}\n </TagListWrapper>\n );\n};\n\nexport default TagList;","import debounce from 'lodash.debounce';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport BasicSearchInput, { IBasicSearchInput } from '../atoms/BasicSearchInput';\n\n// Adding default value thinking of query params or other outside initialized value\ninterface IDebouncedSearcher extends IBasicSearchInput {\n defaultValue?: string;\n onDebouncedChange?: (newValue: string) => void\n}\n\nconst DebouncedSearcher: React.FC<IDebouncedSearcher> = ({\n onDebouncedChange = () => { },\n defaultValue,\n ...props\n}) => {\n const [typedValue, setTypedValue] = useState<string>(defaultValue || '');\n\n const debounceChange = useRef(debounce(newValue => updateChange(newValue), 600)).current;\n\n const updateChange = useCallback((newValue: string) => {\n onDebouncedChange(newValue);\n }, [onDebouncedChange]);\n\n const updateTyped = useCallback((e: React.FormEvent<HTMLInputElement>) => {\n const newValue = e.currentTarget.value;\n setTypedValue(newValue);\n debounceChange(newValue);\n }, [debounceChange]);\n\n useEffect(() => {\n if (defaultValue) {\n setTypedValue(defaultValue);\n }\n }, [defaultValue]);\n\n return (\n <BasicSearchInput {...props} onChange={updateTyped} value={typedValue} />\n );\n};\n\nexport default DebouncedSearcher;","import React from 'react';\nimport styled from 'styled-components';\nimport Button from '../../Form/atoms/Button';\nimport ButtonWithIcon, { IButtonWithIcon } from '../../Form/atoms/ButtonWithIcon';\n\nconst Container = styled.div``;\nconst Title = styled.div`\n font-family: ${({ theme }) => theme.fontFamily.ui};\n color: var(--grey-10);\n font-size: 12px;\n font-weight: 700;\n margin-bottom: 17px;\n`;\n\nconst ButtonsWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nconst LeftButtons = styled.div`\n button {\n margin: 0 10px 10px 0;\n }\n`;\n\nconst RightButtons = styled.div`\n flex-shrink: 0;\n`;\n\nconst SelectedResults = styled.div`\n font-family: ${({ theme }) => theme.fontFamily.ui};\n margin-top: 29px;\n min-height: 19px;\n color: var(--grey-10);\n font-size: 12px;\n`;\n\n\nconst renderSelected = (template: string, selected: number, total: number) => {\n const newSelected = template.replace('[SELECTED]', `${selected}`);\n return newSelected.replace('[TOTAL]', `${total}`);\n};\n\nexport interface IActionsButton extends IButtonWithIcon {\n text: string\n}\n\nexport interface IActionsBar {\n title?: string\n finishTextButton?: string\n actionButtons?: IActionsButton[]\n selectedTemplate?: string\n totalSelected?: number\n totalAvailable?: number\n finishCallback?: () => void\n}\n\nconst ActionsBar: React.FC<IActionsBar> = ({\n title = 'Actions:',\n finishTextButton = 'Finish',\n actionButtons = [],\n selectedTemplate = 'Selected [SELECTED] of [TOTAL] Results',\n totalSelected = 0,\n totalAvailable = 0,\n finishCallback = () => { }\n}) => {\n return (\n <Container>\n <Title>{title}</Title>\n <ButtonsWrapper>\n <LeftButtons>\n {actionButtons.map(({ design, size, position, text, ...props }, index) => {\n return (\n <ButtonWithIcon\n key={index}\n design={design || 'secondary'}\n size={size || 'small'}\n position={position || 'left'}\n {...props}\n >\n {text}\n </ButtonWithIcon>\n );\n })}\n </LeftButtons>\n <RightButtons>\n <Button size='small' onClick={finishCallback}>{finishTextButton}</Button>\n </RightButtons>\n </ButtonsWrapper>\n <SelectedResults>{renderSelected(selectedTemplate, totalSelected, totalAvailable)}</SelectedResults>\n </Container>\n );\n};\n\nexport default ActionsBar;","import React, { ChangeEvent, HTMLAttributes, useCallback, useState, useRef, Fragment, useEffect } from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport Button from '../../Form/atoms/Button';\nimport Icon from '../../Icons/Icon';\nimport { removeAutoFillStyle, resetButtonStyles } from '../../common';\nimport { isNotNumber } from '../../helpers';\nimport SelectField, { SelectWrapper } from '../../Form/atoms/SelectField';\nimport Label from '../../Form/atoms/Label';\n\nconst WIDTH_PER_NUMBER = 12;\n\nconst PaginationContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding-top: 20px;\n padding-bottom: 20px;\n width: 100%;\n height: fit-content;\n margin-right: 10px;\n white-space: nowrap;\n gap: 40px;\n vertical-align: baseline;\n`;\n\nconst StaticPageCount = styled.div`\n display: flex;\n align-items: center;\n box-sizing: border-box;\n font-size: 14px;\n color: var(--grey-8);\n height: 100%;\n text-align: left;\n padding-top: 1px;\n padding-right: 1px;\n`;\n\nconst StyledInput = styled.input<{ $maxWidth?: string }>`\n ${removeAutoFillStyle};\n color: var(--input-color-default);\n max-width: ${({ $maxWidth }) => $maxWidth ? $maxWidth : '40px'};\n font-family: var(--font-data);\n height: 100%;\n box-sizing: border-box;\n outline: none;\n background: transparent;\n text-align: right;\n font-size: 14px;\n font-weight: 500;\n line-height: 25px;\n border: none;\n padding-right: ${WIDTH_PER_NUMBER / 2}px;\n`;\n\nconst shakeAnimation = keyframes`\n 0% { transform: translateX(0); }\n 10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }\n 20%, 40%, 60%, 80% { transform: translateX(5px); }\n 100% { transform: translateX(0); }\n`;\n\nconst InputContainer = styled.div<{ $borderColorState?: string, $shouldShake: boolean }>`\n height: var(--input-height, 40px);\n animation: ${({ $shouldShake }) => ($shouldShake ? shakeAnimation : 'none')} 150ms 2 linear;\n flex-grow: 0;\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n padding: 0 8px;\n border-radius: 3px;\n box-shadow: 0 2px 1px 0 rgba(0, 102, 255, 0.04);\n ${({ $borderColorState }) => $borderColorState && `border: 1px solid var(--input-${$borderColorState}-border-color)`};\n`;\n\nconst GoButton = styled(Button)`\n height: 24px;\n padding: 0 8px;\n margin-left: 8px;\n`;\n\nconst ArrowWrapper = styled.div`\n display: flex;\n gap: 0 8px;\n`;\n\nconst ArrowButton = styled.button<{ $active: boolean }>`\n ${resetButtonStyles};\n width: 40px;\n height: 40px;\n padding: 12px;\n border-radius: 3px;\n box-shadow: 0 4px 9px 0 rgba(152, 174, 189, 0.07);\n border: solid 1px var(--input-default-border-color);\n background-color: var(grey-2);\n pointer-events: ${({ $active }) => $active ? 'auto' : 'none'};\n opacity: ${({ $active }) => $active ? '1' : '0.5'};\n\n &:focus, &:hover {\n outline: 2px solid #838383;\n }\n`;\n\nconst ItemsSelectWrapper = styled.div<{ $width: string }>`\n ${SelectWrapper} {\n width: ${({ $width }) => $width ? $width : `60px`};\n }\n`;\n\nexport interface IItemsOption {\n value: number\n textValue: string\n}\n\ninterface OwnProps {\n pageText?: string\n totalPages: number\n activePage?: number\n buttonText?: string\n itemsText?: string\n itemsDefaultValue?: number\n selectWidth?: string\n selectDisabled?: boolean\n selectId?: string\n itemsOptions: IItemsOption[]\n onPageChange: (page: number) => void\n onItemsChange: (items: number) => void\n}\n\nexport type IPagination = OwnProps & HTMLAttributes<HTMLDivElement>\n\nconst Pagination: React.FC<IPagination> = (props) => {\n const {\n pageText = 'Page:',\n totalPages = 1,\n activePage = 1,\n buttonText = 'GO',\n itemsText = 'Items Per Page',\n itemsDefaultValue,\n selectId = 'paginationPages',\n selectWidth = '60px',\n selectDisabled = false,\n itemsOptions = [],\n onPageChange,\n onItemsChange,\n } = props;\n\n const [fieldState, setFieldState] = useState<string>('default');\n const [pageValue, setPageValue] = useState<string>(activePage ? activePage.toString() : '1');\n const [disableGo, setDisabledGo] = useState<boolean>(parseInt(pageValue) > totalPages && fieldState !== '' ? false : true);\n const [shouldShake, setShouldShake] = useState<boolean>(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const getValidWidth = useCallback(() => {\n return `${(totalPages.toString().length * WIDTH_PER_NUMBER) + WIDTH_PER_NUMBER / 2}px`;\n }, [totalPages]);\n\n\n const isValidInput = useCallback((value: string) => {\n\n if (isNotNumber(value)) {\n return false;\n }\n\n if (parseInt(value) > totalPages) {\n return false;\n }\n\n if (parseInt(value) <= 0) {\n return false;\n }\n\n if (value === '') {\n return false;\n }\n\n return true;\n }, [totalPages]);\n\n\n const onInputChange = useCallback(({ target: { value } }: ChangeEvent<HTMLInputElement>) => {\n\n setShouldShake(false);\n if (isNotNumber(value)) {\n return;\n }\n\n // max total digits, without left zeros or empty value\n const validDigitValue = value === '' ? '' : Number(value.slice(-totalPages.toString().length)).toString();\n\n setPageValue(validDigitValue);\n if (isValidInput(validDigitValue)) {\n setFieldState('processing');\n setDisabledGo(false);\n\n } else {\n setFieldState('invalid');\n setDisabledGo(true);\n setShouldShake(true);\n }\n\n }, [isValidInput, totalPages]);\n\n\n const onBlur = useCallback(({ target: { value } }: React.FocusEvent<HTMLInputElement>) => {\n\n if ((value === '')) {\n setPageValue(activePage.toString());\n\n } else if (isValidInput(value) && parseInt(value) !== activePage) {\n setDisabledGo(false);\n setFieldState('processing');\n return;\n\n } else if (!isValidInput(value)) {\n setFieldState('invalid');\n setDisabledGo(true);\n return;\n }\n\n setFieldState('default');\n\n }, [activePage, isValidInput]);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\n if ((event.key === 'Enter') && isValidInput(pageValue)) {\n onClickGo();\n }\n\n };\n\n /**\n * Review if current edith is valid if not make disable\n */\n const onFocus = ({ target: { value } }: React.FocusEvent<HTMLInputElement>) => {\n\n if (isValidInput(value)) {\n setFieldState('processing');\n } else {\n setFieldState('invalid');\n setDisabledGo(true);\n }\n\n };\n\n const onClickGo = useCallback(() => {\n\n onPageChange(parseInt(pageValue));\n inputRef.current && inputRef.current.blur();\n setDisabledGo(true);\n setFieldState('default');\n\n }, [onPageChange, pageValue]);\n\n const handlePageChange = (value: number) => {\n onPageChange(value);\n setPageValue(value.toString());\n };\n\n const onItemsSelectChange = useCallback((value: string) => {\n onItemsChange(Number(value));\n }, [onItemsChange]);\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const clipboardData = e.clipboardData || (window as any).clipboardData; // Cross-browser support\n const pastedText = clipboardData.getData('text');\n\n if (!/^\\d+$/.test(pastedText)) {\n e.preventDefault();\n }\n };\n\n useEffect(() => {\n if(!activePage || !isValidInput(activePage ? activePage.toString() : '')) {\n console.warn('Pagination: invalid activePage prop value was sent');\n return;\n }\n\n setPageValue(activePage.toString());\n }, [activePage, isValidInput]);\n\n return (\n <PaginationContainer>\n <ItemsSelectWrapper $width={selectWidth}>\n <SelectField\n disabled={selectDisabled}\n label={{ htmlFor: selectId, text: itemsText, direction: 'row' }}\n defaultValue={itemsDefaultValue ? itemsDefaultValue : itemsOptions[0].value || 1}\n changeCallback={onItemsSelectChange}\n >\n <Fragment>\n {itemsOptions.map(({ value, textValue }, index) =>\n <option key={index} value={value}>{textValue}</option>\n )}\n </Fragment>\n </SelectField>\n </ItemsSelectWrapper>\n <Label labelText={pageText} htmlFor='goButton' direction='row'>\n <InputContainer $borderColorState={fieldState} $shouldShake={shouldShake}>\n <StyledInput\n ref={inputRef}\n value={pageValue}\n onChange={(e) => onInputChange(e)}\n onFocus={(e) => onFocus(e)}\n onBlur={(e) => onBlur(e)}\n onPaste={(e) => handlePaste(e)}\n onKeyDown={handleKeyDown}\n $maxWidth={getValidWidth()}\n />\n <StaticPageCount>{'/' + '\\u00A0' + totalPages.toString()}</StaticPageCount>\n <GoButton id='goButton' size='small' design='primary' disabled={disableGo} onClick={onClickGo}>{buttonText}</GoButton>\n </InputContainer>\n\n <ArrowWrapper>\n <ArrowButton\n onClick={() => handlePageChange(activePage - 1)}\n disabled={activePage <= 1}\n $active={fieldState === 'default' && activePage > 1}>\n <Icon icon='Left' color='input-lead-icon' size={8} />\n </ArrowButton>\n <ArrowButton\n onClick={() => handlePageChange(activePage + 1)}\n disabled={activePage >= totalPages}\n $active={fieldState === 'default' && activePage < totalPages}>\n <Icon icon='Right' color='input-lead-icon' size={8} />\n </ArrowButton>\n </ArrowWrapper>\n </Label>\n\n </PaginationContainer>\n );\n};\n\nexport default Pagination;","import React from 'react';\nimport styled from 'styled-components';\nimport Button from '../Form/atoms/Button';\nimport { TypeButtonDesigns } from '../Form';\nimport { useModal } from '../hooks';\n\nconst Container = styled.div``;\n\nconst Title = styled.div`\n font-size: 20px;\n font-weight: 400;\n text-align: left;\n text-shadow: 0px 0px 10px var(--white-a5);\n text-decoration: none;\n color: var(--grey-11);\n`;\n\nconst MessageBox = styled.div`\n font-size: 14px;\n font-weight: 400;\n line-height: 25px;\n text-align: left;\n text-decoration: none;\n color: var(--grey-11);\n margin: 28px 0;\n`;\n\nconst StyledButton = styled(Button)`\n margin-left: 10px;\n`;\n\nconst ButtonsGroup = styled.div`\n text-align: right;\n display: flex;\n justify-content: flex-end;\n`;\n\n\ntype IConfirmationModal = {\n title?: string,\n message: string,\n leftButtonText?: string,\n leftButtonDesign?: TypeButtonDesigns,\n leftButtonCallback?: () => void,\n rightButtonText?: string,\n rightButtonDesign?: TypeButtonDesigns,\n rightButtonCallback?: () => void,\n}\n\nconst ConfirmationModal: React.FC<IConfirmationModal> = ({\n title = '',\n message = '',\n leftButtonText = 'submit',\n leftButtonDesign = 'primary',\n leftButtonCallback = () => { },\n rightButtonDesign = 'secondary',\n rightButtonText = 'cancel',\n rightButtonCallback = () => { },\n}) => {\n\n const { setModalOpen } = useModal();\n\n const handlePrimaryBtn = () => {\n leftButtonCallback();\n setModalOpen(false);\n };\n\n const handleSecondaryBtn = () => {\n rightButtonCallback();\n setModalOpen(false);\n };\n\n return (\n <Container>\n <Title>{title}</Title>\n <MessageBox>{message}</MessageBox>\n <ButtonsGroup>\n <StyledButton\n design={leftButtonDesign}\n onClick={handlePrimaryBtn}\n >\n {leftButtonText}\n </StyledButton>\n <StyledButton\n design={rightButtonDesign}\n onClick={handleSecondaryBtn}\n >\n {rightButtonText}\n </StyledButton>\n </ButtonsGroup>\n </Container>\n );\n};\n\nexport default ConfirmationModal;","import React, { useState, useCallback, useEffect } from \"react\";\nimport styled from \"styled-components\";\n\nimport Icon from \"../../Icons/Icon\";\nimport { IUtilityHeaderLinkShare } from \"..\";\nimport { useCopyToClipboard } from \"../../hooks\";\n\n\nconst ExtraActionIcon = styled.div`\n display: flex;\n width: 16px;\n height: 16px;\n justify-content: center;\n align-items: center;\n`;\nconst ExtraAction = styled.button`\n position: relative;\n display: flex;\n padding: 0;\n align-items: center;\n gap: 8px;\n color: var(--grey-10);\n text-align: center;\n font-family: var(--font-ui);\n font-size: 12px;\n font-style: normal;\n font-weight: 600;\n line-height: normal;\n border: none;\n background: none;\n text-decoration: none;\n transition: color 0.25s ease;\n cursor: pointer;\n\n ${ExtraActionIcon}{\n svg * {\n transition: stroke 0.25s ease;\n }\n }\n \n &:hover {\n color: var(--grey-12);\n ${ExtraActionIcon}{\n svg * {\n stroke: var(--grey-12);\n }\n }\n }\n\n`;\n\nconst UtilityHeaderShare : React.FC<IUtilityHeaderLinkShare> = ({show, link, label = 'Share', copiedLabel = 'Copied'}) => {\n \n const [ copyActionText, setCopyActionText ] = useState<string>(label);\n const {copyToClipboard} = useCopyToClipboard();\n \n const clickHandlerShareLink = useCallback(() => {\n // Copy to clip board and change UI for short period.\n copyToClipboard( link ? link : window.location.href);\n setCopyActionText(copiedLabel);\n setTimeout(() => setCopyActionText(copyActionText), 2000);\n }, [link, copiedLabel, copyActionText, copyToClipboard]);\n\n useEffect(() => {\n // Update the label if prop is updated.\n setCopyActionText(label);\n }, [label]);\n \n if(!show){ return null; }\n \n return(\n <ExtraAction onClick={ clickHandlerShareLink }>\n <ExtraActionIcon>\n <Icon icon=\"Link\" size={16} color=\"grey-10\" />\n </ExtraActionIcon>\n {copyActionText}\n </ExtraAction>\n );\n \n};\n\nexport default UtilityHeaderShare;","import React, { useMemo } from \"react\";\nimport styled, { css } from \"styled-components\";\nimport {Link} from 'react-router-dom';\nimport Icon from \"../../Icons/Icon\";\nimport { IUtilityHeaderLinkBack } from \"..\";\nimport { resetButtonStyles } from '../../common';\n\nconst BackLinkIcon = styled.div`\n display: flex;\n width: 16px;\n height: 16px;\n justify-content: center;\n align-items: center;\n flex: 1;\n > div {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n`;\n\nconst backLinkStyle = css`\n position: relative;\n display: flex;\n padding: 0;\n align-items: center;\n gap: 8px;\n color: var(--grey-10);\n text-align: center;\n font-family: var(--font-ui);\n font-size: 12px;\n font-style: normal;\n font-weight: 600;\n line-height: normal;\n border: none;\n background: none;\n text-decoration: none;\n transition: color 0.25s ease;\n\n ${BackLinkIcon}{\n svg * {\n transition: stroke 0.25s ease;\n }\n }\n\n &:hover {\n color: var(--grey-12);\n ${BackLinkIcon}{\n svg * {\n stroke: var(--grey-12);\n }\n }\n }\n`;\n\nconst dividerStyle = css`\n content: '';\n display: inline-block;\n height: 12px;\n width: 1px;\n padding-left: 8px;\n border-right: 1px solid var(--grey-10);\n`;\n\nconst BackLink = styled(Link)<{$iconInGutter: boolean, $showDivider: boolean}>`\n ${backLinkStyle};\n margin-left: ${props => props.$iconInGutter ? '-24px' : '0' };\n\n ${({$showDivider}) => $showDivider && css`\n &::after {\n ${dividerStyle};\n }\n `}\n`;\n\nconst BackButton = styled.button<{$iconInGutter: boolean, $showDivider: boolean}>`\n ${resetButtonStyles};\n ${backLinkStyle};\n margin-left: ${props => props.$iconInGutter ? '-24px' : '0' };\n\n ${({$showDivider}) => $showDivider && css`\n &::after {\n ${dividerStyle};\n }\n `}\n`;\n\ninterface IUtilityHeaderLinkBackInstance extends IUtilityHeaderLinkBack {\n $iconInGutter: boolean;\n $showDivider: boolean;\n}\n\nconst UtilityHeaderBack : React.FC<IUtilityHeaderLinkBackInstance> = ({show = true, link, label = 'Back', $showDivider, $iconInGutter, onClick,}) => {\n\n const innerContent = useMemo(() => <React.Fragment>\n <BackLinkIcon>\n <Icon icon=\"Back\" size={16} color=\"grey-10\" />\n </BackLinkIcon>\n {label}\n </React.Fragment>,[label]);\n\n if(!show){ return null; }\n\n return <React.Fragment>\n\n {onClick ?\n <BackButton {...{$showDivider, $iconInGutter, onClick}}>{innerContent}</BackButton>\n :\n link && <BackLink to={link} {...{$showDivider, $iconInGutter}}>{innerContent}</BackLink>\n }\n </React.Fragment>;\n\n};\n\nexport default UtilityHeaderBack;","import React from \"react\";\nimport styled, { css } from \"styled-components\";\nimport {Link} from 'react-router-dom';\n\nimport { IUtilityHeader } from \"..\";\nimport Icon from \"../../Icons/Icon\";\nimport { useBreakpoints } from \"../../hooks\";\nimport UtilityHeaderShare from \"../atoms/UtilityHeaderShare\";\nimport UtilityHeaderBack from \"../atoms/UtilityHeaderBack\";\nimport { resetButtonStyles } from '../../common';\n\nconst Container = styled.div`\n max-width: var(--max-content-width);\n margin-top: var(--utility-header-padding-top);\n padding: 0 var(--content-layout-padding-right) 0 var(--content-layout-padding-left);\n height: 48px;\n width: 100%;\n display: flex;\n`;\n\nconst LeftArea = styled.div`\n display: flex;\n align-items: center;\n gap: var(--columnPadding, 16px);\n flex: 1 0 0;\n`;\n\nconst Breadcrumbs = styled.div`\n display: inline-flex;\n align-items: center;\n gap: 8px;\n`;\nconst Breadcrumb = styled.div`\n flex: 1;\n display: flex;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n white-space: nowrap;\n\n`;\nconst BreadcrumbIcon = styled.div`\n flex: 0;\n display: flex;\n align-items: center;\n\n > div {\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n`;\nconst HomeIcon = styled(BreadcrumbIcon)`\n padding-bottom: 1px;\n svg path {\n transition: stroke var(--speed-normal) var(--easing-primary-out);\n }\n`;\n\nconst BreadcrumbTextStyle = css`\n display: flex;\n flex-direction: row;\n gap: 8px;\n flex: 1;\n color: var(--grey-10);\n font-family: var(--font-ui);\n text-decoration: none;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 12px; /* 100% */\n`;\n\nconst BreadCrumbStyle = css`\n ${BreadcrumbTextStyle};\n transition: color var(--speed-normal) var(--easing-primary-out);\n\n &:hover {\n color: var(--grey-12);\n ${HomeIcon} svg {\n path {\n stroke: var(--grey-12);\n }\n }\n }\n`;\n\nconst BreadcrumbLink = styled(Link)`\n ${BreadCrumbStyle};\n`;\n\nconst BreadcrumbButton = styled.button`\n ${resetButtonStyles};\n ${BreadCrumbStyle};\n`;\n\nconst BreadcrumbText = styled.span`\n ${BreadcrumbTextStyle};\n pointer-events: none;\n`;\n\nconst RightArea = styled.div`\n flex: 1;\n align-items: center;\n display: flex;\n justify-content: right;\n`;\n\n\nconst UtilityHeader : React.FC<IUtilityHeader> = ({ showBreadcrumbs = true, breadcrumbs = [], showHomeIcon = true, back, share, $iconInGutter }) => {\n\n const { isLarge } = useBreakpoints();\n const iconInGutter = $iconInGutter !== undefined ? $iconInGutter : isLarge;\n const hasBreadcrumbs = showBreadcrumbs && breadcrumbs.length > 0;\n\n return (\n <Container>\n <LeftArea>\n {back && <UtilityHeaderBack $showDivider={hasBreadcrumbs} $iconInGutter={iconInGutter} {...back} />}\n {hasBreadcrumbs ?\n <Breadcrumbs>\n { breadcrumbs.map((breadcrumb, index) => {\n const {text, href, onClick} = breadcrumb;\n const isFirst = index === 0;\n const isLast = index === breadcrumbs.length - 1;\n\n const innerContent = (\n <React.Fragment>\n {isFirst && showHomeIcon ? <HomeIcon><Icon icon=\"Home\" size={11} color='grey-10' /></HomeIcon> : null }\n {text}\n </React.Fragment>\n );\n\n return (\n <React.Fragment key={index}>\n <Breadcrumb>\n {onClick ? (\n <BreadcrumbButton onClick={onClick} type=\"button\">\n {innerContent}\n </BreadcrumbButton>\n ) : href ? (\n <BreadcrumbLink to={href}>\n {innerContent}\n </BreadcrumbLink>\n ) : (\n <BreadcrumbText>\n {innerContent}\n </BreadcrumbText>\n )}\n {!isLast ? <BreadcrumbIcon><Icon icon=\"Right\" size={6} color='grey-8' /></BreadcrumbIcon> : null }\n </Breadcrumb>\n </React.Fragment>\n );\n })}\n </Breadcrumbs>\n : null }\n </LeftArea>\n <RightArea>\n <UtilityHeaderShare {...share} />\n </RightArea>\n </Container>\n );\n};\n\nexport default UtilityHeader;","import React, { useState, HTMLAttributes } from 'react';\n\nexport interface ContextProps {\n selected: string,\n setSelected: (value: string) => void\n}\nexport const TabContext = React.createContext<ContextProps>({\n selected: '',\n setSelected: () => { }\n});\n\ntype Props = HTMLAttributes<HTMLDivElement>\n\nconst Tabs: React.FC<Props> = ({ children }) => {\n const [selected, setSelected] = useState('');\n\n return (\n <TabContext.Provider value={{ selected, setSelected }}>\n {children}\n </TabContext.Provider>\n );\n};\n\nexport { Tabs };","import React from \"react\";\nimport styled from \"styled-components\";\nimport UtilityHeader from \"../molecules/UtilityHeader\";\nimport { IHeaderContent } from \"..\";\nimport { Tabs } from '../../Tabs/Tabs';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n position: relative;\n\n min-height: 100%;\n display: flex;\n`;\n\nconst HeaderArea = styled.div`\n width: 100%;\n max-width: var(--max-content-width);\n padding: \n 24px\n var(--content-layout-padding-right)\n 32px\n var(--content-layout-padding-left);\n \n`;\nconst TabArea = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n border-bottom: 1px solid var(--grey-4);\n`;\n\nconst TabAreaInner = styled.div`\n max-width: var(--max-content-width);\n flex: 1;\n width: 100%;\n padding: \n 0\n var(--content-layout-padding-right)\n 0\n var(--content-layout-padding-left);\n`;\n \nconst Content = styled.div`\n width: 100%;\n max-width: var(--max-content-width);\n padding: \n var(--content-layout-padding-top)\n var(--content-layout-padding-right)\n var(--content-layout-padding-bottom)\n var(--content-layout-padding-left);\n\n display: flex;\n flex: 1;\n flex-direction: column;\n`;\n\n\ninterface IContentLayout {\n layout?: 'default' | 'fullscreen' | 'dashboard';\n HeaderContent?: IHeaderContent;\n children?: React.ReactNode;\n}\n\nconst ContentLayout : React.FC<IContentLayout> = ({ layout = 'default', HeaderContent = {}, children }) => {\n const { PageHeaderArea, TabsElementArea, UtilityHeaderOptions } = HeaderContent;\n \n const containerClass = 'content-layout-' + layout;\n\n return (\n <Container className={containerClass}>\n \n {UtilityHeaderOptions ? \n <UtilityHeader {...UtilityHeaderOptions} />\n : null }\n \n {PageHeaderArea ? <HeaderArea>\n <>{PageHeaderArea}</>\n </HeaderArea> : null }\n \n {TabsElementArea ?\n <Tabs>\n <TabArea>\n <TabAreaInner>\n <>{TabsElementArea}</>\n </TabAreaInner>\n </TabArea>\n \n <Content>\n <>{children}</>\n </Content>\n </Tabs>\n :\n <Content>\n <>{children}</>\n </Content>\n }\n\n </Container>\n );\n};\n\nexport default ContentLayout;","import React, { useEffect, useRef, useState } from \"react\";\nimport styled from \"styled-components\";\n\nconst FullWidthContainer = styled.div<{ $contentHeight: number }>`\n min-height: ${({$contentHeight}) => $contentHeight + 'px'};\n`;\n\nconst FullWidthInner = styled.div`\n position: absolute;\n left: 0;\n right: 0;\n input {width: 100%;}\n`;\n\nconst FullWidthContentBlock : React.FC<React.PropsWithChildren> = ({children}) => {\n const innerElement = useRef<HTMLDivElement>(null);\n const [ contentHeight, setContentHeight ] = useState<number>(0);\n\n useEffect(() => {\n if(innerElement && innerElement.current){\n setContentHeight(innerElement.current.clientHeight);\n }\n }, [innerElement, children]);\n\n return <FullWidthContainer $contentHeight={contentHeight}>\n <FullWidthInner ref={innerElement}>\n <>{children}</>\n </FullWidthInner>\n </FullWidthContainer>;\n};\n\nexport default FullWidthContentBlock;","import React from \"react\";\nimport styled, { css } from \"styled-components\";\n\nexport type TResizeLineStates = 'default' | 'arrow';\nexport type TResizeLineLayouts = 'horizontal' | 'vertical';\nexport type TResizeLineDirection = 'up' | 'down' | 'left' | 'right' | undefined;\n\nconst Inner = styled.div`\n display: flex;\n flex: 0 0 200px;\n justify-content: center;\n align-items: center;\n gap: 8px;\n`;\n\nconst Line = styled.div`\n background: var(--grey-10);\n flex: 1;\n`;\n\nconst IconContainer = styled.div`\n flex: 0 0 20px;\n svg {\n path {\n stroke: var(--grey-11);\n }\n }\n`;\n\nconst IconDefault = styled.svg<{$layout: TResizeLineLayouts}>`\n transform: ${({$layout}) => $layout === 'horizontal' ? 'rotate(0deg)' : 'rotate(90deg)'};\n`;\n\nconst IconArrow = styled.svg<{$direction?: TResizeLineDirection}>`\n transform: rotate(0deg);\n ${({$direction}) => {\n switch($direction){\n case 'up':\n return 'transform: rotate(-90deg);';\n case 'down':\n return 'transform: rotate(90deg);';\n case 'left':\n return 'transform: rotate(180deg);';\n case 'right':\n default:\n return 'transform: rotate(0deg);';\n }\n }};\n`;\n\n\nconst Container = styled.div<{$layout: TResizeLineLayouts}>`\n display: flex;\n flex: 1;\n align-items: center;\n justify-content: center;\n\n ${({$layout}) => $layout === 'horizontal' ? css`\n width: 16px;\n flex-direction: column;\n ${Inner}{\n flex-direction: column;\n }\n\n ${Line}{\n width: 1px;\n }\n\n ` : css`\n height: 16px;\n flex-direction: row;\n ${Inner}{\n flex-direction: row;\n }\n ${Line}{\n height: 1px;\n }\n `}\n`;\n\ninterface IResizeLineProps {\n state?: 'default' | 'arrow';\n layout?: TResizeLineLayouts;\n arrowDirection?: TResizeLineDirection;\n}\n\nconst ResizeLine : React.FC<IResizeLineProps> = ({state = 'default', layout = 'horizontal', arrowDirection}) => {\n return (\n <Container $layout={layout}>\n <Inner>\n <Line />\n <IconContainer>\n {state === 'default' ? \n <IconDefault $layout={layout} width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 14.875V5.125\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M10 14.875V5.125\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n <path d=\"M7 14.875L7 5.125\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </IconDefault>\n : \n <IconArrow $direction={arrowDirection} width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.25 4.375L12.61 9.735C12.6803 9.80525 12.7199 9.90058 12.7199 10C12.7199 10.0994 12.6803 10.1948 12.61 10.265L7.25 15.625\" stroke=\"#9BA1A6\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </IconArrow>\n } \n </IconContainer>\n <Line />\n </Inner>\n </Container>\n );\n};\n\nexport default ResizeLine;","import React, { PointerEvent, useState, useCallback, useEffect, useRef, useImperativeHandle, forwardRef } from 'react';\nimport styled, { css } from \"styled-components\";\nimport ResizeLine, { TResizeLineDirection, TResizeLineStates } from '../atoms/ResizeLine';\nimport { useLocalStorage } from '../../hooks/useLocalStorage';\nimport { ISideAreaState, ISplitLayoutHandles, ISplitLayoutProps } from '..';\n\ninterface IPosition {\n x: number;\n y: number;\n}\ntype LayoutType = 'horizontal' | 'vertical';\n\nconst DebugData = styled.div`\n position: absolute;\n z-index: 10;\n bottom: 20px;\n left: 20px;\n background: #ededed99;\n border: grey 1px solid;\n padding: 20px;\n line-height: 20px;\n font-size: 12px;\n div {\n display: block;\n }\n span {\n display: inline-block;\n width: 130px;\n font-weight: 600;\n }\n`;\n\nconst MainArea = styled.div<{$minDimension?: number, $layout?: LayoutType}>`\n display: flex;\n position: relative;\n flex: 1;\n\n ${({$layout, $minDimension}) => $layout === 'vertical' ? css`\n ${$minDimension ? `min-height: ${$minDimension}px;` : null};\n ` : css`\n ${$minDimension ? `min-width: ${$minDimension}px;` : null};\n `}\n`;\n\nconst SideAreaInner = styled.div`\n display: flex;\n flex: 1;\n height: 100%;\n transition: opacity 0.2s cubic-bezier(0.85, 0, 0.15, 1);\n`;\n\nconst SideArea = styled.div<{$defaultSize: number, $maxDimension?: number, $minDimension?: number, $layout?: LayoutType, $collapseState: ISideAreaState }>`\n display: flex;\n position: relative;\n flex: 0 0 ${({$defaultSize}) => $defaultSize}px;\n display: ${({$collapseState}) => $collapseState === 'collapsed' ? 'none' : 'block'};\n transition:\n min-width 0.65s cubic-bezier(0, 0.55, 0.45, 1),\n min-height 0.65s cubic-bezier(0, 0.55, 0.45, 1);\n\n ${({$layout, $maxDimension, $minDimension}) => $layout === 'vertical' ? css`\n ${$minDimension ? `min-height: ${$minDimension}px;` : '0'};\n ${$maxDimension ? `max-height: ${$maxDimension}px;` : 'none'};\n ${SideAreaInner}{\n min-height: ${$minDimension}px;\n }\n ` : css`\n ${$minDimension ? `min-width: ${$minDimension}px;` : '0'};\n ${$maxDimension ? `max-width: ${$maxDimension}px;` : 'none'};\n ${SideAreaInner}{\n min-width: ${$minDimension}px;\n }\n `}\n\n\n ${({$layout, $collapseState, $minDimension}) => $collapseState === 'collapsing' ? css`\n transition: none;\n ${$layout === 'horizontal' ? 'min-width: 0' : 'min-height: 0'};\n ${SideAreaInner}{\n flex: 0 0 ${$minDimension}px;\n min-width: ${$minDimension}px;\n opacity: 0.5;\n }\n ` : null}\n\n ${({$collapseState}) => $collapseState === 'collapsed' ? css`\n ${SideAreaInner}{\n display: none;\n }\n ` : null}\n\n ${({$layout, $collapseState, $minDimension}) => $collapseState === 'peeking' ? css`\n ${$layout === 'horizontal' ? 'min-width: 0' : 'min-height: 0'};\n ${SideAreaInner}{\n min-width: ${$minDimension}px;\n opacity: 0.5;\n }\n ` : null}\n\n ${({$layout, $collapseState, $minDimension}) => $collapseState === 'opening' ? css`\n ${$layout === 'horizontal' ? 'min-width: 0' : 'min-height: 0'};\n\n ${SideAreaInner}{\n min-width: ${$minDimension}px;\n }\n ` : null}\n`;\nconst DragContainer = styled.div<{$size?: number, $fauxHover: 'true' | 'false'}>`\n flex: 0 0 ${({$size}) => $size}px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: col-resize;\n\n > div {\n transition: opacity 0.15s cubic-bezier(0.45, 0, 0.55, 1);\n }\n\n &:hover > div {\n opacity: 1;\n }\n\n ${({$fauxHover}) => $fauxHover === 'false' ? css`\n > div {\n opacity: 0.6;\n }\n ` : css`\n > div {\n opacity: 1;\n }\n `}\n\n`;\n\n\nconst Container = styled.section<{$initialised?: 'true' | 'false', $layout?: LayoutType, $reverse?: string}>`\n box-sizing: border-box;\n display: flex;\n flex:1;\n flex-direction: row;\n overflow: hidden;\n\n transition: opacity 0.25s cubic-bezier(0.45, 0, 0.55, 1);\n opacity: 0;\n\n ${({$initialised}) => $initialised === 'true' ? css`\n opacity: 1;\n ` : null}\n\n ${({$layout}) => $layout === 'vertical' ? css`\n flex-direction: column;\n ${MainArea}{}\n ${DragContainer}{\n cursor: row-resize;\n }\n ` : null}\n\n ${({$reverse}) => $reverse === 'true' ? css`\n ${MainArea}{ order: 2; }\n ${DragContainer}{ order: 1; }\n ` : null}\n`;\n\n// A flex container where the two internal areas can be adjusted with a drag handle.\n// The main area has a minimum size - it flexes to the available space.\n// The secondary side area has more restraints and is the part that is actively resized.\nconst SplitLayout = forwardRef<ISplitLayoutHandles, ISplitLayoutProps>(({ mainArea, sideArea, layout = 'horizontal', reverse, dividerSize = 16, persist = false, persistenceKey = 'resizable_ui', showDebug }, controlRef) => {\n\n const componentKey : string = 'resizable_layout_';\n const referenceKey : string = componentKey + persistenceKey;\n\n const closedBasis : number = 1;\n const hideTolerance : number = 50;\n const sideDefaultSize : number = sideArea.defaultSize || 350;\n const sideMinSize : number = sideArea.minSize || 0;\n const sideMaxSize : number | undefined = sideArea.maxSize;\n const mainMinSize : number | undefined = mainArea.minSize;\n\n const [initialised, setInitialised] = useState<boolean>(false);\n const [initialMousePos, setInitialMousePos] = useState<IPosition>();\n const [mousePosDiff, setMousePosDiff] = useState<IPosition>();\n const [resizing, setResizing] = useState<boolean>();\n\n const [sideAreaState, setSideAreaState] = useState<ISideAreaState>( sideArea.defaultCollapsed ? 'collapsed' : 'open');\n const [sideAreaBasis, setSideAreaBasis] = useState<number>(sideDefaultSize);\n const [sideAreaStartBasis, setSideAreaStartBasis] = useState<number>(sideDefaultSize);\n const [lastOpenSize, setLastOpenSize] = useState<number>(sideDefaultSize);\n\n const ContainerRef = useRef<HTMLDivElement>(null);\n const AreaB = useRef<HTMLDivElement>(null);\n\n // For persisting across refreshes and view changes.\n const [savedSize, setSavedSize] = useLocalStorage<number|null>(`${referenceKey}_size`, null);\n const [savedCollapsedState, setSavedCollapsedState] = useLocalStorage<ISideAreaState|null>(`${referenceKey}_state`, null);\n const [savedLastOpenSize, setSavedLastOpenSize] = useLocalStorage<number|null>(`${referenceKey}_quick_open_size`, null);\n\n /*\n -- Initialisation.\n */\n\n useEffect(()=>{\n if(!initialised){\n // Reload previous state if required.\n if(persist){\n if(savedSize){ setSideAreaBasis(savedSize); }\n if(savedCollapsedState){ setSideAreaState(savedCollapsedState); }\n if(savedLastOpenSize){ setLastOpenSize(savedLastOpenSize); }\n }\n // Used to run once and also hide render redraw\n setInitialised(true);\n }\n },[initialised, persist, savedCollapsedState, savedSize, savedLastOpenSize]);\n\n useEffect(() => {\n\n if(!initialised || !sideArea.onSideAreaStateChange) {return;}\n\n sideArea.onSideAreaStateChange(sideAreaState);\n\n },[initialised, sideArea, sideAreaState]);\n\n\n /*\n --- Expose Controls To Parent (via Ref) ---\n */\n\n useImperativeHandle(controlRef, () => ({\n open: () => {\n open();\n },\n close: () => {\n collapse();\n },\n reset: () => {\n restoreDefault();\n }\n }));\n\n\n /*\n --- Controls For Layout ---\n */\n\n /**\n * Restore layout to default as defined by props.\n */\n const restoreDefault = useCallback(() => {\n // Move the divider...\n setSideAreaBasis(sideDefaultSize);\n setSideAreaState('open');\n\n // ...and clear the localstorage.\n setSavedSize(null);\n setSavedCollapsedState(null);\n }, [setSideAreaBasis, sideDefaultSize, setSideAreaState, setSavedSize, setSavedCollapsedState]);\n\n /**\n * Set the side area to the fully collapsed state.\n */\n const collapse = useCallback(() => {\n setSideAreaState('collapsed');\n setSideAreaBasis(closedBasis);\n setSideAreaStartBasis(closedBasis);\n\n if(persist){\n setSavedSize(closedBasis);\n setSavedCollapsedState('collapsed');\n setSavedLastOpenSize(sideAreaStartBasis);\n }\n }, [setSideAreaBasis, setSideAreaState, setSavedCollapsedState, setSavedSize, setSavedLastOpenSize, sideAreaStartBasis, persist]);\n\n /**\n * Set the side area to the last open size or min size depending behaviour.\n */\n const open = useCallback(() => {\n setSideAreaState('open');\n let openBasis : number;\n\n if(sideAreaBasis > closedBasis && AreaB.current){\n openBasis = layout === 'horizontal' ? AreaB.current.clientWidth : AreaB.current.clientHeight;\n } else {\n openBasis = lastOpenSize;\n }\n\n setSideAreaStartBasis(openBasis);\n setSideAreaBasis(openBasis);\n\n if(persist){\n setSavedSize(Math.round(sideAreaBasis));\n setSavedCollapsedState('open');\n }\n }, [persist, setSavedCollapsedState, setSavedSize, lastOpenSize, sideAreaBasis, layout]);\n\n\n /*\n --- Interaction Events ---\n */\n\n const releaseDrag = useCallback(() => {\n // Close if drag is withing the close range.\n if(sideAreaState === 'collapsing' && sideAreaBasis < sideMinSize - hideTolerance){\n collapse();\n } else {\n setSideAreaStartBasis(Math.round(sideAreaBasis)); // ?\n setLastOpenSize(Math.round(sideAreaBasis));\n open();\n }\n\n setResizing(false);\n }, [collapse, open, sideMinSize, sideAreaBasis, sideAreaState]);\n\n const handleDragPointerDown = useCallback((event: PointerEvent<HTMLDivElement>) => {\n event.preventDefault();\n const { clientX, clientY } = event;\n\n // Need to set this different if collapsed.\n if(sideAreaState === 'collapsed'){\n setSideAreaStartBasis( sideAreaBasis );\n } else {\n setSideAreaStartBasis( clampInt(sideAreaBasis, sideMinSize, sideMaxSize) );\n }\n\n setInitialMousePos({x: clientX, y: clientY});\n setMousePosDiff({x: 0, y: 0});\n setResizing(true);\n }, [sideAreaBasis, sideMaxSize, sideMinSize, sideAreaState]);\n\n const handleDragPointerUp = () => {\n if(resizing){\n releaseDrag();\n }\n };\n\n const handleDragPointerMove = useCallback((event: PointerEvent<HTMLDivElement>) => {\n const { clientX, clientY } = event;\n let newBasis : number;\n let collapse : ISideAreaState = sideAreaState;\n\n if(resizing && initialMousePos && sideAreaStartBasis){\n setMousePosDiff({x: initialMousePos.x - clientX, y: initialMousePos.y - clientY});\n\n // Behaviour - Resizing\n if(layout === 'horizontal'){\n // Handle Horizontal Resizing\n const maxClamp = (ContainerRef.current?.clientWidth ?? 0) - dividerSize - (mainMinSize || 0);\n if(!reverse){\n newBasis = clampInt(sideAreaStartBasis + (initialMousePos.x - clientX), null, maxClamp);\n } else {\n newBasis = clampInt(sideAreaStartBasis - (initialMousePos.x - clientX), null, maxClamp);\n }\n } else {\n // Handle Vertical Resizing\n const maxClamp = (ContainerRef.current?.clientHeight ?? 0) - dividerSize - (mainMinSize || 0);\n if(!reverse){\n newBasis = clampInt(sideAreaStartBasis + (initialMousePos.y - clientY), null, maxClamp);\n } else {\n newBasis = clampInt(sideAreaStartBasis - (initialMousePos.y - clientY), null, maxClamp);\n }\n }\n\n // Behaviour - Hiding\n // Only sets to open, collapsing or opening. Closed is handle by the release only.\n if(sideArea.collapsable){\n const inCloseRange = newBasis < (sideMinSize - hideTolerance);\n\n if(sideAreaState === 'open' && inCloseRange){\n collapse = 'collapsing';\n } else if(sideAreaState === 'opening' && inCloseRange){\n collapse = 'collapsing';\n } else if(sideAreaState === 'collapsing' && !inCloseRange){\n collapse = 'open';\n } else if(sideAreaState === 'collapsed'){\n collapse = 'peeking';\n } else if(sideAreaState === 'peeking' && !inCloseRange){\n collapse = 'opening';\n }\n }\n\n // Commit To Scope\n setSideAreaBasis(newBasis);\n setSideAreaState(collapse);\n }\n }, [setSideAreaBasis, setMousePosDiff, resizing, initialMousePos, sideAreaStartBasis, sideAreaState, layout, dividerSize, mainMinSize, sideMinSize, reverse, sideArea.collapsable]);\n\n const handleMouseLeaveViewport = useCallback(() => {\n if(resizing){\n releaseDrag();\n }\n }, [resizing, releaseDrag]);\n\n useEffect(() => {\n document.addEventListener('mouseleave', handleMouseLeaveViewport);\n\n return () => {\n document.removeEventListener('mouseleave', handleMouseLeaveViewport);\n };\n }, [handleMouseLeaveViewport]);\n\n\n /*\n --- Drag Handle Logic ---\n */\n const resizeLineArrowDirection = () : TResizeLineDirection => {\n if(sideAreaState === 'collapsed' || sideAreaState === 'peeking'){\n if(layout === 'horizontal'){\n if(!reverse){\n return 'left';\n } else {\n return 'right';\n }\n } else {\n if(!reverse){\n return 'up';\n } else {\n return 'down';\n }\n }\n } else {\n if(layout === 'horizontal'){\n if(!reverse){\n return 'right';\n } else {\n return 'left';\n }\n } else {\n if(!reverse){\n return 'down';\n } else {\n return 'up';\n }\n }\n }\n };\n\n const resizeLineState = () : TResizeLineStates => {\n if(sideAreaState === 'collapsed' || sideAreaState === 'peeking'){\n // Indicate intent of re-opening.\n return 'arrow';\n } else if(sideAreaState === 'collapsing'){\n // Indicate intent of closing.\n return 'arrow';\n } else {\n return 'default';\n }\n };\n\n /*\n --- Useful Debug Overlay ---\n */\n\n const debugData = <DebugData>\n <div><span>State:</span> {sideAreaState}</div>\n <div><span>Position:</span> {initialMousePos?.x}, {initialMousePos?.y}</div>\n <div><span>Difference:</span> {mousePosDiff?.x}, {mousePosDiff?.y}</div>\n <div><span>sideAreaStartBasis:</span> {sideAreaStartBasis}</div>\n <div><span>sideAreaBasis:</span> {sideAreaBasis}</div>\n <div><span>lastOpenSize:</span> {lastOpenSize}</div>\n </DebugData>;\n\n\n /*\n --- Render ---\n */\n\n return(\n <Container ref={ContainerRef} onPointerMove={handleDragPointerMove} onPointerUp={handleDragPointerUp} $initialised={initialised ? 'true' : 'false'} $layout={layout} $reverse={reverse ? 'true' : 'false'}>\n\n <MainArea $layout={layout} $minDimension={mainMinSize}>\n <>{mainArea.content}</>\n </MainArea>\n\n <DragContainer onPointerDown={handleDragPointerDown} onDoubleClick={restoreDefault} $size={dividerSize} $fauxHover={resizing ? 'true' : 'false'}>\n <ResizeLine state={ resizeLineState() } layout={layout} arrowDirection={resizeLineArrowDirection()} />\n </DragContainer>\n\n <SideArea ref={AreaB} style={{ flexBasis: `${sideAreaBasis}px` }} $defaultSize={ sideDefaultSize } $minDimension={sideMinSize} $maxDimension={sideMaxSize} $layout={layout} $collapseState={sideAreaState}>\n <SideAreaInner>\n <>{sideArea.content}</>\n </SideAreaInner>\n </SideArea>\n\n {showDebug ? debugData : null}\n </Container>\n );\n});\n\n\n/**\n * Returns the number input but binding it within the range provided\n * @param value The value to clamp.\n * @param upper The maximum value of the range.\n * @param lower The minimum value of the range.\n * @returns The clamped number value.\n */\nconst clampInt = (value: number, lower?: number | null, upper?: number) : number => {\n let clampedInt : number = value;\n clampedInt = upper && clampedInt > upper ? upper : clampedInt;\n clampedInt = lower && clampedInt < lower ? lower : clampedInt;\n return clampedInt;\n};\n\nexport default SplitLayout;","import styled, {css} from 'styled-components';\nimport {deviceMediaQuery} from '../../theme/common';\n\nexport const MOBILE_CLOSE_HEIGHT = 50;\nexport const MOBILE_NAVBAR_HEIGHT = 68;\n\nexport const Layout = styled.div`\n display: flex;\n`;\n\nexport const MobileLayout = styled.div``;\n\n\nexport const Content = styled.div<{ $maxWidth?: string, $padBottom?: boolean }>`\n padding: 0;\n flex: 1;\n overflow: auto;\n\n & > div {\n max-width: 1400px;\n }\n\n ${\n ({ $maxWidth }) =>\n $maxWidth && css`\n & > div {\n max-width: ${$maxWidth};\n }\n `\n }\n`;\nexport const MainContainer = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n`;\n\nexport const ContentArea = styled.div<{ $maxWidth?: string, $paddingOverride?: string, $legacyLayout?: boolean }>`\n flex: 1;\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n\n ${({$legacyLayout, $paddingOverride, $maxWidth}) => $legacyLayout && css`\n padding: ${$paddingOverride ? $paddingOverride : '40px 20px'};\n\n @media ${deviceMediaQuery.medium} {\n padding: ${$paddingOverride ? $paddingOverride : '40px'};\n }\n\n @media ${deviceMediaQuery.large} {\n max-width: ${$maxWidth ? $maxWidth : `1200px`};\n padding: ${$paddingOverride ? $paddingOverride : '70px 90px'};\n }\n `}\n`;","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { Link } from 'react-router-dom';\n\nimport Icon, { IconWrapper } from '../../Icons/Icon';\n\n\nconst ContextTitle = styled.div<{ $compact?: boolean }>`\n opacity: 0;\n transition: opacity var(--speed-fast) var(--easing-primary-in-out);\n\n ${({ $compact }) => $compact && css`\n font-size:14px;\n `}\n`;\n\nconst ContextIcon = styled.div<{ $compact?: boolean }>`\n background-color: var(--global-menu-icon-background-default);\n transition: background-color var(--speed-fast) var(--easing-primary-out);\n \n flex: 0 0 40px;\n width: 40px;\n height: 40px;\n margin: 0 20px;\n\n border-radius: 7px;\n display:flex;\n justify-content:center;\n align-items:center;\n\n svg {\n display: block;\n }\n`;\n\nconst ContextIndicator = styled.div`\n width: 12px;\n height: 12px;\n flex: 0 0 14px;\n margin: 0 20px 0 auto;\n display: flex;\n justify-content: center;\n align-items: center;\n \n opacity: 0;\n transition: opacity 0 var(--easing-primary-out);\n\n svg {\n display: block;\n height: 12px;\n width: 12px;\n }\n`;\n\nconst ContextActionBaseCSS = css`\n -webkit-tap-highlight-color: transparent;\n border: none;\n background: none;\n display: flex;\n justify-content:left;\n align-items:center;\n flex-wrap: wrap;\n cursor: pointer;\n width: 100%;\n outline: none;\n padding: 0;\n text-decoration: none;\n font-family: var(--font-ui);\n font-weight: 500;\n font-size: 16px;\n color: var(--grey-11);\n\n &:hover{\n color: var(--grey-12);\n }\n`;\n\nconst StyledAnchor = styled.a`\n display: flex;\n text-decoration: none;\n`;\n\nconst ExternalIconWrapper = styled.div`\n margin-left: 15px;\n`;\n\nconst ContextWrapper = styled.div<{$menuOpen?: boolean}>`\n ${ContextActionBaseCSS}\n\n ${({ $menuOpen }) => $menuOpen && css`\n ${ContextTitle}{\n opacity: 1;\n }\n`}\n\n &:hover ${ContextIcon}{\n opacity: 1;\n background-color: var(--global-menu-icon-background-hover);\n\n ${IconWrapper}{\n [stroke]{\n stroke: var(--inverse);\n }\n }\n }\n`;\n\nconst ContextActionA = styled(Link) <{ $menuOpen?: boolean, $isActive: boolean }>`\n ${ContextActionBaseCSS}\n\n ${({ $menuOpen }) => $menuOpen && css`\n ${ContextTitle}{\n opacity: 1;\n }\n `}\n\n &:hover ${ContextIcon}{\n opacity: 1;\n background-color: var(--global-menu-icon-background-hover);\n\n ${IconWrapper}{\n [stroke]{\n stroke: var(--inverse);\n }\n }\n }\n\n ${({ $isActive }) => $isActive && css`\n color: var(--grey-12);\n\n ${ContextIcon},\n &:hover ${ContextIcon}{\n background-color: var(--global-menu-icon-background-active);\n }\n `}\n`;\nconst ContextActionButton = styled.button<{ $menuOpen?: boolean, $isActive: boolean }>`\n ${ContextActionBaseCSS}\n\n ${({ $menuOpen }) => $menuOpen && css`\n ${ContextTitle}{\n opacity: 1;\n }\n\n ${ContextIndicator}{\n opacity: 1;\n transition: opacity var(--speed-normal) var(--easing-primary-in-out) var(--speed-fast);\n }\n `}\n\n &:hover ${ContextIcon}{\n opacity: 1;\n background-color: var(--global-menu-icon-background-hover);\n\n ${IconWrapper}{\n [stroke]{\n stroke: var(--inverse);\n }\n }\n }\n\n ${({ $isActive }) => $isActive && css`\n ${ContextIcon},\n &:hover ${ContextIcon}{\n background-color: var(--global-menu-icon-background-active);\n }\n `}\n`;\n\ninterface IProps {\n title: string\n icon: string\n isActive: boolean\n menuOpen?: boolean\n submenuOpen?: boolean\n hasSubmenu?: boolean\n contextKey?: number\n href?: string\n compact?: boolean\n isExternalLink?: boolean\n onClickCallback?: (...args: any[]) => void\n}\n\nconst ContextItem: React.FC<IProps> = ({\n hasSubmenu = false,\n contextKey = -1,\n submenuOpen,\n menuOpen,\n title,\n href,\n icon,\n compact,\n isActive,\n isExternalLink,\n onClickCallback }) => {\n\n const internal = (\n <React.Fragment>\n <ContextIcon $compact={compact}>\n <Icon icon={icon} color={isActive ? 'inverse' : 'dimmed'} size={20} />\n </ContextIcon>\n <ContextTitle $compact={compact}>{title}</ContextTitle>\n {hasSubmenu ? <ContextIndicator><Icon icon={submenuOpen ? 'Up' : 'Down'} color='dimmed' /></ContextIndicator> : null}\n </React.Fragment>);\n\n if (hasSubmenu) {\n return (\n <ContextActionButton $menuOpen={menuOpen} $isActive={isActive} onClick={() => onClickCallback && onClickCallback(contextKey)}>\n {internal}\n </ContextActionButton>\n );\n } else {\n return (\n isExternalLink\n ? (\n <StyledAnchor href={href} target='_blank'>\n <ContextWrapper $menuOpen={menuOpen}>\n {internal}\n <ExternalIconWrapper>\n <Icon icon='ExternalLink' color='dimmed' size={12} />\n </ExternalIconWrapper>\n </ContextWrapper>\n </StyledAnchor>\n )\n : (\n <ContextActionA\n $menuOpen={menuOpen}\n to={href ? href : '#'}\n $isActive={isActive}\n onClick={() => onClickCallback && onClickCallback(contextKey)}\n >\n {internal}\n </ContextActionA>)\n );\n }\n\n};\n\nexport default ContextItem;","import { useReducer, useCallback, useLayoutEffect } from 'react';\n\nimport useBreakpoints, { IBreakpoints } from './useBreakpoints';\n\ninterface IMenuState {\n desktopSize: IBreakpoints\n isMenuPinned: boolean\n isMenuOpen: boolean\n canPin: boolean\n}\n\ninterface SET_MENU {\n type: 'SET_MENU'\n data: {\n desktopSize: IBreakpoints\n defaultMenuOpen: boolean\n canAlwaysPin?: boolean\n }\n}\n\ninterface SET_OPEN {\n type: 'SET_OPEN'\n}\n\ninterface SET_CLOSE {\n type: 'SET_CLOSE'\n}\n\ninterface TOGGLE_PIN {\n type: 'TOGGLE_PIN'\n}\n\ntype IMenuActions = SET_MENU | SET_OPEN | SET_CLOSE | TOGGLE_PIN\n\n\nconst menuReducer = (state: IMenuState, action: IMenuActions) => {\n\n switch (action.type) {\n\n // initial State based in props and desktop size and local storage\n case 'SET_MENU': {\n const openValueStorage = localStorage.getItem(window.location.hostname + '_isMenuOpen');\n\n let isMenuOpen = (openValueStorage === 'true') || (openValueStorage === null && (!!action.data.defaultMenuOpen));\n let isMenuPinned = (openValueStorage === 'true') && !!action.data.canAlwaysPin;\n const canPin = (action.data.desktopSize === 'xlarge') || !!action.data.canAlwaysPin;\n\n if (action.data.desktopSize === 'xxlarge' && action.data.canAlwaysPin === false) {\n isMenuOpen = true;\n isMenuPinned = true;\n }\n\n return {\n ...state,\n desktopSize: action.data.desktopSize,\n isMenuOpen,\n isMenuPinned,\n canPin,\n };\n }\n\n // handle autoOpen based on desktop\n case 'SET_OPEN': {\n if (state.isMenuOpen === true) { return state; }\n if (state.desktopSize === 'xxlarge' && !state.canPin) { return state; }\n\n return {\n ...state,\n isMenuOpen: true\n };\n }\n\n // handle auto close based on desktop\n case 'SET_CLOSE': {\n if (state.isMenuOpen === false) { return state; }\n if (state.desktopSize === 'xxlarge' && !state.canPin) { return state; }\n if (state.isMenuPinned === true) { return state; }\n\n return {\n ...state,\n isMenuOpen: false,\n };\n }\n\n case 'TOGGLE_PIN': {\n if (!state.canPin) { return state; }\n\n let isMenuOpen = true;\n\n if (state.isMenuPinned) {\n localStorage.setItem(window.location.hostname + '_isMenuOpen', 'false');\n isMenuOpen = false;\n } else {\n localStorage.setItem(window.location.hostname + '_isMenuOpen', 'true');\n }\n\n return {\n ...state,\n isMenuOpen,\n isMenuPinned: !state.isMenuPinned,\n };\n }\n\n default:\n console.error(`Action ${action['type']} not registered.`);\n return state;\n }\n};\n\nconst menuState: IMenuState = {\n desktopSize: 'large',\n isMenuPinned: false,\n isMenuOpen: false,\n canPin: false\n};\n\nconst useMenu = (defaultMenuOpen: boolean, canAlwaysPin: boolean) => {\n\n const { activeScreen } = useBreakpoints();\n const [state, dispatch] = useReducer(menuReducer, menuState);\n\n const setMenu = useCallback((defaultMenuOpen: boolean, canAlwaysPin: boolean, desktopSize: IBreakpoints,) => {\n dispatch({ type: 'SET_MENU', data: { defaultMenuOpen, desktopSize, canAlwaysPin } });\n }, []);\n\n const setMenuOpen = useCallback(() => {\n dispatch({ type: 'SET_OPEN' });\n }, []);\n\n const setMenuClose = useCallback(() => {\n dispatch({ type: 'SET_CLOSE' });\n }, []);\n\n const togglePinned = useCallback(() => {\n dispatch({ type: 'TOGGLE_PIN' });\n }, []);\n\n useLayoutEffect(() => {\n setMenu(defaultMenuOpen, canAlwaysPin, activeScreen);\n }, [activeScreen, defaultMenuOpen, canAlwaysPin, setMenu]);\n\n return {\n menuState: state,\n setMenuOpen,\n setMenuClose,\n togglePinned\n };\n};\n\nexport default useMenu;","import React, { useRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport {Link} from 'react-router-dom';\nimport ContextItem from './ContextItem';\nimport { IMenuItemTop, IMenuItemSubmenu } from '..';\nimport {resetButtonStyles} from '../../common/index';\nimport Icon from '../../Icons/Icon';\n\nconst Submenu = styled.ul`\n display: block;\n position: relative;\n margin-left: 40px;\n padding: 0;\n\n`;\nconst SubmenuHeader = styled.div`\n display: block;\n height: 40px;\n margin-left: 40px;\n`;\n\nconst SubmenuContainerInner = styled.div`\n overflow: hidden;\n`;\n\nconst SubmenuItemTitle = styled.span`\n display: block;\n font-family: var(--font-ui);\n font-size: 14px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.35px;\n color: var(--grey-11);\n`;\n\nconst SubmenuItemLink = styled(Link)`\n ${resetButtonStyles};\n display: block;\n`;\n\nconst ExternalIconWrapper = styled.div`\n margin-left: 15px;\n`;\n\nconst SubmenuItemAnchor = styled.a`\n ${resetButtonStyles};\n display: flex;\n align-items: center;\n`;\n\nconst SubmenuItem = styled.li<{$isActive?: boolean}>`\n display: block;\n height: 30px;\n padding-left: 40px;\n position: relative;\n\n &::after {\n display: block;\n content: '';\n height: 1px;\n width: 14px;\n position: absolute;\n left: 0;\n top: 10px;\n background: var(--dividing-line);\n }\n\n ${SubmenuItemLink}, ${SubmenuItemAnchor}{\n font-family: var(--font-ui);\n font-size: 14px;\n font-weight: 400;\n text-decoration: none;\n color: var(--grey-11);\n\n ${({$isActive}) => css`\n\n &:hover {\n color: var(--grey-12);\n }\n\n ${$isActive && css`\n &, &:hover {\n color: var(--grey-11);\n font-weight: 600;\n }\n `}\n\n `};\n\n }\n`;\n\nconst SubmenuContainer = styled.div`\n position: relative;\n overflow: hidden;\n\n transition:\n grid-template-rows var(--speed-normal) var(--easing-primary-in-out),\n opacity var(--speed-fast) var(--easing-primary-in-out);\n\n &::after {\n display: block;\n content: '';\n width: 1px;\n position: absolute;\n left: 40px;\n top: 0;\n bottom: 35px;\n background: var(--dividing-line);\n }\n\n`;\n\nconst ContextContainer = styled.div<{ $open: boolean, $mobileMenu?: boolean }>`\n min-height: ${({$mobileMenu}) => $mobileMenu ? '30px' : '70px'};\n width: inherit;\n\n ${SubmenuContainer}{\n display: grid;\n grid-template-rows: 0fr;\n };\n\n ${({$open}) => $open && css`\n ${SubmenuContainer}{\n grid-template-rows: 1fr;\n\n transition:\n grid-template-rows var(--speed-normal) var(--easing-primary-in-out),\n opacity var(--speed-fast) var(--easing-primary-in-out);\n\n opacity: 1;\n }\n `};\n`;\n\ninterface IProps {\n item: IMenuItemTop\n contextKey: number\n submenuOpen: boolean\n menuOpen?: boolean\n topLevelPath: string\n mobileMenu?: boolean\n onClickCallback?: (...args: any[]) => void\n}\n\nconst NavigationItem : React.FC<IProps> = ({item, menuOpen, submenuOpen, contextKey, topLevelPath, mobileMenu = false, onClickCallback }) => {\n const { icon, title, href, submenu, isExternalLink } = item;\n const isActive = topLevelPath === href;\n\n const refSubmenu = useRef<any>(null);\n\n const submenus : any[] = generateSubmenus(submenu, onClickCallback ) || [];\n const hasSubmenu : boolean = submenus.length > 0;\n\n return (\n <ContextContainer $open={submenuOpen} $mobileMenu={mobileMenu}>\n <ContextItem {...{title, href, isActive, icon, hasSubmenu, isExternalLink, submenuOpen, menuOpen, onClickCallback, contextKey}} />\n {hasSubmenu ? <SubmenuContainer ref={refSubmenu}>\n <SubmenuContainerInner>{submenus}</SubmenuContainerInner>\n </SubmenuContainer> : null}\n </ContextContainer>\n );\n\n};\n\n/**\n * Generate the submenu component structure.\n * @param submenu JSON Object with the menu structure\n */\nconst generateSubmenus = (\n submenu? : IMenuItemSubmenu[],\n onClickCallback?: (...args: any[]) => void,\n ) => {\n\n if(!submenu){ return; }\n\n const grouping : any[] = [];\n const output : any = [];\n\n // First submenu\n grouping.push([]);\n\n submenu.forEach((item, key) => {\n const {title, href, isExternalLink} = item;\n if(href){\n // Treat as menu item/\n if(isExternalLink) {\n grouping[grouping.length - 1].push(\n <SubmenuItem key={key} $isActive={false}>\n <SubmenuItemAnchor href={href} target='_blank'>\n {title}\n <ExternalIconWrapper>\n <Icon icon='ExternalLink' color='dimmed' size={10} />\n </ExternalIconWrapper>\n </SubmenuItemAnchor>\n </SubmenuItem>);\n }else {\n grouping[grouping.length - 1].push(<SubmenuItem key={key} $isActive={false}><SubmenuItemLink to={href} onClick={() => onClickCallback && onClickCallback(-1)}>{title}</SubmenuItemLink></SubmenuItem>);\n }\n } else {\n // Assume this is a grouping header.\n if(grouping[grouping.length - 1].length > 1){ grouping.push([]); }\n grouping[grouping.length - 1].push(<SubmenuHeader key={key}><SubmenuItemTitle>{title}</SubmenuItemTitle></SubmenuHeader>);\n }\n });\n\n grouping.forEach((group, key) => {\n output.push(<Submenu key={key}>{group}</Submenu>);\n });\n\n return output;\n\n};\n\nexport default NavigationItem;","import React, { useState, useCallback, useEffect } from 'react';\nimport ReactDom from 'react-dom';\nimport styled, { css } from 'styled-components';\n\nimport { Link, useLocation } from 'react-router-dom';\nimport ContextItem from '../atoms/ContextItem';\nimport useMenu from '../../hooks/useMenu';\n\nimport { IBreakpoints } from '../../hooks/useBreakpoints';\n\nimport SvgLogoMark from '../../svg/LogoMark';\nimport SvgLogoText from '../../svg/LogoText';\nimport NavigationItem from '../atoms/NavigationItem';\nimport { IMenu } from '..';\nimport { getTopLevelPath } from '../../helpers/index';\n\nconst Logo = styled(Link)`\n height: 50px;\n margin: 0 20px 55px 15px;\n display: flex;\n\n object {\n pointer-events: none;\n }\n`;\nconst LogoMark = styled.div`\n height: 50px;\n flex: 0 0 50px;\n margin-right: 15px;\n display: flex;\n justify-content: center;\n align-items: center;\n\n`;\nconst LogoType = styled.div`\n opacity: 0;\n flex: 1;\n height: 50px;\n display: flex;\n justify-content: left;\n align-items: center;\n`;\n\nconst SVGObject = styled.object``;\nconst SVGObjectText = styled.object`\n max-width: 180px;\n`;\n\nconst NavigationContainer = styled.div``;\n\nconst MenuFooter = styled.div`\n background: var(--global-element-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n justify-content: flex-end;\n`;\n\nconst FooterItemContainer = styled.div`\n min-height: 70px;\n`;\n\nconst PushContainer = styled.div<{ $isPinned: boolean; }>`\n position: relative;\n height: 100%;\n ${({ $isPinned }) => css`\n width: ${$isPinned ? `var(--global-menu-width-open)` : `var(--global-menu-width-closed)`};\n `};\n`;\n\nconst Container = styled.div<{ $open: boolean; $desktopSize: IBreakpoints }>`\n z-index: 99;\n position: fixed;\n top: 0;\n left: 0;\n ${({ $open, $desktopSize }) => css`\n background-color: var(--global-element-background);\n box-shadow: 0px 0px 7px 0px var(--primary-a2);\n width: ${$open ? `var(--global-menu-width-open)` : `var(--global-menu-width-closed)`};\n border-right: 1px solid var(--dividing-line);\n\n ${$desktopSize === 'xxlarge' ? `` : css`\n transition: width var(--speed-normal) var(--easing-primary-in);\n `};\n\n ${LogoType}{\n transition: opacity var(--speed-normal) var(--easing-primary-in-out);\n opacity: ${$open ? 1 : 0};\n }\n `}\n\n box-sizing: border-box;\n height: 100%;\n padding: 20px 0 0 0;\n overflow: hidden;\n`;\n\nconst ContainerInner = styled.div`\n width: var(--global-menu-width-open);\n display: flex;\n flex-direction: column;\n height: 100%;\n`;\n\n\nconst MainMenu: React.FC<IMenu> = ({ content, home = \"/\", logoMark, logoText, keepOpenText = \"Keep Open\", autoHideText = \"Auto-Hide\", supportUrl, supportText=\"Help & Support\", defaultMenuOpen = true, canAlwaysPin = false, onMenuToggle= ()=>{}}) => {\n\n const { menuState, setMenuOpen, setMenuClose, togglePinned } = useMenu(defaultMenuOpen, canAlwaysPin);\n\n const [focusedContext, setFocusedContext] = useState<number>(0);\n const location = useLocation();\n\n /* Handling of menu open, closing and pinning. */\n const autoMenuOpen = useCallback((e: any) => {\n if (e.pointerType === 'touch') { return; }\n setMenuOpen();\n\n }, [setMenuOpen]);\n\n const autoMenuClose = useCallback(() => {\n // TODO: Move the focused back to the active view so it re-opens on current context.\n setMenuClose();\n }, [setMenuClose]);\n\n const toggleMenuPin = useCallback((e: any) => {\n if (e.pointerType === 'touch') { return; }\n togglePinned();\n }, [togglePinned]);\n\n useEffect(() => {\n onMenuToggle(menuState.isMenuOpen);\n },[menuState.isMenuOpen, onMenuToggle]);\n\n /** Manage which context is open. */\n /** Submenu sends -1 because context only is for the parent\n * The -1 value is important in the mobile version of this menu\n */\n const setFocusedContextCb = useCallback((contextKey: number) => {\n if(contextKey === -1) { return; }\n\n setFocusedContext(focusedContext !== contextKey ? contextKey : -1);\n }, [setFocusedContext, focusedContext]);\n\n return (\n <PushContainer $isPinned={menuState.isMenuPinned}>\n <>{ReactDom.createPortal(\n <Container\n $open={menuState.isMenuOpen}\n $desktopSize={menuState.desktopSize}\n onPointerEnter={menuState.isMenuPinned ? () => {} : autoMenuOpen}\n onTouchStart={() => console.debug('touch')}\n onMouseLeave={menuState.isMenuPinned ? () => {} : autoMenuClose}\n >\n <ContainerInner>\n <Logo to={home}>\n <LogoMark>{logoMark ? <SVGObject type='image/svg+xml' data={logoMark} /> : <SvgLogoMark />}</LogoMark>\n <LogoType>{logoText ? <SVGObjectText type='image/svg+xml' data={logoText} /> : <SvgLogoText />}</LogoType>\n </Logo>\n\n <NavigationContainer>\n {content.items.map((item, key) => {\n return (\n <NavigationItem\n topLevelPath={getTopLevelPath(location.pathname)}\n key={key}\n contextKey={key}\n menuOpen={menuState.isMenuOpen}\n submenuOpen={key === focusedContext && menuState.isMenuOpen}\n onClickCallback={setFocusedContextCb}\n {...{ item, focusedContext }}\n />\n );\n })}\n </NavigationContainer>\n\n <MenuFooter>\n\n {supportUrl && (\n <FooterItemContainer>\n <ContextItem compact isActive={false} icon='Question' title={supportText} href={supportUrl} menuOpen={menuState.isMenuOpen} />\n </FooterItemContainer>\n )}\n\n {(menuState.canPin)\n ? (\n <FooterItemContainer>\n <ContextItem\n compact\n isActive={false}\n icon={menuState.isMenuOpen && menuState.isMenuPinned ? 'Left' : 'Menu'}\n title={menuState.isMenuPinned ? keepOpenText : autoHideText}\n onClickCallback={toggleMenuPin}\n menuOpen={menuState.isMenuOpen}\n />\n </FooterItemContainer>\n )\n : null}\n </MenuFooter>\n </ContainerInner>\n </Container>,\n document.body)}</>\n </PushContainer>\n );\n};\n\nexport default MainMenu;\n","import React, { Fragment, useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport { IUserDrawerMeta } from '..';\nimport { useCopyToClipboard } from '../../hooks';\nimport Icon from '../../Icons/Icon';\n\nconst MetaConatiner = styled.div`\n margin: 10px 10px;\n border: 1px solid var(--grey-3);\n background-color: var(--grey-a2);\n border-radius: 5px;\n &:active {\n box-shadow: 4px 4px var(--grey-a2);\n }\n`;\n\nconst LabelTitle = styled.div`\n max-width: 130px;\n overflow-wrap: initial;\n white-space: break-spaces;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n opacity: 0.76;\n font-size: 10px;\n font-weight: 500;\n letter-spacing: 0.29px;\n color: var(--grey-11);\n font-family: var(--font-ui);\n margin-top: 2px;\n`;\n\nconst LabelContent = styled.div`\n font-size: 10px;\n padding-left: 10px;\n max-width: 200px;\n overflow-wrap: initial;\n white-space: break-spaces;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 4px 0 5px 0;\n white-space: nowrap;\n font-weight: 500;\n letter-spacing: 0.29px;\n color: var(--grey-8);\n`;\n\nconst LabelNotes = styled.div`\n padding-left: 10px;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 5px 0 8px 0;\n max-height: 23px;\n font-size: 10px;\n font-weight: 500;\n letter-spacing: 0.29px;\n color: var(--grey-8);\n font-family: var(--font-data);\n`;\n\nconst TitleContainer = styled.div`\n display: flex;\n gap:6px;\n flex-direction: row;\n align-items: center;\n margin-left: 10px;\n margin: 3px 0 5px 10px;\n`;\n\nconst Container = styled.div`\n cursor: pointer;\n`;\n\nconst TitleBox = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst IconBox = styled.div`\n padding: 1px 5px 0 0;\n opacity: 0;\n ${Container}:hover & {\n opacity: 1;\n cursor: pointer;\n }\n`;\n\nconst CopyTextBox = styled.pre`\n padding: 5px;\n font-size: 10px;\n line-height: 1.2;\n box-shadow: 2px 2px 4px (195deg 16% 72% / 72%);\n border: 1px solid var(--grey-8);\n background-color: var(--grey-2);\n border-radius: 5px;\n opacity: 0.76;\n font-weight: 500;\n color: var(--grey-11);\n position: absolute;\n max-width: 170px;\n white-space: pre-wrap;\n font-family: var(--font-data);\n right:10px;\n margin-top: -23px;\n`;\n\nconst CopyBox = styled.div`\n`;\n\ninterface IProps {\n item: IUserDrawerMeta;\n onUserDrawerMetaClick?:() => void;\n includeCopyTitle?: boolean;\n copySuccessMessage?: string\n}\n\nconst UserDrawerMeta : React.FC<IProps> = ({item, onUserDrawerMetaClick, copySuccessMessage, includeCopyTitle}) => {\n const { icon, title, subTitle, notes, hasCopyIcon } = item;\n const { copyToClipboard } = useCopyToClipboard();\n const [ showCopyText, setShowCopyText ] = useState<boolean>(false);\n const [onHoverColorValue, setOnHoverColorValue] = useState<'mono' | 'dimmed' | 'subtle' | 'inverse' | 'primary' | 'danger'>('dimmed');\n\n const onClickCopyText = useCallback((title?: string , subTitle?: string, notes?: string)=>{\n let copyText;\n if(includeCopyTitle){\n copyText = (title ? title : '') + '\\n' + (subTitle ? subTitle : '') + '\\n' + (notes ? notes : '');\n } else {\n copyText = (subTitle ? subTitle : '') + '\\n' + (notes ? notes : '');\n }\n copyToClipboard(copyText);\n setShowCopyText(true);\n setTimeout(()=>{\n setShowCopyText(false);\n }, 1500);\n },[includeCopyTitle, copyToClipboard]);\n\n const onHoverMetaInfo = useCallback(() => {\n setOnHoverColorValue('mono');\n }, []);\n\n const onLeaveMeatInfo = useCallback(() => {\n setOnHoverColorValue('dimmed');\n }, []);\n\n return (\n <Fragment>\n {(title !== '' ) &&\n <Container onClick={onUserDrawerMetaClick}>\n <MetaConatiner>\n <TitleBox>\n <TitleContainer>\n <Icon icon={icon as string} size={10} color='dimmed' />\n <LabelTitle title={title}>{title}</LabelTitle>\n </TitleContainer>\n <CopyBox>\n {showCopyText &&\n <CopyTextBox>\n {copySuccessMessage !== '' ? copySuccessMessage : 'Copied!'}\n </CopyTextBox>}\n {(hasCopyIcon) ?\n <IconBox onClick={() => onClickCopyText(title , subTitle, notes)} onMouseEnter={onHoverMetaInfo} onMouseLeave={onLeaveMeatInfo}>\n <Icon icon='Copy' size={12} color={onHoverColorValue} />\n </IconBox>:\n null}\n </CopyBox>\n </TitleBox>\n {subTitle !=='' ?\n <LabelContent title={subTitle}>{subTitle}</LabelContent>\n : null}\n {notes !=='' ?\n <LabelNotes title={notes}>{notes}</LabelNotes>\n : null}\n </MetaConatiner>\n </Container>}\n </Fragment>\n );\n};\n\nexport default UserDrawerMeta;","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport Icon from '../../Icons/Icon';\n\nconst Container = styled.div`\n padding: 16px 10px 14px 23px;\n display: flex;\n flex-direction: row;\n border-top: 1px solid var(--dividing-line);\n align-items: center;\n cursor: pointer;\n svg {\n margin-top: 7px;\n }\n`;\n\nconst ColumnContainer = styled.div`\n display: flex;\n flex-direction: column;\n padding-left: 14px;\n align-items: flex-start;\n`;\n\nconst Title = styled.div`\n opacity: 0.76;\n font-family: var(--font-ui);\n font-size: 12px;\n font-weight: 500;\n letter-spacing: 0.34px;\n color: var(--grey-11);\n`;\n\nconst SubTitle = styled.div`\n font-family: var(--font-ui);\n font-size: 10px;\n line-height: 12px;\n font-weight: 500;\n letter-spacing: 0.29px;\n color: var(--grey-11);\n padding-top: 2px;\n opacity: 0.5;\n`;\n\ninterface IDrawerBottomMenu {\n icon: string,\n title: string,\n subTitle: string,\n onClickCallback?: () => void\n}\n\nconst DrawerBottomMenu: FC<IDrawerBottomMenu> = ({ icon = 'Settings', title, subTitle, onClickCallback = () => {} }) => {\n\n return (\n <Container onClick={onClickCallback}>\n <Icon icon={icon} size={18} color='dimmed' />\n\n <ColumnContainer>\n <Title>{title}</Title>\n <SubTitle>{subTitle}</SubTitle>\n </ColumnContainer>\n\n </Container>\n );\n};\n\nexport default DrawerBottomMenu;\n","import React, { useCallback, Fragment, useEffect } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Link } from 'react-router-dom';\n\nimport Icon from '../../Icons/Icon';\nimport { ITopBar, IUserDrawerFooter, IUserDrawerMeta } from '../index';\nimport { resetButtonStyles } from '../../common/index';\nimport UserDetails from '../atoms/UserDrawerMeta';\nimport DrawerBottomMenu from '../atoms/DrawerBottomMenu';\nimport { deviceMediaQuery } from '../../theme/common';\n\nconst DrawerTop = styled.div``;\nconst DrawerBottom = styled.div`\n width: 100%;\n position: fixed;\n bottom: 50px;\n @media ${deviceMediaQuery.medium} {\n position: static;\n bottom: 0;\n }\n`;\n\nconst DrawerHeader = styled.h2`\n font-size: 14px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.35px;\n color: var(--grey-11);\n padding: 0;\n margin: 0 0 5px;\n`;\n\nconst CurrentUser = styled.div`\n padding: 20px 20px 15px;\n border-bottom: var(--dividing-line) 1px solid;\n font-size: 12px;\n font-weight: 400;\n color: var(--grey-11);\n`;\n\nconst UserOptions = styled.div`\n padding: 20px 20px 10px 20px;\n border-bottom: var(--dividing-line) 1px solid;\n`;\n\nconst Logout = styled.div`\n padding: 0 20px;\n`;\n\nconst LinkMenu = styled.ul`\n padding: 0;\n margin: 12px 0 0 0;\n list-style: none;\n`;\n\nconst LinkMenuItem = styled.li`\n padding: 10px 0;\n`;\n\nconst IconWrapperFooter = styled.div`\n width: 5px;\n display: flex;\n justify-content: center;\n align-items: center;\n > div {\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n padding-right: 20px;\n`;\n\nconst LinkMenuItemA = styled(Link) <{ isActive?: boolean }>`\n ${resetButtonStyles};\n display: block;\n width: 100%;\n font-size: 14px;\n font-weight: 400;\n color: var(--grey-10);\n text-decoration: none;\n\n &:hover {\n color: var(--primary-9);\n }\n\n ${({ isActive }) => isActive && css`\n &, &:hover {\n color: var(--primary-9);\n }\n `};\n`;\n\nconst FooterMeta = styled.div <{ $icon?: string }>`\n font-family: var(--font-ui);\n border-top: var(--dividing-line) 1px solid;\n margin-top: auto;\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n font-size: 10px;\n font-weight: 400;\n color: var(--grey-a11);\n padding: 10px;\n padding-left: ${({ $icon }) => $icon ? '31px' : '21px'};\n`;\n\nconst NavigationContainer = styled.div`\n max-height: 300px;\n overflow: scroll;\n overflow-x: hidden;\n overflow-y: auto;\n border-bottom: var(--dividing-line) 1px solid;\n`;\n\nconst FooterText = styled.div <{ $icon?: string }>`\n white-space: break-spaces;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 136px;\n max-width: ${({ $icon }) => $icon ? '136px' : '164px'};\n color: var(--grey-11);\n opacity: 0.5;\n`;\n\nconst updateLanguageAttribute = (initLanguage?: string) => {\n\n if (initLanguage) {\n document.documentElement.setAttribute(\"lang\", initLanguage);\n return initLanguage;\n }\n\n const browserLang = navigator.language.split(\"-\")[0];\n const htmlLang = document.documentElement.lang;\n\n if(!htmlLang) {\n document.documentElement.setAttribute(\"lang\", browserLang);\n return browserLang;\n }\n\n return htmlLang;\n};\n\ninterface IUserMenu extends ITopBar {\n closeOnClick?: () => void\n}\n\nconst UserMenu: React.FC<IUserMenu> = ({\n hasLanguage = false,\n selectedLanguageText = '',\n languageOptionsText = 'LANGUAGE / 言語',\n selectedLangAttribute,\n hasLogout = true,\n logoutLink = '/logout',\n logoutText = 'Logout',\n hasCurrentUser = true,\n currentUserText = 'Current User',\n accountOptionText = \"Account Options\",\n userSubmenu = [],\n userDrawerBespoke,\n loggedInUser,\n hasSwitchTheme = false,\n isLightMode = true,\n switchThemeText = 'SWITCH THEME',\n selectedThemeText = '',\n onLogout = () => { },\n onLanguageToggle = () => { },\n closeOnClick,\n onThemeToggle = () => { },\n userDrawerFooter = {icon:'', title: ''},\n copySuccessMessage,\n includeCopyTitle,\n onUserDrawerMetaClick = () => { },\n userDrawerMeta,\n hasUserDrawerMeta,\n hasUserDrawerFooter\n}) => {\n\n const {icon, title} = userDrawerFooter as IUserDrawerFooter;\n const logoutHandler = useCallback(async (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n e.preventDefault();\n await onLogout();\n window.location.assign(logoutLink);\n if (closeOnClick) {\n closeOnClick();\n }\n }, [closeOnClick, logoutLink, onLogout]);\n\n const handleCloseWhenClick = useCallback(() => {\n if (closeOnClick) {\n closeOnClick();\n }\n }, [closeOnClick]);\n\n useEffect(() => {\n updateLanguageAttribute(selectedLangAttribute);\n },[selectedLangAttribute]);\n\n return (\n <Fragment>\n <DrawerTop>\n <>\n {hasCurrentUser ?\n <CurrentUser>\n <DrawerHeader>{currentUserText}</DrawerHeader>\n {loggedInUser}\n </CurrentUser>\n : null}\n {hasUserDrawerMeta?\n <NavigationContainer>\n {userDrawerMeta?.map((item:IUserDrawerMeta, key:number) => {\n return (\n <UserDetails\n onUserDrawerMetaClick={onUserDrawerMetaClick}\n key={key}\n {...{ item, includeCopyTitle, copySuccessMessage }}\n />\n );\n })}\n </NavigationContainer>\n :null}\n\n {userSubmenu.length > 0 ?\n <UserOptions>\n <DrawerHeader>{accountOptionText}</DrawerHeader>\n <LinkMenu>\n {userSubmenu.map(({ text, href }, index) => {\n return (\n <LinkMenuItem key={index}>\n <LinkMenuItemA to={href} onClick={handleCloseWhenClick}>{text}</LinkMenuItemA>\n </LinkMenuItem>\n );\n })}\n </LinkMenu>\n </UserOptions>\n : null}\n\n {userDrawerBespoke ? userDrawerBespoke : null}\n\n {hasLogout ?\n <Logout>\n <LinkMenu>\n <LinkMenuItem><LinkMenuItemA onClick={logoutHandler} to={logoutLink}>{logoutText}</LinkMenuItemA></LinkMenuItem>\n </LinkMenu>\n </Logout>\n : null}\n </>\n </DrawerTop>\n\n <DrawerBottom>\n {hasSwitchTheme && <DrawerBottomMenu icon={isLightMode ? 'LightMode' : 'DarkMode'} title={switchThemeText} subTitle={selectedThemeText} onClickCallback={onThemeToggle} />}\n {hasLanguage && <DrawerBottomMenu icon='Language' title={languageOptionsText} subTitle={selectedLanguageText} onClickCallback={onLanguageToggle} />}\n {(hasUserDrawerFooter) ?\n <FooterMeta title={title} $icon={icon}>\n {icon ?\n <IconWrapperFooter>\n <Icon icon={icon} size={14} color='dimmed' />\n </IconWrapperFooter>\n :\n null}\n <FooterText $icon={icon}>\n {title}\n </FooterText>\n </FooterMeta>\n : null}\n </DrawerBottom>\n </Fragment>\n );\n};\n\nexport default UserMenu;","import React from 'react';\nimport styled from 'styled-components';\nimport { INotificationItem } from '../index';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 18px 20px 12px 20px;\n height: 122px;\n`;\n\nconst ImgWrapper = styled.div`\n border-radius: 5px;\n overflow: hidden;\n height: 40px;\n width: 40px;\n flex-shrink: 0;\n`;\n\nconst EmptyImg = styled.div`\n background-color: var(--grey-5);\n width: 100%;\n height: 100%;\n`;\n\nconst Image = styled.div<{ $image?: string }>`\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background-image: url(${p => p.$image});\n background-position: center center;\n background-size: cover;\n background-repeat: no-repeat;\n display: ${p => p.$image ? 'block' : 'none'};\n`;\n\nconst InfoContainer = styled.div`\n margin-left: 20px;\n`;\n\nconst Title = styled.div`\n font-size: 16px;\n font-weight: 500;\n color: var(--grey-11);\n`;\n\nconst Message = styled.div`\n font-size: 13px;\n font-weight: 500;\n overflow: hidden;\n color: var(--grey-11);\n margin: 4px 0;\n height: 30px;\n text-overflow: ellipsis;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n`;\n\nconst TimeMsg = styled.div`\n font-size: 13px;\n font-weight: 500;\n color: var(--grey-12);\n margin-top: 15px;\n`;\n\n\nconst NotificationItem: React.FC<INotificationItem> = ({ imgUrl, title, message, time }) => {\n return (\n <Container>\n <ImgWrapper>\n {imgUrl\n ? <Image $image={imgUrl} />\n : <EmptyImg />}\n </ImgWrapper>\n <InfoContainer>\n <Title>{title}</Title>\n <Message>{message}</Message>\n <TimeMsg>{time}</TimeMsg>\n </InfoContainer>\n </Container>\n );\n};\n\nexport default NotificationItem;","import React, { Fragment } from 'react';\nimport styled from 'styled-components';\nimport { INotificationsHistory, INotificationItem } from '../index';\nimport NotificationItem from '../atoms/NotificationItem';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst StatusContainer = styled.h2`\n text-transform: uppercase;\n padding: 10px 0 10px 20px;\n font-size: 14px;\n font-weight: 500;\n color: var(--grey-12);\n border-bottom: var(--dividing-line) 1px solid;\n margin: 0;\n`;\n\nconst NotificationWrapper = styled.div`\n border-bottom: var(--dividing-line) 1px solid;\n`;\n\nconst renderNotifications = (items: INotificationItem[], type: string) => (\n items.map((item, index) => {\n return (\n <NotificationWrapper key={`alert-${type}-${index}`}>\n <NotificationItem {...item} />\n </NotificationWrapper>);\n })\n);\n\nconst NotificationsHistory: React.FC<INotificationsHistory> = ({\n read,\n unread,\n noNotificationsText = 'No new notifications',\n readNotificationsText = 'New',\n unreadNotificationsText = 'Read',\n\n}) => {\n\n if ((read.length === 0) && (unread.length === 0)) {\n return (\n <Container>\n <StatusContainer>{noNotificationsText}</StatusContainer>\n </Container>\n );\n }\n\n return (\n <Container>\n {unread && (\n <Fragment>\n <StatusContainer>{readNotificationsText}</StatusContainer>\n {renderNotifications(unread, 'unread')}\n </Fragment>\n )}\n {read && (\n <Fragment>\n <StatusContainer>{unreadNotificationsText}</StatusContainer>\n {renderNotifications(read, 'read')}\n </Fragment>\n )}\n </Container>\n );\n};\n\nexport default NotificationsHistory;","import React, { useEffect, useState, useRef, Fragment, useMemo } from 'react';\nimport styled, { css } from 'styled-components';\nimport { Link } from 'react-router-dom';\nimport { ITopBarBadge } from '..';\nimport { resetButtonStyles } from '../../common';\n\nconst CoreStyle = css`\n display: flex;\n height: 32px;\n padding: 8px;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: 8px;\n border-radius: 3px;\n\n font-family: Lato;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 12px; /* 85.714% */\n white-space: nowrap;\n\n transition: opacity var(--speed-fast) var(--easing-primary-out);\n\n`;\n\nconst ContainerStatic = styled.div<{$themeColor?: string}>`\n ${CoreStyle};\n\n ${({$themeColor}) => $themeColor ? css`\n border: 2px solid var(--${$themeColor}-9);\n color: var(--${$themeColor}-11);\n ` : css`\n border: 2px solid var(--info-9);\n color: var(--info-11);\n `};\n`;\n\nconst DefaultText = styled.span`\n display: inline-block;\n`;\nconst LinkText = styled.span``;\n\nconst InteractiveStyle = css<{$themeColor?: string}>`\n ${CoreStyle};\n text-decoration: none;\n\n ${({$themeColor}) => $themeColor ? css`\n background-color: transparent;\n border: 2px solid var(--${$themeColor}-9);\n color: var(--${$themeColor}-11);\n ` : css`\n background-color: transparent;\n border: 2px solid var(--info-9);\n color: var(--info-11);\n `};\n\n &:hover {\n ${({$themeColor}) => $themeColor ? css`\n background-color: var(--${$themeColor}-9);\n border: 2px solid var(--${$themeColor}-9);\n color: var(--white-12);\n ` : css`\n background-color: var(--info-9);\n border: 2px solid var(--info-9);\n color: var(--white-12);\n `};\n }\n`;\n\nconst ContainerLinked = styled.div<{$themeColor?: string}>`\n a {\n ${InteractiveStyle};\n }\n`;\n\nconst ContainerButton = styled.div<{$themeColor?: string}>`\n button {\n ${resetButtonStyles};\n ${InteractiveStyle};\n }\n`;\n\nconst Container = styled.div<{$ready: boolean, $minWidth: number}>`\n ${({$ready, $minWidth}) => css`\n\n visibility: ${$ready ? 'visible' : 'hidden'};\n opacity: ${$ready ? '1' : '0'};\n\n transition: opacity var(--speed-fast) var(--easing-primary-in-out);\n\n ${DefaultText}, ${LinkText}{\n /* Required to accurately measure container sizes and ensure hover doesn't resize. */\n ${$ready && `min-width: ${$minWidth}px;`};\n }\n `};\n`;\n\nconst TopBarBadge: React.FC<ITopBarBadge> = ({text, color, linkHref, linkTo, linkText, onClick}) => {\n \n const defaultTextRef = useRef<HTMLSpanElement>(null);\n const linkTextRef = useRef<HTMLSpanElement>(null);\n\n const [ready, setReady] = useState<boolean>(false);\n const [hover, setHover] = useState<boolean>(false);\n const [minWidth, setMinWidth] = useState<number>(0);\n\n useEffect(() => {\n setReady(false);\n const timeoutId = setTimeout(() => {\n const defaultWidth = defaultTextRef.current?.getBoundingClientRect().width ?? 0;\n const linkWidth = linkTextRef.current?.getBoundingClientRect().width ?? 0;\n const largestWidth = defaultWidth >= linkWidth ? defaultWidth : linkWidth;\n setMinWidth(Math.ceil(largestWidth));\n setReady(true);\n }, 100);\n return () => clearTimeout(timeoutId);\n }, [text, linkText]);\n\n const defaultTextElement = useMemo(() => <DefaultText ref={defaultTextRef}>{text}</DefaultText>,[text]);\n\n const linkTextElement = useMemo(\n () => onClick || linkTo || linkHref ? <LinkText ref={linkTextRef}>{linkText || text}</LinkText> : null,\n [onClick, linkTo, linkHref, linkText, text]\n );\n \n const renderContent = useMemo(\n () => (\n !ready ? (\n <Fragment>\n {defaultTextElement}\n {linkTextElement}\n </Fragment>\n ) : (\n <Fragment>\n {!hover ? defaultTextElement : linkTextElement}\n </Fragment>\n )\n ),\n [ready, hover, defaultTextElement, linkTextElement]\n );\n\n const badgeComponent = useMemo(() => {\n if(onClick){\n return <ContainerButton $themeColor={color}>\n <button onClick={onClick} type=\"button\">\n {renderContent}\n </button>\n </ContainerButton>;\n } else if(linkTo){\n return <ContainerLinked $themeColor={color}>\n <Link to={linkTo}>\n {renderContent}\n </Link>\n </ContainerLinked>;\n } else if(linkHref){\n return <ContainerLinked $themeColor={color}>\n <a href={linkHref}>\n {renderContent}\n </a>\n </ContainerLinked>;\n } else {\n return <ContainerStatic $themeColor={color}>{defaultTextElement}</ContainerStatic>;\n }\n }, [onClick, linkTo, linkHref, color, renderContent, defaultTextElement]);\n \n return (\n <Container $ready={ready} $minWidth={minWidth} onPointerEnter={ () => ready && setHover(true) } onPointerLeave={ () => ready && setHover(false) }>\n { badgeComponent }\n </Container>\n );\n};\n\nexport default TopBarBadge;","import React, { useState } from 'react';\nimport ReactDom from 'react-dom';\nimport styled, { css, keyframes } from 'styled-components';\n\nimport Icon from '../../Icons/Icon';\nimport StatusIcon from '../../Icons/StatusIcon';\nimport UserMenu from '../molecules/UserMenu';\nimport { ITopBar } from '../index';\nimport NotificationsHistory from './NotificationsHistory';\nimport { removeAutoFillStyle } from '../../common';\nimport TopBarBadge from '../atoms/TopBarBadge';\n\nconst Container = styled.div`\n z-index: 9;\n position: sticky;\n top: 0;\n height: 56px;\n padding: 0 16px 0 24px;\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-self: flex-start;\n border-bottom: 1px solid var(--dividing-line);\n background: var(--grey-2);\n box-shadow: 5px 0px 10px 0px var(--primary-a2);\n`;\n\nconst RightArea = styled.div`\n display: flex;\n align-items: center;\n gap: 24px;\n height: 100%;\n`;\n\nconst SearchBar = styled.div`\n flex: 0 1 500px;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 8px;\n`;\n\nconst IconWrapper = styled.div`\n flex: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n > div {\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n`;\n\nconst SearchInput = styled.input`\n ${removeAutoFillStyle};\n font-family: var(--font-data);\n flex: 1;\n height: 35px;\n line-height: 35px;\n border: none;\n outline: none;\n background: transparent;\n color: var(--grey-10);\n font-size: 14px;\n\n &::placeholder {\n font-family: var(--font-data);\n font-weight: 400;\n font-style: italic;\n font-size: 14px;\n color: var(--grey-8);\n }\n\n &:lang(ja)::placeholder {\n font-style: normal;\n };\n`;\n\nconst ButtonArea = styled.div`\n height: inherit;\n display: flex;\n gap: 0;\n`;\n\nconst buttonClickAnimation = keyframes`\n 0% {\n opacity:0.9;\n transform: scale(0.85);\n }\n 100% {\n opacity:1;\n transform: scale(1);\n }\n`;\n\nconst DrawerToggle = styled.button.attrs({ type: 'button' }) <{ $isActive: boolean }>`\n position: relative;\n flex: 0 56px;\n width: 56px;\n height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n border: none;\n background: none;\n outline: none;\n cursor: pointer;\n\n &::after {\n content: '';\n position: absolute;\n bottom: 0;\n right: 0;\n left: 0;\n height: 5px;\n background-color: transparent;\n border-radius: 2px 2px 0 0;\n }\n\n transition: background-color var(--speed-normal) var(--easing-primary-out);\n\n svg {\n transition: transform var(--speed-normal) var(--easing-primary-out);\n }\n\n &:hover {\n opacity: 0.9;\n &::after {\n background-color: var(--primary-6);\n }\n }\n\n ${({ $isActive }) => $isActive && css`\n &, &:hover {\n border-bottom-color: var(--primary-9);\n &::after {\n background-color: var(--primary-9);\n }\n svg {\n transform: scale(1);\n animation: ${buttonClickAnimation} 0.35s cubic-bezier(0.7, 0, 0.84, 0);\n }\n\n }\n `}\n`;\n\nconst DrawerPortalWrapper = styled.div``;\n\nconst Drawer = styled.div<{ $isOpen: boolean, $baseWidth?: string }>`\n font-family: var(--font-ui);\n\n position: fixed;\n right: -10px;\n top: 56px;\n bottom: 0;\n background: var(--global-element-background);\n border-left: var(--dividing-line) 1px solid;\n\n width: ${({ $baseWidth }) => $baseWidth ? $baseWidth : `200px`};\n opacity: 0;\n visibility: hidden;\n z-index: 100;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n transition:\n opacity var(--speed-normal) var(--easing-primary-in-out),\n right var(--speed-normal) var(--easing-primary-in-out);\n\n ${({ $isOpen }) => $isOpen && css`\n right: 0;\n opacity: 1;\n visibility: visible;\n `}\n`;\n\n\n/**\n * Negative margin hides the scroll;\n * Reviewed on Chrome an Firefox\n */\nconst NotificationsContainer = styled.div`\n overflow-y: scroll;\n margin-right: -17px;\n`;\n\ntype IDrawerKeys = 'user' | 'notifications' | 'custom' | null;\n\n\nconst TopBar: React.FC<ITopBar> = ({\n hasNotifications = false,\n hasLanguage = false,\n selectedLanguageText = '',\n languageOptionsText,\n selectedLangAttribute,\n hasLogout = true,\n logoutLink = '/logout',\n logoutText = 'Logout',\n hasSearch = false,\n hasCurrentUser = true,\n currentUserText = 'Current User',\n accountOptionText = 'Account Options',\n searchPlaceholder = 'Search for devices, analysis tasks, etc.',\n userSubmenu = [],\n userDrawerBespoke,\n loggedInUser,\n notificationsHistory,\n customDrawer,\n hasSwitchTheme = false,\n isLightMode = true,\n switchThemeText = 'SWITCH THEME',\n selectedThemeText = '',\n onLogout = () => { },\n onLanguageToggle = () => { },\n onThemeToggle = () => { },\n userDrawerFooter,\n userDrawerMeta,\n onUserDrawerMetaClick = () => { },\n hasUserDrawerMeta,\n copySuccessMessage,\n includeCopyTitle,\n hasUserDrawerFooter,\n badge\n}) => {\n\n const [openDrawer, setOpenDrawer] = useState<IDrawerKeys>(null);\n\n const toggleDrawers = (drawerKey: IDrawerKeys) => {\n setOpenDrawer(\n prevDrawer => {\n // if prevDrawer is open, just update to null to close\n if (prevDrawer === drawerKey) {\n return null;\n }\n\n return drawerKey;\n }\n );\n };\n\n return (\n <Container>\n <>\n {hasSearch ?\n <SearchBar>\n <IconWrapper>\n <Icon icon='Search' size={16} color='grey-6' />\n </IconWrapper>\n <SearchInput placeholder={searchPlaceholder} />\n </SearchBar> : <div />}\n <RightArea>\n {badge && <TopBarBadge {...badge} />}\n <ButtonArea>\n {customDrawer && (\n <DrawerToggle $isActive={openDrawer === 'custom'} onClick={() => toggleDrawers('custom')}>\n <StatusIcon {...customDrawer} />\n </DrawerToggle>\n )}\n {hasNotifications && (\n <DrawerToggle $isActive={openDrawer === 'notifications'} onClick={() => toggleDrawers('notifications')}>\n <Icon icon='Notifications' size={20} color='dimmed' />\n </DrawerToggle>\n )}\n <DrawerToggle $isActive={openDrawer === 'user'} onClick={() => toggleDrawers('user')}>\n <Icon icon='UserProfile' size={20} color='dimmed' />\n </DrawerToggle>\n </ButtonArea>\n </RightArea>\n\n {ReactDom.createPortal(\n <DrawerPortalWrapper>\n {/* User Menu */}\n <Drawer $isOpen={openDrawer === 'user'}>\n <UserMenu {...{\n hasLanguage,\n hasLogout,\n logoutLink,\n logoutText,\n hasCurrentUser,\n currentUserText,\n accountOptionText,\n userSubmenu,\n userDrawerBespoke,\n loggedInUser,\n onLogout,\n onLanguageToggle,\n selectedLanguageText,\n languageOptionsText,\n selectedLangAttribute,\n hasSwitchTheme,\n isLightMode,\n switchThemeText,\n selectedThemeText,\n onThemeToggle,\n onUserDrawerMetaClick,\n userDrawerFooter,\n userDrawerMeta,\n hasUserDrawerMeta,\n copySuccessMessage,\n includeCopyTitle,\n hasUserDrawerFooter\n }}\n />\n </Drawer>\n\n {/* Notifications */}\n {hasNotifications ?\n <Drawer $isOpen={openDrawer === 'notifications'} $baseWidth='300px'>\n <NotificationsContainer>\n {notificationsHistory ? <NotificationsHistory {...notificationsHistory} /> : null}\n </NotificationsContainer>\n </Drawer> : null}\n\n {customDrawer && (\n <Drawer $isOpen={openDrawer === 'custom'} $baseWidth={customDrawer.width ? customDrawer.width : \"200px\"}>\n <>{customDrawer.customComponent}</>\n </Drawer>\n )}\n </DrawerPortalWrapper>, document.body)}\n </>\n </Container>\n );\n\n};\n\nexport default TopBar;","import React, { useContext, useEffect, HTMLAttributes } from 'react';\nimport styled from 'styled-components';\nimport { TabContext, ContextProps } from './Tabs';\n\nexport const TabListWrapper = styled.div`\n display: flex;\n flex-direction: row;\n`;\n\ninterface OwnProps {\n defaultTabId: string\n}\n\ntype Props = OwnProps & HTMLAttributes<HTMLDivElement>\n\nconst TabList: React.FC<Props> = ({ children, defaultTabId}) => {\n const { setSelected }: ContextProps = useContext(TabContext);\n\n useEffect(() => {\n setSelected(defaultTabId);\n }, [defaultTabId, setSelected]);\n\n return (\n <TabListWrapper>\n <>{children}</>\n </TabListWrapper>\n );\n};\n\nexport { TabList };","import React, { useContext, HTMLAttributes, useCallback } from 'react';\nimport styled, { css } from 'styled-components';\nimport { TabContext, ContextProps } from '../Tabs';\n\nconst TabComponent = styled.div`\n margin-right: 39px;\n display: flex;\n align-items: center;\n line-height: 20px;\n`;\n\nconst TabLabel = styled.label<{ $active: boolean }>`\n height: 40px;\n ${({theme}) => css`\n font-family: ${theme.fontFamily.ui};\n `}\n font-size: 15px;\n font-weight: ${({ $active }) => $active ? '600' : '500'};\n letter-spacing: 0.09px;\n color: ${({ $active }) => $active ? 'var(--primary-11)' : 'var(--grey-11)'};\n cursor: pointer;\n border-bottom: ${({ $active }) => $active ? '2px solid var(--primary-11)' : '2px solid transparent'};\n padding-top: 6px;\n padding-bottom: 14px;\n flex-shrink: 0;\n user-select: none;\n`;\n\ninterface OwnProps {\n tabFor: string\n}\n\ntype Props = OwnProps & HTMLAttributes<HTMLDivElement>\n\nconst Tab: React.FC<Props> = ({ children, tabFor, onClick, ...props }) => {\n const { selected, setSelected }: ContextProps = useContext(TabContext);\n\n const onChangeTab = useCallback((event:React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n onClick && onClick(event);\n setSelected(tabFor);\n }, [onClick, setSelected, tabFor]);\n\n return (\n <TabComponent {...props} onClick={onChangeTab}>\n <TabLabel $active={selected === tabFor}>\n <>{children}</>\n </TabLabel>\n </TabComponent>\n );\n};\n\nexport { Tab };","import React, { useContext, HTMLAttributes } from 'react';\nimport styled from 'styled-components';\nimport { TabContext, ContextProps } from './Tabs';\n\nconst Container = styled.div`\n`;\n\ninterface OwnProps {\n tabId: string\n}\n\ntype Props = OwnProps & HTMLAttributes<HTMLDivElement>\n\nconst TabContent: React.FC<Props> = ({ children, tabId, ...props }) => {\n const { selected }: ContextProps = useContext(TabContext);\n\n return (\n selected === tabId ?\n <Container {...props}>\n <>{children}</>\n </Container> :\n null\n );\n};\n\nexport { TabContent };","import React, { useContext, useCallback } from 'react';\nimport styled, { css } from 'styled-components';\nimport { TabContext, ContextProps } from '../Tabs';\nimport { IconWrapper } from '../../Icons/Icon';\nimport StatusIcon from '../../Icons/StatusIcon';\nimport { resetButtonStyles } from '../../common/index';\nimport { IStatusDot } from '../..';\n\nconst Container = styled.button`\n ${resetButtonStyles}\n flex-basis: auto;\n flex-grow: 1;\n`;\n\nconst LinkTab = styled.div<{ $isActive: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n\n ${({ theme }) => css`\n transition: border var(--speed-normal) var(--easing-primary-in-out);\n border-bottom: 5px solid ${theme.colors.menu.indicator};\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--dimmed);\n }\n }\n\n &:hover {\n border-bottom-color: ${theme.colors.menu.hover};\n ${IconWrapper} {\n [stroke]{\n stroke: ${theme.colors.menu.hover};\n }\n }\n }\n `};\n\n ${({ $isActive, theme }) => $isActive && css`\n &, &:hover {\n border-bottom-color: ${theme.colors.menu.active};\n ${IconWrapper} {\n [stroke]{\n stroke: ${theme.colors.menu.active};\n }\n }\n }\n `}\n`;\n\ninterface IMobileTab {\n tabFor: string\n icon: string\n closeId: string\n counter?: number\n status?: IStatusDot\n customComponent?: React.ReactElement\n}\n\nconst MobileTab: React.FC<IMobileTab> = ({ tabFor, icon, closeId, counter, status, customComponent: _customComponent, ...props }) => {\n const { selected, setSelected }: ContextProps = useContext(TabContext);\n\n const onChangeTab = useCallback((tabId: string) => {\n const newValue = (selected === tabId) ? closeId : tabId;\n setSelected(newValue);\n }, [closeId, selected, setSelected]);\n\n return (\n <Container {...props} onClick={() => onChangeTab(tabFor)}>\n <LinkTab $isActive={selected === tabFor}>\n <StatusIcon {...{icon, status, counter}} />\n </LinkTab>\n </Container>\n );\n};\n\nexport { MobileTab };","import React, { useContext, useCallback } from 'react';\nimport { TabContext, ContextProps } from '../Tabs';\nimport styled, { css } from 'styled-components';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\n\nconst Container = styled.div<{ $active: boolean }>`\n display: flex;\n align-items: center;\n margin-right: 22px;\n padding-bottom: 7px;\n height: 60px;\n cursor: pointer;\n\n ${({ $active }) => $active ? css`\n border-bottom: 3px solid var(--primary-11);\n `\n : css`\n border-bottom: 3px solid transparent;\n `};\n ${IconWrapper} {\n margin-left: 2px;\n flex-shrink: 0;\n }\n`;\n\nconst Title = styled.div<{ $active: boolean }>`\n font-size: 14px;\n font-family: ${({ theme }) => theme.fontFamily.ui};\n letter-spacing: 0.09px;\n font-weight: 500;\n color: ${({ $active }) => $active ? 'var(--primary-11)' : 'var(--grey-11)'};\n margin-bottom: 5px;\n flex-shrink: 0;\n white-space: nowrap;\n text-overflow: ellipsis;\n`;\n\n\nconst SubTitle = styled.div`\n font-size: 12px;\n font-family: ${({ theme }) => theme.fontFamily.data};\n font-style: italic;\n &:lang(ja) {\n font-style: normal;\n }\n color: var(--grey-a10);\n flex-shrink: 0;\n white-space: nowrap;\n text-overflow: ellipsis;\n`;\n\nconst TextGroup = styled.div`\n margin-left: 12px;\n margin-right: 20px;\n`;\n\nexport interface ITabWithIcon {\n icon: string\n title: string\n subtitle?: string\n tabFor: string\n}\n\nconst TabWithIcon: React.FC<ITabWithIcon> = ({ icon, title, subtitle, tabFor, ...props }) => {\n\n const { selected, setSelected }: ContextProps = useContext(TabContext);\n\n const onChangeTab = useCallback((tabId: string) => {\n setSelected(tabId);\n }, [setSelected]);\n\n const active = selected === tabFor;\n\n return (\n <Container $active={active} {...props} onClick={() => onChangeTab(tabFor)}>\n <Icon {...{ icon }} weight='regular' size={15} color={active ? 'primary' : 'dimmed'} />\n <TextGroup>\n <Title $active={active}>{title}</Title>\n {subtitle && <SubTitle>{subtitle}</SubTitle>}\n </TextGroup>\n </Container>\n );\n};\n\nexport { TabWithIcon };","import React, { ReactElement } from 'react';\nimport styled from 'styled-components';\nimport { Tabs } from '../Tabs';\nimport { TabList } from '../TabList';\nimport { TabContent } from '../TabContent';\nimport { TabWithIcon, ITabWithIcon } from '../atoms/TabWithIcon';\n\nconst Container = styled.div``;\n\nconst TabListWrapper = styled.div<{ $paddingLeft?: string }>`\n padding-top: 10px;\n padding-left: ${({ $paddingLeft }) => $paddingLeft ? $paddingLeft : '87px'};\n box-shadow: 0 -5px 5px 0 var(--black-a1);\n border-bottom: 1px solid var(--grey-6);\n overflow-y: auto;\n scrollbar-width: none; /* Firefox */\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n &::-webkit-scrollbar { /* WebKit */\n width: 0;\n height: 0;\n }\n`;\n\nexport interface ITabIcon extends ITabWithIcon {\n customComponent?: ReactElement\n}\n\nexport interface ITabsWithIconBar {\n defaultTabId: string\n tabList: ITabIcon[]\n paddingLeft?: string\n}\n\nconst TabsWithIconBar: React.FC<ITabsWithIconBar> = ({ defaultTabId, tabList, paddingLeft }) => {\n\n return (\n <Container>\n <Tabs>\n <TabListWrapper $paddingLeft={paddingLeft}>\n <TabList {...{ defaultTabId }}>\n {tabList.map(({ icon, title, subtitle, tabFor }) => {\n return (\n <TabWithIcon key={`tabWithIcon-${tabFor}`} {...{ icon, title, subtitle, tabFor }} />\n );\n })}\n </TabList>\n </TabListWrapper>\n\n {tabList.map(({ tabFor, customComponent }) => {\n return (\n <TabContent key={`TabContent-${tabFor}`} tabId={tabFor}>{customComponent}</TabContent>\n );\n }\n )}\n </Tabs>\n </Container>\n );\n};\n\nexport { TabsWithIconBar };","import React, { ButtonHTMLAttributes, useContext } from 'react';\nimport { TabContext, ContextProps } from '../../Tabs/Tabs';\nimport styled from 'styled-components';\nimport { resetButtonStyles } from '../../common/index';\nimport Icon from '../../Icons/Icon';\nimport { MOBILE_CLOSE_HEIGHT } from './Layout';\n\nconst StyledButton = styled.button`\n ${resetButtonStyles}\n \n font-family: var(--font-ui);\n background-color: var(--global-element-background);\n border-top: 1px solid var(--dividing-line);\n font-weight: 400;\n color: var(--grey-10);\n \n height: ${MOBILE_CLOSE_HEIGHT}px;\n position: fixed;\n bottom: 0;\n font-size: 14px;\n outline: none;\n\n width: 100%;\n text-align: center;\n white-space: nowrap;\n padding: 0 40px;\n\n`;\n\nconst IconContainer = styled.div`\n height: inherit;\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n margin: 0 20px;\n\n svg {\n display:block;\n }\n`;\n\nconst TextWrapper = styled.div`\n text-transform: uppercase;\n`;\n\ninterface ICloseProps {\n closeId: string\n closeText?: string\n}\n\ntype IClose = ICloseProps & ButtonHTMLAttributes<HTMLButtonElement>\n\nconst CloseButton: React.FC<IClose> = ({\n closeId,\n closeText = 'CLOSE MENU',\n children,\n formAction,\n ...props }) => {\n const { setSelected }: ContextProps = useContext(TabContext);\n\n return (\n <StyledButton\n onClick={() => setSelected(closeId)}\n {...props}\n >\n <IconContainer>\n <Icon icon='CloseCompact' color='dimmed' size={16} />\n </IconContainer>\n <TextWrapper>{closeText}</TextWrapper>\n </StyledButton>\n );\n};\n\nexport default CloseButton;","import React, {useContext} from 'react';\nimport styled from 'styled-components';\nimport { TabContext, ContextProps } from '../../Tabs/Tabs';\n\nimport { MOBILE_NAVBAR_HEIGHT, MOBILE_CLOSE_HEIGHT } from '../atoms/Layout';\n\n//\n// Containers height is full height but header and close button\n//\n\nconst Container = styled.div`\n position: relative;\n min-height: calc(100vh - ${MOBILE_NAVBAR_HEIGHT + MOBILE_CLOSE_HEIGHT }px);\n width: 100%;\n overflow-y: scroll;\n`;\n\nconst ContentWrapper = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n`;\n\ninterface OwnProps {\n closeId: string;\n children?: React.ReactNode;\n}\n\nconst MobileNavbarContent: React.FC<OwnProps> = ({ closeId, children }) => {\n const { selected }: ContextProps = useContext(TabContext);\n\n return (\n selected === closeId\n ? null\n : (\n <Container>\n <ContentWrapper>\n <>{children}</>\n </ContentWrapper>\n </Container>\n )\n );\n};\n\nexport default MobileNavbarContent;","import React, { useCallback, useState, useContext } from 'react';\nimport styled from 'styled-components';\nimport { useLocation } from 'react-router-dom';\nimport { TabContext, ContextProps } from '../../Tabs/Tabs';\n\nimport { IMenu } from '..';\nimport NavigationItem from '../atoms/NavigationItem';\nimport ContextItem from '../atoms/ContextItem';\nimport { getTopLevelPath } from '../../helpers/index';\n\nconst Container = styled.div``;\n\nconst ItemWrapper = styled.div`\n padding: 14px 0;\n border-bottom: 1px solid var(--dividing-line);\n`;\n\ninterface IMobileMenu extends IMenu {\n closeId: string\n}\n\nconst MobileMenu: React.FC<IMobileMenu> = ({\n content,\n supportUrl,\n supportText=\"Help & Support\",\n closeId\n}) => {\n\n const [focusedContext, setFocusedContext] = useState<number>(0);\n const location = useLocation();\n const { setSelected }: ContextProps = useContext(TabContext);\n\n\n /** Manage which context is open.\n * -1 is the value of a sub menu\n * In this mobile version of the menu will close after selecting an option\n * It will not close if the menu has a submenu to allow it to display the options\n */\n const setFocusedContextCb = useCallback((contextKey: number) => {\n if((contextKey === -1) || (!content.items[contextKey].submenu) ){\n setSelected(closeId);\n }\n\n if(contextKey === -1) { return; }\n\n setFocusedContext(focusedContext !== contextKey ? contextKey : -1);\n\n }, [closeId, content.items, focusedContext, setSelected]);\n\n const handleCloseMenu = useCallback(() => {\n setSelected(closeId);\n },[closeId, setSelected]);\n\n return (\n <Container>\n {content.items.map((item, key) => {\n return (\n <ItemWrapper key={key} data-key={key}>\n <NavigationItem\n mobileMenu\n topLevelPath={getTopLevelPath(location.pathname)}\n contextKey={key}\n menuOpen\n submenuOpen={key === focusedContext}\n onClickCallback={setFocusedContextCb}\n {...{ item, focusedContext }}\n />\n </ItemWrapper>\n\n );\n })}\n {supportUrl && (\n <ItemWrapper>\n <ContextItem\n compact\n isActive={false}\n icon='Question'\n title={supportText}\n href={supportUrl}\n menuOpen\n onClickCallback={handleCloseMenu}\n />\n </ItemWrapper>)}\n </Container>\n );\n};\n\nexport default MobileMenu;","import React, { useContext } from 'react';\nimport styled from 'styled-components';\nimport { TabContext, ContextProps } from '../../Tabs/Tabs';\n\nimport SvgLogoMark from '../../svg/LogoMark';\nimport {resetButtonStyles} from '../../common/index';\nimport { Link } from 'react-router-dom';\n\nconst Logo = styled(Link)`\n ${resetButtonStyles};\n display: flex;\n flex-basis: 0;\n flex-grow: 1;\n justify-content: center;\n align-items: center;\n object {\n pointer-events: none;\n height: 25px;\n }\n`;\nconst LogoMark = styled.div`\n margin-right: 15px;\n`;\n\nconst SVGObject = styled.object``;\n\ninterface ILogoLink {\n closeId: string\n logoMark?: string,\n home?: string,\n}\n\nconst MobileLogoLink: React.FC<ILogoLink> = ({\n home = \"/\",\n logoMark,\n closeId,\n}) => {\n const { setSelected }: ContextProps = useContext(TabContext);\n\n return(\n <Logo to={home} onClick={() => setSelected(closeId)}>\n <LogoMark>{logoMark ? <SVGObject type='image/svg+xml' data={logoMark} /> : <SvgLogoMark />}</LogoMark>\n </Logo>\n );\n};\n\nexport default MobileLogoLink;","import React, { useCallback, useContext } from 'react';\nimport styled from 'styled-components';\nimport UserMenu from '../molecules/UserMenu';\nimport { ITopBar } from '../index';\nimport { TabContext, ContextProps } from '../../Tabs/Tabs';\n\nconst Container = styled.div`\n background: var(--global-element-background);\n\n z-index: 100;\n display: flex;\n flex-direction: column;\n`;\n\ninterface IMobileUserMenu extends ITopBar {\n closeId: string\n}\n\nconst MobileUserMenu: React.FC<IMobileUserMenu> = ({\n closeId,\n hasLanguage,\n hasLogout,\n logoutLink,\n hasCurrentUser,\n userSubmenu,\n userDrawerBespoke,\n loggedInUser,\n onLogout,\n onLanguageToggle,\n ...props\n}) => {\n const { setSelected }: ContextProps = useContext(TabContext);\n\n const handleCloseMenu = useCallback(() => {\n setSelected(closeId);\n },[closeId, setSelected]);\n\n return (\n <Container>\n <UserMenu\n {...{\n hasLanguage,\n hasLogout,\n logoutLink,\n hasCurrentUser,\n userSubmenu,\n userDrawerBespoke,\n loggedInUser,\n onLogout,\n onLanguageToggle,\n ...props\n }}\n closeOnClick={handleCloseMenu}\n />\n </Container>\n );\n};\n\nexport default MobileUserMenu;","import React from 'react';\nimport styled from 'styled-components';\nimport { Tabs, TabContent, MobileTab } from '../../Tabs/index';\nimport { TabListWrapper, TabList } from '../../Tabs/TabList';\nimport { IMenu, ITopBar, INotificationsHistory } from '..';\nimport CloseButton from '../atoms/CloseButton';\nimport MobileNavbarContainer from '../atoms/MobileNavbarContent';\nimport MobileMenu from './MobileMenu';\nimport MobileLogoLink from '../atoms/MobileLogoLink';\nimport MobileUserMenu from '../molecules/MobileUserMenu';\nimport NotificationsHistory from '../molecules/NotificationsHistory';\nimport { MOBILE_NAVBAR_HEIGHT } from '../atoms/Layout';\n\nconst CLOSE_ID = 'closeMenu';\nconst NOTI_TAB = 'notifications';\nconst USER_TAB= 'user';\nconst MENU_TAB = 'menu';\nconst CUSTOM_TAB = 'custom';\n\nconst Container = styled.nav`\n background-color: var(--global-element-background);\n position: sticky;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 99;\n`;\n\nconst HeaderContainer = styled.div`\n display: flex;\n flex-direction: row;\n height: ${MOBILE_NAVBAR_HEIGHT}px;\n border-bottom: var(--dividing-line) 1px solid;\n\n ${TabListWrapper} {\n flex-basis: 0;\n flex-grow: 3;\n }\n`;\n\ninterface OwnProps {\n closeText?: string\n notificationsHistory?: INotificationsHistory\n}\n\ntype IMobileNavbar = OwnProps & IMenu & ITopBar;\n\nconst MobileNavbar: React.FC<IMobileNavbar> = ({\n content,\n home,\n logoMark,\n supportUrl,\n defaultMenuOpen = true,\n closeText,\n hasLanguage,\n hasLogout,\n logoutLink,\n hasCurrentUser,\n hasNotifications,\n userSubmenu,\n userDrawerBespoke,\n loggedInUser,\n notificationsHistory,\n customDrawer,\n supportText,\n onLogout,\n onLanguageToggle,\n ...props\n}) => {\n\n return (\n <Container>\n <Tabs>\n <HeaderContainer>\n <MobileLogoLink {...{ home, logoMark }} closeId={CLOSE_ID} />\n <TabList defaultTabId={CLOSE_ID}>\n {customDrawer && <MobileTab {...customDrawer} tabFor={CUSTOM_TAB} closeId={CLOSE_ID} />}\n {hasNotifications? <MobileTab tabFor={NOTI_TAB} icon='Notifications' closeId={CLOSE_ID} /> : null}\n <MobileTab tabFor={USER_TAB} icon='UserProfile' closeId={CLOSE_ID} />\n <MobileTab tabFor={MENU_TAB} icon='Menu' closeId={CLOSE_ID} />\n </TabList>\n </HeaderContainer>\n <MobileNavbarContainer closeId={CLOSE_ID}>\n <TabContent tabId={CUSTOM_TAB}>\n {customDrawer && customDrawer.customComponent}\n </TabContent>\n <TabContent tabId={NOTI_TAB}>\n {notificationsHistory && hasNotifications ? <NotificationsHistory {...notificationsHistory} /> : null}\n </TabContent>\n <TabContent tabId={USER_TAB}>\n <MobileUserMenu\n {...{\n hasLanguage,\n hasLogout,\n logoutLink,\n hasCurrentUser,\n userSubmenu,\n userDrawerBespoke,\n loggedInUser,\n onLogout,\n onLanguageToggle,\n ...props\n }}\n closeId={CLOSE_ID}\n />\n\n </TabContent>\n <TabContent tabId={MENU_TAB}>\n <MobileMenu {...{ content, supportUrl, supportText, defaultMenuOpen }} closeId={CLOSE_ID} />\n </TabContent>\n <CloseButton {...{ closeText }} closeId={CLOSE_ID} />\n </MobileNavbarContainer>\n </Tabs>\n </Container>\n );\n};\n\nexport default MobileNavbar;","import React from 'react';\nimport { IMenu, ITopBar} from '..';\nimport { Layout, MainContainer, ContentArea, MobileLayout } from '../atoms/Layout';\nimport MainMenu from '../organisms/MainMenu';\nimport TopBar from '../molecules/TopBar';\nimport MobileNavbar from '../organisms/MobileNavbar';\nimport useBreakpoints from '../../hooks/useBreakpoints';\n\n\ninterface OwnProps {\n maxWidth?: string,\n paddingOverride?: string,\n legacyLayout?: boolean,\n onMenuToggle?: (isMenuOpen: boolean) => void,\n children?: React.ReactNode\n}\n\ntype INavigation = OwnProps & IMenu & ITopBar;\n\nconst GlobalUI: React.FC<INavigation> = ({\n content,\n home,\n openWidth,\n logoMark,\n logoText,\n supportUrl,\n defaultMenuOpen,\n canAlwaysPin,\n paddingOverride,\n maxWidth,\n legacyLayout,\n children,\n keepOpenText,\n autoHideText,\n supportText,\n onMenuToggle,\n ...props\n}) => {\n\n const { isLarge } = useBreakpoints();\n\n return (\n isLarge\n ? (\n <Layout>\n <MainMenu {...{\n content,\n home,\n openWidth,\n logoMark,\n logoText,\n supportUrl,\n defaultMenuOpen,\n canAlwaysPin,\n onMenuToggle,\n keepOpenText,\n autoHideText,\n supportText,\n }\n }\n />\n <MainContainer>\n <TopBar\n {...{...props}}\n />\n <ContentArea $maxWidth={maxWidth} $paddingOverride={paddingOverride} $legacyLayout={legacyLayout}>\n <>{children}</>\n </ContentArea>\n </MainContainer>\n </Layout>\n )\n : (\n <MobileLayout>\n <MobileNavbar\n {...{\n content,\n home,\n logoMark,\n supportUrl,\n defaultMenuOpen,\n supportText,\n ...props\n }\n }\n />\n <ContentArea>\n <>{children}</>\n </ContentArea>\n </MobileLayout>\n )\n );\n};\n\nexport default GlobalUI;","import React from 'react';\nimport styled from 'styled-components';\nimport { Link } from 'react-router-dom';\n\nconst Container = styled.div`\n width: 286px;\n border-right: 1px solid var(--grey-a7);\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n`;\nconst LogoContainer = styled.div`\n height: 84px;\n color: var(--grey-11);\n border-bottom: 1px solid var(--grey-a7);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-top: 18px;\n padding-bottom: 15px;\n`;\nconst LogoTopText = styled.div`\n height: 31px;\n font-family: Monorale;\n font-size: 18px;\n font-weight: 500;\n line-height: 1.72;\n letter-spacing: 4.5px;\n text-align: center;\n`;\nconst LogoBottomText = styled.div`\n height: 19px;\n font-family: Monorale;\n font-size: 16px;\n font-weight: 400;\n line-height: normal;\n letter-spacing: 14.11px;\n text-align: center;\n`;\n\nexport const SidebarBox = styled.div`\n position: relative;\n border-bottom: 1px solid var(--grey-a7);\n padding: 22px 20px 21px 20px;\n`;\nexport const SidebarHeading = styled.div`\n font-size: 14px;\n font-weight: 500;\n letter-spacing: 0.35px;\n color: var(--grey-10);\n margin-bottom: 18px;\n`;\n\nexport const SidebarLinkHeading = styled.div`\n font-size: 14px;\n font-weight: 500;\n letter-spacing: 0.35px;\n color: var(--grey-10);\n`;\n\nexport const BackLink = styled(Link)`\n font-size: 14px;\n font-weight: 500;\n letter-spacing: 0.35px;\n color: var(--grey-10);\n`;\n\nconst SLink = styled(Link)`\n position: absolute;\n right: 30px;\n top: 15px;\n /* width: 80px; */\n /* height: 30px; */\n font-size: 14px;\n font-weight: 600;\n text-align: center;\n color: var(--grey-9);\n border-radius: 3px;\n background-color: var(--primary-2);\n text-decoration: none;\n padding: 7px 20px;\n`;\n\nexport const SidebarLink : React.FC<{title: string; to: string}> = ({title,to}) => {\n return (\n <SidebarBox>\n <SidebarLinkHeading>{title}</SidebarLinkHeading>\n <SLink to={to}>Setup</SLink>\n </SidebarBox>\n );\n};\n\ninterface LogoProps{\n logoTextTop: string;\n logoTextBottom: string;\n}\n\nexport const Logo: React.FC<LogoProps> = ({logoTextTop,logoTextBottom}) => (\n <LogoContainer>\n <LogoTopText>{logoTextTop}</LogoTopText>\n <LogoBottomText>•{logoTextBottom}•</LogoBottomText>\n </LogoContainer>\n);\n\n\nconst Sidebar: React.FC<React.PropsWithChildren> = ({children,...props}) => {\n return (\n <Container {...props}>\n <>{children}</>\n </Container>\n );\n};\n\nexport default Sidebar;\n"],"mappings":"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ACf,UAAU;MACb;KACD,UAAU;MACN,eAAe;MACf,UAAU;MACV,mBAAmB;MACtB;KACJ;IACD,SAAS;KACL,WAAW;MACP,aAAa;MACb,mBAAmB;MACnB,eAAe;MACf,UAAU;MACb;KACD,UAAU;MACN,eAAe;MACf,UAAU;MACV,mBAAmB;MACtB;KACJ;IACD,WAAW;KACP,WAAW;MACP,aAAa;MACb,mBAAmB;MACnB,eAAe;MACf,UAAU;MACb;KACD,UAAU;MACN,eAAe;MACf,UAAU;MACV,mBAAmB;MACtB;KACJ;IACD,cAAc;KACV,WAAW;MACP,aAAa;MACb,mBAAmB;MACnB,eAAe;MACf,UAAU;MACb;KACD,UAAU;MACN,mBAAmB;MACnB,eAAe;MACf,UAAU;MACb;KACJ;IACD,mBAAmB;KACf,cAAc;MACV,mBAAmB;MACnB,mBAAmB;MACtB;KACD,kBAAkB,EACd,mBAAmB,oBACtB;KACJ;IACJ;GACD,UAAU;IACN,WAAW;KACP,WAAW;MACP,mBAAmB;MACnB,mBAAmB;MACtB;KACD,SAAS,EACL,mBAAmB,qBACtB;KACD,UAAU,EACN,mBAAmB,oBACtB;KACD,WAAW,EACP,mBAAmB,qBACtB;KACD,YAAY;MACR,mBAAmB;MACnB,mBAAmB;MACtB;KACD,cAAc;MACV,mBAAmB;MACnB,mBAAmB;MACtB;KACJ;IACD,aAAa;KACT,WAAW,EACP,mBAAmB,iBACtB;KACD,SAAS,EACL,mBAAmB,kBACtB;KACD,UAAU,EACN,mBAAmB,iBACtB;KACD,YAAY,EACR,mBAAmB,mBACtB;KACD,WAAW,EACP,mBAAmB,kBACtB;KACD,cAAc;MACV,mBAAmB;MACnB,mBAAmB;MACtB;KACJ;IACD,UAAU;KACN,WAAW;MACP,mBAAmB;MACnB,mBAAmB;MACtB;KACD,SAAS,EACL,mBAAmB,qBACtB;KACD,UAAU,EACN,mBAAmB,oBACtB;KACD,YAAY,EACR,mBAAmB,sBACtB;KACD,WAAW,EACP,mBAAmB,oBACtB;KACD,cAAc;MACV,mBAAmB;MACnB,mBAAmB;MACtB;KACJ;IACJ;GACD,UAAU;IACN,OAAO;KACH,WAAW;MACP,SAAS;OACL,mBAAmB;OACnB,mBAAmB;OACnB,eAAe;OACf,UAAU;OACb;MACD,SAAS;OACL,mBAAmB;OACnB,mBAAmB;OACtB;MACJ;KACD,YAAY;MACR,SAAS;OACL,mBAAmB;OACnB,mBAAmB;OACnB,eAAe;OACf,UAAU;OACb;MACD,SAAS,EACL,mBAAmB,iBACtB;MACJ;KACD,WAAW,EACP,SAAS;MACL,mBAAmB;MACnB,mBAAmB;MACnB,eAAe;MACf,UAAU;MACb,EACJ;KACJ;IACD,MAAM;KACF,WAAW;MACP,SAAS;OACL,mBAAmB;OACnB,mBAAmB;OACnB,eAAe;OACf,UAAU;OACb;MACD,SAAS,EACL,mBAAmB,kBACtB;MACJ;KACD,YAAY;MACR,SAAS;OACL,mBAAmB;OACnB,mBAAmB;OACnB,eAAe;OACf,UAAU;OACb;MACD,SAAS,EACL,mBAAmB,kBACtB;MACJ;KACD,WAAW,EACP,SAAS;MACL,mBAAmB;MACnB,mBAAmB;MACnB,eAAe;MACf,UAAU;MACb,EACJ;KACJ;IACD,WAAW;KACP,WAAW;MACP,SAAS;OACL,mBAAmB;OACnB,mBAAmB;OACnB,eAAe;OACf,UAAU;OACb;MACD,SAAS,EACL,mBAAmB,kBACtB;MACJ;KACD,WAAW;MACP,SAAS;OACL,mBAAmB;OACnB,mBAAmB;OACnB,eAAe;OACf,UAAU;OACb;MACD,SAAS,EACL,mBAAmB,kBACtB;MACJ;KACJ;IACD,UAAU;KACN,WAAW;MACP,SAAS;OACL,mBAAmB;OACnB,mBAAmB;OACnB,eAAe;OACf,UAAU;OACb;MACD,SAAS,EACL,mBAAmB,kBACtB;MACJ;KACD,WAAW,EACP,SAAS;MACL,mBAAmB;MACnB,mBAAmB;MACnB,eAAe;MACf,UAAU;MACb,EACJ;KACD,YAAY;MACR,SAAS;OACL,mBAAmB;OACnB,mBAAmB;OACnB,eAAe;OACf,UAAU;OACb;MACD,SAAS,EACL,mBAAmB,kBACtB;MACJ;KACJ;IACD,UAAU,EACN,WAAW;KACP,SAAS;MACL,mBAAmB;MACnB,mBAAmB;MACnB,eAAe;MACf,U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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/theme/legacy/colors.ts","../src/theme/legacy/custom.ts","../src/theme/legacy/styles.ts","../src/theme/legacy/typography.ts","../src/theme/index.ts","../src/theme/variables/Animation.ts","../src/theme/variables/Colors.ts","../src/theme/variables/Layout.ts","../src/theme/ThemeVariables.ts","../src/theme/ThemeHelpers.ts","../src/common/ContentPlaceholder.tsx","../src/common/index.ts","../src/Alerts/atom/AlertBar.tsx","../src/Alerts/atom/Notification.tsx","../src/Alerts/atom/Tooltip.tsx","../src/Form/atoms/Button.tsx","../src/Form/atoms/ButtonWithIcon.tsx","../src/Form/atoms/ButtonWithLoading.tsx","../src/svg/AvatarPlaceholder.tsx","../src/svg/checkmark.tsx","../src/svg/LogoMark.tsx","../src/svg/LogoText.tsx","../src/svg/NoImage.tsx","../src/Form/atoms/Checkbox.tsx","../src/Form/atoms/DropArea.tsx","../src/Form/atoms/IconButton.tsx","../src/Form/atoms/Input.tsx","../src/Form/atoms/InputFileButton.tsx","../src/Form/atoms/Label.tsx","../src/Form/atoms/RadioButton.tsx","../src/Form/atoms/SelectField.tsx","../src/helpers/index.tsx","../src/Form/atoms/SliderInput.tsx","../src/Form/atoms/SmallInput.tsx","../src/Form/atoms/Switch.tsx","../src/Form/atoms/TextArea.tsx","../src/Form/Form.tsx","../src/Form/molecules/ActionButtons.tsx","../src/Form/molecules/ButtonsStack.tsx","../src/helpers/cropToolHelpers.ts","../src/Form/atoms/CropArea.tsx","../src/Form/molecules/CropTool.tsx","../src/Form/molecules/DurationSlider.tsx","../src/Form/molecules/PasswordField.tsx","../src/Form/molecules/PercentageSlider.tsx","../src/hooks/useMediaQuery.ts","../src/hooks/useBreakpoints.ts","../src/hooks/useClickOutside.tsx","../src/hooks/useCopyToClipboard.tsx","../src/hooks/useInterval.ts","../src/hooks/useLocalStorage.tsx","../src/svg/NoImageBig.tsx","../src/Misc/atoms/MediaBox.tsx","../src/Modals/Modal.tsx","../src/context/ModalContext.tsx","../src/hooks/useModal.tsx","../src/hooks/useMediaModal.tsx","../src/context/NotificationContext.tsx","../src/hooks/useNotification.tsx","../src/hooks/usePoll.ts","../src/hooks/useThemeToggle.ts","../src/hooks/useTitle.tsx","../src/hooks/useTo.tsx","../src/Form/atoms/SplitButtonOption.tsx","../src/Form/molecules/SplitButton.tsx","../src/Form/molecules/TextAreaField.tsx","../src/Form/molecules/TextField.tsx","../src/Misc/atoms/BigIconsSummary.tsx","../src/Form/organisms/AreaUploadManager.tsx","../src/Form/organisms/AvatarUploader.tsx","../src/Filters/atoms/FilterButton.tsx","../src/Filters/atoms/FilterDropdownContainer.tsx","../src/Filters/atoms/ToggleButton.tsx","../src/Filters/atoms/DateTimeBlock.tsx","../src/Filters/molecules/DatePicker.tsx","../src/Form/atoms/FilterOption.tsx","../src/Misc/atoms/BasicSearchInput.tsx","../src/Filters/atoms/FilterDropHandler.tsx","../src/Filters/atoms/FooterControls.tsx","../src/Filters/atoms/LoadingBox.tsx","../src/Filters/FilterTypes.ts","../src/Filters/molecules/FilterDropdown.tsx","../src/Filters/molecules/DropdownDatePicker.tsx","../src/Filters/molecules/FilterInputs.tsx","../src/Filters/molecules/FilterLayout.tsx","../src/Filters/molecules/FiltersResults.tsx","../src/Filters/molecules/SortDropdown.tsx","../src/Filters/organisms/FilterBar.tsx","../src/Icons/StatusIcon.tsx","../src/LineUI/LineReducer.ts","../src/LineUI/LineUI.tsx","../src/WebRTCClient.tsx","../src/LineUI/LineUIRTC.tsx","../src/LineUI/LineUIVideo.tsx","../src/Pages/atoms/IntroductionText.tsx","../src/Pages/atoms/PageTitle.tsx","../src/Pages/molecules/MultilineContent.tsx","../src/Misc/atoms/Tag.tsx","../src/Pages/molecules/PageHeader.tsx","../src/Tables/atoms/TableHeaderTitle.tsx","../src/Tables/atoms/TableRowThumbnail.tsx","../src/Tables/molecules/EditCell.tsx","../src/Tables/atoms/TypeTableCell.tsx","../src/Tables/atoms/TypeTableDeviceStatus.tsx","../src/Tables/atoms/TypeTableRow.tsx","../src/Tables/molecules/TypeTableHeader.tsx","../src/Tables/organisms/TypeTable.tsx","../src/CameraPanels/atoms/MediaStream.tsx","../src/CameraPanels/atoms/PanelMetaData.tsx","../src/CameraPanels/molecules/CameraPanel.tsx","../src/CameraPanels/organisms/CameraPanels.tsx","../src/Misc/atoms/ActionsBar.tsx","../src/Misc/molecules/DebouncedSearcher.tsx","../src/Misc/molecules/Pagination.tsx","../src/Misc/molecules/TagList.tsx","../src/Modals/ConfirmationModal.tsx","../src/Layouts/atoms/FullWidthContentBlock.tsx","../src/Layouts/atoms/ResizeLine.tsx","../src/Layouts/molecules/SplitLayout.tsx","../src/Layouts/atoms/UtilityHeaderBack.tsx","../src/Layouts/atoms/UtilityHeaderShare.tsx","../src/Layouts/molecules/UtilityHeader.tsx","../src/Tabs/Tabs.tsx","../src/Layouts/organisms/ContentLayout.tsx","../src/Global/atoms/Layout.tsx","../src/Global/atoms/TopBarBadge.tsx","../src/Global/atoms/DrawerBottomMenu.tsx","../src/Global/atoms/UserDrawerMeta.tsx","../src/Global/molecules/UserMenu.tsx","../src/Global/atoms/NotificationItem.tsx","../src/Global/molecules/NotificationsHistory.tsx","../src/Global/molecules/TopBar.tsx","../src/hooks/useMenu.ts","../src/Global/atoms/ContextItem.tsx","../src/Global/atoms/NavigationItem.tsx","../src/Global/organisms/MainMenu.tsx","../src/Tabs/atoms/MobileTab.tsx","../src/Tabs/atoms/Tab.tsx","../src/Tabs/atoms/TabWithIcon.tsx","../src/Tabs/TabContent.tsx","../src/Tabs/TabList.tsx","../src/Tabs/molecules/TabsWithIconBar.tsx","../src/Global/atoms/CloseButton.tsx","../src/Global/atoms/MobileLogoLink.tsx","../src/Global/atoms/MobileNavbarContent.tsx","../src/Global/molecules/MobileUserMenu.tsx","../src/Global/organisms/MobileMenu.tsx","../src/Global/organisms/MobileNavbar.tsx","../src/Global/templates/GlobalUI.tsx","../src/Global/molecules/Sidebar.tsx"],"sourcesContent":["export const colors: {\n pureBase: string;\n pureTop: string;\n divider: string;\n icons: { [key: string]: string };\n menu: { [key: string]: string };\n feedback: { [key: string]: string };\n status: { [key: string]: string };\n transparent: string;\n input: { border: { [key: string]: string } };\n} = {\n pureBase: 'var(--white-1)',\n pureTop: 'var(--black-1)',\n divider: 'var(--grey-6)',\n icons: {\n inverse: 'var(--grey-1)',\n mono: 'var(--grey-12)',\n dimmed: 'var(--grey-11)',\n subtle: 'var(--grey-10)',\n primary: 'var(--primary-9)',\n danger: 'var(--warning-9)',\n white: 'var(--white-1)',\n },\n menu: {\n active: 'var(--primary-9)',\n hover: 'var(--primary-8)',\n default: 'var(--grey-2)',\n indicator: 'var(--grey-a1)',\n passive: 'var(--primary-a7)',\n },\n feedback: {\n error: 'var(--warning-8)',\n info: 'var(--primary-7)',\n neutral: 'var(--grey-9)',\n success: 'var(--success-8)',\n warning: 'var(--caution-10)',\n },\n status: {\n caution: 'var(--caution-10)',\n danger: 'var(--warning-8)',\n folder: 'var(--primary-7)',\n highlight: 'var(--primary-7)',\n good: 'var(--success-7)',\n neutral: 'var(--grey-5)',\n },\n transparent: 'var(--black-a1)',\n input: {\n border: {\n default: 'var(--grey-7)',\n },\n },\n};\n","type LineStyle = {\n label: { fill: string };\n contrastLine: { stroke: string };\n highlightLine: { stroke: string };\n highlightLineBorder: { stroke: string };\n grabHandle: { fill: string; stroke: string };\n point: { fill: string };\n grabHandleContrast: { stroke: string };\n grabHandleText: { fill: string; stroke?: string };\n handleBase: { fill: string };\n handleRingLayer: { stroke: string };\n handleReactiveFill: { fill: string };\n handleReactiveRing: { stroke: string };\n handleContrastLayer: { stroke: string };\n stopStart: { stopColor: string };\n stopEnd: { stopColor: string };\n};\n\ntype LinesTheme = {\n primary: LineStyle;\n secondary: LineStyle;\n danger: LineStyle;\n [key: string]: LineStyle; // Allow dynamic extension\n};\n\nexport const custom: { lines: LinesTheme } = {\n lines: {\n primary: {\n label: {\n fill: '#fff', //\"hsla(205deg, 80%, 25%, 100%)\"\n },\n contrastLine: {\n stroke: 'hsla(205deg, 80%, 45%, 100%);',\n },\n highlightLine: {\n stroke: 'hsla(205deg, 45%, 90%, 90%);',\n },\n highlightLineBorder: {\n stroke: 'hsla(204.8,53.4%,46.3%,100%);',\n },\n grabHandle: {\n fill: 'hsla(205deg, 45%, 90%, 100%)',\n stroke: 'hsla(205deg, 45%, 100%, 100%)',\n },\n point: {\n fill: 'hsla(205deg, 45%, 90%, 100%)',\n },\n grabHandleContrast: {\n stroke: 'hsla(205deg, 80%, 45%, 100%)',\n },\n grabHandleText: {\n fill: 'hsla(205deg, 80%, 25%, 100%);',\n },\n handleBase: {\n fill: 'hsla(235deg, 100%, 80%, 100%);',\n },\n handleRingLayer: {\n stroke: 'hsla(205deg, 100%, 89%, 100%);',\n },\n handleReactiveFill: {\n fill: 'hsla(192deg, 100%, 45%, 100%);',\n },\n handleReactiveRing: {\n stroke: 'hsla(205deg, 100%, 36%, 27%);',\n },\n handleContrastLayer: {\n stroke: 'hsla(205deg, 100%, 36%, 15%);',\n },\n stopStart: {\n stopColor: ' hsla(205deg, 100%, 15%, 35%);',\n },\n stopEnd: {\n stopColor: 'hsla(205deg, 100%, 15%, 0%)',\n },\n },\n secondary: {\n label: {\n fill: '#fff', //\"hsla(205deg, 80%, 25%, 100%)\"\n },\n contrastLine: {\n stroke: 'hsla(120deg, 80%, 45%, 100%);',\n },\n highlightLine: {\n stroke: 'hsla(120deg, 45%, 90%, 90%);',\n },\n highlightLineBorder: {\n stroke: 'hsla(120deg, 81%, 70%, 90%);',\n },\n grabHandle: {\n fill: 'hsla(120deg, 45%, 90%, 100%)',\n stroke: 'hsla(120deg, 45%, 100%, 100%)',\n },\n point: {\n fill: 'hsla(120deg, 45%, 90%, 100%)',\n },\n grabHandleContrast: {\n stroke: 'hsla(120deg, 80%, 45%, 100%)',\n },\n grabHandleText: {\n fill: 'hsla(120deg, 80%, 25%, 100%);',\n },\n handleBase: {\n fill: 'hsla(150deg, 100%, 80%, 100%);',\n },\n handleRingLayer: {\n stroke: 'hsla(120deg, 100%, 89%, 100%);',\n },\n handleReactiveFill: {\n fill: 'hsla(108deg, 100%, 45%, 100%);',\n },\n handleReactiveRing: {\n stroke: 'hsla(120deg, 100%, 36%, 27%);',\n },\n handleContrastLayer: {\n stroke: 'hsla(120deg, 100%, 36%, 15%);',\n },\n stopStart: {\n stopColor: ' hsla(120deg, 100%, 15%, 35%);',\n },\n stopEnd: {\n stopColor: 'hsla(120deg, 100%, 15%, 0%)',\n },\n },\n danger: {\n label: {\n fill: '#fff', //\"hsla(205deg, 80%, 25%, 100%)\"\n },\n contrastLine: {\n stroke: 'hsla(0, 80%, 45%, 100%);',\n },\n highlightLine: {\n stroke: 'hsla(0, 45%, 90%, 90%);',\n },\n highlightLineBorder: {\n stroke: 'hsla(0deg, 86%, 70%, 100%);',\n },\n grabHandle: {\n fill: 'hsla(0, 45%, 90%, 100%)',\n stroke: 'hsla(0, 45%, 100%, 100%)',\n },\n point: {\n fill: 'hsla(0, 45%, 90%, 100%)',\n },\n grabHandleText: {\n fill: 'hsla(0, 80%, 25%, 100%);',\n },\n grabHandleContrast: {\n stroke: 'hsla(0, 80%, 45%, 100%)',\n },\n handleBase: {\n fill: 'hsla(30deg, 100%, 80%, 100%);',\n },\n handleRingLayer: {\n stroke: 'hsla(0, 100%, 89%, 100%);',\n },\n handleReactiveFill: {\n fill: 'hsla(348deg, 100%, 45%, 100%);',\n },\n handleReactiveRing: {\n stroke: 'hsla(0deg, 100%, 36%, 27%);',\n },\n handleContrastLayer: {\n stroke: 'hsla(0deg, 100%, 36%, 15%);',\n },\n stopStart: {\n stopColor: ' hsla(0, 100%, 15%, 35%);',\n },\n stopEnd: {\n stopColor: 'hsla(0, 100%, 15%, 0%);',\n },\n },\n },\n};\n","import { colors } from './colors';\n\nexport const styles = {\n generic: {\n transparent: {},\n },\n form: {\n input: {\n default: {\n normal: {\n backgroundColor: 'var(--grey-1)',\n borderColor: colors.input.border.default,\n border: `${colors.input.border.default} 1px solid`,\n },\n focused: {\n boxShadow: '0px 3px 7px 0px var(--primary-a2)',\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--primary-7)',\n border: 'var(--primary-7) 1px solid',\n },\n },\n disabled: {\n normal: {\n backgroundColor: 'var(--primary-2)',\n borderColor: 'var(--grey-7)',\n border: 'var(--grey-7) 1px solid',\n },\n },\n subdivision: {\n backgroundColor: 'var(--grey-7)',\n },\n required: {\n focused: {\n boxShadow: '0px 3px 7px 0px var(--primary-a2)',\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--primary-7)',\n border: 'var(--primary-7) 2px solid',\n },\n normal: {\n borderColor: 'var(--primary-7)',\n border: 'var(--primary-7) 1px solid',\n backgroundColor: 'var(--grey-1)',\n },\n },\n valid: {\n focused: {\n boxShadow: '0px 3px 5px 0px var(--success-a2)',\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--success-7)',\n border: 'var(--success-7) 2px solid',\n },\n normal: {\n borderColor: 'var(--success-7)',\n border: 'var(--success-7) 1px solid',\n backgroundColor: 'var(--grey-1)',\n },\n },\n invalid: {\n focused: {\n boxShadow: '0px 3px 7px 0px var(--warning-a2)',\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--warning-8)',\n border: 'var(--warning-8) 2px solid',\n },\n normal: {\n borderColor: 'var(--warning-8)',\n border: 'var(--warning-8) 1px solid',\n backgroundColor: 'var(--grey-1)',\n },\n },\n processing: {\n focused: {\n boxShadow: '0px 3px 7px 0px var(--primary-a2)',\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--primary-7)',\n border: 'var(--primary-7) 2px solid',\n },\n normal: {\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--primary-7)',\n border: 'var(--primary-7) 1px solid',\n },\n },\n seperatedValues: {\n background: {\n backgroundColor: 'var(--primary-7)',\n backgroundImage: 'linear-gradient(315.00deg, var(--primary-7) 0%, var(--primary-8) 100%)',\n },\n hoverHighlight: {\n backgroundColor: 'var(--primary-7)',\n },\n },\n },\n button: {\n primary: {\n default: {\n backgroundColor: 'var(--primary-9)',\n backgroundImage: 'linear-gradient(135.00deg, var(--primary-9) 0%, var(--primary-8) 100%)',\n },\n hover: {\n backgroundColor: 'var(--primary-10)',\n },\n active: {\n backgroundColor: 'var(--primary-9)',\n },\n divider: {\n backgroundColor: 'var(--primary-a8)',\n },\n disabled: {\n backgroundColor: 'var(--primary-a10)',\n backgroundImage: 'linear-gradient(135.00deg, var(--primary-9) 0%, var(--primary-8) 100%)',\n },\n actionArea: {\n backgroundColor: 'var(--primary-9)',\n backgroundImage: 'linear-gradient(135.00deg, var(--primary-9) 0%, var(--primary-8) 100%)',\n },\n },\n secondary: {\n default: {\n backgroundColor: 'var(--grey-9)',\n },\n hover: {\n backgroundColor: 'var(--grey-10)',\n },\n active: {\n backgroundColor: 'var(--grey-9)',\n },\n disabled: {\n backgroundColor: 'var(--grey-a10)',\n },\n divider: {\n backgroundColor: 'var(--grey-a8)',\n },\n actionArea: {\n backgroundColor: 'var(--grey-9)',\n backgroundImage: 'linear-gradient(135.00deg, var(--grey-9) 0%, var(--grey-8) 100%)',\n },\n },\n danger: {\n default: {\n backgroundColor: 'var(--warning-9)',\n backgroundImage: 'linear-gradient(317.51deg, var(--warning-9) 0%, var(--warning-8) 100%)',\n },\n hover: {\n backgroundColor: 'var(--warning-10)',\n },\n active: {\n backgroundColor: 'var(--warning-9)',\n },\n disabled: {\n backgroundColor: 'var(--warning-a10)',\n },\n divider: {\n backgroundColor: 'var(--warning-8)',\n },\n actionArea: {\n backgroundColor: 'var(--warning-9)',\n backgroundImage: 'linear-gradient(317.51deg, var(--warning-9) 0%, var(--warning-8) 100%)',\n },\n },\n },\n switch: {\n off: {\n default: {\n outer: {\n backgroundColor: 'var(--grey-3)',\n backgroundImage:\n 'linear-gradient(180.00deg, var(--primary-2) 0%, var(--primary-3) 100%)',\n borderColor: 'var(--grey-a8)',\n border: 'var(--grey-a8) 1px solid',\n },\n inner: {\n backgroundColor: 'var(--primary-7)',\n backgroundImage:\n 'linear-gradient(315.00deg, var(--primary-7) 0%, var(--primary-8) 100%)',\n },\n },\n disabled: {\n outer: {\n backgroundColor: 'var(--grey-1)',\n backgroundImage: 'linear-gradient(180.00deg, var(--grey-1)0%, var(--grey-1) 100%)',\n borderColor: 'var(--grey-a7)',\n border: 'var(--grey-a7) 1px solid',\n },\n inner: {\n backgroundColor: 'var(--grey-7)',\n },\n },\n loading: {\n outer: {\n backgroundColor: 'var(--grey-3)',\n backgroundImage: 'linear-gradient(180.00deg, var(--grey-3) 0%, var(--primary-3) 100%)',\n borderColor: 'var(--grey-a8)',\n border: 'var(--grey-a8) 1px solid',\n },\n },\n },\n on: {\n default: {\n outer: {\n backgroundColor: 'var(--primary-7)',\n backgroundImage:\n 'linear-gradient(317.51deg, var(--primary-7) 0%, var(--primary-7) 100%)',\n borderColor: 'var(--primary-8)',\n border: 'var(--primary-8) 1px solid',\n },\n inner: {\n backgroundColor: 'var(--white-1)',\n },\n },\n disabled: {\n outer: {\n backgroundColor: 'var(--primary-5)',\n backgroundImage:\n 'linear-gradient(180.00deg, var(--primary-5) 0%, var(--primary-5) 100%)',\n borderColor: 'var(--primary-6)',\n border: 'var(--primary-6) 1px solid',\n },\n inner: {\n backgroundColor: 'var(--white-1)',\n },\n },\n loading: {\n outer: {\n backgroundColor: 'var(--primary-a7)',\n backgroundImage:\n 'linear-gradient(315.00deg, var(--primary-a7) 0%, var(--primary-a7) 100%)',\n borderColor: 'var(--primary-a8)',\n border: 'var(--primary-a8) 1px solid',\n },\n },\n },\n failure: {\n default: {\n outer: {\n backgroundColor: 'var(--warning-9)',\n backgroundImage:\n 'linear-gradient(317.51deg, var(--warning-9) 0%, var(--warning-8) 100%)',\n borderColor: 'var(--warning-9)',\n border: 'var(--warning-9) 1px solid',\n },\n inner: {\n backgroundColor: 'var(--white-1)',\n },\n },\n loading: {\n outer: {\n backgroundColor: 'var(--warning-8)',\n backgroundImage:\n 'linear-gradient(317.51deg, var(--warning-8) 0.4%, var(--warning-8) 100%)',\n borderColor: 'var(--warning-8)',\n border: 'var(--warning-8) 1px solid',\n },\n inner: {\n backgroundColor: 'var(--white-1)',\n },\n },\n },\n danger: {\n default: {\n outer: {\n backgroundColor: 'var(--warning-11)',\n backgroundImage:\n 'linear-gradient(317.51deg, var(--warning-11) 0%, var(--warning-8) 100%)',\n borderColor: 'var(--warning-8)',\n border: 'var(--warning-8) 1px solid',\n },\n inner: {\n backgroundColor: 'var(--white-1)',\n },\n },\n loading: {\n outer: {\n backgroundColor: 'var(--warning-8)',\n backgroundImage:\n 'linear-gradient(317.51deg, var(--warning-8) 0%, var(--warning-7) 100%)',\n borderColor: 'var(--warning-8)',\n border: 'var(--warning-8) 1px solid',\n },\n },\n disabled: {\n outer: {\n backgroundColor: 'var(--warning-7)',\n backgroundImage:\n 'linear-gradient(317.51deg, var(--warning-7) 0%, var(--caution-6) 100%)',\n borderColor: 'var(--warning-6)',\n border: 'var(--warning-6) 1px solid',\n },\n inner: {\n backgroundColor: 'var(--white-1)',\n },\n },\n },\n locked: {\n default: {\n outer: {\n backgroundColor: 'var(--grey-1) ',\n backgroundImage: 'linear-gradient(180.00deg, var(--grey-1) 0%, var(--grey-1) 100%)',\n borderColor: 'var(--grey-a8)',\n border: 'var(--grey-a8) 1px solid',\n },\n inner: {\n backgroundColor: 'var(--grey-8)',\n },\n },\n },\n },\n checkbox: {\n unchecked: {\n disabled: {\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--grey-6)',\n border: 'var(--grey-6) 2px solid',\n },\n default: {\n borderColor: 'var(--grey-9)',\n border: 'var(--grey-9) 2px solid',\n },\n hover: {\n borderColor: 'var(--primary-8)',\n border: 'var(--primary-8) 2px solid',\n },\n },\n checked: {\n disabled: {\n boxShadow: 'inset 0px 1px 5px 0px var(--grey-a1)',\n backgroundColor: 'var(--grey-6)',\n },\n default: {\n boxShadow: 'inset 0px 1px 5px 0px var(--grey-a1)',\n backgroundColor: 'var(--primary-8)',\n },\n hover: {\n boxShadow: 'inset 0px 1px 5px 0px var(--grey-a1)',\n backgroundColor: 'var(--primary-8)',\n },\n },\n indeterminate: {\n hover: {\n boxShadow: 'inset 0px 1px 5px 0px var(--grey-a1)',\n backgroundColor: 'var(--primary-6)',\n },\n default: {\n boxShadow: 'inset 0px 1px 5px 0px var(--grey-a1)',\n backgroundColor: 'var(--primary-6)',\n },\n },\n },\n },\n indicators: {\n spinner: {\n danger: {\n base: {\n borderColor: 'var(--warning-8)',\n border: 'var(--warning-8) 3px solid',\n },\n top: {\n borderColor: 'var(--white-1)',\n border: 'var(--white-1) 3px solid',\n },\n },\n secondary: {\n top: {\n borderColor: 'var(--white-1)',\n border: 'var(--white-1) 3px solid',\n },\n base: {\n borderColor: 'var(--grey-8)',\n border: 'var(--grey-8) 3px solid',\n },\n },\n primary: {\n top: {\n borderColor: 'var(--white-1)',\n border: 'var(--white-1) 3px solid',\n },\n base: {\n borderColor: 'var(--primary-6)',\n border: 'var(--primary-6) 3px solid',\n },\n },\n simple: {\n top: {\n borderColor: 'var(--white-1)',\n border: 'var(--white-1) 3px solid',\n },\n base: {\n borderColor: 'var(--grey-a8)',\n border: 'var(--grey-a8) 3px solid',\n },\n },\n },\n },\n filters: {\n dropdownContainer: {\n background: {\n boxShadow: '0px 5px 25px 0px var(--primary-a1)',\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--grey-6)',\n border: 'var(--grey-6) 1px solid',\n },\n topBorder: {\n backgroundColor: 'var(--primary-7)',\n },\n },\n filterButton: {\n default: {\n boxShadow: '0px 4px 9px 0px var(--primary-a1)',\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--grey-7)',\n border: 'var(--grey-7) 1px solid',\n textColor: 'var(--grey-11)',\n },\n active: {\n boxShadow: '0px 4px 9px 0px var(--primary-a1)',\n backgroundColor: 'var(--primary-7)',\n borderColor: 'var(--primary-7)',\n border: 'var(--primary-7) 1px solid',\n textColor: 'var(--white-1)',\n },\n hover: {\n boxShadow: '0px 4px 9px 0px var(--primary-a1)',\n backgroundColor: 'var(--primary-7)',\n borderColor: 'var(--primary-7)',\n border: 'var(--primary-7) 1px solid',\n textColor: 'var(--white-1)',\n },\n },\n searchInput: {\n default: {\n boxShadow: '0px 4px 9px 0px var(--primary-a2)',\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--grey-7)',\n border: 'var(--grey-7) 1px solid',\n },\n focused: {\n boxShadow: '0px 4px 9px 0px var(--primary-a2)',\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--primary-6)',\n border: 'var(--primary-6) 1px solid',\n },\n },\n },\n tables: {\n loadingOverlay: {\n backgroundColor: 'var(--grey-2)',\n backgroundImage: 'linear-gradient(180.00deg, var(--grey-2) 0%, var(--grey-3) 100%)',\n },\n rows: {\n divider: {\n backgroundColor: colors.divider,\n },\n },\n header: {\n groupLine: {\n backgroundColor: colors.divider,\n },\n divider: {\n backgroundColor: colors.divider,\n },\n sortable: {\n hover: {\n backgroundColor: 'var(--grey-4)',\n },\n default: {\n backgroundColor: 'var(--grey-2)',\n },\n },\n },\n },\n general: {\n divider: {\n backgroundColor: colors.divider,\n },\n },\n feedbackBar: {\n neutral: {\n backgroundColor: colors.feedback.neutral,\n },\n error: {\n backgroundColor: colors.feedback.error,\n },\n info: {\n backgroundColor: colors.feedback.info,\n },\n success: {\n backgroundColor: colors.feedback.success,\n },\n warning: {\n backgroundColor: colors.feedback.warning,\n },\n },\n filterButton: {\n active: {\n boxShadow: '0px 4px 9px 0px var(--primary-a1)',\n backgroundColor: 'var(--grey-1)',\n borderColor: 'var(--primary-7)',\n border: 'var(--primary-7) 1px solid',\n },\n },\n};\n","import type { Properties as CSSProperties } from 'csstype';\nimport type { TypeCellAlignment } from '../../Tables';\n\ntype TypographyStyle = Pick<\n CSSProperties,\n | 'textAlign'\n | 'fontStyle'\n | 'fontSize'\n | 'fontWeight'\n | 'lineHeight'\n | 'letterSpacing'\n | 'textDecoration'\n | 'textTransform'\n | 'color'\n>;\n\ntype AlignmentStyles = {\n [K in TypeCellAlignment]: TypographyStyle;\n};\n\ntype ColumnDataStyles = {\n firstColumn: TypographyStyle;\n lowImportance: AlignmentStyles;\n normalImportance: AlignmentStyles;\n highImportance: AlignmentStyles;\n unit: TypographyStyle;\n};\n\ntype HeaderStyles = {\n [K in TypeCellAlignment]: TypographyStyle;\n};\n\ntype InputStyles = {\n label?: TypographyStyle;\n placeholder?: { [key: string]: TypographyStyle };\n value?: { [key: string]: TypographyStyle };\n};\n\ntype SubOptionStyles = {\n label?: TypographyStyle;\n value?: TypographyStyle;\n};\n\ntype DatepickerStyles = {\n metaHeader?: { [key: string]: TypographyStyle };\n calendar?: { [key: string]: TypographyStyle };\n monthLink?: { [key: string]: TypographyStyle };\n focusedMonth?: TypographyStyle;\n focusedYear?: TypographyStyle;\n};\n\ntype FormTypography = {\n label?: { [key: string]: TypographyStyle };\n tip?: TypographyStyle;\n button?: { [key: string]: { [key: string]: TypographyStyle } };\n input?: InputStyles;\n labelInformation?: TypographyStyle;\n select?: { [key: string]: TypographyStyle };\n feedback?: { message?: TypographyStyle };\n};\n\ntype ContentTypography = {\n 'section-H2'?: TypographyStyle;\n sectionH3?: TypographyStyle;\n actionParagraph?: TypographyStyle;\n hyperlink?: { [key: string]: TypographyStyle };\n};\n\ntype FilterTypography = {\n datepicker?: DatepickerStyles;\n value?: TypographyStyle;\n subOption?: SubOptionStyles;\n presetAction?: TypographyStyle;\n filterButton?: { [key: string]: TypographyStyle };\n searchInput?: { [key: string]: TypographyStyle };\n};\n\ntype TableTypography = {\n columnData: ColumnDataStyles;\n header: HeaderStyles;\n subHeader: HeaderStyles;\n};\n\ntype MetaTypography = {\n tagList?: {\n emptyStates?: { [key: string]: TypographyStyle };\n item?: { [key: string]: TypographyStyle };\n };\n};\n\nexport const typography: {\n pageHeader?: { [key: string]: TypographyStyle };\n form?: FormTypography;\n content?: ContentTypography;\n feedbackBar?: { message?: TypographyStyle };\n searchBar?: { [key: string]: TypographyStyle };\n meta?: MetaTypography;\n table: TableTypography;\n filters?: FilterTypography;\n tables: { [key: string]: TypographyStyle };\n} = {\n // DEPRECATED: pageHeader\n pageHeader: {\n introduction: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 300,\n lineHeight: '25px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n areaTitle: {\n textAlign: 'left',\n fontSize: '12px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n mainTitle: {\n textAlign: 'left',\n fontSize: '26px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n },\n form: {\n label: {\n meta: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 300,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n default: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n disabled: {\n textAlign: 'left',\n fontSize: '16px',\n fontWeight: 300,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n failure: {\n textAlign: 'left',\n fontSize: '16px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--warning-8)',\n },\n 'meta(Selected)': {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--primary-8)',\n },\n },\n tip: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '25px',\n textDecoration: 'none',\n color: 'var(--primary-7)',\n },\n button: {\n secondary: {\n normal: {\n textAlign: 'center',\n fontSize: '16px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n large: {\n textAlign: 'center',\n fontSize: '20px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n small: {\n textAlign: 'center',\n fontSize: '14px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n xsmall: {\n textAlign: 'center',\n fontSize: '12px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n },\n primary: {\n large: {\n textAlign: 'center',\n fontSize: '20px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n normal: {\n textAlign: 'center',\n fontSize: '16px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n small: {\n textAlign: 'center',\n fontSize: '14px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n xsmall: {\n textAlign: 'center',\n fontSize: '12px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n },\n danger: {\n large: {\n textAlign: 'center',\n fontSize: '20px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n normal: {\n textAlign: 'center',\n fontSize: '16px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n small: {\n textAlign: 'center',\n fontSize: '14px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n xsmall: {\n textAlign: 'center',\n fontSize: '12px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n },\n },\n input: {\n label: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n placeholder: {\n normal: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '16px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n compact: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '15px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n },\n value: {\n normal: {\n textAlign: 'left',\n fontSize: '16px',\n fontWeight: 500,\n lineHeight: '25px',\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n compact: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '15px',\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n },\n },\n labelInformation: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 300,\n lineHeight: '25px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n select: {\n option: {\n textAlign: 'left',\n fontSize: '16px',\n fontWeight: 500,\n lineHeight: '15px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n selectedValue: {\n textAlign: 'left',\n fontSize: '16px',\n fontWeight: 500,\n lineHeight: '15px',\n textDecoration: 'none',\n color: 'var(--black-11)',\n },\n 'option(Hover)': {\n textAlign: 'left',\n fontSize: '16px',\n fontWeight: 500,\n lineHeight: '15px',\n textDecoration: 'none',\n color: 'var(--primary-11)',\n },\n },\n feedback: {\n message: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '20px',\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n },\n },\n content: {\n 'section-H2': {\n textAlign: 'left',\n fontSize: '20px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n sectionH3: {\n textAlign: 'left',\n fontSize: '16px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n actionParagraph: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 300,\n lineHeight: '25px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n hyperlink: {\n hover: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '25px',\n textDecoration: 'none',\n color: 'var(--primary-8)',\n },\n base: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '25px',\n textDecoration: 'none',\n color: 'var(--primary-9)',\n },\n },\n },\n feedbackBar: {\n message: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 400,\n lineHeight: '15px',\n letterSpacing: '-0.2px',\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n },\n searchBar: {\n placeholder: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 700,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n value: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n },\n meta: {\n tagList: {\n emptyStates: {\n normal: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n small: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '12px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n },\n item: {\n normal: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n small: {\n textAlign: 'left',\n fontSize: '12px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n },\n },\n },\n table: {\n columnData: {\n normalImportance: {\n right: {\n textAlign: 'right',\n fontSize: '14px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-a11)',\n },\n left: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-a11)',\n },\n center: {\n textAlign: 'center',\n fontSize: '14px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-a11)',\n },\n },\n highImportance: {\n right: {\n textAlign: 'right',\n fontSize: '14px',\n fontWeight: 900,\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n center: {\n textAlign: 'center',\n fontSize: '14px',\n fontWeight: 900,\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n left: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 900,\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n },\n firstColumn: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n lowImportance: {\n right: {\n textAlign: 'right',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-a11)',\n },\n center: {\n textAlign: 'center',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-a11)',\n },\n left: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '14px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-a11)',\n },\n },\n unit: {\n textAlign: 'right',\n fontStyle: 'italic',\n fontSize: '12px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-a11)',\n },\n },\n header: {\n center: {\n textAlign: 'center',\n fontSize: '14px',\n fontWeight: 700,\n letterSpacing: '0.4px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n left: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 700,\n letterSpacing: '0.4px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n right: {\n textAlign: 'right',\n fontSize: '14px',\n fontWeight: 700,\n letterSpacing: '0.4px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n },\n subHeader: {\n center: {\n textAlign: 'center',\n fontSize: '14px',\n fontWeight: 700,\n letterSpacing: '0.4px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n left: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 700,\n letterSpacing: '0.4px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n right: {\n textAlign: 'right',\n fontSize: '14px',\n fontWeight: 700,\n letterSpacing: '0.4px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n },\n },\n filters: {\n datepicker: {\n metaHeader: {\n default: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 300,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n active: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 600,\n textDecoration: 'none',\n color: 'var(--primary-8)',\n },\n },\n calendar: {\n active: {\n textAlign: 'center',\n fontSize: '14px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n otherMonth: {\n textAlign: 'center',\n fontSize: '14px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--grey-a8)',\n },\n default: {\n textAlign: 'center',\n fontSize: '14px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n header: {\n textAlign: 'center',\n fontSize: '12px',\n fontWeight: 700,\n textDecoration: 'none',\n color: 'var(--grey-a12)',\n },\n },\n monthLink: {\n default: {\n textAlign: 'center',\n fontSize: '12px',\n fontWeight: 700,\n lineHeight: '20px',\n textTransform: 'uppercase',\n letterSpacing: '0.4px',\n textDecoration: 'none',\n color: 'var(--grey-9)',\n },\n hover: {\n textAlign: 'center',\n fontSize: '12px',\n fontWeight: 700,\n lineHeight: '20px',\n textTransform: 'uppercase',\n letterSpacing: '0.4px',\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n },\n focusedMonth: {\n textAlign: 'center',\n fontSize: '20px',\n fontWeight: 400,\n lineHeight: '20px',\n letterSpacing: '0.5px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n focusedYear: {\n textAlign: 'center',\n fontSize: '10px',\n fontWeight: 700,\n lineHeight: '20px',\n textTransform: 'uppercase',\n letterSpacing: '0.3333333px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n },\n value: {\n textAlign: 'left',\n fontSize: '14px',\n fontWeight: 500,\n letterSpacing: '0.2px',\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n subOption: {\n label: {\n textAlign: 'left',\n fontSize: '12px',\n fontWeight: 300,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n value: {\n textAlign: 'left',\n fontSize: '13px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-a12)',\n },\n },\n presetAction: {\n textAlign: 'left',\n fontSize: '13px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n filterButton: {\n default: {\n textAlign: 'left',\n fontSize: '12px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n active: {\n textAlign: 'left',\n fontSize: '12px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n hover: {\n textAlign: 'left',\n fontSize: '12px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--white-1)',\n },\n },\n searchInput: {\n placeholder: {\n textAlign: 'left',\n fontStyle: 'italic',\n fontSize: '12px',\n fontWeight: 500,\n textDecoration: 'none',\n color: 'var(--grey-11)',\n },\n value: {\n textAlign: 'left',\n fontSize: '12px',\n fontWeight: 400,\n textDecoration: 'none',\n color: 'var(--grey-12)',\n },\n },\n },\n tables: {\n groupName: {\n textAlign: 'left',\n fontSize: '12px',\n fontWeight: 400,\n letterSpacing: '0.3px',\n textDecoration: 'none',\n color: 'var(--grey-a11)',\n },\n },\n};\n","import { animation, deviceMediaQuery, deviceSize, dimensions, fontFamily } from './common';\nimport { colors } from './legacy/colors';\nimport { custom } from './legacy/custom';\nimport { styles } from './legacy/styles';\nimport { typography } from './legacy/typography';\nexport default {\n fontFamily,\n dimensions,\n typography,\n colors,\n styles,\n animation,\n custom,\n deviceSize,\n deviceMediaQuery,\n};\n","import { css } from 'styled-components';\n\nexport const animationVariables = css`\n :root {\n\n --easing-primary-in-out: cubic-bezier(0.76, 0, 0.24, 1);\n --easing-primary-in: cubic-bezier(0.5, 0, 0.75, 0);\n --easing-primary-out: cubic-bezier(0.25, 1, 0.5, 1);\n \n --speed-faster: 0.085s;\n --speed-fast: 0.175s;\n --speed-normal: 0.35s;\n --speed-slow: 0.7s;\n --speed-slower: 1.4s;\n --speed-slowest: 2.8s;\n \n }\n`;\n","import { css } from 'styled-components';\n\nexport const colorVariables = css`\n .light-theme {\n /* --- Light Mode --- */\n --primary-1: #fcfdff;\n --primary-2: #f5f9ff;\n --primary-3: #eaf3ff;\n --primary-4: #dbecff;\n --primary-5: #c9e2ff;\n --primary-6: #b5d5ff;\n --primary-7: #9bc3fa;\n --primary-8: #76aaf4;\n --primary-9: #80b5ff;\n --primary-10: #75aaf3;\n --primary-11: #3c6eb3;\n --primary-12: #0b3162;\n --primary-a1: #0055ff03;\n --primary-a2: #0066ff0a;\n --primary-a3: #006eff15;\n --primary-a4: #0079ff24;\n --primary-a5: #0077ff36;\n --primary-a6: #016fff4a;\n --primary-a7: #0066f364;\n --primary-a8: #0061eb89;\n --primary-a9: #006bff7f;\n --primary-a10: #0062e98a;\n --primary-a11: #00429cc3;\n --primary-a12: #00285bf4;\n\n --secondary-1: #fafefd;\n --secondary-2: #f1fcfa;\n --secondary-3: #e7f9f5;\n --secondary-4: #d9f3ee;\n --secondary-5: #c7ebe5;\n --secondary-6: #afdfd7;\n --secondary-7: #8dcec3;\n --secondary-8: #53b9ab;\n --secondary-9: #12a594;\n --secondary-10: #0e9888;\n --secondary-11: #067a6f;\n --secondary-12: #10302b;\n --secondary-a1: #05cd9b05;\n --secondary-a2: #01c8a40e;\n --secondary-a3: #02c09718;\n --secondary-a4: #02af8c26;\n --secondary-a5: #00a48938;\n --secondary-a6: #00998050;\n --secondary-a7: #01927a72;\n --secondary-a8: #009783ac;\n --secondary-a9: #009e8ced;\n --secondary-a10: #009281f1;\n --secondary-a11: #00776bf9;\n --secondary-a12: #00221def;\n\n --grey-1: #fcfcfd;\n --grey-2: #f9f9fb;\n --grey-3: #f0f0f3;\n --grey-4: #e8e8ec;\n --grey-5: #e0e1e6;\n --grey-6: #d9d9e0e0;\n --grey-7: #cdced6;\n --grey-8: #b9bbc6;\n --grey-9: #8b8d98;\n --grey-10: #80838d;\n --grey-11: #717989;\n --grey-12: #5a6671;\n --grey-a1: #00005503;\n --grey-a2: #00005506;\n --grey-a3: #00003310;\n --grey-a4: #00002d17;\n --grey-a5: #0009321f;\n --grey-a6: #00002f26;\n --grey-a7: #00062e32;\n --grey-a8: #00083046;\n --grey-a9: #00051d74;\n --grey-a10: #00071b7f;\n --grey-a11: #020b1d9f;\n --grey-a12: #020b1de3;\n\n --green-1: #fbfefc;\n --green-2: #f2fcf5;\n --green-3: #e9f9ee;\n --green-4: #ddf3e4;\n --green-5: #ccebd7;\n --green-6: #b4dfc4;\n --green-7: #92ceac;\n --green-8: #5bb98c;\n --green-9: #30a46c;\n --green-10: #299764;\n --green-11: #18794e;\n --green-12: #153226;\n --green-a1: #05c04304;\n --green-a2: #00c43b0d;\n --green-a3: #02ba3c16;\n --green-a4: #01a63522;\n --green-a5: #009b3633;\n --green-a6: #0193364b;\n --green-a7: #008c3d6d;\n --green-a8: #00934ca4;\n --green-a9: #008f4acf;\n --green-a10: #008346d6;\n --green-a11: #006b3be7;\n --green-a12: #002012ea;\n\n --orange-1: #fefcfb;\n --orange-2: #fef8f4;\n --orange-3: #fff1e7;\n --orange-4: #ffe8d7;\n --orange-5: #ffdcc3;\n --orange-6: #ffcca7;\n --orange-7: #ffb381;\n --orange-8: #fa934e;\n --orange-9: #f76808;\n --orange-10: #ed5f00;\n --orange-11: #bd4b00;\n --orange-12: #451e11;\n --orange-a1: #c0430504;\n --orange-a2: #e860050b;\n --orange-a3: #ff6c0318;\n --orange-a4: #ff6e0028;\n --orange-a5: #ff6b013c;\n --orange-a6: #ff6b0158;\n --orange-a7: #ff66017e;\n --orange-a8: #f86300b1;\n --orange-a9: #f76300f7;\n --orange-a10: #ed5b00fa;\n --orange-a11: #bc4800fa;\n --orange-a12: #380e00ee;\n\n --red-1: #fefcfc;\n --red-2: #fdf8f8;\n --red-3: #faedec;\n --red-4: #fddfdd;\n --red-5: #f8d2d0;\n --red-6: #f1c3c1;\n --red-7: #e6b1ae;\n --red-8: #da9996;\n --red-9: #d16565;\n --red-10: #c45859;\n --red-11: #b64d4e;\n --red-12: #592525;\n --red-a1: #aa000003;\n --red-a2: #b7000007;\n --red-a3: #bc0e0013;\n --red-a4: #f00f0022;\n --red-a5: #da0b002f;\n --red-a6: #c609003e;\n --red-a7: #b10a0051;\n --red-a8: #a6080069;\n --red-a9: #b300009a;\n --red-a10: #a50002a7;\n --red-a11: #970002b2;\n --red-a12: #3d0000da;\n\n }\n\n .dark-theme {\n /* --- Dark mode --- */\n --primary-1: #000;\n --primary-2: #09121e;\n --primary-3: #0e2341;\n --primary-4: #0c2f5d;\n --primary-5: #153c70;\n --primary-6: #214a81;\n --primary-7: #2d5a97;\n --primary-8: #366bb5;\n --primary-9: #80b5ff;\n --primary-10: #75aaf3;\n --primary-11: #81b7ff;\n --primary-12: #cee3ff;\n --primary-a1: #0000;\n --primary-a2: #4d99ff1e;\n --primary-a3: #378aff41;\n --primary-a4: #2181ff5d;\n --primary-a5: #3089ff70;\n --primary-a6: #4293ff81;\n --primary-a7: #4c98ff97;\n --primary-a8: #4c97ffb5;\n --primary-a9: #80b5ff;\n --primary-a10: #7bb2fff3;\n --primary-a11: #81b7ff;\n --primary-a12: #cee3ff;\n\n --secondary-1: #091915;\n --secondary-2: #04201b;\n --secondary-3: #062923;\n --secondary-4: #07312b;\n --secondary-5: #083932;\n --secondary-6: #09443c;\n --secondary-7: #0b544a;\n --secondary-8: #0c6d62;\n --secondary-9: #12a594;\n --secondary-10: #10b3a3;\n --secondary-11: #0ac5b3;\n --secondary-12: #e1faf4;\n --secondary-a1: #0000;\n --secondary-a2: #00fbd508;\n --secondary-a3: #00fddc12;\n --secondary-a4: #00fde81b;\n --secondary-a5: #02fee424;\n --secondary-a6: #09ffe630;\n --secondary-a7: #11ffe342;\n --secondary-a8: #11ffe75d;\n --secondary-a9: #18ffe49b;\n --secondary-a10: #13ffe7ab;\n --secondary-a11: #0affe7bf;\n --secondary-a12: #e6fff9fa;\n\n --grey-1: #111113;\n --grey-2: #18191b;\n --grey-3: #212225;\n --grey-4: #272a2d;\n --grey-5: #2e3135;\n --grey-6: #363a3f;\n --grey-7: #43484e;\n --grey-8: #5a6169;\n --grey-9: #696e77;\n --grey-10: #777b84;\n --grey-11: #9a9fa7;\n --grey-12: #d5d8dc;\n --grey-a1: #0000;\n --grey-a2: #d8f4f609;\n --grey-a3: #ddeaf814;\n --grey-a4: #d3edf81d;\n --grey-a5: #d9edfe25;\n --grey-a6: #d6ebfd30;\n --grey-a7: #d9edff40;\n --grey-a8: #d9edff5d;\n --grey-a9: #dfebfd6d;\n --grey-a10: #e5edfd7b;\n --grey-a11: #f1f7feb5;\n --grey-a12: #fcfdffef;\n\n --green-1: #0d1912;\n --green-2: #0c1f17;\n --green-3: #0f291e;\n --green-4: #113123;\n --green-5: #133929;\n --green-6: #164430;\n --green-7: #1b543a;\n --green-8: #236e4a;\n --green-9: #30a46c;\n --green-10: #3cb179;\n --green-11: #4cc38a;\n --green-12: #e5fbeb;\n --green-a1: #0000;\n --green-a2: #00f7ca07;\n --green-a3: #2afebe12;\n --green-a4: #33feb31b;\n --green-a5: #38feb524;\n --green-a6: #3dffb130;\n --green-a7: #43ffad42;\n --green-a8: #49ffaa5e;\n --green-a9: #47ffa69a;\n --green-a10: #54ffafa9;\n --green-a11: #62ffb3bd;\n --green-a12: #eafff0fa;\n\n --orange-1: #1f1206;\n --orange-2: #2b1400;\n --orange-3: #391a03;\n --orange-4: #441f04;\n --orange-5: #4f2305;\n --orange-6: #5f2a06;\n --orange-7: #763205;\n --orange-8: #943e00;\n --orange-9: #f76808;\n --orange-10: #ff802b;\n --orange-11: #ff8b3e;\n --orange-12: #feeadd;\n --orange-a1: #0000;\n --orange-a2: #fd37000e;\n --orange-a3: #fd54001e;\n --orange-a4: #fe61002a;\n --orange-a5: #fe620137;\n --orange-a6: #ff650649;\n --orange-a7: #ff640363;\n --orange-a8: #fe660085;\n --orange-a9: #ff6b08f6;\n --orange-a10: #ff842cfa;\n --orange-a11: #ff8c3ffa;\n --orange-a12: #ffeee1fa;\n\n --red-1: #150f0f;\n --red-2: #1e1413;\n --red-3: #361717;\n --red-4: #49191a;\n --red-5: #582122;\n --red-6: #692e2e;\n --red-7: #813e3e;\n --red-8: #a75252;\n --red-9: #d16565;\n --red-10: #c35959;\n --red-11: #ff9795;\n --red-12: #f9d5d3;\n --red-a1: #de000005;\n --red-a2: #fe48360e;\n --red-a3: #fd383828;\n --red-a4: #ff33383c;\n --red-a5: #fd464a4d;\n --red-a6: #fd5f5f5f;\n --red-a7: #ff717178;\n --red-a8: #ff7878a1;\n --red-a9: #ff7979ce;\n --red-a10: #ff7272bf;\n --red-a11: #ff9795ef;\n --red-a12: #ffdad8f9;\n\n }\n\n .light-theme, .dark-theme {\n\n /* --- Constant Colors --- */\n // The should not change between light and dark.\n --white: #FFFFFF;\n --white-1: var(--white);\n --white-2: var(--white);\n --white-3: var(--white);\n --white-4: var(--white);\n --white-5: var(--white);\n --white-6: var(--white);\n --white-7: var(--white);\n --white-8: var(--white);\n --white-9: var(--white);\n --white-10: var(--white);\n --white-11: var(--white);\n --white-12: var(--white);\n\n --white-a1: #fff0;\n --white-a2: #ffffff03;\n --white-a3: #ffffff09;\n --white-a4: #ffffff0e;\n --white-a5: #ffffff16;\n --white-a6: #ffffff20;\n --white-a7: #ffffff2d;\n --white-a8: #ffffff3f;\n --white-a9: #ffffff62;\n --white-a10: #ffffff72;\n --white-a11: #ffffff97;\n --white-a12: #ffffffeb;\n\n --black: #000;\n --black-1: var(--black);\n --black-2: var(--black);\n --black-3: var(--black);\n --black-4: var(--black);\n --black-5: var(--black);\n --black-6: var(--black);\n --black-7: var(--black);\n --black-8: var(--black);\n --black-9: var(--black);\n --black-10: var(--black);\n --black-11: var(--black);\n --black-12: var(--black);\n\n --black-a1: #00000003;\n --black-a2: #00000007;\n --black-a3: #0000000c;\n --black-a4: #00000012;\n --black-a5: #00000017;\n --black-a6: #0000001d;\n --black-a7: #00000024;\n --black-a8: #00000038;\n --black-a9: #00000070;\n --black-a10: #0000007a;\n --black-a11: #00000090;\n --black-a12: #000000e8;\n\n }\n\n\n /** --- Color Aliases --- */\n // Used for state based variable names that can be detached later from base colors if needed.\n .light-theme, .dark-theme {\n\n --info-1: var(--secondary-1);\n --info-2: var(--secondary-2);\n --info-3: var(--secondary-3);\n --info-4: var(--secondary-4);\n --info-5: var(--secondary-5);\n --info-6: var(--secondary-6);\n --info-7: var(--secondary-7);\n --info-8: var(--secondary-8);\n --info-9: var(--secondary-9);\n --info-10: var(--secondary-10);\n --info-11: var(--secondary-11);\n --info-12: var(--secondary-12);\n --info-a1: var(--secondary-a1);\n --info-a2: var(--secondary-a2);\n --info-a3: var(--secondary-a3);\n --info-a4: var(--secondary-a4);\n --info-a5: var(--secondary-a5);\n --info-a6: var(--secondary-a6);\n --info-a7: var(--secondary-a7);\n --info-a8: var(--secondary-a8);\n --info-a9: var(--secondary-a9);\n --info-a10: var(--secondary-a10);\n --info-a11: var(--secondary-a11);\n --info-a12: var(--secondary-a12);\n\n --success-1: var(--green-1);\n --success-2: var(--green-2);\n --success-3: var(--green-3);\n --success-4: var(--green-4);\n --success-5: var(--green-5);\n --success-6: var(--green-6);\n --success-7: var(--green-7);\n --success-8: var(--green-8);\n --success-9: var(--green-9);\n --success-10: var(--green-10);\n --success-11: var(--green-11);\n --success-12: var(--green-12);\n --success-a1: var(--green-a1);\n --success-a2: var(--green-a2);\n --success-a3: var(--green-a3);\n --success-a4: var(--green-a4);\n --success-a5: var(--green-a5);\n --success-a6: var(--green-a6);\n --success-a7: var(--green-a7);\n --success-a8: var(--green-a8);\n --success-a9: var(--green-a9);\n --success-a10: var(--green-a10);\n --success-a11: var(--green-a11);\n --success-a12: var(--green-a12);\n\n --caution-1: var(--orange-1);\n --caution-2: var(--orange-2);\n --caution-3: var(--orange-3);\n --caution-4: var(--orange-4);\n --caution-5: var(--orange-5);\n --caution-6: var(--orange-6);\n --caution-7: var(--orange-7);\n --caution-8: var(--orange-8);\n --caution-9: var(--orange-9);\n --caution-10: var(--orange-10);\n --caution-11: var(--orange-11);\n --caution-12: var(--orange-12);\n --caution-a1: var(--orange-a1);\n --caution-a2: var(--orange-a2);\n --caution-a3: var(--orange-a3);\n --caution-a4: var(--orange-a4);\n --caution-a5: var(--orange-a5);\n --caution-a6: var(--orange-a6);\n --caution-a7: var(--orange-a7);\n --caution-a8: var(--orange-a8);\n --caution-a9: var(--orange-a9);\n --caution-a10: var(--orange-a10);\n --caution-a11: var(--orange-a11);\n --caution-a12: var(--orange-a12);\n\n --warning-1: var(--red-1);\n --warning-2: var(--red-2);\n --warning-3: var(--red-3);\n --warning-4: var(--red-4);\n --warning-5: var(--red-5);\n --warning-6: var(--red-6);\n --warning-7: var(--red-7);\n --warning-8: var(--red-8);\n --warning-9: var(--red-9);\n --warning-10: var(--red-10);\n --warning-11: var(--red-11);\n --warning-12: var(--red-12);\n --warning-a1: var(--red-a1);\n --warning-a2: var(--red-a2);\n --warning-a3: var(--red-a3);\n --warning-a4: var(--red-a4);\n --warning-a5: var(--red-a5);\n --warning-a6: var(--red-a6);\n --warning-a7: var(--red-a7);\n --warning-a8: var(--red-a8);\n --warning-a9: var(--red-a9);\n --warning-a10: var(--red-a10);\n --warning-a11: var(--red-a11);\n --warning-a12: var(--red-a12);\n\n }\n\n .light-theme {\n --shadow-primary-default: var(--grey-a4);\n --shadow-primary-elevate: var(--primary-a5);\n\n --shadow-secondary-default: var(--grey-3);\n --shadow-secondary-elevate: var(--grey-a4);\n\n --shadow-warning-default: var(--grey-a4);\n --shadow-warning-elevate: var(--warning-a5);\n }\n\n .dark-theme {\n --shadow-primary-default: var(--primary-a2);\n --shadow-primary-elevate: var(--primary-a2);\n\n --shadow-secondary-default: var(--black-a8);\n --shadow-secondary-elevate: var(--primary-a4);\n\n --shadow-warning-default: var(--grey-a3);\n --shadow-warning-elevate: var(--warning-a7);\n }\n\n /* --- Component Aliases --- */\n // For specific component uses within the UI Kit.\n .light-theme, .dark-theme {\n /* feedback */\n --error: var(--warning-8);\n --info: var(--primary-7);\n --neutral: var(--grey-9);\n --success: var(--success-8);\n --warning: var(--caution-8);\n\n /* tooltip */\n --tooltip-warning: var(--warning-a9);\n --tooltip-warning-arrow: var(--warning-9);\n --tooltip-warning-border: var(--warning-a7);\n\n --tooltip-success: var(--success-9);\n --tooltip-success-arrow: var(--success-8);\n --tooltip-success-border: var(--success-a7);\n\n --tooltip-info: var(--primary-8);\n --tooltip-info-arrow: var(--primary-8);\n --tooltip-info-border: var(--primary-a8);\n\n --tooltip-neutral: var(--grey-8);\n --tooltip-neutral-arrow: var(--grey-7);\n --tooltip-neutral-border: var(--grey-7);\n\n /* icons */\n --inverse: var(--white-1);\n --mono: var(--grey-12);\n --dimmed: var(--grey-11);\n --subtle: var(--grey-10);\n --primary: var(--primary-9);\n --danger: var(--warning-9);\n\n /* Spinner */\n --spinner-primary-base: var(--primary-6);\n --spinner-primary-top: var(--white-1);\n\n --spinner-secondary-base: var(--grey-8);\n --spinner-secondary-top: var(--white-1);\n\n --spinner-simple-base: var(--grey-a8);\n --spinner-simple-top: var(--white-1);\n\n --spinner-warning-base: var(--warning-8);\n --spinner-warning-top: var(--white-1);\n\n /* Global */\n --main-background-gradient: radial-gradient(200% 200% at 50% -10%, var(--grey-2) 0%, var(--grey-3) 100%);\n --main-background-color: var(--grey-3);\n\n --primary-gradient-start: var(--primary-9);\n --primary-gradient-end: var(--primary-10);\n --primary-gradient: linear-gradient(135deg, var(--primary-gradient-start), var(--primary-gradient-end));\n\n --secondary-gradient-start: var(--grey-5);\n --secondary-gradient-end: var(--grey-6);\n --secondary-gradient: linear-gradient(135deg, var(--secondary-gradient-start), var(--secondary-gradient-end));\n\n --warning-gradient-start: var(--warning-9);\n --warning-gradient-end: var(--warning-10);\n --warning-gradient: linear-gradient(135deg, var(--warning-gradient-start), var(--warning-gradient-end));\n\n --dividing-line: var(--grey-4);\n --global-element-background: var(--grey-2);\n --global-menu-icon-background-default: transparent;\n --global-menu-icon-background-hover: var(--primary-8);\n --global-menu-icon-background-active: var(--primary-9);\n\n /* Inputs */\n --input-color-default: var(--grey-12);\n --input-color-disabled: var(--grey-10);\n --input-color-placeholder: var(--grey-10);\n --input-color-unit: var(--grey-10);\n\n --input-default-background-color: var(--grey-1);\n --input-default-border-color: var(--grey-6);\n --input-default-shadow-color: transparent;\n\n --input-default-focused-background-color: var(--grey-1);\n --input-default-focused-border-color: var(--grey-6);\n --input-default-focused-shadow-color: var(--grey-3);\n\n --input-disabled-background-color: var(--grey-3);\n --input-disabled-border-color: var(--grey-6);\n --input-disabled-shadow-color: transparent;\n\n --input-required-background-color: var(--grey-1);\n --input-required-border-color: var(--primary-6);\n --input-required-shadow-color: transparent;\n\n --input-required-focused-background-color: var(--grey-1);\n --input-required-focused-border-color: var(--primary-6);\n --input-required-focused-shadow-color: var(--grey-3);\n\n --input-valid-background-color: var(--grey-1);\n --input-valid-border-color: var(--success-9);\n --input-valid-shadow-color: transparent;\n\n --input-valid-focused-background-color: var(--grey-1);\n --input-valid-focused-border-color: var(--success-9);\n --input-valid-focused-shadow-color: var(--grey-3);\n\n --input-invalid-background-color: var(--grey-1);\n --input-invalid-border-color: var(--warning-9);\n --input-invalid-shadow-color: transparent;\n\n --input-invalid-focused-background-color: var(--grey-1);\n --input-invalid-focused-border-color: var(--warning-9);\n --input-invalid-focused-shadow-color: var(--grey-3);\n\n --input-processing-background-color: var(--grey-3)2;\n --input-processing-border-color: var(--primary-10);\n --input-processing-shadow-color: transparent;\n\n --input-processing-focused-background-color: var(--grey-2);\n --input-processing-focused-border-color: var(--primary-10);\n --input-processing-focused-shadow-color: var(--grey-3);\n\n /* Input Icons */\n --input-lead-icon: var(--grey-12);\n --input-disabled-lead-icon: var(--grey-10);\n\n /* Checkboxes and Radio Buttons */\n --input-toggle-icon-color: var(--white-12);\n\n --input-toggle-unchecked-border-color: var(--grey-8);\n --input-toggle-unchecked-background-color: transparent;\n\n --input-toggle-checked-border-color: var(--primary-9);\n --input-toggle-checked-background-color: var(--primary-9);\n\n\n --input-toggle-unchecked-hover-border-color: var(--primary-9);\n --input-toggle-unchecked-hover-background-color: transparent;\n\n --input-toggle-checked-hover-border-color: var(--primary-7);\n --input-toggle-checked-hover-background-color: var(--primary-7);\n\n\n --input-toggle-unchecked-disabled-border-color: var(--grey-7);\n --input-toggle-unchecked-disabled-background-color: transparent;\n\n --input-toggle-checked-disabled-border-color: var(--grey-7);\n --input-toggle-checked-disabled-background-color: var(--grey-7);\n\n\n --input-toggle-intermediate-border-color: var(--primary-11);\n --input-toggle-intermediate-background-color: var(--primary-11);\n\n --input-toggle-intermediate-hover-border-color: var(--primary-11);\n --input-toggle-intermediate-hover-background-color: var(--primary-11);\n\n --input-toggle-intermediate-disabled-border-color: var(--grey-7);\n --input-toggle-intermediate-disabled-background-color: var(--grey-7);\n\n /* Labels */\n --input-label: var(--grey-11);\n --input-label-hover: var(--primary-8);\n --input-label-active: var(--grey-12);\n\n }\n\n /* Filters */\n .light-theme, .dark-theme {\n --filter-button-text-color: var(--grey-11);\n --filter-button-icon-color: var(--grey-10);\n --filter-button-background-color: var(--grey-2);\n --filter-button-stroke-color: var(--grey-a5);\n --filter-button-shadow-color: var(--primary-a3);\n\n --filter-dropdown-background-color: color-mix(in srgb, var(--grey-1) 82%, transparent);\n --filter-dropdown-background-color-fallback: var(--grey-3);\n --filter-dropdown-accent: var(--primary-a9);\n\n }\n\n .dark-theme {\n --filter-button-shadow-color: var(--black-a8);\n }\n\n /* Typography */\n .light-theme, .dark-theme {\n --label-color: var(--grey-11);\n }\n\n /* Buttons */\n .light-theme, .dark-theme {\n --button-background-color: var(--primary-9);\n --button-border-color: var(--primary-9);\n --button-border-width: 1px;\n --button-inner-shadow-color: transparent;\n --button-drop-shadow-color: var(--shadow-primary-default);\n --button-text-color: var(--white-1);\n --button-divider-color: var(--primary-a3);\n\n --button-loading-area-background-color: var(--primary-a7);\n --button-loading-area-divider-color: var(--primary-a8);\n --button-loading-text-color: var(--white-1);\n --button-disabled-border-color: var(--button-border-color);\n --button-disabled-text-color: var(--white-1);\n\n --button-hover-background-color: var(--primary-8);\n --button-hover-border-color: var(--primary-a6);\n --button-hover-inner-shadow-color: transparent;\n --button-hover-drop-shadow-color: var(--shadow-primary-elevate);\n --button-hover-text-color: var(--white-1);\n --button-hover-divider-color: var(--primary-a3);\n --button-hover-icon-area-background-color: var(--primary-a3);\n\n --button-active-background-color: var(--button-hover-background-color);\n --button-active-border-color: var(--button-hover-border-color);\n --button-active-inner-shadow-color: var(--button-hover-inner-shadow-color);\n --button-active-drop-shadow-color: var(--button-hover-drop-shadow-color);\n --button-active-text-color: var(--white-1);\n --button-active-divider-color: var(--primary-a3);\n --button-active-icon-area-background-color: var(--primary-a3);\n\n --button-gradient-start: var(--primary-gradient-start);\n --button-gradient-end: var(--primary-gradient-end);\n\n .button-design-secondary {\n --button-background-color: var(--grey-9);\n --button-border-color: var(--grey-6);\n --button-inner-shadow-color: transparent;\n --button-drop-shadow-color: var(--shadow-secondary-default);\n --button-text-color: var(--grey-12);\n --button-divider-color: var(--grey-a3);\n\n --button-loading-area-background-color: var(--grey-a4);\n --button-loading-area-divider-color: var(--grey-a3);\n --button-disabled-border-color: var(--button-border-color);\n\n --button-hover-background-color: var(--grey-8);\n --button-hover-border-color: var(--grey-a6);\n --button-hover-inner-shadow-color: var(--white-a8);\n --button-hover-drop-shadow-color: var(--shadow-secondary-elevate);\n --button-hover-text-color: var(--white-1);\n\n --button-active-background-color: var(--button-hover-background-color);\n --button-active-border-color: var(--button-hover-border-color);\n --button-active-inner-shadow-color: var(--button-hover-inner-shadow-color);\n --button-active-drop-shadow-color: var(--button-hover-drop-shadow-color);\n --button-active-text-color: var(--white-1);\n\n --button-gradient-start: var(--secondary-gradient-start);\n --button-gradient-end: var(--secondary-gradient-end);\n }\n\n .button-design-danger, .button-design-warning {\n --button-background-color: var(--warning-9);\n --button-border-color: var(--warning-9);\n --button-inner-shadow-color: transparent;\n --button-drop-shadow-color: var(--shadow-warning-default);\n --button-text-color: var(--white-1);\n --button-divider-color: var(--warning-9);\n\n --button-loading-area-background-color: var(--warning-a7);\n --button-loading-area-divider-color: var(--warning-a9);\n --button-disabled-border-color: var(--button-border-color);\n\n --button-hover-background-color: var(--warning-8);\n --button-hover-border-color: var(--warning-a6);\n --button-hover-inner-shadow-color: var(--white-a8);\n --button-hover-drop-shadow-color: var(--shadow-warning-elevate);\n --button-hover-text-color: var(--white-1);\n\n --button-active-background-color: var(--button-hover-background-color);\n --button-active-border-color: var(--button-hover-border-color);\n --button-active-inner-shadow-color: var(--button-hover-inner-shadow-color);\n --button-active-drop-shadow-color: var(--button-hover-drop-shadow-color);\n --button-active-text-color: var(--white-1);\n\n --button-gradient-start: var(--warning-gradient-start);\n --button-gradient-end: var(--warning-gradient-end);\n }\n\n .button-design-text-only {\n --button-background-color: transparent;\n --button-border-color: transparent;\n --button-inner-shadow-color: transparent;\n --button-gradient-start: transparent;\n --button-gradient-end: transparent;\n --button-drop-shadow-color: transparent;\n --button-text-color: var(--grey-12);\n --button-divider-color: transparent;\n\n --button-loading-area-background-color: transparent;\n --button-loading-area-divider-color: transparent;\n --button-loading-text-color: var(--grey-8);\n --button-disabled-border-color: transparent;\n --button-disabled-text-color: var(--grey-8);\n\n --button-hover-background-color: transparent;\n --button-hover-border-color: transparent;\n --button-hover-text-color: var(--primary-9);\n --button-hover-drop-shadow-color: transparent;\n --button-hover-inner-shadow-color: transparent;\n\n --button-active-inner-shadow-color: transparent;\n --button-active-drop-shadow-color: transparent;\n --button-active-background-color: transparent;\n --button-active-border-color: transparent;\n --button-active-text-color: var(--primary-10);\n }\n\n .button-design-outline {\n --button-background-color: transparent;\n --button-border-color: var(--grey-11);\n --button-border-width: 2px;\n --button-inner-shadow-color: transparent;\n --button-gradient-start: transparent;\n --button-gradient-end: transparent;\n --button-drop-shadow-color: var(--grey-a3);\n --button-divider-color: var(--grey-a3);\n --button-text-color: var(--grey-12);\n\n --button-loading-area-background-color: transparent;\n --button-loading-area-divider-color: var(--grey-a3);\n --button-loading-text-color: var(--grey-10);\n --button-disabled-border-color: var(--grey-a6);\n --button-disabled-text-color: var(--grey-12);\n\n --button-hover-background-color: transparent;\n --button-hover-border-color: var(--primary-9);\n --button-hover-text-color: var(--primary-9);\n --button-hover-drop-shadow-color: var(--grey-a4);\n --button-hover-inner-shadow-color: transparent;\n\n --button-active-inner-shadow-color: transparent;\n --button-active-drop-shadow-color: transparent;\n --button-active-background-color: transparent;\n --button-active-border-color: var(--primary-11);\n --button-active-text-color: var(--primary-11);\n }\n\n }\n\n /* Switches */\n .light-theme, .dark-theme {\n // Background\n --switch-default-off-background: var(--grey-4);\n --switch-default-on-background: var(--primary-9);\n --switch-default-danger-background: var(--warning-9);\n\n --switch-disabled-off-background: var(--grey-3);\n --switch-disabled-on-background: var(--primary-8);\n --switch-disabled-danger-background: var(--warning-8);\n\n // Border\n --switch-default-off-border: var(--grey-7);\n --switch-default-on-border: var(--primary-9);\n --switch-default-danger-border: var(--warning-9);\n\n --switch-disabled-off-border: var(--grey-6);\n --switch-disabled-on-border: var(--primary-a6);\n --switch-disabled-danger-border: var(--warning-a6);\n\n // Inner\n --switch-default-off-inner: var(--primary-9);\n --switch-default-on-inner: var(--white-12);\n --switch-default-danger-inner: var(--white-12);\n\n --switch-disabled-off-inner: var(--grey-7);\n --switch-disabled-on-inner: var(--primary-a9);\n --switch-disabled-danger-inner: var(--warning-a9);\n\n // Special States\n --switch-special-locked-background: var(--grey-3);\n --switch-special-locked-border: var(--grey-11);\n --switch-special-locked-inner: transparent;\n --switch-special-locked-icon: var(--grey-11);\n\n --switch-special-failure-background: var(--warning-8);\n --switch-special-failure-border: var(--warning-9);\n --switch-special-failure-inner: var(--white-12);\n --switch-special-failure-icon: var(--warning-8);\n\n }\n\n .light-theme {\n // Background\n --switch-default-off-background: var(--grey-2);\n --switch-default-on-background: var(--primary-7);\n --switch-default-danger-background: var(--warning-9);\n\n --switch-disabled-off-background: var(--grey-3);\n --switch-disabled-on-background: var(--primary-6);\n --switch-disabled-danger-background: var(--warning-8);\n\n // Border\n --switch-default-off-border: var(--grey-6);\n --switch-default-on-border: var(--primary-7);\n --switch-default-danger-border: var(--warning-9);\n\n --switch-disabled-off-border: var(--grey-6);\n --switch-disabled-on-border: var(--primary-7);\n --switch-disabled-danger-border: var(--warning-a5);\n\n // Inner\n --switch-default-off-inner: var(--primary-9);\n --switch-default-on-inner: var(--white-12);\n --switch-default-danger-inner: var(--white-12);\n\n --switch-disabled-off-inner: var(--grey-7);\n --switch-disabled-on-inner: var(--primary-9);\n --switch-disabled-danger-inner: var(--warning-a8);\n\n // Special States\n --switch-special-locked-background: var(--grey-3);\n --switch-special-locked-border: var(--grey-8);\n --switch-special-locked-inner: transparent;\n --switch-special-locked-icon: var(--grey-11);\n }\n\n`;\n","import { css } from 'styled-components';\nimport { deviceMediaQuery } from '../common';\n\nexport const layoutVariables = css`\n /** Layouts */\n :root {\n --max-content-width: 1840px;\n }\n\n .content-layout {\n \n &-default {\n --content-layout-padding-top: 32px;\n --content-layout-padding-right: 48px;\n --content-layout-padding-bottom: 64px;\n --content-layout-padding-left: 64px;\n --utility-header-padding-top: 48px;\n\n @media ${deviceMediaQuery.xlarge}{\n --content-layout-padding-top: 32px;\n --content-layout-padding-right: 96px;\n --content-layout-padding-bottom: 64px;\n --content-layout-padding-left: 96px;\n --utility-header-padding-top: 48px;\n }\n\n @media ${deviceMediaQuery.xxlarge}{\n --content-layout-padding-top: 30px;\n --content-layout-padding-right: 120px;\n --content-layout-padding-bottom: 64px;\n --content-layout-padding-left: 120px;\n --utility-header-padding-top: 48px;\n }\n }\n\n &-fullscreen {\n --content-layout-padding-top: 0px;\n --content-layout-padding-right: 0px;\n --content-layout-padding-bottom: 0px;\n --content-layout-padding-left: 0px;\n --utility-header-padding-top: 0px;\n --max-content-width: none;\n }\n\n &-dashboard {\n --content-layout-padding-top: 32px;\n --content-layout-padding-right: 32px;\n --content-layout-padding-bottom: 32px;\n --content-layout-padding-left: 32px;\n --utility-header-padding-top: 32px;\n --max-content-width: none;\n }\n }\n`;\n","import { createGlobalStyle } from 'styled-components';\nimport { animationVariables } from './variables/Animation';\nimport { colorVariables } from './variables/Colors';\nimport { layoutVariables } from './variables/Layout';\n\nconst ThemeVariables = createGlobalStyle`\n\n ${layoutVariables};\n ${animationVariables};\n ${colorVariables};\n\n :root {\n\n --font-ui: Monorale, Hiragino Sans, \"ヒラギノ角ゴシック\", Hiragino Kaku Gothic ProN, \"ヒラギノ角ゴ ProN W3\", Roboto, YuGothic, \"游ゴシック\", Meiryo, \"メイリオ\", sans-serif;\n --font-data: Lato, Hiragino Sans, \"ヒラギノ角ゴシック\", Hiragino Kaku Gothic ProN, \"ヒラギノ角ゴ ProN W3\", Roboto, YuGothic, \"游ゴシック\", Meiryo, \"メイリオ\", sans-serif;\n\n --common-height: 32px;\n\n --font-size: 14px;\n\n --global-menu-width-closed: 80px;\n --global-menu-width-open: 280px;\n\n --input-height: 40px;\n --input-compact-height: 32px;\n --input-required-dot-display: inline-block;\n\n --button-font-size: 14px;\n --button-height: 32px;\n --button-h-padding: 8px;\n --button-h-padding-outline: 7px;\n --button-lift-default-x: 0px;\n --button-lift-default-y: 2px;\n --button-lift-default-blur: 4px;\n --button-lift-default-spread: 2px;\n\n --button-icon-size: 14px;\n --button-icon-h-padding: 8px;\n\n // Inputs\n --input-box-shadow-x: 0;\n --input-box-shadow-y: 0;\n --input-box-shadow-blur: 0;\n --input-box-shadow-spread: 0;\n\n --input-focused-box-shadow-x: 0;\n --input-focused-box-shadow-y: 3px;\n --input-focused-box-shadow-blur: 3px;\n --input-focused-box-shadow-spread: 0;\n\n // Switches\n --switch-height: 24px;\n --switch-width: 40px;\n --switch-border-width: 2px;\n --switch-inner-size: 16px;\n --switch-intent-offset: 3px;\n\n // Labels\n --label-font: var(--font-ui);\n --label-font-size: 14px;\n --label-weight: 500;\n\n }\n\n .button-size-xsmall {\n --button-font-size: 12px;\n --button-height: 20px;\n --button-h-padding: 4px;\n --button-h-padding-outline: 3px;\n --button-icon-size: 12px;\n --button-icon-h-padding: 4px;\n }\n\n .button-size-small {\n --button-font-size: 12px;\n --button-height: 24px;\n --button-h-padding: 4px;\n --button-h-padding-outline: 3px;\n --button-icon-size: 12px;\n --button-icon-h-padding: 8px;\n }\n\n .button-size-large {\n --button-font-size: 16px;\n --button-height: 40px;\n --button-h-padding: 8px;\n --button-h-padding-outline: 7px;\n --button-icon-size: 16px;\n --button-icon-h-padding: 8px;\n }\n\n\n\n .split-button-primary {\n --border-color: var(--primary-9);\n --border-active-color: var(--primary-11);\n --toggle-icon-border: var(--primary-9);\n --gradient-1: #72C3EE;\n --gradient-2: #5CACEE;\n --button-lift-default-color: rgba(221, 234, 248, 0.08);\n --text-color: var(--white-a12);\n --text-disabled-color: var(--white-a11);\n --button-hover-bg: var(--primary-a3);\n --button-active-bg: var(--primary-10);\n --toggle-icon-hover-bg: var(--white-a7);\n --toggle-icon-active-bg: var(--black-a6);\n --toggle-icon: var(--white-a12);\n --toggle-icon-active: var(--white-a11);\n --toggle-icon-disabled: var(--white-a10);\n }\n\n .split-button-secondary {\n --border-color: var(--grey-7);\n --border-active-color: var(--grey-7);\n --toggle-icon-border: var(--grey-6);\n --gradient-1: #2E3135;\n --gradient-2: #363A3F;\n --button-lift-default-color: rgba(221, 234, 248, 0.08);\n --text-color: var(--grey-12);\n --text-disabled-color: var(--grey-a11);\n --button-hover-bg: var(--grey-a6);\n --button-active-bg: var(--grey-a3);\n --toggle-icon-hover-bg: var(--grey-a6);\n --toggle-icon-active-bg: var(--grey-a3);\n --toggle-icon: var(--grey-12);\n --toggle-icon-active: var(--grey-a11);\n --toggle-icon-disabled: var(--grey-10);\n }\n\n .split-button-danger {\n --border-color: var(--warning-10);\n --border-active-color: var(--warning-10);\n --toggle-icon-border: var(--warning-9);\n --gradient-1: #D16565;\n --gradient-2: #E76F6F;\n --button-lift-default-color: rgba(255, 113, 113, 0.47);\n --text-color: var(--white-a12);\n --text-disabled-color: var(--white-a11);\n --button-hover-bg: var(--warning-a7);\n --button-active-bg: var(--warning-8);\n --toggle-icon-hover-bg: var(--warning-a7);\n --toggle-icon-active-bg: var(--warning-a5);\n --toggle-icon: var(--white-a12);\n --toggle-icon-active: var(--white-a11);\n --toggle-icon-disabled: var(--white-a10);\n }\n\n .split-button-custom {\n --border-color: var(--info-10);\n --border-active-color: var(--info-10);\n --toggle-icon-border: var(--info-9);\n --gradient-1: var(--info-10);\n --gradient-2: var(--info-9);\n --button-lift-default-color: var(--info-a3);\n --text-color: var(--white-a12);\n --text-disabled-color: var(--white-a11);\n --button-hover-bg: var(--info-a7);\n --button-active-bg: var(--info-8);\n --toggle-icon-hover-bg: var(--info-a7);\n --toggle-icon-active-bg: var(--info-a5);\n --toggle-icon: var(--white-a12);\n --toggle-icon-active: var(--white-a11);\n --toggle-icon-disabled: var(--white-a10);\n }\n\n .split-button-size-small {\n --button-font-size: 12px;\n --button-height: 24px;\n --button-h-padding: 4px;\n --button-icon-size: 12px;\n --button-icon-h-padding: 8px;\n }\n\n .split-button-size-large {\n --button-font-size: 16px;\n --button-height: 40px;\n --button-h-padding: 8px;\n --button-icon-size: 16px;\n --button-icon-h-padding: 8px;\n }\n\n`;\n\nexport default ThemeVariables;\n","import { css } from 'styled-components';\n\nconst BaseStyles = css`\n\n * , body{\n box-sizing: border-box;\n text-rendering: geometricPrecision;\n }\n body, html , #root {\n min-width: 100%;\n min-height: 100vh;\n margin: 0;\n }\n\n body {\n font-family: var(--font-ui);\n color: var(--grey-11);\n background: var(--main-background-gradient);\n background-attachment: fixed;\n }\n\n`;\n\nexport { BaseStyles };\n","import type React from 'react';\nimport styled from 'styled-components';\n\n/**\n * -- Content Placeholder --\n * Intended as an aid for development and use in stories.\n */\nconst Arrow = styled.div`\n position: absolute;\n width: 10px;\n height: 10px;\n border: 2px solid var(--grey-10);\n border-left: 0;\n border-bottom: 0;\n border-radius: 0 3px 0 0;\n\n &.t { top: 24px; }\n &.b { bottom: 24px; }\n &.l { left: 24px; }\n &.r { right: 24px; }\n`;\n\nconst Container = styled.div`\n display: flex;\n position: relative;\n flex: 1;\n height: 100%;\n background: var(--grey-3);\n border: 12px solid var(--grey-6);\n box-sizing: border-box;\n flex: 1;\n justify-content: center;\n align-items: center;\n letter-spacing: 1.2px;\n color: var(--grey-10);\n`;\n\nexport const FlexContentPlaceholder: React.FC<{ title?: string }> = ({ title = 'Placeholder' }) => {\n return (\n <Container>\n {title}\n <Arrow className='t l' style={{ transform: 'rotate(-90deg)' }} />\n <Arrow className='t r' style={{ transform: 'rotate(0deg)' }} />\n <Arrow className='b r' style={{ transform: 'rotate(90deg)' }} />\n <Arrow className='b l' style={{ transform: 'rotate(180deg)' }} />\n </Container>\n );\n};\n","import { css } from 'styled-components';\nimport { FlexContentPlaceholder } from './ContentPlaceholder';\n\nexport const RowCss = css`\n position:relative;\n display: flex;\n flex-direction: row;\n align-items:center;\n`;\n\nexport const ColumnCss = css`\n display: flex;\n flex-direction: column;\n`;\n\nexport const resetButtonStyles = css`\n -webkit-tap-highlight-color: transparent;\n background-color: transparent;\n background: transparent;\n border: none;\n cursor: pointer;\n outline: none;\n padding: 0;\n appearance: none;\n user-select: none;\n`;\n\n// https://stackoverflow.com/questions/2781549/removing-input-background-colour-for-chrome-autocomplete\nexport const removeAutoFillStyle = css`\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus,\n &:-webkit-autofill:active{\n transition: background-color 600000s 0s, color 600000s 0s;\n }\n`;\nexport const EllipsisStyles = css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport { FlexContentPlaceholder };\n","import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common/index';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport type { AlertType } from '..';\n\nconst IconButton = styled.button<{ $selected?: boolean }>`\n ${resetButtonStyles};\n ${({ $selected = false }) =>\n $selected &&\n css`\n border-bottom: 5px solid var(--primary-7);\n `}\n &:focus {\n outline: none;\n }\n\n &:hover:enabled {\n opacity: .8;\n }\n &:active:enabled {\n opacity: .9;\n }\n &:disabled {\n opacity: 0.1;\n }\n`;\n\nexport const AlertWrapper = styled.div<{ $type: AlertType }>`\n min-height: 50px;\n border-radius: 3px;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n\n padding: 0 14px;\n\n font-family: var(--font-ui);\n background-color: ${({ $type }) => `var(--${$type})`};\n\n text-align: left;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n text-decoration: none;\n color: var(--white-1);\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--white-1);\n }\n }\n`;\n\nconst IconNames = {\n error: 'Critical',\n warning: 'BigWarning',\n success: 'Success',\n info: 'Information',\n neutral: 'Information',\n};\n\nconst MessageBox = styled.div`\n margin: 5px 0px 5px 15px;\n flex: 1;\n`;\nexport interface IAlert {\n alertMessage?: string;\n alertType: AlertType;\n}\n\ninterface Props {\n type?: AlertType;\n message?: string;\n hideCloseButton?: boolean;\n}\nconst AlertBar: React.FC<Props> = ({ type = 'info', message, hideCloseButton = false }) => {\n const [dismiss, setDismiss] = useState(false);\n\n useEffect(() => {\n setDismiss(false);\n }, []);\n\n return message && !dismiss ? (\n <AlertWrapper $type={type}>\n <Icon icon={IconNames[type]} color='inverse' />\n <MessageBox>{message}</MessageBox>\n\n {!hideCloseButton && (\n <IconButton onClick={() => setDismiss(true)}>\n <Icon icon='CloseCompact' color='inverse' />\n </IconButton>\n )}\n </AlertWrapper>\n ) : null;\n};\n\nexport default AlertBar;\n","import type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common/index';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport type { AlertType } from '..';\n\nconst Container = styled.div<{ $type: AlertType; $isClosing: boolean; $isVisible: boolean }>`\n min-height: 50px;\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 0 14px;\n width: 900px;\n position: fixed;\n top: 0;\n left: 50%;\n transform: translate(-50%, -100%);\n z-index: 999;\n\n font-family: var(--font-ui);\n background-color: ${({ $type }) => `var(--${$type})`};\n text-align: left;\n font-size: 14px;\n font-weight: 400;\n line-height: 15px;\n letter-spacing: -0.2px;\n text-decoration: none;\n color: var(--white-1);\n\n ${({ $isVisible }) =>\n $isVisible &&\n css`\n transition: transform var(--speed-slow) var(--easing-primary-in-out);\n `}\n\n ${({ $isVisible, $isClosing }) =>\n $isVisible &&\n !$isClosing &&\n css`\n transform: translate(-50%, 0%);\n `};\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--white-1);\n }\n }\n`;\n\nexport const IconNames = {\n error: 'Critical',\n warning: 'BigWarning',\n success: 'Success',\n info: 'Information',\n neutral: 'Information',\n};\n\nconst IconButton = styled.div<{ $selected?: boolean }>`\n ${resetButtonStyles};\n ${({ $selected = false }) =>\n $selected &&\n css`\n border-bottom: 5px solid var(--primary-7);\n `}\n &:focus {\n outline: none;\n }\n\n &:hover {\n opacity: .8;\n }\n &:active:enabled {\n opacity: .9;\n }\n &:disabled {\n opacity: 0.1;\n }\n`;\n\nconst TextButton = styled.button`\n ${resetButtonStyles};\n font-family: var(--font-ui);\n text-align: left;\n font-size: 14px;\n font-weight: 400;\n line-height: 15px;\n letter-spacing: -0.2px;\n text-decoration: none;\n color: var(--white-1);\n font-weight: 700;\n\n &:focus {\n outline: none;\n }\n\n &:hover:enabled {\n opacity: .8;\n transition: transform var(--speed-normal) var(--easing-primary-in-out);\n }\n &:active:enabled {\n opacity: .9;\n }\n &:disabled {\n opacity: 0.1;\n }\n`;\n\nconst MainMessage = styled.div`\n padding: 12px 6px 12px 12px;\n line-height: 20px;\n text-align: left;\n flex-grow: 2;\n`;\n\nexport type INotificationProps = {\n id?: string;\n type: AlertType;\n message: string;\n actionTextButton?: string;\n isPinned?: boolean;\n closeNow?: boolean;\n icon?: string;\n onTextButtonClick?: () => void;\n closeCallback?: () => void;\n};\n\nconst Notification: React.FC<INotificationProps> = ({\n id,\n type = 'info',\n message,\n icon = '',\n isPinned = false,\n actionTextButton,\n closeNow = false,\n closeCallback,\n onTextButtonClick,\n}) => {\n const [dismiss, setDismiss] = useState(false);\n const [slideUp, setSlideUp] = useState(false);\n const [textClicked, setTextClicked] = useState(false);\n const [isVisible, setIsVisible] = useState(false);\n const animatedIdRef = useRef<string | undefined>(undefined);\n // Always-current snapshot of close-related values, used in the unmount cleanup below.\n const closeStateRef = useRef({ slideUp, textClicked, onTextButtonClick, closeCallback });\n useEffect(() => {\n closeStateRef.current = { slideUp, textClicked, onTextButtonClick, closeCallback };\n });\n\n useEffect(() => {\n setDismiss(false);\n setSlideUp(false);\n setTextClicked(false);\n }, []);\n\n // Slide-in via CSS transition gated by rAF — StrictMode-safe:\n // StrictMode cleanup runs synchronously before rAF fires, so the rAF is\n // cancelled during the simulated unmount and only fires on the stable remount.\n //\n // animatedIdRef tracks whether id genuinely changed (new notification) vs a\n // StrictMode remount (same id), preventing a spurious setIsVisible(false) reset\n // on remount. On first render with id=undefined, the ref stays undefined and the\n // rAF still fires correctly to show the notification.\n useEffect(() => {\n if (animatedIdRef.current !== id) {\n animatedIdRef.current = id;\n setIsVisible(false);\n }\n const rafId = requestAnimationFrame(() => setIsVisible(true));\n return () => cancelAnimationFrame(rafId);\n }, [id]);\n\n const handleDismiss = useCallback(() => {\n setSlideUp(true);\n }, []);\n\n const handleTextClick = useCallback(async () => {\n setTextClicked(true);\n handleDismiss();\n }, [handleDismiss]);\n\n const animationEnded = useCallback(() => {\n // Will only trigger if the animation triggered was closing one\n if (slideUp) {\n setDismiss(true);\n\n if (onTextButtonClick && textClicked) {\n onTextButtonClick();\n }\n\n if (closeCallback) {\n closeCallback();\n }\n }\n }, [slideUp, closeCallback, onTextButtonClick, textClicked]);\n\n useEffect(() => {\n if (isPinned) return;\n const timerId = setTimeout(() => handleDismiss(), 7000);\n return () => clearTimeout(timerId);\n }, [isPinned, handleDismiss]);\n\n useEffect(() => {\n if (closeNow) {\n handleDismiss();\n }\n }, [closeNow, handleDismiss]);\n\n // If the component unmounts while the close animation is in-flight (e.g. parent\n // force-removes it before onAnimationEnd fires), still invoke the callbacks so\n // callers don't silently miss the close event.\n useEffect(() => {\n return () => {\n const { slideUp, textClicked, onTextButtonClick, closeCallback } = closeStateRef.current;\n if (slideUp) {\n if (onTextButtonClick && textClicked) onTextButtonClick();\n if (closeCallback) closeCallback();\n }\n };\n }, []);\n\n return message && !dismiss\n ? ReactDOM.createPortal(\n <Container\n $type={type}\n $isClosing={slideUp}\n $isVisible={isVisible}\n onTransitionEnd={animationEnded}\n >\n <Icon icon={!icon ? IconNames[type] : icon} color='inverse' />\n <MainMessage>{message}</MainMessage>\n {actionTextButton ? (\n <TextButton onClick={() => handleTextClick()}>{actionTextButton} </TextButton>\n ) : (\n <IconButton onClick={() => handleDismiss()}>\n <Icon icon='CloseCompact' color='inverse' />\n </IconButton>\n )}\n </Container>,\n document.body\n )\n : null;\n};\n\nexport default Notification;\n","import type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport styled, { css } from 'styled-components';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport type { ITooltipType } from '..';\n\nconst ARROW_SIZE = 8;\nconst ARROW_MARGIN = 16;\n\nconst Arrow = styled.div<{ $type: ITooltipType }>`\n content:'';\n display:block;\n width:0;\n height:0;\n border-left: ${ARROW_SIZE}px solid transparent;\n border-right: ${ARROW_SIZE}px solid transparent;\n border-bottom: ${ARROW_SIZE}px solid ${({ $type }) => `var(--tooltip-${$type}-arrow)`};\n`;\n\nconst TooltipWrapper = styled.div<{ $directionStyle: string; $maxWidth?: string }>`\n position: absolute;\n display: flex;\n ${({ $maxWidth }) => $maxWidth && css` max-width: ${$maxWidth}`};\n ${({ $directionStyle }) => $directionStyle && css`${$directionStyle}`};\n`;\n\nconst MessageWrapper = styled.div<{ $type: ITooltipType }>`\n background-color: ${({ $type }) => `var(--tooltip-${$type})`};\n border-radius: 3px;\n border: 1px solid ${({ $type }) => `var(--tooltip-${$type}-border)`};\n box-shadow: 0px 2px var(--input-focused-blur, 3px) 0px rgba(0, 16, 64, 0.06);\n backdrop-filter: blur(2px);\n display: flex;\n padding: 12px 16px;\n justify-content: center;\n align-items: center;\n gap: 16px;\n color: var(--white-a12);\n font-feature-settings: 'liga' off, 'clig' off;\n font-size: 13px;\n font-weight: 600;\n line-height: 16px;\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n`;\n\nconst getDirectionStyle = (state: ITooltipPosition, coords: DOMRect) => {\n const { left, top, width, height } = coords;\n\n const currentTop = top + window.scrollY;\n const currentLeft = left + window.scrollX;\n\n switch (state) {\n case 'bottom-right':\n return `\n flex-direction: column;\n top: ${currentTop + height}px;\n left: ${currentLeft - ARROW_SIZE - ARROW_MARGIN + width / 2}px;\n ${Arrow} {\n margin-left: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'bottom-left':\n return `\n flex-direction: column;\n align-items: end;\n top: ${currentTop + height}px;\n left: ${currentLeft + ARROW_SIZE + ARROW_MARGIN + width / 2}px;\n transform: translateX(-100%);\n ${Arrow} {\n margin-right: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'right-bottom':\n return `\n flex-direction: row;\n top: ${currentTop - ARROW_SIZE / 2 - ARROW_MARGIN + height / 2}px;\n left: ${currentLeft + width}px;\n ${Arrow} {\n transform: rotate(-90deg);\n margin-right: -${ARROW_SIZE / 2}px;\n margin-top: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'right':\n return `\n flex-direction: row;\n align-items: center;\n top: ${currentTop + height / 2}px;\n left: ${currentLeft + width}px;\n transform: translateY(-50%);\n ${Arrow} {\n transform: rotate(-90deg);\n margin-right: -${ARROW_SIZE / 2}px;\n }\n `;\n\n case 'right-top':\n return `\n flex-direction: row;\n align-items: end;\n top: ${currentTop + ARROW_SIZE / 2 + ARROW_MARGIN + height / 2}px;\n left: ${currentLeft + width}px;\n transform: translateY(-100%);\n ${Arrow} {\n transform: rotate(-90deg);\n margin-right: -${ARROW_SIZE / 2}px;\n margin-bottom: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'left-bottom':\n return `\n flex-direction: row-reverse;\n top: ${currentTop - ARROW_SIZE / 2 - ARROW_MARGIN + height / 2}px;\n left: ${currentLeft}px;\n transform: translateX(-100%);\n ${Arrow} {\n transform: rotate(90deg);\n margin-left: -${ARROW_SIZE / 2}px;\n margin-top: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'left':\n return `\n flex-direction: row-reverse;\n align-items: center;\n top: ${currentTop + height / 2}px;\n left: ${currentLeft}px;\n transform: translate(-100%, -50%);\n ${Arrow} {\n transform: rotate(90deg);\n margin-left: -${ARROW_SIZE / 2}px;\n }\n `;\n\n case 'left-top':\n return `\n flex-direction: row-reverse;\n align-items: end;\n top: ${currentTop + ARROW_SIZE / 2 + ARROW_MARGIN + height / 2}px;\n left: ${currentLeft}px;\n transform: translate(-100%, -100%);\n ${Arrow} {\n transform: rotate(90deg);\n margin-left: -${ARROW_SIZE / 2}px;\n margin-bottom: ${ARROW_MARGIN}px;\n }\n `;\n case 'top-right':\n return `\n flex-direction: column-reverse;\n top: ${currentTop}px;\n left: ${currentLeft - ARROW_SIZE - ARROW_MARGIN + width / 2}px;\n transform: translateY(-100%);\n ${Arrow} {\n transform: rotate(180deg);\n margin-left: ${ARROW_MARGIN}px;\n }\n `;\n\n case 'top':\n return `\n flex-direction: column-reverse;\n align-items: center;\n top: ${currentTop}px;\n left: ${currentLeft + width / 2}px;\n transform: translate(-50%, -100%);\n ${Arrow} {\n transform: rotate(180deg);\n }\n `;\n\n case 'top-left':\n return `\n flex-direction: column-reverse;\n align-items: end;\n top: ${currentTop}px;\n left: ${currentLeft + ARROW_SIZE + ARROW_MARGIN + width / 2}px;\n transform: translate(-100%, -100%);\n ${Arrow} {\n transform: rotate(180deg);\n margin-right: ${ARROW_MARGIN}px;\n }\n `;\n\n // default case is 'bottom'\n default:\n return `\n flex-direction: column;\n top: ${currentTop + height}px;\n left: ${currentLeft + width / 2}px;\n transform: translateX(-50%);\n align-items: center;\n `;\n }\n};\n\nconst getDynamicPosition = (coords: DOMRect, width?: number, height?: number): ITooltipPosition => {\n const isOverflowingRight = coords.left + (width || 0) + 30 > window.innerWidth;\n const isOverflowingBottom = coords.bottom + (height || 0) > window.innerHeight;\n const isOverflowingLeft = coords.left - (width || 0) < 0;\n const isOverflowingTop = coords.top - (height || 0) < 0;\n\n if (isOverflowingTop && isOverflowingRight && isOverflowingBottom) {\n return 'left';\n }\n\n if (isOverflowingTop && isOverflowingLeft && isOverflowingBottom) {\n return 'right';\n }\n\n if (isOverflowingTop && isOverflowingLeft) {\n return 'bottom-right';\n }\n\n if (isOverflowingTop && isOverflowingRight) {\n return 'bottom-left';\n }\n\n if (isOverflowingBottom && isOverflowingLeft) {\n return 'top-right';\n }\n\n if (isOverflowingBottom && isOverflowingRight) {\n return 'top-left';\n }\n\n if (isOverflowingLeft) {\n return 'right';\n }\n\n if (isOverflowingRight) {\n return 'left';\n }\n\n if (isOverflowingBottom) {\n return 'top';\n }\n\n return 'bottom';\n};\n\ntype ITooltip = {\n message: string;\n tooltipFor: React.RefObject<HTMLElement | null>;\n icon?: string;\n type?: ITooltipType;\n tooltipPosition?: ITooltipPosition;\n maxWidth?: string;\n};\n\nexport type ITooltipPosition =\n | 'top-left'\n | 'top'\n | 'top-right'\n | 'bottom-left'\n | 'bottom'\n | 'bottom-right'\n | 'left-top'\n | 'left'\n | 'left-bottom'\n | 'right-top'\n | 'right'\n | 'right-bottom';\n\nconst Tooltip: React.FC<ITooltip> = ({\n icon,\n message,\n type,\n tooltipFor,\n tooltipPosition,\n maxWidth,\n}) => {\n const [coords, setCoords] = useState<DOMRect | null>(null);\n const [visible, setVisible] = useState(false);\n const [dynamicPosition, setDynamicPosition] = useState<ITooltipPosition>('top');\n const tooltipRef = useRef<HTMLDivElement>(null);\n\n const handleMouseOver = useCallback(() => {\n if (tooltipFor?.current) {\n const rect = tooltipFor.current.getBoundingClientRect();\n setCoords(rect);\n setVisible(true);\n setDynamicPosition(\n getDynamicPosition(rect, tooltipFor.current.offsetWidth, tooltipFor.current.offsetHeight)\n );\n }\n }, [tooltipFor]);\n\n const handleMouseOut = useCallback(() => {\n setVisible(false);\n }, []);\n\n const updateCoords = useCallback(() => {\n if (tooltipFor?.current) {\n const rect = tooltipFor.current.getBoundingClientRect();\n setCoords(rect);\n }\n }, [tooltipFor]);\n\n useEffect(() => {\n let currentRef: HTMLElement | null = null;\n\n if (tooltipFor?.current) {\n currentRef = tooltipFor.current;\n tooltipFor.current.addEventListener('mouseover', handleMouseOver);\n tooltipFor.current.addEventListener('mouseout', handleMouseOut);\n updateCoords();\n }\n\n return () => {\n if (currentRef) {\n currentRef.removeEventListener('mouseover', handleMouseOver);\n currentRef.removeEventListener('mouseout', handleMouseOut);\n }\n };\n }, [handleMouseOut, handleMouseOver, tooltipFor, updateCoords]);\n\n if (!visible || !coords) return null;\n\n return ReactDOM.createPortal(\n <TooltipWrapper\n ref={tooltipRef}\n $maxWidth={maxWidth}\n $directionStyle={getDirectionStyle(tooltipPosition || dynamicPosition, coords)}\n >\n <Arrow $type={type || 'neutral'} />\n <MessageWrapper $type={type || 'neutral'}>\n {icon && <Icon icon={icon} size={16} color='white-a12' />}\n {message}\n </MessageWrapper>\n </TooltipWrapper>,\n document.body\n );\n};\n\nexport default Tooltip;\n","import type React from 'react';\nimport type { ButtonHTMLAttributes } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport type { TypeButtonDesigns, TypeButtonSizes } from '..';\n\ninterface IStyledComponentProps {\n $size: TypeButtonSizes;\n $design: TypeButtonDesigns;\n $shadow: boolean;\n $noPadding?: boolean;\n $loading?: boolean;\n $isOutline?: boolean;\n}\n\nconst activeAnimation = (shadow?: boolean) => {\n const animation = keyframes`\n 0% {\n box-shadow:\n 0 0px 0px var(--button-hover-inner-shadow-color) inset\n ${shadow ? ', 0 4px 8px var(--button-hover-drop-shadow-color)' : ''};\n }\n\n 75% {\n box-shadow:\n 0 0 24px var(--button-active-inner-shadow-color) inset\n ${shadow ? ', 0 4px 6px var(--button-active-drop-shadow-color)' : ''};\n }\n\n 100% {\n box-shadow:\n 0 0 16px var(--button-active-inner-shadow-color) inset\n ${shadow ? ', 0 4px 6px var(--button-active-drop-shadow-color)' : ''};\n }\n `;\n\n return animation;\n};\n\nconst StyledButton = styled.button<IStyledComponentProps>`\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n font-family: var(--font-ui);\n height: var(--button-height);\n font-size: var(--button-font-size);\n color: var(--button-text-color);\n font-weight: 600;\n\n ${({ $noPadding, $isOutline }) =>\n $noPadding\n ? css`\n padding: 0px;\n `\n : css`\n padding: ${$isOutline ? `var(--button-h-padding-outline)` : `var(--button-h-padding)`};\n `}\n\n overflow: hidden;\n cursor: pointer;\n outline: none;\n box-sizing: border-box;\n\n border-radius: 3px;\n border: var(--button-border-width) solid var(--button-border-color);\n background: linear-gradient(135deg, transparent, transparent, var(--button-gradient-start), var(--button-gradient-end));\n background-color: var(--button-background-color);\n background-size: 400%;\n background-position: 99%;\n\n ${({ $shadow }) =>\n $shadow\n ? css`\n box-shadow:\n 0 2px 4px 2px var(--button-drop-shadow-color),\n 0 0 0 var(--button-inner-shadow-color) inset;\n `\n : css`\n box-shadow: 0 0 0 var(--button-inner-shadow-color) inset;\n `}\n\n transition:\n border-color var(--speed-normal) var(--easing-primary-in-out),\n background-color var(--speed-normal) var(--easing-primary-in-out),\n background-position var(--speed-normal) var(--easing-primary-out),\n background-size var(--speed-normal) var(--easing-primary-out),\n box-shadow var(--speed-normal) var(--easing-primary-out),\n opacity var(--speed-normal) var(--easing-primary-out),\n color var(--speed-normal) var(--easing-primary-in-out);\n\n &:hover:enabled {\n background-position: 1%;\n background-color: var(--button-hover-background-color);\n border-color: var(--button-hover-border-color);\n color: var(--button-hover-text-color);\n\n ${({ $shadow }) =>\n $shadow\n ? css`\n box-shadow:\n 0 4px 8px var(--button-hover-drop-shadow-color),\n 0 0 5px var(--button-hover-inner-shadow-color) inset;\n `\n : css`\n box-shadow: 0 0 5px var(--button-hover-inner-shadow-color) inset;\n `}\n }\n\n &:active:enabled {\n background-color: var(--button-active-background-color);\n border-color: var(--button-active-border-color);\n color: var(--button-active-text-color);\n ${({ $shadow }) => css`\n animation: var(--speed-normal) var(--easing-primary-in-out) ${() => activeAnimation($shadow)} forwards;\n `};\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 50%;\n color: var(--button-disabled-text-color);\n border-color: var(--button-disabled-border-color, transparent);\n }\n\n ${({ $loading }) =>\n $loading &&\n css`\n &:disabled {\n opacity: 1;\n cursor: wait;\n color: var(--button-loading-text-color);\n }\n `};\n\n button + button {\n margin-left: 20px;\n }\n\n`;\n\ninterface OwnProps {\n size?: TypeButtonSizes;\n design?: TypeButtonDesigns;\n shadow?: boolean;\n noPadding?: boolean;\n loading?: boolean;\n}\n\ntype Props = OwnProps & ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst Button: React.FC<Props> = ({\n design = 'primary',\n size = 'normal',\n shadow = false,\n noPadding = false,\n loading = false,\n children,\n formAction,\n className,\n ...props\n}) => {\n if (design === 'danger') {\n console.warn(\n 'Button.tsx - Warning, the design prop value danger is being deprecated. Use warning instead.'\n );\n }\n const mergedClassName = [`button-design-${design}`, `button-size-${size}`, className]\n .filter(Boolean)\n .join(' ');\n return (\n <StyledButton\n type='button'\n $isOutline={design === 'outline'}\n className={mergedClassName}\n $design={design}\n $size={size}\n $noPadding={noPadding}\n $shadow={shadow}\n $loading={loading}\n {...props}\n >\n {children}\n </StyledButton>\n );\n};\n\nexport default Button;\n","import type React from 'react';\nimport styled, { css } from 'styled-components';\nimport type { IWeight } from '../..';\nimport Icon from '../../Icons/Icon';\nimport Spinner from '../../Indicators/Spinner';\nimport type { IButtonProps, TypeButtonSizes } from '..';\nimport Button from './Button';\n\nconst Container = styled.div`\n display: inline;\n`;\n\nconst TextContainer = styled.div<{ $size: TypeButtonSizes; $position?: string; $weight?: IWeight }>`\n height: inherit;\n flex: 1;\n order: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n white-space: nowrap;\n padding: 0 var(--button-h-padding);\n transition: padding var(--speed-slow) var(--easing-primary-in-out);\n font-weight: ${({ $weight }) => ($weight === 'light' ? '500' : '600')};\n`;\n\nconst IconContainer = styled.div`\n opacity: 1;\n`;\nconst SpinnerContainer = styled.div`\n background-color: var(--button-loading-area-background-color);\n\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n opacity: 0;\n`;\n\nconst IconArea = styled.div<{ $position?: string; $loading: boolean }>`\n position: relative;\n height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n flex: 0 0 calc((var(--button-h-padding)* 2) + var(--button-icon-size));\n border: 0px solid var(--button-divider-color);\n padding: 0 var(--button-h-padding);\n\n ${({ $position }) => css`\n order: ${$position && $position === 'left' ? 0 : 2};\n ${$position === 'left' ? `border-right-width: 1px;` : `border-left-width: 1px;`};\n `}\n\n ${IconContainer}{\n svg {\n display:block;\n width: var(--button-icon-size);\n height: var(--button-icon-size);\n path, rect, circle, d {\n stroke: var(--button-text-color);\n }\n }\n }\n\n ${IconContainer}, ${SpinnerContainer}{\n transition: opacity var(--speed-fast) var(--easing-primary-out);\n }\n\n ${({ $loading }) =>\n $loading &&\n css`\n border-color: var(--button-loading-area-divider-color);\n\n ${SpinnerContainer}{\n opacity: 1;\n }\n\n ${IconContainer}{\n opacity: 0;\n };\n `};\n\n`;\n\nconst InnerContainer = styled.div<{ $disabled?: boolean }>`\n display: flex;\n height: inherit;\n\n &:hover {\n ${({ $disabled }) =>\n !$disabled &&\n css`\n ${IconContainer}{\n svg {\n path, rect, circle, d {\n stroke: var(--button-hover-text-color);\n }\n }\n }\n `};\n }\n\n &:active{\n ${({ $disabled }) =>\n !$disabled &&\n css`\n ${IconContainer}{\n svg {\n path, rect, circle, d {\n stroke: var(--button-active-text-color);\n }\n }\n }\n `};\n }\n\n ${({ $disabled }) =>\n $disabled &&\n css`\n ${IconContainer}{\n svg {\n path, rect, circle, d {\n stroke: var(--button-disabled-text-color);\n }\n }\n }\n `};\n`;\n\nexport interface IButtonWithIcon extends IButtonProps {\n icon: string;\n position?: 'left' | 'right';\n shadow?: boolean;\n weight?: IWeight;\n}\n\nconst ButtonWithIcon: React.FC<IButtonWithIcon> = ({\n design = 'primary',\n size = 'normal',\n loading = false,\n shadow = false,\n onClick,\n disabled,\n position,\n icon,\n weight = 'regular',\n children,\n ...props\n}) => {\n return (\n <Container>\n <Button\n noPadding\n disabled={disabled || loading}\n {...{ design, size, shadow, onClick, loading }}\n {...props}\n >\n <InnerContainer $disabled={disabled}>\n <TextContainer $size={size} $position={position} $weight={weight}>\n {children}\n </TextContainer>\n <IconArea $loading={loading} $position={position}>\n <IconContainer>\n <Icon icon={icon} weight={weight} />\n </IconContainer>\n <SpinnerContainer>\n <Spinner\n size={size === 'xsmall' || size === 'small' ? 'xsmall' : 'small'}\n styling={design}\n />\n </SpinnerContainer>\n </IconArea>\n </InnerContainer>\n </Button>\n </Container>\n );\n};\n\nexport default ButtonWithIcon;\n","import type React from 'react';\nimport styled, { css } from 'styled-components';\nimport Spinner from '../../Indicators/Spinner';\nimport type { IButtonProps, TypeButtonDesigns, TypeButtonSizes } from '..';\nimport Button from './Button';\n\nconst Container = styled.div`\n display: inline;\n`;\n\nconst TextContainer = styled.div`\n height: inherit;\n flex: 1;\n order: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n white-space: nowrap;\n padding: 0 var(--button-h-padding);\n\n transition: padding var(--speed-slow) var(--easing-primary-in-out);\n`;\n\nconst LoadingContainer = styled.div<{\n $design: TypeButtonDesigns;\n $show?: boolean;\n $position?: string;\n}>`\n height: inherit;\n flex: 0 0 calc((var(--button-h-padding) * 2) + var(--button-icon-size));\n width: calc((var(--button-h-padding) * 2) + var(--button-icon-size));\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n opacity: 0;\n border: 0px solid var(--button-loading-area-divider-color);\n background-color: var(--button-loading-area-background-color);\n\n transition:\n flex var(--speed-slow) var(--easing-primary-in-out) var(--speed-slow),\n opacity var(--speed-slow) var(--easing-primary-in-out);\n\n ${({ $position }) => css`\n order: ${$position && $position === 'left' ? 0 : 2};\n ${$position === 'left' ? `border-right-width: 1px;` : `border-left-width: 1px;`};\n `}\n\n svg {\n display:block;\n }\n`;\n\nconst InnerContainer = styled.div<{\n $position?: string;\n $loading: boolean;\n $design: TypeButtonDesigns;\n $size: TypeButtonSizes;\n}>`\n display: flex;\n flex:1;\n height: inherit;\n\n ${({ $loading }) =>\n $loading\n ? css`\n\n transition: margin var(--speed-slow) var(--easing-primary-in-out);\n\n ${LoadingContainer}{\n opacity: 1;\n transition: flex var(--speed-slow) var(--easing-primary-in-out), opacity var(--speed-slow) var(--easing-primary-in-out) var(--speed-slow);\n }\n `\n : css`\n ${LoadingContainer}{\n flex: 0 0 0px;\n }\n `}\n`;\n\ninterface IProps extends IButtonProps {\n position?: 'left' | 'right';\n shadow?: boolean;\n}\n\nconst ButtonWithLoading: React.FC<IProps> = ({\n design = 'primary',\n size = 'normal',\n shadow = false,\n onClick,\n disabled,\n position,\n loading = false,\n children,\n ...rest\n}) => {\n return (\n <Container>\n <Button\n noPadding\n disabled={disabled || loading}\n {...{ design, size, shadow, onClick, loading }}\n {...rest}\n >\n <InnerContainer $loading={loading} $design={design} $size={size}>\n <TextContainer>{children}</TextContainer>\n <LoadingContainer $design={design} $position={position}>\n <Spinner\n size={size === 'xsmall' || size === 'small' ? 'xsmall' : 'small'}\n styling={design}\n />\n </LoadingContainer>\n </InnerContainer>\n </Button>\n </Container>\n );\n};\n\nexport default ButtonWithLoading;\n","import type { SVGProps } from 'react';\n\nfunction SvgAvatarPlaceholder(props: SVGProps<SVGSVGElement>) {\n return (\n <svg width={48} height={48} aria-hidden='true' {...props} viewBox='0 0 48 48'>\n <g fill='none' fillRule='evenodd' strokeLinecap='round' strokeLinejoin='round'>\n <g stroke='#C1C1C1' strokeWidth='1.5'>\n <g>\n <g>\n <g transform='translate(-789 -294) translate(772 277) translate(10.25 10.25) translate(7.688 7.688)'>\n <rect width='37.477' height='43.242' x='4.324' y='1.441' rx='1.5' />\n <circle cx='23.063' cy='17.456' r='7.899' />\n <path d='M36.035 36.568c-2.537-4.814-7.53-7.828-12.972-7.828-5.442 0-10.436 3.014-12.973 7.828' />\n </g>\n </g>\n </g>\n </g>\n </g>\n </svg>\n );\n}\n\nexport default SvgAvatarPlaceholder;\n","function CheckMark(props: ISvgIcons) {\n return (\n <svg width={props.size} height={props.size} viewBox='0 0 24 24' aria-hidden='true' {...props}>\n <path\n d='M23.848 5.132l-2.967-2.976a.531.531 0 0 0-.753 0L7.595 14.697a.531.531 0 0 1-.752 0l-2.968-2.975a.531.531 0 0 0-.752 0L.156 14.697a.531.531 0 0 0 0 .752l6.687 6.688a.531.531 0 0 0 .752 0L23.848 5.876a.531.531 0 0 0 0-.744z'\n fill='none'\n fillRule='evenodd'\n stroke='#000'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth={1.5}\n />\n </svg>\n );\n}\n\nexport default CheckMark;\n","import type { SVGProps } from 'react';\n\nfunction SvgLogoMark(props: SVGProps<SVGSVGElement>) {\n return (\n <svg width={35} height={35} role='img' {...props}>\n <title>SCORER UI Logo</title>\n <defs>\n <linearGradient id='LogoMark_svg__a' x1='36.708%' x2='69.959%' y1='2.579%' y2='98.009%'>\n <stop offset='0%' stopColor='#7DB8DB' />\n <stop offset='100%' stopColor='#5CA0D1' />\n </linearGradient>\n </defs>\n <g fill='none' fillRule='evenodd'>\n <rect width={35} height={35} fill='url(#LogoMark_svg__a)' rx={5} />\n <path\n fill='#FFF'\n fillRule='nonzero'\n d='M14.42 25.12c4.4 0 6.42-3.06 6.42-7.02v-7.3h-3.9v7.3c0 1.84-.68 3.56-2.52 3.56-1.8 0-2.5-1.68-2.5-3.56v-7.3h-3.9v7.3c0 3.76 1.86 7.02 6.4 7.02zM26.98 25V10.8h-3.9V25h3.9z'\n />\n </g>\n </svg>\n );\n}\n\nexport default SvgLogoMark;\n","import type { SVGProps } from 'react';\n\nfunction SvgLogoText(props: SVGProps<SVGSVGElement>) {\n return (\n <svg width={71} height={30} role='img' {...props}>\n <title>SCORER UI</title>\n <path\n d='M6.088 12.112c2.336 0 4.128-.976 4.128-3.168 0-2.048-1.472-2.72-3.84-3.248-2.048-.464-2.992-.784-2.992-2 0-1.152.8-1.856 2.56-1.856 1.36 0 2.56.592 3.088 1.184l.672-1.168C8.744 1.072 7.496.56 5.976.56c-2.352 0-4.08 1.184-4.08 3.36 0 1.808 1.2 2.432 3.504 2.992 2.112.512 3.28.896 3.28 2.176 0 1.136-.944 1.728-2.56 1.728-1.728 0-3.28-.8-3.968-1.52l-.688 1.216c1.28 1.04 2.88 1.6 4.624 1.6zm11.941-.016c1.76 0 3.792-.944 4.512-2.64l-1.2-.656c-.656 1.408-2.064 2-3.248 2-2.256 0-3.936-2.128-3.936-4.496 0-2.144 1.36-4.432 3.888-4.432 1.152 0 2.48.48 3.152 1.92l1.136-.736C21.63 1.6 20.125.576 18.11.576c-3.424 0-5.408 2.912-5.408 5.664 0 2.88 2.208 5.856 5.328 5.856zm12.134-.016c3.072 0 5.36-2.72 5.36-5.744 0-2.848-2.144-5.776-5.328-5.776-3.072 0-5.376 2.736-5.376 5.76 0 2.912 2.16 5.76 5.344 5.76zm.016-1.296c-2.352 0-3.904-2.144-3.904-4.464 0-2.208 1.488-4.448 3.904-4.448 2.304 0 3.888 2.128 3.888 4.448 0 2.192-1.472 4.464-3.888 4.464zM40.296 12V7.92h3.008L45.896 12h1.632l-2.752-4.352c1.44-.368 2.384-1.792 2.384-3.376C47.16 2.48 45.72.64 43.72.64h-4.864V12h1.44zm3.44-5.36h-3.44V1.92h3.344c1.104 0 2.064 1.072 2.064 2.352 0 1.248-.784 2.368-1.968 2.368zM58.413 12v-1.28h-6.272V6.8h5.328V5.6h-5.328V1.92h6.128V.64h-7.568V12h7.712zm4.742 0V7.92h3.008L68.755 12h1.632l-2.752-4.352c1.44-.368 2.384-1.792 2.384-3.376 0-1.792-1.44-3.632-3.44-3.632h-4.864V12h1.44zm3.44-5.36h-3.44V1.92h3.344c1.104 0 2.064 1.072 2.064 2.352 0 1.248-.784 2.368-1.968 2.368zM4.78 27.05c2.18 0 2.99-1.66 2.99-3.57V19.9h-.7v3.58c0 1.45-.5 2.94-2.3 2.94-1.76 0-2.29-1.45-2.29-2.94V19.9h-.69v3.58c0 1.81.74 3.57 2.99 3.57zm6.193-.05v-7.1h-.7V27h.7zm6.697 0v-2.18L19 23.44 21.71 27h.79l-3.05-3.98 2.9-3.12h-.77l-3.91 4.13v-4.12h-.7V27h.7zm7.263 0v-7.1h-.7V27h.7zm5.124 0v-6.48h2.53v-.62h-5.76v.62h2.53V27h.7z'\n fill='#93A5B2'\n />\n </svg>\n );\n}\n\nexport default SvgLogoText;\n","function SvgNoImage() {\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n width='55'\n height='60'\n fill='none'\n viewBox='5 80 300 174'\n aria-hidden='true'\n >\n <path fill='#F0F0F0' d='M0 0H320V240H0z' />\n <path\n fill='#656565'\n d='M113.8 112.087V130h-1.212c-.192 0-.355-.033-.488-.1a1.246 1.246 0 01-.375-.338l-10.362-13.5a16.889 16.889 0 01.05 1.175V130h-2.126v-17.913h1.251c.108 0 .2.009.275.025.075.009.141.03.2.063a.589.589 0 01.175.125c.058.05.12.117.187.2l10.363 13.487-.05-.625a13.596 13.596 0 01-.013-.587v-12.688h2.125zm21.129 8.963c0 1.342-.212 2.575-.637 3.7a8.463 8.463 0 01-1.8 2.887 8.102 8.102 0 01-2.8 1.888c-1.084.442-2.284.663-3.6.663-1.317 0-2.517-.221-3.6-.663a8.119 8.119 0 01-2.788-1.888 8.463 8.463 0 01-1.8-2.887c-.425-1.125-.637-2.358-.637-3.7s.212-2.571.637-3.688c.425-1.125 1.025-2.091 1.8-2.9a8.052 8.052 0 012.788-1.9c1.083-.45 2.283-.675 3.6-.675 1.316 0 2.516.225 3.6.675a8.035 8.035 0 012.8 1.9c.775.809 1.375 1.775 1.8 2.9.425 1.117.637 2.346.637 3.688zm-2.487 0c0-1.1-.15-2.088-.45-2.963-.3-.875-.725-1.612-1.275-2.212a5.504 5.504 0 00-2-1.4c-.784-.325-1.659-.488-2.625-.488-.959 0-1.829.163-2.613.488a5.618 5.618 0 00-2.012 1.4c-.55.6-.975 1.337-1.275 2.212-.3.875-.45 1.863-.45 2.963s.15 2.087.45 2.962c.3.867.725 1.605 1.275 2.213a5.687 5.687 0 002.012 1.387c.784.317 1.654.475 2.613.475.966 0 1.841-.158 2.625-.475a5.57 5.57 0 002-1.387c.55-.608.975-1.346 1.275-2.213.3-.875.45-1.862.45-2.962zM147.22 130h-2.425v-17.913h2.425V130zm23.22-17.913V130h-2.125v-13.163c0-.175.004-.362.012-.562l.05-.613-6.15 11.2c-.192.375-.483.563-.875.563h-.35c-.392 0-.683-.188-.875-.563l-6.275-11.25c.05.442.075.85.075 1.225V130h-2.125v-17.913h1.788c.216 0 .383.021.5.063.116.042.229.158.337.35l6.188 11.025c.1.2.195.408.287.625.1.217.192.437.275.662.083-.225.171-.445.263-.662.091-.225.191-.438.3-.638l6.075-11.012c.1-.192.208-.308.325-.35a1.66 1.66 0 01.512-.063h1.788zm14.092 11.263l-2.812-7.288a14.972 14.972 0 01-.263-.75c-.091-.291-.179-.6-.262-.925a13.51 13.51 0 01-.538 1.688l-2.812 7.275h6.687zm5.05 6.65h-1.875c-.216 0-.391-.054-.525-.163a1 1 0 01-.3-.412l-1.675-4.325h-8.037l-1.675 4.325a.878.878 0 01-.288.4.794.794 0 01-.525.175h-1.875l7.163-17.913h2.45L189.582 130zm16.443-8.613v6.875c-.9.65-1.862 1.138-2.887 1.463-1.017.317-2.134.475-3.35.475-1.442 0-2.742-.221-3.9-.663-1.159-.45-2.15-1.075-2.975-1.875a8.282 8.282 0 01-1.888-2.9c-.442-1.125-.662-2.362-.662-3.712 0-1.367.212-2.613.637-3.738.433-1.125 1.046-2.087 1.838-2.887.791-.808 1.754-1.433 2.887-1.875 1.133-.442 2.4-.663 3.8-.663.708 0 1.367.055 1.975.163.608.1 1.171.25 1.688.45.516.192.995.429 1.437.712a8.5 8.5 0 011.238.938l-.688 1.1a.739.739 0 01-.425.325c-.167.042-.354 0-.562-.125-.2-.117-.43-.258-.688-.425a5.555 5.555 0 00-.95-.475 7.037 7.037 0 00-1.312-.4c-.5-.108-1.096-.163-1.788-.163-1.008 0-1.921.167-2.737.5a5.683 5.683 0 00-2.088 1.413c-.575.608-1.017 1.35-1.325 2.225-.308.867-.462 1.842-.462 2.925 0 1.125.158 2.133.475 3.025.325.883.783 1.637 1.375 2.262a5.955 5.955 0 002.175 1.413c.85.325 1.804.487 2.862.487.833 0 1.571-.091 2.213-.275a9.829 9.829 0 001.9-.787v-3.938h-2.788a.549.549 0 01-.387-.137.459.459 0 01-.138-.338v-1.375h5.5zm14.762 6.638l-.013 1.975h-11.037v-17.913h11.037v1.975h-8.612v5.95h6.975v1.9h-6.975v6.113h8.625z'\n />\n </svg>\n );\n}\n\nexport default SvgNoImage;\n","import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { CheckMark } from '../../svg';\nimport { dimensions } from '../../theme/common';\n\nenum CheckboxState {\n Off = 'off',\n On = 'on',\n Indeterminate = 'indeterminate',\n}\n\nconst RealInput = styled.input`\n display: none;\n`;\nconst CheckboxOuter = styled.div`\n cursor: pointer;\n\n box-sizing: border-box;\n position: relative;\n width: 18px;\n height: 18px;\n border-radius: 5px;\n border-width: 2px;\n border-style: solid;\n\n transition: \n background-color var(--speed-faster) var(--easing-primary-out),\n border-color var(--speed-faster) var(--easing-primary-out);\n`;\n\nconst CheckboxInner = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n box-sizing: border-box;\n`;\n\nconst IconWrapper = styled.div<{ $color: ISvgIcons['color'] }>`\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n svg {\n display: block;\n [stroke]{\n stroke: transparent;\n }\n [fill] {\n fill: ${({ $color }) => `var(--${$color})`};\n }\n }\n`;\n\nconst Container = styled.label<{ $visualState?: CheckboxState; $disabled?: boolean }>`\n display: inline-block;\n user-select: none;\n ${CheckboxOuter}{\n border: var(--input-toggle-unchecked-border-color) 2px solid;\n }\n\n ${({ $visualState, $disabled }) =>\n $visualState === CheckboxState.Off &&\n css`\n /* Unchecked */\n ${CheckboxOuter}{\n background-color: var(--input-toggle-unchecked-background-color);\n border-color: var(--input-toggle-unchecked-border-color);\n }\n\n /* Unchecked - Hover */\n ${\n !$disabled &&\n css`\n &:hover ${CheckboxOuter} {\n background-color: var(--input-toggle-unchecked-hover-background-color);\n border-color: var(--input-toggle-unchecked-hover-border-color);\n }`\n };\n\n /* Unchecked - Disabled */\n ${\n $disabled &&\n css`\n ${CheckboxOuter}{\n background-color: var(--input-toggle-unchecked-disabled-background-color);\n border-color: var(--input-toggle-unchecked-disabled-border-color);\n border: var(--grey-6) 2px solid;\n cursor: not-allowed;\n }\n `\n }\n `}\n\n ${({ $visualState, $disabled }) =>\n $visualState === CheckboxState.On &&\n css`\n /* Checked */\n ${CheckboxOuter}{\n background-color: var(--input-toggle-checked-background-color);\n border-color: var(--input-toggle-checked-border-color);\n }\n /* Checked - Hover */\n ${\n !$disabled &&\n css`\n &:hover ${CheckboxOuter}{\n background-color: var(--input-toggle-checked-hover-background-color);\n border-color: var(--input-toggle-checked-hover-border-color);\n }`\n };\n\n /* Checked - Disabled */\n ${\n $disabled &&\n css`\n ${CheckboxOuter}{\n background-color: var(--input-toggle-checked-disabled-background-color);\n border-color: var(--input-toggle-checked-disabled-border-color);\n cursor: not-allowed;\n }\n ${IconWrapper}{\n opacity: 0.65;\n }\n `\n }\n `}\n\n ${({ $visualState, $disabled }) =>\n $visualState === CheckboxState.Indeterminate &&\n css`\n ${CheckboxOuter}{\n background-color: var(--input-toggle-intermediate-background-color);\n border-color: var(--input-toggle-intermediate-border-color);\n }\n ${\n !$disabled &&\n css`\n &:hover ${CheckboxOuter}{\n background-color: var(--input-toggle-intermediate-hover-background-color);\n border-color: var(--input-toggle-intermediate-hover-border-color);\n }\n `\n };\n ${\n $disabled &&\n css`\n ${CheckboxOuter}{\n background-color: var(--input-toggle-intermediate-disabled-background-color);\n border-color: var(--input-toggle-intermediate-disabled-border-color);\n cursor: not-allowed;\n }\n ${IconWrapper}{\n opacity: 0.65;\n }\n `\n }\n\n `}\n\n`;\n\ninterface IProps {\n checked?: boolean;\n disabled?: boolean;\n indeterminate?: boolean;\n onChangeCallback?: (checked: boolean, indeterminate?: boolean) => void;\n}\n\nconst Checkbox: React.FC<IProps> = ({\n indeterminate: _indeterminate = false,\n disabled,\n checked = false,\n onChangeCallback,\n}) => {\n const [isChecked, setIsChecked] = useState<boolean>(checked);\n const [visualState, setVisualState] = useState<CheckboxState>(\n checked ? CheckboxState.On : CheckboxState.Off\n );\n\n const customOnChange = (e: React.ChangeEvent<HTMLLabelElement>) => {\n const checked = (e.target as unknown as HTMLInputElement).checked;\n\n setIsChecked(checked);\n if (onChangeCallback) {\n onChangeCallback(checked);\n }\n };\n\n useEffect(() => {\n const state = checked ? CheckboxState.On : CheckboxState.Off;\n // state = indeterminate ? CheckboxState.Indeterminate : state;\n\n setVisualState(state);\n }, [checked]);\n\n useEffect(() => {\n setIsChecked(checked);\n }, [checked]);\n\n const iconWeight: number = dimensions.icons.weights.regular;\n\n return (\n <Container onChange={customOnChange} $disabled={disabled} $visualState={visualState}>\n <CheckboxOuter>\n <CheckboxInner>\n {visualState === CheckboxState.On ? (\n <IconWrapper $color='input-toggle-icon-color'>\n <CheckMark\n color='input-toggle-icon-color'\n stroke='inverse'\n size={12}\n weight={iconWeight}\n />\n </IconWrapper>\n ) : null}\n </CheckboxInner>\n </CheckboxOuter>\n <RealInput type='checkbox' checked={isChecked} readOnly {...{ disabled }} />\n </Container>\n );\n};\n\nexport default Checkbox;\nexport { CheckboxState };\n","import type React from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div<{ $height?: string }>`\n ${({ $height }) => ($height ? `height: ${$height}` : null)};\n position: relative;\n`;\n\nconst DragAndDrop = styled.div<{ $inDropZone: boolean }>`\n border-radius: 5px;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n border: ${({ $inDropZone }) => ($inDropZone ? `dashed var(--grey-8) 2px` : null)};\n`;\n\ninterface IDropArea {\n height?: string;\n text?: string;\n dropCallback?: (newFiles: FileList) => void;\n}\n\nconst DropArea: React.FC<IDropArea> = ({ height, text, dropCallback, ...props }) => {\n const [inDropZone, setInDropZone] = useState(false);\n\n const onDragEnter = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n setInDropZone(true);\n }, []);\n\n const onDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n setInDropZone(false);\n }, []);\n\n const onDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const onDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (e.dataTransfer?.files && dropCallback) {\n dropCallback(e.dataTransfer.files);\n }\n setInDropZone(false);\n },\n [dropCallback]\n );\n\n const handleWindowDragAndDrop = useCallback((e: Event) => {\n e.preventDefault();\n }, []);\n\n useEffect(() => {\n window.addEventListener('dragover', handleWindowDragAndDrop);\n window.addEventListener('drop', handleWindowDragAndDrop);\n return () => {\n window.removeEventListener('dragover', handleWindowDragAndDrop);\n window.removeEventListener('drop', handleWindowDragAndDrop);\n };\n }, [handleWindowDragAndDrop]);\n\n return (\n <Container $height={height} {...props}>\n <DragAndDrop\n $inDropZone={inDropZone}\n {...{\n onDragEnter,\n onDragLeave,\n onDrop,\n onDragOver,\n }}\n >\n {text}\n </DragAndDrop>\n </Container>\n );\n};\n\nexport default DropArea;\n","import type React from 'react';\nimport type { ButtonHTMLAttributes } from 'react';\nimport styled from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport Icon, { type IconProps, IconWrapper } from '../../Icons/Icon';\n\nconst StyledButton = styled.button<{ $color: ISvgIcons['color']; $hoverColor: ISvgIcons['color'] }>`\n ${resetButtonStyles};\n [stroke]{\n stroke: ${({ $color }) => $color};\n }\n &:hover {\n ${IconWrapper} {\n [stroke]{\n stroke: ${({ $hoverColor }) => $hoverColor};\n }\n }\n }\n`;\n\ninterface OwnProps {\n hoverColor?: string;\n}\n\nexport type IconButtonData = OwnProps & IconProps & ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst IconButton: React.FC<IconButtonData> = ({\n icon,\n size = 20,\n weight = 'regular',\n color = 'dimmed',\n hoverColor = 'mono',\n children,\n formAction,\n ...props\n}) => {\n return (\n <StyledButton type='button' $color={color} $hoverColor={hoverColor} {...props}>\n <Icon icon={icon} size={size} weight={weight} />\n </StyledButton>\n );\n};\n\nexport default IconButton;\n","import type React from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport { removeAutoFillStyle } from '../../common';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport Spinner from '../../Indicators/Spinner';\nimport type { TypeFieldState } from '..';\n\nconst ActionContainer = styled.div`\n position: absolute;\n right: 0;\n top: 0;\n`;\n\nconst InputActionButton = styled.button.attrs({ type: 'button' })`\n width: 40px;\n height: 40px;\n background: transparent;\n border: none;\n cursor: pointer;\n outline: none;\n`;\n\nconst FeedbackContainer = styled.div`\n flex-shrink: 0;\n\n background-color: transparent;\n border: 1px solid transparent;\n\n border-left: none;\n border-radius: 0 3px 3px 0;\n overflow: hidden;\n\n display:flex;\n justify-content:left;\n align-items:center;\n`;\n\nconst FeedbackMessage = styled.div`\n flex: 0 1 400px;\n padding: 0 10px 0 0;\n\n font-weight: 500;\n color: var(--white-1);\n`;\n\nconst FeedbackIcon = styled.div`\n flex: 0 0 40px;\n width: 40px;\n display: flex;\n justify-content:center;\n align-items:center;\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--white-1);\n }\n }\n`;\n\nconst StyledInput = styled.input<{ $fieldState: TypeFieldState }>`\n ${removeAutoFillStyle};\n\n ${({ $fieldState }) => css`\n border: 1px solid var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-background-color);\n box-shadow: var(--input-box-shadow-x) var(--input-box-shadow-y) var(--input-box-shadow-blur) var(--input-box-shadow-spread) var(--input-${$fieldState}-shadow-color, transparent);\n `};\n\n font-family: var(--font-data);\n\n height: var(--input-height);\n width: 100%;\n border-radius: 3px;\n\n padding: 0 15px 0 15px;\n box-sizing: border-box;\n outline: none;\n\n color: var(--input-color-default);\n font-size: 14px;\n\n transition:\n border var(--speed-fast) var(--easing-primary-out),\n background-color var(--speed-fast) var(--easing-primary-out),\n box-shadow var(--speed-fast) var(--easing-primary-out);\n\n &::placeholder {\n font-family: var(--font-data);\n color: var(--input-color-placeholder);\n font-style: italic;\n font-weight: 400;\n }\n\n &:lang(ja)::placeholder {\n font-style: normal;\n };\n`;\n\nconst InputContainer = styled.div<{ $hasAction?: boolean }>`\n\n flex: 1;\n position: relative;\n\n ${({ $hasAction }) =>\n $hasAction &&\n css`\n ${StyledInput}{\n padding-right: 60px;\n\n // Used to control password manager injection.\n background-position: calc(100% - 50px) 50% !important;\n }\n `}\n\n`;\n\nconst Container = styled.div<{ $fieldState: TypeFieldState; $showFeedback?: boolean }>`\n ${({ $fieldState, $showFeedback }) => css`\n\n display: flex;\n position: relative;\n flex-direction: row;\n\n ${StyledInput}{\n\n &:disabled {\n cursor: not-allowed;\n }\n\n ${\n ['default', 'disabled'].indexOf($fieldState) === -1 &&\n $showFeedback &&\n css`\n border-top-right-radius: 0px;\n border-bottom-right-radius: 0px;\n `\n };\n\n }\n\n ${FeedbackContainer} {\n ${\n ['default', 'disabled'].indexOf($fieldState) !== -1 &&\n css`\n display: none;\n `\n };\n border-color: var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-border-color);\n }\n\n &:focus-within ${StyledInput} {\n border-color: var(--input-${$fieldState}-focused-border-color, var(--input-${$fieldState}-border-color));\n box-shadow: var(--input-focused-box-shadow-x) var(--input-focused-box-shadow-y) var(--input-focused-box-shadow-blur) var(--input-focused-box-shadow-spread) var(--input-${$fieldState}-focused-shadow-color);\n }\n `}\n\n`;\n\ninterface OwnProps {\n fieldState?: TypeFieldState;\n showFeedback?: boolean;\n feedbackMessage?: string;\n actionCallback?: () => void;\n actionIcon?: string;\n postfix?: string;\n}\n\nexport type InputProps = OwnProps & InputHTMLAttributes<HTMLInputElement>;\n\nconst Input: React.FC<InputProps> = ({\n type = 'text',\n placeholder = '',\n defaultValue,\n fieldState = 'default',\n showFeedback = false,\n feedbackMessage,\n actionCallback,\n actionIcon,\n postfix,\n children,\n formAction,\n ...props\n}) => {\n const isActionButton = actionCallback !== undefined;\n\n const feedbackIcon = (fieldState: TypeFieldState) => {\n switch (fieldState) {\n case 'default':\n break;\n case 'disabled':\n break;\n case 'required':\n return <Icon icon='Required' size={16} />;\n case 'valid':\n return <Icon icon='Success' size={16} />;\n case 'invalid':\n return <Icon icon='Invalid' size={16} />;\n case 'processing':\n return <Spinner size='medium' styling='primary' />;\n }\n };\n\n return (\n <Container $fieldState={fieldState || 'default'} $showFeedback={showFeedback}>\n <InputContainer $hasAction={isActionButton}>\n <StyledInput\n $fieldState={fieldState || 'default'}\n disabled={fieldState === 'disabled' || fieldState === 'processing'}\n type={type}\n placeholder={placeholder}\n defaultValue={defaultValue}\n {...props}\n />\n {isActionButton ? (\n <ActionContainer>\n <InputActionButton onClick={actionCallback}>\n <Icon icon={actionIcon || 'NoIcon'} color='primary' />\n </InputActionButton>\n </ActionContainer>\n ) : null}\n </InputContainer>\n\n {fieldState && showFeedback ? (\n <FeedbackContainer>\n <FeedbackIcon>{feedbackIcon(fieldState)}</FeedbackIcon>\n {feedbackMessage ? <FeedbackMessage>{feedbackMessage}</FeedbackMessage> : null}\n </FeedbackContainer>\n ) : null}\n </Container>\n );\n};\n\nexport default Input;\n","import type React from 'react';\nimport { type ChangeEvent, type InputHTMLAttributes, useCallback, useRef } from 'react';\nimport styled from 'styled-components';\nimport type { TypeButtonDesigns, TypeButtonSizes } from '..';\nimport Button from './Button';\n\nconst Container = styled.div``;\nconst HiddenInput = styled.input`\n display: none;\n`;\n\ninterface OwnProps {\n text: string;\n buttonSize?: TypeButtonSizes;\n buttonDesign?: TypeButtonDesigns;\n inputCallback: (newFiles: FileList) => void;\n}\n\ntype IFileInput = OwnProps & InputHTMLAttributes<HTMLInputElement>;\nconst InputFileButton: React.FC<IFileInput> = ({\n text,\n buttonDesign,\n buttonSize,\n inputCallback,\n children,\n formAction,\n ...props\n}) => {\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleFile = useCallback(\n async (e: ChangeEvent<HTMLInputElement>) => {\n if (!(e.target.files && e.target.files.length > 0)) {\n return;\n }\n const newFiles: FileList = e.target.files;\n if (inputCallback) {\n inputCallback(newFiles);\n }\n e.target.value = '';\n },\n [inputCallback]\n );\n\n const forwardClick = useCallback(() => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n }, []);\n\n return (\n <Container>\n <HiddenInput {...props} ref={fileInputRef} type='file' onChange={handleFile} />\n <Button\n style={{ textAlign: 'center' }}\n onClick={forwardClick}\n design={buttonDesign}\n size={buttonSize}\n >\n {text}\n </Button>\n </Container>\n );\n};\n\nexport default InputFileButton;\n","import type React from 'react';\nimport type { LabelHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport type { TypeLabelDirection } from '..';\n\nconst LabelText = styled.span<{ $required?: boolean }>`\n display: flex;\n flex: 1;\n align-items: center;\n gap: 8px;\n\n ${({ $required }) =>\n $required &&\n css`\n &::after {\n content: '';\n display: var(--input-required-dot-display);\n height: 8px;\n width: 8px;\n background-color: var(--primary-9);\n border-radius: 4px;\n }\n `}\n`;\n\nexport const StyledLabel = styled.label<{ $direction?: TypeLabelDirection }>`\n font-family: var(--font-ui);\n color: var(--grey-11);\n font-size: 14px;\n font-weight: 500;\n\n display: flex;\n gap: 8px;\n\n ${({ $direction }) =>\n $direction &&\n css`\n flex-direction: ${$direction};\n ${\n ['row', 'row-reverse'].includes($direction) &&\n css`\n display: inline-flex;\n \n ${LabelText}{\n align-self: center;\n }\n `\n }\n `}\n`;\n\ninterface OwnProps {\n htmlFor: string;\n labelText: string;\n direction?: TypeLabelDirection;\n rightAlign?: boolean;\n required?: boolean;\n}\ntype Props = OwnProps & LabelHTMLAttributes<HTMLLabelElement>;\n\nconst Label: React.FC<Props> = ({\n htmlFor,\n labelText,\n direction = 'column',\n rightAlign = false,\n required = false,\n children,\n ...props\n}) => {\n if (rightAlign) {\n console.warn(\n \"Deprecation warning: `Label` is deprecating `rightAlign`, please update this to use `direction='row-reverse'` instead.\"\n );\n direction = 'row-reverse';\n }\n\n return (\n <StyledLabel htmlFor={htmlFor} $direction={direction} {...props}>\n <LabelText $required={required}>{labelText}</LabelText>\n {children}\n </StyledLabel>\n );\n};\n\nexport default Label;\n","import type React from 'react';\nimport { type InputHTMLAttributes, useCallback } from 'react';\nimport styled, { css } from 'styled-components';\n\nconst InnerRadio = styled.div`\n width: 10px;\n height: 10px;\n border-radius: 50%;\n user-select: none;\n`;\n\nconst OuterRadio = styled.div<{ $isChecked: boolean; $disabled: boolean }>`\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n border-radius: 50%;\n border-width: 2px;\n border-style: solid;\n user-select: none;\n\n ${({ $isChecked, $disabled }) => css`\n border-color: var(--input-toggle-unchecked-border-color);\n\n ${\n !$disabled &&\n css`\n &:hover {\n cursor: pointer;\n border-color: var(--input-toggle-unchecked-hover-border-color);\n }\n `\n };\n\n ${\n $isChecked &&\n !$disabled &&\n css`\n border-color: var(--input-toggle-checked-border-color);\n ${InnerRadio} {\n background-color: var(--input-toggle-checked-background-color);\n }\n `\n };\n\n ${\n $isChecked &&\n !$disabled &&\n css`\n &:hover {\n border-color: var(--input-toggle-checked-hover-border-color);\n ${InnerRadio} {\n background-color: var(--input-toggle-checked-hover-background-color);\n }\n }\n `\n };\n\n ${\n $isChecked &&\n $disabled &&\n css`\n cursor: not-allowed;\n border-color: var(--input-toggle-checked-disabled-border-color);\n ${InnerRadio} {\n background-color: var(--input-toggle-checked-disabled-background-color);\n }\n `\n };\n\n ${\n !$isChecked &&\n $disabled &&\n css`\n cursor: not-allowed;\n border-color: var(--input-toggle-unchecked-disabled-border-color);\n ${InnerRadio} {\n background-color: var(--input-toggle-unchecked-disabled-background-color);\n }\n `\n }\n `};\n`;\n\nconst HiddenInput = styled.input`\n position: absolute;\n height: 100%;\n width: 100%;\n margin: 0;\n padding:0;\n opacity: 0;\n`;\n\nconst Container = styled.div`\n position: relative;\n display: inline-block;\n width: 18px;\n height: 18px;\n user-select: none;\n border-radius: 50%;\n`;\n\ninterface OwnProps {\n currentChecked?: number | string;\n onChangeCallback?: (value: number | string) => void;\n}\n\ntype IRadioButton = OwnProps & InputHTMLAttributes<HTMLInputElement>;\n\nconst RadioButton: React.FC<IRadioButton> = ({\n id,\n value,\n name,\n currentChecked,\n disabled = false,\n required,\n onChangeCallback = () => {},\n}) => {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checkedValue = e.target.value;\n onChangeCallback(checkedValue);\n },\n [onChangeCallback]\n );\n\n const isChecked = currentChecked !== undefined ? currentChecked === value : false;\n\n return (\n <Container>\n <HiddenInput\n type='radio'\n {...{ id, name, disabled, required, value }}\n checked={isChecked}\n onChange={handleChange}\n />\n <OuterRadio $isChecked={isChecked} $disabled={disabled}>\n <InnerRadio />\n </OuterRadio>\n </Container>\n );\n};\n\nexport default RadioButton;\n","import type React from 'react';\nimport { type SelectHTMLAttributes, useCallback, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport Icon from '../../Icons/Icon';\nimport type { TypeFieldState, TypeLabelDirection } from '..';\nimport Label from './Label';\n\nexport const SelectWrapper = styled.div`\n position: relative;\n display: flex;\n width: 100%;\n`;\n\nconst OpenIcon = styled.div<{ $isCompact?: boolean }>`\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n right: ${({ $isCompact }) => ($isCompact ? '14px' : '16px')};\n pointer-events: none;\n`;\n\nconst SubjectIcon = styled.div<{ $isCompact?: boolean }>`\n position: absolute;\n left: ${({ $isCompact }) => ($isCompact ? '10px' : '12px')};\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n`;\n\nconst StyledSelect = styled.select<{\n $fieldState: TypeFieldState;\n $withIcon?: boolean;\n $isCompact?: boolean;\n}>`\n box-sizing: border-box;\n outline: none;\n border-radius: 3px;\n appearance: none;\n font-family: var(--font-data);\n height: var(--input-height);\n width: 100%;\n border-radius: 3px;\n color: var(--input-color-default);\n font-size: 14px;\n cursor: pointer;\n\n transition:\n border var(--speed-fast) var(--easing-primary-out),\n background-color var(--speed-fast) var(--easing-primary-out),\n box-shadow var(--speed-fast) var(--easing-primary-out);\n\n ${({ $fieldState }) => css`\n border: 1px solid var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-background-color);\n box-shadow: var(--input-box-shadow-x) var(--input-box-shadow-y) var(--input-box-shadow-blur) var(--input-box-shadow-spread) var(--input-${$fieldState}-shadow-color, transparent);\n `};\n\n\n ${({ $isCompact, $withIcon }) =>\n $isCompact\n ? css`\n height: var(--input-compact-height);\n padding: 0 16px 1px ${$withIcon ? '30px' : '8px'};\n\n ${OpenIcon}{\n right: 14px;\n }\n `\n : css`\n height: var(--input-height);\n padding: 0 16px 1px ${$withIcon ? '36px' : '12px'};\n `};\n\n &:disabled {\n opacity: 1;\n cursor: not-allowed;\n color: var(--input-disabled-color-default);\n border: 1px solid var(--input-disabled-border-color);\n background: var(--input-disabled-background-color);\n box-shadow: var(--input-box-shadow-x) var(--input-box-shadow-y) var(--input-box-shadow-blur) var(--input-box-shadow-spread) var(--input-disabled-shadow-color, transparent);\n }\n\n &::-ms-expand {\n display: none;\n }\n`;\n\nconst Container = styled.div<{ $isCompact?: boolean; $activePlaceholder: boolean }>`\n\n ${({ $activePlaceholder }) =>\n $activePlaceholder &&\n css`\n ${StyledSelect} {\n font-family: var(--font-data);\n color: var(--input-color-placeholder);\n font-style: italic;\n &:lang(ja) {\n font-style: normal;\n }\n font-weight: 400;\n }\n `};\n\n`;\n\ninterface ILabel {\n htmlFor: string;\n text: string;\n isSameRow?: boolean;\n direction?: TypeLabelDirection;\n}\n\ninterface OwnProps {\n fieldState?: TypeFieldState;\n label?: ILabel;\n isCompact?: boolean;\n placeholder?: string;\n icon?: string;\n changeCallback?: (value: string) => void;\n}\n\ntype ISelect = OwnProps & SelectHTMLAttributes<HTMLSelectElement>;\n\nconst SelectField: React.FC<ISelect> = ({\n fieldState = 'default',\n placeholder,\n label,\n icon,\n isCompact,\n defaultValue,\n changeCallback = () => {},\n children,\n ...props\n}) => {\n if (label?.isSameRow) {\n console.warn(\n 'Deprecation warning: `SelectField` is deprecating `label.isSameRow`, please update this to use `label.direction` set to `row`.'\n );\n }\n\n const [activePlaceholder, setPlaceholderStatus] = useState<boolean>(!defaultValue);\n\n const handleOnChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n const { value } = e.target;\n\n setPlaceholderStatus((prev) => {\n if (prev) {\n return false;\n }\n return prev;\n });\n changeCallback(value);\n },\n [changeCallback]\n );\n\n const iconColor = useCallback(() => {\n if (props.disabled || fieldState === 'disabled') {\n return 'input-disabled-lead-icon';\n } else {\n return 'input-lead-icon';\n }\n }, [fieldState, props.disabled]);\n\n const renderSelect = useCallback(\n (htmlFor?: string) => (\n <SelectWrapper>\n {icon && (\n <SubjectIcon $isCompact={isCompact}>\n <Icon icon={icon} color={iconColor()} size={isCompact ? 12 : 12} weight='regular' />\n </SubjectIcon>\n )}\n <StyledSelect\n $withIcon={!!icon}\n id={htmlFor}\n $fieldState={fieldState}\n $isCompact={isCompact}\n {...props}\n {...(props.value === undefined ? { defaultValue: defaultValue ?? '' } : {})}\n onChange={handleOnChange}\n >\n {!defaultValue && (\n <option value='' disabled hidden>\n {placeholder}\n </option>\n )}\n {children}\n </StyledSelect>\n <OpenIcon $isCompact={isCompact}>\n <Icon icon='Down' color={iconColor()} weight='regular' size={isCompact ? 8 : 10} />\n </OpenIcon>\n </SelectWrapper>\n ),\n [\n children,\n defaultValue,\n handleOnChange,\n placeholder,\n // biome-ignore lint/correctness/useExhaustiveDependencies: props is the rest object from the destructuring of OwnProps & SelectHTMLAttributes — its identity changes every render. Stabilising requires an API change to forward props explicitly. See #644.\n props,\n fieldState,\n icon,\n iconColor,\n isCompact,\n ]\n );\n\n return (\n <Container {...{ $isCompact: isCompact, $activePlaceholder: activePlaceholder }}>\n {label ? (\n <Label\n htmlFor={label.htmlFor}\n labelText={label.text}\n direction={label.isSameRow ? 'row' : label.direction}\n >\n {renderSelect(label.htmlFor)}\n </Label>\n ) : (\n renderSelect()\n )}\n </Container>\n );\n};\n\nexport default SelectField;\n","import { isEqual } from 'date-fns';\nimport type { ITimeUnit } from '..';\nimport type { IDateInterval } from '../Filters';\n\nconst isInsideRange = (value: number, min: number, max: number): boolean => {\n if (value < min) {\n return false;\n }\n if (value > max) {\n return false;\n }\n return true;\n};\n\n// verifies if a number is inside a boundary if not updates it's value to the max or min boundary value.\nconst clamp = (value: number, minValue: number, maxValue: number) => {\n return Math.min(Math.max(value, minValue), maxValue);\n};\n\n/**\n * Helper for adding appropriate text to a time number\n * Default is hours\n */\nconst getTextTimeUnit = (value: number, unit: ITimeUnit) => {\n switch (unit) {\n case 'seconds':\n return value < 2 ? `Second` : `Seconds`;\n\n case 'minutes':\n return value < 2 ? `Minute` : `Minutes`;\n\n default:\n return value < 2 ? `Hour` : `Hours`;\n }\n};\n\n/**\n * Helper for adding appropriate text to a time number\n * Default is hours\n */\nconst getShortTextTimeUnit = (value: number, unit: string) => {\n switch (unit) {\n case 'seconds':\n return value < 2 ? `sec` : `secs`;\n\n case 'minutes':\n return value < 2 ? `min` : `mins`;\n\n default:\n return value < 2 ? `hr` : `hrs`;\n }\n};\n\nexport const isTimeUnit = (value: unknown) => {\n switch (value) {\n case 'seconds':\n case 'minutes':\n case 'hours':\n return true;\n default:\n return false;\n }\n};\n\nconst getTopLevelPath = (pathname: string) => {\n const parts = pathname.split('/').filter(String);\n return parts.length > 0 ? `/${parts[0]}` : '/';\n};\n\nconst getImageType = (img: HTMLImageElement) => {\n const dataType = img.src.substr(0, 20);\n if (dataType.includes('data')) {\n return dataType.split('/')[1].split(';')[0];\n }\n return 'image/jpeg';\n};\n\nconst isValidImage = (file: File) => {\n const acceptedImageTypes = ['image/jpeg', 'image/png'];\n\n return file && acceptedImageTypes.includes(file.type);\n};\n\nconst uniqueID = () =>\n String(Date.now().toString(32) + Math.random().toString(16)).replace(/\\./g, '');\n\n// https://stackoverflow.com/questions/30314447/how-do-you-test-for-nan-in-javascript\nconst isNotNumber = (value: string) => {\n const intValue = Number(value);\n\n return Number.isNaN(intValue);\n};\n\nconst areDatesEqual = (\n storedValue: IDateInterval | Date | null | undefined,\n currentDisplay: IDateInterval | Date | null\n): boolean => {\n if (storedValue === null && currentDisplay === null) {\n return true;\n }\n\n if (storedValue === undefined && currentDisplay === null) {\n return true;\n }\n\n if (isDateInterval(storedValue) && isDateInterval(currentDisplay)) {\n return (\n isEqual(storedValue?.start, currentDisplay?.start) &&\n isEqual(storedValue?.end, currentDisplay?.end)\n );\n }\n\n if (storedValue instanceof Date && currentDisplay instanceof Date) {\n return isEqual(storedValue, currentDisplay);\n }\n\n return false;\n};\n\nconst isDateInterval = (value: unknown): value is IDateInterval => {\n if (value === null || value === undefined) {\n return false;\n }\n\n if (typeof value !== 'object') {\n return false;\n }\n\n const record = value as Record<string, unknown>;\n\n if (record.start === null || record.start === undefined) {\n return false;\n }\n\n if (record.end === null || record.end === undefined) {\n return false;\n }\n\n return record.start instanceof Date && record.end instanceof Date;\n};\n\nexport {\n areDatesEqual,\n clamp,\n getImageType,\n getShortTextTimeUnit,\n getTextTimeUnit,\n getTopLevelPath,\n isDateInterval,\n isInsideRange,\n isNotNumber,\n isValidImage,\n uniqueID,\n};\n","import type React from 'react';\nimport {\n type ChangeEvent,\n Fragment,\n type InputHTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport styled, { css } from 'styled-components';\nimport { isInsideRange } from '../../helpers';\nimport type { IFeedbackColor } from '../../index';\n\n/**\n * TODO to support all input range features\n * Currently you can pass this values but to be visually correct the needs to work around the current implementation.\n * Step\n * Vertical usage\n */\n\nconst ThumbDiameter = 16;\n\nconst SliderWrapper = styled.div<{ $disabled: boolean }>`\n font-family: ${({ theme }) => theme.fontFamily.data};\n position: relative;\n height: 30px;\n margin-top: 20px;\n ${({ $disabled }) =>\n $disabled &&\n css`\n opacity: .5;\n `};\n`;\n\nconst HiddenInput = styled.input<{ disabled: boolean }>`\n width: 100%;\n margin: 0;\n padding:0;\n opacity: .001;\n z-index: 99;\n cursor: ${({ disabled }) => (disabled ? `not-allowed` : `pointer`)};\n`;\n\nconst Rail = styled.div`\n position: absolute;\n left: ${ThumbDiameter / 2}px;\n top: 10px;\n width: calc(100% - ${ThumbDiameter}px);\n height: 2px;\n border-radius: 11px;\n background-image: linear-gradient(to bottom, var(--grey-10), var(--primary-10) 98%);\n`;\n\nconst Mark = styled.span<{ $leftValue: number }>`\n position: absolute;\n top: -3px;\n left: ${({ $leftValue }) => `calc(${$leftValue}% + 7px)`};\n width: 1px;\n height: 9px;\n opacity: 0.25;\n background-color: var(--primary-11);\n`;\n\nconst MarkLabel = styled.span<{ $leftValue: number; $alignment?: IMarkAlignment }>`\n position: absolute;\n top: -24px;\n left: ${({ $leftValue }) => `calc(${$leftValue}% + 7px)`};\n\n font-size: 10px;\n font-style: italic;\n &:lang(ja) {\n font-style: normal;\n }\n line-height: normal;\n text-align: center;\n color: var(--grey-a11);\n\n ${({ $alignment }) => ($alignment === 'center') && css`transform: translateX(-50%);;`}\n ${({ $alignment }) => ($alignment === 'right') && css`transform: translateX(5%);`}\n ${({ $alignment }) => ($alignment === 'left') && css`transform: translateX(-95%);`}\n`;\n\nconst ThumbWrapper = styled.div`\n position: relative;\n margin-right: 16px;\n left: 0;\n top: 10px;\n width: calc(100% - ${ThumbDiameter}px);\n height: 2px;\n`;\n\nconst Thumb = styled.span<{ $leftValue: number; $bgColor: IFeedbackColor }>`\n width: ${ThumbDiameter}px;\n height: ${ThumbDiameter}px;\n border-radius: 8px;\n background-color: ${({ theme, $bgColor }) => theme.colors.feedback[$bgColor]};\n position: absolute;\n top: -7.5px;\n left: ${({ $leftValue }) => `${$leftValue}%`};\n`;\n\nconst GhostThumb = styled(Thumb)`\n opacity: .5;\n`;\n\nconst thumbLeftPosition = (value: number, min: number, max: number) => {\n return valueToPercent(value, min, max);\n};\n\nconst nearMark = (value: number, marks: ISliderMark[]): number => {\n const closest = marks.reduce((prev, curr) => {\n return Math.abs(curr.value - value) < Math.abs(prev.value - value) ? curr : prev;\n });\n\n return closest.value;\n};\n\n/**\n * Rules for a getValidMin\n * Max needs to be bigger than Min\n * if Min is not available and Max is positive default is 0\n * if Min is not available Max is negative min will be reduce by 1\n */\nconst getValidMin = (max: number, min?: number): number => {\n if (!max && !min) {\n return 0;\n }\n\n if (!min) {\n if (max > 0) {\n return 0;\n } else {\n return max - 1;\n }\n }\n return min;\n};\n\n/**\n *\n * Max is required but null because it cans o.O\n * if Max is less value than min fix to one more than min\n */\nconst getValidMax = (max: number, min?: number): number => {\n if (max === null && !min) {\n return 100;\n }\n\n if (min && min > max) {\n return min + 1;\n }\n\n return max;\n};\n\nconst valueToPercent = (value: number, min: number, max: number): number => {\n return Math.round(((value - min) * 100) / (max - min));\n};\n\n// const percentToValue = (percent: number, min: number, max: number) : number => {\n// return (max - min) * percent + min;\n// };\n\nconst getMarkAlignment = (value: number, min: number, max: number): IMarkAlignment => {\n if (value === min) {\n return 'right';\n }\n\n if (value === max) {\n return 'left';\n }\n\n return 'center';\n};\n\nconst renderMarks = (\n markList: ISliderMark[],\n min: number,\n max: number,\n listTag: string,\n allMarkCentered?: boolean\n) => {\n const listOptions: React.JSX.Element[] = [];\n const marksElements = markList.map(({ value, label }, index) => {\n // * first and last should be 0% and 100%\n const left = index === markList.length - 1 ? 100 : valueToPercent(value, min, max);\n listOptions.push(<option key={`option-${value}`}>{value}</option>);\n\n return (\n <Fragment key={`mark-${value}`}>\n <Mark data-leftvalue={`${left}%`} $leftValue={left} />\n <MarkLabel\n $leftValue={left}\n $alignment={allMarkCentered ? 'center' : getMarkAlignment(value, min, max)}\n >\n {label}\n </MarkLabel>\n </Fragment>\n );\n });\n\n return (\n <Fragment>\n {marksElements}\n <datalist id={listTag}>{listOptions}</datalist>\n </Fragment>\n );\n};\n\nexport type IMarkAlignment = 'left' | 'center' | 'right';\n\nexport interface ISliderMark {\n value: number;\n label?: string;\n}\n\ninterface ISliderOwnProps {\n min?: number;\n max: number;\n step?: number;\n marks?: ISliderMark[];\n defaultValue?: number;\n value?: number;\n thumbColor?: IFeedbackColor;\n onlyMarkSelect?: boolean;\n showValue?: boolean;\n inputCallback?: (value: number) => void;\n onChangeCallback?: (value: number) => void;\n allMarkCentered?: boolean;\n}\n\nexport type ISlider = ISliderOwnProps & InputHTMLAttributes<HTMLInputElement>;\n\nlet ghostThumbValue = 0;\n\nconst SliderInput: React.FC<ISlider> = ({\n min,\n max,\n marks,\n defaultValue,\n thumbColor = 'info',\n disabled = false,\n onlyMarkSelect = false,\n inputCallback = () => {},\n onChangeCallback = () => {},\n allMarkCentered = false,\n showValue: _showValue,\n children,\n formAction,\n ...props\n}) => {\n const maxValid = getValidMax(max, min);\n const minValid = getValidMin(max, min);\n const initValue =\n defaultValue && isInsideRange(defaultValue, minValid, maxValid) ? defaultValue : minValid;\n\n const [selectedValue, setSelectedValue] = useState(initValue);\n const [isGhostActive, setIsGhostActive] = useState(false);\n\n const thumbValueRef = useRef(thumbLeftPosition(selectedValue, minValid, maxValid));\n\n if (marks && onlyMarkSelect) {\n const mark = nearMark(selectedValue, marks);\n const ghostVal = thumbLeftPosition(mark, minValid, maxValid);\n ghostThumbValue = ghostVal;\n }\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>, lastValue: number) => {\n const val = e.target.value;\n if (val === null) {\n return;\n }\n const numericVal = parseInt(val, 10);\n\n thumbValueRef.current = thumbLeftPosition(numericVal, minValid, maxValid);\n const mark = marks ? nearMark(numericVal, marks) : numericVal;\n const prevMark = marks ? nearMark(lastValue, marks) : numericVal;\n\n if (onlyMarkSelect && prevMark !== mark) {\n onChangeCallback(mark);\n }\n\n if (!onlyMarkSelect) {\n onChangeCallback(numericVal);\n }\n\n setSelectedValue((prev) => {\n if (numericVal === prev) {\n return prev;\n }\n return numericVal;\n });\n },\n [marks, maxValid, minValid, onChangeCallback, onlyMarkSelect]\n );\n\n const handleSelectStart = useCallback(() => {\n setIsGhostActive(true);\n }, []);\n\n const handleSelectEnd = useCallback(\n (currentValue: number) => {\n if (onlyMarkSelect) {\n inputCallback(ghostThumbValue);\n } else {\n inputCallback(currentValue);\n }\n\n if (onlyMarkSelect) {\n thumbValueRef.current = ghostThumbValue;\n }\n\n setIsGhostActive(false);\n },\n [inputCallback, onlyMarkSelect]\n );\n\n useEffect(() => {\n const initValue =\n defaultValue && isInsideRange(defaultValue, minValid, maxValid) ? defaultValue : minValid;\n thumbValueRef.current = thumbLeftPosition(initValue, minValid, maxValid);\n setSelectedValue(initValue);\n }, [defaultValue, maxValid, minValid]);\n\n return (\n <SliderWrapper $disabled={disabled}>\n <Rail />\n <ThumbWrapper>\n {marks &&\n renderMarks(\n marks,\n minValid,\n maxValid,\n `sliderList-${minValid}-${maxValid}`,\n allMarkCentered\n )}\n {isGhostActive && onlyMarkSelect ? (\n <GhostThumb\n data-value={selectedValue}\n $leftValue={ghostThumbValue}\n data-percentage={ghostThumbValue}\n $bgColor={thumbColor}\n />\n ) : null}\n <Thumb\n data-value={selectedValue}\n $leftValue={thumbValueRef.current}\n data-percentage={thumbValueRef.current}\n $bgColor={thumbColor}\n />\n </ThumbWrapper>\n <HiddenInput\n {...props}\n type='range'\n disabled={disabled}\n list={`sliderList-${minValid}-${maxValid}`}\n min={minValid}\n max={maxValid}\n value={selectedValue}\n onMouseUp={() => handleSelectEnd(selectedValue)}\n onMouseDown={handleSelectStart}\n onTouchStart={() => handleSelectEnd(selectedValue)}\n onTouchEnd={handleSelectStart}\n onChange={(e) => handleInputChange(e, selectedValue)}\n />\n </SliderWrapper>\n );\n};\n\nexport default SliderInput;\n","import type React from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport { removeAutoFillStyle } from '../../common';\nimport type { TypeFieldState } from '..';\nimport Label from '../atoms/Label';\n\nconst StyledInput = styled.input<{ $fieldState: TypeFieldState }>`\n ${removeAutoFillStyle};\n\n font-family: var(--font-data);\n line-height: var(--input-compact-height);\n\n font-size: 14px;\n flex: 1;\n color: var(--input-color-default);\n width: 100%;\n border: none;\n background-color: transparent;\n box-sizing: border-box;\n outline: none;\n\n &::placeholder {\n color: var(--input-color-placeholder);\n font-style: italic;\n }\n\n &:lang(ja)::placeholder {\n font-style: normal;\n };\n\n &:disabled {\n cursor: not-allowed;\n color: var(--input-color-disabled);\n }\n`;\n\nconst InputContainer = styled.div<{ $fieldState: TypeFieldState; $hasAction?: boolean }>`\n display: flex;\n height: var(--input-compact-height);\n padding: 0 8px;\n align-items: center;\n gap: 8px;\n position: relative;\n border-radius: 3px;\n\n ${({ $fieldState }) => css`\n border: 1px solid var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-background-color);\n transition:\n border var(--speed-normal) var(--easing-primary-out),\n background-color var(--speed-normal) var(--easing-primary-out);\n `};\n\n ${({ $hasAction }) =>\n $hasAction &&\n css`\n ${StyledInput}{\n padding-right: 200px;\n\n // Used to control password manager injection.\n background-position: calc(100% - 50px) 50% !important;\n }\n `}\n\n`;\n\nconst UnitKey = styled.div`\n flex: 0 1;\n font-size: 12px;\n font-family: var(--font-ui);\n color: var(--input-color-unit);\n margin-top: 1px;\n white-space: nowrap;\n`;\n\nconst Container = styled.div<{ $fieldState: string }>`\n position: relative;\n\n ${({ $fieldState }) =>\n $fieldState &&\n css`\n &:focus-within ${InputContainer} {\n transition: boxShadow var(--speed-fast) var(--easing-primary-in-out);\n box-shadow: 0 3px 3px var(--input-${$fieldState}-focused-shadow-color, var(--input-${$fieldState}-shadow-color));\n }\n `};\n`;\n\ninterface OwnProps {\n fieldState?: TypeFieldState;\n label: string;\n unit?: string;\n}\n\ntype Props = OwnProps & InputHTMLAttributes<HTMLInputElement>;\n\nconst SmallInput: React.FC<Props> = ({\n unit,\n label,\n name,\n type = 'text',\n placeholder = '',\n defaultValue,\n fieldState = 'default',\n required = false,\n className,\n children,\n formAction,\n ...props\n}) => {\n return (\n <Container className={className} $fieldState={fieldState || 'default'}>\n <Label labelText={label} htmlFor={name || ''} {...{ required }}>\n <InputContainer $fieldState={fieldState || 'default'}>\n <StyledInput\n $fieldState={fieldState || 'default'}\n type={type}\n placeholder={placeholder}\n defaultValue={defaultValue}\n {...props}\n />\n {unit ? <UnitKey>{unit}</UnitKey> : null}\n </InputContainer>\n </Label>\n </Container>\n );\n};\n\nexport default SmallInput;\n","import type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Icon from '../../Icons/Icon';\nimport Spinner from '../../Indicators/Spinner';\nimport { StyledLabel } from './Label';\n\nenum SwitchPosition {\n Off = 0,\n On = 1,\n Neutral = 2,\n Locked = 3,\n}\n\ntype PositionKey = 'off' | 'on' | 'neutral' | 'locked';\n\nconst getPositionKey = (switchPos: SwitchPosition): PositionKey => {\n switch (switchPos) {\n case SwitchPosition.Off:\n return 'off';\n case SwitchPosition.On:\n return 'on';\n case SwitchPosition.Neutral:\n return 'neutral';\n case SwitchPosition.Locked:\n return 'locked';\n default:\n return 'off';\n }\n};\n\nconst RealInput = styled.input`\n display: none;\n`;\nconst SwitchOuter = styled.div`\n border: var(--switch-border-width) solid transparent;\n box-sizing: border-box;\n cursor: pointer;\n position: relative;\n\n width: var(--switch-width);\n height: var(--switch-height);\n border-radius: calc(var(--switch-height) / 2);\n\n &::before {\n content: '';\n display: block;\n position: absolute;\n top: calc(var(--switch-border-width) * -1);\n left: calc(var(--switch-border-width) * -1);\n bottom: calc(var(--switch-border-width) * -1);\n right: calc(var(--switch-border-width) * -1);\n pointer-events: none;\n border-radius: 12px;\n box-shadow:\n 0px 2px 2px 0px var(--grey-a4) inset,\n 0px -8px 8px 0px var(--grey-a2) inset,\n 0px 2px 4px var(--black-a4),\n 0px -2px 4px var(--white-a4);\n }\n`;\n\nconst SwitchInner = styled.div<{ $position: PositionKey }>`\n --offset: calc(((var(--switch-height) - var(--switch-inner-size)) / 2) - var(--switch-border-width));\n --position-off: var(--offset);\n --position-on: calc(var(--switch-width) - var(--switch-inner-size) - (var(--switch-border-width)*2) - var(--offset));\n --position-neutral: calc((var(--switch-width) / 2) - (var(--switch-inner-size) / 2) - var(--offset));\n --position-locked: var(--offset);\n\n position: absolute;\n top: var(--offset);\n left: ${({ $position }) => $position && `var(--position-${$position})`};\n\n box-sizing: border-box;\n height: var(--switch-inner-size);\n width: var(--switch-inner-size);\n border-radius: calc(var(--switch-inner-size) / 2);\n\n background-color: var(--switch-default-off-background);\n\n box-shadow:\n 0px 2px 4px 0px var(--black-a8),\n 0px 1px 2px 0px var(--white-a5) inset,\n 0px -1px 1px 0px var(--black-a5) inset;\n`;\n\nconst LabelText = styled.span``;\n\nconst IconWrapper = styled.div`\n position: absolute;\n width: inherit;\n height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n svg {\n display: block;\n }\n`;\nconst SpinnerWrapper = styled.div``;\n\nconst Container = styled(StyledLabel)<{\n $activeTheming: string;\n $loading: boolean;\n $useIntent: boolean;\n $themeState: string;\n $position: SwitchPosition;\n $checked?: boolean;\n}>`\n user-select: none;\n display: inline-flex;\n gap: 8px;\n align-items: center;\n\n ${SwitchOuter}{\n ${({ $activeTheming, $themeState }) => css`\n border-color: var(--switch-${$themeState}-${$activeTheming}-border);\n background-color: var(--switch-${$themeState}-${$activeTheming}-background);\n `};\n\n ${({ $activeTheming }) =>\n $activeTheming === 'locked' &&\n css`\n background-color: var(--switch-special-locked-background);\n border-color: var(--switch-special-locked-border);\n `};\n\n ${({ $activeTheming }) =>\n $activeTheming === 'failure' &&\n css`\n background-color: var(--switch-special-failure-background);\n border-color: var(--switch-special-failure-border);\n `};\n\n ${({ $activeTheming, $loading }) =>\n $loading &&\n css`\n background-color: var(--switch-default-${$activeTheming}-background);\n border-color: var(--switch-default-${$activeTheming}-border);\n `};\n\n }\n\n ${SwitchInner}{\n ${({ $activeTheming, $themeState }) => css`\n background-color: var(--switch-${$themeState}-${$activeTheming}-inner);\n `};\n\n transition:\n left var(--speed-fast) var(--easing-primary-in-out),\n border var(--speed-fast) var(--easing-primary-in-out),\n width var(--speed-fast) var(--easing-primary-in-out);\n\n ${({ $activeTheming }) =>\n $activeTheming === 'locked' &&\n css`\n width: calc(100% - var(--switch-border-width));\n background-color: var(--switch-special-locked-inner);\n box-shadow: none;\n\n ${IconWrapper} svg {\n transform: translateX(-1px);\n }\n `}\n\n ${({ $activeTheming }) =>\n $activeTheming === 'failure' &&\n css`\n background-color: var(--switch-special-failure-inner);\n `}\n\n ${({ $activeTheming, $loading }) =>\n $loading &&\n css`\n border-color: var(--switch-default-${$activeTheming}-inner);\n box-shadow: none;\n `};\n\n }\n\n &:hover {\n ${SwitchInner}{\n left: ${({ $useIntent, $position }) =>\n (\n $useIntent &&\n $position === SwitchPosition.Off &&\n 'calc(var(--position-off) + var(--switch-intent-offset))'\n ) ||\n (\n $useIntent &&\n $position === SwitchPosition.On &&\n 'calc(var(--position-on) - var(--switch-intent-offset))'\n )};\n }\n }\n`;\n\nexport type TypeSwitchState = 'default' | 'loading' | 'locked' | 'disabled' | 'failure';\n\nconst isTypeSwitchState = (value: string): value is TypeSwitchState => {\n return (\n value === 'default' ||\n value === 'loading' ||\n value === 'locked' ||\n value === 'disabled' ||\n value === 'failure'\n );\n};\n\ntype SwitchThemes = 'on' | 'off' | 'danger';\n\ninterface IProps {\n labelText?: string;\n leftTheme?: SwitchThemes;\n rightTheme?: SwitchThemes;\n state?: TypeSwitchState;\n checked?: boolean;\n defaultChecked?: boolean;\n onChangeCallback?: (checked: boolean, indeterminate?: boolean) => void;\n}\n\nconst Switch: React.FC<IProps> = ({\n state = 'default',\n leftTheme = 'off',\n rightTheme = 'on',\n labelText,\n onChangeCallback,\n checked,\n defaultChecked = false,\n}) => {\n const isControlled = checked !== undefined;\n const initialChecked = isControlled ? checked : defaultChecked;\n const initialPosition = initialChecked ? SwitchPosition.On : SwitchPosition.Off;\n const initialTheme = initialChecked ? rightTheme : leftTheme;\n\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const inputRef = useRef<HTMLInputElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<SwitchPosition>(initialPosition);\n const [activeTheming, setActiveTheming] = useState<string>(initialTheme);\n const [switchState, setSwitchState] = useState<TypeSwitchState>('default');\n const [justUpdated, setJustUpdated] = useState<boolean>(false);\n const [innerSize, setInnerSize] = useState<number>(0);\n\n const updateSwitchPositionAndTheme = useCallback(() => {\n if (isControlled) {\n setPosition(checked ? SwitchPosition.On : SwitchPosition.Off);\n setActiveTheming(checked ? rightTheme : leftTheme);\n } else if (inputRef.current) {\n inputRef.current.checked = internalChecked;\n setPosition(internalChecked ? SwitchPosition.On : SwitchPosition.Off);\n setActiveTheming(internalChecked ? rightTheme : leftTheme);\n }\n }, [checked, isControlled, internalChecked, leftTheme, rightTheme]);\n\n useEffect(() => {\n updateSwitchPositionAndTheme();\n }, [updateSwitchPositionAndTheme]);\n\n const positionSwitch = useCallback(() => {\n if (isControlled) {\n setPosition(checked ? SwitchPosition.On : SwitchPosition.Off);\n setActiveTheming(checked ? rightTheme : leftTheme);\n } else {\n setPosition(internalChecked ? SwitchPosition.On : SwitchPosition.Off);\n setActiveTheming(internalChecked ? rightTheme : leftTheme);\n }\n }, [checked, isControlled, leftTheme, rightTheme, internalChecked]);\n\n const customOnChange = useCallback(() => {\n if (state === 'locked' || state === 'disabled') return;\n\n if (isControlled) {\n onChangeCallback?.(!checked);\n } else {\n const newChecked = !internalChecked;\n setInternalChecked(newChecked);\n onChangeCallback?.(newChecked);\n }\n positionSwitch();\n }, [isControlled, checked, internalChecked, onChangeCallback, state, positionSwitch]);\n\n /**\n * updateThemeChoice()\n * If for some reason we need to change the left or right theme in context, this makes sure\n * things get updated. (i.e. in StoryBook)\n */\n const updateThemeChoice = useCallback(() => {\n if (position === SwitchPosition.On) {\n setActiveTheming(rightTheme);\n } else if (position === SwitchPosition.Off) {\n setActiveTheming(leftTheme);\n }\n }, [position, rightTheme, leftTheme]);\n\n /** Watch for that theme change. */\n useEffect(() => {\n updateThemeChoice();\n }, [updateThemeChoice]);\n\n useEffect(() => {\n if (isTypeSwitchState(state)) setSwitchState(stateCheck(state));\n }, [state]);\n\n /** Watch for locking prop. */\n useEffect(() => {\n if (state === 'locked') {\n setPosition(SwitchPosition.Locked);\n setActiveTheming('locked');\n } else if (state === 'failure') {\n setPosition(SwitchPosition.Neutral);\n setActiveTheming('failure');\n } else {\n positionSwitch();\n }\n }, [state, positionSwitch]);\n\n useEffect(() => {\n if (innerRef.current) {\n setInnerSize(\n parseInt(getComputedStyle(innerRef.current).getPropertyValue('--switch-inner-size'), 10)\n );\n }\n }, []);\n\n return (\n <Container\n onChange={customOnChange}\n onMouseLeave={() => setJustUpdated(false)}\n $activeTheming={activeTheming}\n $loading={state === 'loading'}\n $useIntent={!justUpdated && (state === 'default' || state === 'failure')}\n $themeState={switchState}\n $position={position}\n $checked={inputRef.current?.checked}\n >\n <SwitchOuter>\n <SwitchInner $position={getPositionKey(position)} ref={innerRef}>\n {state === 'failure' ? (\n <IconWrapper>\n <Icon icon='Exclamation' color='danger' size={18} weight='regular' />\n </IconWrapper>\n ) : null}\n {state === 'locked' ? (\n <IconWrapper>\n <Icon icon='Locked' color='switch-special-locked-icon' size={12} weight='regular' />\n </IconWrapper>\n ) : null}\n {state === 'loading' && innerSize > 0 ? (\n <SpinnerWrapper>\n <Spinner styling='simple' custom={{ size: innerSize }} />\n </SpinnerWrapper>\n ) : null}\n </SwitchInner>\n </SwitchOuter>\n {labelText ? <LabelText>{labelText}</LabelText> : null}\n <RealInput\n ref={inputRef}\n type='checkbox'\n disabled={state !== 'default' && state !== 'failure'}\n defaultChecked={!isControlled ? defaultChecked : checked}\n />\n </Container>\n );\n};\n\nconst stateCheck = (state: TypeSwitchState): TypeSwitchState => {\n switch (state) {\n case 'locked':\n return 'default';\n case 'failure':\n return 'default';\n default:\n return state;\n }\n};\n\nexport default Switch;\nexport { SwitchPosition };\n","import type React from 'react';\nimport type { TextareaHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport Icon from '../../Icons/Icon';\nimport Spinner from '../../Indicators/Spinner';\nimport type { TypeFieldState } from '..';\n\nconst FeedbackIcon = styled.div`\n flex: 0 0 40px;\n width: 40px;\n display: flex;\n justify-content:center;\n align-items:center;\n padding-top: 2px;\n`;\n\nconst StyledTextArea = styled.textarea<{ $fieldState: TypeFieldState }>`\n\n ${({ $fieldState }) => css`\n font-family: var(--font-data);\n border: 1px solid var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-background-color);\n box-shadow: var(--input-box-shadow-x) var(--input-box-shadow-y) var(--input-box-shadow-blur) var(--input-box-shadow-spread) var(--input-${$fieldState}-shadow-color, transparent);\n `};\n\n padding: 8px 15px;\n box-sizing: border-box;\n outline: none;\n height: 100%;\n width: 100%;\n border-radius: 3px;\n\n\n color: var(--input-color-default);\n font-size: 14px;\n\n transition:\n border var(--speed-fast) var(--easing-primary-out),\n background-color var(--speed-fast) var(--easing-primary-out),\n box-shadow var(--speed-fast) var(--easing-primary-out);\n\n &::placeholder {\n font-family: var(--font-data);\n color: var(--input-color-placeholder);\n font-style: italic;\n font-weight: 400;\n }\n\n &:lang(ja)::placeholder {\n font-style: normal;\n };\n`;\n\nconst FeedbackContainer = styled.div`\n flex-shrink: 0;\n padding: 8px 0;\n background-color: transparent;\n border: 1px solid transparent;\n\n border-left: none;\n border-radius: 0 0 3px 3px;\n overflow: hidden;\n\n display:flex;\n justify-content:left;\n align-items:center;\n`;\n\nconst FeedbackMessage = styled.div`\n flex: 0 1 400px;\n padding: 0 10px 0 0;\n font-weight: 500;\n color: var(--white-1);\n`;\n\nconst Container = styled.div<{ $fieldState: string; $showFeedback?: boolean }>`\n ${({ $fieldState, $showFeedback }) => css`\n display: flex;\n position: relative;\n flex-direction: column;\n\n ${StyledTextArea}{\n ${\n ['default', 'disabled'].indexOf($fieldState) === -1 &&\n $showFeedback &&\n css`\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n `\n };\n\n &:disabled {\n cursor: not-allowed;\n }\n\n &:focus {\n box-shadow: var(--input-focused-box-shadow-x) var(--input-focused-box-shadow-y) var(--input-focused-box-shadow-blur) var(--input-focused-box-shadow-spread) var(--input-${$fieldState}-focused-shadow-color);\n }\n }\n\n ${FeedbackContainer} {\n border-color: var(--input-${$fieldState}-border-color);\n background: var(--input-${$fieldState}-border-color);\n\n ${\n ['default', 'disabled'].indexOf($fieldState) !== -1 &&\n css`\n display:none;\n `\n }\n }\n\n &:focus-within ${FeedbackContainer} {\n border-color: var(--input-${$fieldState}-focused-border-color, var(--input-${$fieldState}-border-color));\n }\n\n `};\n`;\n\ninterface OwnProps {\n fieldState: TypeFieldState;\n showFeedback?: boolean;\n feedbackMessage?: string;\n}\n\ntype Props = OwnProps & TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nconst TextArea: React.FC<Props> = ({\n placeholder = '',\n fieldState = 'default',\n showFeedback = false,\n feedbackMessage,\n children,\n ...props\n}) => {\n const feedbackIcon = (fieldState: TypeFieldState) => {\n switch (fieldState) {\n case 'default':\n break;\n case 'disabled':\n break;\n case 'required':\n return <Icon icon='Required' size={20} color='white' />;\n case 'valid':\n return <Icon icon='Success' size={20} color='white' />;\n case 'invalid':\n return <Icon icon='Invalid' size={20} color='white' />;\n case 'processing':\n return <Spinner size='medium' styling='primary' />;\n }\n };\n\n return (\n <Container $fieldState={fieldState || 'default'} $showFeedback={showFeedback}>\n <StyledTextArea\n $fieldState={fieldState || 'default'}\n placeholder={placeholder}\n disabled={fieldState === 'disabled' || fieldState === 'processing'}\n {...props}\n >\n {children}\n </StyledTextArea>\n {showFeedback && fieldState && (\n <FeedbackContainer>\n <FeedbackIcon>{feedbackIcon(fieldState)}</FeedbackIcon>\n <FeedbackMessage>{feedbackMessage}</FeedbackMessage>\n </FeedbackContainer>\n )}\n </Container>\n );\n};\n\nexport default TextArea;\n","import type React from 'react';\nimport type { FormHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport { StyledLabel } from './atoms/Label';\n\nconst FormContainer = styled.form<{ $spacing: string }>`\n ${({ $spacing }) =>\n $spacing &&\n css`\n & > ${StyledLabel} {\n margin-bottom: ${$spacing};\n }\n `}\n`;\n\ninterface OwnProps {\n spacing?: string;\n}\n\ntype Props = OwnProps & FormHTMLAttributes<HTMLFormElement>;\n\nconst Form: React.FC<Props> = ({ children, spacing = '45px;', action, ...props }) => {\n return (\n <FormContainer\n $spacing={spacing}\n action={typeof action === 'string' ? action : undefined}\n {...props}\n >\n {children}\n </FormContainer>\n );\n};\n\nexport default Form;\n","import type React from 'react';\nimport styled, { css } from 'styled-components';\nimport IconButton, { type IconButtonData } from '../atoms/IconButton';\n\nconst StyledIconButton = styled(IconButton)``;\n\nconst Container = styled.div<{ $alignment?: IAlignmentOptions }>`\n display: flex;\n ${StyledIconButton} {\n margin-left: 15px;\n }\n ${StyledIconButton}:first-child {\n margin-left: 0px;\n }\n\n ${({ $alignment }) =>\n $alignment === 'left' &&\n css`\n justify-content: flex-start;\n `};\n\n ${({ $alignment }) =>\n $alignment === 'center' &&\n css`\n justify-content: center;\n `};\n\n ${({ $alignment }) =>\n $alignment === 'right' &&\n css`\n justify-content: flex-end;\n `};\n`;\n\ntype IAlignmentOptions = 'left' | 'center' | 'right';\n\ntype IGroupButtonsData = {\n buttonsConfig: IconButtonData[];\n alignment?: IAlignmentOptions;\n};\n\nconst ActionButtons: React.FC<IGroupButtonsData> = ({ buttonsConfig, alignment = 'right' }) => {\n return (\n <Container $alignment={alignment}>\n {buttonsConfig.map((btn) => {\n const { icon, size, weight, color, hoverColor, onClick } = btn;\n return (\n <StyledIconButton\n key={`${icon}-${size}`}\n icon={icon}\n size={size}\n weight={weight}\n color={color}\n hoverColor={hoverColor}\n onClick={onClick}\n />\n );\n })}\n </Container>\n );\n};\n\nexport default ActionButtons;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport type { IButtonProps } from '..';\nimport Button from '../atoms/Button';\nimport ButtonWithIcon from '../atoms/ButtonWithIcon';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n gap: 8px;\n button {\n text-wrap: nowrap;\n }\n`;\n\nexport type IButtonType = 'default' | 'icon-button';\n\nexport interface IButtonStack extends IButtonProps {\n id?: string;\n buttonType?: IButtonType;\n icon?: string;\n iconPosition?: 'left' | 'right';\n text: string;\n}\n\nexport interface IButtonsStack {\n buttons: IButtonStack[];\n}\n\nconst ButtonsStack: React.FC<IButtonsStack> = ({ buttons }) => {\n return (\n <Container>\n {buttons.map(({ id, buttonType, icon, text, iconPosition, size, ...buttonProps }) => {\n if (buttonType === 'icon-button')\n return (\n <ButtonWithIcon\n key={id || `button-stack-${id}`}\n size={size || 'small'}\n icon={icon || ''}\n position={iconPosition}\n {...buttonProps}\n >\n {text}\n </ButtonWithIcon>\n );\n\n return (\n <Button key={id || `button-stack-${id}`} size={size || 'small'} {...buttonProps}>\n {text}\n </Button>\n );\n })}\n </Container>\n );\n};\n\nexport default ButtonsStack;\n","import { clamp } from './index';\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/cursor //\ntype ICursorStyles =\n | 'ne-resize'\n | 'nw-resize'\n | 'n-resize'\n | 'se-resize'\n | 'sw-resize'\n | 's-resize'\n | 'e-resize'\n | 'w-resize'\n | 'move'\n | 'default';\n\nconst updateCursorStyle = (\n left: number,\n top: number,\n width: number,\n height: number,\n clientX: number,\n clientY: number\n): ICursorStyles => {\n let cursorStyle: ICursorStyles = 'default';\n\n if (clientY - top < 5) {\n if (width - (clientX - left) < 5) {\n cursorStyle = 'ne-resize';\n } else if (clientX - left < 5) {\n cursorStyle = 'nw-resize';\n } else {\n cursorStyle = 'n-resize';\n }\n } else if (height - (clientY - top) < 5) {\n if (width - (clientX - left) < 5) {\n cursorStyle = 'se-resize';\n } else if (clientX - left < 5) {\n cursorStyle = 'sw-resize';\n } else {\n cursorStyle = 's-resize';\n }\n } else if (width - (clientX - left) < 5) {\n cursorStyle = 'e-resize';\n } else if (clientX - left < 5) {\n cursorStyle = 'w-resize';\n } else {\n cursorStyle = 'move';\n }\n\n return cursorStyle;\n};\n\nconst drawImgValues = (\n img: HTMLImageElement,\n canvasHeight: number,\n canvasWidth: number\n): IDrawArea => {\n const scale = Math.min(canvasWidth / img.naturalWidth, canvasHeight / img.naturalHeight);\n\n const width = Math.floor(img.naturalWidth * scale);\n const height = Math.floor(img.naturalHeight * scale);\n const top = 0 + Math.floor((canvasHeight - height) / 2);\n const left = 0 + Math.floor((canvasWidth - width) / 2);\n\n const imageDraw: IDrawArea = {\n left,\n top,\n width,\n height,\n };\n\n return imageDraw;\n};\n\nconst calculateAspectSizes = (baseHeight: number, baseWidth: number, aspectRatio: number) => {\n const aspect = aspectRatio ? aspectRatio : 1;\n let height: number, width: number;\n\n if (baseWidth > baseHeight * aspect) {\n width = Math.floor(baseHeight * aspect);\n height = baseHeight;\n } else {\n width = baseWidth;\n height = Math.floor(baseWidth / aspect);\n }\n\n return {\n height,\n width,\n };\n};\n\nconst initialCropValues = (\n cropWidth: number,\n cropHeight: number,\n canvasWidth: number,\n canvasHeight: number,\n imgWidth: number,\n imgHeight: number,\n aspectRatio?: number\n) => {\n let height: number, width: number;\n const aspect = aspectRatio ? aspectRatio : 1;\n const minWidth = Math.min(cropWidth, canvasWidth, imgWidth);\n const minHeight = Math.min(cropHeight, canvasHeight, imgHeight);\n\n if (minWidth > minHeight * aspect) {\n width = Math.floor(minHeight * aspect);\n height = minHeight;\n } else {\n width = minWidth;\n height = Math.floor(minWidth / aspect);\n }\n\n const top = 0 + Math.floor(canvasHeight / 2 - height / 2);\n const left = 0 + Math.floor(canvasWidth / 2 - width / 2);\n\n return {\n left,\n top,\n width,\n height,\n };\n};\n\nconst isLeftMouseButton = (e: MouseEvent) => {\n let mouseButton: number | undefined;\n if (typeof e.buttons !== 'undefined') {\n mouseButton = e.buttons;\n } else if (typeof e.button !== 'undefined') {\n mouseButton = e.button;\n } else {\n mouseButton = e.which;\n }\n\n if (mouseButton === 1) {\n return true;\n }\n\n return false;\n};\n\ninterface ISelectedArea {\n cropLeft: number;\n cropTop: number;\n cropWidth: number;\n cropHeight: number;\n mouseStartX: number;\n mouseStartY: number;\n imgLeft: number;\n imgTop: number;\n imgWidth: number;\n imgHeight: number;\n cursorStart: ICursorStyles;\n isResizing: boolean;\n}\n\nconst updateCropValues = (oldSelection: ISelectedArea, newX: number, newY: number) => {\n let [updatedLeft, updatedTop, updatedWidth, updatedHeight] = [\n oldSelection.cropLeft,\n oldSelection.cropTop,\n oldSelection.cropWidth,\n oldSelection.cropHeight,\n ];\n\n const diffX = newX - oldSelection.mouseStartX;\n const diffY = newY - oldSelection.mouseStartY;\n\n switch (oldSelection.cursorStart) {\n case 'ne-resize':\n updatedTop = oldSelection.cropTop + diffY;\n updatedHeight = oldSelection.cropHeight - diffY;\n updatedWidth = oldSelection.cropWidth + diffX;\n\n break;\n\n case 'nw-resize':\n updatedTop = oldSelection.cropTop + diffY;\n updatedLeft = oldSelection.cropLeft + diffX;\n updatedHeight = oldSelection.cropHeight - diffY;\n updatedWidth = oldSelection.cropWidth - diffX;\n break;\n\n case 'n-resize':\n updatedTop = oldSelection.cropTop + diffY;\n updatedHeight = oldSelection.cropHeight - diffY;\n break;\n\n case 'se-resize':\n updatedHeight = oldSelection.cropHeight + diffY;\n updatedWidth = oldSelection.cropWidth + diffX;\n break;\n\n case 'sw-resize':\n updatedLeft = oldSelection.cropLeft + diffX;\n updatedHeight = oldSelection.cropHeight + diffY;\n updatedWidth = oldSelection.cropWidth - diffX;\n break;\n\n case 's-resize':\n updatedHeight = oldSelection.cropHeight + diffY;\n break;\n\n case 'e-resize':\n updatedWidth = oldSelection.cropWidth + diffX;\n break;\n\n case 'w-resize':\n updatedLeft = oldSelection.cropLeft + diffX;\n updatedWidth = oldSelection.cropWidth - diffX;\n break;\n\n case 'move':\n updatedTop = oldSelection.cropTop + diffY;\n updatedLeft = oldSelection.cropLeft + diffX;\n break;\n\n default:\n break;\n }\n\n const width = clamp(updatedWidth, 0, oldSelection.imgWidth);\n const height = clamp(updatedHeight, 0, oldSelection.imgHeight);\n const left = clamp(\n updatedLeft,\n oldSelection.imgLeft,\n oldSelection.imgWidth - oldSelection.cropWidth + oldSelection.imgLeft\n );\n const top = clamp(\n updatedTop,\n oldSelection.imgTop,\n oldSelection.imgHeight - oldSelection.cropHeight + oldSelection.imgTop\n );\n\n const isUpdateRequired = areDimensionsDiff(oldSelection, { left, top, height, width });\n\n return {\n left,\n top,\n width,\n height,\n isUpdateRequired,\n };\n};\n\nconst updateCropWithAspect = (\n oldSelection: ISelectedArea,\n newX: number,\n newY: number,\n aspectRatio?: number\n) => {\n const aspect = aspectRatio ? aspectRatio : 1;\n let [updatedLeft, updatedTop, updatedWidth, updatedHeight] = [\n oldSelection.cropLeft,\n oldSelection.cropTop,\n oldSelection.cropWidth,\n oldSelection.cropHeight,\n ];\n\n const diffX = newX - oldSelection.mouseStartX;\n const diffY = newY - oldSelection.mouseStartY;\n\n switch (oldSelection.cursorStart) {\n case 'ne-resize':\n updatedTop = oldSelection.cropTop + diffY;\n updatedHeight = oldSelection.cropHeight - diffY;\n updatedWidth = Math.floor(updatedHeight * aspect);\n\n break;\n\n case 'nw-resize':\n updatedTop = oldSelection.cropTop + diffY;\n updatedLeft = oldSelection.cropLeft + diffY * aspect;\n updatedHeight = oldSelection.cropHeight - diffY;\n updatedWidth = Math.floor(updatedHeight * aspect);\n break;\n\n case 'se-resize':\n updatedHeight = oldSelection.cropHeight + diffY;\n updatedWidth = Math.floor(updatedHeight * aspect);\n break;\n\n case 'sw-resize':\n updatedLeft = oldSelection.cropLeft + diffX;\n updatedWidth = oldSelection.cropWidth - diffX;\n updatedHeight = Math.floor(updatedWidth / aspect);\n break;\n\n case 'move':\n updatedTop = oldSelection.cropTop + diffY;\n updatedLeft = oldSelection.cropLeft + diffX;\n break;\n\n default:\n break;\n }\n\n /**img values only change if the image is updated */\n\n const imgBoundLeft = clamp(\n updatedLeft,\n oldSelection.imgLeft,\n oldSelection.imgWidth - oldSelection.cropWidth + oldSelection.imgLeft\n );\n const imgBoundTop = clamp(\n updatedTop,\n oldSelection.imgTop,\n oldSelection.imgHeight - oldSelection.cropHeight + oldSelection.imgTop\n );\n const imgBoundWidth = clamp(updatedWidth, 0, oldSelection.imgWidth);\n const imgBoundHeight = clamp(updatedHeight, 0, oldSelection.imgHeight);\n\n let left = imgBoundLeft;\n let top = imgBoundTop;\n let width = imgBoundWidth;\n let height = imgBoundHeight;\n\n if (oldSelection.cursorStart !== 'move' && imgBoundWidth === oldSelection.imgWidth) {\n height = oldSelection.cropHeight;\n top = oldSelection.cropTop;\n }\n\n if (oldSelection.cursorStart !== 'move' && imgBoundHeight === oldSelection.imgHeight) {\n width = oldSelection.cropWidth;\n left = oldSelection.cropLeft;\n }\n\n const isUpdateRequired = areDimensionsDiff(oldSelection, { left, top, height, width });\n\n return {\n left,\n top,\n width,\n height,\n isUpdateRequired,\n };\n};\n\ninterface IDrawArea {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\nconst areDimensionsDiff = (oldDimensions: ISelectedArea, newValues: IDrawArea) => {\n let isDifferent = false;\n\n if (oldDimensions.cropLeft !== newValues.left) {\n isDifferent = true;\n }\n\n if (oldDimensions.cropTop !== newValues.top) {\n isDifferent = true;\n }\n\n if (oldDimensions.cropHeight !== newValues.height) {\n isDifferent = true;\n }\n\n if (oldDimensions.cropWidth !== newValues.width) {\n isDifferent = true;\n }\n\n return isDifferent;\n};\n\nexport type { ICursorStyles, IDrawArea, ISelectedArea };\n\nexport {\n calculateAspectSizes,\n drawImgValues,\n initialCropValues,\n isLeftMouseButton,\n updateCropValues,\n updateCropWithAspect,\n updateCursorStyle,\n};\n","import type React from 'react';\nimport { Fragment } from 'react';\nimport styled, { css } from 'styled-components';\n\nconst CropLineStyle = css`\n position: absolute;\n display: block;\n opacity: 0.1;\n`;\nconst TopLine = styled.div`\n ${CropLineStyle};\n cursor: n-resize;\n width: 100%;\n height: 5px;\n left: 0;\n top: -3px;\n`;\n\nconst RightLine = styled.div`\n ${CropLineStyle};\n cursor: e-resize;\n right: -3px;\n top: 0;\n width: 5px;\n height: 100%;\n`;\n\nconst BottomLine = styled.div`\n ${CropLineStyle}\n cursor: s-resize;\n bottom: -3px;\n height: 5px;\n width: 100%;\n left: 0;\n`;\n\nconst LeftLine = styled.div`\n ${CropLineStyle};\n cursor: w-resize;\n left: -3px;\n top: 0;\n width: 5px;\n height: 100%;\n`;\n\nconst resizeSquaresCss = css`\n position: absolute;\n width: 10px;\n height: 10px;\n border: solid 1px var(--black-a12);\n background-color: var(--white-1);\n`;\n\nconst PointN = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n top: -5px;\n margin-left: -5px;\n left: 50%;\n ${({ $isResizable }) =>\n $isResizable &&\n css`\n cursor: n-resize;\n `};\n`;\nconst PointNW = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n top: -5px;\n left: -5px;\n ${({ $isResizable }) =>\n $isResizable &&\n css`\n cursor: nw-resize;\n `};\n`;\n\nconst PointNE = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n top: -5px;\n right: -5px;\n ${({ $isResizable }) =>\n $isResizable &&\n css`\n cursor: ne-resize;\n `};\n`;\nconst PointE = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n margin-top: -5px;\n top: 50%;\n right: -5px;\n ${({ $isResizable }) =>\n $isResizable &&\n css`\n cursor: e-resize;\n `};\n`;\nconst PointSE = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n bottom: -5px;\n right: -5px;\n ${({ $isResizable }) =>\n $isResizable &&\n css`\n cursor: se-resize;\n `};\n`;\nconst PointS = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n bottom: -5px;\n left: 50%;\n margin-left: -5px;\n ${({ $isResizable }) =>\n $isResizable &&\n css`\n cursor: s-resize;\n `};\n`;\nconst PointSW = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n bottom: -5px;\n left: -5px;\n ${({ $isResizable }) =>\n $isResizable &&\n css`\n cursor: sw-resize;\n `};\n`;\nconst PointW = styled.div<{ $isResizable: boolean }>`\n ${resizeSquaresCss};\n margin-top: -5px;\n top: 50%;\n left: -5px;\n ${({ $isResizable }) =>\n $isResizable &&\n css`\n cursor: w-resize;\n `};\n`;\n\ninterface ICropArea {\n isResizable: boolean;\n hasAspectRatio: boolean;\n}\n\nconst CropArea: React.FC<ICropArea> = ({ isResizable, hasAspectRatio }) => {\n return (\n <Fragment>\n {isResizable && !hasAspectRatio ? (\n <Fragment>\n {/* This lines are just for cursor css */}\n <TopLine />\n <RightLine />\n <BottomLine />\n <LeftLine />\n </Fragment>\n ) : null}\n\n {hasAspectRatio ? null : (\n <Fragment>\n <PointN data-point='cursor-n' $isResizable={isResizable} />\n <PointE data-point='cursor-e' $isResizable={isResizable} />\n <PointS data-point='cursor-s' $isResizable={isResizable} />\n <PointW data-point='cursor-w' $isResizable={isResizable} />\n </Fragment>\n )}\n\n <PointNW data-point='cursor-nw' $isResizable={isResizable} />\n <PointNE data-point='cursor-ne' $isResizable={isResizable} />\n <PointSE data-point='cursor-se' $isResizable={isResizable} />\n <PointSW data-point='cursor-sw' $isResizable={isResizable} />\n </Fragment>\n );\n};\n\nexport default CropArea;\n","import type React from 'react';\nimport { useCallback, useRef, useState } from 'react';\nimport ReactDom from 'react-dom';\nimport styled, { css } from 'styled-components';\nimport { getImageType } from '../../helpers';\nimport {\n drawImgValues,\n type ICursorStyles,\n type IDrawArea,\n type ISelectedArea,\n initialCropValues,\n isLeftMouseButton,\n updateCropValues,\n updateCropWithAspect,\n updateCursorStyle,\n} from '../../helpers/cropToolHelpers';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport Button from '../atoms/Button';\nimport ButtonWithLoading from '../atoms/ButtonWithLoading';\nimport CropArea from '../atoms/CropArea';\n\n// TODO: Add throttle or window.requestAnimationFrame()//\nconst Container = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--grey-3);\n -webkit-backdrop-filter: blur(5px);\n backdrop-filter: blur(5px);\n font-family: ${({ theme }) => theme.fontFamily.ui};\n z-index: 999;\n`;\n\nconst InnerContainer = styled.div`\n position: relative;\n z-index: 99;\n`;\n\nconst ToolHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 17px;\n`;\n\nconst TextGroup = styled.div`\n display: flex;\n align-items: center;\n font-size: 20px;\n font-weight: 500;\n color: var(--mono);\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n margin-right: 14px;\n }\n`;\n\nconst ButtonsGroup = styled.div`\n button + button {\n margin-left: 10px;\n }\n`;\n\nconst PreviewArea = styled.div<{ $canvasHeight?: number; $canvasWidth?: number }>`\n position: relative;\n overflow: hidden;\n height: ${({ $canvasHeight }) => ($canvasHeight ? `${$canvasHeight}px` : `462px`)};\n width: ${({ $canvasWidth }) => ($canvasWidth ? `${$canvasWidth}px` : `485px`)};\n border-radius: 5px;\n background-color: var(--grey-3);\n background-image: repeating-linear-gradient(45deg, transparent, transparent 35px, var(--white-a10) 35px, var(--white-a10) 70px);\n`;\n\nconst HiddenImage = styled.img`\n display: none;\n`;\n\nconst SelectedArea = styled.div<{\n $cropLeft: number;\n $cropTop: number;\n $cropWidth: number;\n $cropHeight: number;\n}>`\n position: absolute;\n border: dashed 1px var(--black-a12);\n box-shadow: 0 0 0 9999em var(--black-a11);\n ${({ $cropLeft, $cropTop, $cropWidth, $cropHeight }) => css`\n top: ${$cropTop}px;\n left: ${$cropLeft}px;\n width: ${$cropWidth}px;\n height: ${$cropHeight}px;\n `};\n cursor: move;\n`;\n\nconst viewDimensions: ISelectedArea = {\n cropLeft: 0,\n cropTop: 0,\n cropWidth: 350,\n cropHeight: 300,\n mouseStartX: 0,\n mouseStartY: 0,\n imgLeft: 0,\n imgTop: 0,\n imgWidth: 400,\n imgHeight: 400,\n cursorStart: 'default',\n isResizing: false,\n};\n\ninterface ICrop {\n title?: string;\n cancelBtnTxt?: string;\n cropBtnTxt?: string;\n imgUrl: string;\n isResizable?: boolean;\n cropHeight?: number;\n cropWidth?: number;\n canvasHeight: number;\n canvasWidth: number;\n aspectRatio?: number;\n onCrop?: (newFileUrl: string, fileType: string) => void;\n onClose?: () => void;\n onError?: (msg: string) => void;\n}\n\nconst CropTool: React.FC<ICrop> = ({\n title = 'Crop Image',\n cancelBtnTxt = 'Cancel',\n cropBtnTxt = 'Crop & Save',\n isResizable = true,\n cropHeight = 300,\n cropWidth = 350,\n canvasHeight = 400,\n canvasWidth = 450,\n aspectRatio,\n imgUrl,\n onCrop,\n onClose = () => {},\n onError = () => {},\n}) => {\n const [isLoading, setIsLoading] = useState(false);\n const [_loadDimensions, setLoadDimensions] = useState(viewDimensions);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const imgRef = useRef<HTMLImageElement>(null);\n const cropRef = useRef<HTMLDivElement | null>(null);\n\n const drawImgOnCanvas = useCallback(() => {\n if (!canvasRef || !imgRef) {\n return;\n }\n const newImage = imgRef.current;\n if (!newImage) {\n onError('error loading image');\n return;\n }\n const canvas = canvasRef.current;\n if (!canvas) {\n onError('error loading canvas');\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n onError('error drawing image');\n return;\n }\n\n const newImgDraw = drawImgValues(newImage, canvasHeight, canvasWidth);\n ctx?.drawImage(newImage, newImgDraw.left, newImgDraw.top, newImgDraw.width, newImgDraw.height);\n const newCrop: IDrawArea = initialCropValues(\n cropWidth,\n cropHeight,\n canvasWidth,\n canvasHeight,\n newImgDraw.width,\n newImgDraw.height,\n aspectRatio\n );\n // triggers a render to repaint canvas\n setLoadDimensions((prevState) => ({\n ...prevState,\n cropLeft: newCrop.left,\n cropTop: newCrop.top,\n cropWidth: newCrop.width,\n cropHeight: newCrop.height,\n imgLeft: newImgDraw.left,\n imgTop: newImgDraw.top,\n imgWidth: newImgDraw.width,\n imgHeight: newImgDraw.height,\n }));\n\n viewDimensions.cropLeft = newCrop.left;\n viewDimensions.cropTop = newCrop.top;\n viewDimensions.cropWidth = newCrop.width;\n viewDimensions.cropHeight = newCrop.height;\n viewDimensions.imgLeft = newImgDraw.left;\n viewDimensions.imgTop = newImgDraw.top;\n viewDimensions.imgWidth = newImgDraw.width;\n viewDimensions.imgHeight = newImgDraw.height;\n viewDimensions.cursorStart = 'default';\n viewDimensions.isResizing = false;\n setIsLoading(false);\n }, [aspectRatio, canvasHeight, canvasWidth, cropHeight, cropWidth, onError]);\n\n // Mouse handlers //\n const handleCrop = useCallback(\n async (cropArea: IDrawArea) => {\n setIsLoading(true);\n if (!canvasRef?.current || !imgRef) {\n return;\n }\n\n const newImage = imgRef.current;\n if (!newImage) {\n return;\n }\n\n const canvas = canvasRef.current;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n // ctx.imageSmoothingEnabled = false; </// not sure required\n const cropImageData = ctx?.getImageData(\n cropArea.left,\n cropArea.top,\n cropArea.width,\n cropArea.height\n );\n if (!cropImageData) {\n return;\n }\n\n const canvasCropped = document.createElement('canvas');\n const cropContext = canvasCropped.getContext('2d');\n canvasCropped.width = cropArea.width;\n canvasCropped.height = cropArea.height;\n\n cropContext?.putImageData(cropImageData, 0, 0);\n const imgType = getImageType(newImage);\n const newImgUrl = canvasCropped.toDataURL(imgType);\n if (onCrop) {\n onCrop(newImgUrl, imgType);\n }\n },\n [onCrop]\n );\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (!cropRef) {\n return;\n }\n if (!isLeftMouseButton(e.nativeEvent)) {\n return;\n }\n\n const rect = cropRef.current?.getBoundingClientRect();\n if (!rect) {\n return;\n }\n const { left, top, width, height } = rect;\n const [posX, posY] = [e.clientX, e.clientY];\n let newCursorStyle: ICursorStyles;\n if (!isResizable) {\n newCursorStyle = 'move';\n } else {\n newCursorStyle = updateCursorStyle(left, top, width, height, posX, posY);\n }\n\n viewDimensions.mouseStartX = posX;\n viewDimensions.mouseStartY = posY;\n viewDimensions.cursorStart = newCursorStyle;\n viewDimensions.isResizing = true;\n },\n [isResizable]\n );\n\n const handleMouseUp = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (!viewDimensions.isResizing) {\n return;\n }\n viewDimensions.isResizing = false;\n }, []);\n\n const updateSelect = useCallback((left: number, top: number, width: number, height: number) => {\n if (!cropRef.current) {\n return;\n }\n cropRef.current.style.left = `${left}px`;\n cropRef.current.style.top = `${top}px`;\n cropRef.current.style.width = `${width}px`;\n cropRef.current.style.height = `${height}px`;\n }, []);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (!cropRef) {\n return;\n }\n if (!viewDimensions.isResizing) {\n return;\n }\n\n const rect = cropRef.current?.getBoundingClientRect();\n if (!rect) {\n return;\n }\n\n const [posX, posY] = [e.clientX, e.clientY];\n const newDimensions = aspectRatio\n ? updateCropWithAspect(viewDimensions, posX, posY, aspectRatio)\n : updateCropValues(viewDimensions, posX, posY);\n\n if (!newDimensions.isUpdateRequired) {\n return;\n }\n\n viewDimensions.cropTop = newDimensions.top;\n viewDimensions.cropLeft = newDimensions.left;\n viewDimensions.cropWidth = newDimensions.width;\n viewDimensions.cropHeight = newDimensions.height;\n viewDimensions.mouseStartX = posX;\n viewDimensions.mouseStartY = posY;\n\n updateSelect(\n viewDimensions.cropLeft,\n viewDimensions.cropTop,\n viewDimensions.cropWidth,\n viewDimensions.cropHeight\n );\n },\n [aspectRatio, updateSelect]\n );\n\n const handleOnMouseLeave = useCallback((e: React.MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (!viewDimensions.isResizing) {\n return;\n }\n viewDimensions.isResizing = false;\n }, []);\n //End of Mouse handlers//\n\n return ReactDom.createPortal(\n <Container>\n <InnerContainer>\n <ToolHeader>\n <TextGroup>\n <Icon icon='Crop' size={20} color='mono' />\n {title}\n </TextGroup>\n <ButtonsGroup>\n <Button design='secondary' size='small' onClick={onClose}>\n {cancelBtnTxt}\n </Button>\n <ButtonWithLoading\n loading={isLoading}\n size='small'\n onClick={() =>\n handleCrop({\n left: viewDimensions.cropLeft,\n top: viewDimensions.cropTop,\n width: viewDimensions.cropWidth,\n height: viewDimensions.cropHeight,\n })\n }\n >\n {' '}\n {cropBtnTxt}\n </ButtonWithLoading>\n </ButtonsGroup>\n </ToolHeader>\n <PreviewArea\n $canvasHeight={canvasHeight}\n $canvasWidth={canvasWidth}\n onMouseUp={handleMouseUp}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleOnMouseLeave}\n >\n <HiddenImage ref={imgRef} src={imgUrl} onLoad={drawImgOnCanvas} crossOrigin='anonymous' />\n <canvas ref={canvasRef} width={`${canvasWidth}px`} height={`${canvasHeight}px`} />\n <SelectedArea\n ref={cropRef}\n onMouseDown={handleMouseDown}\n $cropLeft={viewDimensions.cropLeft}\n $cropTop={viewDimensions.cropTop}\n $cropWidth={viewDimensions.cropWidth}\n $cropHeight={viewDimensions.cropHeight}\n >\n <CropArea {...{ isResizable }} hasAspectRatio={!!aspectRatio} />\n </SelectedArea>\n </PreviewArea>\n </InnerContainer>\n </Container>,\n document.body\n );\n};\n\nexport default CropTool;\n","import type React from 'react';\nimport { useCallback, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { getShortTextTimeUnit, isTimeUnit } from '../../helpers';\nimport type { ITimeUnit } from '../../index';\nimport Label from '../atoms/Label';\nimport SliderInput, { type ISlider } from '../atoms/SliderInput';\n\n/**\n * This component relies in the slider for validations\n * Since the theme of this component is time unit values\n * Marks could also be handle by it.\n * Providing quantity of marks and generating the marks array based with unit\n */\n\nconst Container = styled.div``;\nconst Headers = styled.div`\n font-size: 14px;\n color: var(--grey-10);\n display: flex;\n justify-content: space-between;\n margin-bottom: 30px;\n padding: 0 6px;\n`;\n\nconst ValueLabel = styled(Label)`\n font-family: var(--font-ui);\n margin-bottom: 0;\n`;\n\nconst unitStyle = css`\n font-family: var(--font-data);\n color: var(--grey-a11);\n font-style: italic;\n &:lang(ja) {\n font-style: normal;\n }\n font-size: 12px;\n line-height: 1.5;\n`;\n\nconst Unit = styled.div`\n ${unitStyle};\n`;\n\nconst ValueTitle = styled.div`\n display: flex;\n`;\n\nconst TitleTemplate = styled.div`\n display: flex;\n align-items: center;\n ${unitStyle};\n span {\n font-style: normal;\n }\n`;\n\nconst getTimeValues = (value: number, unit: ITimeUnit) => {\n switch (unit) {\n case 'seconds':\n return {\n hours: Math.floor(value / 3600),\n minutes: Math.floor((value % 3600) / 60),\n seconds: value % 60,\n };\n case 'minutes':\n return {\n hours: Math.floor(value / 60),\n minutes: value % 60,\n seconds: 0,\n };\n default:\n return {\n hours: value,\n minutes: 0,\n seconds: 0,\n };\n }\n};\n\nconst getValueTitle = (value: number, timeUnit: ITimeUnit | string, timeFormat?: string) => {\n // Handle default case\n if (!timeFormat || !isTimeUnit(timeUnit)) {\n const unit = isTimeUnit(timeUnit) ? getShortTextTimeUnit(value, timeUnit) : timeUnit;\n return (\n <ValueTitle>\n <ValueLabel htmlFor='duration-slider' labelText={`${value}`} />\n <Unit>{unit}</Unit>\n </ValueTitle>\n );\n }\n\n const timeValues = getTimeValues(value, timeUnit as ITimeUnit);\n\n const updatedTitle = timeFormat.split(/(\\[H+\\]|\\[M+\\]|\\[S+\\])/).map((part, index) => {\n switch (part) {\n case '[HH]':\n // biome-ignore lint/suspicious/noArrayIndexKey: parts come from timeFormat.split() — order is fixed and tokens may repeat (e.g. '[HH]:[HH]'), so index is the right key. #646.\n return <span key={index}>{timeValues.hours.toString().padStart(2, '0')}</span>;\n case '[H]':\n // biome-ignore lint/suspicious/noArrayIndexKey: see above. #646.\n return <span key={index}>{timeValues.hours}</span>;\n case '[MM]':\n // biome-ignore lint/suspicious/noArrayIndexKey: see above. #646.\n return <span key={index}>{timeValues.minutes.toString().padStart(2, '0')}</span>;\n case '[M]':\n // biome-ignore lint/suspicious/noArrayIndexKey: see above. #646.\n return <span key={index}>{timeValues.minutes}</span>;\n case '[SS]':\n // biome-ignore lint/suspicious/noArrayIndexKey: see above. #646.\n return <span key={index}>{timeValues.seconds.toString().padStart(2, '0')}</span>;\n case '[S]':\n // biome-ignore lint/suspicious/noArrayIndexKey: see above. #646.\n return <span key={index}>{timeValues.seconds}</span>;\n default: {\n const preserveSpacesInPart = part.replace(/\\s+/g, '\\u00A0');\n return preserveSpacesInPart;\n }\n }\n });\n\n return (\n <ValueTitle>\n <TitleTemplate>{updatedTitle}</TitleTemplate>\n </ValueTitle>\n );\n};\n\ninterface IDurationSliderProps {\n title: string;\n timeUnit: ITimeUnit | string;\n controlledValue?: number;\n timeFormat?: string; // [H]Hours [M]Minutes [S]Seconds -> 4Hours 10Minutes 30Seconds // [HH]時 [MM]分 [SS]秒 -> 4時 10分 30秒\n}\n\ntype IDurationSlider = IDurationSliderProps & ISlider;\n\nconst DurationSlider: React.FC<IDurationSlider> = ({\n max,\n min,\n defaultValue = 0,\n title = '',\n timeUnit,\n controlledValue,\n inputCallback,\n timeFormat,\n ...props\n}) => {\n const [selectedValue, setSelectedValue] = useState(defaultValue);\n\n const handleSelectedValue = useCallback(\n (value: number) => {\n if (inputCallback) {\n inputCallback(value);\n }\n setSelectedValue(value);\n },\n [inputCallback]\n );\n\n const labelValue = controlledValue ? controlledValue : selectedValue;\n\n return (\n <Container>\n <Headers>\n <Label htmlFor='duration-slider' labelText={title} />\n {getValueTitle(labelValue, timeUnit, timeFormat)}\n </Headers>\n <SliderInput\n {...props}\n id='duration-slider'\n max={max}\n min={min}\n defaultValue={defaultValue}\n onChangeCallback={handleSelectedValue}\n />\n </Container>\n );\n};\n\nexport default DurationSlider;\n","import type React from 'react';\nimport { type InputHTMLAttributes, useState } from 'react';\nimport type { TypeFieldState } from '..';\nimport Input from '../atoms/Input';\nimport Label from '../atoms/Label';\n\ninterface OwnProps {\n name: string;\n label: string;\n fieldState: TypeFieldState;\n showFeedback?: boolean;\n feedbackMessage?: string;\n}\ntype Props = OwnProps & InputHTMLAttributes<HTMLInputElement>;\n\nconst PasswordField: React.FC<Props> = ({\n name,\n label,\n fieldState,\n feedbackMessage,\n required,\n children,\n formAction,\n ...props\n}) => {\n const [showValue, setShowValue] = useState<boolean>(false);\n const [actionIcon, setActionIcon] = useState<string>('PasswordHide');\n\n const actionCallback = () => {\n // Toggle show / hide and replace icon.\n const newValue: boolean = !showValue;\n\n setShowValue(newValue);\n setActionIcon(newValue ? 'PasswordShow' : 'PasswordHide');\n };\n\n return (\n <Label htmlFor={name} labelText={label} {...{ required }}>\n <Input\n type={showValue ? 'text' : 'password'}\n actionCallback={actionCallback}\n actionIcon={actionIcon}\n {...{ name, fieldState, feedbackMessage, required, ...props }}\n />\n </Label>\n );\n};\n\nexport default PasswordField;\n","import type React from 'react';\nimport { type InputHTMLAttributes, useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport type { IFeedbackColor } from '../../index';\nimport Label from '../atoms/Label';\nimport SliderInput, { type ISliderMark } from '../atoms/SliderInput';\n\nconst Container = styled.div``;\nconst Headers = styled.div<{ $allMarkCentered?: boolean }>`\n font-size: 14px;\n color: var(--grey-10);\n display: flex;\n justify-content: space-between;\n margin-bottom: 20px;\n ${({ $allMarkCentered }) => ($allMarkCentered ? `padding: 0;` : `padding: 0 6px;`)};\n`;\n\nconst ValueTitle = styled(Label)`\n font-family: ${({ theme }) => theme.fontFamily.data};\n`;\n\nconst getThumbColor = (value: number): IFeedbackColor => {\n if (value <= 10) {\n return 'error';\n }\n\n if (value > 10 && value <= 30) {\n return 'warning';\n }\n\n return 'success';\n};\n\nconst getTitleLevel = (value: number): string => {\n if (value <= 10) {\n return 'Critical Level';\n }\n\n if (value > 10 && value <= 30) {\n return 'Warning Level';\n }\n\n return 'Safe Level';\n};\n\ninterface IPercentageSliderProps {\n step?: number;\n marks?: ISliderMark[];\n defaultValue?: number;\n value?: number;\n showValue?: boolean;\n inputCallback?: (value: number) => void;\n updateThumbColor?: (value: number) => IFeedbackColor;\n updateTitle?: (value: number) => string;\n allMarkCentered?: boolean;\n}\n\ntype IPercentageSlider = IPercentageSliderProps & InputHTMLAttributes<HTMLInputElement>;\n\nconst PercentageSlider: React.FC<IPercentageSlider> = ({\n defaultValue = 0,\n // title='',\n inputCallback,\n updateThumbColor,\n updateTitle,\n showValue,\n allMarkCentered,\n ...props\n}) => {\n const [selectedValue, setSelectedValue] = useState(defaultValue);\n\n const handleSelectedValue = useCallback(\n (value: number) => {\n if (inputCallback) {\n inputCallback(value);\n }\n setSelectedValue(value);\n },\n [inputCallback]\n );\n\n return (\n <Container>\n <Headers $allMarkCentered={allMarkCentered}>\n <Label\n htmlFor='percentage-slider'\n labelText={updateTitle ? updateTitle(selectedValue) : getTitleLevel(selectedValue)}\n />\n {showValue && <ValueTitle htmlFor='percentage-slider' labelText={`${selectedValue}%`} />}\n </Headers>\n <SliderInput\n {...props}\n id='percentage-slider'\n max={100}\n min={0}\n defaultValue={defaultValue}\n showValue={showValue}\n onChangeCallback={handleSelectedValue}\n thumbColor={\n updateThumbColor ? updateThumbColor(selectedValue) : getThumbColor(selectedValue)\n }\n allMarkCentered={allMarkCentered}\n />\n </Container>\n );\n};\n\nexport default PercentageSlider;\n","import { useLayoutEffect, useState } from 'react';\n\n/**\n * Custom hook that tells you whether a given media query is active.\n */\n\nexport default function useMediaQuery(query: string) {\n const [matches, setMatches] = useState(false);\n useLayoutEffect(\n () => {\n const mediaQuery = window.matchMedia(query);\n setMatches(mediaQuery.matches);\n const handler = (event: MediaQueryListEvent) => setMatches(event.matches);\n\n mediaQuery.addEventListener('change', handler);\n\n return () => mediaQuery.removeEventListener('change', handler);\n },\n // eslint-disable-next-line\n [query] // Empty array ensures effect is only run on mount and unmount\n );\n return matches;\n}\n","import { deviceMediaQuery } from '../theme/common';\nimport useMediaQuery from './useMediaQuery';\n\n/**\n * Get a set of boolean representing which breakpoint is activeScreen\n * and which breakpoints are inactiveScreen.\n */\n\nexport type IBreakpoints = 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge';\n\ninterface OwnProps {\n isSmall: boolean;\n isMedium: boolean;\n isLarge: boolean;\n isXLarge: boolean;\n isXXLarge: boolean;\n activeScreen: IBreakpoints;\n}\n\nexport default function useBreakpoints() {\n const breakpoints: OwnProps = {\n isSmall: useMediaQuery(deviceMediaQuery.small),\n isMedium: useMediaQuery(deviceMediaQuery.medium),\n isLarge: useMediaQuery(deviceMediaQuery.large),\n isXLarge: useMediaQuery(deviceMediaQuery.xlarge),\n isXXLarge: useMediaQuery(deviceMediaQuery.xxlarge),\n activeScreen: 'small',\n };\n\n if (breakpoints.isSmall) breakpoints.activeScreen = 'small';\n if (breakpoints.isMedium) breakpoints.activeScreen = 'medium';\n if (breakpoints.isLarge) breakpoints.activeScreen = 'large';\n if (breakpoints.isXLarge) breakpoints.activeScreen = 'xlarge';\n if (breakpoints.isXXLarge) breakpoints.activeScreen = 'xxlarge';\n\n return breakpoints;\n}\n","import type React from 'react';\nimport { useEffect, useRef } from 'react';\n\nexport type outClickType = (eve: MouseEvent) => void;\nexport function useClickOutside(elRef: React.RefObject<Element | null>, elCallback: outClickType) {\n const callbackRef = useRef<outClickType>(elCallback);\n callbackRef.current = elCallback;\n\n useEffect(() => {\n const handleClickOutside = (eve: MouseEvent) => {\n if (!elRef?.current?.contains(eve.target as Node | null)) {\n callbackRef.current(eve);\n }\n };\n\n document.addEventListener('click', handleClickOutside, true);\n return () => {\n document.removeEventListener('click', handleClickOutside, true);\n };\n }, [elRef]);\n}\n","import { useCallback } from 'react';\n\nexport const useCopyToClipboard = () => {\n const copyToClipboard = useCallback((str: string): boolean => {\n // Make an area to allow for copying.\n const el = document.createElement('textarea');\n el.value = str;\n el.setAttribute('readonly', '');\n el.style.position = 'absolute';\n el.style.left = '-9999px';\n document.body.appendChild(el);\n\n const selection = document.getSelection();\n\n if (selection) {\n const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false;\n el.select();\n\n const success = document.execCommand('copy');\n document.body.removeChild(el);\n if (selected) {\n selection.removeAllRanges();\n selection.addRange(selected);\n }\n return success;\n }\n\n return false;\n }, []);\n\n return { copyToClipboard };\n};\n","import { useEffect, useRef } from 'react';\n\nexport function useInterval(callback: () => void, delay: number) {\n const savedCallback = useRef<(() => void) | undefined>(undefined);\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n savedCallback.current?.();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n","import { useCallback, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, initialValue: T) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (typeof window === 'undefined') {\n return initialValue;\n }\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key);\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n console.warn(\n `[useLocalStorage] Failed to parse key \"${key}\" from localStorage, using initial value:`,\n error\n );\n return initialValue;\n }\n });\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue = useCallback(\n (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have same API as useState\n\n // Save state\n setStoredValue((storedValue) => {\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n // Save to local storage\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n }\n return valueToStore;\n });\n } catch (error) {\n console.error(`[useLocalStorage] Failed to write key \"${key}\" to localStorage:`, error);\n }\n },\n [key]\n );\n\n return [storedValue, setValue] as const;\n}\n","import type { SVGProps } from 'react';\n\nfunction SvgNoImageBig(props: SVGProps<SVGSVGElement>) {\n return (\n <svg\n width={610}\n height={446}\n viewBox='0 0 610 446'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n aria-hidden='true'\n {...props}\n >\n <rect width={609.91} height={446} fill='#DDDDDD' />\n <path\n d='M242.675 210.273V235H239.246L226.677 216.865H226.447V235H222.717V210.273H226.17L238.751 228.432H238.98V210.273H242.675ZM269.596 222.636C269.596 225.277 269.113 227.546 268.148 229.446C267.182 231.338 265.858 232.795 264.175 233.817C262.501 234.831 260.597 235.338 258.464 235.338C256.323 235.338 254.412 234.831 252.729 233.817C251.055 232.795 249.735 231.334 248.769 229.434C247.803 227.534 247.32 225.268 247.32 222.636C247.32 219.996 247.803 217.73 248.769 215.839C249.735 213.939 251.055 212.482 252.729 211.468C254.412 210.446 256.323 209.935 258.464 209.935C260.597 209.935 262.501 210.446 264.175 211.468C265.858 212.482 267.182 213.939 268.148 215.839C269.113 217.73 269.596 219.996 269.596 222.636ZM265.902 222.636C265.902 220.624 265.576 218.93 264.924 217.553C264.28 216.169 263.394 215.122 262.268 214.414C261.149 213.698 259.881 213.339 258.464 213.339C257.04 213.339 255.768 213.698 254.649 214.414C253.53 215.122 252.645 216.169 251.993 217.553C251.349 218.93 251.027 220.624 251.027 222.636C251.027 224.649 251.349 226.347 251.993 227.732C252.645 229.108 253.53 230.154 254.649 230.871C255.768 231.579 257.04 231.933 258.464 231.933C259.881 231.933 261.149 231.579 262.268 230.871C263.394 230.154 264.28 229.108 264.924 227.732C265.576 226.347 265.902 224.649 265.902 222.636ZM286.977 210.273V235H283.246V210.273H286.977ZM292.41 210.273H296.938L304.81 229.494H305.1L312.972 210.273H317.499V235H313.95V217.107H313.72L306.428 234.964H303.482L296.189 217.094H295.96V235H292.41V210.273ZM325.012 235H321.052L329.951 210.273H334.261L343.159 235H339.199L332.208 214.764H332.015L325.012 235ZM325.676 225.317H338.523V228.456H325.676V225.317ZM362.303 218.085C362.069 217.352 361.755 216.696 361.361 216.116C360.974 215.529 360.512 215.03 359.972 214.619C359.433 214.201 358.817 213.883 358.125 213.665C357.441 213.448 356.688 213.339 355.867 213.339C354.475 213.339 353.219 213.698 352.1 214.414C350.981 215.13 350.096 216.181 349.444 217.565C348.8 218.942 348.478 220.628 348.478 222.624C348.478 224.629 348.804 226.323 349.456 227.707C350.108 229.092 351.001 230.142 352.136 230.859C353.271 231.575 354.563 231.933 356.012 231.933C357.356 231.933 358.527 231.66 359.526 231.112C360.532 230.565 361.308 229.792 361.856 228.794C362.411 227.788 362.689 226.605 362.689 225.244L363.655 225.425H356.58V222.347H366.299V225.16C366.299 227.237 365.856 229.04 364.971 230.569C364.094 232.09 362.878 233.265 361.325 234.094C359.779 234.924 358.008 235.338 356.012 235.338C353.774 235.338 351.81 234.823 350.12 233.793C348.438 232.762 347.126 231.301 346.184 229.41C345.242 227.51 344.771 225.256 344.771 222.648C344.771 220.676 345.045 218.906 345.592 217.336C346.14 215.766 346.908 214.434 347.898 213.339C348.897 212.237 350.068 211.396 351.412 210.816C352.764 210.228 354.241 209.935 355.843 209.935C357.179 209.935 358.423 210.132 359.574 210.526C360.733 210.921 361.763 211.48 362.665 212.205C363.574 212.929 364.327 213.79 364.923 214.788C365.518 215.778 365.921 216.877 366.13 218.085H362.303ZM371.035 235V210.273H386.538V213.484H374.766V221.018H385.729V224.218H374.766V231.788H386.683V235H371.035Z'\n fill='#656565'\n />\n </svg>\n );\n}\n\nexport default SvgNoImageBig;\n","import type React from 'react';\nimport { useCallback, useState, type VideoHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport Spinner from '../../Indicators/Spinner';\nimport type { IMediaType } from '../../index';\nimport NoImage from '../../svg/NoImageBig';\n\nexport const MediaBoxWrapper = styled.div<{ $minWidth?: string; $minHeight?: string }>`\n position: relative;\n line-height: 0;\n ${({ $minHeight }) => $minHeight && `min-height: ${$minHeight}`};\n ${({ $minWidth }) => $minWidth && `min-width: ${$minWidth}`};\n`;\n\nconst mediaStyle = `\n max-width: 100%;\n max-height: 100%;\n border-radius: 3px;\n background-color: var(--grey-11);\n`;\n\nconst LoadingOverlay = styled.div`\n position: absolute;\n top:0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`;\n\nconst Video = styled.video<{ $isLoaded?: boolean; $hasModalLimits?: boolean }>`\n ${mediaStyle};\n outline: none;\n\n ${({ $isLoaded, $hasModalLimits }) => css`\n transition: opacity var(--speed-slow) var(--easing-primary-out);\n opacity: ${$isLoaded ? `1` : `0`};\n\n ${\n $hasModalLimits &&\n css`\n max-height: calc(100vh - 100px);\n max-width: calc(100vw - 100px);\n `\n };\n `};\n`;\n\nconst StyledImage = styled.img<{ $isLoaded?: boolean; $hasModalLimits?: boolean }>`\n ${mediaStyle};\n\n ${({ $isLoaded, $hasModalLimits }) => css`\n transition: opacity var(--speed-slow) var(--easing-primary-out);\n display: ${$isLoaded ? `block` : `none`};\n opacity: ${$isLoaded ? `1` : `0`};\n\n ${\n $hasModalLimits &&\n css`\n max-height: calc(100vh - 100px);\n max-width: calc(100vw - 100px);\n `\n };\n `};\n`;\n\nexport interface IMediaModal {\n src: string;\n mediaType: IMediaType;\n alt?: string;\n videoOptions?: VideoHTMLAttributes<HTMLVideoElement>;\n hasModalLimits?: boolean;\n retryLoading?: boolean;\n retryLimit?: number;\n minWidth?: string;\n minHeight?: string;\n onError?: (e: Event) => void;\n onMediaLoad?: () => void;\n}\n\nconst MediaBox: React.FC<IMediaModal> = ({\n src: incomingSrc,\n alt,\n videoOptions = {},\n mediaType,\n hasModalLimits,\n retryLoading = false,\n retryLimit = 5,\n minWidth,\n minHeight,\n onError: onErrorCallback = () => {},\n onMediaLoad = () => {},\n}) => {\n const [retryCount, setRetryCount] = useState(0);\n const [src, setSrc] = useState(incomingSrc);\n const [loadFailed, setLoadFailed] = useState(false);\n const [loaded, setLoaded] = useState(false);\n\n const {\n loop = false,\n autoPlay = true,\n controls = false,\n muted = true,\n children,\n ...videoValues\n } = videoOptions;\n\n const onError = useCallback(\n (e: React.SyntheticEvent<HTMLVideoElement | HTMLImageElement, Event>) => {\n if (!retryLoading || retryCount >= retryLimit) {\n onErrorCallback(e.nativeEvent);\n setLoaded(true);\n setLoadFailed(true);\n } else {\n const randomDelay = 1000 * (retryCount ** 2 + Math.random()); // exponential back off retry\n setRetryCount((count) => count + 1);\n setTimeout(() => {\n setSrc(`${incomingSrc}?v=${Date.now()}`);\n }, randomDelay);\n }\n },\n [incomingSrc, onErrorCallback, retryCount, retryLoading, retryLimit]\n );\n\n const handleLoad = useCallback(() => {\n onMediaLoad();\n setLoaded(true);\n }, [onMediaLoad]);\n\n return (\n <MediaBoxWrapper {...{ $minWidth: minWidth, $minHeight: minHeight }}>\n {mediaType === 'video' ? (\n <Video\n {...{ loop, autoPlay, controls, muted, onError }}\n {...videoValues}\n $hasModalLimits={hasModalLimits}\n src={loadFailed ? undefined : src}\n $isLoaded={loaded && !loadFailed}\n preload='metadata'\n onCanPlayThrough={handleLoad}\n >\n {children}\n </Video>\n ) : (\n <StyledImage\n {...{ alt, onError }}\n $hasModalLimits={hasModalLimits}\n src={loadFailed ? undefined : src}\n onLoad={handleLoad}\n $isLoaded={loaded && !loadFailed}\n />\n )}\n {!loaded && (\n <LoadingOverlay>\n <Spinner size='large' styling='primary' />\n </LoadingOverlay>\n )}\n {loadFailed && <NoImage />}\n </MediaBoxWrapper>\n );\n};\n\nexport default MediaBox;\n","import type React from 'react';\nimport { type ReactElement, useCallback, useRef } from 'react';\nimport ReactDom from 'react-dom';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../common';\nimport { useClickOutside } from '../hooks/useClickOutside';\nimport Icon, { IconWrapper } from '../Icons/Icon';\n\nconst Container = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--grey-3);\n -webkit-backdrop-filter: blur(5px);\n backdrop-filter: blur(5px);\n z-index: 999;\n font-family: var(--font-ui);\n background-color: var(--grey-a3);\n`;\n\nconst CloseButton = styled.button<{ $selected?: boolean }>`\n ${resetButtonStyles};\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n right: 0;\n top: -30px;\n color: var(--mono);\n font-size: 14px;\n font-weight: 500;\n\n ${IconWrapper} {\n display: flex;\n margin-left: 12px;\n }\n ${({ $selected = false }) =>\n $selected &&\n css`\n border-bottom: 5px solid var(--primary-7);\n `}\n &:focus {\n outline: none;\n }\n\n &:hover:enabled {\n opacity: .8;\n transition: transform var(--speed-normal) var(--easing-primary-in-out);\n }\n\n &:active:enabled {\n opacity: .9;\n }\n &:disabled {\n opacity: 0.1;\n }\n`;\n\nconst LightBox = styled.div<{ $padding?: boolean; $width?: string; $isCloseEnable?: boolean }>`\n position: relative;\n margin: ${({ $isCloseEnable }) => ($isCloseEnable ? `27px 0 0` : `0`)};\n z-index: 9999;\n width: ${({ $width }) => ($width ? $width : `580px`)};\n padding: ${({ $padding }) => ($padding ? `30px 40px` : `0`)};\n border-radius: 5px;\n box-shadow: 0px 10px 15px 0px var(--primary-a1);\n background-color: var(--grey-1);\n border: var(--grey-6) 1px solid;\n`;\n\nexport interface IModalProps {\n isOpen: boolean;\n isCloseEnable?: boolean;\n closeText?: string;\n width?: string;\n padding?: boolean;\n customComponent?: ReactElement;\n onDismiss: () => void;\n dismissCallback?: () => void;\n}\n\nconst Modal: React.FC<IModalProps> = ({\n isOpen = false,\n isCloseEnable = true,\n closeText = '',\n width = '',\n padding = true,\n customComponent,\n onDismiss,\n dismissCallback,\n}) => {\n const lightBoxRef = useRef<HTMLDivElement>(null);\n const onClickOutside = () => {\n if (isCloseEnable) {\n if (dismissCallback) {\n dismissCallback();\n }\n dismiss();\n }\n };\n\n useClickOutside(lightBoxRef, onClickOutside);\n\n const dismiss = useCallback(() => {\n if (dismissCallback) {\n dismissCallback();\n }\n onDismiss();\n }, [onDismiss, dismissCallback]);\n\n return isOpen\n ? ReactDom.createPortal(\n <Container>\n <LightBox\n ref={lightBoxRef}\n $width={width}\n $padding={padding}\n $isCloseEnable={isCloseEnable}\n >\n {isCloseEnable ? (\n <CloseButton onClick={() => dismiss()}>\n {closeText ? closeText : 'CLOSE'}\n <Icon icon='CloseCompact' size={15} color='grey-12' weight='regular' />\n </CloseButton>\n ) : null}\n {customComponent}\n </LightBox>\n </Container>,\n document.body\n )\n : null;\n};\n\nexport default Modal;\n","import React, { useState } from 'react';\nimport Modal, { type IModalProps } from '../Modals/Modal';\n\nconst defaultModalProps: IModalProps = {\n isOpen: false,\n onDismiss: () => null,\n};\n\ninterface ModalContextType {\n modalProps: IModalProps;\n setModalProps: (newProps: IModalProps) => void;\n}\n\nconst defaultContext: ModalContextType = {\n modalProps: defaultModalProps,\n setModalProps: (newProps: IModalProps) => {\n console.debug(newProps);\n },\n};\n\nconst ModalContext = React.createContext<ModalContextType>(defaultContext);\n\nconst ModalProvider: React.FC<React.PropsWithChildren> = ({ children }) => {\n const [modalProps, setProps] = useState<IModalProps>(defaultContext.modalProps);\n\n const setModalProps = (newProps: IModalProps) => {\n setProps(newProps);\n };\n\n return (\n <ModalContext.Provider value={{ modalProps, setModalProps }}>\n <Modal {...modalProps} />\n {children}\n </ModalContext.Provider>\n );\n};\n\nexport { ModalContext };\nexport default ModalProvider;\n","import { type ReactElement, useCallback, useContext } from 'react';\nimport { ModalContext } from '../context/ModalContext';\nimport type { IModalProps } from '../Modals/Modal';\n\n/**\n * This type is a reduced version of the modalProps\n * but with the possibilities to grow beyond the basic modal\n * features\n */\nexport type IModal = {\n closeText?: string;\n isCloseEnable?: boolean;\n width?: string;\n padding?: boolean;\n dismissCallback?: () => void;\n customComponent?: ReactElement;\n};\nexport const useModal = () => {\n const { modalProps, setModalProps } = useContext(ModalContext);\n\n const setModalOpen = useCallback(\n (newStatus: boolean) => {\n if (newStatus === undefined) {\n return;\n }\n\n const updateProps: IModalProps = {\n ...modalProps,\n isOpen: newStatus,\n };\n setModalProps(updateProps);\n },\n [modalProps, setModalProps]\n );\n\n const onDismiss = useCallback(() => {\n setModalOpen(false);\n }, [setModalOpen]);\n\n const createModal = useCallback(\n (modal?: IModal) => {\n if (!modal) {\n setModalProps({ isOpen: true, onDismiss });\n }\n\n const updateProps = {\n isOpen: true,\n closeText: modal?.closeText,\n isCloseEnable: modal?.isCloseEnable,\n width: modal?.width,\n padding: modal?.padding,\n dismissCallback: modal?.dismissCallback,\n customComponent: modal?.customComponent,\n onDismiss,\n };\n\n setModalProps(updateProps);\n },\n [onDismiss, setModalProps]\n );\n\n return {\n createModal,\n isModalOpen: modalProps.isOpen,\n setModalOpen,\n };\n};\n","import { useCallback, type VideoHTMLAttributes } from 'react';\nimport type { IMediaType } from '..';\nimport MediaBox, { type IMediaModal } from '../Misc/atoms/MediaBox';\nimport { type IModal, useModal } from './useModal';\n\nexport type ICreateMediaModal = IMediaModal & IModal;\n\nconst videoDefaultOptions: VideoHTMLAttributes<HTMLVideoElement> = { controls: true };\n\nexport const useMediaModal = () => {\n // default options for media box\n const { createModal, isModalOpen, setModalOpen } = useModal();\n\n async function isMediaUrlValid(src: string, mediaType: IMediaType): Promise<boolean> {\n let isValid = false;\n\n if (mediaType === 'img') {\n const img = new Image();\n img.src = src;\n try {\n await new Promise((resolve, reject) => {\n img.onload = () => {\n isValid = true;\n resolve(true);\n };\n img.onerror = reject;\n });\n } catch (_error) {\n isValid = false;\n }\n }\n\n if (mediaType === 'video') {\n const videoElement = document.createElement('video');\n videoElement.src = src;\n\n try {\n await new Promise((resolve, reject) => {\n videoElement.oncanplaythrough = () => {\n isValid = true;\n resolve(true);\n };\n videoElement.onerror = reject;\n });\n } catch (_error) {\n isValid = false;\n }\n }\n\n return isValid;\n }\n\n const createMediaModal = useCallback(\n async (mediaModal: ICreateMediaModal) => {\n const {\n src,\n mediaType,\n alt,\n videoOptions = videoDefaultOptions,\n onError,\n onMediaLoad,\n closeText,\n dismissCallback,\n retryLoading = false,\n retryLimit = 5,\n minHeight = '300px',\n minWidth = '300px',\n } = mediaModal;\n\n createModal({\n padding: false,\n width: 'auto',\n closeText,\n dismissCallback,\n customComponent: (\n <MediaBox\n {...{\n src,\n mediaType,\n alt,\n videoOptions,\n onError,\n onMediaLoad,\n retryLoading,\n retryLimit,\n minHeight,\n minWidth,\n }}\n hasModalLimits\n />\n ),\n });\n },\n [createModal]\n );\n\n return {\n createMediaModal,\n isMediaUrlValid,\n isMediaModalOpen: isModalOpen,\n setMediaModalOpen: setModalOpen,\n };\n};\n","import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport Notification, { type INotificationProps } from '../Alerts/atom/Notification';\nimport { uniqueID } from '../helpers';\n\ntype NotificationContextType = {\n sendNotification: (newNotification: INotificationProps) => void;\n clearNotifications: () => void;\n};\n\nconst defaultContext: NotificationContextType = {\n sendNotification: () =>\n console.debug(\n 'This is the Notification context initialization should not appear, review NotificationProvider'\n ),\n clearNotifications: () =>\n console.debug(\n 'This is the context initialization should not appear, review NotificationProvider'\n ),\n};\n\nconst NotificationContext = React.createContext<NotificationContextType>(defaultContext);\n\nconst NotificationProvider: React.FC<React.PropsWithChildren> = ({ children }) => {\n const [activeNotification, setActiveNotification] = useState<INotificationProps | null>(null);\n const notificationListRef = useRef<INotificationProps[]>([]);\n\n const showNotification = useCallback(() => {\n const nextNotification = notificationListRef.current.shift();\n\n if (!nextNotification) {\n return;\n }\n\n const updateOnClose = () => {\n if (nextNotification.closeCallback) {\n nextNotification.closeCallback();\n }\n setActiveNotification(null);\n showNotification();\n };\n\n const displayedNotification = { ...nextNotification, closeCallback: updateOnClose };\n\n setActiveNotification(displayedNotification);\n }, []);\n\n const sendNotification = useCallback(\n async (newNotification: INotificationProps) => {\n const validNotification: INotificationProps = {\n message: newNotification.message,\n type: newNotification.type,\n id: uniqueID(),\n };\n\n if (newNotification.icon) {\n validNotification.icon = newNotification.icon;\n }\n\n if (newNotification.actionTextButton) {\n validNotification.actionTextButton = newNotification.actionTextButton;\n }\n\n if (newNotification.onTextButtonClick) {\n validNotification.onTextButtonClick = newNotification.onTextButtonClick;\n }\n\n if (newNotification.closeCallback) {\n validNotification.closeCallback = newNotification.closeCallback;\n }\n\n if (newNotification.isPinned) {\n validNotification.isPinned = newNotification.isPinned;\n }\n\n notificationListRef.current.push(validNotification);\n\n if (notificationListRef.current.length === 1 && activeNotification === null) {\n showNotification();\n }\n },\n [activeNotification, showNotification]\n );\n\n const clearNotifications = useCallback(() => {\n notificationListRef.current.length = 0;\n setActiveNotification((prev) => {\n if (prev !== null) {\n return { ...prev, closeNow: true };\n }\n\n return prev;\n });\n }, []);\n\n const contextValue = useMemo(\n () => ({ sendNotification, clearNotifications }),\n [clearNotifications, sendNotification]\n );\n\n return (\n <NotificationContext.Provider value={contextValue}>\n {activeNotification ? <Notification {...activeNotification} /> : null}\n {children}\n </NotificationContext.Provider>\n );\n};\n\nexport type { NotificationContextType };\nexport { NotificationContext };\nexport default NotificationProvider;\n","import React from 'react';\nimport { NotificationContext } from '../context/NotificationContext';\n\nexport const useNotification = () => React.useContext(NotificationContext);\n","import { useCallback, useEffect, useRef } from 'react';\n\nexport const usePoll = (callback = () => {}, interval = 1000) => {\n const timeoutIDRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const callbackRef = useRef<() => void>(callback);\n const canceled = useRef<boolean>(false);\n\n const pollOnce = useCallback(async () => {\n if (timeoutIDRef.current !== null) {\n console.debug('Clearing previous');\n clearTimeout(timeoutIDRef.current);\n timeoutIDRef.current = null;\n }\n\n await callbackRef.current();\n //Start next one in the chain\n if (!canceled.current) {\n console.debug('Starting next timeout');\n timeoutIDRef.current = setTimeout(pollOnce, interval);\n }\n }, [interval]);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n canceled.current = false;\n pollOnce();\n\n return () => {\n console.debug('canceled');\n canceled.current = true;\n if (timeoutIDRef.current !== null) {\n console.debug('clearing final', timeoutIDRef.current);\n clearTimeout(timeoutIDRef.current);\n timeoutIDRef.current = null;\n }\n };\n }, [pollOnce]);\n};\n","import { useCallback, useEffect, useState } from 'react';\n\nconst matchDark = '(prefers-color-scheme: dark)';\n\n//Current state of Dark changes to the opposite\nconst toggleThemeClass = (isDarkEnabled: boolean) => {\n if (isDarkEnabled) {\n document.body.classList.add('light-theme');\n document.body.classList.remove('dark-theme');\n } else {\n document.body.classList.add('dark-theme');\n document.body.classList.remove('light-theme');\n }\n};\n\nconst setInitial = () => {\n const localStorageTheme = localStorage.getItem('isDarkThemeEnabled');\n let startDark = true;\n\n if (localStorageTheme === null) {\n startDark = window.matchMedia(matchDark)?.matches;\n } else {\n startDark = localStorageTheme !== 'false';\n }\n\n toggleThemeClass(!startDark);\n\n return startDark;\n};\n\nconst useThemeToggle = () => {\n const [isDarkThemeEnabled, setIsDarkThemeEnabled] = useState(setInitial);\n\n // toggle with Button\n const onThemeToggle = useCallback(() => {\n setIsDarkThemeEnabled((enabled) => {\n localStorage.isDarkThemeEnabled = !enabled;\n toggleThemeClass(enabled);\n\n return !enabled;\n });\n }, []);\n\n // Toggle when changing with OS and no local Storage variable has been set yet\n const osThemeToggle = useCallback((event: MediaQueryListEvent) => {\n const localStorageTheme = localStorage.getItem('isDarkThemeEnabled');\n if (localStorageTheme !== null) {\n return;\n }\n\n const isDark = event.matches;\n\n setIsDarkThemeEnabled(() => {\n toggleThemeClass(!isDark);\n return isDark;\n });\n }, []);\n\n useEffect(() => {\n const matcher = window.matchMedia(matchDark);\n matcher.addEventListener('change', osThemeToggle);\n\n return () => {\n matcher.removeEventListener('change', osThemeToggle);\n };\n }, [osThemeToggle]);\n\n return {\n isDarkThemeEnabled,\n setIsDarkThemeEnabled,\n onThemeToggle,\n isLightMode: !isDarkThemeEnabled,\n };\n};\n\nexport default useThemeToggle;\n","import { useEffect, useLayoutEffect } from 'react';\n\nexport const useTitle = (title: string, area?: string, delimiter?: string, update = true) => {\n // Index Title\n const baseTitle = document.title.split('|').slice(-1)[0].trim();\n\n // on unmount will return the baseTitle to Index Title for pages not using this hook.\n // useLayoutEffect ensures the cleanup (title restore) runs synchronously on unmount,\n // before the browser paints and before the next page's effects set their own title.\n // With plain useEffect the async cleanup could overwrite the incoming page's title.\n useLayoutEffect(() => {\n return () => {\n document.title = baseTitle;\n };\n }, [baseTitle]);\n\n useEffect(() => {\n if (!update) return;\n document.title = makeTitle(\n [...(title ? [title] : []), ...(area ? [area] : []), ...(baseTitle ? [baseTitle] : [])],\n delimiter\n );\n }, [title, area, delimiter, update, baseTitle]);\n};\n\n/**\n * Put the parts together for title use.\n * @param parts Each part to make up the title.\n * @param delimiter Character used for delimiting\n */\nconst makeTitle = (parts: string[], delimiter: string = '|'): string => {\n let title = '';\n delimiter = ` ${delimiter} `;\n\n parts.forEach((part, key) => {\n title += part;\n if (parts.length - 1 !== key) {\n title += delimiter;\n }\n });\n\n return title;\n};\n","import { useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nexport const useTo = () => {\n const navigate = useNavigate();\n const to = useCallback((url: string) => () => navigate(url), [navigate]);\n return to;\n};\n","import {\n type ButtonHTMLAttributes,\n type FC,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport Spinner from '../../Indicators/Spinner';\nimport type { TypeButtonDesigns } from '..';\n\nconst StyledButton = styled.button<{ $noBorderTop?: boolean }>`\n ${resetButtonStyles}\n ${({ $noBorderTop }) =>\n $noBorderTop\n ? `border-top: none`\n : css`\n border-top: 1px solid var(--border-color)`};\n\n color: var(--text-color);\n height: var(--button-height);\n display: flex;\n flex: 1 0 0;\n align-items: center;\n align-self: stretch;\n\n &:hover:enabled {\n background: var(--button-hover-bg);\n\n ${IconWrapper} {\n svg g, svg path {\n stroke: var(--white-a12);\n }\n }\n }\n\n &:active:enabled {\n background: var(--button-active-bg);\n\n ${({ $noBorderTop }) =>\n $noBorderTop\n ? `border-top: none`\n : css`\n border-top: 1px solid var(--border-active-color)`};\n\n ${IconWrapper} {\n svg g, svg path {\n stroke: var(--white-a12);\n }\n }\n }\n\n &:disabled {\n color: var(--text-disabled-color);\n cursor: not-allowed;\n }\n`;\n\nconst OptionText = styled.div`\n font-family: var(--font-ui);\n font-size: var(--button-font-size);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: center;\n font-style: normal;\n font-weight: 600;\n line-height: normal;\n`;\n\nconst TextWrapper = styled.div<{ $textMaxWidth?: string }>`\n ${({ $textMaxWidth }) => $textMaxWidth && css`max-width: ${$textMaxWidth};`}\n display: flex;\n padding: 0px var(--button-h-padding);\n justify-content: center;\n align-items: center;\n gap: 8px;\n align-self: stretch;\n`;\n\nconst LeftIconWrapper = styled.div<{ $isAscendingIcon: boolean }>`\n ${({ $isAscendingIcon }) =>\n $isAscendingIcon &&\n css`\n transform: scaleY(-1);\n `};\n\n height: var(--button-height);\n display: flex;\n padding: 3px var(--button-icon-h-padding);\n align-items: center;\n align-self: stretch;\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n justify-content: center;\n\n svg {\n display: flex;\n justify-content: center;\n align-items: center;\n height: var(--button-icon-size);\n width: var(--button-icon-size);\n g, path {\n stroke: var(--white-a10);\n }\n }\n }\n`;\n\nexport interface IMOption {\n text: string;\n icon?: string;\n hasOnSelectLoading?: boolean;\n design?: TypeButtonDesigns | string;\n noBorderTop?: boolean;\n textMaxWidth?: string;\n onClickCallback?: () => void;\n closeCallback: () => void;\n}\n\nexport type ISplitButtonOption = IMOption & ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst SplitButtonOption: FC<ISplitButtonOption> = ({\n text,\n icon = '',\n design = 'primary',\n noBorderTop = false,\n textMaxWidth = '',\n onClickCallback,\n closeCallback,\n hasOnSelectLoading,\n children,\n formAction,\n ...props\n}) => {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [iconSize, setIconSize] = useState<number>(0);\n\n const handleClick = useCallback(() => {\n onClickCallback?.();\n\n if (hasOnSelectLoading) {\n setIsLoading(true);\n\n setTimeout(() => {\n setIsLoading(false);\n closeCallback();\n }, 2000);\n } else {\n setTimeout(() => {\n closeCallback();\n }, 200);\n }\n }, [closeCallback, hasOnSelectLoading, onClickCallback]);\n\n useEffect(() => {\n if (buttonRef.current) {\n setIconSize(\n parseInt(getComputedStyle(buttonRef.current).getPropertyValue('--button-icon-size'), 10)\n );\n }\n }, []);\n\n return (\n <StyledButton ref={buttonRef} $noBorderTop={noBorderTop} onClick={handleClick} {...props}>\n <LeftIconWrapper $isAscendingIcon={icon === 'FilterAscending'}>\n {isLoading ? (\n <Spinner custom={{ size: iconSize }} styling={design} />\n ) : (\n <Icon icon={icon} />\n )}\n </LeftIconWrapper>\n <TextWrapper $textMaxWidth={textMaxWidth}>\n <OptionText>{text}</OptionText>\n </TextWrapper>\n </StyledButton>\n );\n};\n\nexport default SplitButtonOption;\n","import type React from 'react';\nimport { type ButtonHTMLAttributes, useCallback, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport { useClickOutside } from '../../hooks';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport type { TypeButtonDesigns, TypeButtonSizes } from '..';\nimport SplitButtonOption from '../atoms/SplitButtonOption';\n\nconst TOGGLE_ICON_WIDTH = 30;\n\nconst Container = styled.div`\n height: var(--button-height);\n overflow: visible;\n`;\n\nconst ButtonsWrapper = styled.div<{ $isOpen: boolean }>`\n ${({ $isOpen }) => $isOpen && `z-index: 100`};\n font-family: var(--font-ui);\n position: relative;\n display: inline-flex;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n border-radius: 3px;\n border: 1px solid var(--border);\n background: linear-gradient(135deg, var(--gradient-1) 0%, var(--gradient-2) 100%);\n box-shadow: var(--button-lift-default-x, 0px) var(--button-lift-default-y, 2px) var(--button-lift-default-blur, 4px) var(--button-lift-default-spread, 2px) var(--button-lift-default-color, rgba(221, 234, 248, 0.08));\n`;\n\ninterface IButtonItem {\n id: string;\n icon?: string;\n text: string;\n hasOnSelectLoading?: boolean;\n onClickCallback?: () => void;\n}\n\ntype ISplitButtonItem = IButtonItem & ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport interface ISplitButtonProps {\n mainButtonId: string;\n buttonList: ISplitButtonItem[];\n isSortAscending?: boolean;\n size?: TypeButtonSizes;\n design?: TypeButtonDesigns | string;\n textMaxWidth?: string;\n disabled?: boolean;\n}\n\nconst MainButtonWrapper = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n align-self: stretch;\n`;\n\nconst ToggleIcon = styled.button`\n ${resetButtonStyles}\n display: flex;\n height: var(--button-height);\n padding: 3px var(--button-icon-h-padding);\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n border-left: 1px solid var(--toggle-icon-border);\n cursor: pointer;\n\n ${IconWrapper} {\n svg {\n display: flex;\n justify-content: center;\n align-items: center;\n path, g {\n stroke: var(--toggle-icon);\n }\n }\n }\n\n &:hover:enabled {\n background: var(--toggle-icon-hover-bg);\n }\n\n &:active:enabled {\n background: var(--toggle-icon-active-bg);\n ${IconWrapper} {\n svg path, svg g {\n stroke: var(--toggle-icon-active);\n }\n }\n }\n\n &:disabled {\n cursor: not-allowed;\n\n ${IconWrapper} {\n svg path {\n stroke: var(--toggle-icon-disabled);\n }\n }\n }\n\n`;\n\nconst validateMaxWidth = (\n btnTextMaxWidth: number | null | undefined,\n textMaxWidth?: string\n): string | undefined => {\n if (textMaxWidth) return textMaxWidth;\n\n if (btnTextMaxWidth) return `${btnTextMaxWidth - TOGGLE_ICON_WIDTH}px`;\n\n return undefined;\n};\n\nconst SplitButton: React.FC<ISplitButtonProps> = ({\n mainButtonId,\n buttonList,\n design = 'primary',\n size,\n textMaxWidth,\n disabled = false,\n ...rest\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const mainButtonRef = useRef<HTMLDivElement>(null);\n const buttonsWrapperRef = useRef<HTMLDivElement>(null);\n\n const toggleOpen = useCallback(() => {\n setIsOpen((prev) => !prev);\n }, []);\n\n const closeCallback = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n useClickOutside(buttonsWrapperRef, closeCallback);\n\n return (\n <Container>\n <ButtonsWrapper\n ref={buttonsWrapperRef}\n className={`split-button-${design} split-button-size-${size}`}\n $isOpen={isOpen}\n {...rest}\n >\n <MainButtonWrapper ref={mainButtonRef}>\n {buttonList\n .filter((button) => button.id === mainButtonId)\n .map(({ id, text, icon, disabled: disabledItemProp, ...props }) => (\n <SplitButtonOption\n key={id}\n noBorderTop\n disabled={disabled || disabledItemProp}\n closeCallback={closeCallback}\n icon={icon || 'NoIcon'}\n {...{ text, design }}\n {...props}\n />\n ))}\n <ToggleIcon onClick={toggleOpen} disabled={disabled}>\n {<Icon icon={isOpen ? 'Close' : 'Down'} size={8} />}\n </ToggleIcon>\n </MainButtonWrapper>\n {isOpen && !disabled\n ? buttonList\n .filter((button) => button.id !== mainButtonId)\n .map(({ id, text, icon, disabled: disabledItemProp, ...props }) => (\n <SplitButtonOption\n key={id}\n icon={icon || 'NoIcon'}\n {...{ text, design }}\n disabled={disabledItemProp}\n textMaxWidth={validateMaxWidth(mainButtonRef.current?.clientWidth, textMaxWidth)}\n {...props}\n closeCallback={closeCallback}\n />\n ))\n : null}\n </ButtonsWrapper>\n </Container>\n );\n};\n\nexport default SplitButton;\n","import type React from 'react';\nimport type { TextareaHTMLAttributes } from 'react';\nimport type { TypeFieldState } from '..';\nimport Label from '../atoms/Label';\nimport TextArea from '../atoms/TextArea';\n\ninterface OwnProps {\n name: string;\n label: string;\n fieldState: TypeFieldState;\n showFeedback?: boolean;\n feedbackMessage?: string;\n}\n\ntype Props = OwnProps & TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nconst TextAreaField: React.FC<Props> = ({\n name,\n label,\n fieldState = 'default',\n feedbackMessage,\n required = false,\n children,\n ...props\n}) => {\n return (\n <Label htmlFor={name} labelText={label} {...{ required }}>\n <TextArea {...{ fieldState, feedbackMessage, name, required, ...props }} />\n </Label>\n );\n};\n\nexport default TextAreaField;\n","import type React from 'react';\nimport type { TypeFieldState } from '..';\nimport Input, { type InputProps } from '../atoms/Input';\nimport Label from '../atoms/Label';\n\ninterface OwnProps {\n name: string;\n label: string;\n fieldState: TypeFieldState;\n showFeedback?: boolean;\n feedbackMessage?: string;\n}\n\ntype Props = OwnProps & InputProps;\n\nconst TextField: React.FC<Props> = ({\n name,\n label,\n fieldState = 'default',\n feedbackMessage,\n required,\n type: _type,\n ...props\n}) => {\n return (\n <Label htmlFor={name} labelText={label} {...{ required }}>\n <Input type='text' {...{ fieldState, feedbackMessage, required, name, ...props }} />\n </Label>\n );\n};\n\nexport default TextField;\n","import type React from 'react';\nimport { Fragment } from 'react';\nimport styled from 'styled-components';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 27px;\n ${IconWrapper} {\n display: flex;\n align-items: center;\n }\n`;\n\nconst PlusIcon = styled(Icon)``;\n\nconst PlusIconWrapper = styled.div`\n margin: 0 30px;\n ${IconWrapper}{\n transform: rotate(45deg);\n [stroke]{\n stroke: var(--primary-7);\n }\n }\n`;\n\ninterface IBigIconsSummary {\n icons: string[];\n color?: ISvgIcons['color'];\n size?: number;\n weight?: 'light' | 'regular' | 'heavy' | 'strong';\n}\n\nconst BigIconsSummary: React.FC<IBigIconsSummary> = ({\n icons,\n color = 'dimmed',\n size = 72,\n weight = 'light',\n ...props\n}) => {\n return (\n <Container {...props}>\n {icons.map((icon, index) => {\n return (\n <Fragment key={`type-upload-${icon}}`}>\n {index !== 0 && (\n <PlusIconWrapper>\n <PlusIcon icon='CloseCompact' size={22} />\n </PlusIconWrapper>\n )}\n <Icon icon={icon} {...{ color, size, weight }} />\n </Fragment>\n );\n })}\n </Container>\n );\n};\n\nexport default BigIconsSummary;\n","import type React from 'react';\nimport { Fragment, type ReactElement, useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport BigIconsSummary from '../../Misc/atoms/BigIconsSummary';\nimport Button from '../atoms/Button';\nimport DropArea from '../atoms/DropArea';\nimport InputFileButton from '../atoms/InputFileButton';\n\nconst Container = styled.div`\n font-family: ${({ theme }) => theme.fontFamily.ui};\n`;\n\nconst StyledDropArea = styled(DropArea)`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n`;\n\nconst InputButtonWrapper = styled.div`\n z-index: 99;\n margin-top: 20px;\n display: flex;\n gap: 20px;\n`;\n\nconst FilesUploadGroup = styled.div<{ $height?: string; $hasFiles: boolean }>`\n padding: ${({ $hasFiles }) => ($hasFiles ? '26px 0 20px 0' : '65px 0 42px 0')};\n display: flex;\n flex-direction: column;\n align-items: center;\n border-radius: 5px;\n background-color: var(--grey-4);\n position: relative;\n`;\n\nconst Title = styled.div`\n color: var(--grey-11);\n font-size: 20px;\n`;\n\nconst Description = styled.div`\n font-size: 14px;\n line-height: 2.14;\n text-align: center;\n color: var(--grey-10);\n margin-top: 10px;\n max-width: 386px;\n`;\n\nconst getUpdateFiles = (\n newFiles: FileList,\n files: FileList | null,\n allowedFileTypes?: string[]\n): IUploadedFiles => {\n // creates a newFiles variable to prevent errors with input\n const newFilesTransfer = new DataTransfer();\n const rejectedFilesTransfer = new DataTransfer();\n\n for (let index = 0; index < newFiles.length; index++) {\n const isCorrectType =\n allowedFileTypes === undefined || allowedFileTypes.length === 0\n ? true\n : allowedFileTypes.includes(newFiles[index].type);\n if (isCorrectType) {\n newFilesTransfer.items.add(newFiles[index]);\n } else {\n rejectedFilesTransfer.items.add(newFiles[index]);\n }\n }\n\n if (files === null) {\n const result: IUploadedFiles = {\n goodFiles: newFilesTransfer.files,\n rejectedFiles: rejectedFilesTransfer.files,\n };\n return result;\n }\n\n const updatedFilesTransfer = new DataTransfer();\n const fileNamesSet = new Set();\n\n for (let index = 0; index < files.length; index++) {\n updatedFilesTransfer.items.add(files[index]);\n const name = files[index].name;\n fileNamesSet.add(name);\n }\n\n for (let index = 0; index < newFilesTransfer.files.length; index++) {\n const isAlready = fileNamesSet.has(newFilesTransfer.files[index].name);\n const isCorrectType =\n allowedFileTypes === undefined || allowedFileTypes.length === 0\n ? true\n : allowedFileTypes.includes(newFiles[index].type);\n\n if (isAlready || !isCorrectType) {\n rejectedFilesTransfer.items.add(newFiles[index]);\n } else {\n updatedFilesTransfer.items.add(newFilesTransfer.files[index]);\n }\n }\n const result: IUploadedFiles = {\n goodFiles: updatedFilesTransfer.files,\n rejectedFiles: rejectedFilesTransfer.files,\n };\n\n return result;\n};\n\ninterface IUploadedFiles {\n goodFiles: FileList;\n rejectedFiles: FileList;\n}\n\ninterface IAreaUploaderManager {\n title?: string;\n description?: string;\n fileIcons?: string[];\n selectFilesText?: string;\n addMoreFilesText?: string;\n clearFilesText?: string;\n beginUploadText?: string;\n allowedFileTypes?: string[];\n customComponent?: ReactElement;\n onChangeCallback?: (goodFiles: FileList, rejectedFiles: FileList) => void;\n clearFilesCallback?: () => void;\n beginUploadCallback?: () => void;\n}\n\nconst AreaUploadManager: React.FC<IAreaUploaderManager> = ({\n title = 'Select Files',\n description,\n fileIcons,\n selectFilesText = 'Select Files',\n addMoreFilesText = 'Add More Files',\n clearFilesText = 'Clear Files',\n beginUploadText = 'Begin Upload',\n allowedFileTypes,\n customComponent,\n onChangeCallback = () => {},\n clearFilesCallback = () => {},\n beginUploadCallback = () => {},\n}) => {\n const [files, setFiles] = useState<FileList | null>(null);\n\n const handleFiles = useCallback(\n (newFiles: FileList) => {\n if (newFiles === null) {\n return;\n }\n const { goodFiles, rejectedFiles } = getUpdateFiles(newFiles, files, allowedFileTypes);\n setFiles(goodFiles);\n onChangeCallback(goodFiles, rejectedFiles);\n },\n [files, allowedFileTypes, onChangeCallback]\n );\n\n const clearFiles = useCallback(() => {\n setFiles(null);\n clearFilesCallback();\n }, [clearFilesCallback]);\n\n return (\n <Container>\n <FilesUploadGroup $hasFiles={files !== null}>\n <StyledDropArea dropCallback={handleFiles} />\n {customComponent ? (\n customComponent\n ) : (\n <Fragment>\n {fileIcons && <BigIconsSummary icons={fileIcons} />}\n <Title>{title}</Title>\n {files === null && <Description>{description}</Description>}\n </Fragment>\n )}\n\n <InputButtonWrapper>\n <InputFileButton\n buttonSize='small'\n text={files !== null ? addMoreFilesText : selectFilesText}\n inputCallback={handleFiles}\n multiple\n buttonDesign={files !== null ? 'secondary' : 'primary'}\n accept={allowedFileTypes?.join(', ')}\n />\n {files !== null && (\n <Fragment>\n <Button size='small' onClick={beginUploadCallback} design='primary'>\n {beginUploadText}\n </Button>\n <Button size='small' onClick={clearFiles} design='secondary'>\n {clearFilesText}\n </Button>\n </Fragment>\n )}\n </InputButtonWrapper>\n </FilesUploadGroup>\n </Container>\n );\n};\n\nexport default AreaUploadManager;\n","import type React from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { isValidImage } from '../../helpers';\nimport { AvatarPlaceholder } from '../../svg';\nimport ButtonWithIcon from '../atoms/ButtonWithIcon';\nimport DropArea from '../atoms/DropArea';\nimport InputFileButton from '../atoms/InputFileButton';\nimport Label from '../atoms/Label';\nimport CropTool from '../molecules/CropTool';\n\n/** TODO update to useReduce for better state management*/\n\nconst CROP_HEIGHT_AREA = 500;\nconst CROP_WIDTH_AREA = 475;\nconst CANVAS_HEIGHT = 490;\nconst CANVAS_WIDTH = 460;\n\n// 0.95\nconst ratio = Math.round((CROP_WIDTH_AREA / CROP_HEIGHT_AREA) * 100) / 100;\n\nconst PHOTO_HEIGHT = `150px`;\nconst PHOTO_WIDTH = `142px`;\n\nconst Container = styled.div`\n position: relative;\n width: ${PHOTO_WIDTH};\n ${({ theme }) => css`\n font-family: ${theme.fontFamily.ui};\n `}\n button {\n width: 100%;\n }\n`;\n\nconst PreviewImageGroup = styled.div`\n position: relative;\n margin-bottom: 17px;\n height: ${PHOTO_HEIGHT};\n width: ${PHOTO_WIDTH};\n`;\n\nconst PhotoContainerStyle = css`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n border-radius: 5px;\n background-color: var(--grey-5);\n`;\nconst PreviewImage = styled.img`\n ${PhotoContainerStyle}\n object-fit: cover;\n`;\n\nconst PlaceholderText = styled.div`\n color: var(--grey-10);\n font-size: 14px;\n`;\n\nconst NoPhoto = styled.div`\n ${PhotoContainerStyle}\n padding-top: 15px;\n ${PlaceholderText} {\n margin-top: 18px;\n }\n`;\n\nconst StyledInputFileButton = styled(InputFileButton)`\n width: 100%;\n`;\n\nconst ButtonsWrapper = styled.div`\n display: flex;\n flex-direction: column;\n\n button {\n margin-bottom: 10px;\n }\n\n`;\n\ninterface IAvatar {\n title?: string;\n photoText?: string;\n buttonText?: string;\n buttonTextReplace?: string;\n cropToolTitle?: string;\n cropToolCancelTxt?: string;\n cropToolConfirmTxt?: string;\n uploaderCropText?: string;\n deletePhotoText?: string;\n currentImg?: string;\n hasCrop?: boolean;\n onAvatarUpdate?: (imgFile: File) => void;\n onError?: (msg: string) => void;\n onRemove?: () => void;\n}\n\nconst AvatarUploader: React.FC<IAvatar> = ({\n title = 'Photograph',\n photoText = 'Drop Photo',\n buttonText = 'Select File',\n buttonTextReplace = 'Replace Photo',\n uploaderCropText = 'Crop Image',\n deletePhotoText = 'Remove',\n cropToolTitle,\n cropToolCancelTxt,\n cropToolConfirmTxt,\n currentImg,\n hasCrop = true,\n onAvatarUpdate = () => {},\n onError = () => {},\n onRemove = () => {},\n}) => {\n const [avatarImg, setAvatarImg] = useState(currentImg);\n const [cropImg, setCropImg] = useState('');\n const [isCropOpen, setIsCropOpen] = useState(false);\n\n const handleCrop = useCallback(\n async (newFileUrl: string, fileType: string) => {\n setAvatarImg(newFileUrl);\n const newFile = await fetch(newFileUrl)\n .then((r) => r.blob())\n .then((blobFile) => new File([blobFile], 'newAvatar', { type: fileType }));\n\n onAvatarUpdate(newFile);\n\n setIsCropOpen(false);\n },\n [onAvatarUpdate]\n );\n\n const handleCropClose = useCallback(() => {\n setIsCropOpen(false);\n setCropImg('');\n URL.revokeObjectURL(cropImg);\n }, [cropImg]);\n\n const handleFileUpload = useCallback(\n (newFiles: FileList) => {\n if (newFiles.length === 1) {\n if (!isValidImage(newFiles[0])) {\n onError('Please upload only jpeg and png file');\n return;\n }\n const prevImg = URL.createObjectURL(newFiles[0]);\n\n if (hasCrop) {\n setCropImg(prevImg);\n setIsCropOpen(true);\n } else {\n onAvatarUpdate(newFiles[0]);\n setAvatarImg(prevImg);\n }\n } else {\n onError('Drop only one file');\n }\n },\n [hasCrop, onError, onAvatarUpdate]\n );\n\n const handleEdit = useCallback((fileUrl: string) => {\n setCropImg(fileUrl);\n setIsCropOpen(true);\n }, []);\n\n useEffect(() => {\n setAvatarImg(currentImg);\n }, [currentImg]);\n\n const handleRemove = useCallback(() => {\n setAvatarImg('');\n onRemove();\n }, [onRemove]);\n\n return (\n <Container>\n <Label labelText={title} htmlFor='avatar-upload' />\n <PreviewImageGroup>\n {avatarImg ? (\n <PreviewImage src={avatarImg} alt='avatar image' crossOrigin='anonymous' />\n ) : (\n <NoPhoto>\n <AvatarPlaceholder />\n <PlaceholderText>{photoText}</PlaceholderText>\n </NoPhoto>\n )}\n {((currentImg && !hasCrop) || !currentImg) && (\n <DropArea height={PHOTO_HEIGHT} dropCallback={handleFileUpload} />\n )}\n </PreviewImageGroup>\n {avatarImg ? (\n <ButtonsWrapper>\n {hasCrop ? (\n <ButtonWithIcon\n icon='Crop'\n design='secondary'\n position='left'\n size='small'\n onClick={() => handleEdit(avatarImg)}\n >\n {uploaderCropText}\n </ButtonWithIcon>\n ) : (\n <StyledInputFileButton\n id='avatar-upload'\n text={buttonTextReplace}\n buttonSize='small'\n buttonDesign='secondary'\n accept='image/*'\n inputCallback={handleFileUpload}\n />\n )}\n <ButtonWithIcon\n icon='Delete'\n design='secondary'\n position='left'\n size='small'\n onClick={handleRemove}\n >\n {deletePhotoText}\n </ButtonWithIcon>\n </ButtonsWrapper>\n ) : (\n <StyledInputFileButton\n id='avatar-upload'\n text={buttonText}\n buttonSize='small'\n accept='image/*'\n inputCallback={handleFileUpload}\n />\n )}\n {isCropOpen && hasCrop ? (\n <CropTool\n imgUrl={cropImg}\n onCrop={handleCrop}\n onClose={handleCropClose}\n onError={onError}\n canvasHeight={CANVAS_HEIGHT}\n canvasWidth={CANVAS_WIDTH}\n cropHeight={CROP_WIDTH_AREA}\n cropWidth={CROP_HEIGHT_AREA}\n aspectRatio={ratio}\n title={cropToolTitle}\n cancelBtnTxt={cropToolCancelTxt}\n cropBtnTxt={cropToolConfirmTxt}\n isResizable\n />\n ) : null}\n </Container>\n );\n};\n\nexport default AvatarUploader;\n","import type React from 'react';\nimport type { ButtonHTMLAttributes } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport { animation } from '../../theme/common';\nimport type { FilterButtonDesign } from '../FilterTypes';\n\nconst LeftIconWrapper = styled.div<{ $isSortAscending: boolean }>`\n ${({ $isSortAscending }) =>\n $isSortAscending &&\n css`\n transform: scaleY(-1);\n `};\n padding: 0 6px;\n`;\n\nconst fadeInAnimation = keyframes`\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nconst FlipArrowContainer = styled.div<{ $design?: FilterButtonDesign }>`\n ${({ $design }) => ($design === 'default' ? `padding: 0px 12px 0px 8px;` : `padding: 0px 8px;`)};\n`;\n\nconst StyledButton = styled.button<{\n $isOpen?: boolean;\n $hasFlipArrow?: boolean;\n $design?: FilterButtonDesign;\n}>`\n ${resetButtonStyles};\n border-radius: 3px;\n height: var(--common-height);\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n padding: 4px 10px 4px 4px;\n\n ${({ $design }) =>\n $design === 'basic'\n ? `\n background-color: transparent;\n border: 1px solid transparent;\n padding: 4px;\n `\n : `\n background-color: var(--filter-button-background-color);\n border: var(--filter-button-stroke-color) 1px solid;\n box-shadow: 0px 4px 9px 0px var(--filter-button-shadow-color);\n `};\n\n ${({ $hasFlipArrow }) => $hasFlipArrow && `padding: 4px 0px 4px 4px;`};\n\n text-align: left;\n font-size: 12px;\n font-weight: 500;\n text-decoration: none;\n color: var(--filter-button-text-color);\n font-family: var(--font-ui);\n transition:\n opacity ${animation.speed.fast} ${animation.easing.primary.out},\n background-color ${animation.speed.fast} ${animation.easing.primary.out},\n box-shadow ${animation.speed.fast} ${animation.easing.primary.out},\n color ${animation.speed.fast} ${animation.easing.primary.out},\n border ${animation.speed.fast} ${animation.easing.primary.out};\n\n animation: ${fadeInAnimation} ${animation.speed.slower} ${animation.easing.primary.out};\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n [stroke]{\n transition: stroke ${animation.speed.fast} ${animation.easing.primary.out};\n }\n }\n\n &:hover:enabled, &:active:enabled {\n color: var(--grey-12);\n\n ${({ $design }) =>\n $design === 'basic'\n ? ''\n : css`\n box-shadow: 0px 4px 9px 0px var(--primary-a2);\n border-color: var(--primary-7);\n `};\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--primary-9);\n }\n }\n\n ${({ $isOpen }) =>\n !$isOpen &&\n css`\n ${FlipArrowContainer} ${IconWrapper} {\n [stroke]{\n stroke: var(--grey-12);\n }\n };\n `};\n\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 50%;\n }\n\n ${({ $isOpen, $hasFlipArrow }) =>\n $isOpen &&\n $hasFlipArrow &&\n css`\n background-color: var(--primary-9);\n border: solid 1px var(--primary-9);\n color: var(--white-1);\n\n &, &:hover:enabled, &:active:enabled {\n color: var(--white-1);\n ${IconWrapper} {\n [stroke]{\n stroke: var(--white-1);\n }\n }\n }\n\n ${FlipArrowContainer} ${IconWrapper} {\n [stroke]{\n stroke: var(--white-1);\n }\n };\n `};\n\n`;\n\nconst InnerContainer = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n`;\n\nconst ButtonText = styled.div<{ $hasFlipArrow: boolean }>``;\n\ninterface OwnProps {\n icon: string;\n hasFlipArrow?: boolean;\n isSortAscending?: boolean;\n isOpen?: boolean;\n design?: FilterButtonDesign;\n}\n\ntype IFilterButton = OwnProps & ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst FilterButton: React.FC<IFilterButton> = ({\n icon,\n hasFlipArrow = false,\n isSortAscending = false,\n isOpen,\n design = 'default',\n children,\n formAction,\n ...props\n}) => {\n return (\n <StyledButton\n type='button'\n {...props}\n $isOpen={isOpen}\n $hasFlipArrow={hasFlipArrow}\n $design={design}\n >\n <InnerContainer>\n <LeftIconWrapper $isSortAscending={isSortAscending}>\n <Icon icon={icon} size={12} weight='light' color='filter-button-icon-color' />\n </LeftIconWrapper>\n <ButtonText $hasFlipArrow={hasFlipArrow}>{children}</ButtonText>\n\n {hasFlipArrow && (\n <FlipArrowContainer $design={design}>\n <Icon icon={isOpen ? 'Up' : 'Down'} size={6} color='grey-11' />\n </FlipArrowContainer>\n )}\n </InnerContainer>\n </StyledButton>\n );\n};\n\nexport default FilterButton;\n","import type React from 'react';\nimport type { HTMLAttributes } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div<{ $height?: string }>`\n box-shadow: 0px 5px 25px 0px var(--filter-button-shadow-color);\n background-color: var(--filter-dropdown-background-color-fallback);\n @supports( background-color: var(--filter-dropdown-background-color) ){\n background-color: var(--filter-dropdown-background-color);\n };\n\n backdrop-filter: blur(20px);\n border-right: 1px solid var(--grey-6);\n border-bottom: 1px solid var(--grey-6);\n border-left: 1px solid var(--grey-6);\n border-radius: 3px;\n position: relative;\n display: inline-flex;\n overflow: visible;\n padding-top: 5px;\n\n &::before {\n content: '';\n background-color: var(--filter-dropdown-accent);\n border-radius: 3px 3px 0 0;\n box-shadow: 0px 5px 25px 0px var(--primary-a5);\n\n display: block;\n height: 5px;\n position: absolute;\n left: -1px;\n top: -1px;\n right: -1px;\n z-index: 1;\n }\n\n`;\n\nconst Inner = styled.div`\n display: inline-flex;\n flex-direction: column;\n`;\n\ninterface IProps {\n $height?: string;\n}\n\ntype Props = IProps & HTMLAttributes<HTMLDivElement>;\n\nconst FilterDropdownContainer: React.FC<Props> = ({ children, ...props }) => {\n return (\n <Container {...props}>\n <Inner>{children}</Inner>\n </Container>\n );\n};\n\nexport default FilterDropdownContainer;\n","import type React from 'react';\nimport { useCallback } from 'react';\nimport type { FilterButtonDesign, IToggleOption } from '../FilterTypes';\nimport FilterButton from './FilterButton';\n\ntype IToggleButton = {\n options: IToggleOption[];\n categoryLabel: string;\n selectedIndex: number;\n design?: FilterButtonDesign;\n onToggle: (index: number, value: string | number) => void;\n};\n\nconst ToggleButton: React.FC<IToggleButton> = ({\n options,\n categoryLabel,\n selectedIndex,\n design = 'basic',\n onToggle,\n ...props\n}) => {\n const onToggleCallback = useCallback(\n (currentIndex: number) => {\n const selected = currentIndex === 1 ? 0 : 1;\n onToggle(selected, options[selected].value);\n },\n [onToggle, options]\n );\n\n if (selectedIndex !== 0 && selectedIndex !== 1) return null;\n\n return (\n <FilterButton\n icon={options[selectedIndex].icon}\n onClick={() => onToggleCallback(selectedIndex)}\n {...{ design }}\n {...props}\n >\n {categoryLabel && `${categoryLabel}: `}\n {`${options[selectedIndex].text}`}\n </FilterButton>\n );\n};\n\nexport default ToggleButton;\n","import { endOfDay, format, isEqual, min, set } from 'date-fns';\nimport type React from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { isNotNumber } from '../../helpers/index';\nimport Icon from '../../Icons/Icon';\n\nconst Container = styled.div<{ $hide: boolean }>`\n display: flex;\n flex-direction: column;\n\n ${({ $hide }) =>\n $hide &&\n css`\n display: none;\n `}\n`;\n\nconst Label = styled.label`\n font-family: var(--font-ui);\n text-align: left;\n font-size: 12px;\n font-weight: 500;\n text-decoration: none;\n color: var(--primary-10);\n padding: 12px;\n border-bottom: var(--grey-6) 1px solid;\n`;\n\nconst Item = styled.div`\n padding: 12px;\n display: flex;\n justify-content: left;\n`;\n\nconst IconWrap = styled.div`\n flex: 0 0 32px;\n align-items: center;\n display: flex;\n padding-top: 1px;\n`;\n\nconst Input = styled.input<{\n readOnly?: boolean;\n $isTimeRangeValid: boolean;\n $isTimeInput?: boolean;\n}>`\n font-family: var(--font-data);\n text-align: left;\n font-size: 14px;\n font-weight: 500;\n letter-spacing: 0.2px;\n text-decoration: none;\n color: var(--grey-12);\n background-color: transparent;\n\n width: 100%;\n border: ${({ $isTimeInput }) =>\n $isTimeInput\n ? ({ $isTimeRangeValid }) =>\n $isTimeRangeValid ? 'transparent 1px solid' : 'var(--warning-a9) 1px solid'\n : 'transparent 1px solid'};\n outline: none;\n flex: 1;\n justify-content: space-between;\n border-radius: 3px;\n\n &:focus, &:hover {\n\n border-color: ${({ $isTimeInput }) =>\n $isTimeInput\n ? ({ $isTimeRangeValid }) => ($isTimeRangeValid ? 'transparent' : 'var(--warning-a9)')\n : 'transparent'};\n }\n`;\n\nconst TimeColon = styled.div`\n flex: 0 0 20px;\n text-align: center;\n`;\n\nconst InputWrap = styled.div`\n display: flex;\n flex: 1;\n box-sizing: border-box;\n border-radius: 3px;\n\n &:focus-within {\n background: var(--primary-9);\n box-shadow: 0px 0px 0px 5px var(--primary-9); \n ${Input}{\n color: var(--white-1);\n border-color: transparent;\n }\n\n ${TimeColon}{\n color: var(--white-1);\n text-align: center;\n }\n }\n`;\n\ninterface IProps {\n title: string;\n hasDate: boolean;\n hasTime: boolean;\n date?: Date;\n setDateCallback?: (date: Date) => void;\n setTimeCallback?: (date: Date) => void;\n allowAfterMidnight?: boolean;\n isTimeRangeValid?: boolean;\n}\n\nconst DateTimeBlock: React.FC<IProps> = ({\n allowAfterMidnight = false,\n title,\n hasDate,\n hasTime,\n isTimeRangeValid = true,\n date = new Date(),\n setDateCallback = () => {},\n}) => {\n /**\n *\n * Description of the rules can be found int https://docs.google.com/spreadsheets/d/1POe9uZxKXtLhQFF6DIV-RclUp7T7oXgSeSLlbYmE38g/edit?usp=sharing\n */\n const validHourMin = (\n textHour: string,\n textMin: string,\n hasDate: boolean,\n allowAfterMidnight?: boolean\n ): { newHour: number; newMin: number } => {\n const intHour = Number(textHour.slice(-2));\n const intMin = Number(textMin.slice(-2));\n\n const newHour = intHour > 24 ? Number(textHour.slice(-1)) : intHour;\n const newMin = intMin > 60 ? Number(textMin.slice(-1)) : intMin;\n\n //Rule 8\n if (newHour >= 24 && newMin !== -1 && allowAfterMidnight) {\n return { newHour: 24, newMin: 0 };\n }\n\n // Rule 7\n if (newHour === 0 && newMin === 0 && allowAfterMidnight && !hasDate) {\n return { newHour: 0, newMin: 1 };\n }\n\n // Rule 6\n if (newHour === 23 && newMin === 60 && !allowAfterMidnight) {\n return { newHour: 23, newMin: 59 };\n }\n\n // Rule 5\n if (newHour >= 24 && !allowAfterMidnight) {\n return { newHour: 23, newMin };\n }\n\n // Rule 4\n if (newMin === 60) {\n return { newHour: newHour + 1, newMin: 0 };\n }\n\n // Rule 3\n if (newHour > 0 && newMin === -1) {\n return { newHour: newHour - 1, newMin: 59 };\n }\n\n // Rule 2\n if (newHour === 0 && newMin === -1) {\n return { newHour, newMin: 0 };\n }\n\n // Rule 1\n if (newHour === -1) {\n return { newHour: 0, newMin };\n }\n\n return { newHour, newMin };\n };\n\n const [displayHours, setDisplayHours] = useState<string>(format(date, 'mm'));\n const [displayMinutes, setDisplayMinutes] = useState<string>(format(date, 'HH'));\n\n const setDateHours = useCallback(\n ({ target: { value } }: React.ChangeEvent<HTMLInputElement>) => {\n if (isNotNumber(value)) {\n return;\n }\n\n const { newHour, newMin } = validHourMin(value, displayMinutes, hasDate, allowAfterMidnight);\n\n setDateCallback(\n min([\n endOfDay(date),\n set(date, {\n hours: newHour,\n minutes: newMin,\n seconds: 0,\n milliseconds: 0,\n }),\n ])\n );\n },\n // biome-ignore lint/correctness/useExhaustiveDependencies: validHourMin is declared inline, so its identity changes every render — fixing properly means wrapping it in useCallback. See #644.\n [allowAfterMidnight, date, displayMinutes, hasDate, setDateCallback, validHourMin]\n );\n\n const setDateMinutes = useCallback(\n ({ target: { value } }: React.ChangeEvent<HTMLInputElement>) => {\n if (isNotNumber(value)) {\n return;\n }\n\n const { newHour, newMin } = validHourMin(displayHours, value, hasDate, allowAfterMidnight);\n\n setDateCallback(\n min([\n endOfDay(date),\n set(date, {\n hours: newHour,\n minutes: newMin,\n seconds: 0,\n milliseconds: 0,\n }),\n ])\n );\n },\n // biome-ignore lint/correctness/useExhaustiveDependencies: validHourMin is declared inline, so its identity changes every render — fixing properly means wrapping it in useCallback. See #644.\n [allowAfterMidnight, date, displayHours, hasDate, setDateCallback, validHourMin]\n );\n\n useEffect(() => {\n if (allowAfterMidnight && isEqual(date, endOfDay(date))) {\n setDisplayHours('24');\n setDisplayMinutes('00');\n } else {\n setDisplayMinutes(format(date, 'mm'));\n setDisplayHours(format(date, 'HH'));\n }\n }, [date, allowAfterMidnight]);\n\n return (\n <Container $hide={!hasDate && !hasTime}>\n <Label>{title}</Label>\n\n {hasDate && (\n <Item>\n <IconWrap>\n <Icon icon='Date' color='dimmed' size={14} weight='light' />\n </IconWrap>\n <InputWrap>\n <Input\n type='text'\n readOnly\n value={format(date, 'yyyy/MM/dd')}\n $isTimeRangeValid={isTimeRangeValid}\n />\n </InputWrap>\n </Item>\n )}\n\n {hasTime && (\n <Item>\n <IconWrap>\n <Icon icon='Time' color='dimmed' size={14} weight='light' />\n </IconWrap>\n <InputWrap>\n <Input\n name='hours'\n type='number'\n min='-1'\n max={allowAfterMidnight ? 24 : 23}\n value={displayHours}\n onChange={setDateHours}\n $isTimeRangeValid={isTimeRangeValid}\n autoComplete='off'\n $isTimeInput\n />\n <TimeColon>:</TimeColon>\n <Input\n name='minutes'\n type='number'\n min='-1'\n max='60'\n value={displayMinutes}\n onChange={setDateMinutes}\n $isTimeRangeValid={isTimeRangeValid}\n autoComplete='off'\n $isTimeInput\n />\n </InputWrap>\n </Item>\n )}\n </Container>\n );\n};\n\nexport default DateTimeBlock;\n","import {\n add,\n addMonths,\n eachDayOfInterval,\n eachWeekOfInterval,\n endOfDay,\n endOfMonth,\n endOfWeek,\n format,\n type Interval,\n intervalToDuration,\n isAfter,\n isEqual,\n isSameDay,\n isSameMonth,\n isToday,\n isWithinInterval,\n set,\n startOfDay,\n startOfMonth,\n} from 'date-fns';\nimport { enUS, ja } from 'date-fns/locale';\nimport type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport Button from '../../Form/atoms/Button';\nimport Icon from '../../Icons/Icon';\nimport type { IDateInterval, IDateRange } from '..';\nimport DateTimeBlock from '../atoms/DateTimeBlock';\n\n/**\n * Convert a single days duration to an interval.\n * @param day The day to convert to an interval\n */\n\nconst initializeInterval = (day: Date): IDateInterval => {\n return {\n start: set(day, { seconds: 0, milliseconds: 0 }),\n end: endOfDay(day),\n };\n};\n\nconst TODAY = new Date();\nconst TODAY_INTERVAL: IDateInterval = initializeInterval(startOfDay(new Date()));\n\ntype CellStates = 'off' | 'single' | 'start' | 'end' | 'inside' | 'hover' | 'insideHover';\ntype DateMode = 'single' | 'interval';\ntype TimeMode = 'off' | 'single' | 'interval';\n\n// interface TimeProperties {\n// hours: number\n// minutes: number\n// seconds: number\n// milliseconds: number\n// }\n\n// interface TimeRange {\n// start: TimeProperties\n// end: TimeProperties\n// }\n\nconst Container = styled.div`\n display: flex;\n`;\n\nconst DateTimeArea = styled.div`\n border-right: var(--grey-6) 1px solid;\n width: 170px;\n display: flex;\n flex-direction: column;\n`;\n\nconst TimeZoneOption = styled.div`\n border-top: var(--grey-6) 1px solid;\n margin-top: auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 11px;\n box-sizing: border-box;\n`;\n\nconst TimeZoneLabel = styled.div`\n font-family: var(--font-ui);\n text-align: left;\n font-size: 12px;\n font-weight: 400;\n color: var(--grey-11);\n`;\nconst TimeZoneValue = styled.div`\n font-family: var(--font-data);\n text-align: left;\n font-size: 12px;\n font-weight: 400;\n color: var(--grey-11);\n`;\n\nconst CalendarArea = styled.div`\n user-select: none;\n`;\n\nconst CalendarHeader = styled.div`\n display: flex;\n height: 70px;\n border-bottom: var(--grey-6) 1px solid;\n text-align: center;\n`;\n\nconst CurrentMonth = styled.div`\n flex: 1;\n flex-direction: column;\n display: flex;\n align-items: center;\n justify-content: center;\n\n text-align: center;\n font-size: 20px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: 0.5px;\n color: var(--primary-10);\n\n span {\n display: block;\n flex: 0;\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.33px;\n }\n`;\n\nconst IconWrap = styled.div`\n [stroke]{\n stroke: var(--grey-8);\n }\n`;\n\nconst PaginateMonth = styled.button`\n cursor: pointer;\n flex: 0 0 72px;\n border: none;\n background: transparent;\n outline: none;\n text-align: center;\n font-size: 12px;\n font-weight: 700;\n line-height: 20px;\n text-transform: uppercase;\n letter-spacing: 0.4px;\n color: var(--grey-10);\n display: flex;\n justify-content: space-around;\n align-items: center;\n\n transition: color var(--speed-fast) var(--easing-primary-in-out);\n\n ${IconWrap}{\n svg * {\n transition: stroke var(--speed-fast) var(--easing-primary-in-out);\n }\n }\n\n &:hover:enabled {\n color: var(--grey-12);\n\n ${IconWrap}{\n [stroke]{\n stroke: var(--grey-12);\n }\n }\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n`;\n\nconst CalBody = styled.div`\n padding: 5px 0;\n`;\n\nconst CalButtons = styled.div`\n display: flex;\n padding: 4px;\n justify-content: flex-end;\n align-items: flex-start;\n gap: 4px;\n align-self: stretch;\n border-top: 1px solid var(--grey-6);\n`;\n\nconst CalRightButtons = styled.div`\n display: flex;\n align-items: center;\n gap: 4px;\n`;\n\nconst CalRow = styled.div`\n display: grid;\n grid-template-columns: repeat(7, 40px);\n height: 40px;\n box-sizing: border-box;\n\n padding: 0 10px;\n`;\n\nconst CalHRow = styled(CalRow)`\n border-bottom: var(--grey-6) 1px solid;\n`;\n\nconst CalCell = styled.button`\n ${resetButtonStyles};\n display: flex;\n text-align: center;\n justify-content: center;\n align-items: center;\n border-radius: 5px;\n font-size: 14px;\n font-weight: 400;\n text-decoration: none;\n color: var(--grey-12);\n font-family: var(--font-data);\n`;\n\nconst CalHCell = styled(CalCell)`\n text-align: center;\n font-size: 12px;\n font-weight: 700;\n color: var(--grey-a11);\n`;\n\nconst ContentDot = styled.div<{ $hasContent: boolean; $state?: CellStates; $isToday?: boolean }>`\n position: absolute;\n left: 18px;\n bottom: 5px;\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background-color: var(--primary-11);\n\n ${({ $state }) =>\n ($state === 'single' || $state === 'start' || $state === 'end') &&\n css`\n background-color: var(--white-12);`}\n\n ${({ $state }) =>\n ($state === 'inside') &&\n css`\n background-color: var(--primary-12);`}\n\n ${({ $isToday }) =>\n $isToday &&\n css`\n left: 16px;\n bottom: 3px;\n `}\n\n ${({ $hasContent }) =>\n !$hasContent &&\n css`\n display: none;\n `}\n`;\n\nconst DayText = styled.span`\n transform: translateY(-1px);\n`;\n\nconst CalCellB = styled(CalCell)<{ $thisMonth?: boolean; $isToday?: boolean; $state?: CellStates }>`\n cursor: pointer;\n position: relative;\n text-align: center;\n font-size: 14px;\n font-weight: 400;\n\n ${({ $thisMonth }) =>\n !$thisMonth &&\n css`\n color: var(--grey-a8);\n `}\n\n ${({ $isToday }) =>\n $isToday &&\n css`\n border: 2px solid var(--primary-a7);\n `}\n\n ${({ $state }) =>\n ($state !== 'single' && $state !== 'start' && $state !== 'end') &&\n css`\n &:hover:enabled {\n background: var(--primary-a6);\n color: var(--white-1);\n }\n `};\n\n ${({ $state }) =>\n ($state === 'single' || $state === 'start' || $state === 'end') &&\n css`\n background: var(--primary-9);\n color: var(--white-1);\n `}\n\n ${({ $state }) =>\n ($state === 'start') &&\n css`\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n `}\n\n ${({ $state }) =>\n ($state === 'end') &&\n css`\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n `}\n\n ${({ $state }) =>\n ($state === 'insideHover') &&\n css`\n background: var(--primary-a9) !important;\n color: var(--white-1);\n `}\n\n ${({ $state }) =>\n ($state === 'inside') &&\n css`\n background: var(--primary-a5);\n border-radius: 0;\n opacity: 1;\n\n &:nth-child(7n+1), &:nth-child(7n){\n &::after {\n background: var(--primary-a5);\n display: block;\n content: '';\n position: absolute;\n left: -10px;\n width: 10px;\n top: 0;\n height: 40px;\n }\n }\n\n &:nth-child(7n)::after {\n left: auto;\n right: -10px;\n }\n `}\n\n &:disabled {\n color: var(--grey-6);\n cursor: not-allowed;\n\n ${({ $state }) =>\n ($state === 'single' || $state === 'start' || $state === 'end') &&\n css`\n color: var(--white-1);\n background: var(--red-a9);\n `}\n\n ${({ $state }) =>\n ($state === 'inside') &&\n css`\n color: var(--white-1);\n background: var(--red-a7);\n &:nth-child(7n+1), &:nth-child(7n){\n &::after {\n background: var(--red-a7);\n }\n }\n `};\n }\n\n`;\n\nconst enDayGuide: string[] = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\nconst jpDayGuide: string[] = ['日', '月', '火', '水', '木', '金', '土'];\n\nexport interface IDatePicker {\n initialValue?: Date | IDateInterval;\n dateMode?: DateMode;\n timeMode?: TimeMode;\n hasEmptyValue?: boolean;\n dateTimeTextUpper?: string;\n dateTimeTextLower?: string;\n timeZoneTitle?: string;\n timeZoneValueTitle?: string;\n availableRange?: IDateRange;\n contentDays?: Date[];\n lang?: 'en' | 'ja';\n cancelText?: string;\n applyText?: string;\n hasApply?: boolean;\n disableApply?: boolean;\n updateCallback?: (data: IDateInterval | Date) => void;\n applyCallback?: () => void;\n cancelCallback?: () => void;\n}\n\nconst DatePicker: React.FC<IDatePicker> = ({\n dateMode = 'interval',\n timeMode = 'interval',\n dateTimeTextUpper = 'From',\n dateTimeTextLower = 'To',\n timeZoneTitle = 'Timezone',\n timeZoneValueTitle = 'JST',\n hasEmptyValue = false,\n updateCallback = () => {},\n initialValue,\n availableRange,\n contentDays,\n lang = 'en',\n cancelText = 'Cancel',\n applyText = 'Apply',\n hasApply = false,\n disableApply = false,\n applyCallback = () => {},\n cancelCallback = () => {},\n}) => {\n // TODO: Have a function to output tidied up data for the configuration.\n\n const [selectedRange, setSelectedRange] = useState<IDateInterval | null>(\n getInitialValue(hasEmptyValue, initialValue)\n );\n const [focusedMonth, setFocusedMonth] = useState(\n selectedRange === null ? TODAY : selectedRange.start\n );\n const [targetedDate, setTargetedDate] = useState<'start' | 'end' | 'done'>('start');\n const [weeksOfMonth, setWeeksOfMonth] = useState<Date[]>([]);\n const isInitialMount = useRef(true);\n const [isTimeRangeValid, setIsTimeRangeValid] = useState<boolean>(true);\n const dayGuide = lang === 'ja' ? jpDayGuide : enDayGuide;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: intentionally resets picker state when dateMode/timeMode props change; setters are stable\n useEffect(() => {\n if (isInitialMount.current) {\n isInitialMount.current = false;\n } else {\n const now = new Date();\n setSelectedRange(initializeInterval(startOfDay(now)));\n setFocusedMonth(now);\n }\n }, [dateMode, timeMode]);\n\n useEffect(() => {\n setWeeksOfMonth(\n eachWeekOfInterval({\n start: startOfMonth(focusedMonth),\n end: endOfMonth(focusedMonth),\n })\n );\n }, [focusedMonth]);\n\n useEffect(() => {\n if (selectedRange !== null) {\n updateCallback(\n dateMode === 'interval' || timeMode === 'interval' ? selectedRange : selectedRange.start\n );\n }\n }, [dateMode, selectedRange, timeMode, updateCallback]);\n\n /**\n * Handler for updating picked dates when a calendar day has been selected.\n * @param day The day of the cell that has been clicked / actioned.\n */\n const onCellClick = useCallback(\n (day: Date) => {\n // The first click will initialize the range when empty is valid\n const validRange = selectedRange ? selectedRange : TODAY_INTERVAL;\n\n if (dateMode === 'single') {\n // === Single Mode ===\n const start = updateDay(validRange.start, day);\n const end = updateDay(validRange.end, day);\n setSelectedRange({\n start,\n end,\n });\n } else {\n // === Interval Mode ===\n // Setting the interval end (assuming it's later than the start).\n if (targetedDate === 'end' && isAfter(day, validRange.start)) {\n const end = updateDay(validRange.end, day);\n setSelectedRange({\n ...validRange,\n end,\n });\n\n setTargetedDate('done');\n\n // For first interaction || setting the end date correctly || if completed and restarting.\n } else if (targetedDate === 'start' || targetedDate === 'end' || targetedDate === 'done') {\n const start = updateDay(validRange.start, day);\n const end = updateDay(validRange.end, day);\n setSelectedRange({\n start,\n end,\n });\n setTargetedDate('end');\n }\n }\n },\n [dateMode, selectedRange, targetedDate]\n );\n\n useEffect(() => {\n const { start, end } = selectedRange ? selectedRange : TODAY_INTERVAL;\n\n if (timeMode === 'interval' && isAfter(add(start, { minutes: 1 }), end)) {\n if (isEqual(end, endOfDay(start)) && end.getSeconds() > 0) {\n // Midnight exception\n setIsTimeRangeValid(true);\n } else {\n setIsTimeRangeValid(false);\n }\n } else {\n setIsTimeRangeValid(true);\n }\n }, [selectedRange, timeMode]);\n\n const updateStartDate = useCallback(\n (start: Date) => {\n const { end } = selectedRange ? selectedRange : TODAY_INTERVAL;\n\n setSelectedRange({ start, end });\n },\n [selectedRange]\n );\n\n const updateEndDate = useCallback(\n (end: Date) => {\n const { start } = selectedRange ? selectedRange : TODAY_INTERVAL;\n\n setSelectedRange({ start, end });\n },\n [selectedRange]\n );\n\n return (\n <Container>\n <DateTimeArea>\n <DateTimeBlock\n {...{ isTimeRangeValid }}\n title={dateTimeTextUpper}\n hasDate\n hasTime={timeMode !== 'off'}\n date={selectedRange ? selectedRange.start : TODAY_INTERVAL.start}\n setDateCallback={updateStartDate}\n />\n <DateTimeBlock\n {...{ isTimeRangeValid }}\n title={dateTimeTextLower}\n hasDate={dateMode === 'interval'}\n hasTime={timeMode === 'interval'}\n date={selectedRange ? selectedRange.end : TODAY_INTERVAL.end}\n allowAfterMidnight\n setDateCallback={updateEndDate}\n />\n\n <TimeZoneOption>\n <TimeZoneLabel>{timeZoneTitle}</TimeZoneLabel>\n <TimeZoneValue>{timeZoneValueTitle}</TimeZoneValue>\n </TimeZoneOption>\n </DateTimeArea>\n\n <CalendarArea>\n <CalendarHeader>\n <PaginateMonth\n type='button'\n disabled={isPrevMonthOutOfRange(focusedMonth, availableRange)}\n onClick={() => setFocusedMonth(addMonths(focusedMonth, -1))}\n >\n <IconWrap>\n <Icon icon='Left' color='dimmed' size={10} />\n </IconWrap>\n {format(addMonths(focusedMonth, -1), 'MMM', { locale: lang === 'ja' ? ja : enUS })}\n </PaginateMonth>\n\n <CurrentMonth>\n <span>{format(focusedMonth, 'yyyy')}</span>\n {format(focusedMonth, 'MMMM', { locale: lang === 'ja' ? ja : enUS })}\n </CurrentMonth>\n\n <PaginateMonth\n type='button'\n disabled={isNextMonthOutOfRange(focusedMonth, availableRange)}\n onClick={() => setFocusedMonth(addMonths(focusedMonth, 1))}\n >\n {format(addMonths(focusedMonth, 1), 'MMM', { locale: lang === 'ja' ? ja : enUS })}\n <IconWrap>\n <Icon icon='Right' color='dimmed' size={10} />\n </IconWrap>\n </PaginateMonth>\n </CalendarHeader>\n\n <CalHRow>\n {dayGuide.map((day) => {\n return <CalHCell key={day}>{day}</CalHCell>;\n })}\n </CalHRow>\n\n <CalBody>\n {weeksOfMonth.map((week) => {\n const days = eachDayOfInterval({\n start: week,\n end: endOfWeek(week),\n });\n\n return (\n <CalRow key={+week}>\n {days.map((day) => {\n const dayState = cellState(day, selectedRange);\n const isTodayValue = isToday(day);\n\n return (\n <CalCellB\n key={+day}\n disabled={isDayOutOfRange(day, availableRange)}\n onClick={() => onCellClick(day)}\n $state={dayState}\n $thisMonth={isSameMonth(day, focusedMonth)}\n $isToday={isTodayValue}\n >\n <DayText>{format(day, 'd')}</DayText>\n <ContentDot\n $hasContent={dayHasContent(day, contentDays)}\n $state={dayState}\n $isToday={isTodayValue}\n />\n </CalCellB>\n );\n })}\n </CalRow>\n );\n })}\n </CalBody>\n\n {hasApply && (\n <CalButtons>\n {hasApply && (\n <CalRightButtons>\n <Button design='secondary' onClick={cancelCallback}>\n {cancelText}\n </Button>\n <Button\n onClick={applyCallback}\n disabled={!isTimeRangeValid || selectedRange === null || disableApply}\n >\n {applyText}\n </Button>\n </CalRightButtons>\n )}\n </CalButtons>\n )}\n </CalendarArea>\n </Container>\n );\n};\n\nexport default DatePicker;\n\n/**\n * Used to work out the state of the calendar cell in regards to selection or position in\n * the date range.\n * @param day Date - The date of the cell in the calendar.\n * @param interval Interval - The date range that is active in the calendar.\n */\nconst cellState = (day: Date, interval: Interval | null, _hoverDate?: Date): CellStates => {\n let state: CellStates = 'off';\n let isInsideInterval = false;\n\n if (interval === null) {\n return state;\n }\n\n const singleDayRange: boolean = intervalToDuration(interval).days === 0;\n\n try {\n isInsideInterval = isWithinInterval(day, interval);\n } catch (_error) {\n isInsideInterval = false;\n }\n\n if (isInsideInterval || isSameDay(interval.start, day)) {\n if (singleDayRange) {\n state = 'single';\n } else if (isSameDay(interval.start, day)) {\n state = 'start';\n } else if (isSameDay(interval.end, day)) {\n state = 'end';\n } else {\n state = 'inside';\n }\n }\n\n return state;\n};\n\nconst updateDay = (date: Date, target: Date) => {\n const newDate = set(target, {\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n milliseconds: date.getMilliseconds(),\n });\n\n return newDate;\n};\n\nconst getInitialValue = (\n hasEmptyValue: boolean,\n initialValue?: Date | IDateInterval\n): IDateInterval | null => {\n if (hasEmptyValue && initialValue === undefined) {\n return null;\n }\n\n const validInitial = initialValue ? initialValue : initializeInterval(startOfDay(new Date()));\n\n return validInitial instanceof Date ? initializeInterval(validInitial) : validInitial;\n};\n\nconst isPrevMonthOutOfRange = (focusedMonth: Date, availableRange?: IDateRange): boolean => {\n if (!availableRange?.start) return false;\n\n try {\n const startYear = availableRange.start.getFullYear();\n const startMonth = availableRange.start.getMonth();\n\n if (\n focusedMonth.getFullYear() < startYear ||\n (focusedMonth.getFullYear() === startYear && focusedMonth.getMonth() <= startMonth)\n ) {\n return true;\n }\n } catch (error) {\n console.warn('Invalid available range:', availableRange, error);\n }\n\n return false;\n};\n\nconst isNextMonthOutOfRange = (focusedMonth: Date, availableRange?: IDateRange): boolean => {\n if (!availableRange?.end) return false;\n\n try {\n const endYear = availableRange.end.getFullYear();\n const endMonth = availableRange.end.getMonth();\n\n if (\n focusedMonth.getFullYear() > endYear ||\n (focusedMonth.getFullYear() === endYear && focusedMonth.getMonth() >= endMonth)\n ) {\n return true;\n }\n } catch (error) {\n console.warn('Invalid available range:', availableRange, error);\n }\n\n return false;\n};\n\nconst isDayOutOfRange = (currentDay: Date, availableRange?: IDateRange): boolean => {\n if (!availableRange) return false;\n\n const { start, end } = availableRange;\n\n try {\n if (start && currentDay < start && !isSameDay(currentDay, start)) {\n return true;\n }\n\n if (end && currentDay > end && !isSameDay(currentDay, end)) {\n return true;\n }\n } catch (error) {\n console.warn('Invalid available range:', availableRange, error);\n }\n\n return false;\n};\n\nconst dayHasContent = (currentDay: Date, contentDays?: Date[]): boolean => {\n if (!contentDays) return false;\n\n return contentDays.some((day) => isSameDay(currentDay, day));\n};\n","import type React from 'react';\nimport styled, { css } from 'styled-components';\nimport { CheckMark } from '../../svg';\nimport { dimensions } from '../../theme/common';\nimport type { IInputOptionsType } from '..';\n\nconst Title = styled.div`\n font-family: var(--font-ui);\n display: block;\n color: var(--grey-12);\n font-size: 14px;\n font-weight: 500;\n user-select: none;\n pointer-events: none;\n white-space: nowrap;\n`;\n\nconst FakeCheckbox = styled.div`\n box-sizing: border-box;\n position: relative;\n width: 18px;\n height: 18px;\n border-radius: 5px;\n border-width: 2px;\n border-style: solid;\n`;\n\nconst FakeCheckboxInner = styled.div`\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n box-sizing: border-box;\n`;\n\nconst CheckMarkWrapper = styled.div`\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n svg {\n display: block;\n [stroke]{\n stroke: transparent;\n }\n [fill] {\n fill: var(--inverse);\n }\n }\n`;\n\nconst FakeRadioButton = styled.div`\n position: relative;\n display: inline-block;\n width: 18px;\n height: 18px;\n user-select: none;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n border-width: 2px;\n border-style: solid;\n`;\n\nconst FakeInnerRadio = styled.div`\n width: 10px;\n height: 10px;\n border-radius: 50%;\n user-select: none;\n`;\n\nconst Container = styled.div<{ $disabled: boolean; $selected: boolean }>`\n display: flex;\n align-items: center;\n height: 100%;\n width: 100%;\n gap: 12px;\n\n ${({ $selected, $disabled }) => css`\n \n ${FakeCheckbox}, ${FakeRadioButton} {\n border-color: var(--input-toggle-unchecked-border-color);\n }\n\n &:hover {\n cursor: pointer;\n ${Title} {\n color: var(--input-label-hover);\n }\n\n ${FakeCheckbox}, ${FakeRadioButton} {\n border-color: var(--input-toggle-unchecked-hover-border-color);\n ${FakeInnerRadio}, ${FakeCheckboxInner} {\n background-color: var(--input-toggle-unchecked-background-color);\n }\n }\n }\n\n ${\n $selected &&\n css`\n ${Title} {\n color: var(--input-label-active);\n font-weight: 600;\n }\n\n ${FakeCheckbox}, ${FakeRadioButton} {\n border-color: var(--input-toggle-checked-border-color);\n ${FakeInnerRadio}, ${FakeCheckboxInner} {\n background-color: var(--input-toggle-checked-background-color);\n }\n }\n \n &:hover {\n cursor: pointer;\n ${Title} {\n color: var(--input-label-hover);\n }\n\n ${FakeCheckbox}, ${FakeRadioButton} {\n border-color: var(--input-toggle-checked-hover-border-color);\n ${FakeInnerRadio}, ${FakeCheckboxInner} {\n background-color: var(--input-toggle-checked-hover-background-color);\n }\n }\n }\n \n\n `\n };\n\n ${\n $disabled &&\n css`\n cursor: not-allowed;\n `\n };\n\n ${FakeCheckbox}, ${FakeRadioButton} {\n transition: border-color var(--speed-faster) var(--easing-primary-out);\n }\n\n ${FakeInnerRadio} {\n transition: background-color var(--speed-faster) var(--easing-primary-out);\n }\n\n ${Title}{\n transition: color var(--speed-faster) var(--easing-primary-out);\n }\n \n `};\n`;\n\ninterface IFilterOption {\n title: string;\n value?: string | number;\n optionType?: IInputOptionsType;\n selected?: boolean;\n disabled?: boolean;\n onClick?: () => void;\n}\n\nconst FilterOption: React.FC<IFilterOption> = ({\n title,\n value,\n optionType = 'text',\n selected = false,\n disabled = false,\n onClick = () => {},\n ...props\n}) => {\n const iconWeight: number = dimensions.icons.weights.regular;\n\n return (\n <Container onClick={onClick} $disabled={disabled} $selected={selected} {...props}>\n {optionType === 'checkbox' && (\n <FakeCheckbox>\n <FakeCheckboxInner>\n {selected && (\n <CheckMarkWrapper>\n <CheckMark color='inverse' stroke='inverse' size={12} weight={iconWeight} />\n </CheckMarkWrapper>\n )}\n </FakeCheckboxInner>\n </FakeCheckbox>\n )}\n {optionType === 'radio' && (\n <FakeRadioButton>\n <FakeInnerRadio />\n </FakeRadioButton>\n )}\n <Title>{title}</Title>\n </Container>\n );\n};\n\nexport default FilterOption;\n","import type React from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport styled, { css } from 'styled-components';\nimport { removeAutoFillStyle, resetButtonStyles } from '../../common';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\n\nconst IconContainer = styled.div`\n padding: 0 2px;\n`;\n\nconst Container = styled.div<{\n $hasBorder: boolean;\n $disabled: boolean;\n $noBackground: boolean;\n $width?: string;\n}>`\n ${({ $hasBorder, $disabled, $noBackground, $width }) => css`\n\n transition: all var(--speed-normal) var(--easing-primary-in);\n gap: var(--search-input-container-gap, 6px);\n height: var(--input-compact-height);\n padding: 0;\n align-items: center;\n display: flex;\n border-radius: 3px;\n\n ${\n $hasBorder &&\n css`\n padding: 0 8px;\n border: 1px solid var(--filter-button-stroke-color);\n box-shadow: 0px 4px 9px 0px var(--filter-button-shadow-color);\n\n &:hover {\n border: var(--primary-7) 1px solid;\n box-shadow: 0px 4px 9px 0px var(--primary-a2);\n\n }\n ${IconContainer}{\n padding: 0;\n }\n `\n };\n\n ${\n $disabled &&\n css`\n opacity: 50%;\n cursor: not-allowed;\n `\n };\n\n ${\n $width &&\n css`\n width: ${$width};\n `\n };\n\n background-color: ${$noBackground ? 'transparent' : 'var(--grey-1)'};\n\n &:focus-within {\n background-color: ${$noBackground ? 'transparent' : 'var(--grey-1)'};\n border: ${$hasBorder ? '1px solid var(--primary-9)' : 'none'};\n box-shadow: 0px 4px 9px 0px ${$noBackground ? 'transparent' : 'var(--primary-a2)'};\n }\n\n `};\n\n ${IconWrapper} {\n flex-shrink: 0;\n display: flex;\n }\n\n\n`;\n\nconst CrossButton = styled.button`\n ${resetButtonStyles};\n flex-shrink: 0;\n flex-grow: 0;\n flex-basis: auto;\n width: 26px;\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n`;\n\nconst StyledInput = styled.input<{ $color: string }>`\n ${removeAutoFillStyle};\n\n font-family: var(--search-input-font-family,var(--font-ui));\n font-size: var(--search-input-font-size, 12px);\n font-weight: 500;\n color: var(--grey-12);\n\n &::placeholder {\n ${({ $color }) => $color && `color: var(--${$color})`};\n color: var(--grey-11);\n font-style: italic;\n }\n\n &:lang(ja)::placeholder {\n font-style: normal;\n };\n\n &:disabled {\n cursor: not-allowed;\n }\n\n border: none;\n height: 100%;\n width: 100%;\n background-color: transparent;\n box-sizing: border-box;\n border-radius: 3px;\n outline: none;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n`;\n\ninterface OwnProps {\n color?: 'mono' | 'dimmed' | 'subtle';\n hasBorder?: boolean;\n iconSize?: number;\n noBackground?: boolean;\n width?: string;\n hasCrossButton?: boolean;\n onCrossClick?: () => void;\n}\n\nexport type IBasicSearchInput = OwnProps & InputHTMLAttributes<HTMLInputElement>;\n\nconst BasicSearchInput: React.FC<IBasicSearchInput> = ({\n color = 'subtle',\n hasBorder = true,\n iconSize = 12,\n disabled = false,\n noBackground = false,\n hasCrossButton = false,\n onCrossClick = () => {},\n width,\n children,\n formAction,\n ...props\n}) => {\n return (\n <Container\n {...{\n $hasBorder: hasBorder,\n $disabled: disabled,\n $noBackground: noBackground,\n $width: width,\n }}\n >\n <IconContainer>\n <Icon {...{ color }} icon='Search' weight='regular' size={iconSize} />\n </IconContainer>\n <StyledInput {...{ $color: color, disabled }} {...props} />\n {hasCrossButton && (\n <CrossButton onClick={onCrossClick}>\n {' '}\n <Icon icon='CloseCompact' color='dimmed' size={12} />\n </CrossButton>\n )}\n </Container>\n );\n};\n\nexport default BasicSearchInput;\n","import type React from 'react';\nimport { useCallback, useImperativeHandle, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport FilterButton from '../atoms/FilterButton';\nimport type { FilterButtonDesign } from '../FilterTypes';\n\nconst Container = styled.div`\n position: relative;\n`;\n\nconst ButtonWrapper = styled.div`\n display: inline-block;\n`;\n\nconst ContentBox = styled.div<{ $openState: IDropOpen; $disabled: boolean; $minWidth: number }>`\n z-index: 100;\n min-width: ${({ $minWidth }) => $minWidth}px;\n position: absolute;\n\n ${({ $openState, $disabled }) =>\n $openState &&\n css`\n display: ${$openState.isOpen ? 'inline-block' : 'none'};\n display: ${$disabled && 'none'};\n\n ${\n $openState.position === 'bottom-right' &&\n `\n bottom: 0;\n left: 0;\n transform: translateY(calc(100% + 5px ));\n `\n };\n\n ${\n $openState.position === 'bottom-left' &&\n `\n bottom: 0;\n right: 0;\n transform: translateY(calc(100% + 5px ));\n `\n };\n\n ${\n $openState.position === 'top-left' &&\n `\n top: 0;\n right: 0;\n transform: translateY(calc( -100% - 5px ));\n `\n };\n\n ${\n $openState.position === 'top-right' &&\n `\n top: 0;\n left: 0;\n transform: translateY(calc( -100% - 5px ));\n `\n };\n\n `};\n`;\n\nconst getDropPosition = (buttonRect: DOMRect, minWidth: number, minHeight: number): IOpenPos => {\n let position: IOpenPos = 'bottom-right';\n const openLeft = buttonRect.left + minWidth > window.innerWidth;\n const openTop = buttonRect.bottom + minHeight > window.innerHeight;\n const spaceTop = buttonRect.bottom > minHeight;\n\n if (openLeft && openTop && spaceTop) {\n position = 'top-left';\n }\n\n if (openTop && !openLeft && spaceTop) {\n position = 'top-right';\n }\n\n if (!openTop && openLeft) {\n position = 'bottom-left';\n }\n\n return position;\n};\n\ntype IOpenPos = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\ninterface IDropOpen {\n isOpen: boolean;\n position: IOpenPos;\n}\n\ninterface IFilterDropHandler {\n buttonIcon: string;\n buttonText: string;\n disabled?: boolean;\n minWidth?: number;\n minHeight?: number;\n isSortAscending?: boolean;\n design?: FilterButtonDesign;\n noCloseOnClickOutside?: boolean;\n onToggleOpenCallback?: (isOpen: boolean) => void;\n onCloseCallback?: () => void;\n children?: React.ReactNode;\n ref?: React.Ref<FilterDropHandlerRef>;\n}\n\nexport interface FilterDropHandlerRef {\n imperativeClose: () => void;\n}\n\nconst FilterDropHandler: React.FC<IFilterDropHandler> = ({\n buttonIcon,\n buttonText,\n disabled = false,\n minWidth = 270,\n minHeight = 190,\n isSortAscending,\n design = 'default',\n noCloseOnClickOutside,\n children,\n onToggleOpenCallback = () => {},\n onCloseCallback = () => {},\n ref,\n ...props\n}) => {\n const [openState, setOpenState] = useState<IDropOpen>({\n isOpen: false,\n position: 'bottom-right',\n });\n\n const buttonWrapperRef = useRef<HTMLDivElement>(null);\n const mainRef = useRef<HTMLDivElement>(null);\n\n const clickOutsideClose = useCallback(() => {\n if (noCloseOnClickOutside) {\n return;\n }\n\n if (openState.isOpen) {\n onCloseCallback();\n }\n\n setOpenState((prev) => {\n const isOpen = false;\n return { ...prev, isOpen };\n });\n }, [noCloseOnClickOutside, onCloseCallback, openState.isOpen]);\n\n useClickOutside(mainRef, clickOutsideClose);\n\n const handleToggleOpen = useCallback(\n (minWidth: number, minHeight: number) => {\n if (!buttonWrapperRef.current) {\n return;\n }\n\n const buttonRect = buttonWrapperRef.current.getBoundingClientRect();\n if (!buttonRect) {\n return;\n }\n const position: IOpenPos = getDropPosition(buttonRect, minWidth, minHeight);\n\n onToggleOpenCallback(!openState.isOpen);\n setOpenState((prev) => {\n const isOpen = !prev.isOpen;\n return { ...prev, isOpen, position };\n });\n },\n [onToggleOpenCallback, openState.isOpen]\n );\n\n const handleImperativeClose = useCallback(() => {\n setOpenState((prev) => {\n const isOpen = false;\n return { ...prev, isOpen };\n });\n }, []);\n\n // Expose imperativeClose method via ref\n useImperativeHandle(ref, () => ({\n imperativeClose: handleImperativeClose,\n }));\n\n return (\n <Container ref={mainRef} {...props}>\n <ButtonWrapper ref={buttonWrapperRef}>\n <FilterButton\n icon={buttonIcon}\n isOpen={openState.isOpen}\n onClick={() => handleToggleOpen(minWidth, minHeight)}\n {...{ disabled, isSortAscending, design }}\n hasFlipArrow\n >\n {buttonText}\n </FilterButton>\n </ButtonWrapper>\n <ContentBox $openState={openState} $disabled={disabled} $minWidth={minWidth}>\n {children}\n </ContentBox>\n </Container>\n );\n};\n\nexport default FilterDropHandler;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport Button from '../../Form/atoms/Button';\n\nconst FooterContainer = styled.div`\n display: flex;\n padding: 8px;\n justify-content: space-between;\n align-items: flex-start;\n border-top: 1px solid var(--grey-6);\n background: var(--grey-a2);\n box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.05);\n`;\n\nconst FooterLeftSection = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst FooterRightSection = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n`;\n\ninterface OwnProps {\n onReset?: () => void;\n onCancel?: () => void;\n onApply?: () => void;\n}\n\nexport interface IFilterFooterControls {\n resetText?: string;\n cancelText?: string;\n closeText?: string;\n applyText?: string;\n hasReset?: boolean;\n hasApply?: boolean;\n disableApply?: boolean;\n disableReset?: boolean;\n}\n\ntype IFooterControls = OwnProps & IFilterFooterControls;\n\nconst FooterControls: React.FC<IFooterControls> = ({\n resetText = 'Reset',\n cancelText = 'Cancel',\n closeText = 'Close',\n applyText = 'Apply',\n hasReset = false,\n hasApply = false,\n disableApply = false,\n disableReset = true,\n onReset = () => {},\n onCancel = () => {},\n onApply = () => {},\n}) => {\n return (\n <FooterContainer>\n <FooterLeftSection>\n {hasReset && (\n <Button size='small' design='text-only' disabled={disableReset} onClick={onReset}>\n {resetText}\n </Button>\n )}\n </FooterLeftSection>\n {hasApply && (\n <FooterRightSection>\n <Button size='small' design='secondary' onClick={onCancel}>\n {disableApply ? closeText : cancelText}\n </Button>\n <Button size='small' onClick={onApply} disabled={disableApply}>\n {applyText}\n </Button>\n </FooterRightSection>\n )}\n </FooterContainer>\n );\n};\n\nexport default FooterControls;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport Spinner from '../../Indicators/Spinner';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 146px;\n border-top: 1px solid var(--grey-5);\n`;\n\nconst LoadingText = styled.div`\n font-family: var(--font-data);\n color: var(--grey-11);\n font-size: 12px;\n font-style: italic;\n &:lang(ja) {\n font-style: normal;\n }\n padding: 15px 0;\n`;\n\ninterface ILoadingBox {\n loadingText?: string;\n}\n\nconst LoadingBox: React.FC<ILoadingBox> = ({ loadingText }) => {\n return (\n <Container>\n <Spinner size='large' styling='primary' />\n <LoadingText>{loadingText}</LoadingText>\n </Container>\n );\n};\n\nexport default LoadingBox;\n","import type { IInputOptionsType } from '../Form';\nimport type { IBasicSearchInput } from '../Misc/atoms/BasicSearchInput';\nimport type { IDateInterval } from '.';\nimport type { IFilterFooterControls } from './atoms/FooterControls';\nimport type { IDropdownDatePicker } from './molecules/DropdownDatePicker';\nimport type { IFilterDropdown } from './molecules/FilterDropdown';\n\ntype IFilterItem = { text: string; value: string | number };\ntype IFilterValue = IFilterItem | IFilterItem[] | null;\ntype IFilterType = 'search' | 'dropdown' | 'datepicker';\ntype IToggleOption = { text: string; value: string | number; icon: string };\n\n// Type checking for IFilterItem\n// https://stackoverflow.com/questions/14425568/interface-type-check-with-typescript\nconst isFilterItem = (item: unknown): item is IFilterItem => {\n if (item === null || item === undefined) {\n return false;\n }\n\n if (typeof item !== 'object') {\n return false;\n }\n\n const record = item as Record<string, unknown>;\n\n if (record.value === undefined || record.value === null) {\n return false;\n }\n\n if (record.text === null) {\n return false;\n }\n\n return (\n (typeof record.value === 'number' || typeof record.value === 'string') &&\n typeof record.text === 'string'\n );\n};\n\ninterface IFilterResult {\n id: string;\n type: IFilterType;\n selected: IFilterItem | IFilterItem[] | IDateInterval | Date | null;\n}\n\ninterface ISearchFilter extends IBasicSearchInput {\n id: string;\n canHide?: boolean;\n showFieldText?: string;\n selected?: IFilterItem;\n}\n\ninterface IFilterDropdownExt extends IFilterDropdown {\n id: string;\n canHide?: boolean;\n}\n\ninterface IFilterDatePicker extends IDropdownDatePicker {\n id: string;\n canHide?: boolean;\n name?: string;\n}\n\ninterface IFilterDropdownConfig extends IFilterFooterControls {\n id: string;\n canHide?: boolean;\n buttonIcon: string;\n buttonText: string;\n list: IFilterItem[];\n selected?: IFilterValue;\n disabled?: boolean;\n optionType?: IInputOptionsType;\n isLoading?: boolean;\n loadingText?: string;\n hasOptionsFilter?: boolean;\n searchPlaceholder?: string;\n maxDisplayedItems?: number;\n emptyResultText?: string;\n searchResultText?: string;\n name?: string;\n design?: FilterButtonDesign;\n ascendingText?: string;\n descendingText?: string;\n isListAscending?: boolean;\n onResetCallback?: () => void;\n onCancelCallback?: () => void;\n}\n\ntype FilterButtonDesign = 'default' | 'basic';\n\nexport type {\n FilterButtonDesign,\n IFilterDatePicker,\n IFilterDropdownConfig,\n IFilterDropdownExt,\n IFilterItem,\n IFilterResult,\n IFilterType,\n IFilterValue,\n ISearchFilter,\n IToggleOption,\n};\nexport { isFilterItem };\n","import type React from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { ButtonWithIcon, type IInputOptionsType } from '../../Form';\nimport FilterOption from '../../Form/atoms/FilterOption';\nimport BasicSearchInput from '../../Misc/atoms/BasicSearchInput';\nimport FilterDropdownContainer from '../atoms/FilterDropdownContainer';\nimport FilterDropHandler, { type FilterDropHandlerRef } from '../atoms/FilterDropHandler';\nimport FooterControls, { type IFilterFooterControls } from '../atoms/FooterControls';\nimport LoadingBox from '../atoms/LoadingBox';\nimport {\n type FilterButtonDesign,\n type IFilterItem,\n type IFilterValue,\n isFilterItem,\n} from '../FilterTypes';\n\nconst Container = styled.div`\n display: inline-block;\n position: relative;\n`;\n\nconst StyledFilterOption = styled(FilterOption)`\n letter-spacing: 0.2px;\n`;\n\nconst OptionList = styled.div<{ $moreItem?: boolean }>`\n max-height: ${({ $moreItem }) => ($moreItem ? '228px' : '196px')};\n min-height: 40px;\n position: relative;\n overflow-y: auto;\n padding: 8px 0;\n\n ${StyledFilterOption} {\n height: 40px;\n padding-left: 16px;\n }\n`;\n\nconst ResultsContainer = styled.div`\n min-width: 252px;\n`;\n\nconst SortingButtonWrapper = styled.div`\n display: flex;\n height: 24px;\n padding: 0px 8px;\n align-items: center;\n justify-content: left;\n gap: 8px;\n border-left: 1px solid var(--grey-6);\n width: auto;\n`;\n\nconst FilterResultsToolbar = styled.div`\n display: flex;\n height: 24px;\n padding-left: 16px;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n border-top: 1px solid var(--grey-5);\n border-bottom: 1px solid var(--grey-5);\n`;\n\nconst ResultCounter = styled.div`\n font-family: var(--font-ui);\n color: var(--grey-11);\n font-size: 12px;\n text-align: center;\n white-space: nowrap;\n &:lang(ja) {\n font-style: normal;\n }\n line-height: 12px;\n`;\n\nconst SearchWrapper = styled.div`\n --search-input-font-size: 14px;\n --search-input-font-family: var(--font-data);\n --search-input-container-gap: 10px;\n height: 40px;\n display: flex;\n align-items: center;\n padding: 4px 4px 4px 14px;\n`;\n\nconst EmptyResultText = styled.div`\n display: block;\n height: 24px;\n color: var(--grey-11);\n font-weight: 700;\n margin-left: 12px;\n user-select: none;\n pointer-events: none;\n height: inherit;\n display: flex;\n align-items: center;\n font-size: 12px;\n`;\n\nconst OptionListGradient = styled.div`\n position: absolute;\n bottom: 0px;\n height: 15px;\n background-image: linear-gradient(to bottom, transparent, var(--grey-3));\n width: 99%;\n left: 50%;\n transform: translateX(-50%);\n pointer-events: none;\n`;\n\nconst isValueSelected = (item: IFilterItem, selected: IFilterValue) => {\n let isItemSelected = false;\n\n if (Array.isArray(selected)) {\n selected.forEach((element: IFilterItem) => {\n if (element.value === item.value) {\n isItemSelected = true;\n }\n });\n } else {\n if (isFilterItem(selected)) {\n isItemSelected = item.value === selected.value;\n }\n }\n\n return isItemSelected;\n};\n\nconst getNewSelected = (\n item: IFilterItem,\n selected: IFilterValue,\n optionType: IInputOptionsType\n): IFilterValue => {\n let isItemSelected = false;\n\n if (optionType === 'checkbox') {\n const validSelected = Array.isArray(selected)\n ? selected\n : isFilterItem(selected)\n ? [selected]\n : [];\n\n const newSelected: IFilterItem[] = [];\n validSelected.forEach((element: IFilterItem) => {\n if (item.value === element.value) {\n isItemSelected = true;\n } else {\n newSelected.push(element);\n }\n });\n if (!isItemSelected) {\n newSelected.push(item);\n }\n\n if (newSelected.length === 0) {\n return null;\n }\n\n return newSelected;\n }\n\n return item;\n};\n\nconst sortList = (unSortedList: IFilterItem[], isSortAscending: boolean): IFilterItem[] => {\n if (unSortedList.length <= 1) {\n return unSortedList;\n }\n\n const sorted = [...unSortedList];\n const lang = document.documentElement.lang || 'en';\n\n sorted.sort((a, b) => {\n const diff = a.text.localeCompare(b.text, lang);\n\n return isSortAscending ? diff : -diff;\n });\n\n return sorted;\n};\n\nconst selectedOrderList = (\n list: IFilterItem[],\n maxItems: number,\n selected: IFilterValue,\n isSortAscending: boolean\n): IFilterItem[] => {\n if (list.length <= maxItems || selected === null) {\n return sortList(list, isSortAscending);\n }\n\n // Handle single selection case\n if (isFilterItem(selected)) {\n const index = list.findIndex((item) => item.value === selected.value);\n\n // Return original list if item doesn't exist or is already in visible range\n if (index === -1 || index < maxItems) {\n return sortList(list, isSortAscending);\n }\n\n // Create new list with selected item at the top\n const newList = list.filter((item) => item.value !== selected.value);\n const orderedList = sortList(newList, isSortAscending);\n orderedList.unshift(list[index]);\n\n return orderedList;\n }\n\n // Handle multiple selection case\n if (Array.isArray(selected)) {\n const selectedValues = new Set(selected.map((item) => item.value));\n\n // Create a map to preserve original items\n const selectedItems: IFilterItem[] = [];\n const unselectedItems: IFilterItem[] = [];\n\n // Single pass through the list to separate selected and unselected items\n for (const item of list) {\n if (selectedValues.has(item.value)) {\n selectedItems.push(item);\n } else {\n unselectedItems.push(item);\n }\n }\n\n const orderedSelected = sortList(selectedItems, isSortAscending);\n const unSelectedItems = sortList(unselectedItems, isSortAscending);\n\n // Return combined list with selected items first\n return [...orderedSelected, ...unSelectedItems];\n }\n\n return list;\n};\n\nconst getFilteredList = (list: IFilterItem[], newValue: string): IFilterItem[] => {\n return list.filter((element) => {\n const valueString = element.text.toLowerCase();\n return valueString.includes(newValue.toLowerCase());\n });\n};\n\nconst getResultText = (template: string, visible: number, total: number) => {\n const newMessage = template.replace('[TOTAL]', `${total}`);\n return newMessage.replace('[VISIBLE]', `${visible}`);\n};\n\nconst areSelectionsEqual = (tempSelected: IFilterValue, selected: IFilterValue): boolean => {\n if (tempSelected === null && selected === null) {\n return true;\n }\n\n // If only one is null, they are not equal\n if (tempSelected === null || selected === null) {\n return false;\n }\n\n // If both are arrays\n if (Array.isArray(tempSelected) && Array.isArray(selected)) {\n // If arrays have different lengths, they are not equal\n if (tempSelected.length !== selected.length) {\n return false;\n }\n\n // Check if every item in tempSelected exists in selected with the same value\n return tempSelected.every((tempItem) =>\n selected.some((selectedItem) => selectedItem.value === tempItem.value)\n );\n }\n\n // If one is array and the other is not, they are not equal\n if (Array.isArray(tempSelected) || Array.isArray(selected)) {\n return false;\n }\n\n return tempSelected.value === selected.value;\n};\n\nexport type IFilterDropdownOwn = {\n buttonIcon: string;\n buttonText: string;\n list: IFilterItem[];\n selected: IFilterValue;\n disabled?: boolean;\n optionType?: IInputOptionsType;\n isLoading?: boolean;\n loadingText?: string;\n hasOptionsFilter?: boolean;\n searchPlaceholder?: string;\n maxDisplayedItems?: number;\n searchResultText?: string;\n emptyResultText?: string;\n design?: FilterButtonDesign;\n ascendingText?: string;\n descendingText?: string;\n isListAscending?: boolean;\n onSelect: (newSelection: IFilterValue) => void;\n onResetCallback?: () => void;\n onCancelCallback?: () => void;\n};\n\nexport type IFilterDropdown = IFilterDropdownOwn &\n IFilterFooterControls &\n Omit<React.HTMLAttributes<HTMLDivElement>, keyof IFilterDropdownOwn>;\n\nconst FilterDropdown: React.FC<IFilterDropdown> = ({\n buttonIcon,\n buttonText,\n list,\n selected = null,\n disabled = false,\n isLoading = false,\n loadingText,\n optionType = 'text',\n hasOptionsFilter,\n searchPlaceholder,\n maxDisplayedItems = 5,\n searchResultText = 'Showing [VISIBLE] of [TOTAL]',\n emptyResultText,\n design = 'default',\n resetText,\n cancelText,\n closeText,\n applyText,\n hasReset,\n hasApply,\n descendingText = 'Descending',\n ascendingText = 'Ascending',\n isListAscending = true,\n onSelect = () => {},\n onResetCallback = () => {},\n onCancelCallback = () => {},\n ...props\n}) => {\n const [isSortAscending, setIsSortAscending] = useState(isListAscending);\n const [visibleList, setVisibleList] = useState(\n selectedOrderList(list, maxDisplayedItems, selected, isSortAscending)\n );\n const [searchText, setSearchText] = useState<string>('');\n const [tempSelected, setTempSelected] = useState(selected);\n\n const dropdownHandlerRef = useRef<FilterDropHandlerRef>(null);\n\n const handleClose = useCallback(() => {\n setVisibleList(selectedOrderList(list, maxDisplayedItems, tempSelected, isSortAscending));\n }, [isSortAscending, list, maxDisplayedItems, tempSelected]);\n\n const handleToggleOpen = useCallback(() => {\n setSearchText('');\n setTempSelected(selected);\n setIsSortAscending(isListAscending);\n setVisibleList(selectedOrderList(list, maxDisplayedItems, selected, isListAscending));\n }, [isListAscending, list, maxDisplayedItems, selected]);\n\n const handleSelection = useCallback(\n (item: IFilterItem) => {\n const newSelected = getNewSelected(item, tempSelected, optionType);\n\n // onSelect is unavailable if hasApply feature is enabled to prevent misusage\n if (!hasApply) {\n onSelect(newSelected);\n }\n setTempSelected(newSelected);\n setVisibleList(selectedOrderList(list, maxDisplayedItems, newSelected, isSortAscending));\n setSearchText('');\n },\n [tempSelected, optionType, hasApply, list, maxDisplayedItems, isSortAscending, onSelect]\n );\n\n const handleInputFilter = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const value: string = e.target.value.replace(/<[^>]*>/g, '').trim();\n setSearchText(value);\n\n if (value === '') {\n setVisibleList(selectedOrderList(list, maxDisplayedItems, tempSelected, isSortAscending));\n return;\n }\n const newList = getFilteredList(list, value);\n\n // sending null so the filtered list doesn't force the selected values to appear.\n setVisibleList(selectedOrderList(newList, maxDisplayedItems, null, isSortAscending));\n },\n [isSortAscending, list, maxDisplayedItems, tempSelected]\n );\n\n const handleCancel = useCallback(() => {\n setTempSelected(selected);\n onCancelCallback();\n dropdownHandlerRef.current?.imperativeClose();\n }, [onCancelCallback, selected]);\n const handleApply = useCallback(() => {\n onSelect(tempSelected);\n dropdownHandlerRef.current?.imperativeClose();\n }, [onSelect, tempSelected]);\n\n const handleReset = useCallback(() => {\n if (!hasApply) {\n onSelect(null);\n }\n setSearchText('');\n setVisibleList(selectedOrderList(list, maxDisplayedItems, null, isListAscending));\n setTempSelected(null);\n setIsSortAscending(isListAscending);\n onResetCallback();\n }, [hasApply, list, maxDisplayedItems, isListAscending, onResetCallback, onSelect]);\n\n const handleSort = useCallback(() => {\n setIsSortAscending((prev) => {\n setVisibleList(selectedOrderList(list, maxDisplayedItems, tempSelected, !prev));\n return !prev;\n });\n }, [list, maxDisplayedItems, tempSelected]);\n\n // This UseEffect ensures visible list is updated when toggling language\n useEffect(() => {\n setSearchText(''); // clears searchText if something was selected and the dropdown is still open\n setVisibleList(selectedOrderList(list, maxDisplayedItems, tempSelected, isSortAscending));\n }, [isSortAscending, list, maxDisplayedItems, tempSelected]);\n\n useEffect(() => {\n setTempSelected(selected);\n }, [selected]);\n\n const noChangeInSelection = useMemo(() => {\n return areSelectionsEqual(tempSelected, selected);\n }, [selected, tempSelected]);\n\n return (\n <Container {...props}>\n <FilterDropHandler\n ref={dropdownHandlerRef}\n {...{ buttonIcon, buttonText, disabled, design }}\n onCloseCallback={handleClose}\n onToggleOpenCallback={handleToggleOpen}\n noCloseOnClickOutside={hasApply}\n >\n <FilterDropdownContainer>\n {hasOptionsFilter && (\n <SearchWrapper>\n <BasicSearchInput\n type='text'\n hasBorder={false}\n placeholder={searchPlaceholder}\n color='dimmed'\n iconSize={12}\n value={searchText}\n onChange={handleInputFilter}\n noBackground\n />\n </SearchWrapper>\n )}\n {isLoading || !list ? (\n <LoadingBox {...{ loadingText }} />\n ) : (\n <ResultsContainer>\n {hasOptionsFilter && (\n <FilterResultsToolbar>\n <ResultCounter>\n {getResultText(searchResultText, visibleList.length, list.length)}\n </ResultCounter>\n <SortingButtonWrapper>\n <ButtonWithIcon\n design='text-only'\n position='left'\n size='xsmall'\n weight='light'\n onClick={handleSort}\n icon={isSortAscending ? 'FilterAscending' : 'FilterDescending'}\n >\n {isSortAscending ? ascendingText : descendingText}\n </ButtonWithIcon>\n </SortingButtonWrapper>\n </FilterResultsToolbar>\n )}\n <OptionList $moreItem={list.length > 5}>\n {visibleList.length > 0 ? (\n visibleList.map((item: IFilterItem) => {\n const value = item.value;\n const text = item.text;\n return (\n <StyledFilterOption\n key={String(value)}\n title={text}\n onClick={() => handleSelection(item)}\n selected={isValueSelected(item, tempSelected)}\n {...{ optionType, value }}\n />\n );\n })\n ) : (\n <EmptyResultText>{emptyResultText}</EmptyResultText>\n )}\n </OptionList>\n {list.length > 5 && <OptionListGradient />}\n </ResultsContainer>\n )}\n\n {(hasApply || hasReset) && (\n <FooterControls\n {...{ hasApply, hasReset, resetText, cancelText, closeText, applyText }}\n onCancel={handleCancel}\n onApply={handleApply}\n disableApply={noChangeInSelection}\n onReset={handleReset}\n disableReset={\n tempSelected === null && isSortAscending === isListAscending && searchText === ''\n }\n />\n )}\n </FilterDropdownContainer>\n </FilterDropHandler>\n </Container>\n );\n};\n\nexport default FilterDropdown;\n","import type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { areDatesEqual } from '../../helpers';\nimport type { IDateInterval, IDatePicker } from '..';\nimport FilterDropdownContainer from '../atoms/FilterDropdownContainer';\nimport FilterDropHandler, { type FilterDropHandlerRef } from '../atoms/FilterDropHandler';\nimport DatePicker from './DatePicker';\n\nconst MIN_WIDTH = 470;\nconst MIN_HEIGHT = 360;\n\nconst Container = styled.div``;\n\ninterface IMountPicker {\n initialValue: IDateInterval | Date | undefined;\n isMount: boolean;\n}\n\nexport interface IDropdownDatePicker extends IDatePicker {\n buttonIcon: string;\n buttonText: string;\n disabled?: boolean;\n selected?: IDateInterval | Date | null;\n onCloseCallback?: (value: IDateInterval | Date | null) => void;\n onUpdateCallback?: (value: IDateInterval | Date | null) => void;\n onToggleCallback?: (value: IDateInterval | Date | null, isOpen: boolean) => void;\n onCancelCallback?: () => void;\n onApplyCallback?: (data: IDateInterval | Date) => void;\n}\n\nconst DropdownDatePicker: React.FC<IDropdownDatePicker> = ({\n buttonIcon,\n buttonText,\n disabled,\n initialValue,\n dateMode,\n timeMode,\n selected,\n dateTimeTextUpper,\n dateTimeTextLower,\n timeZoneTitle,\n timeZoneValueTitle,\n lang,\n hasEmptyValue,\n availableRange,\n contentDays,\n cancelText = 'Cancel',\n applyText = 'Apply',\n hasApply = true,\n onCloseCallback = () => {},\n onUpdateCallback = () => {},\n onToggleCallback = () => {},\n onCancelCallback = () => {},\n onApplyCallback = () => {},\n ...props\n}) => {\n /**\n * This will keep the value of the picker when it updates so on close will send the most fresh value\n * without re-renders.\n */\n const pickerValue = useRef<IDateInterval | Date | null>(null);\n const [mountedPicker, setMountedPicker] = useState<IMountPicker>({\n initialValue: initialValue,\n isMount: true,\n });\n const [disableApply, setDisableApply] = useState(false);\n\n const DropdownHandlerRef = useRef<FilterDropHandlerRef>(null);\n const handleUpdateCallback = useCallback(\n (data: IDateInterval | Date) => {\n pickerValue.current = data;\n onUpdateCallback(data);\n setDisableApply(areDatesEqual(selected, data));\n },\n [onUpdateCallback, selected]\n );\n\n const handleOnClose = useCallback(() => {\n if (pickerValue.current && pickerValue.current !== selected) {\n onCloseCallback(pickerValue.current);\n }\n }, [onCloseCallback, selected]);\n\n const handleOnToggle = useCallback(\n (isOpen: boolean) => {\n if (!hasApply && pickerValue.current && pickerValue.current !== selected) {\n onToggleCallback(pickerValue.current, isOpen);\n }\n\n /** Verify if the picker needs to be mounted again to force initialValue set in Datepicker Component */\n if (isOpen && !mountedPicker.isMount) {\n setMountedPicker((prev) => {\n return { ...prev, isMount: true };\n });\n }\n },\n [hasApply, mountedPicker.isMount, onToggleCallback, selected]\n );\n\n const handleOnCancel = useCallback(() => {\n if (pickerValue.current && pickerValue.current !== selected) {\n pickerValue.current = selected === undefined ? null : selected;\n const validInitialValue = selected === null ? undefined : selected;\n setMountedPicker({ initialValue: validInitialValue, isMount: false });\n }\n onCancelCallback();\n DropdownHandlerRef.current?.imperativeClose();\n }, [onCancelCallback, selected]);\n\n const handleOnApply = useCallback(() => {\n if (pickerValue.current && pickerValue.current !== selected) {\n onApplyCallback(pickerValue.current);\n }\n DropdownHandlerRef.current?.imperativeClose();\n }, [onApplyCallback, selected]);\n\n /**\n * Caching the selected null /clear flag for this picker from parent component\n */\n useEffect(() => {\n if (selected === null && pickerValue.current !== null) {\n pickerValue.current = selected;\n setMountedPicker({ initialValue: undefined, isMount: false });\n }\n }, [selected]);\n\n return (\n <Container {...props}>\n <FilterDropHandler\n ref={DropdownHandlerRef}\n minWidth={MIN_WIDTH}\n minHeight={MIN_HEIGHT}\n onCloseCallback={handleOnClose}\n onToggleOpenCallback={handleOnToggle}\n noCloseOnClickOutside={hasApply}\n {...{ buttonIcon, buttonText, disabled }}\n >\n <FilterDropdownContainer>\n {mountedPicker.isMount && (\n <DatePicker\n {...{\n dateMode,\n timeMode,\n dateTimeTextUpper,\n dateTimeTextLower,\n timeZoneTitle,\n timeZoneValueTitle,\n lang,\n availableRange,\n contentDays,\n cancelText,\n applyText,\n hasApply,\n }}\n updateCallback={handleUpdateCallback}\n cancelCallback={handleOnCancel}\n applyCallback={handleOnApply}\n hasEmptyValue\n initialValue={mountedPicker.initialValue}\n disableApply={disableApply}\n />\n )}\n </FilterDropdownContainer>\n </FilterDropHandler>\n </Container>\n );\n};\n\nexport default DropdownDatePicker;\n","import type React from 'react';\nimport { useCallback, useState } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\nimport FilterButton from '../../Filters/atoms/FilterButton';\nimport FilterDropdown from '../../Filters/molecules/FilterDropdown';\nimport BasicSearchInput from '../../Misc/atoms/BasicSearchInput';\nimport type { IFilterDatePicker, IFilterDropdownExt, ISearchFilter } from '../FilterTypes';\nimport DropdownDatePicker from './DropdownDatePicker';\n\nconst fadeInAnimation = keyframes`\n 0% {\n width: 50%;\n opacity: .5;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n width: 100%;\n }\n`;\n\nconst SearchInputWrapper = styled.div`\n flex: 1 1 200px;\n max-width: 320px;\n`;\n\nconst CloseSearchInputWrapper = styled.div`\n ${({ theme }) =>\n theme &&\n css`\n animation: ${fadeInAnimation} ${theme.animation.speed.slow} ${theme.animation.easing.primary.inOut};\n `};\n`;\n\nconst StyledFilterButton = styled(FilterButton)``;\nconst StyledDropdown = styled(FilterDropdown)``;\nconst StyledDropdownDatePicker = styled(DropdownDatePicker)``;\n\nconst Container = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: 8px 6px;\n`;\n\nconst renderDropdowns = (\n dropdownFilters: IFilterDropdownExt[],\n showMoreDropdowns: boolean,\n hasShowMore: boolean\n) => {\n return dropdownFilters.map(({ id, canHide, ...dropdownProps }: IFilterDropdownExt) => {\n if (!canHide || !showMoreDropdowns || (canHide && !hasShowMore)) {\n return <StyledDropdown key={`dropdownFilter-id-${id}`} {...dropdownProps} />;\n }\n return null;\n });\n};\n\nconst renderSearchInputs = (\n searchFilters: ISearchFilter[],\n visibleSearchInputs: string[],\n handleVisibleSearch: (searchId: string) => void\n) => {\n return searchFilters.map(\n ({ id, canHide, showFieldText, selected, ...searchInputProps }: ISearchFilter) => {\n if (visibleSearchInputs.includes(id)) {\n return (\n <SearchInputWrapper key={`searchFilter-id-${id}`}>\n {canHide ? (\n <CloseSearchInputWrapper>\n <BasicSearchInput\n {...searchInputProps}\n hasCrossButton\n onCrossClick={() => handleVisibleSearch(id)}\n />\n </CloseSearchInputWrapper>\n ) : (\n <BasicSearchInput {...searchInputProps} />\n )}\n </SearchInputWrapper>\n );\n }\n return null;\n }\n );\n};\n\nconst renderDatePickers = (datePickerFilters: IFilterDatePicker[]) => {\n return datePickerFilters.map(({ id, canHide, ...datePickerProps }: IFilterDatePicker) => {\n return <StyledDropdownDatePicker key={`datePicker-filter-${id}`} {...datePickerProps} />;\n });\n};\n\nconst renderAddSearchButtons = (\n searchFilters: ISearchFilter[],\n visibleSearchInputs: string[],\n handleVisibleSearch: (searchId: string) => void\n) => {\n return searchFilters.map((element) => {\n if (element.canHide && !visibleSearchInputs.includes(element.id)) {\n const searchId = element.id;\n return (\n <StyledFilterButton\n key={`search-button-id-${element.id}`}\n icon='Add'\n onClick={() => handleVisibleSearch(searchId)}\n >\n {element.showFieldText}\n </StyledFilterButton>\n );\n }\n return null;\n });\n};\n\n// initially visible are only the ones that can't hide\nconst initialSearchFilters = (searchFilters: ISearchFilter[]): string[] => {\n const currentVisible: string[] = [];\n\n searchFilters.forEach((element) => {\n if (!element.canHide) {\n currentVisible.push(element.id);\n }\n });\n\n return currentVisible;\n};\n\nexport interface IFilterInputs {\n searchFilters?: ISearchFilter[];\n dropdownFilters?: IFilterDropdownExt[];\n datePickerFilters?: IFilterDatePicker[];\n hasShowMore?: boolean;\n showMoreText?: string;\n showLessText?: string;\n}\n\nconst FilterInputs: React.FC<IFilterInputs> = ({\n hasShowMore = false,\n searchFilters = [],\n datePickerFilters = [],\n dropdownFilters = [],\n showMoreText = 'Show More',\n showLessText = 'Show Less',\n ...props\n}) => {\n const [visibleSearchInputs, setVisibleSearchInputs] = useState<string[]>(\n initialSearchFilters(searchFilters)\n );\n const [showMoreDropdowns, setShowMoreDropdowns] = useState(!!hasShowMore);\n\n const toggleShowMore = useCallback(() => {\n setShowMoreDropdowns((prev) => !prev);\n }, []);\n\n const handleVisibleSearch = useCallback(\n (searchId: string) => {\n if (visibleSearchInputs.includes(searchId)) {\n const newVisible = visibleSearchInputs.filter((id) => searchId !== id);\n setVisibleSearchInputs(newVisible);\n } else {\n const newVisible = [...visibleSearchInputs, searchId];\n setVisibleSearchInputs(newVisible);\n }\n },\n [visibleSearchInputs]\n );\n\n return (\n <Container {...props}>\n {renderSearchInputs(searchFilters, visibleSearchInputs, handleVisibleSearch)}\n {renderDatePickers(datePickerFilters)}\n {renderDropdowns(dropdownFilters, showMoreDropdowns, hasShowMore)}\n\n {/* {When the Dev does not initialize hasShowMore as true but has hidden inputs, it will show the add Searcher of the canHide} */}\n {(!hasShowMore || !showMoreDropdowns) &&\n renderAddSearchButtons(searchFilters, visibleSearchInputs, handleVisibleSearch)}\n {hasShowMore && (\n <FilterButton icon='FilterEllipsis' onClick={toggleShowMore}>\n {showMoreDropdowns ? showMoreText : showLessText}\n </FilterButton>\n )}\n </Container>\n );\n};\n\nexport default FilterInputs;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport SelectField from '../../Form/atoms/SelectField';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport Icon from '../../Icons/Icon';\nimport FilterDropdownContainer from '../atoms/FilterDropdownContainer';\n\nconst Container = styled.div`\n display: inline-block;\n position: relative;\n`;\n\nconst ContextActionBaseCSS = css`\n -webkit-tap-highlight-color: transparent;\n border: none;\n background: none;\n display: flex;\n justify-content:left;\n align-items:center;\n flex-wrap: wrap;\n cursor: pointer;\n outline: none;\n text-decoration: none;\n padding: 0;\n`;\n\nconst ContextIcon = styled.div`\n background-color: var(--grey-2);\n transition: background-color var(--speed-fast) var(--easing-primary-in-out);\n width: 30px;\n height: 30px;\n border-radius: 3px;\n display:flex;\n justify-content:center;\n align-items:center;\n svg {\n display: block;\n }\n`;\n\nconst ContextActionButton = styled.button<{ $isActive?: boolean; $isInnerContextButton?: boolean }>`\n ${ContextActionBaseCSS}\n ${ContextIcon}{\n cursor: pointer;\n }\n &:hover {\n div > svg > g {\n stroke: var(--white-1);\n }\n }\n &:hover ${ContextIcon}{\n background-color: var(--primary-9);\n }\n }\n ${({ $isActive }) =>\n $isActive &&\n css`\n ${ContextIcon} {\n background-color: var(--primary-9);\n [stroke]{\n stroke: var(--white-1);\n }\n }\n &:hover ${ContextIcon}{\n cursor: pointer;\n }\n `}\n ${({ $isInnerContextButton }) =>\n $isInnerContextButton &&\n css`\n margin-right: 5px;\n `}\n`;\n\nconst ContentBox = styled.div<{ $openState: IDropOpen; $disabled: boolean; $minWidth: number }>`\n z-index: 100;\n min-width: ${({ $minWidth }) => $minWidth}px;\n position: absolute;\n ${({ $openState, $disabled }) =>\n $openState &&\n css`\n display: ${$openState.isOpen ? 'inline-block' : 'none'};\n display: ${$disabled && 'none'};\n ${\n $openState.position === 'bottom-right' &&\n css`\n bottom: 0;\n left: 0;\n transform: translateY(calc(100% + 5px ));\n `\n };\n ${\n $openState.position === 'bottom-left' &&\n css`\n bottom: 0;\n right: 0;\n transform: translateY(calc(100% + 5px ));\n `\n };\n ${\n $openState.position === 'top-left' &&\n css`\n top: 0;\n right: 0;\n transform: translateY(calc( -100% - 5px ));\n `\n };\n ${\n $openState.position === 'top-right' &&\n css`\n top: 0;\n left: 0;\n transform: translateY(calc( -100% - 5px ));\n `\n };\n `};\n`;\n\nconst ButtonWrapper = styled.div`\n display: inline-block;\n`;\n\nconst GroupStyles = css`\n display: flex;\n justify-content: space-between;\n width: auto;\n align-items: center;\n gap: 16px;\n`;\n\nconst LayoutGroup = styled.div`\n ${GroupStyles};\n padding: 4px 8px 4px 10px;\n`;\n\nconst PaginationGroup = styled.div`\n ${GroupStyles};\n border-top: var(--grey-6) 1px solid;\n padding: 4px 8px 4px 10px;\n`;\n\nconst IconWrapper = styled.div`\n display: flex;\n`;\n\nconst RowLabel = styled.p`\n font-family: var(--font-ui);\n font-size: 14px;\n color: var(--grey-11);\n font-weight: 500;\n`;\n\nconst PageSizeContainer = styled.div`\n display: flex;\n`;\n\nconst SelectFieldContainer = styled.div`\n select{\n background-color: transparent;\n }\n`;\n\ninterface IOptionsItem {\n id: string;\n icon: string;\n tooltipText: string;\n}\n\ninterface IProps {\n disabled?: boolean;\n onToggleOpenCallback?: (isOpen: boolean) => void;\n onCloseCallback?: () => void;\n pageSizeOptions?: number[];\n onPageSizeChange: (size: number) => void;\n defaultPage?: number;\n defaultPageSize?: number;\n getLayout: (layout: string) => void;\n layoutText?: string;\n pageSizeText?: string;\n contentArray: IOptionsItem[];\n minWidth?: number;\n minHeight?: number;\n hasPageSettings?: boolean;\n}\n\nconst getDropPosition = (buttonRect: DOMRect, minWidth: number, minHeight: number): IOpenPos => {\n let position: IOpenPos = 'bottom-right';\n const openLeft = buttonRect.left + minWidth > window.innerWidth;\n const openTop = buttonRect.bottom + minHeight > window.innerHeight;\n const spaceTop = buttonRect.bottom > minHeight;\n\n if (openLeft && openTop && spaceTop) {\n position = 'top-left';\n } else if (openTop && !openLeft && spaceTop) {\n position = 'top-right';\n } else if (!openTop && openLeft) {\n position = 'bottom-left';\n }\n\n return position;\n};\n\ntype IOpenPos = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\ninterface IDropOpen {\n isOpen: boolean;\n position: IOpenPos;\n}\n\nconst FilterLayout: React.FC<IProps> = ({\n disabled = false,\n onToggleOpenCallback = () => {},\n onCloseCallback = () => {},\n pageSizeOptions = [10, 20, 30, 50, 100],\n onPageSizeChange = () => {},\n defaultPageSize = 10,\n getLayout = () => {},\n layoutText = 'Layout',\n pageSizeText = 'Items Per Page',\n contentArray,\n minWidth = 250,\n minHeight = 90,\n hasPageSettings = true,\n}) => {\n const [openState, setOpenState] = useState<IDropOpen>({\n isOpen: false,\n position: 'bottom-right',\n });\n const buttonWrapperRef = useRef<HTMLDivElement>(null);\n const mainRef = useRef<HTMLDivElement>(null);\n const [isGridLayout, setIsGridLayout] = useState<string>('grid');\n const [pageSize, setPageSize] = useState(defaultPageSize);\n\n const handleClose = useCallback(() => {\n if (openState.isOpen) {\n onCloseCallback();\n }\n\n setOpenState((prev) => {\n const isOpen = false;\n return { ...prev, isOpen };\n });\n }, [onCloseCallback, openState.isOpen]);\n\n useClickOutside(mainRef, handleClose);\n\n const handleToggleOpen = useCallback(\n (minWidth: number, minHeight: number) => {\n if (!buttonWrapperRef.current) {\n return;\n }\n\n const buttonRect = buttonWrapperRef.current.getBoundingClientRect();\n if (!buttonRect) {\n return;\n }\n const position: IOpenPos = getDropPosition(buttonRect, minWidth, minHeight);\n\n onToggleOpenCallback(openState.isOpen);\n setOpenState((prev) => {\n const isOpen = !prev.isOpen;\n return { ...prev, isOpen, position };\n });\n },\n [onToggleOpenCallback, openState.isOpen]\n );\n\n const switchLayout = useCallback(\n (layout: string) => {\n setIsGridLayout(layout);\n getLayout(layout);\n },\n [getLayout]\n );\n\n const handlePageSizeChange = useCallback(\n (size: string) => {\n onPageSizeChange(Number(size));\n },\n [onPageSizeChange]\n );\n\n useEffect(() => {\n setPageSize(defaultPageSize);\n }, [defaultPageSize]);\n\n const internal = (\n <React.Fragment>\n <ContextIcon>\n <Icon icon='ViewSettings' color={openState.isOpen ? 'inverse' : 'dimmed'} size={16} />\n </ContextIcon>\n </React.Fragment>\n );\n\n return (\n <Container ref={mainRef}>\n <ButtonWrapper ref={buttonWrapperRef}>\n <ContextActionButton\n $isActive={openState.isOpen}\n $isInnerContextButton={false}\n onClick={() => handleToggleOpen(minWidth, minHeight)}\n >\n {internal}\n </ContextActionButton>\n </ButtonWrapper>\n <ContentBox $openState={openState} $disabled={disabled} $minWidth={minWidth}>\n <FilterDropdownContainer>\n <LayoutGroup>\n <RowLabel>{layoutText}</RowLabel>\n <IconWrapper>\n {contentArray.map((item, index) => {\n return (\n <ContextActionButton\n key={item.id}\n $isInnerContextButton={index !== contentArray.length - 1}\n $isActive={isGridLayout === item.id}\n onClick={() => switchLayout(item.id)}\n >\n <ContextIcon title={item.tooltipText}>\n <Icon\n icon={item.icon}\n color={isGridLayout === item.id ? 'inverse' : 'dimmed'}\n size={16}\n />\n </ContextIcon>\n </ContextActionButton>\n );\n })}\n </IconWrapper>\n </LayoutGroup>\n {hasPageSettings && (\n <PaginationGroup>\n <RowLabel>{pageSizeText}</RowLabel>\n {pageSizeOptions && (\n <PageSizeContainer>\n <SelectFieldContainer>\n <SelectField changeCallback={handlePageSizeChange} isCompact value={pageSize}>\n {pageSizeOptions.map((size: number) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </SelectField>\n </SelectFieldContainer>\n </PageSizeContainer>\n )}\n </PaginationGroup>\n )}\n </FilterDropdownContainer>\n </ContentBox>\n </Container>\n );\n};\n\nexport default FilterLayout;\n","import { add, format, startOfDay } from 'date-fns';\nimport type React from 'react';\nimport styled from 'styled-components';\nimport { resetButtonStyles } from '../../common/index';\nimport { isDateInterval } from '../../helpers';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport type { IDateInterval } from '..';\nimport { type IFilterItem, type IFilterType, isFilterItem } from '../FilterTypes';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n font-size: 12px;\n min-height: 22px;\n`;\n\nconst ResultsTextWrapper = styled.div`\n font-family: var(--font-ui);\n color: var(--grey-9);\n`;\n\nconst FilterLabel = styled.div`\n height: 18px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n padding: 0 11px 0 8px;\n margin-left: 3px;\n color: var(--grey-9);\n font-family: var(--font-data);\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n }\n border-right: 1px solid var(--grey-8);\n`;\nconst FilterLabelText = styled.div<{ $hasIcon?: boolean }>`\n padding: ${({ $hasIcon }) => ($hasIcon ? '0 15px 0 9px' : '0 15px 0 0')};\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n max-width: 300px;\n`;\n\nconst ClearTextButton = styled.button`\n ${resetButtonStyles};\n font-family: var(--font-data);\n color: var(--grey-10);\n margin-left: 11px;\n font-size: 12px;\n`;\n\nconst RemoveButton = styled.button`\n ${resetButtonStyles};\n`;\n\nconst FilterLabelsGroup = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n margin-left: 10px;\n`;\n\n/**\n * Date from Datepicker, since it does not support seconds input, we assumed that 23:59:59 value is showing 24:00 in display\n * Here is not changing the value that the developer receives, just displaying 00:00 of the next Day\n */\n\nconst validWithMidnight = (endDate: Date, resultsDateFormat: string) => {\n if (endDate.getHours() === 23 && endDate.getSeconds() > 0) {\n return format(add(startOfDay(endDate), { days: 1 }), resultsDateFormat);\n }\n\n return format(endDate, resultsDateFormat);\n};\n\nconst validateDateFormat = (resultsDateFormat: string): boolean => {\n let isFormatValid = false;\n\n if (resultsDateFormat !== '') {\n try {\n const tryDate = new Date();\n format(tryDate, resultsDateFormat);\n isFormatValid = true;\n } catch (_error) {\n isFormatValid = false;\n }\n }\n\n return isFormatValid;\n};\n\nconst renderResults = (template: string, total: number) => {\n return template.replace('[TOTAL_RESULTS]', `${total}`);\n};\n\nconst renderLabel = (\n item: IFilterItem | IDateInterval | Date,\n resultsDateFormat: string,\n icon?: string,\n filterName?: string\n) => {\n let textLabel: string = '';\n const isDateFormatValid = validateDateFormat(resultsDateFormat);\n\n if (filterName && isFilterItem(item)) {\n textLabel = `${filterName}: ${item.text}`;\n } else if (filterName && item instanceof Date) {\n textLabel = isDateFormatValid\n ? `${filterName}: ${format(item, resultsDateFormat)}`\n : `${filterName}: ${item.toDateString()}`;\n } else if (filterName && isDateInterval(item)) {\n textLabel = isDateFormatValid\n ? `${filterName}: ${format(item.start, resultsDateFormat)} - ${validWithMidnight(item.end, resultsDateFormat)}`\n : `${filterName}: ${item.start.toDateString()} - ${item.end.toDateString()}`;\n } else if (!filterName && isFilterItem(item)) {\n textLabel = item.text;\n } else if (!filterName && item instanceof Date) {\n textLabel = isDateFormatValid ? format(item, resultsDateFormat) : item.toDateString();\n } else if (!filterName && isDateInterval(item)) {\n textLabel = isDateFormatValid\n ? `${format(item.start, resultsDateFormat)} - ${validWithMidnight(item.end, resultsDateFormat)}`\n : `${item.start.toDateString()} - ${item.end.toDateString()}`;\n }\n\n return <FilterLabelText $hasIcon={!!icon}>{textLabel}</FilterLabelText>;\n};\n\nexport interface IFilterLabel {\n filterId: string;\n item: IFilterItem | Date | IDateInterval;\n type: IFilterType;\n icon?: string;\n filterName?: string;\n}\n\ninterface IFilterResults {\n labelLists: IFilterLabel[];\n totalResults: number;\n resultTextTemplate?: string;\n clearText?: string;\n resultsDateFormat?: string;\n onRemoveFilter?: (\n filterId: string,\n type: IFilterType,\n item: IFilterItem | Date | IDateInterval\n ) => void;\n onClearAll?: () => void;\n}\n\nconst FiltersResults: React.FC<IFilterResults> = ({\n labelLists,\n totalResults,\n resultTextTemplate = 'Showing Results ([TOTAL_RESULTS]):',\n clearText = 'CLEAR ALL',\n resultsDateFormat = '',\n onRemoveFilter = () => {},\n onClearAll = () => {},\n ...props\n}) => {\n return (\n <Container {...props}>\n <ResultsTextWrapper>{renderResults(resultTextTemplate, totalResults)}</ResultsTextWrapper>\n <FilterLabelsGroup>\n {labelLists.map(({ icon, item, filterName, filterId, type }) => {\n return (\n <FilterLabel key={`Filter-Label-id-${filterId}`}>\n {icon && <Icon icon={icon} color='dimmed' size={10} weight='light' />}\n {renderLabel(item, resultsDateFormat, icon, filterName)}\n <RemoveButton onClick={() => onRemoveFilter(filterId, type, item)}>\n <Icon icon='CloseCompact' color='dimmed' size={10} weight='light' />\n </RemoveButton>\n </FilterLabel>\n );\n })}\n {labelLists.length > 0 && (\n <ClearTextButton onClick={onClearAll}>{clearText}</ClearTextButton>\n )}\n </FilterLabelsGroup>\n </Container>\n );\n};\n\nexport default FiltersResults;\n","import type React from 'react';\nimport { useCallback } from 'react';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport FilterOption from '../../Form/atoms/FilterOption';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport FilterDropdownContainer from '../atoms/FilterDropdownContainer';\nimport FilterDropHandler from '../atoms/FilterDropHandler';\nimport LoadingBox from '../atoms/LoadingBox';\nimport type { FilterButtonDesign, IFilterItem } from '../FilterTypes';\n\nconst Container = styled.div`\n display: inline-block;\n position: relative;\n`;\n\nconst StyledFilterOption = styled(FilterOption)`\n letter-spacing: 0.2px;\n`;\n\nconst OptionList = styled.div`\n padding: 8px 0;\n ${StyledFilterOption} {\n height: 40px;\n padding: 16px;\n }\n`;\n\nconst OrderGroup = styled.div`\n font-family: var(--font-ui);\n display: flex;\n border-top: var(--grey-6) 1px solid;\n margin-top: 5px;\n\n button:first-child {\n border-right: var(--grey-6) 1px solid;\n }\n`;\n\nconst OrderButton = styled.button<{ $isSelected: boolean }>`\n ${resetButtonStyles};\n width: 100%;\n display: flex;\n align-items: center;\n font-family: var(--font-data);\n color: var(--grey-12);\n font-size: 14px;\n height: 40px;\n padding: 0 16px;\n gap: 12px;\n\n ${({ $isSelected }) => css`\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n [stroke]{\n stroke: var(--grey-11);\n }\n }\n\n &:hover {\n ${IconWrapper} {\n [stroke]{\n stroke: var(--primary-9);\n }\n }\n }\n\n ${\n $isSelected &&\n css`\n ${IconWrapper} {\n [stroke]{\n stroke: var(--primary-9);\n }\n }\n `\n }\n\n `}\n`;\n\nexport interface ISortDropdown {\n buttonText: string;\n list: IFilterItem[];\n disabled?: boolean;\n isLoading?: boolean;\n loadingText?: string;\n ascendingText?: string;\n descendingText?: string;\n isSortAscending?: boolean;\n selected: IFilterItem;\n design?: FilterButtonDesign;\n onSelect: (newSort: IFilterItem, isSortAscending: boolean) => void;\n}\n\nconst SortDropdown: React.FC<ISortDropdown> = ({\n buttonText,\n disabled,\n list,\n isLoading,\n loadingText,\n isSortAscending = true,\n selected,\n descendingText = 'Descending',\n ascendingText = 'Ascending',\n design = 'basic',\n onSelect,\n ...props\n}) => {\n const handleSortSelect = useCallback(\n (newValue: IFilterItem) => {\n if (newValue.value === selected.value) {\n return;\n }\n\n onSelect(newValue, isSortAscending);\n },\n [isSortAscending, onSelect, selected.value]\n );\n\n const handleOrderSelect = useCallback(\n (isAscending: boolean) => {\n if (isSortAscending === isAscending) {\n return;\n }\n\n onSelect(selected, isAscending);\n },\n [isSortAscending, onSelect, selected]\n );\n\n return (\n <Container {...props}>\n <FilterDropHandler\n {...{ buttonText, disabled, isSortAscending, design }}\n buttonIcon='FilterSorting'\n >\n <FilterDropdownContainer>\n {isLoading || list.length === 0 ? (\n <LoadingBox {...{ loadingText }} />\n ) : (\n <OptionList>\n {list.map((item) => {\n return (\n <StyledFilterOption\n key={String(item.value)}\n title={item.text}\n optionType='radio'\n selected={selected.value === item.value}\n onClick={() => handleSortSelect(item)}\n />\n );\n })}\n </OptionList>\n )}\n <OrderGroup>\n <OrderButton $isSelected={isSortAscending} onClick={() => handleOrderSelect(true)}>\n <Icon icon='FilterAscending' size={16} weight='light' />\n <FilterOption selected={isSortAscending} title={ascendingText} />\n </OrderButton>\n <OrderButton $isSelected={!isSortAscending} onClick={() => handleOrderSelect(false)}>\n <Icon icon='FilterDescending' size={16} weight='light' />\n <FilterOption selected={!isSortAscending} title={descendingText} />\n </OrderButton>\n </OrderGroup>\n </FilterDropdownContainer>\n </FilterDropHandler>\n </Container>\n );\n};\n\nexport default SortDropdown;\n","import debounce from 'lodash.debounce';\nimport isequal from 'lodash.isequal';\nimport type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport FiltersResults, { type IFilterLabel } from '../../Filters/molecules/FiltersResults';\nimport { isDateInterval } from '../../helpers';\nimport type { IDateInterval } from '..';\nimport {\n type IFilterDatePicker,\n type IFilterDropdownConfig,\n type IFilterDropdownExt,\n type IFilterItem,\n type IFilterResult,\n type IFilterType,\n type IFilterValue,\n type ISearchFilter,\n isFilterItem,\n} from '../FilterTypes';\nimport FilterInputs from '../molecules/FilterInputs';\n\nconst Title = styled.div`\n font-family: var(--font-ui);\n color: var(--grey-10);\n font-size: 12px;\n font-weight: 700;\n margin-bottom: 17px;\n`;\n\nconst StyledFilterResults = styled(FiltersResults)``;\n\nconst Container = styled.div`\n ${StyledFilterResults} {\n margin-top: 29px;\n min-height: 19px;\n }\n`;\n\nconst getDisableValue = (\n filtersValues: IFilterResult[],\n singleFilter: boolean,\n filter: ISearchFilter | IFilterDropdownConfig | IFilterDatePicker\n) => {\n let disabled = false;\n\n if (filter.disabled) {\n disabled = filter.disabled;\n } else if (singleFilter) {\n const notNullValues = filtersValues.filter((filter) => filter.selected !== null);\n if (notNullValues) {\n disabled =\n notNullValues.length > 1 || (notNullValues[0] && notNullValues[0].id !== filter.id);\n }\n }\n return disabled;\n};\n\nconst createDropdownFilters = (\n dropdownsConfig: IFilterDropdownConfig[],\n filtersValues: IFilterResult[],\n singleFilter: boolean,\n handleDropdownsSelected: (newValue: IFilterValue, filterId: string) => void\n): IFilterDropdownExt[] => {\n const dropdownFilters: IFilterDropdownExt[] = [];\n dropdownsConfig.forEach((dropdown) => {\n const filter = filtersValues.find((filter) => filter.id === dropdown.id);\n if (filter) {\n const selected =\n Array.isArray(filter.selected) || isFilterItem(filter.selected) ? filter.selected : null;\n const onSelect = (newSelection: IFilterValue) => {\n handleDropdownsSelected(newSelection, filter.id);\n };\n const disabled = getDisableValue(filtersValues, singleFilter, dropdown);\n const newDropdown: IFilterDropdownExt = { ...dropdown, selected, disabled, onSelect };\n dropdownFilters.push(newDropdown);\n }\n });\n return dropdownFilters;\n};\n\nconst createSearchers = (\n searchersConfig: ISearchFilter[],\n filtersValues: IFilterResult[],\n singleFilter: boolean,\n handleSearchers: (newValue: string, filterId: string) => void\n): ISearchFilter[] => {\n const searchersFilters: ISearchFilter[] = [];\n\n searchersConfig.forEach((searcher) => {\n const filter = filtersValues.find((filter) => filter.id === searcher.id);\n if (filter && !Array.isArray(filter.selected)) {\n const value: string =\n filter.selected === null || !isFilterItem(filter.selected) ? '' : filter.selected.text;\n\n const onChange = (e: React.FormEvent<HTMLInputElement>) => {\n const newValue = e.currentTarget.value;\n handleSearchers(newValue, filter.id);\n };\n\n const disabled = getDisableValue(filtersValues, singleFilter, searcher);\n\n const newSearcher: ISearchFilter = { ...searcher, value, disabled, onChange };\n searchersFilters.push(newSearcher);\n }\n });\n\n return searchersFilters;\n};\n\nconst createDatePickers = (\n datePickersConfig: IFilterDatePicker[],\n filtersValues: IFilterResult[],\n singleFilter: boolean,\n handleDatePickers: (selection: IDateInterval | Date | null, filterId: string) => void\n): IFilterDatePicker[] => {\n const datePickersFilters: IFilterDatePicker[] = [];\n\n datePickersConfig.forEach((datePicker) => {\n const onCloseCallback = (value: IDateInterval | Date | null) => {\n handleDatePickers(value, datePicker.id);\n };\n\n const onToggleCallback = (value: IDateInterval | Date | null, isOpen: boolean) => {\n // if it was open before toggle means the user closed it and value should be updated.\n if (!isOpen) {\n handleDatePickers(value, datePicker.id);\n }\n };\n\n const onApplyCallback = (value: IDateInterval | Date) => {\n handleDatePickers(value, datePicker.id);\n };\n\n const disabled = getDisableValue(filtersValues, singleFilter, datePicker);\n const foundPicker = filtersValues.find((filter) => filter.id === datePicker.id);\n let validInitialValue: Date | IDateInterval | undefined;\n\n if (datePicker.selected) {\n validInitialValue = datePicker.selected;\n } else if (datePicker.initialValue) {\n validInitialValue = datePicker.initialValue;\n }\n\n const newPicker: IFilterDatePicker = {\n ...datePicker,\n onCloseCallback,\n onToggleCallback,\n onApplyCallback,\n disabled,\n selected:\n foundPicker &&\n (foundPicker.selected instanceof Date || isDateInterval(foundPicker.selected))\n ? foundPicker.selected\n : null,\n initialValue: validInitialValue,\n };\n datePickersFilters.push(newPicker);\n });\n\n return datePickersFilters;\n};\n\nconst createLabelResults = (\n searchersConfig: ISearchFilter[],\n dropdownsConfig: IFilterDropdownConfig[],\n datePickersConfig: IFilterDatePicker[],\n filtersValues: IFilterResult[]\n): IFilterLabel[] => {\n const labelLists: IFilterLabel[] = [];\n\n searchersConfig.forEach((searcher) => {\n const foundSearcher = filtersValues.find((element) => element.id === searcher.id);\n if (!foundSearcher) {\n return;\n\n // searchers are never arrays or date but Typescript requires this type check\n } else if (isFilterItem(foundSearcher.selected)) {\n const newLabel: IFilterLabel = {\n filterId: foundSearcher.id,\n item: foundSearcher.selected,\n filterName: searcher.name,\n type: foundSearcher.type,\n };\n labelLists.push(newLabel);\n }\n });\n\n dropdownsConfig.forEach((dropdown) => {\n const foundDropdown = filtersValues.find((element) => element.id === dropdown.id);\n if (!foundDropdown || foundDropdown.selected === null) {\n return;\n } else if (Array.isArray(foundDropdown.selected)) {\n foundDropdown.selected.forEach((dropdownLabelVal) => {\n const newLabel: IFilterLabel = {\n filterId: foundDropdown.id,\n item: dropdownLabelVal,\n icon: dropdown.buttonIcon,\n filterName: dropdown.name,\n type: foundDropdown.type,\n };\n labelLists.push(newLabel);\n });\n } else if (isFilterItem(foundDropdown.selected)) {\n const newLabel: IFilterLabel = {\n filterId: foundDropdown.id,\n item: foundDropdown.selected,\n icon: dropdown.buttonIcon,\n filterName: dropdown.name,\n type: foundDropdown.type,\n };\n\n labelLists.push(newLabel);\n }\n });\n\n datePickersConfig.forEach((datePicker) => {\n const foundPicker = filtersValues.find((element) => element.id === datePicker.id);\n if (\n !foundPicker ||\n foundPicker.selected === null ||\n Array.isArray(foundPicker.selected) ||\n isFilterItem(foundPicker.selected)\n ) {\n return;\n } else {\n const newLabel: IFilterLabel = {\n filterId: foundPicker.id,\n item: foundPicker.selected,\n icon: datePicker.buttonIcon,\n filterName: datePicker.name,\n type: foundPicker.type,\n };\n labelLists.push(newLabel);\n }\n });\n\n return labelLists;\n};\n\nconst initFilters = (\n searchersConfig: ISearchFilter[],\n dropdownsConfig: IFilterDropdownConfig[],\n datePickersConfig: IFilterDatePicker[]\n): IFilterResult[] => {\n const newFilters: IFilterResult[] = [];\n\n searchersConfig.forEach(({ id, value, selected }) => {\n let validatedSelected: IFilterItem | null = null;\n if (typeof value === 'number') {\n validatedSelected = { text: value.toString(), value: value };\n } else if (value === 'string') {\n validatedSelected = { text: value, value: value };\n } else if (isFilterItem(selected)) {\n validatedSelected = selected;\n }\n\n const initialSearch: IFilterResult = { id, type: 'search', selected: validatedSelected };\n\n newFilters.push(initialSearch);\n });\n\n dropdownsConfig.forEach(({ id, selected }) => {\n const initialDropdown: IFilterResult = {\n id,\n type: 'dropdown',\n selected: isFilterItem(selected) || Array.isArray(selected) ? selected : null,\n };\n\n newFilters.push(initialDropdown);\n });\n\n datePickersConfig.forEach(({ id, initialValue, selected }) => {\n let validSelected: Date | IDateInterval | null = null;\n\n if (initialValue) {\n validSelected = initialValue;\n } else if (selected) {\n validSelected = selected;\n }\n\n newFilters.push({ id, type: 'datepicker', selected: validSelected });\n });\n\n return newFilters;\n};\n\ninterface IFilterBar {\n filtersTitle?: string;\n searchersConfig?: ISearchFilter[];\n dropdownsConfig?: IFilterDropdownConfig[];\n datePickersConfig?: IFilterDatePicker[];\n hasShowMore?: boolean;\n showMoreText?: string;\n showLessText?: string;\n resultTextTemplate?: string;\n totalResults: number;\n clearText?: string;\n isLoading?: boolean;\n singleFilter?: boolean;\n resultsDateFormat?: string;\n onChangeCallback?: (currentSelected: IFilterResult[]) => void;\n}\n\nconst FilterBar: React.FC<IFilterBar> = ({\n filtersTitle = 'Filters:',\n hasShowMore,\n searchersConfig = [],\n dropdownsConfig = [],\n datePickersConfig = [],\n showMoreText,\n showLessText,\n resultTextTemplate,\n clearText,\n totalResults,\n singleFilter = false,\n resultsDateFormat,\n onChangeCallback = () => {},\n ...props\n}) => {\n const [filtersValues, setFiltersValues] = useState<IFilterResult[]>(\n initFilters(searchersConfig, dropdownsConfig, datePickersConfig)\n );\n const dropdownsConfigRef = useRef<IFilterDropdownConfig[]>(dropdownsConfig);\n\n // Prevents extra-renders only updating if the dropdowns config actually changed\n if (dropdownsConfigRef.current && !isequal(dropdownsConfigRef.current, dropdownsConfig)) {\n dropdownsConfigRef.current = dropdownsConfig;\n }\n\n // saves a reference of the debounce for searchers\n const debounceSearcher = useRef(\n debounce((updatedFilters) => handleChange(updatedFilters), 600)\n ).current;\n\n const handleChange = useCallback(\n (newValues: IFilterResult[]) => {\n const notNullValues = newValues.filter((filter) => filter.selected !== null);\n\n onChangeCallback(notNullValues);\n },\n [onChangeCallback]\n );\n\n const handleDropdownsSelected = useCallback(\n (newValue: IFilterValue, filterId: string) => {\n setFiltersValues((prev) => {\n const updatedFilters = [...prev];\n const foundFilter = updatedFilters.find((filter) => filter.id === filterId);\n if (foundFilter && foundFilter.selected !== newValue) {\n foundFilter.selected = newValue;\n handleChange(updatedFilters);\n return updatedFilters;\n }\n return prev;\n });\n },\n [handleChange]\n );\n\n const handleSearchers = useCallback(\n (newValue: string, filterId: string) => {\n const updatedFilters = [...filtersValues];\n const foundFilter = updatedFilters.find((filter) => filter.id === filterId);\n if (foundFilter) {\n foundFilter.selected = newValue === '' ? null : { text: newValue, value: newValue };\n }\n\n debounceSearcher(updatedFilters);\n setFiltersValues(updatedFilters);\n },\n [debounceSearcher, filtersValues]\n );\n\n const handleOnClear = useCallback(() => {\n const updatedFilters = [...filtersValues];\n updatedFilters.forEach((filterElement) => {\n if (filterElement.selected === null) {\n return;\n }\n filterElement.selected = null;\n });\n\n handleChange(updatedFilters);\n setFiltersValues(updatedFilters);\n }, [filtersValues, handleChange]);\n\n const handleOnRemoveFilter = useCallback(\n (filterId: string, type: IFilterType, item: IFilterItem | Date | IDateInterval) => {\n setFiltersValues((prev) => {\n const updatedFilters = [...prev];\n\n const foundFilter = updatedFilters.find((filterElement) => filterElement.id === filterId);\n\n if (!foundFilter) {\n return prev;\n } else if (Array.isArray(foundFilter.selected) && type === 'dropdown') {\n const selectedFiltered = foundFilter.selected.filter((oldItem) => {\n if (isFilterItem(oldItem) && isFilterItem(item)) {\n return oldItem.value !== item.value;\n }\n // it's required to have return a value usually will always receive filterItems and all will enter the if\n // but just in case if it's not a Filter item it will filter the value.\n return true;\n });\n foundFilter.selected = selectedFiltered.length === 0 ? null : selectedFiltered;\n } else {\n foundFilter.selected = null;\n }\n\n handleChange(updatedFilters);\n return updatedFilters;\n });\n },\n [handleChange]\n );\n\n const handleDatePickers = useCallback(\n (selection: IDateInterval | Date | null, filterId: string) => {\n const updatedDatePickers = [...filtersValues];\n const foundFilter = updatedDatePickers.find((datePicker) => datePicker.id === filterId);\n\n if (foundFilter) {\n foundFilter.selected = selection;\n handleChange(filtersValues);\n setFiltersValues(updatedDatePickers);\n }\n },\n [filtersValues, handleChange]\n );\n\n /**\n * This use Effect will update filters text selections in case the language is changed.\n * Dropdowns are the only ones that required this because Inputs text are the user type data.\n * DatePickers do not change text for now\n */\n useEffect(() => {\n if (dropdownsConfig.length === 0) return;\n\n setFiltersValues((prev) => {\n const updatedFilters = [...prev];\n updatedFilters.forEach((filter: IFilterResult) => {\n const foundDropdown = dropdownsConfig.find((dropdown) => dropdown.id === filter.id);\n\n if (foundDropdown) {\n if (Array.isArray(filter.selected)) {\n filter.selected.forEach((item) => {\n const foundItem = foundDropdown.list.find(\n (dropdownItem) => dropdownItem.value === item.value\n );\n\n if (foundItem) {\n item.text = foundItem.text;\n }\n });\n } else if (isFilterItem(filter.selected)) {\n const foundItem = foundDropdown.list.find((item: IFilterItem) => {\n return filter.selected === null\n ? false\n : isFilterItem(filter.selected)\n ? item.value === filter.selected.value\n : false;\n });\n\n if (foundItem) {\n filter.selected.text = foundItem.text;\n }\n }\n }\n });\n\n return updatedFilters;\n });\n }, [dropdownsConfig]);\n\n return (\n <Container {...props}>\n <Title>{filtersTitle}</Title>\n <FilterInputs\n {...{\n hasShowMore,\n showMoreText,\n showLessText,\n }}\n searchFilters={createSearchers(\n searchersConfig,\n filtersValues,\n singleFilter,\n handleSearchers\n )}\n dropdownFilters={createDropdownFilters(\n dropdownsConfigRef.current,\n filtersValues,\n singleFilter,\n handleDropdownsSelected\n )}\n datePickerFilters={\n datePickersConfig\n ? createDatePickers(datePickersConfig, filtersValues, singleFilter, handleDatePickers)\n : undefined\n }\n />\n <StyledFilterResults\n {...{ resultTextTemplate, clearText, totalResults, resultsDateFormat }}\n labelLists={createLabelResults(\n searchersConfig,\n dropdownsConfigRef.current,\n datePickersConfig,\n filtersValues\n )}\n onClearAll={handleOnClear}\n onRemoveFilter={handleOnRemoveFilter}\n />\n </Container>\n );\n};\n\nexport default FilterBar;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport type { IStatusDot } from '..';\nimport Icon from './Icon';\n\nconst Container = styled.div`\n position: relative;\n display: inline-block;\n`;\n\nconst StatusCounter = styled.div<{ $color?: IStatusDot }>`\n position: absolute;\n left: 14px;;\n top: -12px;\n border-radius: 4px;\n height: 14px;\n min-width: 14px;\n padding: 2px;\n font-size: 10px;\n color: white;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color var(--speed-slow) var(--easing-primary-in-out);\n background-color: ${({ theme, $color }) => ($color ? theme.colors.status[$color] : 'var(--grey-5)')};\n`;\n\nconst StatusDot = styled.div<{ $color?: IStatusDot }>`\n width: 6px;\n height: 6px;\n border-radius: 50%;\n position: absolute;\n top: -6px;\n right: -6px;\n transition: background-color var(--speed-slow) var(--easing-primary-in-out);\n background-color: ${({ theme, $color }) => ($color ? theme.colors.status[$color] : 'var(--grey-5)')};\n`;\n\ninterface IStatusIcon {\n icon: string;\n status?: IStatusDot;\n counter?: number;\n maxCounter?: number;\n}\n\nconst StatusIcon: React.FC<IStatusIcon> = ({ icon, status, counter, maxCounter = 999 }) => {\n return (\n <Container>\n {status && counter === undefined ? (\n <StatusDot $color={status} />\n ) : counter === undefined ? null : (\n <StatusCounter $color={status}>\n {counter > maxCounter ? `${maxCounter}+` : counter}\n </StatusCounter>\n )}\n <Icon icon={icon} size={18} color='dimmed' />\n </Container>\n );\n};\n\nexport default StatusIcon;\n","import update from 'immutability-helper';\nimport type { IPointSet, IVector2 } from './';\n\nexport type IReducerActions =\n | UpdateAction\n | LoadAction\n | AddSetAction\n | RemoveAction\n | AddPointAction\n | RemovePointAction\n | UpdateSetOptions\n | RenameSetAction\n | ChangeFillColorAction\n | ChangeTranparencyLevelAction;\n\ninterface AddSetAction {\n type: 'ADD_SET';\n data: IPointSet;\n}\ninterface UpdateAction {\n type: 'UPDATE' | 'UPDATE_SET_POINTS';\n index: number;\n data: IPointSet;\n}\n\ninterface RenameSetAction {\n type: 'RENAME_SET';\n index: number;\n data: {\n name: string;\n };\n}\ninterface UpdateSetOptions {\n type: 'UPDATE_SET_OPTIONS';\n index: number;\n data: Partial<IPointSet>;\n}\ninterface RemoveAction {\n type: 'REMOVE_SET';\n index: number;\n}\ninterface LoadAction {\n type: 'LOAD';\n state: IPointSet[];\n}\ninterface AddPointAction {\n type: 'ADD_POINT';\n index: number;\n}\ninterface RemovePointAction {\n type: 'REMOVE_POINT';\n index: number;\n}\n\ninterface ChangeFillColorAction {\n type: 'UPDATE_FILL_COLOR';\n index: number;\n data: {\n areaFillColor: string;\n };\n}\n\ninterface ChangeTranparencyLevelAction {\n type: 'UPDATE_TRANSPARENCY_LEVEL';\n index: number;\n data: {\n areaTransparencyLevel: number;\n };\n}\n\nconst getMidpoint = (pointA: IVector2, pointB: IVector2) => {\n return {\n x: pointA.x + (pointB.x - pointA.x) * 0.5,\n y: pointA.y + (pointB.y - pointA.y) * 0.5,\n };\n};\n\nexport default (state: IPointSet[], action: IReducerActions) => {\n switch (action.type) {\n //This UPDATE is better named 'UPDATE_SET_POINTS'\n case 'UPDATE_SET_POINTS':\n case 'UPDATE': {\n const points = action.data.points.map((point) => ({ ...point }));\n return update(state, { [action.index]: { points: { $set: points } } });\n }\n\n case 'RENAME_SET': {\n const set = { ...state[action.index], name: action.data.name };\n return update(state, { [action.index]: { $set: set } });\n }\n\n case 'UPDATE_SET_OPTIONS': {\n const set = { ...state[action.index], ...action.data };\n return update(state, { [action.index]: { $set: set } });\n }\n\n case 'ADD_SET':\n return [...state, action.data];\n\n case 'REMOVE_SET':\n return update(state, { $splice: [[action.index, 1]] });\n\n case 'ADD_POINT': {\n const newPoint: IVector2 = getMidpoint(\n state[action.index].points[0],\n state[action.index].points[1]\n );\n return update(state, { [action.index]: { points: { $splice: [[1, 0, newPoint]] } } });\n }\n\n case 'REMOVE_POINT':\n if (state[action.index].points.length <= 2) {\n return state;\n }\n return update(state, {\n [action.index]: { points: { $splice: [[state[action.index].points.length - 1, 1]] } },\n });\n\n case 'LOAD': {\n const newState = action.state.map(({ name, points, ...rest }) => ({\n name,\n points: points.map(({ x, y }) => ({ x, y })),\n ...rest,\n }));\n return newState;\n }\n\n case 'UPDATE_FILL_COLOR': {\n const set = { ...state[action.index], areaFillColor: action.data.areaFillColor };\n return update(state, { [action.index]: { $set: set } });\n }\n\n case 'UPDATE_TRANSPARENCY_LEVEL': {\n const set = {\n ...state[action.index],\n areaTransparencyLevel: action.data.areaTransparencyLevel,\n };\n return update(state, { [action.index]: { $set: set } });\n }\n\n default:\n console.error(`Action ${(action as { type: string }).type} not registered.`);\n return state;\n }\n};\n","import type React from 'react';\nimport { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport Spinner from '../Indicators/Spinner';\nimport type { IBoundary, LineUIOptions } from '.';\nimport { LineSetContext } from './Contexts';\nimport LineSet from './LineSet';\n\nconst Container = styled.div`\n position: relative;\n line-height: 0;\n user-select: none;\n touch-action: none;\n /* box-shadow: 0 10px 20px hsla(195deg, 65%, 5%, 35%); */\n /* border: 10px solid hsla(195deg, 45%, 35%, 45%); */\n /* border-radius:3px; */\n\n width: auto;\n /* transform: translateY(-70%); */\n\n`;\n\nconst LoadingOverlay = styled.div`\n position: absolute;\n top:0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`;\n\nconst Frame = styled.svg<{ $transculent?: boolean }>`\n touch-action: none;\n user-select: none;\n margin: 0;\n\n overflow: visible;\n\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n transition: background 250ms ease;\n background: hsla(0deg, 0%, 0%, 0%);\n\n ${(props) =>\n props.$transculent &&\n css`\n background: hsla(0deg, 0%, 0%, 35%);\n `}\n\n`;\nconst Image = styled.img`\n object-fit: contain;\n width: 100%;\n height: 100%;\n`;\n\ninterface LineUIProps {\n src: string;\n onSizeChange?: (size: { h: number; w: number }) => void;\n onLineMoveEnd?: () => void;\n onLineClick?: (lineSetId: number) => void;\n options?: LineUIOptions;\n showDirectionMark?: boolean;\n lineClickSensingBorder?: string;\n hasClickSensingBorder?: boolean;\n}\nconst LineUI: React.FC<LineUIProps> = ({\n src,\n onSizeChange = () => {},\n onLineMoveEnd = () => {},\n onLineClick = () => {},\n lineClickSensingBorder = '65',\n hasClickSensingBorder = true,\n options: {\n showHandleFinder,\n showSetIndex,\n showPointLabel = false,\n showLabelShadow = false,\n showPointHandle,\n showMoveHandle,\n showGrabHandle,\n setIndexOffset = 0,\n pointIndexOffset = 0,\n showPoint = false,\n fixedImgDimensions,\n boundaryOffset = 0,\n showDirectionMark = false,\n } = {},\n}) => {\n const [boundaries, setBoundaries] = useState<IBoundary>({\n x: { min: 0, max: 0 },\n y: { min: 0, max: 0 },\n });\n const { state } = useContext(LineSetContext);\n\n const [handleFinder, setHandleFinder] = useState<boolean>(false);\n\n const [loaded, setLoaded] = useState(false);\n\n // Scale Code\n const [imgSize, setImgSize] = useState({ h: 1, w: 1 });\n const [unit, setUnit] = useState(1);\n const imgRef = useRef<HTMLImageElement>(null);\n const frame = useRef<SVGSVGElement>(null);\n\n // Initialization functions.\n const initScaleAndBounds = useCallback(() => {\n if (!imgRef.current) {\n return;\n }\n\n const { naturalHeight, naturalWidth, clientHeight } = imgRef.current;\n const h = fixedImgDimensions?.y || naturalHeight;\n const w = fixedImgDimensions?.x || naturalWidth;\n if (h !== imgSize.h || w !== imgSize.w) {\n setImgSize({ h, w });\n onSizeChange({ h, w });\n console.debug('image size:', {\n naturalHeight,\n naturalWidth,\n clientHeight,\n unit: naturalHeight / clientHeight,\n });\n }\n\n if (h / clientHeight !== unit) {\n setUnit(h / clientHeight);\n }\n setLoaded(true);\n }, [fixedImgDimensions, imgSize.h, imgSize.w, onSizeChange, unit]);\n\n const calculateCTM = useCallback(() => {\n if (!frame.current) {\n return null;\n }\n //On size change make sure to refresh CTM\n const ctm = frame.current.getScreenCTM();\n console.debug('calculateCTM', ctm);\n return ctm;\n }, []);\n\n const handlePositionTipShow = (e: React.PointerEvent<SVGSVGElement>) => {\n if (e.target === frame.current) {\n setHandleFinder(!handleFinder === false && true);\n }\n };\n\n const handlePositionTipHide = () => {\n setHandleFinder(showHandleFinder || false);\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: imgSize is a trigger dep — flows into <Frame> viewBox attr, so the effect must re-run after React applies the new viewBox. See #645.\n useEffect(() => {\n if (!frame.current) {\n return;\n }\n\n // Redefine boundaries loaded image changes our svg viewbox.\n const { viewBox } = frame.current;\n const bounds = {\n x: {\n min: viewBox.baseVal.x + boundaryOffset,\n max: viewBox.baseVal.x + viewBox.baseVal.width - boundaryOffset,\n },\n y: {\n min: viewBox.baseVal.y + boundaryOffset,\n max: viewBox.baseVal.y + viewBox.baseVal.height - boundaryOffset,\n },\n };\n console.debug('setBoundaries', bounds);\n setBoundaries(bounds);\n }, [imgSize, boundaryOffset]);\n\n useEffect(() => {\n // Make sure we always keep scale up to date on resize.\n window.addEventListener('resize', initScaleAndBounds);\n return () => {\n window.removeEventListener('resize', initScaleAndBounds);\n };\n }, [initScaleAndBounds]);\n\n const options = {\n handleFinderActive: handleFinder,\n revealSetIndex: showSetIndex !== false && (showSetIndex || state.length > 1),\n showPointLabel,\n showLabelShadow,\n showPointHandle: showPointHandle || (showPointHandle !== false && showGrabHandle !== false),\n showMoveHandle: showMoveHandle || (showMoveHandle !== false && showGrabHandle !== false),\n setIndexOffset,\n pointIndexOffset,\n showPoint,\n showDirectionMark,\n };\n\n return (\n <Container>\n <Image ref={imgRef} onLoad={initScaleAndBounds} src={src} alt='' />\n {loaded && boundaries ? (\n <Frame\n ref={frame}\n viewBox={`0 0 ${imgSize.w} ${imgSize.h} `}\n version='1.1'\n xmlns='http://www.w3.org/2000/svg'\n onPointerDown={handlePositionTipShow}\n onPointerUp={handlePositionTipHide}\n onPointerLeave={handlePositionTipHide}\n $transculent={handleFinder}\n >\n {state.map((lineSet, index) => (\n <LineSet\n hasClickSensingBorder={hasClickSensingBorder}\n lineClickSensingBorder={lineClickSensingBorder}\n // biome-ignore lint/suspicious/noArrayIndexKey: index IS the lineSetId, also passed to LineSet as the prop of the same name. #646.\n key={index}\n onLineMoveEnd={onLineMoveEnd}\n onLineClick={onLineClick}\n lineSetId={index}\n lineData={lineSet}\n getCTM={calculateCTM}\n boundaries={boundaries}\n unit={unit}\n size={30}\n options={options}\n />\n ))}\n </Frame>\n ) : (\n <LoadingOverlay>\n <Spinner size='large' styling='primary' />\n </LoadingOverlay>\n )}\n </Container>\n );\n};\n\nexport default LineUI;\n","import type React from 'react';\nimport { useEffect, useRef, type VideoHTMLAttributes } from 'react';\nimport styled from 'styled-components';\n\nconst Video = styled.video`\n /* width: 800px; */\n`;\ninterface WebRTCMessage {\n sdp?: RTCSessionDescriptionInit;\n ice?: RTCIceCandidate;\n}\ninterface OwnProps {\n enabled: boolean;\n peerAddress: string;\n maxConnectionAttempts?: number;\n rtcConfiguration?: RTCConfiguration;\n id?: string;\n setStatus?: (status: string) => void;\n setError?: (error: string | null) => void;\n}\ntype Props = OwnProps & VideoHTMLAttributes<HTMLVideoElement>;\n\nconst WebRTCPlayer: React.FC<Props> = ({\n id = '1',\n enabled,\n peerAddress,\n maxConnectionAttempts = 30,\n rtcConfiguration = {},\n setStatus = () => {},\n setError = () => {},\n // Video element defaults\n autoPlay = true,\n muted = true,\n children,\n ...props\n}) => {\n const connectionAttemptsRef = useRef(0);\n const videoRef = useRef<HTMLVideoElement>(null);\n const webSocket = useRef<WebSocket | null>(null);\n const peerConnection = useRef<RTCPeerConnection | null>(null);\n const mountedRef = useRef(false);\n const reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const helloIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const enabledRef = useRef(enabled);\n\n function handleIncomingError(error: string) {\n setError(error);\n closeWebSocket();\n }\n\n // SDP offer received from peer, set remote description and create an answer\n const onIncomingSDP = async (description: RTCSessionDescriptionInit) => {\n if (!peerConnection.current || !webSocket.current) {\n return;\n }\n\n try {\n if (description.type === 'offer' && peerConnection.current.signalingState !== 'stable') {\n await Promise.all([\n peerConnection.current.setLocalDescription({ type: 'rollback' }),\n peerConnection.current.setRemoteDescription(description),\n ]);\n } else {\n if (description.sdp) {\n //HACK: this seems to allow more clients to negotiate.64002a\n // seems to use [codec] H264 (96, level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f)\n description.sdp = description.sdp.replace(/profile-level-id=(640028|64001f|64002a);/, '');\n }\n await peerConnection.current.setRemoteDescription(new RTCSessionDescription(description));\n setStatus('Remote Description set');\n }\n } catch (error) {\n console.error('Error:', error);\n setError('Error Setting remote description');\n return;\n }\n\n // what is this case?\n if (description.type !== 'offer') {\n return;\n }\n\n setStatus('Creating Answer');\n try {\n const answer = await peerConnection.current.createAnswer();\n console.debug(`WebRTC: Got local description: ${JSON.stringify(answer)}`);\n await peerConnection.current.setLocalDescription(answer);\n } catch (error) {\n console.error(error);\n if (error instanceof Error) {\n setError(error.message);\n }\n return;\n }\n\n // TODO: Why was this being set to null and why AFTER setting it??\n // peerConnection.current.localDescription['ice-option'] = null\n const message = {\n sdp: peerConnection.current.localDescription,\n };\n setStatus('Sending Local Description');\n // console.debug('Local Description:' + JSON.stringify(message));\n try {\n webSocket.current.send(JSON.stringify(message));\n setStatus('Connected');\n } catch (error) {\n console.error(error);\n if (error instanceof Error) {\n setError(error.message);\n }\n }\n };\n\n // ICE candidate received from peer, add it to the peer connection\n function onIncomingICE(ice: RTCIceCandidateInit) {\n if (!peerConnection.current) {\n console.error('peerConnection.current not found onIncomingICE ');\n return;\n }\n const candidate = new RTCIceCandidate(ice);\n peerConnection.current.addIceCandidate(candidate).catch(setError);\n }\n\n const onServerMessage = ({ data = '' }: MessageEvent) => {\n if (data === 'HELLO') {\n console.debug('Received HELLO');\n setStatus('Registered with server, waiting for offer.');\n } else if (data.startsWith('ERROR')) {\n console.error(`Received ${data}`);\n handleIncomingError(data);\n } else {\n // Handle incoming JSON SDP and ICE messages\n let msg: WebRTCMessage;\n try {\n msg = JSON.parse(data);\n } catch (e) {\n if (e instanceof SyntaxError) {\n handleIncomingError(`WebRTC: Error parsing incoming JSON: ${data}`);\n } else {\n handleIncomingError(`WebRTC: Unknown error parsing response: ${data}`);\n }\n return;\n }\n // Incoming JSON signals the beginning of a call\n if (!peerConnection.current) {\n createCall(msg);\n }\n\n if (msg.sdp != null) {\n console.debug(`WebRTC: Received Remote SDP:${JSON.stringify(msg.sdp)}`);\n onIncomingSDP(msg.sdp);\n } else if (msg.ice != null) {\n console.debug(`WebRTC: Received Remote ICE:${JSON.stringify(msg.ice)}`);\n onIncomingICE(msg.ice);\n } else {\n handleIncomingError(`WebRTC: Unknown incoming JSON: ${msg}`);\n }\n }\n };\n\n function onServerClose(event: CloseEvent) {\n // Ignore close events from stale WebSocket connections (e.g. StrictMode cleanup)\n if (!webSocket.current || event.target !== webSocket.current) {\n return;\n }\n console.debug('WebRTC: serverClose');\n setStatus('Disconnected from server');\n closePeerConnection();\n if (event.code !== 1000 && enabledRef.current && mountedRef.current) {\n if (reconnectTimeoutRef.current !== null) {\n clearTimeout(reconnectTimeoutRef.current);\n }\n reconnectTimeoutRef.current = setTimeout(connectToPeer, 3000);\n }\n }\n\n function onServerError(event: Event) {\n // Ignore errors from stale WebSocket connections\n if (event.target !== webSocket.current) {\n return;\n }\n console.debug('serverError', event);\n setError('Unable to connect to server');\n closeWebSocket();\n }\n\n function connectToPeer() {\n if (!mountedRef.current) {\n return;\n }\n console.debug('connectToPeer', connectionAttemptsRef.current);\n if (connectionAttemptsRef.current >= maxConnectionAttempts) {\n setError('Too many connection attempts, aborting. Refresh page to try again');\n return;\n }\n setError(null);\n\n const peerId = getPeerId(id);\n setStatus(`Connecting to server ${peerAddress}`);\n const ws = new WebSocket(peerAddress);\n webSocket.current = ws;\n /* When connected, immediately register with the server */\n ws.addEventListener('open', () => {\n if (helloIntervalRef.current !== null) {\n clearInterval(helloIntervalRef.current);\n }\n helloIntervalRef.current = setInterval(() => {\n try {\n ws.send(`HELLO ${peerId}`);\n if (helloIntervalRef.current !== null) {\n clearInterval(helloIntervalRef.current);\n helloIntervalRef.current = null;\n }\n setStatus(`Registering with server (sent HELLO) for peer id: ${peerId}`);\n } catch (error) {\n console.debug(error);\n }\n }, 3000);\n });\n ws.addEventListener('error', onServerError);\n ws.addEventListener('message', onServerMessage);\n ws.addEventListener('close', onServerClose);\n connectionAttemptsRef.current += 1;\n }\n\n function onRemoteTrack(event: RTCTrackEvent) {\n if (videoRef.current && videoRef.current.srcObject !== event.streams[0]) {\n console.debug('Incoming stream');\n videoRef.current.srcObject = event.streams[0];\n setStatus('Adding Track');\n }\n }\n\n function createCall(msg: WebRTCMessage) {\n // Reset connection attempts because we connected successfully\n connectionAttemptsRef.current = 0;\n console.debug('Creating RTCPeerConnection');\n\n if (!msg.sdp) {\n console.debug(\"WARNING: First message wasn't an SDP message!?\");\n return;\n }\n\n const pc = new RTCPeerConnection(rtcConfiguration);\n peerConnection.current = pc;\n pc.addEventListener('track', onRemoteTrack);\n\n pc.addEventListener('icecandidate', ({ candidate = null }) => {\n if (!candidate) {\n console.debug('All local ICE Candidates sent.');\n return;\n }\n // We have a local ICE candidate, send it to the remote party with the same uuid\n if (webSocket.current) {\n webSocket.current.send(JSON.stringify({ ice: candidate }));\n //TODO: try catch here?\n } else {\n console.debug(\"no WS found on peer connection 'icecandidate' event... how?\");\n }\n });\n // pc.addEventListener('negotiationneeded', ()=>{console.debug('negotiationneeded')})\n\n setStatus('RTCPeerConnection created, waiting for SDP');\n }\n\n const closeWebSocket = () => {\n console.debug('closeWebSocket');\n closePeerConnection();\n if (webSocket.current) {\n webSocket.current.close();\n webSocket.current = null;\n }\n };\n\n const closePeerConnection = () => {\n console.debug('closePeerConnection');\n if (peerConnection.current) {\n peerConnection.current.close();\n peerConnection.current = null;\n }\n };\n\n useEffect(() => {\n enabledRef.current = enabled;\n }, [enabled]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: connectToPeer and closeWebSocket are inline functions — adding them would cause infinite reconnect loops\n useEffect(() => {\n mountedRef.current = true;\n let connectTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n if (enabled === true) {\n // Defer connection so StrictMode's synchronous cleanup cancels it\n // before a WebSocket is ever created, avoiding the browser-level\n // \"WebSocket is closed before the connection is established\" error.\n connectTimeoutId = setTimeout(() => {\n connectTimeoutId = null;\n if (mountedRef.current) {\n connectToPeer();\n }\n }, 0);\n } else {\n if (webSocket.current) {\n webSocket.current.close(1000, 'WebRTC Disabled');\n }\n }\n return () => {\n mountedRef.current = false;\n\n if (connectTimeoutId !== null) {\n clearTimeout(connectTimeoutId);\n }\n if (reconnectTimeoutRef.current !== null) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n if (helloIntervalRef.current !== null) {\n clearInterval(helloIntervalRef.current);\n helloIntervalRef.current = null;\n }\n\n closeWebSocket();\n };\n }, [enabled]);\n\n return (\n <Video {...props} autoPlay={autoPlay} muted={muted} ref={videoRef}>\n {children}\n </Video>\n );\n};\n\nexport default WebRTCPlayer;\n\nfunction getPeerId(id: string) {\n return `WRP_${id}_${Math.floor(Math.random() * (9000 - 10) + 10).toString()}`;\n}\n","import type React from 'react';\nimport { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport Spinner from '../Indicators/Spinner';\nimport WebRTCClient from '../WebRTCClient';\nimport type { IBoundary, LineUIOptions, LineUIVideoOptions } from '.';\nimport { LineSetContext } from './Contexts';\nimport LineSet from './LineSet';\n\nconst Container = styled.div`\n position: relative;\n line-height: 0;\n user-select: none;\n touch-action: none;\n /* box-shadow: 0 10px 20px hsla(195deg, 65%, 5%, 35%); */\n /* border: 10px solid hsla(195deg, 45%, 35%, 45%); */\n /* border-radius:3px; */\n\n width: auto;\n /* transform: translateY(-70%); */\n`;\nconst Video = styled(WebRTCClient)`\n width: 100%;\n height: 100%;\n border-radius: 3px;\n background-color: hsla(0deg, 0%, 0%, 35%);\n`;\nconst LoadingOverlay = styled.div`\n position: absolute;\n top:0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n`;\n\nconst Frame = styled.svg<{ $transcalent?: boolean }>`\n touch-action: none;\n user-select: none;\n margin: 0;\n\n overflow: visible;\n\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n transition: background 250ms ease;\n background: hsla(0deg, 0%, 0%, 0%);\n\n ${(props) =>\n props.$transcalent &&\n css`\n background: hsla(0deg, 0%, 0%, 35%);\n `}\n\n`;\n\ninterface LineUIProps {\n ws: string;\n onSizeChange?: (size: { h: number; w: number }) => void;\n onLineMoveEnd?: () => void;\n onLineClick?: (lineSetId: number) => void;\n onLoaded?: (metadata: { height: number; width: number }) => void;\n options?: LineUIOptions;\n videoOptions?: LineUIVideoOptions;\n lineClickSensingBorder?: string;\n hasClickSensingBorder?: boolean;\n}\nconst LineUI: React.FC<LineUIProps> = ({\n ws,\n onSizeChange = () => {},\n onLineMoveEnd = () => {},\n onLineClick = () => {},\n onLoaded = () => {},\n lineClickSensingBorder = '65',\n hasClickSensingBorder = true,\n videoOptions,\n options: {\n showHandleFinder,\n showSetIndex,\n showPointLabel = false,\n showLabelShadow = false,\n showPointHandle,\n showMoveHandle,\n showGrabHandle,\n setIndexOffset = 0,\n pointIndexOffset = 0,\n showPoint = false,\n boundaryOffset = 0,\n showDirectionMark = false,\n } = {},\n}) => {\n const frame = useRef<SVGSVGElement>(null);\n const videoRef = useRef<HTMLVideoElement | null>(null);\n\n const [boundaries, setBoundaries] = useState<IBoundary>({\n x: { min: 0, max: 0 },\n y: { min: 0, max: 0 },\n });\n const { state } = useContext(LineSetContext);\n\n const [handleFinder, setHandleFinder] = useState<boolean>(false);\n\n // Scale Code\n const [videoSize, setVideoSize] = useState({ h: 768, w: 1024 });\n const [unit, setUnit] = useState(1);\n const [loaded, setLoaded] = useState(false);\n\n // Initialization functions.\n const initScaleAndBounds = useCallback(() => {\n if (!videoRef.current) {\n return;\n }\n const { videoHeight, videoWidth, clientHeight } = videoRef.current;\n\n if (videoHeight !== videoSize.h || videoWidth !== videoSize.w) {\n setVideoSize({ h: videoHeight, w: videoWidth });\n onSizeChange({ h: videoHeight, w: videoWidth });\n }\n\n if (videoHeight / clientHeight !== unit) {\n setUnit(videoHeight / clientHeight);\n }\n }, [videoSize.h, videoSize.w, unit, onSizeChange]);\n\n const handlePositionTipShow = (e: React.PointerEvent<SVGSVGElement>) => {\n if (e.target === frame.current) {\n setHandleFinder(!handleFinder === false && true);\n }\n };\n\n const handlePositionTipHide = () => {\n setHandleFinder(showHandleFinder || false);\n };\n\n const calculateCTM = useCallback(() => {\n if (!frame.current) {\n return null;\n }\n //On size change make sure to refresh CTM\n return frame.current.getScreenCTM();\n }, []);\n\n useEffect(() => {\n // Redefine boundaries and screen matrix when the loaded video changes our svg viewbox.\n if (!frame.current || !loaded) {\n return;\n }\n const { viewBox } = frame.current;\n const bounds = {\n x: {\n min: viewBox.baseVal.x + boundaryOffset,\n max: viewBox.baseVal.x + viewBox.baseVal.width - boundaryOffset,\n },\n y: {\n min: viewBox.baseVal.y + boundaryOffset,\n max: viewBox.baseVal.y + viewBox.baseVal.height - boundaryOffset,\n },\n };\n setBoundaries(bounds);\n }, [loaded, boundaryOffset]);\n\n const onLoadedMetadata = useCallback(\n ({ target }: React.SyntheticEvent<HTMLVideoElement>) => {\n if (target) {\n setLoaded(true);\n const videoTarget = target as HTMLVideoElement;\n videoRef.current = videoTarget;\n initScaleAndBounds();\n const { videoHeight = 1, videoWidth = 1 } = videoTarget;\n onLoaded({ height: videoHeight, width: videoWidth });\n }\n },\n [initScaleAndBounds, onLoaded]\n );\n\n useEffect(() => {\n // Make sure we always keep scale up to date on resize.\n window.addEventListener('resize', initScaleAndBounds);\n return () => {\n window.removeEventListener('resize', initScaleAndBounds);\n };\n }, [initScaleAndBounds]);\n\n const options = {\n handleFinderActive: handleFinder,\n revealSetIndex: showSetIndex !== false && (showSetIndex || state.length > 1),\n showPointLabel,\n showLabelShadow,\n showPointHandle: showPointHandle || (showPointHandle !== false && showGrabHandle !== false),\n showMoveHandle: showMoveHandle || (showMoveHandle !== false && showGrabHandle !== false),\n setIndexOffset,\n pointIndexOffset,\n showPoint,\n showDirectionMark,\n };\n\n return (\n <Container>\n <Video onLoadedMetadata={onLoadedMetadata} peerAddress={ws} id='1' {...videoOptions} enabled>\n {' '}\n </Video>\n {!loaded && (\n <LoadingOverlay>\n <Spinner size='large' styling='primary' />\n </LoadingOverlay>\n )}\n {loaded && (\n <Frame\n ref={frame}\n viewBox={`0 0 ${videoSize.w} ${videoSize.h} `}\n version='1.1'\n xmlns='http://www.w3.org/2000/svg'\n onPointerDown={handlePositionTipShow}\n onPointerUp={handlePositionTipHide}\n onPointerLeave={handlePositionTipHide}\n $transcalent={handleFinder}\n >\n {state.map((lineSet, index) => (\n <LineSet\n // biome-ignore lint/suspicious/noArrayIndexKey: index IS the lineSetId, also passed to LineSet as the prop of the same name. #646.\n key={index}\n hasClickSensingBorder={hasClickSensingBorder}\n lineClickSensingBorder={lineClickSensingBorder}\n onLineMoveEnd={onLineMoveEnd}\n onLineClick={onLineClick}\n lineSetId={index}\n lineData={lineSet}\n getCTM={calculateCTM}\n boundaries={boundaries}\n unit={unit}\n size={30}\n options={options}\n />\n ))}\n </Frame>\n )}\n </Container>\n );\n};\n\nexport default LineUI;\n","import type React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport LineUIVideoBase, { type LineUIProps } from './LineUIVideoBase';\n\nconst LineUIVideo: React.FC<LineUIProps> = (props) => {\n const videoRef = useRef<HTMLVideoElement>(null);\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video || !props.src) {\n return;\n }\n video.src = props.src;\n }, [props.src]);\n\n return <LineUIVideoBase videoRef={videoRef} {...props} />;\n};\n\nexport default LineUIVideo;\n","import type React from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.p`\n font-family: var(--font-ui);\n color: var(--grey-11);\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 20px; /* 142.857% */\n`;\n\ninterface IProps {\n children?: React.ReactNode;\n}\n\nconst IntroductionText: React.FC<IProps> = ({ children }) => {\n return <Container>{children}</Container>;\n};\n\nexport default IntroductionText;\n","import type React from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport { useTitle } from '../../hooks/useTitle';\nimport Icon from '../../Icons/Icon';\nimport { deviceMediaQuery } from '../../theme/common';\n\nconst ICON_SIZE = 24;\nconst GAP_LEFT = 20;\nconst ICON_MARGIN_LEFT = -GAP_LEFT - ICON_SIZE;\n\nconst Container = styled.div`\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n @media ${deviceMediaQuery.large} {\n gap: ${GAP_LEFT}px;\n flex-direction: row;\n }\n`;\n\nconst TitlesWrapper = styled.div<{ $areaTitleBottom: boolean }>`\n position: relative;\n display: flex;\n flex-direction: ${({ $areaTitleBottom }) => ($areaTitleBottom ? `column-reverse` : `column`)};\n gap: 4px;\n`;\n\nconst IconContainer = styled.div`\n display: flex;\n align-items: center;\n margin-left: 0px;\n justify-content: left;\n\n @media ${deviceMediaQuery.large} {\n margin-left: ${ICON_MARGIN_LEFT}px;\n justify-content: center;\n }\n\n svg {\n display: block;\n }\n`;\n\nconst Title = styled.h1`\n font-family: var(--font-ui);\n text-align: left;\n font-size: 26px;\n font-weight: 600;\n text-decoration: none;\n color: var(--grey-12);\n margin: 0;\n`;\n\nconst AreaTitleCss = css`\n font-family: var(--font-ui);\n text-align: left;\n font-size: 18px;\n font-weight: 600;\n text-decoration: none;\n color: var(--grey-11);\n`;\n\nconst AreaTitle = styled.div`\n ${AreaTitleCss}\n`;\n\nconst AreaLinkTitle = styled(Link)`\n ${AreaTitleCss}\n &:hover {\n text-decoration: underline;\n }\n`;\n\nconst AreaButton = styled.button`\n ${resetButtonStyles};\n ${AreaTitleCss};\n &:hover {\n text-decoration: underline;\n }\n`;\n\ninterface IProps {\n title: string;\n icon?: string;\n iconColor?: ISvgIcons['color'];\n areaTitle?: string;\n areaHref?: string;\n updateDocTitle?: boolean;\n hideAreaInDocTitle?: boolean;\n areaTitleBottom?: boolean;\n onAreaClick?: () => void;\n}\n\nconst PageTitle: React.FC<IProps> = ({\n title,\n icon,\n areaTitle,\n areaHref,\n updateDocTitle = true,\n hideAreaInDocTitle = false,\n areaTitleBottom = false,\n iconColor = 'dimmed',\n onAreaClick,\n}) => {\n // Set <title> attribute automagically.\n\n useTitle(title, hideAreaInDocTitle ? undefined : areaTitle || '', undefined, updateDocTitle);\n\n return (\n <Container>\n {icon ? (\n <IconContainer>\n <Icon size={ICON_SIZE} color={iconColor} {...{ icon }} />\n </IconContainer>\n ) : null}\n\n <TitlesWrapper $areaTitleBottom={areaTitleBottom}>\n {areaTitle && onAreaClick ? (\n <AreaButton onClick={onAreaClick} type='button'>\n {areaTitle}\n </AreaButton>\n ) : areaTitle && areaHref ? (\n <AreaLinkTitle to={areaHref}>{areaTitle}</AreaLinkTitle>\n ) : areaTitle ? (\n <AreaTitle>{areaTitle}</AreaTitle>\n ) : null}\n <Title>{title}</Title>\n </TitlesWrapper>\n </Container>\n );\n};\n\nexport default PageTitle;\n","import type React from 'react';\nimport type { ReactElement } from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\n/**\n * This component creates a column of ReactElements\n */\nexport interface IMultiContent {\n contentArray: ReactElement[];\n}\n\nconst MultilineContent: React.FC<IMultiContent> = ({ contentArray }) => {\n return (\n <Container>\n {contentArray.map((element, index) => {\n // biome-ignore lint/suspicious/noArrayIndexKey: contentArray entries are arbitrary ReactNodes (string | JSX | etc) with no stable identity. #646.\n return <div key={`element-${index}`}>{element}</div>;\n })}\n </Container>\n );\n};\n\nexport default MultilineContent;\n","import type React from 'react';\nimport { useMemo } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport Icon, { type IconProps, IconWrapper } from '../../Icons/Icon';\n\nconst TextContainer = styled.div`\n user-select: none;\n`;\n\nconst StyledLink = styled(Link)`\n text-decoration: none;\n display: flex;\n`;\n\nconst StyledButton = styled.button`\n ${resetButtonStyles};\n text-decoration: none;\n display: flex;\n`;\n\nexport const TagWrapper = styled.div<{\n $hoverColor: ISvgIcons['color'];\n $enableHover: boolean;\n $size: number;\n $tagSize?: TypeTagSize;\n $noBorder: boolean;\n}>`\n font-family: var(--font-data);\n font-size: ${({ $size }) => $size}px;\n font-weight: 500;\n color: var(--grey-11);\n padding: 4px 10px;\n\n ${({ $noBorder }) =>\n !$noBorder &&\n css`\n border: solid 1px var(--grey-8);\n border-radius: 3px;\n `};\n\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n gap: 8px;\n\n ${({ $tagSize }) =>\n $tagSize === 'compact' &&\n css`\n padding: 2px 6px;\n gap: 4px;\n `};\n\n ${({ $tagSize }) =>\n $tagSize === 'default' &&\n css`\n padding: 3px 8px;\n `};\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--dimmed);\n }\n\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n ${({ $hoverColor, $enableHover }) =>\n $enableHover &&\n css`\n &:hover {\n cursor: pointer;\n border-color: var(--${$hoverColor});\n color: var(--${$hoverColor});\n ${IconWrapper} {\n [stroke]{\n stroke: var(--${$hoverColor});\n }\n }\n }\n `};\n`;\n\nexport type TypeTagSize = undefined | 'compact' | 'default';\n\ninterface OwnProps {\n label?: string;\n linkTo?: string;\n noBorder?: boolean;\n tagSize?: TypeTagSize;\n onTagClick?: () => void;\n}\n\nexport type ITag = OwnProps & IconProps;\n\nconst Tag: React.FC<ITag> = ({\n icon = '',\n size = 12,\n weight = 'regular',\n label = '',\n linkTo,\n noBorder = false,\n tagSize,\n onTagClick,\n ...props\n}) => {\n const iconTagSize = useMemo(() => (tagSize === 'compact' ? 8 : 10), [tagSize]);\n const textTagSize = useMemo(() => (tagSize === 'compact' ? 12 : 14), [tagSize]);\n\n const renderTag = () => (\n <TagWrapper\n $hoverColor='primary'\n $enableHover={!!(onTagClick || linkTo)}\n $size={tagSize ? textTagSize : size}\n $tagSize={tagSize}\n $noBorder={noBorder}\n >\n {icon && <Icon icon={icon} size={tagSize ? iconTagSize : size} weight={weight} {...props} />}\n <TextContainer>{label}</TextContainer>\n </TagWrapper>\n );\n\n return onTagClick ? (\n <StyledButton onClick={onTagClick} type='button'>\n {renderTag()}\n </StyledButton>\n ) : linkTo ? (\n <StyledLink to={linkTo}>{renderTag()}</StyledLink>\n ) : (\n renderTag()\n );\n};\n\nexport default Tag;\n","import type React from 'react';\nimport styled, { css } from 'styled-components';\nimport Tag from '../../Misc/atoms/Tag';\nimport { deviceMediaQuery } from '../../theme/common';\nimport IntroductionText from '../atoms/IntroductionText';\nimport PageTitle from '../atoms/PageTitle';\n\nconst Container = styled.div`\n display: flex;\n justify-content: space-between;\n gap: 32px;\n`;\n\nconst LeftPanel = styled.div`\n`;\n\nconst IntroductionTextWrapper = styled.div`\n max-width: 648px;\n`;\n\nconst RightPanel = styled.div<{ $iconLeftPanel: boolean }>`\n ${({ $iconLeftPanel }) =>\n $iconLeftPanel &&\n css`\n padding-top: 32px;\n `};\n\n @media ${deviceMediaQuery.large} {\n padding-top: 0px;\n }\n\n`;\n\nconst TagListWrapper = styled.div`\n display: inline-flex;\n align-items: flex-start;\n flex-wrap: wrap;\n gap: 4px;\n margin-bottom: 5px;\n margin-top: 29px;\n`;\n\nconst BottomLeft = styled.div``;\n\nexport type IHeaderTag = {\n label: string;\n linkTo?: string;\n icon?: string;\n onTagClick?: () => void;\n};\n\ninterface IProps {\n title: string;\n areaHref?: string;\n areaTitle?: string;\n icon?: string;\n iconColor?: string;\n introductionText?: string;\n updateDocTitle?: boolean;\n hideAreaInDocTitle?: boolean;\n tagList?: IHeaderTag[];\n areaTitleBottom?: boolean;\n rightContent?: React.ReactNode;\n bottomLeftContent?: React.ReactNode;\n onAreaClick?: () => void;\n}\n\nconst PageHeader: React.FC<IProps> = ({\n title,\n icon,\n iconColor = 'primary-9',\n introductionText,\n areaHref,\n areaTitle,\n updateDocTitle = true,\n hideAreaInDocTitle,\n tagList,\n areaTitleBottom,\n rightContent,\n bottomLeftContent,\n onAreaClick,\n}) => {\n return (\n <Container>\n <LeftPanel>\n <PageTitle\n iconColor={iconColor}\n {...{\n title,\n icon,\n areaHref,\n areaTitle,\n updateDocTitle,\n hideAreaInDocTitle,\n areaTitleBottom,\n onAreaClick,\n bottomLeftContent,\n }}\n />\n {!tagList ? null : (\n <TagListWrapper>\n {tagList.map(({ icon, label, linkTo, onTagClick }, index) => (\n <Tag\n // biome-ignore lint/suspicious/noArrayIndexKey: IHeaderTag has no guaranteed-unique field — labels may repeat, only the position is stable. #646.\n key={`tag-${index}-${label}`}\n icon={icon || ''}\n noBorder={true}\n tagSize='compact'\n {...{ label, linkTo, onTagClick }}\n />\n ))}\n </TagListWrapper>\n )}\n {introductionText ? (\n <IntroductionTextWrapper>\n <IntroductionText>{introductionText}</IntroductionText>\n </IntroductionTextWrapper>\n ) : null}\n {<BottomLeft>{bottomLeftContent}</BottomLeft>}\n </LeftPanel>\n {rightContent ? <RightPanel $iconLeftPanel={!!icon}>{rightContent}</RightPanel> : null}\n </Container>\n );\n};\n\nexport default PageHeader;\n","import type React from 'react';\nimport styled, { css } from 'styled-components';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\n\nconst HeaderTitle = styled.div<{\n $sortable?: boolean;\n $isSortActive?: boolean;\n $ascending?: boolean;\n}>`\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n display: inline-flex;\n justify-content: center;\n align-content: center;\n position: relative;\n padding: 0 2px;\n user-select: none;\n z-index: 99;\n\n ${IconWrapper} {\n position: absolute;\n top: 0px;\n left: -15px;\n display: none;\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n padding: 3px 1px;\n\n ${({ $ascending }) =>\n $ascending &&\n css`\n transform: rotate(180deg);\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n top: 0;\n `}\n }\n\n ${({ $isSortActive }) =>\n $isSortActive &&\n css`\n &:not(hover) {\n ${IconWrapper} {\n display: inline-flex;\n }\n }\n `}\n\n ${({ theme: { styles }, $sortable }) =>\n $sortable &&\n css`\n\n ${styles.tables.header.sortable.default};\n\n &:hover {\n cursor: pointer;\n ${styles.tables.header.sortable.hover};\n\n ${IconWrapper} {\n ${styles.tables.header.sortable.hover};\n display: inline-flex;\n }\n }\n `}\n`;\n\ninterface IHeaderProps {\n isSortActive?: boolean;\n header: string;\n sortable?: boolean;\n ascending?: boolean;\n columnId?: string;\n indexKey: number;\n toggleSort: (dataKey: number, columnId?: string) => void;\n}\n\nconst TableHeaderTitle: React.FC<IHeaderProps> = ({\n header,\n sortable,\n isSortActive,\n ascending,\n columnId,\n indexKey,\n toggleSort,\n}) => {\n const handleClick = (key: number, colId?: string) => {\n toggleSort(key, colId);\n };\n\n return (\n <HeaderTitle\n $sortable={sortable}\n $isSortActive={isSortActive}\n $ascending={ascending}\n onClick={() => {\n handleClick(indexKey, columnId);\n }}\n >\n {sortable && <Icon icon='FilterSorting' size={14} color='dimmed' />}\n {header}\n </HeaderTitle>\n );\n};\n\nexport default TableHeaderTitle;\n","import type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport type { IMediaType } from '../..';\nimport { useMediaModal } from '../../hooks/useMediaModal';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport { NoImage } from '../../svg';\n\ntype VideoAspects = '4:3' | '16:9';\n\nconst Container = styled.div<{ $hoverZoom?: boolean; $aspect?: VideoAspects; $mediaUrl?: string }>`\n position: relative;\n height: inherit;\n background: grey;\n border-radius: 3px;\n overflow: hidden;\n width: 55px;\n height: auto;\n opacity: 0.65;\n margin-right: 10px;\n\n &::after {\n content: '';\n display: block;\n padding-bottom: 75%;\n ${({ $aspect }) =>\n $aspect === '16:9' &&\n css`\n padding-left: 56.25%;\n `}\n }\n\n transition:\n opacity var(--speed-normal) var(--easing-primary-out),\n transform var(--speed-fast) var(--easing-primary-out);\n\n &:hover {\n cursor: pointer;\n\n ${({ $hoverZoom }) =>\n $hoverZoom &&\n css`\n transform: scale(1.5);\n opacity: 1;\n transition: transform var(--speed-normal) var(--easing-primary-out);\n `}\n }\n\n`;\nconst ImageWrapper = styled.img`\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n`;\n\nconst NoImageWrapper = styled.div`\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n height: 41px;\n width: 55px;\n object-fit: cover;\n display: block;\n`;\n\nconst PlayableDrop = styled.div`\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n background-color: var(--black-a1);\n height: 24px;\n width: 24px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n ${IconWrapper} {\n display: flex;\n svg {\n padding-left: 2px;\n path {\n stroke: var(--white-1);\n }\n }\n };\n`;\n\nexport interface ITableRowThumbnail {\n image?: string;\n hoverZoom?: boolean;\n aspect?: VideoAspects;\n mediaUrl?: string;\n mediaType?: IMediaType;\n retryImageLoad?: boolean;\n retryLimit?: number;\n closeText?: string;\n onClickThumbnail?: () => void;\n}\n\n// Image\n// No Image Placeholder\n\nconst TableRowThumbnail: React.FC<ITableRowThumbnail> = ({\n hoverZoom = true,\n image = '',\n mediaUrl,\n mediaType,\n retryImageLoad = false,\n retryLimit = 5,\n closeText,\n onClickThumbnail,\n}) => {\n const [showImage, setShowImage] = useState(!!image);\n const [imgSrc, setImgSrc] = useState(image);\n const { createMediaModal } = useMediaModal();\n const [retryCount, setRetryCount] = useState(0);\n const imgRef = useRef<HTMLImageElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handleModal = useCallback(async () => {\n createMediaModal({\n src: showImage && mediaUrl ? mediaUrl : '',\n mediaType: mediaType ? mediaType : 'img',\n minHeight: '240px',\n closeText,\n });\n }, [closeText, createMediaModal, mediaType, mediaUrl, showImage]);\n\n useEffect(() => {\n setShowImage(false);\n setRetryCount(0);\n setImgSrc(image);\n }, [image]);\n\n useEffect(() => {\n if (imgRef.current?.complete && imgSrc !== '') {\n timeoutRef.current && clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n setShowImage(true);\n }\n }, [imgSrc]);\n\n const retryTimeout = useCallback(() => {\n timeoutRef.current = null;\n setImgSrc(`${image}?v=${Date.now()}`);\n }, [image]);\n\n const retryImage = useCallback(() => {\n setShowImage(false);\n if (!retryImageLoad || retryCount >= retryLimit || timeoutRef.current) return;\n const randomDelay = 1000 * (retryCount ** 2 + Math.random()); // exponential back off retry\n setRetryCount((count) => count + 1);\n timeoutRef.current = setTimeout(retryTimeout, randomDelay);\n }, [retryCount, retryImageLoad, retryLimit, retryTimeout]);\n\n const onLoad = useCallback(() => {\n timeoutRef.current && clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n setShowImage(true);\n }, []);\n\n const checkIfImageExists = useCallback(\n (url: string, imageExistsCallback: (exists: boolean) => void) => {\n if (!url) {\n imageExistsCallback(false);\n return;\n }\n const img = new Image();\n img.src = url;\n\n if (img.complete) {\n imageExistsCallback(true);\n } else {\n img.onload = () => {\n imageExistsCallback(true);\n };\n\n img.onerror = () => {\n imageExistsCallback(false);\n };\n }\n },\n []\n );\n\n useEffect(() => {\n checkIfImageExists(image, (exists) => {\n if (exists) {\n setShowImage(true);\n } else {\n setShowImage(false);\n }\n });\n }, [image, checkIfImageExists]);\n\n return (\n <Container\n $hoverZoom={hoverZoom}\n $mediaUrl={mediaUrl}\n $aspect='16:9'\n onClick={onClickThumbnail || handleModal}\n >\n {showImage ? (\n <ImageWrapper ref={imgRef} src={imgSrc} onError={retryImage} onLoad={onLoad} />\n ) : (\n <NoImageWrapper>\n <NoImage />\n </NoImageWrapper>\n )}\n {mediaUrl && mediaType === 'video' && (\n <PlayableDrop>\n <Icon size={12} icon='Play' color='inverse' />\n </PlayableDrop>\n )}\n </Container>\n );\n};\n\nexport default TableRowThumbnail;\n","import type React from 'react';\nimport { type InputHTMLAttributes, useCallback, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\nimport Button from '../../Form/atoms/Button';\nimport ButtonWithLoading from '../../Form/atoms/ButtonWithLoading';\nimport IconButton from '../../Form/atoms/IconButton';\nimport { StyledLabel } from '../../Form/atoms/Label';\nimport SmallInput from '../../Form/atoms/SmallInput';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport type { TypeCellAlignment } from '../';\n\nconst Container = styled.div`\n position: relative;\n ${({ theme }) => css`\n font-family: ${theme.fontFamily.ui};\n `}\n`;\nconst StyledButton = styled(Button)`\n flex-shrink: 0;\n`;\n\nconst StyledLoadingButton = styled(ButtonWithLoading)`\n flex-shrink: 0;\n`;\n\nconst StyledLink = styled(Link)`\n color: inherit;\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n`;\n\nconst EditContainer = styled.div`\n min-width: 320px;\n background-color: var(--grey-2);\n z-index: 99;\n position: absolute;\n bottom: -15px;\n left: -11px;\n display: flex;\n align-items: center;\n justify-content: center;\n ${StyledLabel} {\n margin:0;\n span {\n margin: 0;\n }\n }\n ${StyledButton} {\n margin-left: 5px;\n }\n ${StyledLoadingButton} {\n margin-left: 5px;\n }\n`;\n\nconst StyledIconButton = styled(IconButton)``;\n\nconst TextContainer = styled.div<{ $alignment: TypeCellAlignment }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-right: 18px;\n\n ${({ $alignment }) =>\n $alignment === 'center' &&\n css`\n justify-content: center;\n `}\n\n ${({ $alignment }) =>\n $alignment === 'right' &&\n css`\n justify-content: flex-end;\n`}\n\n ${StyledIconButton} {\n opacity: 0;\n position: absolute;\n top: 7px;\n right: 0;\n };\n\n &:hover {\n ${StyledIconButton} {\n opacity: 1;\n };\n }\n`;\n\nexport interface OwnProps {\n defaultValue: string;\n rowKey: string;\n alignment?: TypeCellAlignment;\n toLink?: string;\n saveCallback?: (inputValue: string, rowKey: string) => void;\n}\n\ntype IEditableCell = OwnProps & InputHTMLAttributes<HTMLInputElement>;\n\nconst EditCell: React.FC<IEditableCell> = ({\n type = 'text',\n placeholder = '',\n defaultValue,\n rowKey,\n alignment = 'left',\n toLink = '',\n saveCallback,\n ...props\n}) => {\n const [isEditMode, setIsEditMode] = useState(false);\n const [updatedValue, setUpdatedValue] = useState(defaultValue);\n const [loading, setLoading] = useState(false);\n\n const handleSave = useCallback(\n async (value: string) => {\n setLoading(true);\n if (saveCallback) {\n await saveCallback(value, rowKey);\n }\n setIsEditMode(false);\n setLoading(false);\n },\n [rowKey, saveCallback]\n );\n\n const verifyKeyPress = useCallback(\n async (eve: React.KeyboardEvent<HTMLInputElement>) => {\n // var code = parseInt(eve.key, 10);\n const code = eve.keyCode | eve.which | parseInt(eve.key, 10);\n\n if (code === 13 && handleSave) {\n await handleSave(updatedValue);\n setIsEditMode(false);\n }\n\n if (code === 27) {\n setUpdatedValue(defaultValue);\n setIsEditMode(false);\n }\n },\n [handleSave, updatedValue, defaultValue]\n );\n\n const editContainerRef = useRef<HTMLDivElement>(null);\n\n const onClickOutsideEdit = () => {\n setUpdatedValue(defaultValue);\n setIsEditMode(false);\n };\n\n useClickOutside(editContainerRef, onClickOutsideEdit);\n\n return (\n <Container>\n {isEditMode ? (\n <EditContainer ref={editContainerRef}>\n <SmallInput\n {...props}\n autoFocus\n label=''\n disabled={loading}\n type={type}\n placeholder={placeholder}\n defaultValue={defaultValue}\n onKeyUp={(eve: React.KeyboardEvent<HTMLInputElement>) => verifyKeyPress(eve)}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setUpdatedValue(e.target.value);\n }}\n />\n <StyledLoadingButton\n onClick={() => {\n handleSave(updatedValue);\n }}\n size='small'\n loading={loading}\n >\n {loading ? 'Saving' : 'Save'}\n </StyledLoadingButton>\n {!loading && (\n <StyledButton onClick={() => setIsEditMode(false)} design='secondary' size='small'>\n Cancel\n </StyledButton>\n )}\n </EditContainer>\n ) : (\n <TextContainer $alignment={alignment}>\n {toLink ? <StyledLink to={toLink}>{updatedValue}</StyledLink> : updatedValue}\n <StyledIconButton\n icon='Edit'\n weight='light'\n size={16}\n onClick={() => setIsEditMode(true)}\n />\n </TextContainer>\n )}\n </Container>\n );\n};\n\nexport default EditCell;\n","import type React from 'react';\nimport styled, { css } from 'styled-components';\nimport { useCopyToClipboard } from '../../hooks/useCopyToClipboard';\nimport Icon from '../../Icons/Icon';\nimport type { TypeCellAlignment, TypeCellStyle } from '..';\n\nconst CopyToClipboard = styled.button`\n\n cursor: pointer;\n opacity: 0;\n\n position: absolute;\n right: 0;\n top: 14px;\n width: 20px;\n height: 20px;\n background: transparent;\n border: none;\n outline: none;\n\n transition: var(--speed-normal) var(--easing-primary-out);\n\n svg {\n display: block;\n }\n\n &:hover {\n opacity: 1 !important;\n }\n\n`;\n\nconst CellContainer = styled.div<{\n $cellStyle: TypeCellStyle;\n $alignment: TypeCellAlignment;\n $hideDivider?: boolean;\n $hasCopyButton?: boolean;\n}>`\n display: table-cell;\n height: 50px;\n vertical-align: middle;\n position: relative;\n line-height: 30px;\n font-family: ${(p) => p.theme.fontFamily.data};\n\n &:hover ${CopyToClipboard}{\n opacity: 0.5;\n }\n\n &, a {\n ${({ theme, $cellStyle, $alignment }) =>\n $cellStyle === 'firstColumn'\n ? css`\n ${theme.typography.table.columnData[$cellStyle]};\n `\n : css`\n ${theme.typography.table.columnData[$cellStyle][$alignment]};\n `}\n }\n\n a:hover {\n text-decoration: underline;\n }\n\n ${({ $hasCopyButton }) =>\n $hasCopyButton &&\n css`\n padding-right: 20px;\n `};\n\n ${({ theme: { styles }, $hideDivider }) =>\n !$hideDivider &&\n css`\n &::after {\n ${styles.tables.rows.divider};\n content: '';\n display: block;\n height: 1px;\n left: 0;\n right: 0;\n width: 100%;\n bottom: 0px;\n position: absolute;\n }\n `}\n`;\n\nconst UnitText = styled.span`\n ${({ theme }) => css`\n ${theme.typography.table.columnData.unit};\n `}\n`;\n\nconst StatusBlip = styled.div<{ $status?: string }>`\n display: inline-block;\n width: 10px;\n height: 10px;\n border-radius: 50%;\n margin-right: 8px;\n ${({ $status = 'neutral', theme: { colors } }) => css`\n background: ${colors.status[$status]};\n `}\n`;\ninterface IProps {\n isLastRow?: boolean;\n hideDivider?: boolean;\n cellStyle?: TypeCellStyle;\n alignment?: TypeCellAlignment;\n href?: string;\n showUnit?: boolean;\n showStatus?: boolean;\n unit?: string;\n status?: string;\n hasCopyButton?: boolean;\n children?: React.ReactNode;\n}\n\nconst TypeTableCell: React.FC<IProps> = ({\n showUnit = false,\n showStatus = false,\n status,\n unit = '',\n cellStyle = 'normalImportance',\n alignment = 'left',\n hideDivider,\n isLastRow,\n hasCopyButton,\n href,\n children,\n}) => {\n // No divider on the last row.\n hideDivider = isLastRow ? true : hideDivider;\n\n const { copyToClipboard } = useCopyToClipboard();\n\n return (\n <CellContainer\n $cellStyle={cellStyle}\n $alignment={alignment}\n $hideDivider={hideDivider}\n $hasCopyButton={hasCopyButton}\n >\n {showStatus ? <StatusBlip $status={status} /> : null}\n {href ? <a href={href}>{children}</a> : children}\n {showUnit ? <UnitText>{unit}</UnitText> : null}\n {hasCopyButton ? (\n <CopyToClipboard onClick={() => typeof children === 'string' && copyToClipboard(children)}>\n <Icon icon='Copy' size={16} />\n </CopyToClipboard>\n ) : null}\n </CellContainer>\n );\n};\n\nexport default TypeTableCell;\n","import type React from 'react';\nimport styled, { css } from 'styled-components';\nimport type { IDeviceStatus } from '..';\n\ntype TypeDeviceStatus = IDeviceStatus;\n\nconst Container = styled.div<{ $status: TypeDeviceStatus }>`\n height: 42px;\n width: 4px;\n border-radius: 3px;\n display: block;\n\n ${({ $status, theme: { colors } }) => css`\n background: ${colors.status[$status]};\n content:'${$status}';\n `}\n\n`;\n\ninterface IProps {\n status?: TypeDeviceStatus;\n}\n\nconst TypeTableDeviceStatus: React.FC<IProps> = ({ status = 'neutral' }) => {\n return <Container $status={status} />;\n};\n\nexport default TypeTableDeviceStatus;\n","import type React from 'react';\nimport { useCallback } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Checkbox from '../../Form/atoms/Checkbox';\nimport Icon from '../../Icons/Icon';\nimport type { IRowData, ITableColumnConfig } from '..';\nimport TableRowThumbnail from './TableRowThumbnail';\nimport TypeTableCell from './TypeTableCell';\nimport TypeTableDeviceStatus from './TypeTableDeviceStatus';\n\nconst RowContainer = styled.div<{ $isEmpty: boolean }>`\n display: table-row;\n ${({ $isEmpty }) =>\n $isEmpty &&\n css`\n visibility: hidden;\n `};\n`;\n\ninterface IProps {\n isLastRow?: boolean;\n selectable?: boolean;\n hasStatus?: boolean;\n hasThumbnail?: boolean;\n hasTypeIcon?: boolean;\n columnConfig: ITableColumnConfig[];\n rowData: IRowData;\n selectCallback?: (checked: boolean, id?: string | number) => void;\n closeText?: string;\n}\n\nconst TypeTableRow: React.FC<IProps> = ({\n selectable = false,\n selectCallback,\n hasStatus,\n hasThumbnail,\n hasTypeIcon,\n rowData,\n isLastRow,\n columnConfig,\n closeText,\n}) => {\n const wrappedSelectCallback = useCallback(\n (checked: boolean) => {\n if (selectCallback) {\n selectCallback(checked, rowData.id);\n }\n },\n [rowData.id, selectCallback]\n );\n\n const isEmpty = rowData.columns.length === 0;\n\n return (\n <RowContainer $isEmpty={isEmpty}>\n {selectable ? (\n <TypeTableCell hideDivider>\n <Checkbox\n checked={rowData._checked}\n disabled={rowData.checkboxDisabled}\n onChangeCallback={wrappedSelectCallback}\n />\n </TypeTableCell>\n ) : null}\n {hasStatus ? (\n <TypeTableCell hideDivider>\n <TypeTableDeviceStatus status={rowData.header?.status} />\n </TypeTableCell>\n ) : null}\n {hasThumbnail ? (\n <TypeTableCell hideDivider>\n <TableRowThumbnail\n image={rowData.header?.image}\n mediaUrl={rowData.header?.mediaUrl}\n mediaType={rowData.header?.mediaType}\n closeText={closeText}\n onClickThumbnail={rowData.header?.onClickThumbnail}\n />\n </TypeTableCell>\n ) : null}\n {hasTypeIcon ? (\n <TypeTableCell hideDivider>\n <Icon icon={rowData.header?.icon || ''} color='dimmed' weight='regular' size={16} />\n </TypeTableCell>\n ) : null}\n\n {rowData.columns.map((cell, key) => {\n const { cellStyle, alignment, showUnit, showStatus, hasCopyButton } = columnConfig[key];\n const { unit, status, text, customComponent } = cell;\n return (\n <TypeTableCell\n // biome-ignore lint/suspicious/noArrayIndexKey: cells are positional and index is used to look up the parallel columnConfig[key]. #646.\n key={key}\n href={cell.href}\n {...{\n cellStyle,\n alignment,\n showUnit,\n showStatus,\n hasCopyButton,\n unit,\n status,\n isLastRow,\n }}\n >\n {customComponent ? customComponent : text}\n </TypeTableCell>\n );\n })}\n </RowContainer>\n );\n};\n\nexport default TypeTableRow;\n","import type React from 'react';\nimport { Fragment, useCallback, useState } from 'react';\nimport styled, { css } from 'styled-components';\nimport Checkbox from '../../Form/atoms/Checkbox';\nimport type { ITableColumnConfig, TypeCellAlignment } from '..';\nimport TableHeaderTitle from '../atoms/TableHeaderTitle';\n\nconst HeaderRow = styled.div`\n display: table-row;\n height: 50px;\n`;\n\nconst HeaderItem = styled.div<{\n $fixedWidth?: number;\n $alignment?: TypeCellAlignment;\n $hasCopyButton?: boolean;\n $minWidth?: number;\n $headerStyle: 'header' | 'subHeader';\n $isSortActive?: boolean;\n}>`\n display: table-cell;\n height: inherit;\n vertical-align:top;\n line-height: 20px;\n position: relative;\n font-family: ${(p) => p.theme.fontFamily.ui};\n\n ${({ $hasCopyButton }) =>\n $hasCopyButton &&\n css`\n padding-right: 20px;\n `};\n\n ${({ theme, $alignment, $headerStyle }) =>\n $alignment\n ? css`\n ${theme.typography.table[$headerStyle][$alignment]};\n `\n : css`\n ${theme.typography.table[$headerStyle].left};\n `};\n\n ${(p) =>\n p.$fixedWidth &&\n css`\n width: ${p.$fixedWidth}px;\n `};\n\n ${({ $minWidth }) =>\n $minWidth &&\n css`\n min-width:${$minWidth}px;\n `};\n\n ${({ theme: { styles }, $headerStyle, $isSortActive }) =>\n $headerStyle === 'subHeader' &&\n css`\n padding-bottom: 15px;\n\n &::after {\n ${styles.tables.header.divider};\n content: '';\n display: block;\n height: 1px;\n left: ${$isSortActive ? '-15px' : '0'};\n right: 0;\n width: ${$isSortActive ? 'calc(100% + 15px)' : '100%'};\n bottom: 0px;\n position: absolute;\n }\n`};\n`;\n\n// Default alignment is left//\nconst TitleItems = styled.div<{ $alignment?: TypeCellAlignment }>`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n ${({ $alignment }) =>\n $alignment &&\n css`\n ${$alignment === 'right' ? 'align-items: flex-end' : null};\n ${$alignment === 'center' ? 'align-items: center' : null};\n `};\n`;\n\nconst GroupTitle = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n margin-bottom: 4px;\n`;\n\nconst Title = styled.div`\n ${({ theme: { typography } }) => css`\n ${typography.tables.groupName};\n `};\n padding-left: 2px;\n padding-right: 8px;\n white-space: nowrap;\n`;\n\n// Keeps the height consistent with other rows\nconst EmptyTitle = styled.div`\n height: 20px;\n`;\n\nconst MiddleLine = styled.div<{ $isLastOfGroup?: boolean }>`\n ${({ theme: { styles } }) => css`\n ${styles.tables.header.groupLine};\n `};\n\n height: 1px;\n flex: 1;\n ${({ $isLastOfGroup }) =>\n $isLastOfGroup &&\n css`\n margin-right: 15px;\n `};\n`;\n\nconst renderGroupHeader = (columnConfig: ITableColumnConfig[], index: number) => {\n if (index < 0) {\n return null;\n }\n\n let isLastOfGroup: boolean = true;\n\n // Is Last of the group if the next is different\n if (index < columnConfig.length - 1) {\n isLastOfGroup = columnConfig[index].groupTitle !== columnConfig[index + 1].groupTitle;\n }\n\n // if the column doesn't belong to any group\n if (!columnConfig[index].groupTitle) {\n return <EmptyTitle />;\n }\n\n // has group, previous was equal\n if (index !== 0 && columnConfig[index - 1].groupTitle === columnConfig[index].groupTitle) {\n return (\n <Fragment>\n <EmptyTitle />\n <MiddleLine $isLastOfGroup={isLastOfGroup} />\n </Fragment>\n );\n }\n\n // New GroupTitle\n return (\n <Fragment>\n <Title>{columnConfig[index].groupTitle}</Title>\n <MiddleLine $isLastOfGroup={isLastOfGroup} />\n </Fragment>\n );\n};\n\ninterface ITableHeader {\n selectable?: boolean;\n hasStatus: boolean;\n hasThumbnail: boolean;\n hasTypeIcon: boolean;\n allChecked: boolean;\n disableAllChecked: boolean;\n hasHeaderGroups: boolean;\n columnConfig: ITableColumnConfig[];\n defaultAscending: boolean;\n toggleAllCallback?: (checked: boolean) => void;\n sortCallback?: (ascending: boolean, columnId: string) => void;\n}\n\nconst TypeTableHeader: React.FC<ITableHeader> = ({\n selectable,\n hasStatus,\n hasThumbnail,\n hasTypeIcon,\n allChecked,\n disableAllChecked,\n hasHeaderGroups,\n columnConfig,\n defaultAscending,\n toggleAllCallback = () => {},\n sortCallback = () => {},\n}) => {\n const [sortSpec, setSortSpec] = useState(columnConfig);\n const [ascendingState, setAscendingState] = useState(defaultAscending);\n\n const toggleAllCallbackWrapper = useCallback(\n (checked: boolean) => {\n toggleAllCallback(checked);\n },\n [toggleAllCallback]\n );\n\n /**\n * Rules for toggling ascending value\n * - Clicked column was active, toggle value of ascending.\n * - No column was sorted before, keep the sorting ascending.\n * - Clicked column was not active persist the last ascending option\n */\n const toggleSort = useCallback(\n (indexKey: number, columnId?: string) => {\n if (sortSpec[indexKey] === undefined) {\n return;\n }\n if (!sortSpec[indexKey].sortable) {\n return;\n }\n\n const updatedSort = [...sortSpec];\n\n let lastActiveKey: number | null = null;\n updatedSort.forEach((col, key) => {\n if (col.sortActive) {\n lastActiveKey = key;\n }\n if (key === indexKey) {\n col.sortActive = true;\n } else {\n col.sortActive = false;\n }\n });\n\n const newAscending: boolean = lastActiveKey === indexKey ? !ascendingState : ascendingState;\n const colId: string = columnId === undefined ? `column_${indexKey}` : columnId;\n sortCallback(newAscending, colId);\n setSortSpec(updatedSort);\n setAscendingState(newAscending);\n },\n [ascendingState, sortCallback, sortSpec]\n );\n\n return (\n <HeaderRow>\n {selectable ? (\n <HeaderItem $headerStyle='header' $fixedWidth={30}>\n <Checkbox\n checked={allChecked}\n disabled={disableAllChecked}\n onChangeCallback={toggleAllCallbackWrapper}\n />\n </HeaderItem>\n ) : null}\n {hasStatus ? <HeaderItem $headerStyle='header' $fixedWidth={10} /> : null}\n {hasThumbnail ? <HeaderItem $headerStyle='header' $fixedWidth={70} /> : null}\n {hasTypeIcon ? <HeaderItem $headerStyle='header' $fixedWidth={35} /> : null}\n\n {columnConfig.map((column, key, allColls) => {\n const {\n header,\n alignment,\n hasCopyButton,\n sortActive,\n columnId,\n sortable,\n minWidth,\n }: ITableColumnConfig = column;\n return (\n <HeaderItem\n // biome-ignore lint/suspicious/noArrayIndexKey: ITableColumnConfig.columnId is optional; column position is the stable identity. #646.\n key={key}\n $alignment={alignment}\n $hasCopyButton={hasCopyButton}\n $minWidth={minWidth}\n $headerStyle={hasHeaderGroups ? 'subHeader' : 'header'}\n $isSortActive={sortActive}\n >\n <TitleItems $alignment={alignment}>\n {hasHeaderGroups && (\n <GroupTitle>{hasHeaderGroups && renderGroupHeader(allColls, key)}</GroupTitle>\n )}\n <TableHeaderTitle\n header={header}\n sortable={sortable}\n indexKey={key}\n columnId={columnId}\n isSortActive={sortActive}\n ascending={ascendingState}\n toggleSort={toggleSort}\n />\n </TitleItems>\n </HeaderItem>\n );\n })}\n </HeaderRow>\n );\n};\n\nexport default TypeTableHeader;\n","import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport Spinner from '../../Indicators/Spinner';\nimport type { IRowData, ITableColumnConfig, ITypeTableData } from '..';\nimport TypeTableRow from '../atoms/TypeTableRow';\nimport TypeTableHeader from '../molecules/TypeTableHeader';\n\nconst Container = styled.div``;\n\nconst TableContainer = styled.div`\n display: table;\n width: 100%;\n position: relative;\n`;\n\nconst LoadingText = styled.div`\n color: var(--grey-a11);\n`;\n\nconst LoadingBox = styled.div`\n position: absolute;\n left: 0;\n z-index: 99;\n background-color: var(--white-1);\n height: calc(100% - 50px);\n opacity: 85%;\n width: 100%;\n min-height: 100px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 20px;\n\n ${LoadingText} {\n margin-top: 10px;\n }\n`;\n\nconst EmptyTableBox = styled.div`\n position: absolute;\n left: 0;\n z-index: 99;\n padding: 20px;\n width: 100%;\n min-height: 100px;\n text-align: center;\n h3 {\n font-weight: 500;\n color: var(--grey-11);\n }\n color: var(--grey-10);\n`;\n\nconst isChecked = ({ _checked = false }: IRowData) => {\n return _checked === true;\n};\n\nconst isCheckBoxDisabled = ({ checkboxDisabled = false }: IRowData) => {\n return checkboxDisabled === true;\n};\n\ninterface IProps {\n columnConfig: ITableColumnConfig[];\n rows: ITypeTableData;\n selectable?: boolean;\n hasStatus?: boolean;\n hasThumbnail?: boolean;\n hasTypeIcon?: boolean;\n defaultAscending?: boolean;\n isLoading?: boolean;\n loadingText?: string;\n emptyTableTitle?: string;\n emptyTableText?: string;\n hasHeaderGroups?: boolean;\n selectCallback?: (checked: boolean, id?: string | number) => void;\n toggleAllCallback?: (checked: boolean) => void;\n sortCallback?: (ascending: boolean, columnId: string) => void;\n closeText?: string;\n}\n\nconst TypeTable: React.FC<IProps> = ({\n columnConfig,\n selectable,\n rows = [],\n closeText,\n hasStatus = false,\n hasThumbnail = false,\n hasTypeIcon = false,\n defaultAscending = false,\n isLoading = false,\n loadingText = 'Loading Data...',\n emptyTableTitle = '',\n emptyTableText = '',\n hasHeaderGroups = false,\n sortCallback = () => {},\n selectCallback = () => {},\n toggleAllCallback = () => {},\n}) => {\n /* Note about Empty table\n Currently IRowData Type enforces user to send columns\n so rows length will always be at least 1\n I wasn't sure if I should edit IRowData to have columns optional\n If we allow columns to be optional, previous implementations\n wont be able to have \"No data\" Message\n*/\n\n const [allChecked, setAllChecked] = useState(false);\n const [disableAllChecked, setDisableAllChecked] = useState(false);\n const isEmptyTable = rows.length === 1 && rows[0].columns.length === 0 && !isLoading;\n\n useEffect(() => {\n let areAllChecked = false;\n let disableCheckAll = false;\n\n if (rows.every(isChecked) && rows.length > 0 && !isEmptyTable) {\n areAllChecked = true;\n }\n\n if (rows.some(isCheckBoxDisabled) || isEmptyTable || isLoading) {\n disableCheckAll = true;\n }\n\n setAllChecked(areAllChecked);\n setDisableAllChecked(disableCheckAll);\n }, [isEmptyTable, isLoading, rows]);\n\n return (\n <Container>\n <TableContainer>\n <TypeTableHeader\n {...{\n selectable,\n hasStatus,\n hasThumbnail,\n hasTypeIcon,\n defaultAscending,\n allChecked,\n disableAllChecked,\n hasHeaderGroups,\n columnConfig,\n toggleAllCallback,\n sortCallback,\n }}\n />\n {isLoading ? (\n <LoadingBox>\n <Spinner size='large' styling='primary' />\n <LoadingText>{loadingText}</LoadingText>\n </LoadingBox>\n ) : null}\n {isEmptyTable ? (\n <EmptyTableBox>\n <h3>{emptyTableTitle}</h3>\n <p>{emptyTableText}</p>\n </EmptyTableBox>\n ) : null}\n {rows.map((rowData, key) => {\n const isLastRow = rows.length - 1 === key;\n return (\n <TypeTableRow\n // biome-ignore lint/suspicious/noArrayIndexKey: IRowData.id is optional and consumers don't always set it; index is the safest fallback. #646.\n key={key}\n {...{\n rowData,\n isLastRow,\n selectable,\n selectCallback,\n columnConfig,\n hasStatus,\n hasThumbnail,\n hasTypeIcon,\n closeText,\n }}\n />\n );\n })}\n </TableContainer>\n </Container>\n );\n};\n\nexport default TypeTable;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport type { IFeedbackColor } from '../..';\nimport { EllipsisStyles } from '../../common';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport MediaBox, { type IMediaModal, MediaBoxWrapper } from '../../Misc/atoms/MediaBox';\n\nconst Container = styled.div`\n width: 100%;\n height: 170px;\n border-radius: 3px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n position: relative;\n\n ${MediaBoxWrapper} {\n height: 100%;\n width: 100%;\n text-align: center;\n img, video {\n border-radius: 3px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n }\n`;\n\nconst EmptyWithIcon = styled.div<{ $hasPadding: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n ${({ $hasPadding }) =>\n $hasPadding &&\n `\n padding-bottom: 43px\n `}\n;\n\n ${IconWrapper} {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n`;\nconst Notice = styled.div<{ $color?: IFeedbackColor }>`\n background-color: ${({ $color }) => $color && `var(--${$color})`};\n color: var(--inverse);\n opacity: 0.85;\n height: 46px;\n width: 300px;\n position: absolute;\n bottom: 0px;\n left: 0px;\n display: flex;\n align-items: center;\n padding: 10px;\n`;\n\nconst NoticeMessage = styled.div`\n ${EllipsisStyles};\n max-width: 245px;\n font-size: 10px;\n`;\n\nconst NoticeTitle = styled.div`\n ${EllipsisStyles};\n max-width: 245px;\n font-size: 12px;\n`;\n\nconst NoticeIcon = styled.div`\n height: 20px;\n width: 20px;\n margin-left: 2px;\n\n ${IconWrapper} {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n }\n`;\n\nconst NoticeTextGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: 14px;\n`;\n\nconst StatusLine = styled.div<{ $color: IFeedbackColor }>`\n background-color: ${({ $color }) => $color && `var(--${$color})`};\n height: 3px;\n width: 100%;\n`;\n\nexport interface IMediaStream extends IMediaModal {\n isEmptyWithIcon?: boolean;\n emptyIcon?: string;\n status?: IFeedbackColor;\n noticeMessage?: string;\n noticeTitle?: string;\n noticeIcon?: string;\n hasNotice?: boolean;\n}\n\nconst MediaStream: React.FC<IMediaStream> = ({\n isEmptyWithIcon = false,\n status = 'neutral',\n noticeIcon,\n hasNotice = false,\n noticeMessage,\n noticeTitle,\n emptyIcon,\n ...props\n}) => {\n return (\n <Container>\n {isEmptyWithIcon ? (\n <EmptyWithIcon $hasPadding={hasNotice}>\n <Icon icon={emptyIcon ? emptyIcon : 'PasswordHide'} color='dimmed' size={41} />\n </EmptyWithIcon>\n ) : (\n <MediaBox {...{ ...props }} />\n )}\n {hasNotice && (\n <Notice $color={status}>\n {noticeIcon && (\n <NoticeIcon>\n <Icon icon={noticeIcon} size={20} color='inverse' />\n </NoticeIcon>\n )}\n <NoticeTextGroup>\n {noticeTitle && <NoticeTitle>{noticeTitle}</NoticeTitle>}\n {noticeMessage && <NoticeMessage>{noticeMessage}</NoticeMessage>}\n </NoticeTextGroup>\n </Notice>\n )}\n <StatusLine $color={status} />\n </Container>\n );\n};\n\nexport default MediaStream;\n","import type React from 'react';\nimport { useMemo } from 'react';\nimport styled, { css } from 'styled-components';\nimport { EllipsisStyles } from '../../common';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\n\nconst Container = styled.div`\n display: flex;\n height: 60px;\n`;\n\nconst LeftData = styled.div<{ $hasRightData: boolean }>`\n ${({ $hasRightData }) =>\n $hasRightData &&\n css`\n border-right: var(--grey-6) 1px solid;\n width: 195px;\n `};\n\n padding: 0 12px 0 12px;\n display: flex;\n\n ${IconWrapper} {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n }\n`;\n\nconst RightData = styled.div`\n padding: 0 12px 0 16px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n`;\n\nconst DeviceDataGroup = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: 14px;\n justify-content: center;\n`;\n\nconst LeftTitle = styled.div<{ $hasMarginBottom: boolean; $hasRightData: boolean }>`\n ${EllipsisStyles};\n ${({ $hasRightData }) => ($hasRightData ? `max-margin: 140px;` : `max-margin: 250px;`)}};\n ${({ $hasMarginBottom }) => $hasMarginBottom && `margin-bottom: 1px;`};\n\n color: var(--grey-a10);\n font-size: 10px;\n`;\n\nconst LeftSubTitle = styled.div<{ $hasRightData: boolean }>`\n font-family: var(--font-data);\n ${EllipsisStyles};\n ${({ $hasRightData }) => ($hasRightData ? `max-width: 140px;` : `max-width: 250px;`)}\n\n color: var(--grey-11);\n font-size: 16px;\n`;\n\nconst Title = styled.div<{ $hasMarginBottom: boolean }>`\n ${EllipsisStyles};\n max-width: 80px;\n color: var(--grey-a10);\n font-size: 10px;\n ${({ $hasMarginBottom }) => $hasMarginBottom && `margin-bottom: 6px;`};\n`;\n\nconst SubTitle = styled.div`\n ${EllipsisStyles};\n max-width: 80px;\n color: var(--grey-11);\n font-size: 12px;\n`;\n\nexport interface IPanelMetaData {\n deviceIcon?: string;\n leftSubTitle?: string;\n leftTitle?: string;\n rightTitle?: string;\n rightSubTitle?: string;\n hideIcon?: boolean;\n}\n\nconst PanelMetaData: React.FC<IPanelMetaData> = ({\n deviceIcon = 'Camera',\n leftSubTitle,\n leftTitle,\n rightTitle,\n rightSubTitle,\n hideIcon = false,\n}) => {\n const hasRightData = useMemo(() => !!rightTitle || !!rightSubTitle, [rightSubTitle, rightTitle]);\n\n return (\n <Container>\n <LeftData $hasRightData={hasRightData}>\n {!hideIcon && <Icon icon={deviceIcon} color='dimmed' size={18} />}\n <DeviceDataGroup>\n {leftTitle && (\n <LeftTitle $hasMarginBottom={!!leftSubTitle} $hasRightData={hasRightData}>\n {leftTitle}\n </LeftTitle>\n )}\n {leftSubTitle && <LeftSubTitle $hasRightData={hasRightData}>{leftSubTitle}</LeftSubTitle>}\n </DeviceDataGroup>\n </LeftData>\n {hasRightData && (\n <RightData>\n {rightTitle && <Title $hasMarginBottom={!!rightSubTitle}>{rightTitle}</Title>}\n {rightSubTitle && <SubTitle>{rightSubTitle}</SubTitle>}\n </RightData>\n )}\n </Container>\n );\n};\n\nexport default PanelMetaData;\n","import type React from 'react';\nimport type { ReactElement } from 'react';\nimport styled from 'styled-components';\nimport MediaStream, { type IMediaStream } from '../atoms/MediaStream';\nimport PanelMetaData, { type IPanelMetaData } from '../atoms/PanelMetaData';\n\nexport const CameraPanelWrapper = styled.div<{ $hasOnClick: boolean }>`\n width: 300px;\n height: 230px;\n border-radius: 3px;\n box-shadow: 0 2px 10px 0 var(--grey-a5);\n background-color: linear-gradient(180.00deg, var(--grey-2) 0%, var(--grey-3) 100%);\n }\n\n ${({ $hasOnClick }) =>\n $hasOnClick &&\n `\n cursor: pointer;\n `};\n`;\n\nexport interface ICameraPanel {\n streamProps: IMediaStream;\n panelMetaData?: IPanelMetaData;\n customBottom?: ReactElement;\n panelOnClick?: () => void;\n}\n\nconst NewComponent: React.FC<ICameraPanel> = ({\n streamProps,\n panelMetaData,\n customBottom,\n panelOnClick,\n ...props\n}) => {\n return (\n <CameraPanelWrapper onClick={panelOnClick} $hasOnClick={panelOnClick !== undefined} {...props}>\n <MediaStream {...streamProps} />\n {customBottom ? customBottom : panelMetaData && <PanelMetaData {...panelMetaData} />}\n </CameraPanelWrapper>\n );\n};\n\nexport default NewComponent;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport CameraPanel, { type ICameraPanel } from '../molecules/CameraPanel';\n\nconst CameraGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fill, 300px);\n gap: 20px 20px;\n`;\n\ninterface ICameraPanels {\n panels: ICameraPanel[];\n}\n\nconst CameraPanels: React.FC<ICameraPanels> = ({ panels }) => {\n return (\n <CameraGrid>\n {panels.map((props, index) => {\n // biome-ignore lint/suspicious/noArrayIndexKey: ICameraPanel has no stable identifier field — streamProps is itself an object, panelMetaData is optional. #646.\n return <CameraPanel key={index} {...props} />;\n })}\n </CameraGrid>\n );\n};\n\nexport default CameraPanels;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport Button from '../../Form/atoms/Button';\nimport ButtonWithIcon, { type IButtonWithIcon } from '../../Form/atoms/ButtonWithIcon';\n\nconst Container = styled.div``;\nconst Title = styled.div`\n font-family: ${({ theme }) => theme.fontFamily.ui};\n color: var(--grey-10);\n font-size: 12px;\n font-weight: 700;\n margin-bottom: 17px;\n`;\n\nconst ButtonsWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n`;\n\nconst LeftButtons = styled.div`\n button {\n margin: 0 10px 10px 0;\n }\n`;\n\nconst RightButtons = styled.div`\n flex-shrink: 0;\n`;\n\nconst SelectedResults = styled.div`\n font-family: ${({ theme }) => theme.fontFamily.ui};\n margin-top: 29px;\n min-height: 19px;\n color: var(--grey-10);\n font-size: 12px;\n`;\n\nconst renderSelected = (template: string, selected: number, total: number) => {\n const newSelected = template.replace('[SELECTED]', `${selected}`);\n return newSelected.replace('[TOTAL]', `${total}`);\n};\n\nexport interface IActionsButton extends IButtonWithIcon {\n text: string;\n}\n\nexport interface IActionsBar {\n title?: string;\n finishTextButton?: string;\n actionButtons?: IActionsButton[];\n selectedTemplate?: string;\n totalSelected?: number;\n totalAvailable?: number;\n finishCallback?: () => void;\n}\n\nconst ActionsBar: React.FC<IActionsBar> = ({\n title = 'Actions:',\n finishTextButton = 'Finish',\n actionButtons = [],\n selectedTemplate = 'Selected [SELECTED] of [TOTAL] Results',\n totalSelected = 0,\n totalAvailable = 0,\n finishCallback = () => {},\n}) => {\n return (\n <Container>\n <Title>{title}</Title>\n <ButtonsWrapper>\n <LeftButtons>\n {actionButtons.map(({ design, size, position, text, ...props }) => {\n return (\n <ButtonWithIcon\n key={text}\n design={design || 'secondary'}\n size={size || 'small'}\n position={position || 'left'}\n {...props}\n >\n {text}\n </ButtonWithIcon>\n );\n })}\n </LeftButtons>\n <RightButtons>\n <Button size='small' onClick={finishCallback}>\n {finishTextButton}\n </Button>\n </RightButtons>\n </ButtonsWrapper>\n <SelectedResults>\n {renderSelected(selectedTemplate, totalSelected, totalAvailable)}\n </SelectedResults>\n </Container>\n );\n};\n\nexport default ActionsBar;\n","import debounce from 'lodash.debounce';\nimport type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport BasicSearchInput, { type IBasicSearchInput } from '../atoms/BasicSearchInput';\n\n// Adding default value thinking of query params or other outside initialized value\ninterface IDebouncedSearcher extends IBasicSearchInput {\n defaultValue?: string;\n onDebouncedChange?: (newValue: string) => void;\n}\n\nconst DebouncedSearcher: React.FC<IDebouncedSearcher> = ({\n onDebouncedChange = () => {},\n defaultValue,\n ...props\n}) => {\n const [typedValue, setTypedValue] = useState<string>(defaultValue || '');\n\n const debounceChange = useRef(debounce((newValue) => updateChange(newValue), 600)).current;\n\n const updateChange = useCallback(\n (newValue: string) => {\n onDebouncedChange(newValue);\n },\n [onDebouncedChange]\n );\n\n const updateTyped = useCallback(\n (e: React.FormEvent<HTMLInputElement>) => {\n const newValue = e.currentTarget.value;\n setTypedValue(newValue);\n debounceChange(newValue);\n },\n [debounceChange]\n );\n\n useEffect(() => {\n if (defaultValue) {\n setTypedValue(defaultValue);\n }\n }, [defaultValue]);\n\n return <BasicSearchInput {...props} onChange={updateTyped} value={typedValue} />;\n};\n\nexport default DebouncedSearcher;\n","import type React from 'react';\nimport {\n type ChangeEvent,\n type HTMLAttributes,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport styled, { keyframes } from 'styled-components';\nimport { removeAutoFillStyle, resetButtonStyles } from '../../common';\nimport Button from '../../Form/atoms/Button';\nimport Label from '../../Form/atoms/Label';\nimport SelectField, { SelectWrapper } from '../../Form/atoms/SelectField';\nimport { isNotNumber } from '../../helpers';\nimport Icon from '../../Icons/Icon';\n\nconst WIDTH_PER_NUMBER = 12;\n\nconst PaginationContainer = styled.div`\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding-top: 20px;\n padding-bottom: 20px;\n width: 100%;\n height: fit-content;\n margin-right: 10px;\n white-space: nowrap;\n gap: 40px;\n vertical-align: baseline;\n`;\n\nconst StaticPageCount = styled.div`\n display: flex;\n align-items: center;\n box-sizing: border-box;\n font-size: 14px;\n color: var(--grey-8);\n height: 100%;\n text-align: left;\n padding-top: 1px;\n padding-right: 1px;\n`;\n\nconst StyledInput = styled.input<{ $maxWidth?: string }>`\n ${removeAutoFillStyle};\n color: var(--input-color-default);\n max-width: ${({ $maxWidth }) => ($maxWidth ? $maxWidth : '40px')};\n font-family: var(--font-data);\n height: 100%;\n box-sizing: border-box;\n outline: none;\n background: transparent;\n text-align: right;\n font-size: 14px;\n font-weight: 500;\n line-height: 25px;\n border: none;\n padding-right: ${WIDTH_PER_NUMBER / 2}px;\n`;\n\nconst shakeAnimation = keyframes`\n 0% { transform: translateX(0); }\n 10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }\n 20%, 40%, 60%, 80% { transform: translateX(5px); }\n 100% { transform: translateX(0); }\n`;\n\nconst InputContainer = styled.div<{ $borderColorState?: string; $shouldShake: boolean }>`\n height: var(--input-height, 40px);\n animation: ${({ $shouldShake }) => ($shouldShake ? shakeAnimation : 'none')} 150ms 2 linear;\n flex-grow: 0;\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n padding: 0 8px;\n border-radius: 3px;\n box-shadow: 0 2px 1px 0 rgba(0, 102, 255, 0.04);\n ${({ $borderColorState }) => $borderColorState && `border: 1px solid var(--input-${$borderColorState}-border-color)`};\n`;\n\nconst GoButton = styled(Button)`\n height: 24px;\n padding: 0 8px;\n margin-left: 8px;\n`;\n\nconst ArrowWrapper = styled.div`\n display: flex;\n gap: 0 8px;\n`;\n\nconst ArrowButton = styled.button<{ $active: boolean }>`\n ${resetButtonStyles};\n width: 40px;\n height: 40px;\n padding: 12px;\n border-radius: 3px;\n box-shadow: 0 4px 9px 0 rgba(152, 174, 189, 0.07);\n border: solid 1px var(--input-default-border-color);\n background-color: var(grey-2);\n pointer-events: ${({ $active }) => ($active ? 'auto' : 'none')};\n opacity: ${({ $active }) => ($active ? '1' : '0.5')};\n\n &:focus, &:hover {\n outline: 2px solid #838383;\n }\n`;\n\nconst ItemsSelectWrapper = styled.div<{ $width: string }>`\n ${SelectWrapper} {\n width: ${({ $width }) => ($width ? $width : `60px`)};\n }\n`;\n\nexport interface IItemsOption {\n value: number;\n textValue: string;\n}\n\ninterface OwnProps {\n pageText?: string;\n totalPages: number;\n activePage?: number;\n buttonText?: string;\n itemsText?: string;\n itemsDefaultValue?: number;\n selectWidth?: string;\n selectDisabled?: boolean;\n selectId?: string;\n itemsOptions: IItemsOption[];\n onPageChange: (page: number) => void;\n onItemsChange: (items: number) => void;\n}\n\nexport type IPagination = OwnProps & HTMLAttributes<HTMLDivElement>;\n\nconst Pagination: React.FC<IPagination> = (props) => {\n const {\n pageText = 'Page:',\n totalPages = 1,\n activePage = 1,\n buttonText = 'GO',\n itemsText = 'Items Per Page',\n itemsDefaultValue,\n selectId = 'paginationPages',\n selectWidth = '60px',\n selectDisabled = false,\n itemsOptions = [],\n onPageChange,\n onItemsChange,\n } = props;\n\n const [fieldState, setFieldState] = useState<string>('default');\n const [pageValue, setPageValue] = useState<string>(activePage ? activePage.toString() : '1');\n const [disableGo, setDisabledGo] = useState<boolean>(\n !(parseInt(pageValue, 10) > totalPages && fieldState !== '')\n );\n const [shouldShake, setShouldShake] = useState<boolean>(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const getValidWidth = useCallback(() => {\n return `${totalPages.toString().length * WIDTH_PER_NUMBER + WIDTH_PER_NUMBER / 2}px`;\n }, [totalPages]);\n\n const isValidInput = useCallback(\n (value: string) => {\n if (isNotNumber(value)) {\n return false;\n }\n\n if (parseInt(value, 10) > totalPages) {\n return false;\n }\n\n if (parseInt(value, 10) <= 0) {\n return false;\n }\n\n if (value === '') {\n return false;\n }\n\n return true;\n },\n [totalPages]\n );\n\n const onInputChange = useCallback(\n ({ target: { value } }: ChangeEvent<HTMLInputElement>) => {\n setShouldShake(false);\n if (isNotNumber(value)) {\n return;\n }\n\n // max total digits, without left zeros or empty value\n const validDigitValue =\n value === '' ? '' : Number(value.slice(-totalPages.toString().length)).toString();\n\n setPageValue(validDigitValue);\n if (isValidInput(validDigitValue)) {\n setFieldState('processing');\n setDisabledGo(false);\n } else {\n setFieldState('invalid');\n setDisabledGo(true);\n setShouldShake(true);\n }\n },\n [isValidInput, totalPages]\n );\n\n const onBlur = useCallback(\n ({ target: { value } }: React.FocusEvent<HTMLInputElement>) => {\n if (value === '') {\n setPageValue(activePage.toString());\n } else if (isValidInput(value) && parseInt(value, 10) !== activePage) {\n setDisabledGo(false);\n setFieldState('processing');\n return;\n } else if (!isValidInput(value)) {\n setFieldState('invalid');\n setDisabledGo(true);\n return;\n }\n\n setFieldState('default');\n },\n [activePage, isValidInput]\n );\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' && isValidInput(pageValue)) {\n onClickGo();\n }\n };\n\n /**\n * Review if current edith is valid if not make disable\n */\n const onFocus = ({ target: { value } }: React.FocusEvent<HTMLInputElement>) => {\n if (isValidInput(value)) {\n setFieldState('processing');\n } else {\n setFieldState('invalid');\n setDisabledGo(true);\n }\n };\n\n const onClickGo = useCallback(() => {\n onPageChange(parseInt(pageValue, 10));\n inputRef.current?.blur();\n setDisabledGo(true);\n setFieldState('default');\n }, [onPageChange, pageValue]);\n\n const handlePageChange = (value: number) => {\n onPageChange(value);\n setPageValue(value.toString());\n };\n\n const onItemsSelectChange = useCallback(\n (value: string) => {\n onItemsChange(Number(value));\n },\n [onItemsChange]\n );\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pastedText = e.clipboardData.getData('text');\n\n if (!/^\\d+$/.test(pastedText)) {\n e.preventDefault();\n }\n };\n\n useEffect(() => {\n if (!activePage || !isValidInput(activePage ? activePage.toString() : '')) {\n console.warn('Pagination: invalid activePage prop value was sent');\n return;\n }\n\n setPageValue(activePage.toString());\n }, [activePage, isValidInput]);\n\n return (\n <PaginationContainer>\n <ItemsSelectWrapper $width={selectWidth}>\n <SelectField\n disabled={selectDisabled}\n label={{ htmlFor: selectId, text: itemsText, direction: 'row' }}\n defaultValue={itemsDefaultValue ? itemsDefaultValue : itemsOptions[0].value || 1}\n changeCallback={onItemsSelectChange}\n >\n {itemsOptions.map(({ value, textValue }) => (\n <option key={value} value={value}>\n {textValue}\n </option>\n ))}\n </SelectField>\n </ItemsSelectWrapper>\n <Label labelText={pageText} htmlFor='goButton' direction='row'>\n <InputContainer $borderColorState={fieldState} $shouldShake={shouldShake}>\n <StyledInput\n ref={inputRef}\n value={pageValue}\n onChange={(e) => onInputChange(e)}\n onFocus={(e) => onFocus(e)}\n onBlur={(e) => onBlur(e)}\n onPaste={(e) => handlePaste(e)}\n onKeyDown={handleKeyDown}\n $maxWidth={getValidWidth()}\n />\n <StaticPageCount>{`/\\u00A0${totalPages.toString()}`}</StaticPageCount>\n <GoButton\n id='goButton'\n size='small'\n design='primary'\n disabled={disableGo}\n onClick={onClickGo}\n >\n {buttonText}\n </GoButton>\n </InputContainer>\n\n <ArrowWrapper>\n <ArrowButton\n onClick={() => handlePageChange(activePage - 1)}\n disabled={activePage <= 1}\n $active={fieldState === 'default' && activePage > 1}\n >\n <Icon icon='Left' color='input-lead-icon' size={8} />\n </ArrowButton>\n <ArrowButton\n onClick={() => handlePageChange(activePage + 1)}\n disabled={activePage >= totalPages}\n $active={fieldState === 'default' && activePage < totalPages}\n >\n <Icon icon='Right' color='input-lead-icon' size={8} />\n </ArrowButton>\n </ArrowWrapper>\n </Label>\n </PaginationContainer>\n );\n};\n\nexport default Pagination;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport Tag, { type ITag, TagWrapper } from '../atoms/Tag';\n\nexport const TagListWrapper = styled.div`\n display: flex;\n ${TagWrapper} {\n margin-right: 10px;\n margin-bottom: 6px;\n flex-shrink: 0;\n }\n flex-wrap: wrap;\n`;\n\nexport interface ITagList {\n tagsConfig: ITag[];\n}\n\nconst TagList: React.FC<ITagList> = ({ tagsConfig }) => {\n return (\n <TagListWrapper>\n {tagsConfig.map((tagProps, index) => {\n // biome-ignore lint/suspicious/noArrayIndexKey: ITag has only optional fields (label, linkTo, icon) and labels may repeat — index is the only stable identity for this list. #646.\n return <Tag key={`tag-${index}`} {...tagProps} />;\n })}\n </TagListWrapper>\n );\n};\n\nexport default TagList;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport type { TypeButtonDesigns } from '../Form';\nimport Button from '../Form/atoms/Button';\nimport { useModal } from '../hooks';\n\nconst Container = styled.div``;\n\nconst Title = styled.div`\n font-size: 20px;\n font-weight: 400;\n text-align: left;\n text-shadow: 0px 0px 10px var(--white-a5);\n text-decoration: none;\n color: var(--grey-11);\n`;\n\nconst MessageBox = styled.div`\n font-size: 14px;\n font-weight: 400;\n line-height: 25px;\n text-align: left;\n text-decoration: none;\n color: var(--grey-11);\n margin: 28px 0;\n`;\n\nconst StyledButton = styled(Button)`\n margin-left: 10px;\n`;\n\nconst ButtonsGroup = styled.div`\n text-align: right;\n display: flex;\n justify-content: flex-end;\n`;\n\ntype IConfirmationModal = {\n title?: string;\n message: string;\n leftButtonText?: string;\n leftButtonDesign?: TypeButtonDesigns;\n leftButtonCallback?: () => void;\n rightButtonText?: string;\n rightButtonDesign?: TypeButtonDesigns;\n rightButtonCallback?: () => void;\n};\n\nconst ConfirmationModal: React.FC<IConfirmationModal> = ({\n title = '',\n message = '',\n leftButtonText = 'submit',\n leftButtonDesign = 'primary',\n leftButtonCallback = () => {},\n rightButtonDesign = 'secondary',\n rightButtonText = 'cancel',\n rightButtonCallback = () => {},\n}) => {\n const { setModalOpen } = useModal();\n\n const handlePrimaryBtn = () => {\n leftButtonCallback();\n setModalOpen(false);\n };\n\n const handleSecondaryBtn = () => {\n rightButtonCallback();\n setModalOpen(false);\n };\n\n return (\n <Container>\n <Title>{title}</Title>\n <MessageBox>{message}</MessageBox>\n <ButtonsGroup>\n <StyledButton design={leftButtonDesign} onClick={handlePrimaryBtn}>\n {leftButtonText}\n </StyledButton>\n <StyledButton design={rightButtonDesign} onClick={handleSecondaryBtn}>\n {rightButtonText}\n </StyledButton>\n </ButtonsGroup>\n </Container>\n );\n};\n\nexport default ConfirmationModal;\n","import type React from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport styled from 'styled-components';\n\nconst FullWidthContainer = styled.div<{ $contentHeight: number }>`\n min-height: ${({ $contentHeight }) => `${$contentHeight}px`};\n`;\n\nconst FullWidthInner = styled.div`\n position: absolute;\n left: 0;\n right: 0;\n input {width: 100%;}\n`;\n\nconst FullWidthContentBlock: React.FC<React.PropsWithChildren> = ({ children }) => {\n const innerElement = useRef<HTMLDivElement>(null);\n const [contentHeight, setContentHeight] = useState<number>(0);\n\n useEffect(() => {\n if (innerElement?.current) {\n setContentHeight(innerElement.current.clientHeight);\n }\n }, []);\n\n return (\n <FullWidthContainer $contentHeight={contentHeight}>\n <FullWidthInner ref={innerElement}>{children}</FullWidthInner>\n </FullWidthContainer>\n );\n};\n\nexport default FullWidthContentBlock;\n","import type React from 'react';\nimport styled, { css } from 'styled-components';\n\nexport type TResizeLineStates = 'default' | 'arrow';\nexport type TResizeLineLayouts = 'horizontal' | 'vertical';\nexport type TResizeLineDirection = 'up' | 'down' | 'left' | 'right' | undefined;\n\nconst Inner = styled.div`\n display: flex;\n flex: 0 0 200px;\n justify-content: center;\n align-items: center;\n gap: 8px;\n`;\n\nconst Line = styled.div`\n background: var(--grey-10);\n flex: 1;\n`;\n\nconst IconContainer = styled.div`\n flex: 0 0 20px;\n display: flex;\n align-items: center;\n svg {\n path {\n stroke: var(--grey-11);\n }\n }\n`;\n\nconst IconDefault = styled.svg<{ $layout: TResizeLineLayouts }>`\n transform: ${({ $layout }) => ($layout === 'horizontal' ? 'rotate(0deg)' : 'rotate(90deg)')};\n`;\n\nconst IconArrow = styled.svg<{ $direction?: TResizeLineDirection }>`\n transform: rotate(0deg);\n ${({ $direction }) => {\n switch ($direction) {\n case 'up':\n return 'transform: rotate(-90deg);';\n case 'down':\n return 'transform: rotate(90deg);';\n case 'left':\n return 'transform: rotate(180deg);';\n default:\n return 'transform: rotate(0deg);';\n }\n }};\n`;\n\nconst Container = styled.div<{ $layout: TResizeLineLayouts }>`\n display: flex;\n flex: 1;\n align-items: center;\n justify-content: center;\n\n ${({ $layout }) =>\n $layout === 'horizontal'\n ? css`\n width: 16px;\n flex-direction: column;\n ${Inner}{\n flex-direction: column;\n }\n\n ${Line}{\n width: 1px;\n }\n\n `\n : css`\n height: 16px;\n flex-direction: row;\n ${Inner}{\n flex-direction: row;\n }\n ${Line}{\n height: 1px;\n }\n `}\n`;\n\ninterface IResizeLineProps {\n state?: 'default' | 'arrow';\n layout?: TResizeLineLayouts;\n arrowDirection?: TResizeLineDirection;\n}\n\nconst ResizeLine: React.FC<IResizeLineProps> = ({\n state = 'default',\n layout = 'horizontal',\n arrowDirection,\n}) => {\n return (\n <Container $layout={layout}>\n <Inner>\n <Line />\n <IconContainer>\n {state === 'default' ? (\n <IconDefault\n $layout={layout}\n width='20'\n height='20'\n viewBox='0 0 20 20'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path d='M13 14.875V5.125' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M10 14.875V5.125' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M7 14.875L7 5.125' strokeLinecap='round' strokeLinejoin='round' />\n </IconDefault>\n ) : (\n <IconArrow\n $direction={arrowDirection}\n width='20'\n height='20'\n viewBox='0 0 20 20'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M7.25 4.375L12.61 9.735C12.6803 9.80525 12.7199 9.90058 12.7199 10C12.7199 10.0994 12.6803 10.1948 12.61 10.265L7.25 15.625'\n stroke='#9BA1A6'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </IconArrow>\n )}\n </IconContainer>\n <Line />\n </Inner>\n </Container>\n );\n};\n\nexport default ResizeLine;\n","import type React from 'react';\nimport {\n type PointerEvent,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport styled, { css } from 'styled-components';\nimport { useLocalStorage } from '../../hooks/useLocalStorage';\nimport type { ISideAreaState, ISplitLayoutProps } from '..';\nimport ResizeLine, { type TResizeLineDirection, type TResizeLineStates } from '../atoms/ResizeLine';\n\ninterface IPosition {\n x: number;\n y: number;\n}\ntype LayoutType = 'horizontal' | 'vertical';\n\nconst DebugData = styled.div`\n position: absolute;\n z-index: 10;\n bottom: 20px;\n left: 20px;\n background: #ededed99;\n border: grey 1px solid;\n padding: 20px;\n line-height: 20px;\n font-size: 12px;\n div {\n display: block;\n }\n span {\n display: inline-block;\n width: 130px;\n font-weight: 600;\n }\n`;\n\nconst MainArea = styled.div<{ $minDimension?: number; $layout?: LayoutType }>`\n display: flex;\n position: relative;\n flex: 1;\n\n ${({ $layout, $minDimension }) =>\n $layout === 'vertical'\n ? css`\n ${$minDimension ? `min-height: ${$minDimension}px;` : null};\n `\n : css`\n ${$minDimension ? `min-width: ${$minDimension}px;` : null};\n `}\n`;\n\nconst SideAreaInner = styled.div`\n display: flex;\n flex: 1;\n height: 100%;\n transition: opacity 0.2s cubic-bezier(0.85, 0, 0.15, 1);\n`;\n\nconst SideArea = styled.div<{\n $defaultSize: number;\n $maxDimension?: number;\n $minDimension?: number;\n $layout?: LayoutType;\n $collapseState: ISideAreaState;\n}>`\n display: flex;\n position: relative;\n flex: 0 0 ${({ $defaultSize }) => $defaultSize}px;\n display: ${({ $collapseState }) => ($collapseState === 'collapsed' ? 'none' : 'block')};\n transition:\n min-width 0.65s cubic-bezier(0, 0.55, 0.45, 1),\n min-height 0.65s cubic-bezier(0, 0.55, 0.45, 1);\n\n ${({ $layout, $maxDimension, $minDimension }) =>\n $layout === 'vertical'\n ? css`\n ${$minDimension ? `min-height: ${$minDimension}px;` : '0'};\n ${$maxDimension ? `max-height: ${$maxDimension}px;` : 'none'};\n ${SideAreaInner}{\n min-height: ${$minDimension}px;\n }\n `\n : css`\n ${$minDimension ? `min-width: ${$minDimension}px;` : '0'};\n ${$maxDimension ? `max-width: ${$maxDimension}px;` : 'none'};\n ${SideAreaInner}{\n min-width: ${$minDimension}px;\n }\n `}\n\n\n ${({ $layout, $collapseState, $minDimension }) =>\n $collapseState === 'collapsing'\n ? css`\n transition: none;\n ${$layout === 'horizontal' ? 'min-width: 0' : 'min-height: 0'};\n ${SideAreaInner}{\n flex: 0 0 ${$minDimension}px;\n min-width: ${$minDimension}px;\n opacity: 0.5;\n }\n `\n : null}\n\n ${({ $collapseState }) =>\n $collapseState === 'collapsed'\n ? css`\n ${SideAreaInner}{\n display: none;\n }\n `\n : null}\n\n ${({ $layout, $collapseState, $minDimension }) =>\n $collapseState === 'peeking'\n ? css`\n ${$layout === 'horizontal' ? 'min-width: 0' : 'min-height: 0'};\n ${SideAreaInner}{\n min-width: ${$minDimension}px;\n opacity: 0.5;\n }\n `\n : null}\n\n ${({ $layout, $collapseState, $minDimension }) =>\n $collapseState === 'opening'\n ? css`\n ${$layout === 'horizontal' ? 'min-width: 0' : 'min-height: 0'};\n\n ${SideAreaInner}{\n min-width: ${$minDimension}px;\n }\n `\n : null}\n`;\nconst DragContainer = styled.div<{ $size?: number; $fauxHover: 'true' | 'false' }>`\n flex: 0 0 ${({ $size }) => $size}px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: col-resize;\n\n > div {\n transition: opacity 0.15s cubic-bezier(0.45, 0, 0.55, 1);\n }\n\n &:hover > div {\n opacity: 1;\n }\n\n ${({ $fauxHover }) =>\n $fauxHover === 'false'\n ? css`\n > div {\n opacity: 0.6;\n }\n `\n : css`\n > div {\n opacity: 1;\n }\n `}\n\n`;\n\nconst Container = styled.section<{\n $initialised?: 'true' | 'false';\n $layout?: LayoutType;\n $reverse?: string;\n}>`\n box-sizing: border-box;\n display: flex;\n flex:1;\n flex-direction: row;\n overflow: hidden;\n\n transition: opacity 0.25s cubic-bezier(0.45, 0, 0.55, 1);\n opacity: 0;\n\n ${({ $initialised }) =>\n $initialised === 'true'\n ? css`\n opacity: 1;\n `\n : null}\n\n ${({ $layout }) =>\n $layout === 'vertical'\n ? css`\n flex-direction: column;\n ${MainArea}{}\n ${DragContainer}{\n cursor: row-resize;\n }\n `\n : null}\n\n ${({ $reverse }) =>\n $reverse === 'true'\n ? css`\n ${MainArea}{ order: 2; }\n ${DragContainer}{ order: 1; }\n `\n : null}\n`;\n\n// A flex container where the two internal areas can be adjusted with a drag handle.\n// The main area has a minimum size - it flexes to the available space.\n// The secondary side area has more restraints and is the part that is actively resized.\nconst SplitLayout: React.FC<ISplitLayoutProps> = ({\n mainArea,\n sideArea,\n layout = 'horizontal',\n reverse,\n dividerSize = 16,\n persist = false,\n persistenceKey = 'resizable_ui',\n showDebug,\n ref: controlRef,\n}) => {\n const componentKey: string = 'resizable_layout_';\n const referenceKey: string = componentKey + persistenceKey;\n\n const closedBasis: number = 1;\n const hideTolerance: number = 50;\n const sideDefaultSize: number = sideArea.defaultSize || 350;\n const sideMinSize: number = sideArea.minSize || 0;\n const sideMaxSize: number | undefined = sideArea.maxSize;\n const mainMinSize: number | undefined = mainArea.minSize;\n\n const [initialised, setInitialised] = useState<boolean>(false);\n const [initialMousePos, setInitialMousePos] = useState<IPosition>();\n const [mousePosDiff, setMousePosDiff] = useState<IPosition>();\n const [resizing, setResizing] = useState<boolean>();\n\n const [sideAreaState, setSideAreaState] = useState<ISideAreaState>(\n sideArea.defaultCollapsed ? 'collapsed' : 'open'\n );\n const [sideAreaBasis, setSideAreaBasis] = useState<number>(sideDefaultSize);\n const [sideAreaStartBasis, setSideAreaStartBasis] = useState<number>(sideDefaultSize);\n const [lastOpenSize, setLastOpenSize] = useState<number>(sideDefaultSize);\n\n const ContainerRef = useRef<HTMLDivElement>(null);\n const AreaB = useRef<HTMLDivElement>(null);\n\n // For persisting across refreshes and view changes.\n const [savedSize, setSavedSize] = useLocalStorage<number | null>(`${referenceKey}_size`, null);\n const [savedCollapsedState, setSavedCollapsedState] = useLocalStorage<ISideAreaState | null>(\n `${referenceKey}_state`,\n null\n );\n const [savedLastOpenSize, setSavedLastOpenSize] = useLocalStorage<number | null>(\n `${referenceKey}_quick_open_size`,\n null\n );\n\n /*\n -- Initialisation.\n */\n\n useEffect(() => {\n if (!initialised) {\n // Reload previous state if required.\n if (persist) {\n if (savedSize) {\n setSideAreaBasis(savedSize);\n }\n if (savedCollapsedState) {\n setSideAreaState(savedCollapsedState);\n }\n if (savedLastOpenSize) {\n setLastOpenSize(savedLastOpenSize);\n }\n }\n // Used to run once and also hide render redraw\n setInitialised(true);\n }\n }, [initialised, persist, savedCollapsedState, savedSize, savedLastOpenSize]);\n\n useEffect(() => {\n if (!initialised || !sideArea.onSideAreaStateChange) {\n return;\n }\n\n sideArea.onSideAreaStateChange(sideAreaState);\n }, [initialised, sideArea, sideAreaState]);\n\n /*\n --- Expose Controls To Parent (via Ref) ---\n */\n\n useImperativeHandle(controlRef, () => ({\n open: () => {\n open();\n },\n close: () => {\n collapse();\n },\n reset: () => {\n restoreDefault();\n },\n }));\n\n /*\n --- Controls For Layout ---\n */\n\n /**\n * Restore layout to default as defined by props.\n */\n const restoreDefault = useCallback(() => {\n // Move the divider...\n setSideAreaBasis(sideDefaultSize);\n setSideAreaState('open');\n\n // ...and clear the localstorage.\n setSavedSize(null);\n setSavedCollapsedState(null);\n }, [sideDefaultSize, setSavedSize, setSavedCollapsedState]);\n\n /**\n * Set the side area to the fully collapsed state.\n */\n const collapse = useCallback(() => {\n setSideAreaState('collapsed');\n setSideAreaBasis(closedBasis);\n setSideAreaStartBasis(closedBasis);\n\n if (persist) {\n setSavedSize(closedBasis);\n setSavedCollapsedState('collapsed');\n setSavedLastOpenSize(sideAreaStartBasis);\n }\n }, [sideAreaStartBasis, persist, setSavedSize, setSavedCollapsedState, setSavedLastOpenSize]);\n\n /**\n * Set the side area to the last open size or min size depending behaviour.\n */\n const open = useCallback(() => {\n setSideAreaState('open');\n let openBasis: number;\n\n if (sideAreaBasis > closedBasis && AreaB.current) {\n openBasis = layout === 'horizontal' ? AreaB.current.clientWidth : AreaB.current.clientHeight;\n } else {\n openBasis = lastOpenSize;\n }\n\n setSideAreaStartBasis(openBasis);\n setSideAreaBasis(openBasis);\n\n if (persist) {\n setSavedSize(Math.round(sideAreaBasis));\n setSavedCollapsedState('open');\n }\n }, [persist, setSavedCollapsedState, setSavedSize, lastOpenSize, sideAreaBasis, layout]);\n\n /*\n --- Interaction Events ---\n */\n\n const releaseDrag = useCallback(() => {\n // Close if drag is withing the close range.\n if (sideAreaState === 'collapsing' && sideAreaBasis < sideMinSize - hideTolerance) {\n collapse();\n } else {\n setSideAreaStartBasis(Math.round(sideAreaBasis)); // ?\n setLastOpenSize(Math.round(sideAreaBasis));\n open();\n }\n\n setResizing(false);\n }, [collapse, open, sideMinSize, sideAreaBasis, sideAreaState]);\n\n const handleDragPointerDown = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n event.preventDefault();\n const { clientX, clientY } = event;\n\n // Need to set this different if collapsed.\n if (sideAreaState === 'collapsed') {\n setSideAreaStartBasis(sideAreaBasis);\n } else {\n setSideAreaStartBasis(clampInt(sideAreaBasis, sideMinSize, sideMaxSize));\n }\n\n setInitialMousePos({ x: clientX, y: clientY });\n setMousePosDiff({ x: 0, y: 0 });\n setResizing(true);\n },\n [sideAreaBasis, sideMaxSize, sideMinSize, sideAreaState]\n );\n\n const handleDragPointerUp = () => {\n if (resizing) {\n releaseDrag();\n }\n };\n\n const handleDragPointerMove = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n const { clientX, clientY } = event;\n let newBasis: number;\n let collapse: ISideAreaState = sideAreaState;\n\n if (resizing && initialMousePos && sideAreaStartBasis) {\n setMousePosDiff({ x: initialMousePos.x - clientX, y: initialMousePos.y - clientY });\n\n // Behaviour - Resizing\n if (layout === 'horizontal') {\n // Handle Horizontal Resizing\n const maxClamp =\n (ContainerRef.current?.clientWidth ?? 0) - dividerSize - (mainMinSize || 0);\n if (!reverse) {\n newBasis = clampInt(sideAreaStartBasis + (initialMousePos.x - clientX), null, maxClamp);\n } else {\n newBasis = clampInt(sideAreaStartBasis - (initialMousePos.x - clientX), null, maxClamp);\n }\n } else {\n // Handle Vertical Resizing\n const maxClamp =\n (ContainerRef.current?.clientHeight ?? 0) - dividerSize - (mainMinSize || 0);\n if (!reverse) {\n newBasis = clampInt(sideAreaStartBasis + (initialMousePos.y - clientY), null, maxClamp);\n } else {\n newBasis = clampInt(sideAreaStartBasis - (initialMousePos.y - clientY), null, maxClamp);\n }\n }\n\n // Behaviour - Hiding\n // Only sets to open, collapsing or opening. Closed is handle by the release only.\n if (sideArea.collapsable) {\n const inCloseRange = newBasis < sideMinSize - hideTolerance;\n\n if (sideAreaState === 'open' && inCloseRange) {\n collapse = 'collapsing';\n } else if (sideAreaState === 'opening' && inCloseRange) {\n collapse = 'collapsing';\n } else if (sideAreaState === 'collapsing' && !inCloseRange) {\n collapse = 'open';\n } else if (sideAreaState === 'collapsed') {\n collapse = 'peeking';\n } else if (sideAreaState === 'peeking' && !inCloseRange) {\n collapse = 'opening';\n }\n }\n\n // Commit To Scope\n setSideAreaBasis(newBasis);\n setSideAreaState(collapse);\n }\n },\n [\n resizing,\n initialMousePos,\n sideAreaStartBasis,\n sideAreaState,\n layout,\n dividerSize,\n mainMinSize,\n sideMinSize,\n reverse,\n sideArea.collapsable,\n ]\n );\n\n const handleMouseLeaveViewport = useCallback(() => {\n if (resizing) {\n releaseDrag();\n }\n }, [resizing, releaseDrag]);\n\n useEffect(() => {\n document.addEventListener('mouseleave', handleMouseLeaveViewport);\n\n return () => {\n document.removeEventListener('mouseleave', handleMouseLeaveViewport);\n };\n }, [handleMouseLeaveViewport]);\n\n /*\n --- Drag Handle Logic ---\n */\n const resizeLineArrowDirection = (): TResizeLineDirection => {\n if (sideAreaState === 'collapsed' || sideAreaState === 'peeking') {\n if (layout === 'horizontal') {\n if (!reverse) {\n return 'left';\n } else {\n return 'right';\n }\n } else {\n if (!reverse) {\n return 'up';\n } else {\n return 'down';\n }\n }\n } else {\n if (layout === 'horizontal') {\n if (!reverse) {\n return 'right';\n } else {\n return 'left';\n }\n } else {\n if (!reverse) {\n return 'down';\n } else {\n return 'up';\n }\n }\n }\n };\n\n const resizeLineState = (): TResizeLineStates => {\n if (sideAreaState === 'collapsed' || sideAreaState === 'peeking') {\n // Indicate intent of re-opening.\n return 'arrow';\n } else if (sideAreaState === 'collapsing') {\n // Indicate intent of closing.\n return 'arrow';\n } else {\n return 'default';\n }\n };\n\n /*\n --- Useful Debug Overlay ---\n */\n\n const debugData = (\n <DebugData>\n <div>\n <span>State:</span> {sideAreaState}\n </div>\n <div>\n <span>Position:</span> {initialMousePos?.x}, {initialMousePos?.y}\n </div>\n <div>\n <span>Difference:</span> {mousePosDiff?.x}, {mousePosDiff?.y}\n </div>\n <div>\n <span>sideAreaStartBasis:</span> {sideAreaStartBasis}\n </div>\n <div>\n <span>sideAreaBasis:</span> {sideAreaBasis}\n </div>\n <div>\n <span>lastOpenSize:</span> {lastOpenSize}\n </div>\n </DebugData>\n );\n\n /*\n --- Render ---\n */\n\n return (\n <Container\n ref={ContainerRef}\n onPointerMove={handleDragPointerMove}\n onPointerUp={handleDragPointerUp}\n $initialised={initialised ? 'true' : 'false'}\n $layout={layout}\n $reverse={reverse ? 'true' : 'false'}\n >\n <MainArea $layout={layout} $minDimension={mainMinSize}>\n {mainArea.content}\n </MainArea>\n\n <DragContainer\n onPointerDown={handleDragPointerDown}\n onDoubleClick={restoreDefault}\n $size={dividerSize}\n $fauxHover={resizing ? 'true' : 'false'}\n >\n <ResizeLine\n state={resizeLineState()}\n layout={layout}\n arrowDirection={resizeLineArrowDirection()}\n />\n </DragContainer>\n\n <SideArea\n ref={AreaB}\n style={{ flexBasis: `${sideAreaBasis}px` }}\n $defaultSize={sideDefaultSize}\n $minDimension={sideMinSize}\n $maxDimension={sideMaxSize}\n $layout={layout}\n $collapseState={sideAreaState}\n >\n <SideAreaInner>{sideArea.content}</SideAreaInner>\n </SideArea>\n\n {showDebug ? debugData : null}\n </Container>\n );\n};\n\n/**\n * Returns the number input but binding it within the range provided\n * @param value The value to clamp.\n * @param upper The maximum value of the range.\n * @param lower The minimum value of the range.\n * @returns The clamped number value.\n */\nconst clampInt = (value: number, lower?: number | null, upper?: number): number => {\n let clampedInt: number = value;\n clampedInt = upper && clampedInt > upper ? upper : clampedInt;\n clampedInt = lower && clampedInt < lower ? lower : clampedInt;\n return clampedInt;\n};\n\nexport default SplitLayout;\n","import React, { useMemo } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport Icon from '../../Icons/Icon';\nimport type { IUtilityHeaderLinkBack } from '..';\n\nconst BackLinkIcon = styled.div`\n display: flex;\n width: 16px;\n height: 16px;\n justify-content: center;\n align-items: center;\n flex: 1;\n > div {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n`;\n\nconst backLinkStyle = css`\n position: relative;\n display: flex;\n padding: 0;\n align-items: center;\n gap: 8px;\n color: var(--grey-10);\n text-align: center;\n font-family: var(--font-ui);\n font-size: 12px;\n font-style: normal;\n font-weight: 600;\n line-height: normal;\n border: none;\n background: none;\n text-decoration: none;\n transition: color 0.25s ease;\n\n ${BackLinkIcon}{\n svg * {\n transition: stroke 0.25s ease;\n }\n }\n\n &:hover {\n color: var(--grey-12);\n ${BackLinkIcon}{\n svg * {\n stroke: var(--grey-12);\n }\n }\n }\n`;\n\nconst dividerStyle = css`\n content: '';\n display: inline-block;\n height: 12px;\n width: 1px;\n padding-left: 8px;\n border-right: 1px solid var(--grey-10);\n`;\n\nconst BackLink = styled(Link)<{ $iconInGutter: boolean; $showDivider: boolean }>`\n ${backLinkStyle};\n margin-left: ${(props) => (props.$iconInGutter ? '-24px' : '0')};\n\n ${({ $showDivider }) =>\n $showDivider &&\n css`\n &::after {\n ${dividerStyle};\n }\n `}\n`;\n\nconst BackButton = styled.button<{ $iconInGutter: boolean; $showDivider: boolean }>`\n ${resetButtonStyles};\n ${backLinkStyle};\n margin-left: ${(props) => (props.$iconInGutter ? '-24px' : '0')};\n\n ${({ $showDivider }) =>\n $showDivider &&\n css`\n &::after {\n ${dividerStyle};\n }\n `}\n`;\n\ninterface IUtilityHeaderLinkBackInstance extends IUtilityHeaderLinkBack {\n $iconInGutter: boolean;\n $showDivider: boolean;\n}\n\nconst UtilityHeaderBack: React.FC<IUtilityHeaderLinkBackInstance> = ({\n show = true,\n link,\n label = 'Back',\n $showDivider,\n $iconInGutter,\n onClick,\n}) => {\n const innerContent = useMemo(\n () => (\n <React.Fragment>\n <BackLinkIcon>\n <Icon icon='Back' size={16} color='grey-10' />\n </BackLinkIcon>\n {label}\n </React.Fragment>\n ),\n [label]\n );\n\n if (!show) {\n return null;\n }\n\n return (\n <React.Fragment>\n {onClick ? (\n <BackButton {...{ $showDivider, $iconInGutter, onClick }}>{innerContent}</BackButton>\n ) : (\n link && (\n <BackLink to={link} {...{ $showDivider, $iconInGutter }}>\n {innerContent}\n </BackLink>\n )\n )}\n </React.Fragment>\n );\n};\n\nexport default UtilityHeaderBack;\n","import type React from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { useCopyToClipboard } from '../../hooks';\nimport Icon from '../../Icons/Icon';\nimport type { IUtilityHeaderLinkShare } from '..';\n\nconst ExtraActionIcon = styled.div`\n display: flex;\n width: 16px;\n height: 16px;\n justify-content: center;\n align-items: center;\n`;\nconst ExtraAction = styled.button`\n position: relative;\n display: flex;\n padding: 0;\n align-items: center;\n gap: 8px;\n color: var(--grey-10);\n text-align: center;\n font-family: var(--font-ui);\n font-size: 12px;\n font-style: normal;\n font-weight: 600;\n line-height: normal;\n border: none;\n background: none;\n text-decoration: none;\n transition: color 0.25s ease;\n cursor: pointer;\n\n ${ExtraActionIcon}{\n svg * {\n transition: stroke 0.25s ease;\n }\n }\n \n &:hover {\n color: var(--grey-12);\n ${ExtraActionIcon}{\n svg * {\n stroke: var(--grey-12);\n }\n }\n }\n\n`;\n\nconst UtilityHeaderShare: React.FC<IUtilityHeaderLinkShare> = ({\n show,\n link,\n label = 'Share',\n copiedLabel = 'Copied',\n}) => {\n const [copyActionText, setCopyActionText] = useState<string>(label);\n const { copyToClipboard } = useCopyToClipboard();\n\n const clickHandlerShareLink = useCallback(() => {\n // Copy to clip board and change UI for short period.\n copyToClipboard(link ? link : window.location.href);\n setCopyActionText(copiedLabel);\n setTimeout(() => setCopyActionText(copyActionText), 2000);\n }, [link, copiedLabel, copyActionText, copyToClipboard]);\n\n useEffect(() => {\n // Update the label if prop is updated.\n setCopyActionText(label);\n }, [label]);\n\n if (!show) {\n return null;\n }\n\n return (\n <ExtraAction onClick={clickHandlerShareLink}>\n <ExtraActionIcon>\n <Icon icon='Link' size={16} color='grey-10' />\n </ExtraActionIcon>\n {copyActionText}\n </ExtraAction>\n );\n};\n\nexport default UtilityHeaderShare;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport { useBreakpoints } from '../../hooks';\nimport Icon from '../../Icons/Icon';\nimport type { IUtilityHeader } from '..';\nimport UtilityHeaderBack from '../atoms/UtilityHeaderBack';\nimport UtilityHeaderShare from '../atoms/UtilityHeaderShare';\n\nconst Container = styled.div`\n max-width: var(--max-content-width);\n margin-top: var(--utility-header-padding-top);\n padding: 0 var(--content-layout-padding-right) 0 var(--content-layout-padding-left);\n height: 48px;\n width: 100%;\n display: flex;\n`;\n\nconst LeftArea = styled.div`\n display: flex;\n align-items: center;\n gap: var(--columnPadding, 16px);\n flex: 1 0 0;\n`;\n\nconst Breadcrumbs = styled.div`\n display: inline-flex;\n align-items: center;\n gap: 8px;\n`;\nconst Breadcrumb = styled.div`\n flex: 1;\n display: flex;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n white-space: nowrap;\n\n`;\nconst BreadcrumbIcon = styled.div`\n flex: 0;\n display: flex;\n align-items: center;\n\n > div {\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n`;\nconst HomeIcon = styled(BreadcrumbIcon)`\n padding-bottom: 1px;\n svg path {\n transition: stroke var(--speed-normal) var(--easing-primary-out);\n }\n`;\n\nconst BreadcrumbTextStyle = css`\n display: flex;\n flex-direction: row;\n gap: 8px;\n flex: 1;\n color: var(--grey-10);\n font-family: var(--font-ui);\n text-decoration: none;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 12px; /* 100% */\n`;\n\nconst BreadCrumbStyle = css`\n ${BreadcrumbTextStyle};\n transition: color var(--speed-normal) var(--easing-primary-out);\n\n &:hover {\n color: var(--grey-12);\n ${HomeIcon} svg {\n path {\n stroke: var(--grey-12);\n }\n }\n }\n`;\n\nconst BreadcrumbLink = styled(Link)`\n ${BreadCrumbStyle};\n`;\n\nconst BreadcrumbButton = styled.button`\n ${resetButtonStyles};\n ${BreadCrumbStyle};\n`;\n\nconst BreadcrumbText = styled.span`\n ${BreadcrumbTextStyle};\n pointer-events: none;\n`;\n\nconst RightArea = styled.div`\n flex: 1;\n align-items: center;\n display: flex;\n justify-content: right;\n`;\n\nconst UtilityHeader: React.FC<IUtilityHeader> = ({\n showBreadcrumbs = true,\n breadcrumbs = [],\n showHomeIcon = true,\n back,\n share,\n $iconInGutter,\n}) => {\n const { isLarge } = useBreakpoints();\n const iconInGutter = $iconInGutter !== undefined ? $iconInGutter : isLarge;\n const hasBreadcrumbs = showBreadcrumbs && breadcrumbs.length > 0;\n\n return (\n <Container>\n <LeftArea>\n {back && (\n <UtilityHeaderBack $showDivider={hasBreadcrumbs} $iconInGutter={iconInGutter} {...back} />\n )}\n {hasBreadcrumbs ? (\n <Breadcrumbs>\n {breadcrumbs.map((breadcrumb, index) => {\n const { text, href, onClick } = breadcrumb;\n const isFirst = index === 0;\n const isLast = index === breadcrumbs.length - 1;\n\n const innerContent = (\n <React.Fragment>\n {isFirst && showHomeIcon ? (\n <HomeIcon>\n <Icon icon='Home' size={11} color='grey-10' />\n </HomeIcon>\n ) : null}\n {text}\n </React.Fragment>\n );\n\n return (\n <React.Fragment key={text}>\n <Breadcrumb>\n {onClick ? (\n <BreadcrumbButton onClick={onClick} type='button'>\n {innerContent}\n </BreadcrumbButton>\n ) : href ? (\n <BreadcrumbLink to={href}>{innerContent}</BreadcrumbLink>\n ) : (\n <BreadcrumbText>{innerContent}</BreadcrumbText>\n )}\n {!isLast ? (\n <BreadcrumbIcon>\n <Icon icon='Right' size={6} color='grey-8' />\n </BreadcrumbIcon>\n ) : null}\n </Breadcrumb>\n </React.Fragment>\n );\n })}\n </Breadcrumbs>\n ) : null}\n </LeftArea>\n <RightArea>\n <UtilityHeaderShare {...share} />\n </RightArea>\n </Container>\n );\n};\n\nexport default UtilityHeader;\n","import React, { type HTMLAttributes, useState } from 'react';\n\nexport interface ContextProps {\n selected: string;\n setSelected: (value: string) => void;\n}\nexport const TabContext = React.createContext<ContextProps>({\n selected: '',\n setSelected: () => {},\n});\n\ntype Props = HTMLAttributes<HTMLDivElement>;\n\nconst Tabs: React.FC<Props> = ({ children }) => {\n const [selected, setSelected] = useState('');\n\n return <TabContext.Provider value={{ selected, setSelected }}>{children}</TabContext.Provider>;\n};\n\nexport { Tabs };\n","import type React from 'react';\nimport styled from 'styled-components';\nimport { Tabs } from '../../Tabs/Tabs';\nimport type { IHeaderContent } from '..';\nimport UtilityHeader from '../molecules/UtilityHeader';\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n position: relative;\n\n min-height: 100%;\n display: flex;\n`;\n\nconst HeaderArea = styled.div`\n width: 100%;\n max-width: var(--max-content-width);\n padding: \n 24px\n var(--content-layout-padding-right)\n 32px\n var(--content-layout-padding-left);\n \n`;\nconst TabArea = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n border-bottom: 1px solid var(--grey-4);\n`;\n\nconst TabAreaInner = styled.div`\n max-width: var(--max-content-width);\n flex: 1;\n width: 100%;\n padding: \n 0\n var(--content-layout-padding-right)\n 0\n var(--content-layout-padding-left);\n`;\n\nconst Content = styled.div`\n width: 100%;\n max-width: var(--max-content-width);\n padding: \n var(--content-layout-padding-top)\n var(--content-layout-padding-right)\n var(--content-layout-padding-bottom)\n var(--content-layout-padding-left);\n\n display: flex;\n flex: 1;\n flex-direction: column;\n`;\n\ninterface IContentLayout {\n layout?: 'default' | 'fullscreen' | 'dashboard';\n HeaderContent?: IHeaderContent;\n children?: React.ReactNode;\n}\n\nconst ContentLayout: React.FC<IContentLayout> = ({\n layout = 'default',\n HeaderContent = {},\n children,\n}) => {\n const { PageHeaderArea, TabsElementArea, UtilityHeaderOptions } = HeaderContent;\n\n const containerClass = `content-layout-${layout}`;\n\n return (\n <Container className={containerClass}>\n {UtilityHeaderOptions ? <UtilityHeader {...UtilityHeaderOptions} /> : null}\n\n {PageHeaderArea ? <HeaderArea>{PageHeaderArea}</HeaderArea> : null}\n\n {TabsElementArea ? (\n <Tabs>\n <TabArea>\n <TabAreaInner>{TabsElementArea}</TabAreaInner>\n </TabArea>\n\n <Content>{children}</Content>\n </Tabs>\n ) : (\n <Content>{children}</Content>\n )}\n </Container>\n );\n};\n\nexport default ContentLayout;\n","import styled, { css } from 'styled-components';\nimport { deviceMediaQuery } from '../../theme/common';\n\nexport const MOBILE_CLOSE_HEIGHT = 50;\nexport const MOBILE_NAVBAR_HEIGHT = 68;\n\nexport const Layout = styled.div`\n display: flex;\n`;\n\nexport const MobileLayout = styled.div``;\n\nexport const Content = styled.div<{ $maxWidth?: string; $padBottom?: boolean }>`\n padding: 0;\n flex: 1;\n overflow: auto;\n\n & > div {\n max-width: 1400px;\n }\n\n ${({ $maxWidth }) =>\n $maxWidth &&\n css`\n & > div {\n max-width: ${$maxWidth};\n }\n `}\n`;\nexport const MainContainer = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n`;\n\nexport const ContentArea = styled.div<{\n $maxWidth?: string;\n $paddingOverride?: string;\n $legacyLayout?: boolean;\n}>`\n flex: 1;\n width: 100%;\n margin-left: auto;\n margin-right: auto;\n\n ${({ $legacyLayout, $paddingOverride, $maxWidth }) =>\n $legacyLayout &&\n css`\n padding: ${$paddingOverride ? $paddingOverride : '40px 20px'};\n\n @media ${deviceMediaQuery.medium} {\n padding: ${$paddingOverride ? $paddingOverride : '40px'};\n }\n\n @media ${deviceMediaQuery.large} {\n max-width: ${$maxWidth ? $maxWidth : `1200px`};\n padding: ${$paddingOverride ? $paddingOverride : '70px 90px'};\n }\n `}\n`;\n","import type React from 'react';\nimport { Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common';\nimport type { ITopBarBadge } from '..';\n\nconst CoreStyle = css`\n display: flex;\n height: 32px;\n padding: 8px;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: 8px;\n border-radius: 3px;\n\n font-family: Lato;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 12px; /* 85.714% */\n white-space: nowrap;\n\n transition: opacity var(--speed-fast) var(--easing-primary-out);\n\n`;\n\nconst ContainerStatic = styled.div<{ $themeColor?: string }>`\n ${CoreStyle};\n\n ${({ $themeColor }) =>\n $themeColor\n ? css`\n border: 2px solid var(--${$themeColor}-9);\n color: var(--${$themeColor}-11);\n `\n : css`\n border: 2px solid var(--info-9);\n color: var(--info-11);\n `};\n`;\n\nconst DefaultText = styled.span`\n display: inline-block;\n`;\nconst LinkText = styled.span``;\n\nconst InteractiveStyle = css<{ $themeColor?: string }>`\n ${CoreStyle};\n text-decoration: none;\n\n ${({ $themeColor }) =>\n $themeColor\n ? css`\n background-color: transparent;\n border: 2px solid var(--${$themeColor}-9);\n color: var(--${$themeColor}-11);\n `\n : css`\n background-color: transparent;\n border: 2px solid var(--info-9);\n color: var(--info-11);\n `};\n\n &:hover {\n ${({ $themeColor }) =>\n $themeColor\n ? css`\n background-color: var(--${$themeColor}-9);\n border: 2px solid var(--${$themeColor}-9);\n color: var(--white-12);\n `\n : css`\n background-color: var(--info-9);\n border: 2px solid var(--info-9);\n color: var(--white-12);\n `};\n }\n`;\n\nconst ContainerLinked = styled.div<{ $themeColor?: string }>`\n a {\n ${InteractiveStyle};\n }\n`;\n\nconst ContainerButton = styled.div<{ $themeColor?: string }>`\n button {\n ${resetButtonStyles};\n ${InteractiveStyle};\n }\n`;\n\nconst Container = styled.div<{ $ready: boolean; $minWidth: number }>`\n ${({ $ready, $minWidth }) => css`\n\n visibility: ${$ready ? 'visible' : 'hidden'};\n opacity: ${$ready ? '1' : '0'};\n\n transition: opacity var(--speed-fast) var(--easing-primary-in-out);\n\n ${DefaultText}, ${LinkText}{\n /* Required to accurately measure container sizes and ensure hover doesn't resize. */\n ${$ready && `min-width: ${$minWidth}px;`};\n }\n `};\n`;\n\nconst TopBarBadge: React.FC<ITopBarBadge> = ({\n text,\n color,\n linkHref,\n linkTo,\n linkText,\n onClick,\n}) => {\n const defaultTextRef = useRef<HTMLSpanElement>(null);\n const linkTextRef = useRef<HTMLSpanElement>(null);\n\n const [ready, setReady] = useState<boolean>(false);\n const [hover, setHover] = useState<boolean>(false);\n const [minWidth, setMinWidth] = useState<number>(0);\n\n useEffect(() => {\n setReady(false);\n const timeoutId = setTimeout(() => {\n const defaultWidth = defaultTextRef.current?.getBoundingClientRect().width ?? 0;\n const linkWidth = linkTextRef.current?.getBoundingClientRect().width ?? 0;\n const largestWidth = defaultWidth >= linkWidth ? defaultWidth : linkWidth;\n setMinWidth(Math.ceil(largestWidth));\n setReady(true);\n }, 100);\n return () => clearTimeout(timeoutId);\n }, []);\n\n const defaultTextElement = useMemo(\n () => <DefaultText ref={defaultTextRef}>{text}</DefaultText>,\n [text]\n );\n\n const linkTextElement = useMemo(\n () =>\n onClick || linkTo || linkHref ? (\n <LinkText ref={linkTextRef}>{linkText || text}</LinkText>\n ) : null,\n [onClick, linkTo, linkHref, linkText, text]\n );\n\n const renderContent = useMemo(\n () =>\n !ready ? (\n <Fragment>\n {defaultTextElement}\n {linkTextElement}\n </Fragment>\n ) : !hover ? (\n defaultTextElement\n ) : (\n linkTextElement\n ),\n [ready, hover, defaultTextElement, linkTextElement]\n );\n\n const badgeComponent = useMemo(() => {\n if (onClick) {\n return (\n <ContainerButton $themeColor={color}>\n <button onClick={onClick} type='button'>\n {renderContent}\n </button>\n </ContainerButton>\n );\n } else if (linkTo) {\n return (\n <ContainerLinked $themeColor={color}>\n <Link to={linkTo}>{renderContent}</Link>\n </ContainerLinked>\n );\n } else if (linkHref) {\n return (\n <ContainerLinked $themeColor={color}>\n <a href={linkHref}>{renderContent}</a>\n </ContainerLinked>\n );\n } else {\n return <ContainerStatic $themeColor={color}>{defaultTextElement}</ContainerStatic>;\n }\n }, [onClick, linkTo, linkHref, color, renderContent, defaultTextElement]);\n\n return (\n <Container\n $ready={ready}\n $minWidth={minWidth}\n onPointerEnter={() => ready && setHover(true)}\n onPointerLeave={() => ready && setHover(false)}\n >\n {badgeComponent}\n </Container>\n );\n};\n\nexport default TopBarBadge;\n","import type { FC } from 'react';\nimport styled from 'styled-components';\nimport Icon from '../../Icons/Icon';\n\nconst Container = styled.div`\n padding: 16px 10px 14px 23px;\n display: flex;\n flex-direction: row;\n border-top: 1px solid var(--dividing-line);\n align-items: center;\n cursor: pointer;\n svg {\n margin-top: 7px;\n }\n`;\n\nconst ColumnContainer = styled.div`\n display: flex;\n flex-direction: column;\n padding-left: 14px;\n align-items: flex-start;\n`;\n\nconst Title = styled.div`\n opacity: 0.76;\n font-family: var(--font-ui);\n font-size: 12px;\n font-weight: 500;\n letter-spacing: 0.34px;\n color: var(--grey-11);\n`;\n\nconst SubTitle = styled.div`\n font-family: var(--font-ui);\n font-size: 10px;\n line-height: 12px;\n font-weight: 500;\n letter-spacing: 0.29px;\n color: var(--grey-11);\n padding-top: 2px;\n opacity: 0.5;\n`;\n\ninterface IDrawerBottomMenu {\n icon: string;\n title: string;\n subTitle: string;\n onClickCallback?: () => void;\n}\n\nconst DrawerBottomMenu: FC<IDrawerBottomMenu> = ({\n icon = 'Settings',\n title,\n subTitle,\n onClickCallback = () => {},\n}) => {\n return (\n <Container onClick={onClickCallback}>\n <Icon icon={icon} size={18} color='dimmed' />\n\n <ColumnContainer>\n <Title>{title}</Title>\n <SubTitle>{subTitle}</SubTitle>\n </ColumnContainer>\n </Container>\n );\n};\n\nexport default DrawerBottomMenu;\n","import type React from 'react';\nimport { Fragment, useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport { useCopyToClipboard } from '../../hooks';\nimport Icon from '../../Icons/Icon';\nimport type { IUserDrawerMeta } from '..';\n\nconst MetaConatiner = styled.div`\n margin: 10px 10px;\n border: 1px solid var(--grey-3);\n background-color: var(--grey-a2);\n border-radius: 5px;\n &:active {\n box-shadow: 4px 4px var(--grey-a2);\n }\n`;\n\nconst LabelTitle = styled.div`\n max-width: 130px;\n overflow-wrap: initial;\n white-space: break-spaces;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n opacity: 0.76;\n font-size: 10px;\n font-weight: 500;\n letter-spacing: 0.29px;\n color: var(--grey-11);\n font-family: var(--font-ui);\n margin-top: 2px;\n`;\n\nconst LabelContent = styled.div`\n font-size: 10px;\n padding-left: 10px;\n max-width: 200px;\n overflow-wrap: initial;\n white-space: break-spaces;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 4px 0 5px 0;\n white-space: nowrap;\n font-weight: 500;\n letter-spacing: 0.29px;\n color: var(--grey-8);\n`;\n\nconst LabelNotes = styled.div`\n padding-left: 10px;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 5px 0 8px 0;\n max-height: 23px;\n font-size: 10px;\n font-weight: 500;\n letter-spacing: 0.29px;\n color: var(--grey-8);\n font-family: var(--font-data);\n`;\n\nconst TitleContainer = styled.div`\n display: flex;\n gap:6px;\n flex-direction: row;\n align-items: center;\n margin-left: 10px;\n margin: 3px 0 5px 10px;\n`;\n\nconst Container = styled.div`\n cursor: pointer;\n`;\n\nconst TitleBox = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst IconBox = styled.div`\n padding: 1px 5px 0 0;\n opacity: 0;\n ${Container}:hover & {\n opacity: 1;\n cursor: pointer;\n }\n`;\n\nconst CopyTextBox = styled.pre`\n padding: 5px;\n font-size: 10px;\n line-height: 1.2;\n box-shadow: 2px 2px 4px (195deg 16% 72% / 72%);\n border: 1px solid var(--grey-8);\n background-color: var(--grey-2);\n border-radius: 5px;\n opacity: 0.76;\n font-weight: 500;\n color: var(--grey-11);\n position: absolute;\n max-width: 170px;\n white-space: pre-wrap;\n font-family: var(--font-data);\n right:10px;\n margin-top: -23px;\n`;\n\nconst CopyBox = styled.div`\n`;\n\ninterface IProps {\n item: IUserDrawerMeta;\n onUserDrawerMetaClick?: () => void;\n includeCopyTitle?: boolean;\n copySuccessMessage?: string;\n}\n\nconst UserDrawerMeta: React.FC<IProps> = ({\n item,\n onUserDrawerMetaClick,\n copySuccessMessage,\n includeCopyTitle,\n}) => {\n const { icon, title, subTitle, notes, hasCopyIcon } = item;\n const { copyToClipboard } = useCopyToClipboard();\n const [showCopyText, setShowCopyText] = useState<boolean>(false);\n const [onHoverColorValue, setOnHoverColorValue] = useState<\n 'mono' | 'dimmed' | 'subtle' | 'inverse' | 'primary' | 'danger'\n >('dimmed');\n\n const onClickCopyText = useCallback(\n (title?: string, subTitle?: string, notes?: string) => {\n let copyText: string;\n if (includeCopyTitle) {\n copyText = `${title ? title : ''}\\n${subTitle ? subTitle : ''}\\n${notes ? notes : ''}`;\n } else {\n copyText = `${subTitle ? subTitle : ''}\\n${notes ? notes : ''}`;\n }\n copyToClipboard(copyText);\n setShowCopyText(true);\n setTimeout(() => {\n setShowCopyText(false);\n }, 1500);\n },\n [includeCopyTitle, copyToClipboard]\n );\n\n const onHoverMetaInfo = useCallback(() => {\n setOnHoverColorValue('mono');\n }, []);\n\n const onLeaveMeatInfo = useCallback(() => {\n setOnHoverColorValue('dimmed');\n }, []);\n\n return (\n <Fragment>\n {title !== '' && (\n <Container onClick={onUserDrawerMetaClick}>\n <MetaConatiner>\n <TitleBox>\n <TitleContainer>\n <Icon icon={icon as string} size={10} color='dimmed' />\n <LabelTitle title={title}>{title}</LabelTitle>\n </TitleContainer>\n <CopyBox>\n {showCopyText && (\n <CopyTextBox>\n {copySuccessMessage !== '' ? copySuccessMessage : 'Copied!'}\n </CopyTextBox>\n )}\n {hasCopyIcon ? (\n <IconBox\n onClick={() => onClickCopyText(title, subTitle, notes)}\n onMouseEnter={onHoverMetaInfo}\n onMouseLeave={onLeaveMeatInfo}\n >\n <Icon icon='Copy' size={12} color={onHoverColorValue} />\n </IconBox>\n ) : null}\n </CopyBox>\n </TitleBox>\n {subTitle !== '' ? <LabelContent title={subTitle}>{subTitle}</LabelContent> : null}\n {notes !== '' ? <LabelNotes title={notes}>{notes}</LabelNotes> : null}\n </MetaConatiner>\n </Container>\n )}\n </Fragment>\n );\n};\n\nexport default UserDrawerMeta;\n","import type React from 'react';\nimport { Fragment, useCallback, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common/index';\nimport Icon from '../../Icons/Icon';\nimport { deviceMediaQuery } from '../../theme/common';\nimport DrawerBottomMenu from '../atoms/DrawerBottomMenu';\nimport UserDetails from '../atoms/UserDrawerMeta';\nimport type { ITopBar, IUserDrawerFooter, IUserDrawerMeta } from '../index';\n\nconst DrawerTop = styled.div``;\nconst DrawerBottom = styled.div`\n width: 100%;\n position: fixed;\n bottom: 50px;\n @media ${deviceMediaQuery.medium} {\n position: static;\n bottom: 0;\n }\n`;\n\nconst DrawerHeader = styled.h2`\n font-size: 14px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.35px;\n color: var(--grey-11);\n padding: 0;\n margin: 0 0 5px;\n`;\n\nconst CurrentUser = styled.div`\n padding: 20px 20px 15px;\n border-bottom: var(--dividing-line) 1px solid;\n font-size: 12px;\n font-weight: 400;\n color: var(--grey-11);\n`;\n\nconst UserOptions = styled.div`\n padding: 20px 20px 10px 20px;\n border-bottom: var(--dividing-line) 1px solid;\n`;\n\nconst Logout = styled.div`\n padding: 0 20px;\n`;\n\nconst LinkMenu = styled.ul`\n padding: 0;\n margin: 12px 0 0 0;\n list-style: none;\n`;\n\nconst LinkMenuItem = styled.li`\n padding: 10px 0;\n`;\n\nconst IconWrapperFooter = styled.div`\n width: 5px;\n display: flex;\n justify-content: center;\n align-items: center;\n > div {\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n padding-right: 20px;\n`;\n\nconst LinkMenuItemA = styled(Link)<{ isActive?: boolean }>`\n ${resetButtonStyles};\n display: block;\n width: 100%;\n font-size: 14px;\n font-weight: 400;\n color: var(--grey-10);\n text-decoration: none;\n\n &:hover {\n color: var(--primary-9);\n }\n\n ${({ isActive }) =>\n isActive &&\n css`\n &, &:hover {\n color: var(--primary-9);\n }\n `};\n`;\n\nconst FooterMeta = styled.div<{ $icon?: string }>`\n font-family: var(--font-ui);\n border-top: var(--dividing-line) 1px solid;\n margin-top: auto;\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n font-size: 10px;\n font-weight: 400;\n color: var(--grey-a11);\n padding: 10px;\n padding-left: ${({ $icon }) => ($icon ? '31px' : '21px')};\n`;\n\nconst NavigationContainer = styled.div`\n max-height: 300px;\n overflow: scroll;\n overflow-x: hidden;\n overflow-y: auto;\n border-bottom: var(--dividing-line) 1px solid;\n`;\n\nconst FooterText = styled.div<{ $icon?: string }>`\n white-space: break-spaces;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 136px;\n max-width: ${({ $icon }) => ($icon ? '136px' : '164px')};\n color: var(--grey-11);\n opacity: 0.5;\n`;\n\nconst updateLanguageAttribute = (initLanguage?: string) => {\n if (initLanguage) {\n document.documentElement.setAttribute('lang', initLanguage);\n return initLanguage;\n }\n\n const browserLang = navigator.language.split('-')[0];\n const htmlLang = document.documentElement.lang;\n\n if (!htmlLang) {\n document.documentElement.setAttribute('lang', browserLang);\n return browserLang;\n }\n\n return htmlLang;\n};\n\ninterface IUserMenu extends ITopBar {\n closeOnClick?: () => void;\n}\n\nconst UserMenu: React.FC<IUserMenu> = ({\n hasLanguage = false,\n selectedLanguageText = '',\n languageOptionsText = 'LANGUAGE / 言語',\n selectedLangAttribute,\n hasLogout = true,\n logoutLink = '/logout',\n logoutText = 'Logout',\n hasCurrentUser = true,\n currentUserText = 'Current User',\n accountOptionText = 'Account Options',\n userSubmenu = [],\n userDrawerBespoke,\n loggedInUser,\n hasSwitchTheme = false,\n isLightMode = true,\n switchThemeText = 'SWITCH THEME',\n selectedThemeText = '',\n onLogout = () => {},\n onLanguageToggle = () => {},\n closeOnClick,\n onThemeToggle = () => {},\n userDrawerFooter = { icon: '', title: '' },\n copySuccessMessage,\n includeCopyTitle,\n onUserDrawerMetaClick = () => {},\n userDrawerMeta,\n hasUserDrawerMeta,\n hasUserDrawerFooter,\n}) => {\n const { icon, title } = userDrawerFooter as IUserDrawerFooter;\n const logoutHandler = useCallback(\n async (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n e.preventDefault();\n await onLogout();\n window.location.assign(logoutLink);\n if (closeOnClick) {\n closeOnClick();\n }\n },\n [closeOnClick, logoutLink, onLogout]\n );\n\n const handleCloseWhenClick = useCallback(() => {\n if (closeOnClick) {\n closeOnClick();\n }\n }, [closeOnClick]);\n\n useEffect(() => {\n updateLanguageAttribute(selectedLangAttribute);\n }, [selectedLangAttribute]);\n\n return (\n <Fragment>\n <DrawerTop>\n {hasCurrentUser ? (\n <CurrentUser>\n <DrawerHeader>{currentUserText}</DrawerHeader>\n {loggedInUser}\n </CurrentUser>\n ) : null}\n {hasUserDrawerMeta ? (\n <NavigationContainer>\n {userDrawerMeta?.map((item: IUserDrawerMeta, key: number) => {\n return (\n <UserDetails\n onUserDrawerMetaClick={onUserDrawerMetaClick}\n // biome-ignore lint/suspicious/noArrayIndexKey: IUserDrawerMeta has only optional fields (title/icon/subTitle/notes) — no guaranteed stable identifier. #646.\n key={key}\n {...{ item, includeCopyTitle, copySuccessMessage }}\n />\n );\n })}\n </NavigationContainer>\n ) : null}\n\n {userSubmenu.length > 0 ? (\n <UserOptions>\n <DrawerHeader>{accountOptionText}</DrawerHeader>\n <LinkMenu>\n {userSubmenu.map(({ text, href }) => {\n return (\n <LinkMenuItem key={`${text}-${href}`}>\n <LinkMenuItemA to={href} onClick={handleCloseWhenClick}>\n {text}\n </LinkMenuItemA>\n </LinkMenuItem>\n );\n })}\n </LinkMenu>\n </UserOptions>\n ) : null}\n\n {userDrawerBespoke ? userDrawerBespoke : null}\n\n {hasLogout ? (\n <Logout>\n <LinkMenu>\n <LinkMenuItem>\n <LinkMenuItemA onClick={logoutHandler} to={logoutLink}>\n {logoutText}\n </LinkMenuItemA>\n </LinkMenuItem>\n </LinkMenu>\n </Logout>\n ) : null}\n </DrawerTop>\n\n <DrawerBottom>\n {hasSwitchTheme && (\n <DrawerBottomMenu\n icon={isLightMode ? 'LightMode' : 'DarkMode'}\n title={switchThemeText}\n subTitle={selectedThemeText}\n onClickCallback={onThemeToggle}\n />\n )}\n {hasLanguage && (\n <DrawerBottomMenu\n icon='Language'\n title={languageOptionsText}\n subTitle={selectedLanguageText}\n onClickCallback={onLanguageToggle}\n />\n )}\n {hasUserDrawerFooter ? (\n <FooterMeta title={title} $icon={icon}>\n {icon ? (\n <IconWrapperFooter>\n <Icon icon={icon} size={14} color='dimmed' />\n </IconWrapperFooter>\n ) : null}\n <FooterText $icon={icon}>{title}</FooterText>\n </FooterMeta>\n ) : null}\n </DrawerBottom>\n </Fragment>\n );\n};\n\nexport default UserMenu;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport type { INotificationItem } from '../index';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 18px 20px 12px 20px;\n height: 122px;\n`;\n\nconst ImgWrapper = styled.div`\n border-radius: 5px;\n overflow: hidden;\n height: 40px;\n width: 40px;\n flex-shrink: 0;\n`;\n\nconst EmptyImg = styled.div`\n background-color: var(--grey-5);\n width: 100%;\n height: 100%;\n`;\n\nconst Image = styled.div<{ $image?: string }>`\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background-image: url(${(p) => p.$image});\n background-position: center center;\n background-size: cover;\n background-repeat: no-repeat;\n display: ${(p) => (p.$image ? 'block' : 'none')};\n`;\n\nconst InfoContainer = styled.div`\n margin-left: 20px;\n`;\n\nconst Title = styled.div`\n font-size: 16px;\n font-weight: 500;\n color: var(--grey-11);\n`;\n\nconst Message = styled.div`\n font-size: 13px;\n font-weight: 500;\n overflow: hidden;\n color: var(--grey-11);\n margin: 4px 0;\n height: 30px;\n text-overflow: ellipsis;\n overflow: hidden;\n display: inline-block;\n vertical-align: middle;\n`;\n\nconst TimeMsg = styled.div`\n font-size: 13px;\n font-weight: 500;\n color: var(--grey-12);\n margin-top: 15px;\n`;\n\nconst NotificationItem: React.FC<INotificationItem> = ({ imgUrl, title, message, time }) => {\n return (\n <Container>\n <ImgWrapper>{imgUrl ? <Image $image={imgUrl} /> : <EmptyImg />}</ImgWrapper>\n <InfoContainer>\n <Title>{title}</Title>\n <Message>{message}</Message>\n <TimeMsg>{time}</TimeMsg>\n </InfoContainer>\n </Container>\n );\n};\n\nexport default NotificationItem;\n","import type React from 'react';\nimport { Fragment } from 'react';\nimport styled from 'styled-components';\nimport NotificationItem from '../atoms/NotificationItem';\nimport type { INotificationItem, INotificationsHistory } from '../index';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst StatusContainer = styled.h2`\n text-transform: uppercase;\n padding: 10px 0 10px 20px;\n font-size: 14px;\n font-weight: 500;\n color: var(--grey-12);\n border-bottom: var(--dividing-line) 1px solid;\n margin: 0;\n`;\n\nconst NotificationWrapper = styled.div`\n border-bottom: var(--dividing-line) 1px solid;\n`;\n\nconst renderNotifications = (items: INotificationItem[], type: string) =>\n items.map((item) => {\n return (\n <NotificationWrapper key={`alert-${type}-${item.time}-${item.title}`}>\n <NotificationItem {...item} />\n </NotificationWrapper>\n );\n });\n\nconst NotificationsHistory: React.FC<INotificationsHistory> = ({\n read,\n unread,\n noNotificationsText = 'No new notifications',\n readNotificationsText = 'New',\n unreadNotificationsText = 'Read',\n}) => {\n if (read.length === 0 && unread.length === 0) {\n return (\n <Container>\n <StatusContainer>{noNotificationsText}</StatusContainer>\n </Container>\n );\n }\n\n return (\n <Container>\n {unread && (\n <Fragment>\n <StatusContainer>{readNotificationsText}</StatusContainer>\n {renderNotifications(unread, 'unread')}\n </Fragment>\n )}\n {read && (\n <Fragment>\n <StatusContainer>{unreadNotificationsText}</StatusContainer>\n {renderNotifications(read, 'read')}\n </Fragment>\n )}\n </Container>\n );\n};\n\nexport default NotificationsHistory;\n","import type React from 'react';\nimport { useState } from 'react';\nimport ReactDom from 'react-dom';\nimport styled, { css, keyframes } from 'styled-components';\nimport { removeAutoFillStyle } from '../../common';\nimport Icon from '../../Icons/Icon';\nimport StatusIcon from '../../Icons/StatusIcon';\nimport TopBarBadge from '../atoms/TopBarBadge';\nimport type { ITopBar } from '../index';\nimport UserMenu from '../molecules/UserMenu';\nimport NotificationsHistory from './NotificationsHistory';\n\nconst Container = styled.div`\n z-index: 9;\n position: sticky;\n top: 0;\n height: 56px;\n padding: 0 16px 0 24px;\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-self: flex-start;\n border-bottom: 1px solid var(--dividing-line);\n background: var(--grey-2);\n box-shadow: 5px 0px 10px 0px var(--primary-a2);\n`;\n\nconst RightArea = styled.div`\n display: flex;\n align-items: center;\n gap: 24px;\n height: 100%;\n`;\n\nconst SearchBar = styled.div`\n flex: 0 1 500px;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 8px;\n`;\n\nconst IconWrapper = styled.div`\n flex: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n > div {\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n`;\n\nconst SearchInput = styled.input`\n ${removeAutoFillStyle};\n font-family: var(--font-data);\n flex: 1;\n height: 35px;\n line-height: 35px;\n border: none;\n outline: none;\n background: transparent;\n color: var(--grey-10);\n font-size: 14px;\n\n &::placeholder {\n font-family: var(--font-data);\n font-weight: 400;\n font-style: italic;\n font-size: 14px;\n color: var(--grey-8);\n }\n\n &:lang(ja)::placeholder {\n font-style: normal;\n };\n`;\n\nconst ButtonArea = styled.div`\n height: inherit;\n display: flex;\n gap: 0;\n`;\n\nconst buttonClickAnimation = keyframes`\n 0% {\n opacity:0.9;\n transform: scale(0.85);\n }\n 100% {\n opacity:1;\n transform: scale(1);\n }\n`;\n\nconst DrawerToggle = styled.button.attrs({ type: 'button' })<{ $isActive: boolean }>`\n position: relative;\n flex: 0 56px;\n width: 56px;\n height: inherit;\n display: flex;\n justify-content: center;\n align-items: center;\n border: none;\n background: none;\n outline: none;\n cursor: pointer;\n\n &::after {\n content: '';\n position: absolute;\n bottom: 0;\n right: 0;\n left: 0;\n height: 5px;\n background-color: transparent;\n border-radius: 2px 2px 0 0;\n }\n\n transition: background-color var(--speed-normal) var(--easing-primary-out);\n\n svg {\n transition: transform var(--speed-normal) var(--easing-primary-out);\n }\n\n &:hover {\n opacity: 0.9;\n &::after {\n background-color: var(--primary-6);\n }\n }\n\n ${({ $isActive }) =>\n $isActive &&\n css`\n &, &:hover {\n border-bottom-color: var(--primary-9);\n &::after {\n background-color: var(--primary-9);\n }\n svg {\n transform: scale(1);\n animation: ${buttonClickAnimation} 0.35s cubic-bezier(0.7, 0, 0.84, 0);\n }\n\n }\n `}\n`;\n\nconst DrawerPortalWrapper = styled.div``;\n\nconst Drawer = styled.div<{ $isOpen: boolean; $baseWidth?: string }>`\n font-family: var(--font-ui);\n\n position: fixed;\n right: -10px;\n top: 56px;\n bottom: 0;\n background: var(--global-element-background);\n border-left: var(--dividing-line) 1px solid;\n\n width: ${({ $baseWidth }) => ($baseWidth ? $baseWidth : `200px`)};\n opacity: 0;\n visibility: hidden;\n z-index: 100;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n\n transition:\n opacity var(--speed-normal) var(--easing-primary-in-out),\n right var(--speed-normal) var(--easing-primary-in-out);\n\n ${({ $isOpen }) =>\n $isOpen &&\n css`\n right: 0;\n opacity: 1;\n visibility: visible;\n `}\n`;\n\n/**\n * Negative margin hides the scroll;\n * Reviewed on Chrome an Firefox\n */\nconst NotificationsContainer = styled.div`\n overflow-y: scroll;\n margin-right: -17px;\n`;\n\ntype IDrawerKeys = 'user' | 'notifications' | 'custom' | null;\n\nconst TopBar: React.FC<ITopBar> = ({\n hasNotifications = false,\n hasLanguage = false,\n selectedLanguageText = '',\n languageOptionsText,\n selectedLangAttribute,\n hasLogout = true,\n logoutLink = '/logout',\n logoutText = 'Logout',\n hasSearch = false,\n hasCurrentUser = true,\n currentUserText = 'Current User',\n accountOptionText = 'Account Options',\n searchPlaceholder = 'Search for devices, analysis tasks, etc.',\n userSubmenu = [],\n userDrawerBespoke,\n loggedInUser,\n notificationsHistory,\n customDrawer,\n hasSwitchTheme = false,\n isLightMode = true,\n switchThemeText = 'SWITCH THEME',\n selectedThemeText = '',\n onLogout = () => {},\n onLanguageToggle = () => {},\n onThemeToggle = () => {},\n userDrawerFooter,\n userDrawerMeta,\n onUserDrawerMetaClick = () => {},\n hasUserDrawerMeta,\n copySuccessMessage,\n includeCopyTitle,\n hasUserDrawerFooter,\n badge,\n}) => {\n const [openDrawer, setOpenDrawer] = useState<IDrawerKeys>(null);\n\n const toggleDrawers = (drawerKey: IDrawerKeys) => {\n setOpenDrawer((prevDrawer) => {\n // if prevDrawer is open, just update to null to close\n if (prevDrawer === drawerKey) {\n return null;\n }\n\n return drawerKey;\n });\n };\n\n return (\n <Container>\n {hasSearch ? (\n <SearchBar>\n <IconWrapper>\n <Icon icon='Search' size={16} color='grey-6' />\n </IconWrapper>\n <SearchInput placeholder={searchPlaceholder} />\n </SearchBar>\n ) : (\n <div />\n )}\n <RightArea>\n {badge && <TopBarBadge {...badge} />}\n <ButtonArea>\n {customDrawer && (\n <DrawerToggle\n $isActive={openDrawer === 'custom'}\n onClick={() => toggleDrawers('custom')}\n >\n <StatusIcon {...customDrawer} />\n </DrawerToggle>\n )}\n {hasNotifications && (\n <DrawerToggle\n $isActive={openDrawer === 'notifications'}\n onClick={() => toggleDrawers('notifications')}\n >\n <Icon icon='Notifications' size={20} color='dimmed' />\n </DrawerToggle>\n )}\n <DrawerToggle $isActive={openDrawer === 'user'} onClick={() => toggleDrawers('user')}>\n <Icon icon='UserProfile' size={20} color='dimmed' />\n </DrawerToggle>\n </ButtonArea>\n </RightArea>\n\n {ReactDom.createPortal(\n <DrawerPortalWrapper>\n {/* User Menu */}\n <Drawer $isOpen={openDrawer === 'user'}>\n <UserMenu\n {...{\n hasLanguage,\n hasLogout,\n logoutLink,\n logoutText,\n hasCurrentUser,\n currentUserText,\n accountOptionText,\n userSubmenu,\n userDrawerBespoke,\n loggedInUser,\n onLogout,\n onLanguageToggle,\n selectedLanguageText,\n languageOptionsText,\n selectedLangAttribute,\n hasSwitchTheme,\n isLightMode,\n switchThemeText,\n selectedThemeText,\n onThemeToggle,\n onUserDrawerMetaClick,\n userDrawerFooter,\n userDrawerMeta,\n hasUserDrawerMeta,\n copySuccessMessage,\n includeCopyTitle,\n hasUserDrawerFooter,\n }}\n />\n </Drawer>\n\n {/* Notifications */}\n {hasNotifications ? (\n <Drawer $isOpen={openDrawer === 'notifications'} $baseWidth='300px'>\n <NotificationsContainer>\n {notificationsHistory ? <NotificationsHistory {...notificationsHistory} /> : null}\n </NotificationsContainer>\n </Drawer>\n ) : null}\n\n {customDrawer && (\n <Drawer\n $isOpen={openDrawer === 'custom'}\n $baseWidth={customDrawer.width ? customDrawer.width : '200px'}\n >\n {customDrawer.customComponent}\n </Drawer>\n )}\n </DrawerPortalWrapper>,\n document.body\n )}\n </Container>\n );\n};\n\nexport default TopBar;\n","import { useCallback, useLayoutEffect, useReducer } from 'react';\n\nimport useBreakpoints, { type IBreakpoints } from './useBreakpoints';\n\ninterface IMenuState {\n desktopSize: IBreakpoints;\n isMenuPinned: boolean;\n isMenuOpen: boolean;\n canPin: boolean;\n}\n\ninterface SET_MENU {\n type: 'SET_MENU';\n data: {\n desktopSize: IBreakpoints;\n defaultMenuOpen: boolean;\n canAlwaysPin?: boolean;\n };\n}\n\ninterface SET_OPEN {\n type: 'SET_OPEN';\n}\n\ninterface SET_CLOSE {\n type: 'SET_CLOSE';\n}\n\ninterface TOGGLE_PIN {\n type: 'TOGGLE_PIN';\n}\n\ntype IMenuActions = SET_MENU | SET_OPEN | SET_CLOSE | TOGGLE_PIN;\n\nconst menuReducer = (state: IMenuState, action: IMenuActions) => {\n switch (action.type) {\n // initial State based in props and desktop size and local storage\n case 'SET_MENU': {\n const openValueStorage = localStorage.getItem(`${window.location.hostname}_isMenuOpen`);\n\n let isMenuOpen =\n openValueStorage === 'true' || (openValueStorage === null && !!action.data.defaultMenuOpen);\n let isMenuPinned = openValueStorage === 'true' && !!action.data.canAlwaysPin;\n const canPin = action.data.desktopSize === 'xlarge' || !!action.data.canAlwaysPin;\n\n if (action.data.desktopSize === 'xxlarge' && action.data.canAlwaysPin === false) {\n isMenuOpen = true;\n isMenuPinned = true;\n }\n\n return {\n ...state,\n desktopSize: action.data.desktopSize,\n isMenuOpen,\n isMenuPinned,\n canPin,\n };\n }\n\n // handle autoOpen based on desktop\n case 'SET_OPEN': {\n if (state.isMenuOpen === true) {\n return state;\n }\n if (state.desktopSize === 'xxlarge' && !state.canPin) {\n return state;\n }\n\n return {\n ...state,\n isMenuOpen: true,\n };\n }\n\n // handle auto close based on desktop\n case 'SET_CLOSE': {\n if (state.isMenuOpen === false) {\n return state;\n }\n if (state.desktopSize === 'xxlarge' && !state.canPin) {\n return state;\n }\n if (state.isMenuPinned === true) {\n return state;\n }\n\n return {\n ...state,\n isMenuOpen: false,\n };\n }\n\n case 'TOGGLE_PIN': {\n if (!state.canPin) {\n return state;\n }\n\n let isMenuOpen = true;\n\n if (state.isMenuPinned) {\n localStorage.setItem(`${window.location.hostname}_isMenuOpen`, 'false');\n isMenuOpen = false;\n } else {\n localStorage.setItem(`${window.location.hostname}_isMenuOpen`, 'true');\n }\n\n return {\n ...state,\n isMenuOpen,\n isMenuPinned: !state.isMenuPinned,\n };\n }\n\n default:\n console.error(`useMenu: Action ${(action as { type: string }).type} not registered.`);\n return state;\n }\n};\n\nconst menuState: IMenuState = {\n desktopSize: 'large',\n isMenuPinned: false,\n isMenuOpen: false,\n canPin: false,\n};\n\nconst useMenu = (defaultMenuOpen: boolean, canAlwaysPin: boolean) => {\n const { activeScreen } = useBreakpoints();\n const [state, dispatch] = useReducer(menuReducer, menuState);\n\n const setMenu = useCallback(\n (defaultMenuOpen: boolean, canAlwaysPin: boolean, desktopSize: IBreakpoints) => {\n dispatch({ type: 'SET_MENU', data: { defaultMenuOpen, desktopSize, canAlwaysPin } });\n },\n []\n );\n\n const setMenuOpen = useCallback(() => {\n dispatch({ type: 'SET_OPEN' });\n }, []);\n\n const setMenuClose = useCallback(() => {\n dispatch({ type: 'SET_CLOSE' });\n }, []);\n\n const togglePinned = useCallback(() => {\n dispatch({ type: 'TOGGLE_PIN' });\n }, []);\n\n useLayoutEffect(() => {\n setMenu(defaultMenuOpen, canAlwaysPin, activeScreen);\n }, [activeScreen, defaultMenuOpen, canAlwaysPin, setMenu]);\n\n return {\n menuState: state,\n setMenuOpen,\n setMenuClose,\n togglePinned,\n };\n};\n\nexport default useMenu;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\n\nimport Icon, { IconWrapper } from '../../Icons/Icon';\n\nconst ContextTitle = styled.div<{ $compact?: boolean }>`\n opacity: 0;\n transition: opacity var(--speed-fast) var(--easing-primary-in-out);\n\n ${({ $compact }) =>\n $compact &&\n css`\n font-size:14px;\n `}\n`;\n\nconst ContextIcon = styled.div<{ $compact?: boolean }>`\n background-color: var(--global-menu-icon-background-default);\n transition: background-color var(--speed-fast) var(--easing-primary-out);\n \n flex: 0 0 40px;\n width: 40px;\n height: 40px;\n margin: 0 20px;\n\n border-radius: 7px;\n display:flex;\n justify-content:center;\n align-items:center;\n\n svg {\n display: block;\n }\n`;\n\nconst ContextIndicator = styled.div`\n width: 12px;\n height: 12px;\n flex: 0 0 14px;\n margin: 0 20px 0 auto;\n display: flex;\n justify-content: center;\n align-items: center;\n \n opacity: 0;\n transition: opacity 0 var(--easing-primary-out);\n\n svg {\n display: block;\n height: 12px;\n width: 12px;\n }\n`;\n\nconst ContextActionBaseCSS = css`\n -webkit-tap-highlight-color: transparent;\n border: none;\n background: none;\n display: flex;\n justify-content:left;\n align-items:center;\n flex-wrap: wrap;\n cursor: pointer;\n width: 100%;\n outline: none;\n padding: 0;\n text-decoration: none;\n font-family: var(--font-ui);\n font-weight: 500;\n font-size: 16px;\n color: var(--grey-11);\n\n &:hover{\n color: var(--grey-12);\n }\n`;\n\nconst StyledAnchor = styled.a`\n display: flex;\n text-decoration: none;\n`;\n\nconst ExternalIconWrapper = styled.div`\n margin-left: 15px;\n`;\n\nconst ContextWrapper = styled.div<{ $menuOpen?: boolean }>`\n ${ContextActionBaseCSS}\n\n ${({ $menuOpen }) =>\n $menuOpen &&\n css`\n ${ContextTitle}{\n opacity: 1;\n }\n`}\n\n &:hover ${ContextIcon}{\n opacity: 1;\n background-color: var(--global-menu-icon-background-hover);\n\n ${IconWrapper}{\n [stroke]{\n stroke: var(--inverse);\n }\n }\n }\n`;\n\nconst ContextActionA = styled(Link)<{ $menuOpen?: boolean; $isActive: boolean }>`\n ${ContextActionBaseCSS}\n\n ${({ $menuOpen }) =>\n $menuOpen &&\n css`\n ${ContextTitle}{\n opacity: 1;\n }\n `}\n\n &:hover ${ContextIcon}{\n opacity: 1;\n background-color: var(--global-menu-icon-background-hover);\n\n ${IconWrapper}{\n [stroke]{\n stroke: var(--inverse);\n }\n }\n }\n\n ${({ $isActive }) =>\n $isActive &&\n css`\n color: var(--grey-12);\n\n ${ContextIcon},\n &:hover ${ContextIcon}{\n background-color: var(--global-menu-icon-background-active);\n }\n `}\n`;\nconst ContextActionButton = styled.button<{ $menuOpen?: boolean; $isActive: boolean }>`\n ${ContextActionBaseCSS}\n\n ${({ $menuOpen }) =>\n $menuOpen &&\n css`\n ${ContextTitle}{\n opacity: 1;\n }\n\n ${ContextIndicator}{\n opacity: 1;\n transition: opacity var(--speed-normal) var(--easing-primary-in-out) var(--speed-fast);\n }\n `}\n\n &:hover ${ContextIcon}{\n opacity: 1;\n background-color: var(--global-menu-icon-background-hover);\n\n ${IconWrapper}{\n [stroke]{\n stroke: var(--inverse);\n }\n }\n }\n\n ${({ $isActive }) =>\n $isActive &&\n css`\n ${ContextIcon},\n &:hover ${ContextIcon}{\n background-color: var(--global-menu-icon-background-active);\n }\n `}\n`;\n\ninterface IProps {\n title: string;\n icon?: string;\n isActive: boolean;\n menuOpen?: boolean;\n submenuOpen?: boolean;\n hasSubmenu?: boolean;\n contextKey?: number;\n href?: string;\n compact?: boolean;\n isExternalLink?: boolean;\n // biome-ignore lint/suspicious/noExplicitAny: tightening to unknown[] exposes a latent type mismatch in MainMenu — see #643. Out of scope for the Biome migration.\n onClickCallback?: (...args: any[]) => void;\n}\n\nconst ContextItem: React.FC<IProps> = ({\n hasSubmenu = false,\n contextKey = -1,\n submenuOpen,\n menuOpen,\n title,\n href,\n icon = '',\n compact,\n isActive,\n isExternalLink,\n onClickCallback,\n}) => {\n const internal = (\n <React.Fragment>\n <ContextIcon $compact={compact}>\n <Icon icon={icon} color={isActive ? 'inverse' : 'dimmed'} size={20} />\n </ContextIcon>\n <ContextTitle $compact={compact}>{title}</ContextTitle>\n {hasSubmenu ? (\n <ContextIndicator>\n <Icon icon={submenuOpen ? 'Up' : 'Down'} color='dimmed' />\n </ContextIndicator>\n ) : null}\n </React.Fragment>\n );\n\n if (hasSubmenu) {\n return (\n <ContextActionButton\n $menuOpen={menuOpen}\n $isActive={isActive}\n onClick={() => onClickCallback?.(contextKey)}\n >\n {internal}\n </ContextActionButton>\n );\n } else {\n return isExternalLink ? (\n <StyledAnchor href={href} target='_blank'>\n <ContextWrapper $menuOpen={menuOpen}>\n {internal}\n <ExternalIconWrapper>\n <Icon icon='ExternalLink' color='dimmed' size={12} />\n </ExternalIconWrapper>\n </ContextWrapper>\n </StyledAnchor>\n ) : (\n <ContextActionA\n $menuOpen={menuOpen}\n to={href ? href : '#'}\n $isActive={isActive}\n onClick={() => onClickCallback?.(contextKey)}\n >\n {internal}\n </ContextActionA>\n );\n }\n};\n\nexport default ContextItem;\n","import type React from 'react';\nimport { useRef } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\nimport { resetButtonStyles } from '../../common/index';\nimport Icon from '../../Icons/Icon';\nimport type { IMenuItemSubmenu, IMenuItemTop } from '..';\nimport ContextItem from './ContextItem';\n\nconst Submenu = styled.ul`\n display: block;\n position: relative;\n margin-left: 40px;\n padding: 0;\n\n`;\nconst SubmenuHeader = styled.div`\n display: block;\n height: 40px;\n margin-left: 40px;\n`;\n\nconst SubmenuContainerInner = styled.div`\n overflow: hidden;\n`;\n\nconst SubmenuItemTitle = styled.span`\n display: block;\n font-family: var(--font-ui);\n font-size: 14px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.35px;\n color: var(--grey-11);\n`;\n\nconst SubmenuItemLink = styled(Link)`\n ${resetButtonStyles};\n display: block;\n`;\n\nconst ExternalIconWrapper = styled.div`\n margin-left: 15px;\n`;\n\nconst SubmenuItemAnchor = styled.a`\n ${resetButtonStyles};\n display: flex;\n align-items: center;\n`;\n\nconst SubmenuItem = styled.li<{ $isActive?: boolean }>`\n display: block;\n height: 30px;\n padding-left: 40px;\n position: relative;\n\n &::after {\n display: block;\n content: '';\n height: 1px;\n width: 14px;\n position: absolute;\n left: 0;\n top: 10px;\n background: var(--dividing-line);\n }\n\n ${SubmenuItemLink}, ${SubmenuItemAnchor}{\n font-family: var(--font-ui);\n font-size: 14px;\n font-weight: 400;\n text-decoration: none;\n color: var(--grey-11);\n\n ${({ $isActive }) => css`\n\n &:hover {\n color: var(--grey-12);\n }\n\n ${\n $isActive &&\n css`\n &, &:hover {\n color: var(--grey-11);\n font-weight: 600;\n }\n `\n }\n\n `};\n\n }\n`;\n\nconst SubmenuContainer = styled.div`\n position: relative;\n overflow: hidden;\n\n transition:\n grid-template-rows var(--speed-normal) var(--easing-primary-in-out),\n opacity var(--speed-fast) var(--easing-primary-in-out);\n\n &::after {\n display: block;\n content: '';\n width: 1px;\n position: absolute;\n left: 40px;\n top: 0;\n bottom: 35px;\n background: var(--dividing-line);\n }\n\n`;\n\nconst ContextContainer = styled.div<{ $open: boolean; $mobileMenu?: boolean }>`\n min-height: ${({ $mobileMenu }) => ($mobileMenu ? '30px' : '70px')};\n width: inherit;\n\n ${SubmenuContainer}{\n display: grid;\n grid-template-rows: 0fr;\n };\n\n ${({ $open }) =>\n $open &&\n css`\n ${SubmenuContainer}{\n grid-template-rows: 1fr;\n\n transition:\n grid-template-rows var(--speed-normal) var(--easing-primary-in-out),\n opacity var(--speed-fast) var(--easing-primary-in-out);\n\n opacity: 1;\n }\n `};\n`;\n\ninterface IProps {\n item: IMenuItemTop;\n contextKey: number;\n submenuOpen: boolean;\n menuOpen?: boolean;\n topLevelPath: string;\n mobileMenu?: boolean;\n onClickCallback?: (contextKey: number) => void;\n}\n\nconst NavigationItem: React.FC<IProps> = ({\n item,\n menuOpen,\n submenuOpen,\n contextKey,\n topLevelPath,\n mobileMenu = false,\n onClickCallback,\n}) => {\n const { icon, title, href, submenu, isExternalLink } = item;\n const isActive = topLevelPath === href;\n\n const refSubmenu = useRef<HTMLDivElement>(null);\n\n const submenus: React.ReactElement[] = generateSubmenus(submenu, onClickCallback) || [];\n const hasSubmenu: boolean = submenus.length > 0;\n\n return (\n <ContextContainer $open={submenuOpen} $mobileMenu={mobileMenu}>\n <ContextItem\n {...{\n title,\n href,\n isActive,\n icon,\n hasSubmenu,\n isExternalLink,\n submenuOpen,\n menuOpen,\n onClickCallback,\n contextKey,\n }}\n />\n {hasSubmenu ? (\n <SubmenuContainer ref={refSubmenu}>\n <SubmenuContainerInner>{submenus}</SubmenuContainerInner>\n </SubmenuContainer>\n ) : null}\n </ContextContainer>\n );\n};\n\n/**\n * Generate the submenu component structure.\n * @param submenu JSON Object with the menu structure\n */\nconst generateSubmenus = (\n submenu?: IMenuItemSubmenu[],\n onClickCallback?: (contextKey: number) => void\n) => {\n if (!submenu) {\n return;\n }\n\n const grouping: React.ReactElement[][] = [];\n const output: React.ReactElement[] = [];\n\n // First submenu\n grouping.push([]);\n\n submenu.forEach((item, key) => {\n const { title, href, isExternalLink } = item;\n if (href) {\n // Treat as menu item/\n if (isExternalLink) {\n grouping[grouping.length - 1].push(\n // biome-ignore lint/suspicious/noArrayIndexKey: forEach iterates a static submenu config that doesn't reorder; submenu items aren't all guaranteed to have a unique field. #646.\n <SubmenuItem key={key} $isActive={false}>\n <SubmenuItemAnchor href={href} target='_blank'>\n {title}\n <ExternalIconWrapper>\n <Icon icon='ExternalLink' color='dimmed' size={10} />\n </ExternalIconWrapper>\n </SubmenuItemAnchor>\n </SubmenuItem>\n );\n } else {\n grouping[grouping.length - 1].push(\n // biome-ignore lint/suspicious/noArrayIndexKey: see above. #646.\n <SubmenuItem key={key} $isActive={false}>\n <SubmenuItemLink to={href} onClick={() => onClickCallback?.(-1)}>\n {title}\n </SubmenuItemLink>\n </SubmenuItem>\n );\n }\n } else {\n // Assume this is a grouping header.\n if (grouping[grouping.length - 1].length > 1) {\n grouping.push([]);\n }\n grouping[grouping.length - 1].push(\n // biome-ignore lint/suspicious/noArrayIndexKey: see above. #646.\n <SubmenuHeader key={key}>\n <SubmenuItemTitle>{title}</SubmenuItemTitle>\n </SubmenuHeader>\n );\n }\n });\n\n grouping.forEach((group, key) => {\n // biome-ignore lint/suspicious/noArrayIndexKey: grouping is built in this same function; the index is the only identity. #646.\n output.push(<Submenu key={key}>{group}</Submenu>);\n });\n\n return output;\n};\n\nexport default NavigationItem;\n","import type React from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport ReactDom from 'react-dom';\nimport { Link, useLocation } from 'react-router-dom';\nimport styled, { css } from 'styled-components';\nimport { getTopLevelPath } from '../../helpers/index';\nimport type { IBreakpoints } from '../../hooks/useBreakpoints';\nimport useMenu from '../../hooks/useMenu';\n\nimport SvgLogoMark from '../../svg/LogoMark';\nimport SvgLogoText from '../../svg/LogoText';\nimport type { IMenu } from '..';\nimport ContextItem from '../atoms/ContextItem';\nimport NavigationItem from '../atoms/NavigationItem';\n\nconst Logo = styled(Link)`\n height: 50px;\n margin: 0 20px 55px 15px;\n display: flex;\n\n object {\n pointer-events: none;\n }\n`;\nconst LogoMark = styled.div`\n height: 50px;\n flex: 0 0 50px;\n margin-right: 15px;\n display: flex;\n justify-content: center;\n align-items: center;\n\n`;\nconst LogoType = styled.div`\n opacity: 0;\n flex: 1;\n height: 50px;\n display: flex;\n justify-content: left;\n align-items: center;\n`;\n\nconst SVGObject = styled.object``;\nconst SVGObjectText = styled.object`\n max-width: 180px;\n`;\n\nconst NavigationContainer = styled.div``;\n\nconst MenuFooter = styled.div`\n background: var(--global-element-background);\n display: flex;\n flex-direction: column;\n flex: 1;\n justify-content: flex-end;\n`;\n\nconst FooterItemContainer = styled.div`\n min-height: 70px;\n`;\n\nconst PushContainer = styled.div<{ $isPinned: boolean }>`\n position: relative;\n height: 100%;\n ${({ $isPinned }) => css`\n width: ${$isPinned ? `var(--global-menu-width-open)` : `var(--global-menu-width-closed)`};\n `};\n`;\n\nconst Container = styled.div<{ $open: boolean; $desktopSize: IBreakpoints }>`\n z-index: 99;\n position: fixed;\n top: 0;\n left: 0;\n ${({ $open, $desktopSize }) => css`\n background-color: var(--global-element-background);\n box-shadow: 0px 0px 7px 0px var(--primary-a2);\n width: ${$open ? `var(--global-menu-width-open)` : `var(--global-menu-width-closed)`};\n border-right: 1px solid var(--dividing-line);\n\n ${\n $desktopSize === 'xxlarge'\n ? ``\n : css`\n transition: width var(--speed-normal) var(--easing-primary-in);\n `\n };\n\n ${LogoType}{\n transition: opacity var(--speed-normal) var(--easing-primary-in-out);\n opacity: ${$open ? 1 : 0};\n }\n `}\n\n box-sizing: border-box;\n height: 100%;\n padding: 20px 0 0 0;\n overflow: hidden;\n`;\n\nconst ContainerInner = styled.div`\n width: var(--global-menu-width-open);\n display: flex;\n flex-direction: column;\n height: 100%;\n`;\n\nconst MainMenu: React.FC<IMenu> = ({\n content,\n home = '/',\n logoMark,\n logoText,\n keepOpenText = 'Keep Open',\n autoHideText = 'Auto-Hide',\n supportUrl,\n supportText = 'Help & Support',\n defaultMenuOpen = true,\n canAlwaysPin = false,\n onMenuToggle = () => {},\n}) => {\n const { menuState, setMenuOpen, setMenuClose, togglePinned } = useMenu(\n defaultMenuOpen,\n canAlwaysPin\n );\n\n const [focusedContext, setFocusedContext] = useState<number>(0);\n const location = useLocation();\n\n /* Handling of menu open, closing and pinning. */\n const autoMenuOpen = useCallback(\n (e: React.PointerEvent) => {\n if (e.pointerType === 'touch') {\n return;\n }\n setMenuOpen();\n },\n [setMenuOpen]\n );\n\n const autoMenuClose = useCallback(() => {\n // TODO: Move the focused back to the active view so it re-opens on current context.\n setMenuClose();\n }, [setMenuClose]);\n\n const toggleMenuPin = useCallback(\n (e: React.PointerEvent) => {\n if (e.pointerType === 'touch') {\n return;\n }\n togglePinned();\n },\n [togglePinned]\n );\n\n useEffect(() => {\n onMenuToggle(menuState.isMenuOpen);\n }, [menuState.isMenuOpen, onMenuToggle]);\n\n /** Manage which context is open. */\n /** Submenu sends -1 because context only is for the parent\n * The -1 value is important in the mobile version of this menu\n */\n const setFocusedContextCb = useCallback(\n (contextKey: number) => {\n if (contextKey === -1) {\n return;\n }\n\n setFocusedContext(focusedContext !== contextKey ? contextKey : -1);\n },\n [focusedContext]\n );\n\n return (\n <PushContainer $isPinned={menuState.isMenuPinned}>\n {ReactDom.createPortal(\n <Container\n $open={menuState.isMenuOpen}\n $desktopSize={menuState.desktopSize}\n onPointerEnter={menuState.isMenuPinned ? () => {} : autoMenuOpen}\n onTouchStart={() => console.debug('touch')}\n onMouseLeave={menuState.isMenuPinned ? () => {} : autoMenuClose}\n >\n <ContainerInner>\n <Logo to={home}>\n <LogoMark>\n {logoMark ? <SVGObject type='image/svg+xml' data={logoMark} /> : <SvgLogoMark />}\n </LogoMark>\n <LogoType>\n {logoText ? (\n <SVGObjectText type='image/svg+xml' data={logoText} />\n ) : (\n <SvgLogoText />\n )}\n </LogoType>\n </Logo>\n\n <NavigationContainer>\n {content.items.map((item, key) => {\n return (\n <NavigationItem\n topLevelPath={getTopLevelPath(location.pathname)}\n // biome-ignore lint/suspicious/noArrayIndexKey: index is also passed as contextKey and compared against focusedContext — index has structural meaning here. #646.\n key={key}\n contextKey={key}\n menuOpen={menuState.isMenuOpen}\n submenuOpen={key === focusedContext && menuState.isMenuOpen}\n onClickCallback={setFocusedContextCb}\n {...{ item, focusedContext }}\n />\n );\n })}\n </NavigationContainer>\n\n <MenuFooter>\n {supportUrl && (\n <FooterItemContainer>\n <ContextItem\n compact\n isActive={false}\n icon='Question'\n title={supportText}\n href={supportUrl}\n menuOpen={menuState.isMenuOpen}\n />\n </FooterItemContainer>\n )}\n\n {menuState.canPin ? (\n <FooterItemContainer>\n <ContextItem\n compact\n isActive={false}\n icon={menuState.isMenuOpen && menuState.isMenuPinned ? 'Left' : 'Menu'}\n title={menuState.isMenuPinned ? keepOpenText : autoHideText}\n onClickCallback={toggleMenuPin}\n menuOpen={menuState.isMenuOpen}\n />\n </FooterItemContainer>\n ) : null}\n </MenuFooter>\n </ContainerInner>\n </Container>,\n document.body\n )}\n </PushContainer>\n );\n};\n\nexport default MainMenu;\n","import type React from 'react';\nimport { useCallback, useContext } from 'react';\nimport styled, { css } from 'styled-components';\nimport type { IStatusDot } from '../..';\nimport { resetButtonStyles } from '../../common/index';\nimport { IconWrapper } from '../../Icons/Icon';\nimport StatusIcon from '../../Icons/StatusIcon';\nimport { type ContextProps, TabContext } from '../Tabs';\n\nconst Container = styled.button`\n ${resetButtonStyles}\n flex-basis: auto;\n flex-grow: 1;\n`;\n\nconst LinkTab = styled.div<{ $isActive: boolean }>`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n\n ${({ theme }) => css`\n transition: border var(--speed-normal) var(--easing-primary-in-out);\n border-bottom: 5px solid ${theme.colors.menu.indicator};\n\n ${IconWrapper} {\n [stroke]{\n stroke: var(--dimmed);\n }\n }\n\n &:hover {\n border-bottom-color: ${theme.colors.menu.hover};\n ${IconWrapper} {\n [stroke]{\n stroke: ${theme.colors.menu.hover};\n }\n }\n }\n `};\n\n ${({ $isActive, theme }) =>\n $isActive &&\n css`\n &, &:hover {\n border-bottom-color: ${theme.colors.menu.active};\n ${IconWrapper} {\n [stroke]{\n stroke: ${theme.colors.menu.active};\n }\n }\n }\n `}\n`;\n\ninterface IMobileTab {\n tabFor: string;\n icon: string;\n closeId: string;\n counter?: number;\n status?: IStatusDot;\n customComponent?: React.ReactElement;\n}\n\nconst MobileTab: React.FC<IMobileTab> = ({\n tabFor,\n icon,\n closeId,\n counter,\n status,\n customComponent: _customComponent,\n ...props\n}) => {\n const { selected, setSelected }: ContextProps = useContext(TabContext);\n\n const onChangeTab = useCallback(\n (tabId: string) => {\n const newValue = selected === tabId ? closeId : tabId;\n setSelected(newValue);\n },\n [closeId, selected, setSelected]\n );\n\n return (\n <Container {...props} onClick={() => onChangeTab(tabFor)}>\n <LinkTab $isActive={selected === tabFor}>\n <StatusIcon {...{ icon, status, counter }} />\n </LinkTab>\n </Container>\n );\n};\n\nexport { MobileTab };\n","import type React from 'react';\nimport { type HTMLAttributes, useCallback, useContext } from 'react';\nimport styled, { css } from 'styled-components';\nimport { type ContextProps, TabContext } from '../Tabs';\n\nconst TabComponent = styled.div`\n margin-right: 39px;\n display: flex;\n align-items: center;\n line-height: 20px;\n`;\n\nconst TabLabel = styled.label<{ $active: boolean }>`\n height: 40px;\n ${({ theme }) => css`\n font-family: ${theme.fontFamily.ui};\n `}\n font-size: 15px;\n font-weight: ${({ $active }) => ($active ? '600' : '500')};\n letter-spacing: 0.09px;\n color: ${({ $active }) => ($active ? 'var(--primary-11)' : 'var(--grey-11)')};\n cursor: pointer;\n border-bottom: ${({ $active }) => ($active ? '2px solid var(--primary-11)' : '2px solid transparent')};\n padding-top: 6px;\n padding-bottom: 14px;\n flex-shrink: 0;\n user-select: none;\n`;\n\ninterface OwnProps {\n tabFor: string;\n}\n\ntype Props = OwnProps & HTMLAttributes<HTMLDivElement>;\n\nconst Tab: React.FC<Props> = ({ children, tabFor, onClick, ...props }) => {\n const { selected, setSelected }: ContextProps = useContext(TabContext);\n\n const onChangeTab = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n onClick?.(event);\n setSelected(tabFor);\n },\n [onClick, setSelected, tabFor]\n );\n\n return (\n <TabComponent {...props} onClick={onChangeTab}>\n <TabLabel $active={selected === tabFor}>{children}</TabLabel>\n </TabComponent>\n );\n};\n\nexport { Tab };\n","import type React from 'react';\nimport { useCallback, useContext } from 'react';\nimport styled, { css } from 'styled-components';\nimport Icon, { IconWrapper } from '../../Icons/Icon';\nimport { type ContextProps, TabContext } from '../Tabs';\n\nconst Container = styled.div<{ $active: boolean }>`\n display: flex;\n align-items: center;\n margin-right: 22px;\n padding-bottom: 7px;\n height: 60px;\n cursor: pointer;\n\n ${({ $active }) =>\n $active\n ? css`\n border-bottom: 3px solid var(--primary-11);\n `\n : css`\n border-bottom: 3px solid transparent;\n `};\n ${IconWrapper} {\n margin-left: 2px;\n flex-shrink: 0;\n }\n`;\n\nconst Title = styled.div<{ $active: boolean }>`\n font-size: 14px;\n font-family: ${({ theme }) => theme.fontFamily.ui};\n letter-spacing: 0.09px;\n font-weight: 500;\n color: ${({ $active }) => ($active ? 'var(--primary-11)' : 'var(--grey-11)')};\n margin-bottom: 5px;\n flex-shrink: 0;\n white-space: nowrap;\n text-overflow: ellipsis;\n`;\n\nconst SubTitle = styled.div`\n font-size: 12px;\n font-family: ${({ theme }) => theme.fontFamily.data};\n font-style: italic;\n &:lang(ja) {\n font-style: normal;\n }\n color: var(--grey-a10);\n flex-shrink: 0;\n white-space: nowrap;\n text-overflow: ellipsis;\n`;\n\nconst TextGroup = styled.div`\n margin-left: 12px;\n margin-right: 20px;\n`;\n\nexport interface ITabWithIcon {\n icon: string;\n title: string;\n subtitle?: string;\n tabFor: string;\n}\n\nconst TabWithIcon: React.FC<ITabWithIcon> = ({ icon, title, subtitle, tabFor, ...props }) => {\n const { selected, setSelected }: ContextProps = useContext(TabContext);\n\n const onChangeTab = useCallback(\n (tabId: string) => {\n setSelected(tabId);\n },\n [setSelected]\n );\n\n const active = selected === tabFor;\n\n return (\n <Container $active={active} {...props} onClick={() => onChangeTab(tabFor)}>\n <Icon {...{ icon }} weight='regular' size={15} color={active ? 'primary' : 'dimmed'} />\n <TextGroup>\n <Title $active={active}>{title}</Title>\n {subtitle && <SubTitle>{subtitle}</SubTitle>}\n </TextGroup>\n </Container>\n );\n};\n\nexport { TabWithIcon };\n","import type React from 'react';\nimport { type HTMLAttributes, useContext } from 'react';\nimport styled from 'styled-components';\nimport { type ContextProps, TabContext } from './Tabs';\n\nconst Container = styled.div`\n`;\n\ninterface OwnProps {\n tabId: string;\n}\n\ntype Props = OwnProps & HTMLAttributes<HTMLDivElement>;\n\nconst TabContent: React.FC<Props> = ({ children, tabId, ...props }) => {\n const { selected }: ContextProps = useContext(TabContext);\n\n return selected === tabId ? <Container {...props}>{children}</Container> : null;\n};\n\nexport { TabContent };\n","import type React from 'react';\nimport { type HTMLAttributes, useContext, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { type ContextProps, TabContext } from './Tabs';\n\nexport const TabListWrapper = styled.div`\n display: flex;\n flex-direction: row;\n`;\n\ninterface OwnProps {\n defaultTabId: string;\n}\n\ntype Props = OwnProps & HTMLAttributes<HTMLDivElement>;\n\nconst TabList: React.FC<Props> = ({ children, defaultTabId }) => {\n const { setSelected }: ContextProps = useContext(TabContext);\n\n useEffect(() => {\n setSelected(defaultTabId);\n }, [defaultTabId, setSelected]);\n\n return <TabListWrapper>{children}</TabListWrapper>;\n};\n\nexport { TabList };\n","import type React from 'react';\nimport type { ReactElement } from 'react';\nimport styled from 'styled-components';\nimport { type ITabWithIcon, TabWithIcon } from '../atoms/TabWithIcon';\nimport { TabContent } from '../TabContent';\nimport { TabList } from '../TabList';\nimport { Tabs } from '../Tabs';\n\nconst Container = styled.div``;\n\nconst TabListWrapper = styled.div<{ $paddingLeft?: string }>`\n padding-top: 10px;\n padding-left: ${({ $paddingLeft }) => ($paddingLeft ? $paddingLeft : '87px')};\n box-shadow: 0 -5px 5px 0 var(--black-a1);\n border-bottom: 1px solid var(--grey-6);\n overflow-y: auto;\n scrollbar-width: none; /* Firefox */\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n &::-webkit-scrollbar { /* WebKit */\n width: 0;\n height: 0;\n }\n`;\n\nexport interface ITabIcon extends ITabWithIcon {\n customComponent?: ReactElement;\n}\n\nexport interface ITabsWithIconBar {\n defaultTabId: string;\n tabList: ITabIcon[];\n paddingLeft?: string;\n}\n\nconst TabsWithIconBar: React.FC<ITabsWithIconBar> = ({ defaultTabId, tabList, paddingLeft }) => {\n return (\n <Container>\n <Tabs>\n <TabListWrapper $paddingLeft={paddingLeft}>\n <TabList {...{ defaultTabId }}>\n {tabList.map(({ icon, title, subtitle, tabFor }) => {\n return (\n <TabWithIcon key={`tabWithIcon-${tabFor}`} {...{ icon, title, subtitle, tabFor }} />\n );\n })}\n </TabList>\n </TabListWrapper>\n\n {tabList.map(({ tabFor, customComponent }) => {\n return (\n <TabContent key={`TabContent-${tabFor}`} tabId={tabFor}>\n {customComponent}\n </TabContent>\n );\n })}\n </Tabs>\n </Container>\n );\n};\n\nexport { TabsWithIconBar };\n","import type React from 'react';\nimport { type ButtonHTMLAttributes, useContext } from 'react';\nimport styled from 'styled-components';\nimport { resetButtonStyles } from '../../common/index';\nimport Icon from '../../Icons/Icon';\nimport { type ContextProps, TabContext } from '../../Tabs/Tabs';\nimport { MOBILE_CLOSE_HEIGHT } from './Layout';\n\nconst StyledButton = styled.button`\n ${resetButtonStyles}\n \n font-family: var(--font-ui);\n background-color: var(--global-element-background);\n border-top: 1px solid var(--dividing-line);\n font-weight: 400;\n color: var(--grey-10);\n \n height: ${MOBILE_CLOSE_HEIGHT}px;\n position: fixed;\n bottom: 0;\n font-size: 14px;\n outline: none;\n\n width: 100%;\n text-align: center;\n white-space: nowrap;\n padding: 0 40px;\n\n`;\n\nconst IconContainer = styled.div`\n height: inherit;\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n margin: 0 20px;\n\n svg {\n display:block;\n }\n`;\n\nconst TextWrapper = styled.div`\n text-transform: uppercase;\n`;\n\ninterface ICloseProps {\n closeId: string;\n closeText?: string;\n}\n\ntype IClose = ICloseProps & ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst CloseButton: React.FC<IClose> = ({\n closeId,\n closeText = 'CLOSE MENU',\n children,\n formAction,\n ...props\n}) => {\n const { setSelected }: ContextProps = useContext(TabContext);\n\n return (\n <StyledButton onClick={() => setSelected(closeId)} {...props}>\n <IconContainer>\n <Icon icon='CloseCompact' color='dimmed' size={16} />\n </IconContainer>\n <TextWrapper>{closeText}</TextWrapper>\n </StyledButton>\n );\n};\n\nexport default CloseButton;\n","import type React from 'react';\nimport { useContext } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { resetButtonStyles } from '../../common/index';\nimport SvgLogoMark from '../../svg/LogoMark';\nimport { type ContextProps, TabContext } from '../../Tabs/Tabs';\n\nconst Logo = styled(Link)`\n ${resetButtonStyles};\n display: flex;\n flex-basis: 0;\n flex-grow: 1;\n justify-content: center;\n align-items: center;\n object {\n pointer-events: none;\n height: 25px;\n }\n`;\nconst LogoMark = styled.div`\n margin-right: 15px;\n`;\n\nconst SVGObject = styled.object``;\n\ninterface ILogoLink {\n closeId: string;\n logoMark?: string;\n home?: string;\n}\n\nconst MobileLogoLink: React.FC<ILogoLink> = ({ home = '/', logoMark, closeId }) => {\n const { setSelected }: ContextProps = useContext(TabContext);\n\n return (\n <Logo to={home} onClick={() => setSelected(closeId)}>\n <LogoMark>\n {logoMark ? <SVGObject type='image/svg+xml' data={logoMark} /> : <SvgLogoMark />}\n </LogoMark>\n </Logo>\n );\n};\n\nexport default MobileLogoLink;\n","import type React from 'react';\nimport { useContext } from 'react';\nimport styled from 'styled-components';\nimport { type ContextProps, TabContext } from '../../Tabs/Tabs';\n\nimport { MOBILE_CLOSE_HEIGHT, MOBILE_NAVBAR_HEIGHT } from '../atoms/Layout';\n\n//\n// Containers height is full height but header and close button\n//\n\nconst Container = styled.div`\n position: relative;\n min-height: calc(100vh - ${MOBILE_NAVBAR_HEIGHT + MOBILE_CLOSE_HEIGHT}px);\n width: 100%;\n overflow-y: scroll;\n`;\n\nconst ContentWrapper = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n`;\n\ninterface OwnProps {\n closeId: string;\n children?: React.ReactNode;\n}\n\nconst MobileNavbarContent: React.FC<OwnProps> = ({ closeId, children }) => {\n const { selected }: ContextProps = useContext(TabContext);\n\n return selected === closeId ? null : (\n <Container>\n <ContentWrapper>{children}</ContentWrapper>\n </Container>\n );\n};\n\nexport default MobileNavbarContent;\n","import type React from 'react';\nimport { useCallback, useContext } from 'react';\nimport styled from 'styled-components';\nimport { type ContextProps, TabContext } from '../../Tabs/Tabs';\nimport type { ITopBar } from '../index';\nimport UserMenu from '../molecules/UserMenu';\n\nconst Container = styled.div`\n background: var(--global-element-background);\n\n z-index: 100;\n display: flex;\n flex-direction: column;\n`;\n\ninterface IMobileUserMenu extends ITopBar {\n closeId: string;\n}\n\nconst MobileUserMenu: React.FC<IMobileUserMenu> = ({\n closeId,\n hasLanguage,\n hasLogout,\n logoutLink,\n hasCurrentUser,\n userSubmenu,\n userDrawerBespoke,\n loggedInUser,\n onLogout,\n onLanguageToggle,\n ...props\n}) => {\n const { setSelected }: ContextProps = useContext(TabContext);\n\n const handleCloseMenu = useCallback(() => {\n setSelected(closeId);\n }, [closeId, setSelected]);\n\n return (\n <Container>\n <UserMenu\n {...{\n hasLanguage,\n hasLogout,\n logoutLink,\n hasCurrentUser,\n userSubmenu,\n userDrawerBespoke,\n loggedInUser,\n onLogout,\n onLanguageToggle,\n ...props,\n }}\n closeOnClick={handleCloseMenu}\n />\n </Container>\n );\n};\n\nexport default MobileUserMenu;\n","import type React from 'react';\nimport { useCallback, useContext, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { getTopLevelPath } from '../../helpers/index';\nimport { type ContextProps, TabContext } from '../../Tabs/Tabs';\nimport type { IMenu } from '..';\nimport ContextItem from '../atoms/ContextItem';\nimport NavigationItem from '../atoms/NavigationItem';\n\nconst Container = styled.div``;\n\nconst ItemWrapper = styled.div`\n padding: 14px 0;\n border-bottom: 1px solid var(--dividing-line);\n`;\n\ninterface IMobileMenu extends IMenu {\n closeId: string;\n}\n\nconst MobileMenu: React.FC<IMobileMenu> = ({\n content,\n supportUrl,\n supportText = 'Help & Support',\n closeId,\n}) => {\n const [focusedContext, setFocusedContext] = useState<number>(0);\n const location = useLocation();\n const { setSelected }: ContextProps = useContext(TabContext);\n\n /** Manage which context is open.\n * -1 is the value of a sub menu\n * In this mobile version of the menu will close after selecting an option\n * It will not close if the menu has a submenu to allow it to display the options\n */\n const setFocusedContextCb = useCallback(\n (contextKey: number) => {\n if (contextKey === -1 || !content.items[contextKey].submenu) {\n setSelected(closeId);\n }\n\n if (contextKey === -1) {\n return;\n }\n\n setFocusedContext(focusedContext !== contextKey ? contextKey : -1);\n },\n [closeId, content.items, focusedContext, setSelected]\n );\n\n const handleCloseMenu = useCallback(() => {\n setSelected(closeId);\n }, [closeId, setSelected]);\n\n return (\n <Container>\n {content.items.map((item, key) => {\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: index is also used as data-key and contextKey, and compared against focusedContext — structural meaning. #646.\n <ItemWrapper key={key} data-key={key}>\n <NavigationItem\n mobileMenu\n topLevelPath={getTopLevelPath(location.pathname)}\n contextKey={key}\n menuOpen\n submenuOpen={key === focusedContext}\n onClickCallback={setFocusedContextCb}\n {...{ item, focusedContext }}\n />\n </ItemWrapper>\n );\n })}\n {supportUrl && (\n <ItemWrapper>\n <ContextItem\n compact\n isActive={false}\n icon='Question'\n title={supportText}\n href={supportUrl}\n menuOpen\n onClickCallback={handleCloseMenu}\n />\n </ItemWrapper>\n )}\n </Container>\n );\n};\n\nexport default MobileMenu;\n","import type React from 'react';\nimport styled from 'styled-components';\nimport { MobileTab, TabContent, Tabs } from '../../Tabs/index';\nimport { TabList, TabListWrapper } from '../../Tabs/TabList';\nimport type { IMenu, INotificationsHistory, ITopBar } from '..';\nimport CloseButton from '../atoms/CloseButton';\nimport { MOBILE_NAVBAR_HEIGHT } from '../atoms/Layout';\nimport MobileLogoLink from '../atoms/MobileLogoLink';\nimport MobileNavbarContainer from '../atoms/MobileNavbarContent';\nimport MobileUserMenu from '../molecules/MobileUserMenu';\nimport NotificationsHistory from '../molecules/NotificationsHistory';\nimport MobileMenu from './MobileMenu';\n\nconst CLOSE_ID = 'closeMenu';\nconst NOTI_TAB = 'notifications';\nconst USER_TAB = 'user';\nconst MENU_TAB = 'menu';\nconst CUSTOM_TAB = 'custom';\n\nconst Container = styled.nav`\n background-color: var(--global-element-background);\n position: sticky;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 99;\n`;\n\nconst HeaderContainer = styled.div`\n display: flex;\n flex-direction: row;\n height: ${MOBILE_NAVBAR_HEIGHT}px;\n border-bottom: var(--dividing-line) 1px solid;\n\n ${TabListWrapper} {\n flex-basis: 0;\n flex-grow: 3;\n }\n`;\n\ninterface OwnProps {\n closeText?: string;\n notificationsHistory?: INotificationsHistory;\n}\n\ntype IMobileNavbar = OwnProps & IMenu & ITopBar;\n\nconst MobileNavbar: React.FC<IMobileNavbar> = ({\n content,\n home,\n logoMark,\n supportUrl,\n defaultMenuOpen = true,\n closeText,\n hasLanguage,\n hasLogout,\n logoutLink,\n hasCurrentUser,\n hasNotifications,\n userSubmenu,\n userDrawerBespoke,\n loggedInUser,\n notificationsHistory,\n customDrawer,\n supportText,\n onLogout,\n onLanguageToggle,\n ...props\n}) => {\n return (\n <Container>\n <Tabs>\n <HeaderContainer>\n <MobileLogoLink {...{ home, logoMark }} closeId={CLOSE_ID} />\n <TabList defaultTabId={CLOSE_ID}>\n {customDrawer && <MobileTab {...customDrawer} tabFor={CUSTOM_TAB} closeId={CLOSE_ID} />}\n {hasNotifications ? (\n <MobileTab tabFor={NOTI_TAB} icon='Notifications' closeId={CLOSE_ID} />\n ) : null}\n <MobileTab tabFor={USER_TAB} icon='UserProfile' closeId={CLOSE_ID} />\n <MobileTab tabFor={MENU_TAB} icon='Menu' closeId={CLOSE_ID} />\n </TabList>\n </HeaderContainer>\n <MobileNavbarContainer closeId={CLOSE_ID}>\n <TabContent tabId={CUSTOM_TAB}>{customDrawer?.customComponent}</TabContent>\n <TabContent tabId={NOTI_TAB}>\n {notificationsHistory && hasNotifications ? (\n <NotificationsHistory {...notificationsHistory} />\n ) : null}\n </TabContent>\n <TabContent tabId={USER_TAB}>\n <MobileUserMenu\n {...{\n hasLanguage,\n hasLogout,\n logoutLink,\n hasCurrentUser,\n userSubmenu,\n userDrawerBespoke,\n loggedInUser,\n onLogout,\n onLanguageToggle,\n ...props,\n }}\n closeId={CLOSE_ID}\n />\n </TabContent>\n <TabContent tabId={MENU_TAB}>\n <MobileMenu\n {...{ content, supportUrl, supportText, defaultMenuOpen }}\n closeId={CLOSE_ID}\n />\n </TabContent>\n <CloseButton {...{ closeText }} closeId={CLOSE_ID} />\n </MobileNavbarContainer>\n </Tabs>\n </Container>\n );\n};\n\nexport default MobileNavbar;\n","import type React from 'react';\nimport useBreakpoints from '../../hooks/useBreakpoints';\nimport type { IMenu, ITopBar } from '..';\nimport { ContentArea, Layout, MainContainer, MobileLayout } from '../atoms/Layout';\nimport TopBar from '../molecules/TopBar';\nimport MainMenu from '../organisms/MainMenu';\nimport MobileNavbar from '../organisms/MobileNavbar';\n\ninterface OwnProps {\n maxWidth?: string;\n paddingOverride?: string;\n legacyLayout?: boolean;\n onMenuToggle?: (isMenuOpen: boolean) => void;\n children?: React.ReactNode;\n}\n\ntype INavigation = OwnProps & IMenu & ITopBar;\n\nconst GlobalUI: React.FC<INavigation> = ({\n content,\n home,\n openWidth,\n logoMark,\n logoText,\n supportUrl,\n defaultMenuOpen,\n canAlwaysPin,\n paddingOverride,\n maxWidth,\n legacyLayout,\n children,\n keepOpenText,\n autoHideText,\n supportText,\n onMenuToggle,\n ...props\n}) => {\n const { isLarge } = useBreakpoints();\n\n return isLarge ? (\n <Layout>\n <MainMenu\n {...{\n content,\n home,\n openWidth,\n logoMark,\n logoText,\n supportUrl,\n defaultMenuOpen,\n canAlwaysPin,\n onMenuToggle,\n keepOpenText,\n autoHideText,\n supportText,\n }}\n />\n <MainContainer>\n <TopBar {...{ ...props }} />\n <ContentArea\n $maxWidth={maxWidth}\n $paddingOverride={paddingOverride}\n $legacyLayout={legacyLayout}\n >\n {children}\n </ContentArea>\n </MainContainer>\n </Layout>\n ) : (\n <MobileLayout>\n <MobileNavbar\n {...{\n content,\n home,\n logoMark,\n supportUrl,\n defaultMenuOpen,\n supportText,\n ...props,\n }}\n />\n <ContentArea>{children}</ContentArea>\n </MobileLayout>\n );\n};\n\nexport default GlobalUI;\n","import type React from 'react';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n width: 286px;\n border-right: 1px solid var(--grey-a7);\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n`;\nconst LogoContainer = styled.div`\n height: 84px;\n color: var(--grey-11);\n border-bottom: 1px solid var(--grey-a7);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-top: 18px;\n padding-bottom: 15px;\n`;\nconst LogoTopText = styled.div`\n height: 31px;\n font-family: Monorale;\n font-size: 18px;\n font-weight: 500;\n line-height: 1.72;\n letter-spacing: 4.5px;\n text-align: center;\n`;\nconst LogoBottomText = styled.div`\n height: 19px;\n font-family: Monorale;\n font-size: 16px;\n font-weight: 400;\n line-height: normal;\n letter-spacing: 14.11px;\n text-align: center;\n`;\n\nexport const SidebarBox = styled.div`\n position: relative;\n border-bottom: 1px solid var(--grey-a7);\n padding: 22px 20px 21px 20px;\n`;\nexport const SidebarHeading = styled.div`\n font-size: 14px;\n font-weight: 500;\n letter-spacing: 0.35px;\n color: var(--grey-10);\n margin-bottom: 18px;\n`;\n\nexport const SidebarLinkHeading = styled.div`\n font-size: 14px;\n font-weight: 500;\n letter-spacing: 0.35px;\n color: var(--grey-10);\n`;\n\nexport const BackLink = styled(Link)`\n font-size: 14px;\n font-weight: 500;\n letter-spacing: 0.35px;\n color: var(--grey-10);\n`;\n\nconst SLink = styled(Link)`\n position: absolute;\n right: 30px;\n top: 15px;\n /* width: 80px; */\n /* height: 30px; */\n font-size: 14px;\n font-weight: 600;\n text-align: center;\n color: var(--grey-9);\n border-radius: 3px;\n background-color: var(--primary-2);\n text-decoration: none;\n padding: 7px 20px;\n`;\n\nexport const SidebarLink: React.FC<{ title: string; to: string }> = ({ title, to }) => {\n return (\n <SidebarBox>\n <SidebarLinkHeading>{title}</SidebarLinkHeading>\n <SLink to={to}>Setup</SLink>\n </SidebarBox>\n );\n};\n\ninterface LogoProps {\n logoTextTop: string;\n logoTextBottom: string;\n}\n\nexport const Logo: React.FC<LogoProps> = ({ logoTextTop, logoTextBottom }) => (\n <LogoContainer>\n <LogoTopText>{logoTextTop}</LogoTopText>\n <LogoBottomText>•{logoTextBottom}•</LogoBottomText>\n </LogoContainer>\n);\n\nconst Sidebar: React.FC<React.PropsWithChildren> = ({ children, ...props }) => {\n return <Container {...props}>{children}</Container>;\n};\n\nexport default Sidebar;\n"],"mappings":"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a;KACb,QAAQ;KACR,iBAAiB;KAClB;IACF;GACD,YAAY;IACV,SAAS;KACP,WAAW;KACX,iBAAiB;KACjB,aAAa;KACb,QAAQ;KACT;IACD,QAAQ;KACN,iBAAiB;KACjB,aAAa;KACb,QAAQ;KACT;IACF;GACD,iBAAiB;IACf,YAAY;KACV,iBAAiB;KACjB,iBAAiB;KAClB;IACD,gBAAgB,EACd,iBAAiB,oBAClB;IACF;GACF;EACD,QAAQ;GACN,SAAS;IACP,SAAS;KACP,iBAAiB;KACjB,iBAAiB;KAClB;IACD,OAAO,EACL,iBAAiB,qBAClB;IACD,QAAQ,EACN,iBAAiB,oBAClB;IACD,SAAS,EACP,iBAAiB,qBAClB;IACD,UAAU;KACR,iBAAiB;KACjB,iBAAiB;KAClB;IACD,YAAY;KACV,iBAAiB;KACjB,iBAAiB;KAClB;IACF;GACD,WAAW;IACT,SAAS,EACP,iBAAiB,iBAClB;IACD,OAAO,EACL,iBAAiB,kBAClB;IACD,QAAQ,EACN,iBAAiB,iBAClB;IACD,UAAU,EACR,iBAAiB,mBAClB;IACD,SAAS,EACP,iBAAiB,kBAClB;IACD,YAAY;KACV,iBAAiB;KACjB,iBAAiB;KAClB;IACF;GACD,QAAQ;IACN,SAAS;KACP,iBAAiB;KACjB,iBAAiB;KAClB;IACD,OAAO,EACL,iBAAiB,qBAClB;IACD,QAAQ,EACN,iBAAiB,oBAClB;IACD,UAAU,EACR,iBAAiB,sBAClB;IACD,SAAS,EACP,iBAAiB,oBAClB;IACD,YAAY;KACV,iBAAiB;KACjB,iBAAiB;KAClB;IACF;GACF;EACD,QAAQ;GACN,KAAK;IACH,SAAS;KACP,OAAO;MACL,iBAAiB;MACjB,iBACE;MACF,aAAa;MACb,QAAQ;MACT;KACD,OAAO;MACL,iBAAiB;MACjB,iBACE;MACH;KACF;IACD,UAAU;KACR,OAAO;MACL,iBAAiB;MACjB,iBAAiB;MACjB,aAAa;MACb,QAAQ;MACT;KACD,OAAO,EACL,iBAAiB,iBAClB;KACF;IACD,SAAS,EACP,OAAO;KACL,iBAAiB;KACjB,iBAAiB;KACjB,aAAa;KACb,QAAQ;KACT,EACF;IACF;GACD,IAAI;IACF,SAAS;KACP,OAAO;MACL,iBAAiB;MACjB,iBACE;MACF,aAAa;MACb,QAAQ;MACT;KACD,OAAO,EACL,iBAAiB,kBAClB;KACF;IACD,UAAU;KACR,OAAO;MACL,iBAAiB;MACjB,iBACE;MACF,aAAa;MACb,QAAQ;MACT;KACD,OAAO,EACL,iBAAiB,kBAClB;KACF;IACD,SAAS,EACP,OAAO;KACL,iBAAiB;KACjB,iBACE;KACF,aAAa;KACb,QAAQ;KACT,EACF;IACF;GACD,SAAS;IACP,SAAS;KACP,OAAO;MACL,iBAAiB;MACjB,iBACE;MACF,aAAa;MACb,QAAQ;MACT;KACD,OAAO,EACL,iBAAiB,kBAClB;KACF;IACD,SAAS;KACP,OAAO;MACL,iBAAiB;MACjB,iBACE;MACF,aAAa;MACb,QAAQ;MACT;KACD,OAAO,EACL,iBAAiB,kBAClB;KACF;IACF;GACD,QAAQ;IACN,SAAS;KACP,OAAO;MACL,iBAAiB;MACjB,iBACE;MACF,aAAa;MACb,QAAQ;MACT;KACD,OAAO,EACL,iBAAiB,kBAClB;KACF;IACD,SAAS,EACP,OAAO;KACL,iBAAiB;KACjB,iBACE;KACF,aAAa;KACb,QAAQ;KACT,EACF;IACD,UAAU;KACR,OAAO;MACL,iBAAiB;MACjB,iBACE;MACF,aAAa;MACb,QAAQ;MACT;KACD,OAAO,EACL,iBAAiB,kBAClB;KACF;IACF;GACD,QAAQ,EACN,SAAS;IACP,OAAO;KACL,iBAAiB;KACjB,iBAAiB;KACjB,aAAa;KACb,QAAQ;KACT;IACD,OAAO,EACL,iBAAiB,iBAClB;IACF,EACF;GACF;EACD,UAAU;GACR,WAAW;IACT,UAAU;KACR,iBAAiB;KACjB,aAAa;KACb,QAAQ;KACT;IACD,SAAS;KACP,aAAa;KACb,QAAQ;KACT;IACD,OAAO;KACL,aAAa;KACb,QAAQ;KACT;IACF;GACD,SAAS;IACP,UAAU;KACR,WAAW;KACX,iBAAiB;KAClB;IACD,SAAS;KACP,WAAW;KACX,iBAAiB;KAClB;IACD,OAAO;KA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"}
|