redux-connected-devtools 1.0.2 → 1.0.4

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 (167) hide show
  1. package/dist/components/DevInspector/DevInspector.js +12 -0
  2. package/{src/components/DevInspector/DevInspector.style.tsx → dist/components/DevInspector/DevInspector.style.js} +1 -3
  3. package/dist/components/DevList/DevList.js +24 -0
  4. package/{src/components/DevList/DevList.style.tsx → dist/components/DevList/DevList.style.js} +2 -4
  5. package/dist/components/DevMenu/DevMenu.js +25 -0
  6. package/{src/components/DevMenu/DevMenu.style.tsx → dist/components/DevMenu/DevMenu.style.js} +15 -19
  7. package/dist/components/DevPanel/DevPanel.js +38 -0
  8. package/dist/components/DevPanel/DevPanel.style.js +22 -0
  9. package/dist/components/DevtoolsApp/DevtoolsApp.js +17 -0
  10. package/dist/components/DevtoolsApp/DevtoolsApp.style.js +11 -0
  11. package/dist/components/Icon/AllIcons.js +18 -0
  12. package/dist/components/Icon/Icon.js +9 -0
  13. package/dist/components/Icon/Icon.style.js +10 -0
  14. package/{src/components/JourneyRow/JourneyRow.tsx → dist/components/JourneyRow/JourneyRow.js} +9 -32
  15. package/{src/components/JourneyRow/JourneyRow.style.tsx → dist/components/JourneyRow/JourneyRow.style.js} +7 -12
  16. package/dist/components/JsonViewer/JsonViewer.js +7 -0
  17. package/{src/components/JsonViewer/JsonViewer.style.tsx → dist/components/JsonViewer/JsonViewer.style.js} +1 -2
  18. package/dist/components/Lifecycle/Lifecycle.js +15 -0
  19. package/{src/components/Lifecycle/Lifecycle.style.tsx → dist/components/Lifecycle/Lifecycle.style.js} +1 -2
  20. package/dist/components/RequestDetails/RequestDetails.js +10 -0
  21. package/dist/components/RequestDetails/RequestDetails.style.js +16 -0
  22. package/dist/components/RequestJourney/RequestJourney.js +14 -0
  23. package/dist/components/RequestJourney/RequestJourney.style.js +26 -0
  24. package/dist/components/RequestRow/RequestRow.js +9 -0
  25. package/{src/components/RequestRow/RequestRow.style.tsx → dist/components/RequestRow/RequestRow.style.js} +6 -10
  26. package/dist/components/Size/Size.js +10 -0
  27. package/dist/components/Size/Size.style.js +5 -0
  28. package/{src/components/Time/Time.tsx → dist/components/Time/Time.js} +3 -17
  29. package/{src/components/Time/Time.style.tsx → dist/components/Time/Time.style.js} +4 -7
  30. package/dist/containers/DevMenuContainer.js +11 -0
  31. package/dist/containers/DevPanelContainer.js +6 -0
  32. package/dist/containers/DevtoolsAppContainer.js +24 -0
  33. package/{src/containers/EndpointConfigsContainer.tsx → dist/containers/EndpointConfigsContainer.js} +2 -5
  34. package/{src/containers/EndpointStatusContainer.tsx → dist/containers/EndpointStatusContainer.js} +2 -5
  35. package/{src/containers/GlobalSettingsContainer.tsx → dist/containers/GlobalSettingsContainer.js} +2 -5
  36. package/{src/containers/GlobalStatsContainer.tsx → dist/containers/GlobalStatsContainer.js} +2 -5
  37. package/{src/containers/LifecycleApiErrorContainer.tsx → dist/containers/LifecycleApiErrorContainer.js} +2 -4
  38. package/dist/containers/LifecycleFailedContainer.js +9 -0
  39. package/{src/containers/LifecycleGeneralErrorContainer.tsx → dist/containers/LifecycleGeneralErrorContainer.js} +2 -4
  40. package/{src/containers/LifecycleInQueueContainer.tsx → dist/containers/LifecycleInQueueContainer.js} +2 -4
  41. package/{src/containers/LifecyclePendingApiContainer.tsx → dist/containers/LifecyclePendingApiContainer.js} +2 -4
  42. package/{src/containers/LifecyclePostActionContainer.tsx → dist/containers/LifecyclePostActionContainer.js} +2 -4
  43. package/{src/containers/LifecycleReceivedContainer.tsx → dist/containers/LifecycleReceivedContainer.js} +2 -4
  44. package/{src/data/devComponents.tsx → dist/data/devComponents.js} +3 -4
  45. package/{src/data/devRoutes.ts → dist/data/devRoutes.js} +23 -28
  46. package/dist/dts/components/DevInspector/DevInspector.d.ts +7 -0
  47. package/dist/dts/components/DevInspector/DevInspector.style.d.ts +1 -0
  48. package/dist/dts/components/DevList/DevList.d.ts +9 -0
  49. package/dist/dts/components/DevList/DevList.style.d.ts +2 -0
  50. package/dist/dts/components/DevMenu/DevMenu.d.ts +12 -0
  51. package/dist/dts/components/DevMenu/DevMenu.style.d.ts +7 -0
  52. package/dist/dts/components/DevPanel/DevPanel.d.ts +6 -0
  53. package/dist/dts/components/DevPanel/DevPanel.style.d.ts +3 -0
  54. package/dist/dts/components/DevtoolsApp/DevtoolsApp.d.ts +10 -0
  55. package/dist/dts/components/DevtoolsApp/DevtoolsApp.style.d.ts +1 -0
  56. package/dist/dts/components/Icon/AllIcons.d.ts +8 -0
  57. package/dist/dts/components/Icon/Icon.d.ts +10 -0
  58. package/dist/dts/components/Icon/Icon.style.d.ts +3 -0
  59. package/dist/dts/components/JourneyRow/JourneyRow.d.ts +7 -0
  60. package/dist/dts/components/JourneyRow/JourneyRow.style.d.ts +5 -0
  61. package/dist/dts/components/JsonViewer/JsonViewer.d.ts +7 -0
  62. package/dist/dts/components/JsonViewer/JsonViewer.style.d.ts +3 -0
  63. package/dist/dts/components/Lifecycle/Lifecycle.d.ts +7 -0
  64. package/dist/dts/components/Lifecycle/Lifecycle.style.d.ts +1 -0
  65. package/dist/dts/components/RequestDetails/RequestDetails.d.ts +7 -0
  66. package/dist/dts/components/RequestDetails/RequestDetails.style.d.ts +4 -0
  67. package/dist/dts/components/RequestJourney/RequestJourney.d.ts +7 -0
  68. package/dist/dts/components/RequestJourney/RequestJourney.style.d.ts +1 -0
  69. package/dist/dts/components/RequestRow/RequestRow.d.ts +11 -0
  70. package/dist/dts/components/RequestRow/RequestRow.style.d.ts +6 -0
  71. package/dist/dts/components/Size/Size.d.ts +6 -0
  72. package/dist/dts/components/Size/Size.style.d.ts +1 -0
  73. package/dist/dts/components/Time/Time.d.ts +6 -0
  74. package/dist/dts/components/Time/Time.style.d.ts +3 -0
  75. package/dist/dts/containers/DevMenuContainer.d.ts +8 -0
  76. package/dist/dts/containers/DevPanelContainer.d.ts +6 -0
  77. package/dist/dts/containers/DevtoolsAppContainer.d.ts +7 -0
  78. package/dist/dts/containers/EndpointConfigsContainer.d.ts +3 -0
  79. package/dist/dts/containers/EndpointStatusContainer.d.ts +3 -0
  80. package/dist/dts/containers/GlobalSettingsContainer.d.ts +3 -0
  81. package/dist/dts/containers/GlobalStatsContainer.d.ts +3 -0
  82. package/dist/dts/containers/LifecycleApiErrorContainer.d.ts +3 -0
  83. package/dist/dts/containers/LifecycleFailedContainer.d.ts +3 -0
  84. package/dist/dts/containers/LifecycleGeneralErrorContainer.d.ts +3 -0
  85. package/dist/dts/containers/LifecycleInQueueContainer.d.ts +3 -0
  86. package/dist/dts/containers/LifecyclePendingApiContainer.d.ts +3 -0
  87. package/dist/dts/containers/LifecyclePostActionContainer.d.ts +3 -0
  88. package/dist/dts/containers/LifecycleReceivedContainer.d.ts +3 -0
  89. package/dist/dts/data/devComponents.d.ts +4 -0
  90. package/dist/dts/data/devRoutes.d.ts +8 -0
  91. package/dist/dts/hooks/useStoreSize.d.ts +7 -0
  92. package/dist/dts/index.d.ts +1 -0
  93. package/dist/dts/store/selectors.d.ts +2235 -0
  94. package/dist/dts/types.d.ts +0 -0
  95. package/dist/dts/utils/date.d.ts +4 -0
  96. package/dist/dts/utils/download.d.ts +1 -0
  97. package/dist/hooks/useStoreSize.js +16 -0
  98. package/dist/index.d.ts +1 -0
  99. package/dist/index.js +1 -0
  100. package/dist/redux-connected-devtools.es.js +992 -0
  101. package/dist/redux-connected-devtools.es.js.map +1 -0
  102. package/dist/redux-connected-devtools.umd.js +247 -0
  103. package/dist/redux-connected-devtools.umd.js.map +1 -0
  104. package/dist/store/selectors.js +143 -0
  105. package/dist/types.js +1 -0
  106. package/dist/utils/date.js +8 -0
  107. package/dist/utils/download.js +17 -0
  108. package/package.json +29 -13
  109. package/.env +0 -2
  110. package/.prettierrc.js +0 -10
  111. package/.vscode/settings.json +0 -12
  112. package/.vscode/tasks.json +0 -33
  113. package/index.html +0 -58
  114. package/jest.config.js +0 -8
  115. package/public/devtools.html +0 -8
  116. package/public/icon.png +0 -0
  117. package/public/manifest.json +0 -29
  118. package/public/options.html +0 -12
  119. package/public/panel.html +0 -39
  120. package/public/popup.html +0 -12
  121. package/src/__tests__/sum.ts +0 -9
  122. package/src/background.ts +0 -49
  123. package/src/components/DevInspector/DevInspector.scss +0 -2
  124. package/src/components/DevInspector/DevInspector.tsx +0 -34
  125. package/src/components/DevList/DevList.scss +0 -2
  126. package/src/components/DevList/DevList.tsx +0 -62
  127. package/src/components/DevMenu/DevMenu.scss +0 -2
  128. package/src/components/DevMenu/DevMenu.tsx +0 -76
  129. package/src/components/DevPanel/DevPanel.scss +0 -2
  130. package/src/components/DevPanel/DevPanel.style.tsx +0 -16
  131. package/src/components/DevPanel/DevPanel.tsx +0 -51
  132. package/src/components/JourneyRow/JourneyRow.scss +0 -2
  133. package/src/components/JsonViewer/JsonViewer.scss +0 -2
  134. package/src/components/JsonViewer/JsonViewer.tsx +0 -24
  135. package/src/components/Lifecycle/Lifecycle.scss +0 -2
  136. package/src/components/Lifecycle/Lifecycle.tsx +0 -31
  137. package/src/components/LogsViewer/LogsViewer.scss +0 -2
  138. package/src/components/LogsViewer/LogsViewer.style.tsx +0 -5
  139. package/src/components/LogsViewer/LogsViewer.tsx +0 -14
  140. package/src/components/RequestDetails/RequestDetails.scss +0 -2
  141. package/src/components/RequestDetails/RequestDetails.style.tsx +0 -20
  142. package/src/components/RequestDetails/RequestDetails.tsx +0 -60
  143. package/src/components/RequestJourney/RequestJourney.scss +0 -2
  144. package/src/components/RequestJourney/RequestJourney.style.tsx +0 -6
  145. package/src/components/RequestJourney/RequestJourney.tsx +0 -33
  146. package/src/components/RequestRow/RequestRow.scss +0 -2
  147. package/src/components/RequestRow/RequestRow.tsx +0 -37
  148. package/src/components/Time/Time.scss +0 -2
  149. package/src/containers/DevMenuContainer.tsx +0 -28
  150. package/src/containers/DevPanelContainer.tsx +0 -10
  151. package/src/content_script.ts +0 -19
  152. package/src/devtools.tsx +0 -29
  153. package/src/index.ts +0 -1
  154. package/src/injected_script.ts +0 -9
  155. package/src/options.tsx +0 -77
  156. package/src/panel.tsx +0 -30
  157. package/src/popup.tsx +0 -63
  158. package/src/store/initialState.ts +0 -42
  159. package/src/store/selectors.ts +0 -205
  160. package/src/sum.ts +0 -3
  161. package/src/types.ts +0 -1
  162. package/src/utils/date.ts +0 -3
  163. package/tsconfig.json +0 -24
  164. package/vite.config.ts +0 -45
  165. package/webpack/webpack.common.js +0 -46
  166. package/webpack/webpack.dev.js +0 -7
  167. package/webpack/webpack.prod.js +0 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redux-connected-devtools.es.js","sources":["../src/components/Icon/AllIcons.tsx","../src/components/Icon/Icon.style.tsx","../src/components/Icon/Icon.tsx","../src/components/DevtoolsApp/DevtoolsApp.style.tsx","../src/components/DevMenu/DevMenu.style.tsx","../src/components/DevMenu/DevMenu.tsx","../src/data/devRoutes.ts","../src/store/selectors.ts","../src/containers/DevMenuContainer.tsx","../src/components/DevPanel/DevPanel.style.tsx","../src/components/DevInspector/DevInspector.style.tsx","../src/components/RequestJourney/RequestJourney.style.tsx","../src/utils/date.ts","../src/components/Time/Time.style.tsx","../src/components/Time/Time.tsx","../src/components/JourneyRow/JourneyRow.style.tsx","../src/components/JourneyRow/JourneyRow.tsx","../src/components/RequestJourney/RequestJourney.tsx","../src/components/RequestDetails/RequestDetails.style.tsx","../src/components/JsonViewer/JsonViewer.style.tsx","../src/components/JsonViewer/JsonViewer.tsx","../src/components/RequestDetails/RequestDetails.tsx","../src/components/DevInspector/DevInspector.tsx","../src/components/DevList/DevList.style.tsx","../src/components/DevList/DevList.tsx","../src/components/RequestRow/RequestRow.style.tsx","../src/components/RequestRow/RequestRow.tsx","../src/components/Lifecycle/Lifecycle.style.tsx","../src/components/Lifecycle/Lifecycle.tsx","../src/containers/LifecycleReceivedContainer.tsx","../src/containers/GlobalStatsContainer.tsx","../src/containers/EndpointConfigsContainer.tsx","../src/containers/GlobalSettingsContainer.tsx","../src/containers/EndpointStatusContainer.tsx","../src/containers/LifecycleInQueueContainer.tsx","../src/containers/LifecycleGeneralErrorContainer.tsx","../src/containers/LifecyclePendingApiContainer.tsx","../src/containers/LifecycleApiErrorContainer.tsx","../src/containers/LifecyclePostActionContainer.tsx","../src/containers/LifecycleFailedContainer.tsx","../src/data/devComponents.tsx","../src/components/DevPanel/DevPanel.tsx","../src/containers/DevPanelContainer.tsx","../src/components/Size/Size.style.tsx","../src/components/Size/Size.tsx","../src/components/DevtoolsApp/DevtoolsApp.tsx","../src/utils/download.ts","../src/hooks/useStoreSize.ts","../src/containers/DevtoolsAppContainer.tsx"],"sourcesContent":["import React from 'react';\n\nexport type IconName = 'download' | 'close' | 'clearAll';\n\ntype IconProps = {\n size?: number;\n};\n\nconst Download = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z' />\n </svg>\n );\n};\n\nconst Close = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z' />\n </svg>\n );\n};\n\nconst ClearAll = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z' />\n </svg>\n );\n};\n\ntype Icons = Record<IconName, React.FC<IconProps>>;\n\nexport const allIcons: Icons = {\n close: Close,\n clearAll: ClearAll,\n download: Download,\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ color?: string }>`\n margin: 0 3px;\n color: ${(props) => props.color ?? 'inherit'};\n cursor: pointer;\n\n &:hover {\n color: gold;\n }\n`;\n","import React from 'react';\nimport { allIcons, IconName } from './AllIcons';\nimport { Container } from './Icon.style';\n\nexport type IconProps = {\n name: IconName;\n color?: string;\n size?: number;\n onClick?: () => void;\n};\n\nexport function Icon(props: IconProps) {\n const { name, size = 20, color } = props;\n const Cmp = allIcons[name];\n\n return (\n <Container\n className='Icon-container'\n data-testid='Icon-container'\n color={color}\n onClick={props.onClick}\n >\n <Cmp size={size} />\n </Container>\n );\n}\n\nexport default Icon;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n background-color: #223;\n z-index: 3;\n color: #eee;\n display: flex;\n flex-direction: column;\n min-width: 880px;\n min-height: 880px;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n width: 190px;\n ${(props) => props.theme.borderRight('1px solid rgba(255, 255, 255, 0.2)')}\n box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);\n`;\n\nexport const MenuGroup = styled.div`\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n`;\n\nexport const MenuGroupTitle = styled.div`\n font-size: 13px;\n padding: 5px 10px;\n color: rgba(255, 255, 255, 0.5);\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n background-color: rgba(0, 0, 0, 0.1);\n`;\n\nexport const MenuItem = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 6px 10px;\n font-size: 14px;\n color: rgba(255, 255, 255, 0.89);\n background-color: transparent;\n\n &.selected {\n color: gold;\n background-color: rgba(255, 255, 255, 0.05);\n }\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n cursor: pointer;\n }\n`;\n\nexport const Title = styled.div`\n flex: 1;\n`;\n\nexport const Badge = styled.div`\n background-color: rgba(0, 0, 80, 0.3);\n padding: 0 4px;\n font-size: 12px;\n border-radius: 7px;\n border: 1px solid #334;\n color: cyan;\n`;\n\nexport const BadgeTotal = styled(Badge)`\n color: #555;\n`;\n","import React from 'react';\nimport { IDevRoute } from '../../data/devRoutes';\nimport {\n Container,\n MenuGroup,\n MenuGroupTitle,\n MenuItem,\n Title,\n Badge,\n BadgeTotal,\n} from './DevMenu.style';\nimport classnames from 'classnames';\n\nexport type DevMenuProps = {\n groups: string[];\n items: IDevRoute[];\n onClick: (route: IDevRoute) => void;\n selectedId: string;\n badges: Record<string, number>;\n badgesTotal: Record<string, number>;\n};\n\nexport function DevMenu(props: DevMenuProps) {\n const { groups, items, selectedId, badges, badgesTotal } = props;\n\n function renderItem(item: IDevRoute) {\n const { title, id } = item;\n const selected = id === selectedId;\n\n const badge = badges[id];\n const badgeTotal = badgesTotal[id];\n\n return (\n <MenuItem\n key={item.id}\n className={classnames({ selected })}\n onClick={() => props.onClick(item)}\n >\n <Title>{title}</Title>\n {badgeTotal > 0 && badgeTotal !== badge && (\n <BadgeTotal>{badgeTotal}</BadgeTotal>\n )}\n {badge > 0 && <Badge>{badge}</Badge>}\n </MenuItem>\n );\n }\n\n function renderItems(groupItems: IDevRoute[]) {\n return groupItems.map((item: IDevRoute) => renderItem(item));\n }\n\n function renderGroup(group: string) {\n const groupItems = items.filter((item) => item.group === group);\n\n return (\n <MenuGroup key={group}>\n <MenuGroupTitle>{group}</MenuGroupTitle>\n {renderItems(groupItems)}\n </MenuGroup>\n );\n }\n\n function renderGroups() {\n return groups.map((group: string) => renderGroup(group));\n }\n\n return (\n <Container\n className='DevMenu-container'\n data-testid='DevMenu-container'\n >\n {renderGroups()}\n </Container>\n );\n}\n\nexport default DevMenu;\n","export type IDevRoute = {\n id: string;\n title: string;\n group: string;\n componentId: string;\n};\n\nexport const devRoutes: IDevRoute[] = [\n {\n id: 'lifecycleReceived',\n title: '1. Received',\n group: 'lifecycle',\n componentId: 'LifecycleReceived',\n },\n {\n id: 'lifecycleInQueue',\n title: '2. In queue',\n group: 'lifecycle',\n componentId: 'LifecycleInQueue',\n },\n\n {\n id: 'lifecyclePendingApi',\n title: '3. Pending API',\n group: 'lifecycle',\n componentId: 'LifecyclePendingApi',\n },\n {\n id: 'lifecyclePostAction',\n title: '4. Post action',\n group: 'lifecycle',\n componentId: 'LifecyclePostAction',\n },\n {\n id: 'lifecycleGeneralError',\n title: 'e1. General errors',\n group: 'errors',\n componentId: 'LifecycleGeneralError',\n },\n {\n id: 'lifecycleApiError',\n title: 'e2. API errors',\n group: 'errors',\n componentId: 'LifecycleApiError',\n },\n {\n id: 'lifecycleFailed',\n title: 'e3. Failed requests (after retries)',\n group: 'errors',\n componentId: 'LifecycleFailed',\n },\n {\n id: 'endpointStatus',\n title: 'Endpoint status',\n group: 'settings & stats',\n componentId: 'EndpointStatus',\n },\n {\n id: 'settingsGlobal',\n title: 'Global settings',\n group: 'settings & stats',\n componentId: 'GlobalSettings',\n },\n {\n id: 'settingsEndpoints',\n title: 'Endpoints configs',\n group: 'settings & stats',\n componentId: 'EndpointConfigs',\n },\n {\n id: 'statsGlobal',\n title: 'Global stats',\n group: 'settings & stats',\n componentId: 'GlobalStats',\n },\n];\n\nconst getGroups = (): string[] => {\n const output: string[] = [];\n\n devRoutes.forEach((group) => {\n if (!output.includes(group.group)) {\n output.push(group.group);\n }\n });\n\n return output;\n};\n\nexport const devGroups: string[] = getGroups();\n","import { createSelector } from 'reselect';\nimport { connectedSelectors, LifecycleStatus } from 'redux-connected';\n\nexport const $requests = createSelector(\n connectedSelectors.$requests,\n (requests) => {\n return requests\n .map((request) => {\n const { items } = request;\n\n const lastPoint = items[items.length - 1] ?? {};\n\n const journeyWithDelta = items.map((point, index) => {\n const nextPoint = items[index + 1] ?? point;\n const delta = nextPoint.timestamp - point.timestamp;\n\n return {\n ...point,\n delta,\n };\n });\n\n return {\n ...request,\n items: journeyWithDelta,\n lastPointTimestamp: lastPoint.timestamp,\n lastPointStatus: lastPoint.status,\n };\n })\n .sort((a: any, b: any) => {\n if (a.lastPointTimestamp === b.lastPointTimestamp) {\n return 0;\n }\n\n return a.lastPointTimestamp > b.lastPointTimestamp ? -1 : 1;\n });\n }\n);\n\n// 1\nexport const $requestsReceived = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.RECEIVED;\n });\n});\n\nexport const $requestsReceivedPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find((point) => point.status === LifecycleStatus.RECEIVED);\n });\n});\n\n// 2\nexport const $requestsInQueue = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.IN_QUEUE;\n });\n});\n\nexport const $requestsInQueuePast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n return items.find((point) => point.status === LifecycleStatus.IN_QUEUE);\n });\n});\n\n// 3\nexport const $requestsPendingApi = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return (\n lastPoint &&\n lastPoint.status === LifecycleStatus.PENDING_API_RESPONSE\n );\n });\n});\n\nexport const $requestsPendingApiPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.PENDING_API_RESPONSE\n );\n });\n});\n\n// 4\nexport const $requestsPostAction = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.POST_ACTION;\n });\n});\n\nexport const $requestsPostActionPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.POST_ACTION\n );\n });\n});\n\n// e1\nexport const $requestsGeneralError = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.GENERAL_ERROR;\n });\n});\n\nexport const $requestsGeneralErrorPast = createSelector(\n $requests,\n (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.GENERAL_ERROR\n );\n });\n }\n);\n\n// e2\nexport const $requestsApiError = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.API_ERROR;\n });\n});\n\n// e3\nexport const $requestsFailed = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find((point) => point.status === LifecycleStatus.FAILED);\n });\n});\n\nexport const $requestsApiErrorPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.API_ERROR\n );\n });\n});\n\nexport const $menuBadges = createSelector(\n $requestsReceived,\n $requestsInQueue,\n $requestsGeneralError,\n $requestsPendingApi,\n $requestsApiError,\n $requestsFailed,\n $requestsPostAction,\n (\n requestsReceived,\n requestsInQueue,\n requestsGeneralError,\n requestsPendingApi,\n requestsApiError,\n requestsFailed,\n requestsPostAction\n ) => {\n return {\n lifecycleReceived: requestsReceived.length,\n lifecycleInQueue: requestsInQueue.length,\n lifecycleGeneralError: requestsGeneralError.length,\n lifecyclePendingApi: requestsPendingApi.length,\n lifecycleApiError: requestsApiError.length,\n lifecycleFailed: requestsFailed.length,\n lifecyclePostAction: requestsPostAction.length,\n };\n }\n);\n\nexport const $menuBadgesTotal = createSelector(\n $requestsReceivedPast,\n $requestsInQueuePast,\n $requestsGeneralErrorPast,\n $requestsPendingApiPast,\n $requestsApiErrorPast,\n $requestsFailed,\n $requestsPostActionPast,\n (\n requestsReceived,\n requestsInQueue,\n requestsGeneralError,\n requestsPendingApi,\n requestsApiError,\n requestsFailed,\n requestsPostAction\n ) => {\n return {\n lifecycleReceived: requestsReceived.length,\n lifecycleInQueue: requestsInQueue.length,\n lifecycleGeneralError: requestsGeneralError.length,\n lifecyclePendingApi: requestsPendingApi.length,\n lifecycleApiError: requestsApiError.length,\n lifecycleFailed: requestsFailed.length,\n lifecyclePostAction: requestsPostAction.length,\n };\n }\n);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport DevMenu from '../components/DevMenu/DevMenu';\nimport { devGroups, devRoutes, IDevRoute } from '../data/devRoutes';\nimport { $menuBadges, $menuBadgesTotal } from '../store/selectors';\n\ntype DevPanelProps = {\n selectedId: string;\n onClick: (route: IDevRoute) => void;\n};\n\nexport function DevMenuContainer(props: DevPanelProps) {\n const badges = useSelector($menuBadges);\n const badgesTotal = useSelector($menuBadgesTotal);\n\n return (\n <DevMenu\n groups={devGroups}\n items={devRoutes}\n badges={badges}\n badgesTotal={badgesTotal}\n selectedId={props.selectedId}\n onClick={props.onClick}\n />\n );\n}\n\nexport default DevMenuContainer;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n color: #eee;\n background-color: #232332;\n display: flex;\n flex-direction: row;\n`;\n\nexport const Content = styled.div`\n flex: 1;\n background-color: rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n`;\n\nexport const Actions = styled.div`\n position: absolute;\n bottom: 5px;\n ${(props) => props.theme.left('10px')}\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n border-top: 1px solid #333;\n max-height: 380px;\n overflow-y: scroll;\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n`;\n","export const timestamp = () => new Date().getTime();\n\nexport let startOfTime = timestamp();\n\nexport const resetStartOfTime = () => {\n startOfTime = timestamp();\n};\n\nexport const getMinutes = () => {\n return new Date().getMinutes();\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n font-family: monospace;\n color: #99a;\n`;\n\nexport const Full = styled.div`\n font-size: 24px;\n`;\n\nexport const Fraction = styled.div`\n font-size: 12px;\n`;\n","import React from 'react';\nimport { startOfTime } from '../../utils/date';\nimport { Container, Full, Fraction } from './Time.style';\n\nexport type TimeProps = {\n value: number;\n};\n\nexport function Time(props: TimeProps) {\n const { value } = props;\n\n const relativeValue = (value - startOfTime) / 1000;\n\n const full = Math.floor(relativeValue);\n const fraction = (relativeValue - full).toFixed(3).split('.').pop();\n\n return (\n <Container className='Time-container' data-testid='Time-container'>\n <Full>{full}</Full>\n <Fraction>{fraction}</Fraction>\n </Container>\n );\n}\n\nexport default Time;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 10px 20px;\n\n &:nth-child(2n-1) {\n background-color: rgba(0, 0, 0, 0.2);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.3);\n cursor: pointer;\n }\n`;\n\nexport const Status = styled.div`\n color: #aaa;\n`;\n\nexport const DataIcon = styled.div`\n background-color: #000;\n padding: 3px 7px;\n font-size: 13px;\n font-weight: bold;\n color: purple;\n border-radius: 5px;\n ${(props) => props.theme.marginLeft('10px')}\n`;\n\nexport const Delta = styled.div`\n font-size: 13px;\n width: 60px;\n font-weight: bold;\n color: olive;\n ${(props) => props.theme.marginRight('10px')}\n text-align: center;\n font-family: monospace;\n`;\n\nexport const Flex = styled.div`\n flex: 1;\n`;\n","import React from 'react';\nimport Time from '../Time/Time';\nimport { Container, Status, DataIcon, Delta, Flex } from './JourneyRow.style';\nimport { JourneyPoint, LifecycleStatus } from 'redux-connected';\n\nexport type JourneyRowProps = {\n point: JourneyPoint;\n};\n\nconst statusMap: Record<LifecycleStatus, string> = {\n [LifecycleStatus.RECEIVED]: 'Received',\n [LifecycleStatus.POST_ACTION_OPTIMISTIC]: 'Post action (optimistic)',\n [LifecycleStatus.IN_QUEUE]: 'In queue',\n [LifecycleStatus.GENERAL_ERROR]: 'General error',\n [LifecycleStatus.PENDING_API_RESPONSE]: 'Pending API',\n [LifecycleStatus.API_ERROR]: 'API error',\n [LifecycleStatus.POST_ACTION]: 'Post action',\n [LifecycleStatus.FAILED]: 'Failed',\n};\n\nexport function JourneyRow(props: JourneyRowProps) {\n const { point } = props;\n const { status, timestamp, data, delta = '' } = point;\n\n function printPoint() {\n console.log(data);\n }\n\n function renderDataIcon() {\n if (!data) {\n return null;\n }\n\n return <DataIcon>D</DataIcon>;\n }\n\n function renderDelta() {\n if (!delta) {\n return null;\n }\n\n return <Delta>+{delta.toLocaleString()}</Delta>;\n }\n\n return (\n <Container\n className='JourneyRow-container'\n data-testid='JourneyRow-container'\n onClick={printPoint}\n >\n <Status>{statusMap[status]}</Status>\n {renderDataIcon()}\n <Flex />\n {renderDelta()}\n <Time value={timestamp} />\n </Container>\n );\n}\n\nexport default JourneyRow;\n","import React from 'react';\nimport { Container } from './RequestJourney.style';\nimport { ApiRequest, JourneyPoint } from 'redux-connected';\nimport JourneyRow from '../JourneyRow/JourneyRow';\n\nexport type RequestJourneyProps = {\n item: ApiRequest;\n};\n\nexport function RequestJourney(props: RequestJourneyProps) {\n const { item } = props;\n\n function renderItem(point: JourneyPoint, index: number) {\n return <JourneyRow key={index} point={point} />;\n }\n\n function renderItems() {\n return item.items.map((point: JourneyPoint, index: number) =>\n renderItem(point, index)\n );\n }\n\n return (\n <Container\n className='RequestJourney-container'\n data-testid='RequestJourney-container'\n >\n {renderItems()}\n </Container>\n );\n}\n\nexport default RequestJourney;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n padding: 20px;\n`;\n\nexport const Table = styled.table``;\n\nexport const Tr = styled.tr``;\n\nexport const Td = styled.td`\n color: goldenrod;\n\n &:first-child {\n color: #778;\n text-align: right;\n ${(props) => props.theme.paddingRight('10px')}\n }\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ width?: number }>`\n flex: 1;\n max-height: 850px;\n overflow: auto;\n padding: 0 25px;\n max-width: ${(props) => (props.width ? props.width + 'px' : '680px')};\n color: #ccc;\n line-height: 26px;\n\n &::-webkit-scrollbar {\n width: 8px;\n height: 7px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n`;\n","import React from 'react';\nimport { Container } from './JsonViewer.style';\n\nexport type JsonViewerProps = {\n json: Json | undefined;\n width?: number;\n};\n\nexport function JsonViewer(props: JsonViewerProps) {\n const { json, width } = props;\n\n return (\n <Container\n className='JsonViewer-container'\n data-testid='JsonViewer-container'\n width={width}\n >\n <pre>{JSON.stringify(json, null, 4)}</pre>\n </Container>\n );\n}\n\nexport default JsonViewer;\n","import React from 'react';\nimport { Container, Table, Tr, Td } from './RequestDetails.style';\nimport { ApiRequest } from 'redux-connected';\nimport JsonViewer from '../JsonViewer/JsonViewer';\nimport bytes from 'bytes';\n\nexport type RequestDetailsProps = {\n item: ApiRequest;\n};\n\nexport function RequestDetails(props: RequestDetailsProps) {\n const { item } = props;\n\n return (\n <Container\n className='RequestDetails-container'\n data-testid='RequestDetails-container'\n >\n <Table>\n <tbody>\n <Tr>\n <Td>sequence</Td>\n <Td>{item.sequence}</Td>\n </Tr>\n <Tr>\n <Td>id</Td>\n <Td>{item.shortId}</Td>\n </Tr>\n <Tr>\n <Td>apiVerb</Td>\n <Td>{item.argsApiVerb}</Td>\n </Tr>\n <Tr>\n <Td>connection</Td>\n <Td>{item.argsConnectionType}</Td>\n </Tr>\n <Tr>\n <Td>duration</Td>\n <Td>{item.apiDuration}</Td>\n </Tr>\n <Tr>\n <Td>nodeName</Td>\n <Td>{item.argsNodeName}</Td>\n </Tr>\n <Tr>\n <Td>responseSize</Td>\n <Td>\n {item.apiResponseSize &&\n bytes(item.apiResponseSize)}\n </Td>\n </Tr>\n </tbody>\n </Table>\n\n <JsonViewer width={290} json={item.originalAction} />\n </Container>\n );\n}\n\nexport default RequestDetails;\n","import React from 'react';\nimport { Container } from './DevInspector.style';\nimport { ApiRequest } from 'redux-connected';\nimport RequestJourney from '../RequestJourney/RequestJourney';\nimport RequestDetails from '../RequestDetails/RequestDetails';\n\nexport type DevInspectorProps = {\n item?: ApiRequest;\n};\n\nexport function DevInspector(props: DevInspectorProps) {\n const { item } = props;\n\n if (!item) {\n return (\n <Container\n className='DevInspector-container'\n data-testid='DevInspector-container'\n ></Container>\n );\n }\n\n return (\n <Container\n className='DevInspector-container'\n data-testid='DevInspector-container'\n >\n <RequestDetails item={item} />\n <RequestJourney item={item} />\n </Container>\n );\n}\n\nexport default DevInspector;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n\n .list {\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n }\n`;\n\nexport const Empty = styled.div`\n color: #456;\n margin: 30px;\n font-size: 17px;\n text-align: center;\n text-shadow: 1px 3px 3px rgba(0, 0, 0, 0.2);\n`;\n","import React from 'react';\nimport { Container, Empty } from './DevList.style';\nimport { FixedSizeList as List } from 'react-window';\nimport classnames from 'classnames';\n\nexport type DevListProps = {\n items: Json[];\n row: React.FC<any>;\n selectedRow: any;\n onClick: (item: any) => void;\n};\n\nexport function DevList(props: DevListProps) {\n const { row: Cmp, items, selectedRow } = props;\n\n const Item = (rowInfo: any) => {\n const { index, style } = rowInfo;\n\n const item = items[index];\n const className = classnames({ selected: item.id === selectedRow?.id });\n\n return (\n <Cmp\n onClick={props.onClick}\n className={className}\n index={index}\n style={style}\n item={item}\n />\n );\n };\n\n function renderEmpty() {\n return <Empty>Empty list</Empty>;\n }\n\n function renderList() {\n if (items.length === 0) {\n return renderEmpty();\n }\n\n return (\n <List\n height={850}\n itemCount={items.length}\n itemSize={68}\n width={350}\n className='list'\n >\n {Item}\n </List>\n );\n }\n\n return (\n <Container\n className='DevList-container'\n data-testid='DevList-container'\n >\n {renderList()}\n </Container>\n );\n}\n\nexport default DevList;\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ index: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 10px;\n max-width: 90%;\n background-color: ${(props) =>\n props.index % 2 === 1 ? 'rgba(0, 0, 0, 0.2)' : 'transparent'};\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.7);\n cursor: pointer;\n }\n`;\n\nexport const Col = styled.div`\n &:first-child {\n flex: 1;\n }\n`;\n\nexport const Id = styled.div`\n color: goldenrod;\n font-size: 16px;\n`;\n\nexport const Type = styled.div`\n color: brown;\n`;\n","import React from 'react';\nimport { Container, Col, Id, Type } from './RequestRow.style';\nimport Time from '../Time/Time';\nimport { ApiRequest } from 'redux-connected';\n\nexport type RequestRowProps = {\n style: Json;\n item: ApiRequest;\n index: number;\n className?: string;\n onClick: (item: ApiRequest) => void;\n};\n\nexport function RequestRow(props: RequestRowProps) {\n const { index, style, item, className } = props;\n const { sequence, createdTS } = item;\n\n return (\n <Container\n className={`DevListRow-container ${className}`}\n data-testid='DevListRow-container'\n style={style}\n index={index}\n onClick={() => props.onClick(item)}\n >\n <Col>\n <Id>{sequence}</Id>\n <Type>{item.originalAction?.type}</Type>\n </Col>\n <Col>\n <Time value={createdTS} />\n </Col>\n </Container>\n );\n}\n\nexport default RequestRow;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n`;\n","import DevInspector from '../DevInspector/DevInspector';\nimport DevList from '../DevList/DevList';\nimport React, { useState } from 'react';\nimport RequestRow from '../RequestRow/RequestRow';\nimport { ApiRequest } from 'redux-connected';\nimport { Container } from './Lifecycle.style';\n\nexport type LifecycleProps = {\n requests: ApiRequest[];\n};\n\nexport function Lifecycle(props: LifecycleProps) {\n const { requests } = props;\n const [item, setItem] = useState<ApiRequest>();\n\n function onClick(newItem: ApiRequest) {\n setItem(newItem);\n }\n\n return (\n <Container\n className='Lifecycle-container'\n data-testid='Lifecycle-container'\n >\n <DevList\n items={requests}\n row={RequestRow}\n onClick={onClick}\n selectedRow={item}\n />\n <DevInspector item={item} />\n </Container>\n );\n}\n\nexport default Lifecycle;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsReceivedPast } from '../store/selectors';\n\nexport function LifecycleReceivedContainer() {\n const requests = useSelector($requestsReceivedPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleReceivedContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\n\nexport function GlobalStatsContainer() {\n const json = useSelector(connectedSelectors.$apiGlobalStatsRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default GlobalStatsContainer;\n","import React from 'react';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\nimport { useSelector } from 'react-redux';\n\nexport function EndpointConfigsContainer() {\n const json = useSelector(connectedSelectors.$endpointsConfigRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default EndpointConfigsContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\n\nexport function GlobalSettingsContainer() {\n const json = useSelector(connectedSelectors.$apiGlobalSettingsRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default GlobalSettingsContainer;\n","import React from 'react';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\nimport { useSelector } from 'react-redux';\n\nexport function EndpointStatusContainer() {\n const json = useSelector(connectedSelectors.$endpointsStateRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default EndpointStatusContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsInQueuePast } from '../store/selectors';\n\nexport function LifecycleInQueueContainer() {\n const requests = useSelector($requestsInQueuePast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleInQueueContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsGeneralErrorPast } from '../store/selectors';\n\nexport function LifecycleGeneralErrorContainer() {\n const requests = useSelector($requestsGeneralErrorPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleGeneralErrorContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsPendingApiPast } from '../store/selectors';\n\nexport function LifecyclePendingApiContainer() {\n const requests = useSelector($requestsPendingApiPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecyclePendingApiContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsApiErrorPast } from '../store/selectors';\n\nexport function LifecycleApiErrorContainer() {\n const requests = useSelector($requestsApiErrorPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleApiErrorContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsPostActionPast } from '../store/selectors';\n\nexport function LifecyclePostActionContainer() {\n const requests = useSelector($requestsPostActionPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecyclePostActionContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsFailed } from '../store/selectors';\n\nexport function LifecycleFailedContainer() {\n const requests = useSelector($requestsFailed);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleFailedContainer;\n","import LifecycleReceivedContainer from '../containers/LifecycleReceivedContainer';\nimport GlobalStatsContainer from '../containers/GlobalStatsContainer';\nimport EndpointConfigsContainer from '../containers/EndpointConfigsContainer';\nimport GlobalSettingsContainer from '../containers/GlobalSettingsContainer';\nimport EndpointStatusContainer from '../containers/EndpointStatusContainer';\nimport LifecycleInQueueContainer from '../containers/LifecycleInQueueContainer';\nimport LifecycleGeneralErrorContainer from '../containers/LifecycleGeneralErrorContainer';\nimport LifecyclePendingApiContainer from '../containers/LifecyclePendingApiContainer';\nimport LifecycleApiErrorContainer from '../containers/LifecycleApiErrorContainer';\nimport LifecyclePostActionContainer from '../containers/LifecyclePostActionContainer';\nimport LifecycleFailedContainer from '../containers/LifecycleFailedContainer';\n\ntype DevComponents = Record<string, React.FC<any>>;\n\nexport const devComponents: DevComponents = {\n LifecycleReceived: LifecycleReceivedContainer,\n LifecycleInQueue: LifecycleInQueueContainer,\n LifecycleGeneralError: LifecycleGeneralErrorContainer,\n LifecyclePendingApi: LifecyclePendingApiContainer,\n LifecycleApiError: LifecycleApiErrorContainer,\n LifecycleFailed: LifecycleFailedContainer,\n LifecyclePostAction: LifecyclePostActionContainer,\n GlobalSettings: GlobalSettingsContainer,\n GlobalStats: GlobalStatsContainer,\n EndpointConfigs: EndpointConfigsContainer,\n EndpointStatus: EndpointStatusContainer,\n};\n","import DevMenu from '../../containers/DevMenuContainer';\nimport React, { useState } from 'react';\nimport { Actions, Container, Content } from './DevPanel.style';\nimport { devComponents } from '../../data/devComponents';\nimport { devRoutes, IDevRoute } from '../../data/devRoutes';\n\nexport type DevPanelProps = {\n children: JSX.Element | JSX.Element[];\n};\n\nexport function DevPanel(props: DevPanelProps) {\n const [route, setRoute] = useState<IDevRoute>(devRoutes[0]);\n\n function renderRoute() {\n const Cmp = devComponents[route.componentId];\n return <Cmp key={route.id} />;\n }\n\n return (\n <Container\n className='DevPanel-container'\n data-testid='DevPanel-container'\n >\n <DevMenu\n selectedId={route.id}\n onClick={(item: IDevRoute) => setRoute(item)}\n />\n <Actions>{props.children}</Actions>\n <Content>{renderRoute()}</Content>\n </Container>\n );\n}\n\n/*\n for the chrome extension devtools panel\n TODO: find another way to encapsulate this\n\nlet bgConnection;\n\nfunction init(id: string) {\n bgConnection = chrome.runtime?.connect({\n name: id,\n });\n\n if (bgConnection) {\n bgConnection.onMessage.addListener((message: Json) => {\n console.log('message ->', message);\n });\n }\n}\n\nif (chrome) {\n const tabId = String(chrome.devtools?.inspectedWindow.tabId ?? '');\n init(tabId);\n}\n*/\n\nexport default DevPanel;\n","import React from 'react';\nimport DevPanel from '../components/DevPanel/DevPanel';\n\ntype DevPanelProps = {\n children: JSX.Element | JSX.Element[];\n};\n\nexport function DevPanelContainer(props: DevPanelProps) {\n return <DevPanel>{props.children}</DevPanel>;\n}\n\nexport default DevPanelContainer;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n color: olive;\n margin: 0 5px;\n`;\n","import React from 'react';\nimport { Container } from './Size.style';\nimport bytes from 'bytes';\nimport { useMemo } from 'react';\n\nexport type SizeProps = {\n size?: number;\n};\n\nexport function Size(props: SizeProps) {\n const { size = 0 } = props;\n const sizeText = useMemo(() => bytes(size), [size]);\n\n return (\n <Container className='Size-container' data-testid='Size-container'>\n {!size ? '-' : sizeText}\n </Container>\n );\n}\n\nexport default Size;\n","import Icon from '../Icon/Icon';\nimport React, { useRef } from 'react';\nimport { Container } from './DevtoolsApp.style';\nimport { DevPanelContainer } from '../../containers/DevPanelContainer';\nimport { Provider } from 'react-redux';\nimport Size from '../Size/Size';\nimport classnames from 'classnames';\n\nexport type DevtoolsAppProps = {\n connectedStore: any;\n clearRequests: () => void;\n downloadState: () => void;\n storeSizeInBytes?: number;\n isDarkMode?: boolean;\n};\n\nexport function DevtoolsApp(props: DevtoolsAppProps) {\n const { connectedStore, storeSizeInBytes, isDarkMode } = props;\n const ref = useRef(null);\n\n const className = classnames('DevtoolsApp-container', {\n darkMode: isDarkMode,\n });\n\n return (\n <Container\n ref={ref}\n className={className}\n data-testid='DevtoolsApp-container'\n >\n <Provider store={connectedStore}>\n <DevPanelContainer>\n <Size size={storeSizeInBytes} />\n <Icon\n name='clearAll'\n onClick={() => props.clearRequests()}\n />\n <Icon name='download' onClick={props.downloadState} />\n </DevPanelContainer>\n </Provider>\n </Container>\n );\n}\n\nexport default DevtoolsApp;\n","export const download = (filename: string, json: Json) => {\n const data = JSON.stringify(json, null, 4);\n\n const blob = new Blob([data], { type: 'text/csv' });\n // @ts-ignore\n if (window.navigator.msSaveOrOpenBlob) {\n // @ts-ignore\n window.navigator.msSaveBlob(blob, filename);\n } else {\n const elem = window.document.createElement('a');\n elem.href = window.URL.createObjectURL(blob);\n elem.download = filename;\n document.body.appendChild(elem);\n elem.click();\n document.body.removeChild(elem);\n }\n};\n","import { useState, useEffect } from 'react';\nimport { debounce } from 'shared-base';\n\ntype Callback = () => void;\n\ninterface ReduxStore {\n getState: () => Json;\n subscribe: (callback: Callback) => void;\n}\n\nexport const useStoreSize = (store: ReduxStore) => {\n const [storeSize, setStoreSize] = useState<number>();\n\n const calculateSize = debounce(() => {\n const state = store.getState();\n const size = JSON.stringify(state).length;\n setStoreSize(size);\n }, 500);\n\n useEffect(() => {\n store.subscribe(() => {\n calculateSize();\n });\n }, [store]);\n\n return storeSize;\n};\n","import React from 'react';\nimport DevtoolsApp from '../components/DevtoolsApp/DevtoolsApp';\nimport { clearCompletedRequests, clearFailedRequests } from 'redux-connected';\nimport { getMinutes, resetStartOfTime } from '../utils/date';\nimport { download } from '../utils/download';\nimport { useStoreSize } from '../hooks/useStoreSize';\n\nexport type DevtoolsAppProps = {\n connectedStore: any;\n isDarkMode?: boolean;\n};\n\nexport function DevtoolsAppContainer(props: DevtoolsAppProps) {\n const { connectedStore, isDarkMode } = props;\n const storeSizeInBytes = useStoreSize(connectedStore);\n\n function clearRequests() {\n connectedStore.dispatch(clearCompletedRequests());\n connectedStore.dispatch(clearFailedRequests());\n // also resets time\n resetStartOfTime();\n }\n\n function downloadState() {\n const state = connectedStore.getState();\n const minutes = getMinutes();\n const filename = `state_${minutes}.json`;\n download(filename, state);\n }\n\n return (\n <DevtoolsApp\n connectedStore={connectedStore}\n clearRequests={clearRequests}\n downloadState={downloadState}\n storeSizeInBytes={storeSizeInBytes}\n isDarkMode={isDarkMode}\n />\n );\n}\n\nexport default DevtoolsAppContainer;\n"],"names":["Container","_a","timestamp","List","DevMenu"],"mappings":";;;;;;;;;AAQA,MAAM,WAAW,CAAC,UAAqB;AAC7B,QAAA,EAAE,OAAO,GAAO,IAAA;AAEtB,SACK,sBAAA,cAAA,OAAA;AAAA,IACG,OAAM;AAAA,IACN,SAAQ;AAAA,IACR,OAAO,GAAG;AAAA,IACV,QAAQ,GAAG;AAAA,IACX,MAAK;AAAA,EAAA,GAEJ,sBAAA,cAAA,QAAA;AAAA,IAAK,GAAE;AAAA,IAAgB,MAAK;AAAA,EAAA,CAAO,GACnC,sBAAA,cAAA,QAAA;AAAA,IAAK,GAAE;AAAA,EAA4C,CAAA,CACxD;AAER;AAEA,MAAM,QAAQ,CAAC,UAAqB;AAC1B,QAAA,EAAE,OAAO,GAAO,IAAA;AAEtB,SACK,sBAAA,cAAA,OAAA;AAAA,IACG,OAAM;AAAA,IACN,SAAQ;AAAA,IACR,OAAO,GAAG;AAAA,IACV,QAAQ,GAAG;AAAA,IACX,MAAK;AAAA,EAAA,GAEJ,sBAAA,cAAA,QAAA;AAAA,IAAK,GAAE;AAAA,IAAgB,MAAK;AAAA,EAAA,CAAO,GACnC,sBAAA,cAAA,QAAA;AAAA,IAAK,GAAE;AAAA,EAAwG,CAAA,CACpH;AAER;AAEA,MAAM,WAAW,CAAC,UAAqB;AAC7B,QAAA,EAAE,OAAO,GAAO,IAAA;AAEtB,SACK,sBAAA,cAAA,OAAA;AAAA,IACG,OAAM;AAAA,IACN,SAAQ;AAAA,IACR,OAAO,GAAG;AAAA,IACV,QAAQ,GAAG;AAAA,IACX,MAAK;AAAA,EAAA,GAEJ,sBAAA,cAAA,QAAA;AAAA,IAAK,GAAE;AAAA,IAAgB,MAAK;AAAA,EAAA,CAAO,GACnC,sBAAA,cAAA,QAAA;AAAA,IAAK,GAAE;AAAA,EAAiD,CAAA,CAC7D;AAER;AAIO,MAAM,WAAkB;AAAA,EAC3B,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AACd;AC/DO,MAAMA,cAAY,OAAO;AAAA;AAAA,aAEnB,CAAC,UAAU;;AAAA,qBAAM,UAAN,YAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACOhC,SAAS,KAAK,OAAkB;AACnC,QAAM,EAAE,MAAM,OAAO,IAAI,UAAU;AACnC,QAAM,MAAM,SAAS;AAErB,SACK,sBAAA,cAAAA,aAAA;AAAA,IACG,WAAU;AAAA,IACV,eAAY;AAAA,IACZ;AAAA,IACA,SAAS,MAAM;AAAA,EAAA,GAEd,sBAAA,cAAA,KAAA;AAAA,IAAI;AAAA,EAAY,CAAA,CACrB;AAER;ACvBO,MAAMA,cAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAzB,MAAMA,cAAY,OAAO;AAAA;AAAA,MAE1B,CAAC,UAAU,MAAM,MAAM,YAAY,oCAAoC;AAAA;AAAA;AAItE,MAAM,YAAY,OAAO;AAAA;AAAA;AAIzB,MAAM,iBAAiB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ9B,MAAM,WAAW,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBxB,MAAM,QAAQ,OAAO;AAAA;AAAA;AAIrB,MAAM,QAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASf,MAAA,aAAa,OAAO,KAAK;AAAA;AAAA;AC/B/B,SAAS,QAAQ,OAAqB;AACzC,QAAM,EAAE,QAAQ,OAAO,YAAY,QAAQ,YAAgB,IAAA;AAE3D,WAAS,WAAW,MAAiB;AAC3B,UAAA,EAAE,OAAO,GAAO,IAAA;AACtB,UAAM,WAAW,OAAO;AAExB,UAAM,QAAQ,OAAO;AACrB,UAAM,aAAa,YAAY;AAE/B,WACK,sBAAA,cAAA,UAAA;AAAA,MACG,KAAK,KAAK;AAAA,MACV,WAAW,WAAW,EAAE,UAAU;AAAA,MAClC,SAAS,MAAM,MAAM,QAAQ,IAAI;AAAA,IAAA,uCAEhC,OAAO,MAAA,KAAM,GACb,aAAa,KAAK,eAAe,SAC7B,sBAAA,cAAA,YAAA,MAAY,UAAW,GAE3B,QAAQ,KAAM,sBAAA,cAAA,OAAA,MAAO,KAAM,CAChC;AAAA,EAER;AAEA,WAAS,YAAY,YAAyB;AAC1C,WAAO,WAAW,IAAI,CAAC,SAAoB,WAAW,IAAI,CAAC;AAAA,EAC/D;AAEA,WAAS,YAAY,OAAe;AAChC,UAAM,aAAa,MAAM,OAAO,CAAC,SAAS,KAAK,UAAU,KAAK;AAE9D,WACK,sBAAA,cAAA,WAAA;AAAA,MAAU,KAAK;AAAA,IAAA,uCACX,gBAAgB,MAAA,KAAM,GACtB,YAAY,UAAU,CAC3B;AAAA,EAER;AAEA,WAAS,eAAe;AACpB,WAAO,OAAO,IAAI,CAAC,UAAkB,YAAY,KAAK,CAAC;AAAA,EAC3D;AAEA,SACK,sBAAA,cAAAA,aAAA;AAAA,IACG,WAAU;AAAA,IACV,eAAY;AAAA,EAAA,GAEX,aACL,CAAA;AAER;ACnEO,MAAM,YAAyB;AAAA,EAClC;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EAEA;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,IACI,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACjB;AACJ;AAEA,MAAM,YAAY,MAAgB;AAC9B,QAAM,SAAmB,CAAA;AAEf,YAAA,QAAQ,CAAC,UAAU;AACzB,QAAI,CAAC,OAAO,SAAS,MAAM,KAAK,GAAG;AACxB,aAAA,KAAK,MAAM,KAAK;AAAA,IAC3B;AAAA,EAAA,CACH;AAEM,SAAA;AACX;AAEO,MAAM,YAAsB,UAAU;ACtFtC,MAAM,YAAY;AAAA,EACrB,mBAAmB;AAAA,EACnB,CAAC,aAAa;AACH,WAAA,SACF,IAAI,CAAC,YAAY;;AACR,YAAA,EAAE,MAAU,IAAA;AAElB,YAAM,aAAY,WAAM,MAAM,SAAS,OAArB,YAA2B;AAE7C,YAAM,mBAAmB,MAAM,IAAI,CAAC,OAAO,UAAU;;AAC3C,cAAA,aAAYC,MAAA,MAAM,QAAQ,OAAd,OAAAA,MAAoB;AAChC,cAAA,QAAQ,UAAU,YAAY,MAAM;AAEnC,eAAA;AAAA,UACH,GAAG;AAAA,UACH;AAAA,QAAA;AAAA,MACJ,CACH;AAEM,aAAA;AAAA,QACH,GAAG;AAAA,QACH,OAAO;AAAA,QACP,oBAAoB,UAAU;AAAA,QAC9B,iBAAiB,UAAU;AAAA,MAAA;AAAA,IAElC,CAAA,EACA,KAAK,CAAC,GAAQ,MAAW;AAClB,UAAA,EAAE,uBAAuB,EAAE,oBAAoB;AACxC,eAAA;AAAA,MACX;AAEA,aAAO,EAAE,qBAAqB,EAAE,qBAAqB,KAAK;AAAA,IAAA,CAC7D;AAAA,EACT;AACJ;AAGO,MAAM,oBAAoB,eAAe,WAAW,CAAC,aAAa;AAC9D,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AACZ,UAAA,YAAY,MAAM,MAAM,SAAS;AAChC,WAAA,aAAa,UAAU,WAAW,gBAAgB;AAAA,EAAA,CAC5D;AACL,CAAC;AAEM,MAAM,wBAAwB,eAAe,WAAW,CAAC,aAAa;AAClE,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AAElB,WAAO,MAAM,KAAK,CAAC,UAAU,MAAM,WAAW,gBAAgB,QAAQ;AAAA,EAAA,CACzE;AACL,CAAC;AAGM,MAAM,mBAAmB,eAAe,WAAW,CAAC,aAAa;AAC7D,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AACZ,UAAA,YAAY,MAAM,MAAM,SAAS;AAChC,WAAA,aAAa,UAAU,WAAW,gBAAgB;AAAA,EAAA,CAC5D;AACL,CAAC;AAEM,MAAM,uBAAuB,eAAe,WAAW,CAAC,aAAa;AACjE,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AAClB,WAAO,MAAM,KAAK,CAAC,UAAU,MAAM,WAAW,gBAAgB,QAAQ;AAAA,EAAA,CACzE;AACL,CAAC;AAGM,MAAM,sBAAsB,eAAe,WAAW,CAAC,aAAa;AAChE,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AACZ,UAAA,YAAY,MAAM,MAAM,SAAS;AAEnC,WAAA,aACA,UAAU,WAAW,gBAAgB;AAAA,EAAA,CAE5C;AACL,CAAC;AAEM,MAAM,0BAA0B,eAAe,WAAW,CAAC,aAAa;AACpE,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AAElB,WAAO,MAAM;AAAA,MACT,CAAC,UAAU,MAAM,WAAW,gBAAgB;AAAA,IAAA;AAAA,EAChD,CACH;AACL,CAAC;AAGM,MAAM,sBAAsB,eAAe,WAAW,CAAC,aAAa;AAChE,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AACZ,UAAA,YAAY,MAAM,MAAM,SAAS;AAChC,WAAA,aAAa,UAAU,WAAW,gBAAgB;AAAA,EAAA,CAC5D;AACL,CAAC;AAEM,MAAM,0BAA0B,eAAe,WAAW,CAAC,aAAa;AACpE,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AAElB,WAAO,MAAM;AAAA,MACT,CAAC,UAAU,MAAM,WAAW,gBAAgB;AAAA,IAAA;AAAA,EAChD,CACH;AACL,CAAC;AAGM,MAAM,wBAAwB,eAAe,WAAW,CAAC,aAAa;AAClE,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AACZ,UAAA,YAAY,MAAM,MAAM,SAAS;AAChC,WAAA,aAAa,UAAU,WAAW,gBAAgB;AAAA,EAAA,CAC5D;AACL,CAAC;AAEM,MAAM,4BAA4B;AAAA,EACrC;AAAA,EACA,CAAC,aAAa;AACH,WAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,YAAA,EAAE,MAAU,IAAA;AAElB,aAAO,MAAM;AAAA,QACT,CAAC,UAAU,MAAM,WAAW,gBAAgB;AAAA,MAAA;AAAA,IAChD,CACH;AAAA,EACL;AACJ;AAGO,MAAM,oBAAoB,eAAe,WAAW,CAAC,aAAa;AAC9D,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AACZ,UAAA,YAAY,MAAM,MAAM,SAAS;AAChC,WAAA,aAAa,UAAU,WAAW,gBAAgB;AAAA,EAAA,CAC5D;AACL,CAAC;AAGM,MAAM,kBAAkB,eAAe,WAAW,CAAC,aAAa;AAC5D,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AAElB,WAAO,MAAM,KAAK,CAAC,UAAU,MAAM,WAAW,gBAAgB,MAAM;AAAA,EAAA,CACvE;AACL,CAAC;AAEM,MAAM,wBAAwB,eAAe,WAAW,CAAC,aAAa;AAClE,SAAA,SAAS,OAAO,CAAC,YAAY;AAC1B,UAAA,EAAE,MAAU,IAAA;AAElB,WAAO,MAAM;AAAA,MACT,CAAC,UAAU,MAAM,WAAW,gBAAgB;AAAA,IAAA;AAAA,EAChD,CACH;AACL,CAAC;AAEM,MAAM,cAAc;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,CACI,kBACA,iBACA,sBACA,oBACA,kBACA,gBACA,uBACC;AACM,WAAA;AAAA,MACH,mBAAmB,iBAAiB;AAAA,MACpC,kBAAkB,gBAAgB;AAAA,MAClC,uBAAuB,qBAAqB;AAAA,MAC5C,qBAAqB,mBAAmB;AAAA,MACxC,mBAAmB,iBAAiB;AAAA,MACpC,iBAAiB,eAAe;AAAA,MAChC,qBAAqB,mBAAmB;AAAA,IAAA;AAAA,EAEhD;AACJ;AAEO,MAAM,mBAAmB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,CACI,kBACA,iBACA,sBACA,oBACA,kBACA,gBACA,uBACC;AACM,WAAA;AAAA,MACH,mBAAmB,iBAAiB;AAAA,MACpC,kBAAkB,gBAAgB;AAAA,MAClC,uBAAuB,qBAAqB;AAAA,MAC5C,qBAAqB,mBAAmB;AAAA,MACxC,mBAAmB,iBAAiB;AAAA,MACpC,iBAAiB,eAAe;AAAA,MAChC,qBAAqB,mBAAmB;AAAA,IAAA;AAAA,EAEhD;AACJ;AChNO,SAAS,iBAAiB,OAAsB;AAC7C,QAAA,SAAS,YAAY,WAAW;AAChC,QAAA,cAAc,YAAY,gBAAgB;AAEhD,SACK,sBAAA,cAAA,SAAA;AAAA,IACG,QAAQ;AAAA,IACR,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,YAAY,MAAM;AAAA,IAClB,SAAS,MAAM;AAAA,EAAA,CACnB;AAER;ACvBO,MAAMD,cAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQzB,MAAM,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAOvB,MAAM,UAAU,OAAO;AAAA;AAAA;AAAA,MAGxB,CAAC,UAAU,MAAM,MAAM,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AClBjC,MAAMA,cAAY,OAAO;AAAA;AAAA;AAAA;AAAA;ACAzB,MAAMA,cAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACFzB,MAAM,YAAY,MAAM,IAAI,OAAO,QAAQ;AAE3C,IAAI,cAAc,UAAU;AAE5B,MAAM,mBAAmB,MAAM;AAClC,gBAAc,UAAU;AAC5B;AAEO,MAAM,aAAa,MAAM;AACrB,SAAA,IAAI,OAAO;AACtB;ACRO,MAAMA,cAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQzB,MAAM,OAAO,OAAO;AAAA;AAAA;AAIpB,MAAM,WAAW,OAAO;AAAA;AAAA;ACNxB,SAAS,KAAK,OAAkB;AAC7B,QAAA,EAAE,MAAU,IAAA;AAEZ,QAAA,iBAAiB,QAAQ,eAAe;AAExC,QAAA,OAAO,KAAK,MAAM,aAAa;AAC/B,QAAA,YAAY,gBAAgB,MAAM,QAAQ,CAAC,EAAE,MAAM,GAAG,EAAE;AAE9D,SACK,sBAAA,cAAAA,aAAA;AAAA,IAAU,WAAU;AAAA,IAAiB,eAAY;AAAA,EAAA,uCAC7C,MAAM,MAAA,IAAK,GACX,sBAAA,cAAA,UAAA,MAAU,QAAS,CACxB;AAER;ACpBO,MAAMA,cAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBzB,MAAM,SAAS,OAAO;AAAA;AAAA;AAItB,MAAM,WAAW,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOzB,CAAC,UAAU,MAAM,MAAM,WAAW,MAAM;AAAA;AAGvC,MAAM,QAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKtB,CAAC,UAAU,MAAM,MAAM,YAAY,MAAM;AAAA;AAAA;AAAA;AAKxC,MAAM,OAAO,OAAO;AAAA;AAAA;AClC3B,MAAM,YAA6C;AAAA,EAC/C,CAAC,gBAAgB,WAAW;AAAA,EAC5B,CAAC,gBAAgB,yBAAyB;AAAA,EAC1C,CAAC,gBAAgB,WAAW;AAAA,EAC5B,CAAC,gBAAgB,gBAAgB;AAAA,EACjC,CAAC,gBAAgB,uBAAuB;AAAA,EACxC,CAAC,gBAAgB,YAAY;AAAA,EAC7B,CAAC,gBAAgB,cAAc;AAAA,EAC/B,CAAC,gBAAgB,SAAS;AAC9B;AAEO,SAAS,WAAW,OAAwB;AACzC,QAAA,EAAE,MAAU,IAAA;AAClB,QAAM,EAAE,QAAQ,WAAAE,YAAW,MAAM,QAAQ,GAAO,IAAA;AAEhD,WAAS,aAAa;AAClB,YAAQ,IAAI,IAAI;AAAA,EACpB;AAEA,WAAS,iBAAiB;AACtB,QAAI,CAAC,MAAM;AACA,aAAA;AAAA,IACX;AAEO,WAAA,sBAAA,cAAC,gBAAS,GAAC;AAAA,EACtB;AAEA,WAAS,cAAc;AACnB,QAAI,CAAC,OAAO;AACD,aAAA;AAAA,IACX;AAEA,WAAQ,sBAAA,cAAA,OAAA,MAAM,KAAE,MAAM,gBAAiB;AAAA,EAC3C;AAEA,SACK,sBAAA,cAAAF,aAAA;AAAA,IACG,WAAU;AAAA,IACV,eAAY;AAAA,IACZ,SAAS;AAAA,EAAA,GAER,sBAAA,cAAA,QAAA,MAAQ,UAAU,OAAQ,GAC1B,eAAA,GACD,sBAAA,cAAC,MAAK,IAAA,GACL,YAAY,GACZ,sBAAA,cAAA,MAAA;AAAA,IAAK,OAAOE;AAAA,EAAW,CAAA,CAC5B;AAER;AChDO,SAAS,eAAe,OAA4B;AACjD,QAAA,EAAE,KAAS,IAAA;AAER,WAAA,WAAW,OAAqB,OAAe;AACpD,WAAQ,sBAAA,cAAA,YAAA;AAAA,MAAW,KAAK;AAAA,MAAO;AAAA,IAAA,CAAc;AAAA,EACjD;AAEA,WAAS,cAAc;AACnB,WAAO,KAAK,MAAM;AAAA,MAAI,CAAC,OAAqB,UACxC,WAAW,OAAO,KAAK;AAAA,IAAA;AAAA,EAE/B;AAEA,SACK,sBAAA,cAAAF,aAAA;AAAA,IACG,WAAU;AAAA,IACV,eAAY;AAAA,EAAA,GAEX,YACL,CAAA;AAER;AC5BO,MAAMA,cAAY,OAAO;AAAA;AAAA;AAAA;AAKzB,MAAM,QAAQ,OAAO;AAErB,MAAM,KAAK,OAAO;AAElB,MAAM,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMf,CAAC,UAAU,MAAM,MAAM,aAAa,MAAM;AAAA;AAAA;ACf7C,MAAMA,cAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,iBAKf,CAAC,UAAW,MAAM,QAAQ,MAAM,QAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACCzD,SAAS,WAAW,OAAwB;AACzC,QAAA,EAAE,MAAM,MAAU,IAAA;AAExB,SACK,sBAAA,cAAAA,aAAA;AAAA,IACG,WAAU;AAAA,IACV,eAAY;AAAA,IACZ;AAAA,EAEA,GAAA,sBAAA,cAAC,aAAK,KAAK,UAAU,MAAM,MAAM,CAAC,CAAE,CACxC;AAER;ACVO,SAAS,eAAe,OAA4B;AACjD,QAAA,EAAE,KAAS,IAAA;AAEjB,SACK,sBAAA,cAAAA,aAAA;AAAA,IACG,WAAU;AAAA,IACV,eAAY;AAAA,EAAA,GAEZ,sBAAA,cAAC,aACI,sBAAA,cAAA,SAAA,0CACI,IACG,MAAA,sBAAA,cAAC,UAAG,UAAQ,uCACX,IAAI,MAAA,KAAK,QAAS,CACvB,uCACC,IACG,MAAA,sBAAA,cAAC,UAAG,IAAE,uCACL,IAAI,MAAA,KAAK,OAAQ,CACtB,uCACC,IACG,MAAA,sBAAA,cAAC,UAAG,SAAO,uCACV,IAAI,MAAA,KAAK,WAAY,CAC1B,uCACC,IACG,MAAA,sBAAA,cAAC,IAAG,MAAA,YAAU,GACd,sBAAA,cAAC,UAAI,KAAK,kBAAmB,CACjC,GACA,sBAAA,cAAC,UACI,sBAAA,cAAA,IAAA,MAAG,UAAQ,GACZ,sBAAA,cAAC,UAAI,KAAK,WAAY,CAC1B,GACA,sBAAA,cAAC,UACI,sBAAA,cAAA,IAAA,MAAG,UAAQ,GACZ,sBAAA,cAAC,UAAI,KAAK,YAAa,CAC3B,GACA,sBAAA,cAAC,UACI,sBAAA,cAAA,IAAA,MAAG,cAAY,GAChB,sBAAA,cAAC,UACI,KAAK,mBACF,MAAM,KAAK,eAAe,CAClC,CACJ,CACJ,CACJ,GAEC,sBAAA,cAAA,YAAA;AAAA,IAAW,OAAO;AAAA,IAAK,MAAM,KAAK;AAAA,EAAgB,CAAA,CACvD;AAER;AC/CO,SAAS,aAAa,OAA0B;AAC7C,QAAA,EAAE,KAAS,IAAA;AAEjB,MAAI,CAAC,MAAM;AACP,WACK,sBAAA,cAAAA,aAAA;AAAA,MACG,WAAU;AAAA,MACV,eAAY;AAAA,IAAA,CACf;AAAA,EAET;AAEA,SACK,sBAAA,cAAAA,aAAA;AAAA,IACG,WAAU;AAAA,IACV,eAAY;AAAA,EAAA,GAEX,sBAAA,cAAA,gBAAA;AAAA,IAAe;AAAA,EAAA,CAAY,GAC3B,sBAAA,cAAA,gBAAA;AAAA,IAAe;AAAA,EAAY,CAAA,CAChC;AAER;AC7BO,MAAMA,cAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBzB,MAAM,QAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACfrB,SAAS,QAAQ,OAAqB;AACzC,QAAM,EAAE,KAAK,KAAK,OAAO,gBAAgB;AAEnC,QAAA,OAAO,CAAC,YAAiB;AACrB,UAAA,EAAE,OAAO,MAAU,IAAA;AAEzB,UAAM,OAAO,MAAM;AACb,UAAA,YAAY,WAAW,EAAE,UAAU,KAAK,QAAO,2CAAa,KAAI;AAEtE,WACK,sBAAA,cAAA,KAAA;AAAA,MACG,SAAS,MAAM;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACJ;AAAA,EAAA;AAIR,WAAS,cAAc;AACZ,WAAA,sBAAA,cAAC,aAAM,YAAU;AAAA,EAC5B;AAEA,WAAS,aAAa;AACd,QAAA,MAAM,WAAW,GAAG;AACpB,aAAO,YAAY;AAAA,IACvB;AAEA,WACK,sBAAA,cAAAG,eAAA;AAAA,MACG,QAAQ;AAAA,MACR,WAAW,MAAM;AAAA,MACjB,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAU;AAAA,IAAA,GAET,IACL;AAAA,EAER;AAEA,SACK,sBAAA,cAAAH,aAAA;AAAA,IACG,WAAU;AAAA,IACV,eAAY;AAAA,EAAA,GAEX,WACL,CAAA;AAER;AC5DO,MAAMA,cAAY,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOR,CAAC,UACjB,MAAM,QAAQ,MAAM,IAAI,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhD,MAAM,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAMnB,MAAM,KAAK,OAAO;AAAA;AAAA;AAAA;AAKlB,MAAM,OAAO,OAAO;AAAA;AAAA;AChBpB,SAAS,WAAW,OAAwB;;AAC/C,QAAM,EAAE,OAAO,OAAO,MAAM,cAAc;AACpC,QAAA,EAAE,UAAU,UAAc,IAAA;AAEhC,SACK,sBAAA,cAAAA,aAAA;AAAA,IACG,WAAW,wBAAwB;AAAA,IACnC,eAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,SAAS,MAAM,MAAM,QAAQ,IAAI;AAAA,EAAA,GAEhC,sBAAA,cAAA,KAAA,MACI,sBAAA,cAAA,IAAA,MAAI,QAAS,GACd,sBAAA,cAAC,MAAM,OAAA,UAAK,mBAAL,mBAAqB,IAAK,CACrC,GACA,sBAAA,cAAC,WACI,sBAAA,cAAA,MAAA;AAAA,IAAK,OAAO;AAAA,EAAW,CAAA,CAC5B,CACJ;AAER;AChCO,MAAMA,cAAY,OAAO;AAAA;AAAA;AAAA;ACSzB,SAAS,UAAU,OAAuB;AACvC,QAAA,EAAE,SAAa,IAAA;AACrB,QAAM,CAAC,MAAM,OAAO,IAAI,SAAqB;AAE7C,WAAS,QAAQ,SAAqB;AAClC,YAAQ,OAAO;AAAA,EACnB;AAEA,SACK,sBAAA,cAAAA,aAAA;AAAA,IACG,WAAU;AAAA,IACV,eAAY;AAAA,EAAA,GAEX,sBAAA,cAAA,SAAA;AAAA,IACG,OAAO;AAAA,IACP,KAAK;AAAA,IACL;AAAA,IACA,aAAa;AAAA,EAAA,CACjB,GACC,sBAAA,cAAA,cAAA;AAAA,IAAa;AAAA,EAAY,CAAA,CAC9B;AAER;AC5BO,SAAS,6BAA6B;AACnC,QAAA,WAAW,YAAY,qBAAqB;AAClD,SAAQ,sBAAA,cAAA,WAAA;AAAA,IAAU;AAAA,EAAA,CAAoB;AAC1C;ACHO,SAAS,uBAAuB;AAC7B,QAAA,OAAO,YAAY,mBAAmB,kBAAkB;AAE9D,SAAQ,sBAAA,cAAA,YAAA;AAAA,IAAW;AAAA,EAAA,CAAY;AACnC;ACJO,SAAS,2BAA2B;AACjC,QAAA,OAAO,YAAY,mBAAmB,mBAAmB;AAE/D,SAAQ,sBAAA,cAAA,YAAA;AAAA,IAAW;AAAA,EAAA,CAAY;AACnC;ACJO,SAAS,0BAA0B;AAChC,QAAA,OAAO,YAAY,mBAAmB,qBAAqB;AAEjE,SAAQ,sBAAA,cAAA,YAAA;AAAA,IAAW;AAAA,EAAA,CAAY;AACnC;ACJO,SAAS,0BAA0B;AAChC,QAAA,OAAO,YAAY,mBAAmB,kBAAkB;AAE9D,SAAQ,sBAAA,cAAA,YAAA;AAAA,IAAW;AAAA,EAAA,CAAY;AACnC;ACJO,SAAS,4BAA4B;AAClC,QAAA,WAAW,YAAY,oBAAoB;AACjD,SAAQ,sBAAA,cAAA,WAAA;AAAA,IAAU;AAAA,EAAA,CAAoB;AAC1C;ACHO,SAAS,iCAAiC;AACvC,QAAA,WAAW,YAAY,yBAAyB;AACtD,SAAQ,sBAAA,cAAA,WAAA;AAAA,IAAU;AAAA,EAAA,CAAoB;AAC1C;ACHO,SAAS,+BAA+B;AACrC,QAAA,WAAW,YAAY,uBAAuB;AACpD,SAAQ,sBAAA,cAAA,WAAA;AAAA,IAAU;AAAA,EAAA,CAAoB;AAC1C;ACHO,SAAS,6BAA6B;AACnC,QAAA,WAAW,YAAY,qBAAqB;AAClD,SAAQ,sBAAA,cAAA,WAAA;AAAA,IAAU;AAAA,EAAA,CAAoB;AAC1C;ACHO,SAAS,+BAA+B;AACrC,QAAA,WAAW,YAAY,uBAAuB;AACpD,SAAQ,sBAAA,cAAA,WAAA;AAAA,IAAU;AAAA,EAAA,CAAoB;AAC1C;ACHO,SAAS,2BAA2B;AACjC,QAAA,WAAW,YAAY,eAAe;AAC5C,SAAQ,sBAAA,cAAA,WAAA;AAAA,IAAU;AAAA,EAAA,CAAoB;AAC1C;ACMO,MAAM,gBAA+B;AAAA,EACxC,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,gBAAgB;AACpB;AChBO,SAAS,SAAS,OAAsB;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAoB,UAAU,EAAE;AAE1D,WAAS,cAAc;AACb,UAAA,MAAM,cAAc,MAAM;AAChC,WAAQ,sBAAA,cAAA,KAAA;AAAA,MAAI,KAAK,MAAM;AAAA,IAAA,CAAI;AAAA,EAC/B;AAEA,SACK,sBAAA,cAAAA,aAAA;AAAA,IACG,WAAU;AAAA,IACV,eAAY;AAAA,EAAA,GAEX,sBAAA,cAAAI,kBAAA;AAAA,IACG,YAAY,MAAM;AAAA,IAClB,SAAS,CAAC,SAAoB,SAAS,IAAI;AAAA,EAC/C,CAAA,GACC,sBAAA,cAAA,SAAA,MAAS,MAAM,QAAS,GACxB,sBAAA,cAAA,SAAA,MAAS,YAAY,CAAE,CAC5B;AAER;ACxBO,SAAS,kBAAkB,OAAsB;AAC7C,SAAA,sBAAA,cAAC,UAAU,MAAA,MAAM,QAAS;AACrC;ACPO,MAAM,YAAY,OAAO;AAAA;AAAA;AAAA;ACOzB,SAAS,KAAK,OAAkB;AAC7B,QAAA,EAAE,OAAO,EAAM,IAAA;AACf,QAAA,WAAW,QAAQ,MAAM,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC;AAElD,SACK,sBAAA,cAAA,WAAA;AAAA,IAAU,WAAU;AAAA,IAAiB,eAAY;AAAA,EAC7C,GAAA,CAAC,OAAO,MAAM,QACnB;AAER;ACFO,SAAS,YAAY,OAAyB;AACjD,QAAM,EAAE,gBAAgB,kBAAkB,WAAA,IAAe;AACnD,QAAA,MAAM,OAAO,IAAI;AAEjB,QAAA,YAAY,WAAW,yBAAyB;AAAA,IAClD,UAAU;AAAA,EAAA,CACb;AAED,SACK,sBAAA,cAAAJ,aAAA;AAAA,IACG;AAAA,IACA;AAAA,IACA,eAAY;AAAA,EAAA,GAEX,sBAAA,cAAA,UAAA;AAAA,IAAS,OAAO;AAAA,EAAA,GACb,sBAAA,cAAC,yBACI,sBAAA,cAAA,MAAA;AAAA,IAAK,MAAM;AAAA,EAAA,CAAkB,GAC7B,sBAAA,cAAA,MAAA;AAAA,IACG,MAAK;AAAA,IACL,SAAS,MAAM,MAAM,cAAc;AAAA,EAAA,CACvC,GACC,sBAAA,cAAA,MAAA;AAAA,IAAK,MAAK;AAAA,IAAW,SAAS,MAAM;AAAA,EAAA,CAAe,CACxD,CACJ,CACJ;AAER;AC1Ca,MAAA,WAAW,CAAC,UAAkB,SAAe;AACtD,QAAM,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AAEnC,QAAA,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,WAAA,CAAY;AAE9C,MAAA,OAAO,UAAU,kBAAkB;AAE5B,WAAA,UAAU,WAAW,MAAM,QAAQ;AAAA,EAAA,OACvC;AACH,UAAM,OAAO,OAAO,SAAS,cAAc,GAAG;AAC9C,SAAK,OAAO,OAAO,IAAI,gBAAgB,IAAI;AAC3C,SAAK,WAAW;AACP,aAAA,KAAK,YAAY,IAAI;AAC9B,SAAK,MAAM;AACF,aAAA,KAAK,YAAY,IAAI;AAAA,EAClC;AACJ;ACNa,MAAA,eAAe,CAAC,UAAsB;AAC/C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAiB;AAE7C,QAAA,gBAAgB,SAAS,MAAM;AAC3B,UAAA,QAAQ,MAAM;AACpB,UAAM,OAAO,KAAK,UAAU,KAAK,EAAE;AACnC,iBAAa,IAAI;AAAA,KAClB,GAAG;AAEN,YAAU,MAAM;AACZ,UAAM,UAAU,MAAM;AACJ;IAAA,CACjB;AAAA,EAAA,GACF,CAAC,KAAK,CAAC;AAEH,SAAA;AACX;ACdO,SAAS,qBAAqB,OAAyB;AACpD,QAAA,EAAE,gBAAgB,WAAe,IAAA;AACjC,QAAA,mBAAmB,aAAa,cAAc;AAEpD,WAAS,gBAAgB;AACN,mBAAA,SAAS,wBAAwB;AACjC,mBAAA,SAAS,qBAAqB;AAE5B;EACrB;AAEA,WAAS,gBAAgB;AACf,UAAA,QAAQ,eAAe;AAC7B,UAAM,UAAU;AAChB,UAAM,WAAW,SAAS;AAC1B,aAAS,UAAU,KAAK;AAAA,EAC5B;AAEA,SACK,sBAAA,cAAA,aAAA;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACJ;AAER;;"}
@@ -0,0 +1,247 @@
1
+ (function(f,E){typeof exports=="object"&&typeof module!="undefined"?E(exports,require("react"),require("styled-components"),require("react-redux"),require("classnames"),require("reselect"),require("redux-connected"),require("bytes"),require("react-window"),require("shared-base")):typeof define=="function"&&define.amd?define(["exports","react","styled-components","react-redux","classnames","reselect","redux-connected","bytes","react-window","shared-base"],E):(f=typeof globalThis!="undefined"?globalThis:f||self,E(f.ReduxConnectedDevtools={},f.react,f.styledComponents,f.reactRedux,f.classnames,f.reselect,f.reduxConnected,f.bytes,f.reactWindow,f.sharedBase))})(this,function(f,E,J,m,Q,d,c,V,U,W){"use strict";function P(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var n=P(E),a=P(J),k=P(Q),C=P(V);const K={close:e=>{const{size:t=24}=e;return n.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:`${t}px`,height:`${t}px`,fill:"currentColor"},n.default.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),n.default.createElement("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}))},clearAll:e=>{const{size:t=24}=e;return n.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:`${t}px`,height:`${t}px`,fill:"currentColor"},n.default.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),n.default.createElement("path",{d:"M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z"}))},download:e=>{const{size:t=24}=e;return n.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:`${t}px`,height:`${t}px`,fill:"currentColor"},n.default.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),n.default.createElement("path",{d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"}))}},X=a.default.div`
2
+ margin: 0 3px;
3
+ color: ${e=>{var t;return(t=e.color)!=null?t:"inherit"}};
4
+ cursor: pointer;
5
+
6
+ &:hover {
7
+ color: gold;
8
+ }
9
+ `;function D(e){const{name:t,size:l=20,color:r}=e,o=K[t];return n.default.createElement(X,{className:"Icon-container","data-testid":"Icon-container",color:r,onClick:e.onClick},n.default.createElement(o,{size:l}))}const Y=a.default.div`
10
+ flex: 1;
11
+ background-color: #223;
12
+ z-index: 3;
13
+ color: #eee;
14
+ display: flex;
15
+ flex-direction: column;
16
+ min-width: 880px;
17
+ min-height: 880px;
18
+ `,Z=a.default.div`
19
+ width: 190px;
20
+ ${e=>e.theme.borderRight("1px solid rgba(255, 255, 255, 0.2)")}
21
+ box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
22
+ `,ee=a.default.div`
23
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
24
+ `,te=a.default.div`
25
+ font-size: 13px;
26
+ padding: 5px 10px;
27
+ color: rgba(255, 255, 255, 0.5);
28
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
29
+ background-color: rgba(0, 0, 0, 0.1);
30
+ `,ne=a.default.div`
31
+ display: flex;
32
+ flex-direction: row;
33
+ align-items: center;
34
+ padding: 6px 10px;
35
+ font-size: 14px;
36
+ color: rgba(255, 255, 255, 0.89);
37
+ background-color: transparent;
38
+
39
+ &.selected {
40
+ color: gold;
41
+ background-color: rgba(255, 255, 255, 0.05);
42
+ }
43
+
44
+ &:hover {
45
+ background-color: rgba(255, 255, 255, 0.1);
46
+ cursor: pointer;
47
+ }
48
+ `,le=a.default.div`
49
+ flex: 1;
50
+ `,q=a.default.div`
51
+ background-color: rgba(0, 0, 80, 0.3);
52
+ padding: 0 4px;
53
+ font-size: 12px;
54
+ border-radius: 7px;
55
+ border: 1px solid #334;
56
+ color: cyan;
57
+ `,re=a.default(q)`
58
+ color: #555;
59
+ `;function oe(e){const{groups:t,items:l,selectedId:r,badges:o,badgesTotal:i}=e;function s(u){const{title:S,id:I}=u,ft=I===r,R=o[I],$=i[I];return n.default.createElement(ne,{key:u.id,className:k.default({selected:ft}),onClick:()=>e.onClick(u)},n.default.createElement(le,null,S),$>0&&$!==R&&n.default.createElement(re,null,$),R>0&&n.default.createElement(q,null,R))}function h(u){return u.map(S=>s(S))}function y(u){const S=l.filter(I=>I.group===u);return n.default.createElement(ee,{key:u},n.default.createElement(te,null,u),h(S))}function x(){return t.map(u=>y(u))}return n.default.createElement(Z,{className:"DevMenu-container","data-testid":"DevMenu-container"},x())}const L=[{id:"lifecycleReceived",title:"1. Received",group:"lifecycle",componentId:"LifecycleReceived"},{id:"lifecycleInQueue",title:"2. In queue",group:"lifecycle",componentId:"LifecycleInQueue"},{id:"lifecyclePendingApi",title:"3. Pending API",group:"lifecycle",componentId:"LifecyclePendingApi"},{id:"lifecyclePostAction",title:"4. Post action",group:"lifecycle",componentId:"LifecyclePostAction"},{id:"lifecycleGeneralError",title:"e1. General errors",group:"errors",componentId:"LifecycleGeneralError"},{id:"lifecycleApiError",title:"e2. API errors",group:"errors",componentId:"LifecycleApiError"},{id:"lifecycleFailed",title:"e3. Failed requests (after retries)",group:"errors",componentId:"LifecycleFailed"},{id:"endpointStatus",title:"Endpoint status",group:"settings & stats",componentId:"EndpointStatus"},{id:"settingsGlobal",title:"Global settings",group:"settings & stats",componentId:"GlobalSettings"},{id:"settingsEndpoints",title:"Endpoints configs",group:"settings & stats",componentId:"EndpointConfigs"},{id:"statsGlobal",title:"Global stats",group:"settings & stats",componentId:"GlobalStats"}],ae=(()=>{const e=[];return L.forEach(t=>{e.includes(t.group)||e.push(t.group)}),e})(),g=d.createSelector(c.connectedSelectors.$requests,e=>e.map(t=>{var i;const{items:l}=t,r=(i=l[l.length-1])!=null?i:{},o=l.map((s,h)=>{var u;const x=((u=l[h+1])!=null?u:s).timestamp-s.timestamp;return{...s,delta:x}});return{...t,items:o,lastPointTimestamp:r.timestamp,lastPointStatus:r.status}}).sort((t,l)=>t.lastPointTimestamp===l.lastPointTimestamp?0:t.lastPointTimestamp>l.lastPointTimestamp?-1:1)),ce=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.RECEIVED})),N=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.RECEIVED)})),ie=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.IN_QUEUE})),z=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.IN_QUEUE)})),se=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.PENDING_API_RESPONSE})),T=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.PENDING_API_RESPONSE)})),ue=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.POST_ACTION})),G=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.POST_ACTION)})),de=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.GENERAL_ERROR})),_=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.GENERAL_ERROR)})),fe=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t,r=l[l.length-1];return r&&r.status===c.LifecycleStatus.API_ERROR})),A=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.FAILED)})),O=d.createSelector(g,e=>e.filter(t=>{const{items:l}=t;return l.find(r=>r.status===c.LifecycleStatus.API_ERROR)})),me=d.createSelector(ce,ie,de,se,fe,A,ue,(e,t,l,r,o,i,s)=>({lifecycleReceived:e.length,lifecycleInQueue:t.length,lifecycleGeneralError:l.length,lifecyclePendingApi:r.length,lifecycleApiError:o.length,lifecycleFailed:i.length,lifecyclePostAction:s.length})),pe=d.createSelector(N,z,_,T,O,A,G,(e,t,l,r,o,i,s)=>({lifecycleReceived:e.length,lifecycleInQueue:t.length,lifecycleGeneralError:l.length,lifecyclePendingApi:r.length,lifecycleApiError:o.length,lifecycleFailed:i.length,lifecyclePostAction:s.length}));function ge(e){const t=m.useSelector(me),l=m.useSelector(pe);return n.default.createElement(oe,{groups:ae,items:L,badges:t,badgesTotal:l,selectedId:e.selectedId,onClick:e.onClick})}const Ee=a.default.div`
60
+ flex: 1;
61
+ color: #eee;
62
+ background-color: #232332;
63
+ display: flex;
64
+ flex-direction: row;
65
+ `,he=a.default.div`
66
+ flex: 1;
67
+ background-color: rgba(0, 0, 0, 0.15);
68
+ display: flex;
69
+ flex-direction: column;
70
+ `,ye=a.default.div`
71
+ position: absolute;
72
+ bottom: 5px;
73
+ ${e=>e.theme.left("10px")}
74
+ display: flex;
75
+ flex-direction: row;
76
+ align-items: center;
77
+ `,M=a.default.div`
78
+ flex: 1;
79
+ display: flex;
80
+ flex-direction: column;
81
+ `,ve=a.default.div`
82
+ flex: 1;
83
+ border-top: 1px solid #333;
84
+ max-height: 380px;
85
+ overflow-y: scroll;
86
+
87
+ &::-webkit-scrollbar {
88
+ width: 8px;
89
+ }
90
+
91
+ /* Track */
92
+ &::-webkit-scrollbar-track {
93
+ background: #333;
94
+ }
95
+
96
+ /* Handle */
97
+ &::-webkit-scrollbar-thumb {
98
+ background: #555;
99
+ }
100
+
101
+ /* Handle on hover */
102
+ &::-webkit-scrollbar-thumb:hover {
103
+ background: #666;
104
+ }
105
+ `,F=()=>new Date().getTime();let H=F();const be=()=>{H=F()},Se=()=>new Date().getMinutes(),we=a.default.div`
106
+ display: flex;
107
+ flex-direction: row;
108
+ align-items: flex-start;
109
+ font-family: monospace;
110
+ color: #99a;
111
+ `,xe=a.default.div`
112
+ font-size: 24px;
113
+ `,Ie=a.default.div`
114
+ font-size: 12px;
115
+ `;function B(e){const{value:t}=e,l=(t-H)/1e3,r=Math.floor(l),o=(l-r).toFixed(3).split(".").pop();return n.default.createElement(we,{className:"Time-container","data-testid":"Time-container"},n.default.createElement(xe,null,r),n.default.createElement(Ie,null,o))}const Pe=a.default.div`
116
+ flex: 1;
117
+ display: flex;
118
+ flex-direction: row;
119
+ align-items: center;
120
+ padding: 10px 20px;
121
+
122
+ &:nth-child(2n-1) {
123
+ background-color: rgba(0, 0, 0, 0.2);
124
+ }
125
+
126
+ &:hover {
127
+ background-color: rgba(0, 0, 0, 0.3);
128
+ cursor: pointer;
129
+ }
130
+ `,ke=a.default.div`
131
+ color: #aaa;
132
+ `,Le=a.default.div`
133
+ background-color: #000;
134
+ padding: 3px 7px;
135
+ font-size: 13px;
136
+ font-weight: bold;
137
+ color: purple;
138
+ border-radius: 5px;
139
+ ${e=>e.theme.marginLeft("10px")}
140
+ `,Ae=a.default.div`
141
+ font-size: 13px;
142
+ width: 60px;
143
+ font-weight: bold;
144
+ color: olive;
145
+ ${e=>e.theme.marginRight("10px")}
146
+ text-align: center;
147
+ font-family: monospace;
148
+ `,Re=a.default.div`
149
+ flex: 1;
150
+ `,$e={[c.LifecycleStatus.RECEIVED]:"Received",[c.LifecycleStatus.POST_ACTION_OPTIMISTIC]:"Post action (optimistic)",[c.LifecycleStatus.IN_QUEUE]:"In queue",[c.LifecycleStatus.GENERAL_ERROR]:"General error",[c.LifecycleStatus.PENDING_API_RESPONSE]:"Pending API",[c.LifecycleStatus.API_ERROR]:"API error",[c.LifecycleStatus.POST_ACTION]:"Post action",[c.LifecycleStatus.FAILED]:"Failed"};function Ce(e){const{point:t}=e,{status:l,timestamp:r,data:o,delta:i=""}=t;function s(){console.log(o)}function h(){return o?n.default.createElement(Le,null,"D"):null}function y(){return i?n.default.createElement(Ae,null,"+",i.toLocaleString()):null}return n.default.createElement(Pe,{className:"JourneyRow-container","data-testid":"JourneyRow-container",onClick:s},n.default.createElement(ke,null,$e[l]),h(),n.default.createElement(Re,null),y(),n.default.createElement(B,{value:r}))}function De(e){const{item:t}=e;function l(o,i){return n.default.createElement(Ce,{key:i,point:o})}function r(){return t.items.map((o,i)=>l(o,i))}return n.default.createElement(ve,{className:"RequestJourney-container","data-testid":"RequestJourney-container"},r())}const qe=a.default.div`
151
+ flex: 1;
152
+ padding: 20px;
153
+ `,Ne=a.default.table``,v=a.default.tr``,p=a.default.td`
154
+ color: goldenrod;
155
+
156
+ &:first-child {
157
+ color: #778;
158
+ text-align: right;
159
+ ${e=>e.theme.paddingRight("10px")}
160
+ }
161
+ `,ze=a.default.div`
162
+ flex: 1;
163
+ max-height: 850px;
164
+ overflow: auto;
165
+ padding: 0 25px;
166
+ max-width: ${e=>e.width?e.width+"px":"680px"};
167
+ color: #ccc;
168
+ line-height: 26px;
169
+
170
+ &::-webkit-scrollbar {
171
+ width: 8px;
172
+ height: 7px;
173
+ }
174
+
175
+ /* Track */
176
+ &::-webkit-scrollbar-track {
177
+ background: #333;
178
+ }
179
+
180
+ /* Handle */
181
+ &::-webkit-scrollbar-thumb {
182
+ background: #555;
183
+ }
184
+
185
+ /* Handle on hover */
186
+ &::-webkit-scrollbar-thumb:hover {
187
+ background: #666;
188
+ }
189
+ `;function w(e){const{json:t,width:l}=e;return n.default.createElement(ze,{className:"JsonViewer-container","data-testid":"JsonViewer-container",width:l},n.default.createElement("pre",null,JSON.stringify(t,null,4)))}function Te(e){const{item:t}=e;return n.default.createElement(qe,{className:"RequestDetails-container","data-testid":"RequestDetails-container"},n.default.createElement(Ne,null,n.default.createElement("tbody",null,n.default.createElement(v,null,n.default.createElement(p,null,"sequence"),n.default.createElement(p,null,t.sequence)),n.default.createElement(v,null,n.default.createElement(p,null,"id"),n.default.createElement(p,null,t.shortId)),n.default.createElement(v,null,n.default.createElement(p,null,"apiVerb"),n.default.createElement(p,null,t.argsApiVerb)),n.default.createElement(v,null,n.default.createElement(p,null,"connection"),n.default.createElement(p,null,t.argsConnectionType)),n.default.createElement(v,null,n.default.createElement(p,null,"duration"),n.default.createElement(p,null,t.apiDuration)),n.default.createElement(v,null,n.default.createElement(p,null,"nodeName"),n.default.createElement(p,null,t.argsNodeName)),n.default.createElement(v,null,n.default.createElement(p,null,"responseSize"),n.default.createElement(p,null,t.apiResponseSize&&C.default(t.apiResponseSize))))),n.default.createElement(w,{width:290,json:t.originalAction}))}function Ge(e){const{item:t}=e;return t?n.default.createElement(M,{className:"DevInspector-container","data-testid":"DevInspector-container"},n.default.createElement(Te,{item:t}),n.default.createElement(De,{item:t})):n.default.createElement(M,{className:"DevInspector-container","data-testid":"DevInspector-container"})}const _e=a.default.div`
190
+ flex: 1;
191
+
192
+ .list {
193
+ &::-webkit-scrollbar {
194
+ width: 8px;
195
+ }
196
+
197
+ /* Track */
198
+ &::-webkit-scrollbar-track {
199
+ background: #333;
200
+ }
201
+
202
+ /* Handle */
203
+ &::-webkit-scrollbar-thumb {
204
+ background: #555;
205
+ }
206
+
207
+ /* Handle on hover */
208
+ &::-webkit-scrollbar-thumb:hover {
209
+ background: #666;
210
+ }
211
+ }
212
+ `,Oe=a.default.div`
213
+ color: #456;
214
+ margin: 30px;
215
+ font-size: 17px;
216
+ text-align: center;
217
+ text-shadow: 1px 3px 3px rgba(0, 0, 0, 0.2);
218
+ `;function Me(e){const{row:t,items:l,selectedRow:r}=e,o=h=>{const{index:y,style:x}=h,u=l[y],S=k.default({selected:u.id===(r==null?void 0:r.id)});return n.default.createElement(t,{onClick:e.onClick,className:S,index:y,style:x,item:u})};function i(){return n.default.createElement(Oe,null,"Empty list")}function s(){return l.length===0?i():n.default.createElement(U.FixedSizeList,{height:850,itemCount:l.length,itemSize:68,width:350,className:"list"},o)}return n.default.createElement(_e,{className:"DevList-container","data-testid":"DevList-container"},s())}const Fe=a.default.div`
219
+ flex: 1;
220
+ display: flex;
221
+ flex-direction: row;
222
+ align-items: center;
223
+ padding: 10px;
224
+ max-width: 90%;
225
+ background-color: ${e=>e.index%2===1?"rgba(0, 0, 0, 0.2)":"transparent"};
226
+
227
+ &:hover {
228
+ background-color: rgba(0, 0, 0, 0.7);
229
+ cursor: pointer;
230
+ }
231
+ `,j=a.default.div`
232
+ &:first-child {
233
+ flex: 1;
234
+ }
235
+ `,He=a.default.div`
236
+ color: goldenrod;
237
+ font-size: 16px;
238
+ `,Be=a.default.div`
239
+ color: brown;
240
+ `;function je(e){var h;const{index:t,style:l,item:r,className:o}=e,{sequence:i,createdTS:s}=r;return n.default.createElement(Fe,{className:`DevListRow-container ${o}`,"data-testid":"DevListRow-container",style:l,index:t,onClick:()=>e.onClick(r)},n.default.createElement(j,null,n.default.createElement(He,null,i),n.default.createElement(Be,null,(h=r.originalAction)==null?void 0:h.type)),n.default.createElement(j,null,n.default.createElement(B,{value:s})))}const Je=a.default.div`
241
+ flex: 1;
242
+ display: flex;
243
+ `;function b(e){const{requests:t}=e,[l,r]=E.useState();function o(i){r(i)}return n.default.createElement(Je,{className:"Lifecycle-container","data-testid":"Lifecycle-container"},n.default.createElement(Me,{items:t,row:je,onClick:o,selectedRow:l}),n.default.createElement(Ge,{item:l}))}function Qe(){const e=m.useSelector(N);return n.default.createElement(b,{requests:e})}function Ve(){const e=m.useSelector(c.connectedSelectors.$apiGlobalStatsRaw);return n.default.createElement(w,{json:e})}function Ue(){const e=m.useSelector(c.connectedSelectors.$endpointsConfigRaw);return n.default.createElement(w,{json:e})}function We(){const e=m.useSelector(c.connectedSelectors.$apiGlobalSettingsRaw);return n.default.createElement(w,{json:e})}function Ke(){const e=m.useSelector(c.connectedSelectors.$endpointsStateRaw);return n.default.createElement(w,{json:e})}function Xe(){const e=m.useSelector(z);return n.default.createElement(b,{requests:e})}function Ye(){const e=m.useSelector(_);return n.default.createElement(b,{requests:e})}function Ze(){const e=m.useSelector(T);return n.default.createElement(b,{requests:e})}function et(){const e=m.useSelector(O);return n.default.createElement(b,{requests:e})}function tt(){const e=m.useSelector(G);return n.default.createElement(b,{requests:e})}function nt(){const e=m.useSelector(A);return n.default.createElement(b,{requests:e})}const lt={LifecycleReceived:Qe,LifecycleInQueue:Xe,LifecycleGeneralError:Ye,LifecyclePendingApi:Ze,LifecycleApiError:et,LifecycleFailed:nt,LifecyclePostAction:tt,GlobalSettings:We,GlobalStats:Ve,EndpointConfigs:Ue,EndpointStatus:Ke};function rt(e){const[t,l]=E.useState(L[0]);function r(){const o=lt[t.componentId];return n.default.createElement(o,{key:t.id})}return n.default.createElement(Ee,{className:"DevPanel-container","data-testid":"DevPanel-container"},n.default.createElement(ge,{selectedId:t.id,onClick:o=>l(o)}),n.default.createElement(ye,null,e.children),n.default.createElement(he,null,r()))}function ot(e){return n.default.createElement(rt,null,e.children)}const at=a.default.div`
244
+ color: olive;
245
+ margin: 0 5px;
246
+ `;function ct(e){const{size:t=0}=e,l=E.useMemo(()=>C.default(t),[t]);return n.default.createElement(at,{className:"Size-container","data-testid":"Size-container"},t?l:"-")}function it(e){const{connectedStore:t,storeSizeInBytes:l,isDarkMode:r}=e,o=E.useRef(null),i=k.default("DevtoolsApp-container",{darkMode:r});return n.default.createElement(Y,{ref:o,className:i,"data-testid":"DevtoolsApp-container"},n.default.createElement(m.Provider,{store:t},n.default.createElement(ot,null,n.default.createElement(ct,{size:l}),n.default.createElement(D,{name:"clearAll",onClick:()=>e.clearRequests()}),n.default.createElement(D,{name:"download",onClick:e.downloadState}))))}const st=(e,t)=>{const l=JSON.stringify(t,null,4),r=new Blob([l],{type:"text/csv"});if(window.navigator.msSaveOrOpenBlob)window.navigator.msSaveBlob(r,e);else{const o=window.document.createElement("a");o.href=window.URL.createObjectURL(r),o.download=e,document.body.appendChild(o),o.click(),document.body.removeChild(o)}},ut=e=>{const[t,l]=E.useState(),r=W.debounce(()=>{const o=e.getState(),i=JSON.stringify(o).length;l(i)},500);return E.useEffect(()=>{e.subscribe(()=>{r()})},[e]),t};function dt(e){const{connectedStore:t,isDarkMode:l}=e,r=ut(t);function o(){t.dispatch(c.clearCompletedRequests()),t.dispatch(c.clearFailedRequests()),be()}function i(){const s=t.getState(),y=`state_${Se()}.json`;st(y,s)}return n.default.createElement(it,{connectedStore:t,clearRequests:o,downloadState:i,storeSizeInBytes:r,isDarkMode:l})}f.DevtoolsApp=dt,Object.defineProperties(f,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
247
+ //# sourceMappingURL=redux-connected-devtools.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redux-connected-devtools.umd.js","sources":["../src/components/Icon/AllIcons.tsx","../src/components/Icon/Icon.style.tsx","../src/components/Icon/Icon.tsx","../src/components/DevtoolsApp/DevtoolsApp.style.tsx","../src/components/DevMenu/DevMenu.style.tsx","../src/components/DevMenu/DevMenu.tsx","../src/data/devRoutes.ts","../src/store/selectors.ts","../src/containers/DevMenuContainer.tsx","../src/components/DevPanel/DevPanel.style.tsx","../src/components/DevInspector/DevInspector.style.tsx","../src/components/RequestJourney/RequestJourney.style.tsx","../src/utils/date.ts","../src/components/Time/Time.style.tsx","../src/components/Time/Time.tsx","../src/components/JourneyRow/JourneyRow.style.tsx","../src/components/JourneyRow/JourneyRow.tsx","../src/components/RequestJourney/RequestJourney.tsx","../src/components/RequestDetails/RequestDetails.style.tsx","../src/components/JsonViewer/JsonViewer.style.tsx","../src/components/JsonViewer/JsonViewer.tsx","../src/components/RequestDetails/RequestDetails.tsx","../src/components/DevInspector/DevInspector.tsx","../src/components/DevList/DevList.style.tsx","../src/components/DevList/DevList.tsx","../src/components/RequestRow/RequestRow.style.tsx","../src/components/RequestRow/RequestRow.tsx","../src/components/Lifecycle/Lifecycle.style.tsx","../src/components/Lifecycle/Lifecycle.tsx","../src/containers/LifecycleReceivedContainer.tsx","../src/containers/GlobalStatsContainer.tsx","../src/containers/EndpointConfigsContainer.tsx","../src/containers/GlobalSettingsContainer.tsx","../src/containers/EndpointStatusContainer.tsx","../src/containers/LifecycleInQueueContainer.tsx","../src/containers/LifecycleGeneralErrorContainer.tsx","../src/containers/LifecyclePendingApiContainer.tsx","../src/containers/LifecycleApiErrorContainer.tsx","../src/containers/LifecyclePostActionContainer.tsx","../src/containers/LifecycleFailedContainer.tsx","../src/data/devComponents.tsx","../src/components/DevPanel/DevPanel.tsx","../src/containers/DevPanelContainer.tsx","../src/components/Size/Size.style.tsx","../src/components/Size/Size.tsx","../src/components/DevtoolsApp/DevtoolsApp.tsx","../src/utils/download.ts","../src/hooks/useStoreSize.ts","../src/containers/DevtoolsAppContainer.tsx"],"sourcesContent":["import React from 'react';\n\nexport type IconName = 'download' | 'close' | 'clearAll';\n\ntype IconProps = {\n size?: number;\n};\n\nconst Download = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z' />\n </svg>\n );\n};\n\nconst Close = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z' />\n </svg>\n );\n};\n\nconst ClearAll = (props: IconProps) => {\n const { size = 24 } = props;\n\n return (\n <svg\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 24 24'\n width={`${size}px`}\n height={`${size}px`}\n fill='currentColor'\n >\n <path d='M0 0h24v24H0z' fill='none' />\n <path d='M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z' />\n </svg>\n );\n};\n\ntype Icons = Record<IconName, React.FC<IconProps>>;\n\nexport const allIcons: Icons = {\n close: Close,\n clearAll: ClearAll,\n download: Download,\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ color?: string }>`\n margin: 0 3px;\n color: ${(props) => props.color ?? 'inherit'};\n cursor: pointer;\n\n &:hover {\n color: gold;\n }\n`;\n","import React from 'react';\nimport { allIcons, IconName } from './AllIcons';\nimport { Container } from './Icon.style';\n\nexport type IconProps = {\n name: IconName;\n color?: string;\n size?: number;\n onClick?: () => void;\n};\n\nexport function Icon(props: IconProps) {\n const { name, size = 20, color } = props;\n const Cmp = allIcons[name];\n\n return (\n <Container\n className='Icon-container'\n data-testid='Icon-container'\n color={color}\n onClick={props.onClick}\n >\n <Cmp size={size} />\n </Container>\n );\n}\n\nexport default Icon;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n background-color: #223;\n z-index: 3;\n color: #eee;\n display: flex;\n flex-direction: column;\n min-width: 880px;\n min-height: 880px;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n width: 190px;\n ${(props) => props.theme.borderRight('1px solid rgba(255, 255, 255, 0.2)')}\n box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);\n`;\n\nexport const MenuGroup = styled.div`\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n`;\n\nexport const MenuGroupTitle = styled.div`\n font-size: 13px;\n padding: 5px 10px;\n color: rgba(255, 255, 255, 0.5);\n border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n background-color: rgba(0, 0, 0, 0.1);\n`;\n\nexport const MenuItem = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 6px 10px;\n font-size: 14px;\n color: rgba(255, 255, 255, 0.89);\n background-color: transparent;\n\n &.selected {\n color: gold;\n background-color: rgba(255, 255, 255, 0.05);\n }\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n cursor: pointer;\n }\n`;\n\nexport const Title = styled.div`\n flex: 1;\n`;\n\nexport const Badge = styled.div`\n background-color: rgba(0, 0, 80, 0.3);\n padding: 0 4px;\n font-size: 12px;\n border-radius: 7px;\n border: 1px solid #334;\n color: cyan;\n`;\n\nexport const BadgeTotal = styled(Badge)`\n color: #555;\n`;\n","import React from 'react';\nimport { IDevRoute } from '../../data/devRoutes';\nimport {\n Container,\n MenuGroup,\n MenuGroupTitle,\n MenuItem,\n Title,\n Badge,\n BadgeTotal,\n} from './DevMenu.style';\nimport classnames from 'classnames';\n\nexport type DevMenuProps = {\n groups: string[];\n items: IDevRoute[];\n onClick: (route: IDevRoute) => void;\n selectedId: string;\n badges: Record<string, number>;\n badgesTotal: Record<string, number>;\n};\n\nexport function DevMenu(props: DevMenuProps) {\n const { groups, items, selectedId, badges, badgesTotal } = props;\n\n function renderItem(item: IDevRoute) {\n const { title, id } = item;\n const selected = id === selectedId;\n\n const badge = badges[id];\n const badgeTotal = badgesTotal[id];\n\n return (\n <MenuItem\n key={item.id}\n className={classnames({ selected })}\n onClick={() => props.onClick(item)}\n >\n <Title>{title}</Title>\n {badgeTotal > 0 && badgeTotal !== badge && (\n <BadgeTotal>{badgeTotal}</BadgeTotal>\n )}\n {badge > 0 && <Badge>{badge}</Badge>}\n </MenuItem>\n );\n }\n\n function renderItems(groupItems: IDevRoute[]) {\n return groupItems.map((item: IDevRoute) => renderItem(item));\n }\n\n function renderGroup(group: string) {\n const groupItems = items.filter((item) => item.group === group);\n\n return (\n <MenuGroup key={group}>\n <MenuGroupTitle>{group}</MenuGroupTitle>\n {renderItems(groupItems)}\n </MenuGroup>\n );\n }\n\n function renderGroups() {\n return groups.map((group: string) => renderGroup(group));\n }\n\n return (\n <Container\n className='DevMenu-container'\n data-testid='DevMenu-container'\n >\n {renderGroups()}\n </Container>\n );\n}\n\nexport default DevMenu;\n","export type IDevRoute = {\n id: string;\n title: string;\n group: string;\n componentId: string;\n};\n\nexport const devRoutes: IDevRoute[] = [\n {\n id: 'lifecycleReceived',\n title: '1. Received',\n group: 'lifecycle',\n componentId: 'LifecycleReceived',\n },\n {\n id: 'lifecycleInQueue',\n title: '2. In queue',\n group: 'lifecycle',\n componentId: 'LifecycleInQueue',\n },\n\n {\n id: 'lifecyclePendingApi',\n title: '3. Pending API',\n group: 'lifecycle',\n componentId: 'LifecyclePendingApi',\n },\n {\n id: 'lifecyclePostAction',\n title: '4. Post action',\n group: 'lifecycle',\n componentId: 'LifecyclePostAction',\n },\n {\n id: 'lifecycleGeneralError',\n title: 'e1. General errors',\n group: 'errors',\n componentId: 'LifecycleGeneralError',\n },\n {\n id: 'lifecycleApiError',\n title: 'e2. API errors',\n group: 'errors',\n componentId: 'LifecycleApiError',\n },\n {\n id: 'lifecycleFailed',\n title: 'e3. Failed requests (after retries)',\n group: 'errors',\n componentId: 'LifecycleFailed',\n },\n {\n id: 'endpointStatus',\n title: 'Endpoint status',\n group: 'settings & stats',\n componentId: 'EndpointStatus',\n },\n {\n id: 'settingsGlobal',\n title: 'Global settings',\n group: 'settings & stats',\n componentId: 'GlobalSettings',\n },\n {\n id: 'settingsEndpoints',\n title: 'Endpoints configs',\n group: 'settings & stats',\n componentId: 'EndpointConfigs',\n },\n {\n id: 'statsGlobal',\n title: 'Global stats',\n group: 'settings & stats',\n componentId: 'GlobalStats',\n },\n];\n\nconst getGroups = (): string[] => {\n const output: string[] = [];\n\n devRoutes.forEach((group) => {\n if (!output.includes(group.group)) {\n output.push(group.group);\n }\n });\n\n return output;\n};\n\nexport const devGroups: string[] = getGroups();\n","import { createSelector } from 'reselect';\nimport { connectedSelectors, LifecycleStatus } from 'redux-connected';\n\nexport const $requests = createSelector(\n connectedSelectors.$requests,\n (requests) => {\n return requests\n .map((request) => {\n const { items } = request;\n\n const lastPoint = items[items.length - 1] ?? {};\n\n const journeyWithDelta = items.map((point, index) => {\n const nextPoint = items[index + 1] ?? point;\n const delta = nextPoint.timestamp - point.timestamp;\n\n return {\n ...point,\n delta,\n };\n });\n\n return {\n ...request,\n items: journeyWithDelta,\n lastPointTimestamp: lastPoint.timestamp,\n lastPointStatus: lastPoint.status,\n };\n })\n .sort((a: any, b: any) => {\n if (a.lastPointTimestamp === b.lastPointTimestamp) {\n return 0;\n }\n\n return a.lastPointTimestamp > b.lastPointTimestamp ? -1 : 1;\n });\n }\n);\n\n// 1\nexport const $requestsReceived = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.RECEIVED;\n });\n});\n\nexport const $requestsReceivedPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find((point) => point.status === LifecycleStatus.RECEIVED);\n });\n});\n\n// 2\nexport const $requestsInQueue = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.IN_QUEUE;\n });\n});\n\nexport const $requestsInQueuePast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n return items.find((point) => point.status === LifecycleStatus.IN_QUEUE);\n });\n});\n\n// 3\nexport const $requestsPendingApi = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return (\n lastPoint &&\n lastPoint.status === LifecycleStatus.PENDING_API_RESPONSE\n );\n });\n});\n\nexport const $requestsPendingApiPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.PENDING_API_RESPONSE\n );\n });\n});\n\n// 4\nexport const $requestsPostAction = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.POST_ACTION;\n });\n});\n\nexport const $requestsPostActionPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.POST_ACTION\n );\n });\n});\n\n// e1\nexport const $requestsGeneralError = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.GENERAL_ERROR;\n });\n});\n\nexport const $requestsGeneralErrorPast = createSelector(\n $requests,\n (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.GENERAL_ERROR\n );\n });\n }\n);\n\n// e2\nexport const $requestsApiError = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n const lastPoint = items[items.length - 1];\n return lastPoint && lastPoint.status === LifecycleStatus.API_ERROR;\n });\n});\n\n// e3\nexport const $requestsFailed = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find((point) => point.status === LifecycleStatus.FAILED);\n });\n});\n\nexport const $requestsApiErrorPast = createSelector($requests, (requests) => {\n return requests.filter((request) => {\n const { items } = request;\n\n return items.find(\n (point) => point.status === LifecycleStatus.API_ERROR\n );\n });\n});\n\nexport const $menuBadges = createSelector(\n $requestsReceived,\n $requestsInQueue,\n $requestsGeneralError,\n $requestsPendingApi,\n $requestsApiError,\n $requestsFailed,\n $requestsPostAction,\n (\n requestsReceived,\n requestsInQueue,\n requestsGeneralError,\n requestsPendingApi,\n requestsApiError,\n requestsFailed,\n requestsPostAction\n ) => {\n return {\n lifecycleReceived: requestsReceived.length,\n lifecycleInQueue: requestsInQueue.length,\n lifecycleGeneralError: requestsGeneralError.length,\n lifecyclePendingApi: requestsPendingApi.length,\n lifecycleApiError: requestsApiError.length,\n lifecycleFailed: requestsFailed.length,\n lifecyclePostAction: requestsPostAction.length,\n };\n }\n);\n\nexport const $menuBadgesTotal = createSelector(\n $requestsReceivedPast,\n $requestsInQueuePast,\n $requestsGeneralErrorPast,\n $requestsPendingApiPast,\n $requestsApiErrorPast,\n $requestsFailed,\n $requestsPostActionPast,\n (\n requestsReceived,\n requestsInQueue,\n requestsGeneralError,\n requestsPendingApi,\n requestsApiError,\n requestsFailed,\n requestsPostAction\n ) => {\n return {\n lifecycleReceived: requestsReceived.length,\n lifecycleInQueue: requestsInQueue.length,\n lifecycleGeneralError: requestsGeneralError.length,\n lifecyclePendingApi: requestsPendingApi.length,\n lifecycleApiError: requestsApiError.length,\n lifecycleFailed: requestsFailed.length,\n lifecyclePostAction: requestsPostAction.length,\n };\n }\n);\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport DevMenu from '../components/DevMenu/DevMenu';\nimport { devGroups, devRoutes, IDevRoute } from '../data/devRoutes';\nimport { $menuBadges, $menuBadgesTotal } from '../store/selectors';\n\ntype DevPanelProps = {\n selectedId: string;\n onClick: (route: IDevRoute) => void;\n};\n\nexport function DevMenuContainer(props: DevPanelProps) {\n const badges = useSelector($menuBadges);\n const badgesTotal = useSelector($menuBadgesTotal);\n\n return (\n <DevMenu\n groups={devGroups}\n items={devRoutes}\n badges={badges}\n badgesTotal={badgesTotal}\n selectedId={props.selectedId}\n onClick={props.onClick}\n />\n );\n}\n\nexport default DevMenuContainer;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n color: #eee;\n background-color: #232332;\n display: flex;\n flex-direction: row;\n`;\n\nexport const Content = styled.div`\n flex: 1;\n background-color: rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n`;\n\nexport const Actions = styled.div`\n position: absolute;\n bottom: 5px;\n ${(props) => props.theme.left('10px')}\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n border-top: 1px solid #333;\n max-height: 380px;\n overflow-y: scroll;\n\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n`;\n","export const timestamp = () => new Date().getTime();\n\nexport let startOfTime = timestamp();\n\nexport const resetStartOfTime = () => {\n startOfTime = timestamp();\n};\n\nexport const getMinutes = () => {\n return new Date().getMinutes();\n};\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n font-family: monospace;\n color: #99a;\n`;\n\nexport const Full = styled.div`\n font-size: 24px;\n`;\n\nexport const Fraction = styled.div`\n font-size: 12px;\n`;\n","import React from 'react';\nimport { startOfTime } from '../../utils/date';\nimport { Container, Full, Fraction } from './Time.style';\n\nexport type TimeProps = {\n value: number;\n};\n\nexport function Time(props: TimeProps) {\n const { value } = props;\n\n const relativeValue = (value - startOfTime) / 1000;\n\n const full = Math.floor(relativeValue);\n const fraction = (relativeValue - full).toFixed(3).split('.').pop();\n\n return (\n <Container className='Time-container' data-testid='Time-container'>\n <Full>{full}</Full>\n <Fraction>{fraction}</Fraction>\n </Container>\n );\n}\n\nexport default Time;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 10px 20px;\n\n &:nth-child(2n-1) {\n background-color: rgba(0, 0, 0, 0.2);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.3);\n cursor: pointer;\n }\n`;\n\nexport const Status = styled.div`\n color: #aaa;\n`;\n\nexport const DataIcon = styled.div`\n background-color: #000;\n padding: 3px 7px;\n font-size: 13px;\n font-weight: bold;\n color: purple;\n border-radius: 5px;\n ${(props) => props.theme.marginLeft('10px')}\n`;\n\nexport const Delta = styled.div`\n font-size: 13px;\n width: 60px;\n font-weight: bold;\n color: olive;\n ${(props) => props.theme.marginRight('10px')}\n text-align: center;\n font-family: monospace;\n`;\n\nexport const Flex = styled.div`\n flex: 1;\n`;\n","import React from 'react';\nimport Time from '../Time/Time';\nimport { Container, Status, DataIcon, Delta, Flex } from './JourneyRow.style';\nimport { JourneyPoint, LifecycleStatus } from 'redux-connected';\n\nexport type JourneyRowProps = {\n point: JourneyPoint;\n};\n\nconst statusMap: Record<LifecycleStatus, string> = {\n [LifecycleStatus.RECEIVED]: 'Received',\n [LifecycleStatus.POST_ACTION_OPTIMISTIC]: 'Post action (optimistic)',\n [LifecycleStatus.IN_QUEUE]: 'In queue',\n [LifecycleStatus.GENERAL_ERROR]: 'General error',\n [LifecycleStatus.PENDING_API_RESPONSE]: 'Pending API',\n [LifecycleStatus.API_ERROR]: 'API error',\n [LifecycleStatus.POST_ACTION]: 'Post action',\n [LifecycleStatus.FAILED]: 'Failed',\n};\n\nexport function JourneyRow(props: JourneyRowProps) {\n const { point } = props;\n const { status, timestamp, data, delta = '' } = point;\n\n function printPoint() {\n console.log(data);\n }\n\n function renderDataIcon() {\n if (!data) {\n return null;\n }\n\n return <DataIcon>D</DataIcon>;\n }\n\n function renderDelta() {\n if (!delta) {\n return null;\n }\n\n return <Delta>+{delta.toLocaleString()}</Delta>;\n }\n\n return (\n <Container\n className='JourneyRow-container'\n data-testid='JourneyRow-container'\n onClick={printPoint}\n >\n <Status>{statusMap[status]}</Status>\n {renderDataIcon()}\n <Flex />\n {renderDelta()}\n <Time value={timestamp} />\n </Container>\n );\n}\n\nexport default JourneyRow;\n","import React from 'react';\nimport { Container } from './RequestJourney.style';\nimport { ApiRequest, JourneyPoint } from 'redux-connected';\nimport JourneyRow from '../JourneyRow/JourneyRow';\n\nexport type RequestJourneyProps = {\n item: ApiRequest;\n};\n\nexport function RequestJourney(props: RequestJourneyProps) {\n const { item } = props;\n\n function renderItem(point: JourneyPoint, index: number) {\n return <JourneyRow key={index} point={point} />;\n }\n\n function renderItems() {\n return item.items.map((point: JourneyPoint, index: number) =>\n renderItem(point, index)\n );\n }\n\n return (\n <Container\n className='RequestJourney-container'\n data-testid='RequestJourney-container'\n >\n {renderItems()}\n </Container>\n );\n}\n\nexport default RequestJourney;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n padding: 20px;\n`;\n\nexport const Table = styled.table``;\n\nexport const Tr = styled.tr``;\n\nexport const Td = styled.td`\n color: goldenrod;\n\n &:first-child {\n color: #778;\n text-align: right;\n ${(props) => props.theme.paddingRight('10px')}\n }\n`;\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ width?: number }>`\n flex: 1;\n max-height: 850px;\n overflow: auto;\n padding: 0 25px;\n max-width: ${(props) => (props.width ? props.width + 'px' : '680px')};\n color: #ccc;\n line-height: 26px;\n\n &::-webkit-scrollbar {\n width: 8px;\n height: 7px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n`;\n","import React from 'react';\nimport { Container } from './JsonViewer.style';\n\nexport type JsonViewerProps = {\n json: Json | undefined;\n width?: number;\n};\n\nexport function JsonViewer(props: JsonViewerProps) {\n const { json, width } = props;\n\n return (\n <Container\n className='JsonViewer-container'\n data-testid='JsonViewer-container'\n width={width}\n >\n <pre>{JSON.stringify(json, null, 4)}</pre>\n </Container>\n );\n}\n\nexport default JsonViewer;\n","import React from 'react';\nimport { Container, Table, Tr, Td } from './RequestDetails.style';\nimport { ApiRequest } from 'redux-connected';\nimport JsonViewer from '../JsonViewer/JsonViewer';\nimport bytes from 'bytes';\n\nexport type RequestDetailsProps = {\n item: ApiRequest;\n};\n\nexport function RequestDetails(props: RequestDetailsProps) {\n const { item } = props;\n\n return (\n <Container\n className='RequestDetails-container'\n data-testid='RequestDetails-container'\n >\n <Table>\n <tbody>\n <Tr>\n <Td>sequence</Td>\n <Td>{item.sequence}</Td>\n </Tr>\n <Tr>\n <Td>id</Td>\n <Td>{item.shortId}</Td>\n </Tr>\n <Tr>\n <Td>apiVerb</Td>\n <Td>{item.argsApiVerb}</Td>\n </Tr>\n <Tr>\n <Td>connection</Td>\n <Td>{item.argsConnectionType}</Td>\n </Tr>\n <Tr>\n <Td>duration</Td>\n <Td>{item.apiDuration}</Td>\n </Tr>\n <Tr>\n <Td>nodeName</Td>\n <Td>{item.argsNodeName}</Td>\n </Tr>\n <Tr>\n <Td>responseSize</Td>\n <Td>\n {item.apiResponseSize &&\n bytes(item.apiResponseSize)}\n </Td>\n </Tr>\n </tbody>\n </Table>\n\n <JsonViewer width={290} json={item.originalAction} />\n </Container>\n );\n}\n\nexport default RequestDetails;\n","import React from 'react';\nimport { Container } from './DevInspector.style';\nimport { ApiRequest } from 'redux-connected';\nimport RequestJourney from '../RequestJourney/RequestJourney';\nimport RequestDetails from '../RequestDetails/RequestDetails';\n\nexport type DevInspectorProps = {\n item?: ApiRequest;\n};\n\nexport function DevInspector(props: DevInspectorProps) {\n const { item } = props;\n\n if (!item) {\n return (\n <Container\n className='DevInspector-container'\n data-testid='DevInspector-container'\n ></Container>\n );\n }\n\n return (\n <Container\n className='DevInspector-container'\n data-testid='DevInspector-container'\n >\n <RequestDetails item={item} />\n <RequestJourney item={item} />\n </Container>\n );\n}\n\nexport default DevInspector;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n\n .list {\n &::-webkit-scrollbar {\n width: 8px;\n }\n\n /* Track */\n &::-webkit-scrollbar-track {\n background: #333;\n }\n\n /* Handle */\n &::-webkit-scrollbar-thumb {\n background: #555;\n }\n\n /* Handle on hover */\n &::-webkit-scrollbar-thumb:hover {\n background: #666;\n }\n }\n`;\n\nexport const Empty = styled.div`\n color: #456;\n margin: 30px;\n font-size: 17px;\n text-align: center;\n text-shadow: 1px 3px 3px rgba(0, 0, 0, 0.2);\n`;\n","import React from 'react';\nimport { Container, Empty } from './DevList.style';\nimport { FixedSizeList as List } from 'react-window';\nimport classnames from 'classnames';\n\nexport type DevListProps = {\n items: Json[];\n row: React.FC<any>;\n selectedRow: any;\n onClick: (item: any) => void;\n};\n\nexport function DevList(props: DevListProps) {\n const { row: Cmp, items, selectedRow } = props;\n\n const Item = (rowInfo: any) => {\n const { index, style } = rowInfo;\n\n const item = items[index];\n const className = classnames({ selected: item.id === selectedRow?.id });\n\n return (\n <Cmp\n onClick={props.onClick}\n className={className}\n index={index}\n style={style}\n item={item}\n />\n );\n };\n\n function renderEmpty() {\n return <Empty>Empty list</Empty>;\n }\n\n function renderList() {\n if (items.length === 0) {\n return renderEmpty();\n }\n\n return (\n <List\n height={850}\n itemCount={items.length}\n itemSize={68}\n width={350}\n className='list'\n >\n {Item}\n </List>\n );\n }\n\n return (\n <Container\n className='DevList-container'\n data-testid='DevList-container'\n >\n {renderList()}\n </Container>\n );\n}\n\nexport default DevList;\n","import styled from 'styled-components';\n\nexport const Container = styled.div<{ index: number }>`\n flex: 1;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 10px;\n max-width: 90%;\n background-color: ${(props) =>\n props.index % 2 === 1 ? 'rgba(0, 0, 0, 0.2)' : 'transparent'};\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.7);\n cursor: pointer;\n }\n`;\n\nexport const Col = styled.div`\n &:first-child {\n flex: 1;\n }\n`;\n\nexport const Id = styled.div`\n color: goldenrod;\n font-size: 16px;\n`;\n\nexport const Type = styled.div`\n color: brown;\n`;\n","import React from 'react';\nimport { Container, Col, Id, Type } from './RequestRow.style';\nimport Time from '../Time/Time';\nimport { ApiRequest } from 'redux-connected';\n\nexport type RequestRowProps = {\n style: Json;\n item: ApiRequest;\n index: number;\n className?: string;\n onClick: (item: ApiRequest) => void;\n};\n\nexport function RequestRow(props: RequestRowProps) {\n const { index, style, item, className } = props;\n const { sequence, createdTS } = item;\n\n return (\n <Container\n className={`DevListRow-container ${className}`}\n data-testid='DevListRow-container'\n style={style}\n index={index}\n onClick={() => props.onClick(item)}\n >\n <Col>\n <Id>{sequence}</Id>\n <Type>{item.originalAction?.type}</Type>\n </Col>\n <Col>\n <Time value={createdTS} />\n </Col>\n </Container>\n );\n}\n\nexport default RequestRow;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n`;\n","import DevInspector from '../DevInspector/DevInspector';\nimport DevList from '../DevList/DevList';\nimport React, { useState } from 'react';\nimport RequestRow from '../RequestRow/RequestRow';\nimport { ApiRequest } from 'redux-connected';\nimport { Container } from './Lifecycle.style';\n\nexport type LifecycleProps = {\n requests: ApiRequest[];\n};\n\nexport function Lifecycle(props: LifecycleProps) {\n const { requests } = props;\n const [item, setItem] = useState<ApiRequest>();\n\n function onClick(newItem: ApiRequest) {\n setItem(newItem);\n }\n\n return (\n <Container\n className='Lifecycle-container'\n data-testid='Lifecycle-container'\n >\n <DevList\n items={requests}\n row={RequestRow}\n onClick={onClick}\n selectedRow={item}\n />\n <DevInspector item={item} />\n </Container>\n );\n}\n\nexport default Lifecycle;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsReceivedPast } from '../store/selectors';\n\nexport function LifecycleReceivedContainer() {\n const requests = useSelector($requestsReceivedPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleReceivedContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\n\nexport function GlobalStatsContainer() {\n const json = useSelector(connectedSelectors.$apiGlobalStatsRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default GlobalStatsContainer;\n","import React from 'react';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\nimport { useSelector } from 'react-redux';\n\nexport function EndpointConfigsContainer() {\n const json = useSelector(connectedSelectors.$endpointsConfigRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default EndpointConfigsContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\n\nexport function GlobalSettingsContainer() {\n const json = useSelector(connectedSelectors.$apiGlobalSettingsRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default GlobalSettingsContainer;\n","import React from 'react';\nimport JsonViewer from '../components/JsonViewer/JsonViewer';\nimport { connectedSelectors } from 'redux-connected';\nimport { useSelector } from 'react-redux';\n\nexport function EndpointStatusContainer() {\n const json = useSelector(connectedSelectors.$endpointsStateRaw);\n\n return <JsonViewer json={json} />;\n}\n\nexport default EndpointStatusContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsInQueuePast } from '../store/selectors';\n\nexport function LifecycleInQueueContainer() {\n const requests = useSelector($requestsInQueuePast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleInQueueContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsGeneralErrorPast } from '../store/selectors';\n\nexport function LifecycleGeneralErrorContainer() {\n const requests = useSelector($requestsGeneralErrorPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleGeneralErrorContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsPendingApiPast } from '../store/selectors';\n\nexport function LifecyclePendingApiContainer() {\n const requests = useSelector($requestsPendingApiPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecyclePendingApiContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsApiErrorPast } from '../store/selectors';\n\nexport function LifecycleApiErrorContainer() {\n const requests = useSelector($requestsApiErrorPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleApiErrorContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsPostActionPast } from '../store/selectors';\n\nexport function LifecyclePostActionContainer() {\n const requests = useSelector($requestsPostActionPast);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecyclePostActionContainer;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport Lifecycle from '../components/Lifecycle/Lifecycle';\nimport { $requestsFailed } from '../store/selectors';\n\nexport function LifecycleFailedContainer() {\n const requests = useSelector($requestsFailed);\n return <Lifecycle requests={requests} />;\n}\n\nexport default LifecycleFailedContainer;\n","import LifecycleReceivedContainer from '../containers/LifecycleReceivedContainer';\nimport GlobalStatsContainer from '../containers/GlobalStatsContainer';\nimport EndpointConfigsContainer from '../containers/EndpointConfigsContainer';\nimport GlobalSettingsContainer from '../containers/GlobalSettingsContainer';\nimport EndpointStatusContainer from '../containers/EndpointStatusContainer';\nimport LifecycleInQueueContainer from '../containers/LifecycleInQueueContainer';\nimport LifecycleGeneralErrorContainer from '../containers/LifecycleGeneralErrorContainer';\nimport LifecyclePendingApiContainer from '../containers/LifecyclePendingApiContainer';\nimport LifecycleApiErrorContainer from '../containers/LifecycleApiErrorContainer';\nimport LifecyclePostActionContainer from '../containers/LifecyclePostActionContainer';\nimport LifecycleFailedContainer from '../containers/LifecycleFailedContainer';\n\ntype DevComponents = Record<string, React.FC<any>>;\n\nexport const devComponents: DevComponents = {\n LifecycleReceived: LifecycleReceivedContainer,\n LifecycleInQueue: LifecycleInQueueContainer,\n LifecycleGeneralError: LifecycleGeneralErrorContainer,\n LifecyclePendingApi: LifecyclePendingApiContainer,\n LifecycleApiError: LifecycleApiErrorContainer,\n LifecycleFailed: LifecycleFailedContainer,\n LifecyclePostAction: LifecyclePostActionContainer,\n GlobalSettings: GlobalSettingsContainer,\n GlobalStats: GlobalStatsContainer,\n EndpointConfigs: EndpointConfigsContainer,\n EndpointStatus: EndpointStatusContainer,\n};\n","import DevMenu from '../../containers/DevMenuContainer';\nimport React, { useState } from 'react';\nimport { Actions, Container, Content } from './DevPanel.style';\nimport { devComponents } from '../../data/devComponents';\nimport { devRoutes, IDevRoute } from '../../data/devRoutes';\n\nexport type DevPanelProps = {\n children: JSX.Element | JSX.Element[];\n};\n\nexport function DevPanel(props: DevPanelProps) {\n const [route, setRoute] = useState<IDevRoute>(devRoutes[0]);\n\n function renderRoute() {\n const Cmp = devComponents[route.componentId];\n return <Cmp key={route.id} />;\n }\n\n return (\n <Container\n className='DevPanel-container'\n data-testid='DevPanel-container'\n >\n <DevMenu\n selectedId={route.id}\n onClick={(item: IDevRoute) => setRoute(item)}\n />\n <Actions>{props.children}</Actions>\n <Content>{renderRoute()}</Content>\n </Container>\n );\n}\n\n/*\n for the chrome extension devtools panel\n TODO: find another way to encapsulate this\n\nlet bgConnection;\n\nfunction init(id: string) {\n bgConnection = chrome.runtime?.connect({\n name: id,\n });\n\n if (bgConnection) {\n bgConnection.onMessage.addListener((message: Json) => {\n console.log('message ->', message);\n });\n }\n}\n\nif (chrome) {\n const tabId = String(chrome.devtools?.inspectedWindow.tabId ?? '');\n init(tabId);\n}\n*/\n\nexport default DevPanel;\n","import React from 'react';\nimport DevPanel from '../components/DevPanel/DevPanel';\n\ntype DevPanelProps = {\n children: JSX.Element | JSX.Element[];\n};\n\nexport function DevPanelContainer(props: DevPanelProps) {\n return <DevPanel>{props.children}</DevPanel>;\n}\n\nexport default DevPanelContainer;\n","import styled from 'styled-components';\n\nexport const Container = styled.div`\n color: olive;\n margin: 0 5px;\n`;\n","import React from 'react';\nimport { Container } from './Size.style';\nimport bytes from 'bytes';\nimport { useMemo } from 'react';\n\nexport type SizeProps = {\n size?: number;\n};\n\nexport function Size(props: SizeProps) {\n const { size = 0 } = props;\n const sizeText = useMemo(() => bytes(size), [size]);\n\n return (\n <Container className='Size-container' data-testid='Size-container'>\n {!size ? '-' : sizeText}\n </Container>\n );\n}\n\nexport default Size;\n","import Icon from '../Icon/Icon';\nimport React, { useRef } from 'react';\nimport { Container } from './DevtoolsApp.style';\nimport { DevPanelContainer } from '../../containers/DevPanelContainer';\nimport { Provider } from 'react-redux';\nimport Size from '../Size/Size';\nimport classnames from 'classnames';\n\nexport type DevtoolsAppProps = {\n connectedStore: any;\n clearRequests: () => void;\n downloadState: () => void;\n storeSizeInBytes?: number;\n isDarkMode?: boolean;\n};\n\nexport function DevtoolsApp(props: DevtoolsAppProps) {\n const { connectedStore, storeSizeInBytes, isDarkMode } = props;\n const ref = useRef(null);\n\n const className = classnames('DevtoolsApp-container', {\n darkMode: isDarkMode,\n });\n\n return (\n <Container\n ref={ref}\n className={className}\n data-testid='DevtoolsApp-container'\n >\n <Provider store={connectedStore}>\n <DevPanelContainer>\n <Size size={storeSizeInBytes} />\n <Icon\n name='clearAll'\n onClick={() => props.clearRequests()}\n />\n <Icon name='download' onClick={props.downloadState} />\n </DevPanelContainer>\n </Provider>\n </Container>\n );\n}\n\nexport default DevtoolsApp;\n","export const download = (filename: string, json: Json) => {\n const data = JSON.stringify(json, null, 4);\n\n const blob = new Blob([data], { type: 'text/csv' });\n // @ts-ignore\n if (window.navigator.msSaveOrOpenBlob) {\n // @ts-ignore\n window.navigator.msSaveBlob(blob, filename);\n } else {\n const elem = window.document.createElement('a');\n elem.href = window.URL.createObjectURL(blob);\n elem.download = filename;\n document.body.appendChild(elem);\n elem.click();\n document.body.removeChild(elem);\n }\n};\n","import { useState, useEffect } from 'react';\nimport { debounce } from 'shared-base';\n\ntype Callback = () => void;\n\ninterface ReduxStore {\n getState: () => Json;\n subscribe: (callback: Callback) => void;\n}\n\nexport const useStoreSize = (store: ReduxStore) => {\n const [storeSize, setStoreSize] = useState<number>();\n\n const calculateSize = debounce(() => {\n const state = store.getState();\n const size = JSON.stringify(state).length;\n setStoreSize(size);\n }, 500);\n\n useEffect(() => {\n store.subscribe(() => {\n calculateSize();\n });\n }, [store]);\n\n return storeSize;\n};\n","import React from 'react';\nimport DevtoolsApp from '../components/DevtoolsApp/DevtoolsApp';\nimport { clearCompletedRequests, clearFailedRequests } from 'redux-connected';\nimport { getMinutes, resetStartOfTime } from '../utils/date';\nimport { download } from '../utils/download';\nimport { useStoreSize } from '../hooks/useStoreSize';\n\nexport type DevtoolsAppProps = {\n connectedStore: any;\n isDarkMode?: boolean;\n};\n\nexport function DevtoolsAppContainer(props: DevtoolsAppProps) {\n const { connectedStore, isDarkMode } = props;\n const storeSizeInBytes = useStoreSize(connectedStore);\n\n function clearRequests() {\n connectedStore.dispatch(clearCompletedRequests());\n connectedStore.dispatch(clearFailedRequests());\n // also resets time\n resetStartOfTime();\n }\n\n function downloadState() {\n const state = connectedStore.getState();\n const minutes = getMinutes();\n const filename = `state_${minutes}.json`;\n download(filename, state);\n }\n\n return (\n <DevtoolsApp\n connectedStore={connectedStore}\n clearRequests={clearRequests}\n downloadState={downloadState}\n storeSizeInBytes={storeSizeInBytes}\n isDarkMode={isDarkMode}\n />\n );\n}\n\nexport default DevtoolsAppContainer;\n"],"names":["allIcons","props","size","React","Container","styled","_a","Icon","name","color","Cmp","MenuGroup","MenuGroupTitle","MenuItem","Title","Badge","BadgeTotal","DevMenu","groups","items","selectedId","badges","badgesTotal","renderItem","item","title","id","selected","badge","badgeTotal","classnames","renderItems","groupItems","renderGroup","group","renderGroups","devRoutes","devGroups","output","$requests","createSelector","connectedSelectors","requests","request","lastPoint","journeyWithDelta","point","index","delta","a","b","$requestsReceived","LifecycleStatus","$requestsReceivedPast","$requestsInQueue","$requestsInQueuePast","$requestsPendingApi","$requestsPendingApiPast","$requestsPostAction","$requestsPostActionPast","$requestsGeneralError","$requestsGeneralErrorPast","$requestsApiError","$requestsFailed","$requestsApiErrorPast","$menuBadges","requestsReceived","requestsInQueue","requestsGeneralError","requestsPendingApi","requestsApiError","requestsFailed","requestsPostAction","$menuBadgesTotal","DevMenuContainer","useSelector","Content","Actions","timestamp","startOfTime","resetStartOfTime","getMinutes","Full","Fraction","Time","value","relativeValue","full","fraction","Status","DataIcon","Delta","Flex","statusMap","JourneyRow","status","data","printPoint","renderDataIcon","renderDelta","RequestJourney","Table","Tr","Td","JsonViewer","json","width","RequestDetails","bytes","DevInspector","Empty","DevList","selectedRow","Item","rowInfo","style","className","renderEmpty","renderList","List","Col","Id","Type","RequestRow","sequence","createdTS","Lifecycle","setItem","useState","onClick","newItem","LifecycleReceivedContainer","GlobalStatsContainer","EndpointConfigsContainer","GlobalSettingsContainer","EndpointStatusContainer","LifecycleInQueueContainer","LifecycleGeneralErrorContainer","LifecyclePendingApiContainer","LifecycleApiErrorContainer","LifecyclePostActionContainer","LifecycleFailedContainer","devComponents","DevPanel","route","setRoute","renderRoute","DevPanelContainer","Size","sizeText","useMemo","DevtoolsApp","connectedStore","storeSizeInBytes","isDarkMode","ref","useRef","Provider","download","filename","blob","elem","useStoreSize","store","storeSize","setStoreSize","calculateSize","debounce","state","useEffect","DevtoolsAppContainer","clearRequests","clearCompletedRequests","clearFailedRequests","downloadState"],"mappings":"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"}