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.
Files changed (256) hide show
  1. package/README.md +14 -11
  2. package/dist/Alerts/atom/AlertBar.d.ts.map +1 -1
  3. package/dist/Alerts/atom/Notification.d.ts.map +1 -1
  4. package/dist/Alerts/atom/Tooltip.d.ts +1 -1
  5. package/dist/Alerts/atom/Tooltip.d.ts.map +1 -1
  6. package/dist/Alerts/index.d.ts +1 -1
  7. package/dist/Alerts/index.d.ts.map +1 -1
  8. package/dist/CameraPanels/atoms/MediaStream.d.ts.map +1 -1
  9. package/dist/CameraPanels/atoms/PanelMetaData.d.ts.map +1 -1
  10. package/dist/CameraPanels/index.d.ts +3 -3
  11. package/dist/CameraPanels/index.d.ts.map +1 -1
  12. package/dist/CameraPanels/molecules/CameraPanel.d.ts.map +1 -1
  13. package/dist/CameraPanels/organisms/CameraPanels.d.ts.map +1 -1
  14. package/dist/Filters/FilterTypes.d.ts +4 -4
  15. package/dist/Filters/FilterTypes.d.ts.map +1 -1
  16. package/dist/Filters/atoms/DateTimeBlock.d.ts.map +1 -1
  17. package/dist/Filters/atoms/FilterButton.d.ts.map +1 -1
  18. package/dist/Filters/atoms/FilterDropHandler.d.ts +2 -1
  19. package/dist/Filters/atoms/FilterDropHandler.d.ts.map +1 -1
  20. package/dist/Filters/atoms/FilterDropdownContainer.d.ts.map +1 -1
  21. package/dist/Filters/atoms/FooterControls.d.ts.map +1 -1
  22. package/dist/Filters/atoms/LoadingBox.d.ts.map +1 -1
  23. package/dist/Filters/atoms/ToggleButton.d.ts +2 -2
  24. package/dist/Filters/atoms/ToggleButton.d.ts.map +1 -1
  25. package/dist/Filters/index.d.ts +8 -8
  26. package/dist/Filters/index.d.ts.map +1 -1
  27. package/dist/Filters/molecules/DatePicker.d.ts +2 -2
  28. package/dist/Filters/molecules/DatePicker.d.ts.map +1 -1
  29. package/dist/Filters/molecules/DropdownDatePicker.d.ts.map +1 -1
  30. package/dist/Filters/molecules/FilterDropdown.d.ts +1 -1
  31. package/dist/Filters/molecules/FilterDropdown.d.ts.map +1 -1
  32. package/dist/Filters/molecules/FilterInputs.d.ts.map +1 -1
  33. package/dist/Filters/molecules/FilterLayout.d.ts.map +1 -1
  34. package/dist/Filters/molecules/FiltersResults.d.ts +1 -1
  35. package/dist/Filters/molecules/FiltersResults.d.ts.map +1 -1
  36. package/dist/Filters/molecules/SortDropdown.d.ts +1 -1
  37. package/dist/Filters/molecules/SortDropdown.d.ts.map +1 -1
  38. package/dist/Filters/organisms/FilterBar.d.ts +1 -1
  39. package/dist/Filters/organisms/FilterBar.d.ts.map +1 -1
  40. package/dist/Form/Form.d.ts.map +1 -1
  41. package/dist/Form/atoms/Button.d.ts +1 -1
  42. package/dist/Form/atoms/Button.d.ts.map +1 -1
  43. package/dist/Form/atoms/ButtonWithIcon.d.ts +1 -1
  44. package/dist/Form/atoms/ButtonWithIcon.d.ts.map +1 -1
  45. package/dist/Form/atoms/ButtonWithLoading.d.ts.map +1 -1
  46. package/dist/Form/atoms/Checkbox.d.ts.map +1 -1
  47. package/dist/Form/atoms/CropArea.d.ts.map +1 -1
  48. package/dist/Form/atoms/DropArea.d.ts.map +1 -1
  49. package/dist/Form/atoms/FilterOption.d.ts.map +1 -1
  50. package/dist/Form/atoms/IconButton.d.ts.map +1 -1
  51. package/dist/Form/atoms/Input.d.ts.map +1 -1
  52. package/dist/Form/atoms/InputFileButton.d.ts +1 -1
  53. package/dist/Form/atoms/InputFileButton.d.ts.map +1 -1
  54. package/dist/Form/atoms/Label.d.ts.map +1 -1
  55. package/dist/Form/atoms/RadioButton.d.ts.map +1 -1
  56. package/dist/Form/atoms/SelectField.d.ts.map +1 -1
  57. package/dist/Form/atoms/SliderInput.d.ts.map +1 -1
  58. package/dist/Form/atoms/SmallInput.d.ts.map +1 -1
  59. package/dist/Form/atoms/SplitButtonOption.d.ts.map +1 -1
  60. package/dist/Form/atoms/Switch.d.ts.map +1 -1
  61. package/dist/Form/atoms/TextArea.d.ts.map +1 -1
  62. package/dist/Form/index.d.ts +18 -18
  63. package/dist/Form/index.d.ts.map +1 -1
  64. package/dist/Form/molecules/ActionButtons.d.ts.map +1 -1
  65. package/dist/Form/molecules/ButtonsStack.d.ts.map +1 -1
  66. package/dist/Form/molecules/CropTool.d.ts.map +1 -1
  67. package/dist/Form/molecules/DurationSlider.d.ts.map +1 -1
  68. package/dist/Form/molecules/PasswordField.d.ts.map +1 -1
  69. package/dist/Form/molecules/PercentageSlider.d.ts +1 -1
  70. package/dist/Form/molecules/PercentageSlider.d.ts.map +1 -1
  71. package/dist/Form/molecules/SplitButton.d.ts +1 -1
  72. package/dist/Form/molecules/SplitButton.d.ts.map +1 -1
  73. package/dist/Form/molecules/TextAreaField.d.ts.map +1 -1
  74. package/dist/Form/molecules/TextField.d.ts +1 -1
  75. package/dist/Form/molecules/TextField.d.ts.map +1 -1
  76. package/dist/Form/organisms/AreaUploadManager.d.ts.map +1 -1
  77. package/dist/Form/organisms/AvatarUploader.d.ts.map +1 -1
  78. package/dist/Global/atoms/CloseButton.d.ts.map +1 -1
  79. package/dist/Global/atoms/ContextItem.d.ts +1 -1
  80. package/dist/Global/atoms/ContextItem.d.ts.map +1 -1
  81. package/dist/Global/atoms/DrawerBottomMenu.d.ts.map +1 -1
  82. package/dist/Global/atoms/Layout.d.ts.map +1 -1
  83. package/dist/Global/atoms/MobileLogoLink.d.ts.map +1 -1
  84. package/dist/Global/atoms/MobileNavbarContent.d.ts.map +1 -1
  85. package/dist/Global/atoms/NavigationItem.d.ts +1 -1
  86. package/dist/Global/atoms/NavigationItem.d.ts.map +1 -1
  87. package/dist/Global/atoms/NotificationItem.d.ts.map +1 -1
  88. package/dist/Global/atoms/TopBarBadge.d.ts.map +1 -1
  89. package/dist/Global/atoms/UserDrawerMeta.d.ts.map +1 -1
  90. package/dist/Global/index.d.ts +5 -5
  91. package/dist/Global/index.d.ts.map +1 -1
  92. package/dist/Global/molecules/MobileUserMenu.d.ts.map +1 -1
  93. package/dist/Global/molecules/NotificationsHistory.d.ts.map +1 -1
  94. package/dist/Global/molecules/Sidebar.d.ts.map +1 -1
  95. package/dist/Global/molecules/TopBar.d.ts.map +1 -1
  96. package/dist/Global/molecules/UserMenu.d.ts.map +1 -1
  97. package/dist/Global/organisms/MainMenu.d.ts.map +1 -1
  98. package/dist/Global/organisms/MobileMenu.d.ts.map +1 -1
  99. package/dist/Global/organisms/MobileNavbar.d.ts +1 -1
  100. package/dist/Global/organisms/MobileNavbar.d.ts.map +1 -1
  101. package/dist/Global/templates/GlobalUI.d.ts.map +1 -1
  102. package/dist/Icons/Icon.d.ts +2 -2
  103. package/dist/Icons/Icon.d.ts.map +1 -1
  104. package/dist/Icons/StatusIcon.d.ts.map +1 -1
  105. package/dist/Indicators/Spinner.d.ts.map +1 -1
  106. package/dist/Layouts/atoms/FullWidthContentBlock.d.ts.map +1 -1
  107. package/dist/Layouts/atoms/ResizeLine.d.ts.map +1 -1
  108. package/dist/Layouts/atoms/UtilityHeaderBack.d.ts.map +1 -1
  109. package/dist/Layouts/atoms/UtilityHeaderShare.d.ts.map +1 -1
  110. package/dist/Layouts/index.d.ts +5 -4
  111. package/dist/Layouts/index.d.ts.map +1 -1
  112. package/dist/Layouts/molecules/SplitLayout.d.ts +2 -2
  113. package/dist/Layouts/molecules/SplitLayout.d.ts.map +1 -1
  114. package/dist/Layouts/molecules/UtilityHeader.d.ts.map +1 -1
  115. package/dist/Layouts/organisms/ContentLayout.d.ts.map +1 -1
  116. package/dist/LineUI/Contexts.d.ts +3 -1
  117. package/dist/LineUI/Contexts.d.ts.map +1 -1
  118. package/dist/LineUI/Control.d.ts +1 -3
  119. package/dist/LineUI/Control.d.ts.map +1 -1
  120. package/dist/LineUI/HandleUnit.d.ts +2 -2
  121. package/dist/LineUI/HandleUnit.d.ts.map +1 -1
  122. package/dist/LineUI/LineReducer.d.ts.map +1 -1
  123. package/dist/LineUI/LineSet.d.ts +2 -2
  124. package/dist/LineUI/LineSet.d.ts.map +1 -1
  125. package/dist/LineUI/LineUI.d.ts.map +1 -1
  126. package/dist/LineUI/LineUIRTC.d.ts.map +1 -1
  127. package/dist/LineUI/LineUIVideo.d.ts +1 -18
  128. package/dist/LineUI/LineUIVideo.d.ts.map +1 -1
  129. package/dist/LineUI/LineUIVideoBase.d.ts +25 -0
  130. package/dist/LineUI/LineUIVideoBase.d.ts.map +1 -0
  131. package/dist/LineUI/LineUnit.d.ts +3 -3
  132. package/dist/LineUI/LineUnit.d.ts.map +1 -1
  133. package/dist/LineUI/index.d.ts +5 -5
  134. package/dist/LineUI/index.d.ts.map +1 -1
  135. package/dist/LineUIHls/LineUIVideoHLS.d.ts +5 -0
  136. package/dist/LineUIHls/LineUIVideoHLS.d.ts.map +1 -0
  137. package/dist/LineUIHls/index.d.ts +4 -0
  138. package/dist/LineUIHls/index.d.ts.map +1 -0
  139. package/dist/LineUIVideoBase-09sEI3pc.mjs +1240 -0
  140. package/dist/LineUIVideoBase-09sEI3pc.mjs.map +1 -0
  141. package/dist/LineUIVideoBase-Bs3WCeWl.js +1335 -0
  142. package/dist/LineUIVideoBase-Bs3WCeWl.js.map +1 -0
  143. package/dist/Misc/atoms/ActionsBar.d.ts.map +1 -1
  144. package/dist/Misc/atoms/BasicSearchInput.d.ts.map +1 -1
  145. package/dist/Misc/atoms/BigIconsSummary.d.ts.map +1 -1
  146. package/dist/Misc/atoms/MediaBox.d.ts.map +1 -1
  147. package/dist/Misc/atoms/Tag.d.ts.map +1 -1
  148. package/dist/Misc/index.d.ts +5 -5
  149. package/dist/Misc/index.d.ts.map +1 -1
  150. package/dist/Misc/molecules/DebouncedSearcher.d.ts.map +1 -1
  151. package/dist/Misc/molecules/Pagination.d.ts.map +1 -1
  152. package/dist/Misc/molecules/TagList.d.ts.map +1 -1
  153. package/dist/Modals/ConfirmationModal.d.ts.map +1 -1
  154. package/dist/Modals/Modal.d.ts.map +1 -1
  155. package/dist/Modals/index.d.ts +2 -2
  156. package/dist/Modals/index.d.ts.map +1 -1
  157. package/dist/Pages/atoms/IntroductionText.d.ts.map +1 -1
  158. package/dist/Pages/atoms/PageTitle.d.ts.map +1 -1
  159. package/dist/Pages/index.d.ts +3 -3
  160. package/dist/Pages/index.d.ts.map +1 -1
  161. package/dist/Pages/molecules/MultilineContent.d.ts.map +1 -1
  162. package/dist/Pages/molecules/PageHeader.d.ts.map +1 -1
  163. package/dist/Tables/atoms/TableHeaderTitle.d.ts.map +1 -1
  164. package/dist/Tables/atoms/TableRowThumbnail.d.ts.map +1 -1
  165. package/dist/Tables/atoms/TypeTableCell.d.ts +1 -1
  166. package/dist/Tables/atoms/TypeTableCell.d.ts.map +1 -1
  167. package/dist/Tables/atoms/TypeTableDeviceStatus.d.ts +1 -1
  168. package/dist/Tables/atoms/TypeTableDeviceStatus.d.ts.map +1 -1
  169. package/dist/Tables/atoms/TypeTableRow.d.ts +2 -2
  170. package/dist/Tables/atoms/TypeTableRow.d.ts.map +1 -1
  171. package/dist/Tables/index.d.ts +6 -6
  172. package/dist/Tables/index.d.ts.map +1 -1
  173. package/dist/Tables/molecules/EditCell.d.ts.map +1 -1
  174. package/dist/Tables/molecules/TypeTableHeader.d.ts.map +1 -1
  175. package/dist/Tables/organisms/TypeTable.d.ts.map +1 -1
  176. package/dist/Tabs/TabContent.d.ts.map +1 -1
  177. package/dist/Tabs/TabList.d.ts.map +1 -1
  178. package/dist/Tabs/Tabs.d.ts.map +1 -1
  179. package/dist/Tabs/atoms/MobileTab.d.ts.map +1 -1
  180. package/dist/Tabs/atoms/Tab.d.ts.map +1 -1
  181. package/dist/Tabs/atoms/TabWithIcon.d.ts.map +1 -1
  182. package/dist/Tabs/index.d.ts +5 -5
  183. package/dist/Tabs/index.d.ts.map +1 -1
  184. package/dist/Tabs/molecules/TabsWithIconBar.d.ts.map +1 -1
  185. package/dist/WebRTCClient.d.ts.map +1 -1
  186. package/dist/common/ContentPlaceholder.d.ts.map +1 -1
  187. package/dist/common/index.d.ts.map +1 -1
  188. package/dist/context/ModalContext.d.ts.map +1 -1
  189. package/dist/context/NotificationContext.d.ts +1 -1
  190. package/dist/context/NotificationContext.d.ts.map +1 -1
  191. package/dist/context/index.d.ts +2 -2
  192. package/dist/context/index.d.ts.map +1 -1
  193. package/dist/fonts/index.d.ts.map +1 -1
  194. package/dist/helpers/cropToolHelpers.d.ts +3 -3
  195. package/dist/helpers/cropToolHelpers.d.ts.map +1 -1
  196. package/dist/helpers/index.d.ts +3 -3
  197. package/dist/helpers/index.d.ts.map +1 -1
  198. package/dist/hls.js +70 -0
  199. package/dist/hls.js.map +1 -0
  200. package/dist/hls.modern.js +68 -0
  201. package/dist/hls.modern.js.map +1 -0
  202. package/dist/hooks/index.d.ts +9 -9
  203. package/dist/hooks/index.d.ts.map +1 -1
  204. package/dist/hooks/useBreakpoints.d.ts.map +1 -1
  205. package/dist/hooks/useClickOutside.d.ts +2 -1
  206. package/dist/hooks/useClickOutside.d.ts.map +1 -1
  207. package/dist/hooks/useCopyToClipboard.d.ts.map +1 -1
  208. package/dist/hooks/useInterval.d.ts.map +1 -1
  209. package/dist/hooks/useLocalStorage.d.ts.map +1 -1
  210. package/dist/hooks/useMediaModal.d.ts.map +1 -1
  211. package/dist/hooks/useMediaQuery.d.ts.map +1 -1
  212. package/dist/hooks/useMenu.d.ts.map +1 -1
  213. package/dist/hooks/useModal.d.ts.map +1 -1
  214. package/dist/hooks/usePoll.d.ts.map +1 -1
  215. package/dist/hooks/useThemeToggle.d.ts.map +1 -1
  216. package/dist/hooks/useTitle.d.ts.map +1 -1
  217. package/dist/index.d.ts +3 -3
  218. package/dist/index.d.ts.map +1 -1
  219. package/dist/index.js +11748 -13001
  220. package/dist/index.js.map +1 -1
  221. package/dist/index.modern.js +10660 -11886
  222. package/dist/index.modern.js.map +1 -1
  223. package/dist/styled.d.ts +7 -0
  224. package/dist/styled.d.ts.map +1 -0
  225. package/dist/svg/AvatarPlaceholder.d.ts +2 -2
  226. package/dist/svg/AvatarPlaceholder.d.ts.map +1 -1
  227. package/dist/svg/Invalid.d.ts +2 -2
  228. package/dist/svg/Invalid.d.ts.map +1 -1
  229. package/dist/svg/LogoMark.d.ts +2 -2
  230. package/dist/svg/LogoMark.d.ts.map +1 -1
  231. package/dist/svg/LogoText.d.ts +2 -2
  232. package/dist/svg/LogoText.d.ts.map +1 -1
  233. package/dist/svg/NoImage.d.ts.map +1 -1
  234. package/dist/svg/NoImageBig.d.ts +2 -2
  235. package/dist/svg/NoImageBig.d.ts.map +1 -1
  236. package/dist/svg/PasswordHide.d.ts +2 -2
  237. package/dist/svg/PasswordHide.d.ts.map +1 -1
  238. package/dist/svg/PasswordShow.d.ts +2 -2
  239. package/dist/svg/PasswordShow.d.ts.map +1 -1
  240. package/dist/svg/Required.d.ts +2 -2
  241. package/dist/svg/Required.d.ts.map +1 -1
  242. package/dist/svg/Success.d.ts +2 -2
  243. package/dist/svg/Success.d.ts.map +1 -1
  244. package/dist/svg/checkmark.d.ts.map +1 -1
  245. package/dist/svg/index.d.ts +4 -4
  246. package/dist/svg/index.d.ts.map +1 -1
  247. package/dist/svg/input.d.ts +1 -1
  248. package/dist/theme/ThemeHelpers.d.ts.map +1 -1
  249. package/dist/theme/ThemeVariables.d.ts.map +1 -1
  250. package/dist/theme/common.d.ts.map +1 -1
  251. package/dist/theme/index.d.ts.map +1 -1
  252. package/dist/theme/legacy/custom.d.ts.map +1 -1
  253. package/dist/theme/legacy/styles.d.ts.map +1 -1
  254. package/dist/theme/legacy/typography.d.ts +1 -1
  255. package/dist/theme/legacy/typography.d.ts.map +1 -1
  256. package/package.json +17 -12
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.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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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,UAAU;MACb;KACD,SAAS,EACL,mBAAmB,iBACtB;KACJ,EACJ;IACJ;GACD,YAAY;IACR,aAAa;KACT,YAAY;MACR,mBAAmB;MACnB,eAAe;MACf,UAAU;MACb;KACD,WAAW;MACP,eAAe;MACf,UAAU;MACb;KACD,SAAS;MACL,eAAe;MACf,UAAU;MACb;KACJ;IACD,WAAW;KACP,YAAY;MACR,aAAa;MACb,mBAAmB;MACtB;KACD,WAAW;MACP,aAAa;MACb,mBAAmB;MACtB;KACD,SAAS;MACL,aAAa;MACb,mBAAmB;MACtB;KACJ;IACD,iBAAiB;KACb,SAAS;MACL,aAAa;MACb,mBAAmB;MACtB;KACD,WAAW;MACP,aAAa;MACb,mBAAmB;MACtB;KACJ;IACJ;GACJ;EACD,cAAc,EACV,WAAW;GACP,UAAU;IACN,QAAQ;KACJ,eAAe;KACf,UAAU;KACb;IACD,OAAO;KACH,eAAe;KACf,UAAU;KACb;IACJ;GACD,aAAa;IACT,OAAO;KACH,eAAe;KACf,UAAU;KACb;IACD,QAAQ;KACJ,eAAe;KACf,UAAU;KACb;IACJ;GACD,WAAW;IACP,OAAO;KACH,eAAe;KACf,UAAU;KACb;IACD,QAAQ;KACJ,eAAe;KACf,UAAU;KACb;IACJ;GACD,UAAU;IACN,OAAO;KACH,eAAe;KACf,UAAU;KACb;IACD,QAAQ;KACJ,eAAe;KACf,UAAU;KACb;IACJ;GACJ,EACJ;EACD,WAAW;GACP,qBAAqB;IACjB,cAAc;KACV,aAAa;KACb,mBAAmB;KACnB,eAAe;KACf,UAAU;KACb;IACD,aAAa,EACT,mBAAmB,oBACtB;IACJ;GACD,gBAAgB;IACZ,WAAW;KACP,aAAa;KACb,mBAAmB;KACnB,eAAe;KACf,UAAU;KACV,aAAa;KAChB;IACD,UAAU;KACN,aAAa;KACb,mBAAmB;KACnB,eAAe;KACf,UAAU;KACV,aAAa;KAChB;IACD,SAAS;KACL,aAAa;KACb,mBAAmB;KACnB,eAAe;KACf,UAAU;KACV,aAAa;KAChB;IACJ;GACD,eAAe;IACX,WAAW;KACP,aAAa;KACb,mBAAmB;KACnB,eAAe;KACf,UAAU;KACb;IACD,WAAW;KACP,aAAa;KACb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"}
1
+ {"version":3,"file":"index.modern.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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AAQ;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;KACL,WAAW;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"}