@scality/core-ui 0.115.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (596) hide show
  1. package/.babelrc +17 -0
  2. package/.eslintrc.json +7 -0
  3. package/.flowconfig +21 -0
  4. package/.github/ISSUE_TEMPLATE/bug.md +18 -0
  5. package/.github/ISSUE_TEMPLATE/improvement.md +18 -0
  6. package/.github/PULL_REQUEST_TEMPLATE.md +24 -0
  7. package/.github/workflows/codeql.yaml +25 -0
  8. package/.github/workflows/dependency-review.yaml +16 -0
  9. package/.github/workflows/github-pages.yml +17 -0
  10. package/.github/workflows/post-release.yml +52 -0
  11. package/.github/workflows/tests.yaml +32 -0
  12. package/.prettierrc +5 -0
  13. package/.storybook/main.ts +38 -0
  14. package/.storybook/manager.ts +6 -0
  15. package/.storybook/preview-head.html +99 -0
  16. package/.storybook/preview.js +68 -0
  17. package/.storybook/public/favicon.ico +0 -0
  18. package/.storybook/public/logo-core-ui.png +0 -0
  19. package/.storybook/theme.storybook.ts +13 -0
  20. package/LICENSE +201 -0
  21. package/README.md +296 -0
  22. package/__mocks__/fileMock.js +2 -0
  23. package/__mocks__/styleMock.js +2 -0
  24. package/dist/components/IconHelper.d.ts +10 -0
  25. package/dist/components/IconHelper.d.ts.map +1 -0
  26. package/dist/components/IconHelper.js +4 -0
  27. package/dist/components/areachart/AreaChart.component.d.ts +14 -0
  28. package/dist/components/areachart/AreaChart.component.d.ts.map +1 -0
  29. package/dist/components/areachart/AreaChart.component.js +27 -0
  30. package/dist/components/banner/Banner.component.d.ts +11 -0
  31. package/dist/components/banner/Banner.component.d.ts.map +1 -0
  32. package/dist/components/banner/Banner.component.js +40 -0
  33. package/dist/components/barchart/BarChart.component.d.ts +13 -0
  34. package/dist/components/barchart/BarChart.component.d.ts.map +1 -0
  35. package/dist/components/barchart/BarChart.component.js +22 -0
  36. package/dist/components/box/Box.d.ts +9 -0
  37. package/dist/components/box/Box.d.ts.map +1 -0
  38. package/dist/components/box/Box.js +21 -0
  39. package/dist/components/breadcrumb/Breadcrumb.component.d.ts +7 -0
  40. package/dist/components/breadcrumb/Breadcrumb.component.d.ts.map +1 -0
  41. package/dist/components/breadcrumb/Breadcrumb.component.js +77 -0
  42. package/dist/components/button/Button.component.d.ts +28 -0
  43. package/dist/components/button/Button.component.d.ts.map +1 -0
  44. package/dist/components/button/Button.component.js +227 -0
  45. package/dist/components/buttonv2/Buttonv2.component.d.ts +34 -0
  46. package/dist/components/buttonv2/Buttonv2.component.d.ts.map +1 -0
  47. package/dist/components/buttonv2/Buttonv2.component.js +198 -0
  48. package/dist/components/buttonv2/CopyButton.component.d.ts +24 -0
  49. package/dist/components/buttonv2/CopyButton.component.d.ts.map +1 -0
  50. package/dist/components/buttonv2/CopyButton.component.js +52 -0
  51. package/dist/components/card/Card.component.d.ts +28 -0
  52. package/dist/components/card/Card.component.d.ts.map +1 -0
  53. package/dist/components/card/Card.component.js +105 -0
  54. package/dist/components/checkbox/Checkbox.component.d.ts +10 -0
  55. package/dist/components/checkbox/Checkbox.component.d.ts.map +1 -0
  56. package/dist/components/checkbox/Checkbox.component.js +94 -0
  57. package/dist/components/chips/Chips.component.d.ts +22 -0
  58. package/dist/components/chips/Chips.component.d.ts.map +1 -0
  59. package/dist/components/chips/Chips.component.js +105 -0
  60. package/dist/components/circularprogressbar/CircularProgressBar.component.d.ts +13 -0
  61. package/dist/components/circularprogressbar/CircularProgressBar.component.d.ts.map +1 -0
  62. package/dist/components/circularprogressbar/CircularProgressBar.component.js +9 -0
  63. package/dist/components/circularprogressbar/CircularProgressBar.component.style.d.ts +11 -0
  64. package/dist/components/circularprogressbar/CircularProgressBar.component.style.d.ts.map +1 -0
  65. package/dist/components/circularprogressbar/CircularProgressBar.component.style.js +27 -0
  66. package/dist/components/cloudprogressbar/CloudProgressBar.component.d.ts +11 -0
  67. package/dist/components/cloudprogressbar/CloudProgressBar.component.d.ts.map +1 -0
  68. package/dist/components/cloudprogressbar/CloudProgressBar.component.js +38 -0
  69. package/dist/components/collapsiblepanel/CollapsiblePanel.component.d.ts +10 -0
  70. package/dist/components/collapsiblepanel/CollapsiblePanel.component.d.ts.map +1 -0
  71. package/dist/components/collapsiblepanel/CollapsiblePanel.component.js +44 -0
  72. package/dist/components/constants.d.ts +27 -0
  73. package/dist/components/constants.d.ts.map +1 -0
  74. package/dist/components/constants.js +47 -0
  75. package/dist/components/constrainedtext/Constrainedtext.component.d.ts +12 -0
  76. package/dist/components/constrainedtext/Constrainedtext.component.d.ts.map +1 -0
  77. package/dist/components/constrainedtext/Constrainedtext.component.js +46 -0
  78. package/dist/components/coreuithemeprovider/CoreUiThemeProvider.d.ts +9 -0
  79. package/dist/components/coreuithemeprovider/CoreUiThemeProvider.d.ts.map +1 -0
  80. package/dist/components/coreuithemeprovider/CoreUiThemeProvider.js +13 -0
  81. package/dist/components/date/FormattedDateTime.d.ts +11 -0
  82. package/dist/components/date/FormattedDateTime.d.ts.map +1 -0
  83. package/dist/components/date/FormattedDateTime.js +66 -0
  84. package/dist/components/date/FormattedDateTime.spec.d.ts +2 -0
  85. package/dist/components/date/FormattedDateTime.spec.d.ts.map +1 -0
  86. package/dist/components/date/FormattedDateTime.spec.js +140 -0
  87. package/dist/components/date/dateDiffer.d.ts +2 -0
  88. package/dist/components/date/dateDiffer.d.ts.map +1 -0
  89. package/dist/components/date/dateDiffer.js +7 -0
  90. package/dist/components/date/dateDiffer.spec.d.ts +2 -0
  91. package/dist/components/date/dateDiffer.spec.d.ts.map +1 -0
  92. package/dist/components/date/dateDiffer.spec.js +6 -0
  93. package/dist/components/dropdown/Dropdown.component.d.ts +20 -0
  94. package/dist/components/dropdown/Dropdown.component.d.ts.map +1 -0
  95. package/dist/components/dropdown/Dropdown.component.js +99 -0
  96. package/dist/components/dropzone/Dropzone.d.ts +16 -0
  97. package/dist/components/dropzone/Dropzone.d.ts.map +1 -0
  98. package/dist/components/dropzone/Dropzone.js +79 -0
  99. package/dist/components/emptystate/Emptystate.component.d.ts +13 -0
  100. package/dist/components/emptystate/Emptystate.component.d.ts.map +1 -0
  101. package/dist/components/emptystate/Emptystate.component.js +32 -0
  102. package/dist/components/emptytable/Emptytable.component.d.ts +8 -0
  103. package/dist/components/emptytable/Emptytable.component.d.ts.map +1 -0
  104. package/dist/components/emptytable/Emptytable.component.js +62 -0
  105. package/dist/components/error-pages/ErrorPage401.component.d.ts +9 -0
  106. package/dist/components/error-pages/ErrorPage401.component.d.ts.map +1 -0
  107. package/dist/components/error-pages/ErrorPage401.component.js +28 -0
  108. package/dist/components/error-pages/ErrorPage404.component.d.ts +8 -0
  109. package/dist/components/error-pages/ErrorPage404.component.d.ts.map +1 -0
  110. package/dist/components/error-pages/ErrorPage404.component.js +26 -0
  111. package/dist/components/error-pages/ErrorPage500.component.d.ts +13 -0
  112. package/dist/components/error-pages/ErrorPage500.component.d.ts.map +1 -0
  113. package/dist/components/error-pages/ErrorPage500.component.js +32 -0
  114. package/dist/components/error-pages/ErrorPageAuth.component.d.ts +8 -0
  115. package/dist/components/error-pages/ErrorPageAuth.component.d.ts.map +1 -0
  116. package/dist/components/error-pages/ErrorPageAuth.component.js +27 -0
  117. package/dist/components/error-pages/ErrorPageStyle.d.ts +7 -0
  118. package/dist/components/error-pages/ErrorPageStyle.d.ts.map +1 -0
  119. package/dist/components/error-pages/ErrorPageStyle.js +34 -0
  120. package/dist/components/form/Form.component.d.ts +61 -0
  121. package/dist/components/form/Form.component.d.ts.map +1 -0
  122. package/dist/components/form/Form.component.js +115 -0
  123. package/dist/components/globalhealthbar/GlobalHealthBar.component.d.ts +20 -0
  124. package/dist/components/globalhealthbar/GlobalHealthBar.component.d.ts.map +1 -0
  125. package/dist/components/globalhealthbar/GlobalHealthBar.component.js +169 -0
  126. package/dist/components/globalhealthbar/tooltip/index.d.ts +8 -0
  127. package/dist/components/globalhealthbar/tooltip/index.d.ts.map +1 -0
  128. package/dist/components/globalhealthbar/tooltip/index.js +55 -0
  129. package/dist/components/healthselectorv2/HealthSelector.component.d.ts +61 -0
  130. package/dist/components/healthselectorv2/HealthSelector.component.d.ts.map +1 -0
  131. package/dist/components/healthselectorv2/HealthSelector.component.js +70 -0
  132. package/dist/components/icon/Icon.component.d.ts +134 -0
  133. package/dist/components/icon/Icon.component.d.ts.map +1 -0
  134. package/dist/components/icon/Icon.component.js +209 -0
  135. package/dist/components/infomessage/InfoMessage.component.d.ts +9 -0
  136. package/dist/components/infomessage/InfoMessage.component.d.ts.map +1 -0
  137. package/dist/components/infomessage/InfoMessage.component.js +20 -0
  138. package/dist/components/infomessage/InfoMessageUtils.d.ts +8 -0
  139. package/dist/components/infomessage/InfoMessageUtils.d.ts.map +1 -0
  140. package/dist/components/infomessage/InfoMessageUtils.js +32 -0
  141. package/dist/components/input/Input.component.d.ts +24 -0
  142. package/dist/components/input/Input.component.d.ts.map +1 -0
  143. package/dist/components/input/Input.component.js +55 -0
  144. package/dist/components/input/Input.component.style.d.ts +9 -0
  145. package/dist/components/input/Input.component.style.d.ts.map +1 -0
  146. package/dist/components/input/Input.component.style.js +136 -0
  147. package/dist/components/inputlist/InputButtons.d.ts +20 -0
  148. package/dist/components/inputlist/InputButtons.d.ts.map +1 -0
  149. package/dist/components/inputlist/InputButtons.js +48 -0
  150. package/dist/components/inputlist/InputList.component.d.ts +27 -0
  151. package/dist/components/inputlist/InputList.component.d.ts.map +1 -0
  152. package/dist/components/inputlist/InputList.component.js +30 -0
  153. package/dist/components/inputv2/inputv2.d.ts +12 -0
  154. package/dist/components/inputv2/inputv2.d.ts.map +1 -0
  155. package/dist/components/inputv2/inputv2.js +80 -0
  156. package/dist/components/lateralnavbarlayout/LateralNavbarLayout.component.d.ts +9 -0
  157. package/dist/components/lateralnavbarlayout/LateralNavbarLayout.component.d.ts.map +1 -0
  158. package/dist/components/lateralnavbarlayout/LateralNavbarLayout.component.js +23 -0
  159. package/dist/components/layout/Layout.component.d.ts +12 -0
  160. package/dist/components/layout/Layout.component.d.ts.map +1 -0
  161. package/dist/components/layout/Layout.component.js +26 -0
  162. package/dist/components/layout/v2/AppContainer.d.ts +28 -0
  163. package/dist/components/layout/v2/AppContainer.d.ts.map +1 -0
  164. package/dist/components/layout/v2/AppContainer.js +63 -0
  165. package/dist/components/layout/v2/index.d.ts +6 -0
  166. package/dist/components/layout/v2/index.d.ts.map +1 -0
  167. package/dist/components/layout/v2/index.js +16 -0
  168. package/dist/components/layout/v2/panels.d.ts +17 -0
  169. package/dist/components/layout/v2/panels.d.ts.map +1 -0
  170. package/dist/components/layout/v2/panels.js +52 -0
  171. package/dist/components/linechart/LineChart.component.d.ts +22 -0
  172. package/dist/components/linechart/LineChart.component.d.ts.map +1 -0
  173. package/dist/components/linechart/LineChart.component.js +109 -0
  174. package/dist/components/linetemporalchart/ChartUtil.d.ts +40 -0
  175. package/dist/components/linetemporalchart/ChartUtil.d.ts.map +1 -0
  176. package/dist/components/linetemporalchart/ChartUtil.js +126 -0
  177. package/dist/components/linetemporalchart/LineTemporalChart.component.d.ts +43 -0
  178. package/dist/components/linetemporalchart/LineTemporalChart.component.d.ts.map +1 -0
  179. package/dist/components/linetemporalchart/LineTemporalChart.component.js +576 -0
  180. package/dist/components/linetemporalchart/MetricTimespanProvider.d.ts +8 -0
  181. package/dist/components/linetemporalchart/MetricTimespanProvider.d.ts.map +1 -0
  182. package/dist/components/linetemporalchart/MetricTimespanProvider.js +31 -0
  183. package/dist/components/linetemporalchart/tooltip/index.d.ts +30 -0
  184. package/dist/components/linetemporalchart/tooltip/index.d.ts.map +1 -0
  185. package/dist/components/linetemporalchart/tooltip/index.js +104 -0
  186. package/dist/components/loader/Loader.component.d.ts +11 -0
  187. package/dist/components/loader/Loader.component.d.ts.map +1 -0
  188. package/dist/components/loader/Loader.component.js +41 -0
  189. package/dist/components/modal/Modal.component.d.ts +13 -0
  190. package/dist/components/modal/Modal.component.d.ts.map +1 -0
  191. package/dist/components/modal/Modal.component.js +64 -0
  192. package/dist/components/multiselect/MultiSelect.component.d.ts +29 -0
  193. package/dist/components/multiselect/MultiSelect.component.d.ts.map +1 -0
  194. package/dist/components/multiselect/MultiSelect.component.js +73 -0
  195. package/dist/components/navbar/Navbar.component.d.ts +23 -0
  196. package/dist/components/navbar/Navbar.component.d.ts.map +1 -0
  197. package/dist/components/navbar/Navbar.component.js +151 -0
  198. package/dist/components/notifications/Notification.component.d.ts +13 -0
  199. package/dist/components/notifications/Notification.component.d.ts.map +1 -0
  200. package/dist/components/notifications/Notification.component.js +107 -0
  201. package/dist/components/notifications/Notifications.component.d.ts +15 -0
  202. package/dist/components/notifications/Notifications.component.d.ts.map +1 -0
  203. package/dist/components/notifications/Notifications.component.js +42 -0
  204. package/dist/components/prettybytes/PrettyBytes.component.d.ts +9 -0
  205. package/dist/components/prettybytes/PrettyBytes.component.d.ts.map +1 -0
  206. package/dist/components/prettybytes/PrettyBytes.component.js +24 -0
  207. package/dist/components/progressbar/ProgressBar.component.d.ts +18 -0
  208. package/dist/components/progressbar/ProgressBar.component.d.ts.map +1 -0
  209. package/dist/components/progressbar/ProgressBar.component.js +129 -0
  210. package/dist/components/scrollbarwrapper/ScrollbarWrapper.component.d.ts +7 -0
  211. package/dist/components/scrollbarwrapper/ScrollbarWrapper.component.d.ts.map +1 -0
  212. package/dist/components/scrollbarwrapper/ScrollbarWrapper.component.js +54 -0
  213. package/dist/components/searchinput/SearchInput.component.d.ts +12 -0
  214. package/dist/components/searchinput/SearchInput.component.d.ts.map +1 -0
  215. package/dist/components/searchinput/SearchInput.component.js +91 -0
  216. package/dist/components/select/Select.component.d.ts +15 -0
  217. package/dist/components/select/Select.component.d.ts.map +1 -0
  218. package/dist/components/select/Select.component.js +71 -0
  219. package/dist/components/selectv2/SelectStyle.d.ts +3 -0
  220. package/dist/components/selectv2/SelectStyle.d.ts.map +1 -0
  221. package/dist/components/selectv2/SelectStyle.js +238 -0
  222. package/dist/components/selectv2/Selectv2.component.d.ts +32 -0
  223. package/dist/components/selectv2/Selectv2.component.d.ts.map +1 -0
  224. package/dist/components/selectv2/Selectv2.component.js +267 -0
  225. package/dist/components/sidebar/Sidebar.component.d.ts +22 -0
  226. package/dist/components/sidebar/Sidebar.component.d.ts.map +1 -0
  227. package/dist/components/sidebar/Sidebar.component.js +136 -0
  228. package/dist/components/spacedbox/SpacedBox.d.ts +34 -0
  229. package/dist/components/spacedbox/SpacedBox.d.ts.map +1 -0
  230. package/dist/components/spacedbox/SpacedBox.js +64 -0
  231. package/dist/components/sparkline/SparkLine.component.d.ts +19 -0
  232. package/dist/components/sparkline/SparkLine.component.d.ts.map +1 -0
  233. package/dist/components/sparkline/SparkLine.component.js +148 -0
  234. package/dist/components/statuswrapper/Statuswrapper.component.d.ts +9 -0
  235. package/dist/components/statuswrapper/Statuswrapper.component.d.ts.map +1 -0
  236. package/dist/components/statuswrapper/Statuswrapper.component.js +44 -0
  237. package/dist/components/steppers/Stepper.component.d.ts +14 -0
  238. package/dist/components/steppers/Stepper.component.d.ts.map +1 -0
  239. package/dist/components/steppers/Stepper.component.js +33 -0
  240. package/dist/components/steppers/Steppers.component.d.ts +18 -0
  241. package/dist/components/steppers/Steppers.component.d.ts.map +1 -0
  242. package/dist/components/steppers/Steppers.component.js +96 -0
  243. package/dist/components/tablev2/MultiSelectableContent.d.ts +22 -0
  244. package/dist/components/tablev2/MultiSelectableContent.d.ts.map +1 -0
  245. package/dist/components/tablev2/MultiSelectableContent.js +129 -0
  246. package/dist/components/tablev2/Search.d.ts +29 -0
  247. package/dist/components/tablev2/Search.d.ts.map +1 -0
  248. package/dist/components/tablev2/Search.js +49 -0
  249. package/dist/components/tablev2/SearchWithQueryParams.d.ts +7 -0
  250. package/dist/components/tablev2/SearchWithQueryParams.d.ts.map +1 -0
  251. package/dist/components/tablev2/SearchWithQueryParams.js +24 -0
  252. package/dist/components/tablev2/SingleSelectableContent.d.ts +17 -0
  253. package/dist/components/tablev2/SingleSelectableContent.d.ts.map +1 -0
  254. package/dist/components/tablev2/SingleSelectableContent.js +75 -0
  255. package/dist/components/tablev2/TableCommon.d.ts +24 -0
  256. package/dist/components/tablev2/TableCommon.d.ts.map +1 -0
  257. package/dist/components/tablev2/TableCommon.js +35 -0
  258. package/dist/components/tablev2/TableUtils.d.ts +18 -0
  259. package/dist/components/tablev2/TableUtils.d.ts.map +1 -0
  260. package/dist/components/tablev2/TableUtils.js +32 -0
  261. package/dist/components/tablev2/Tablestyle.d.ts +36 -0
  262. package/dist/components/tablev2/Tablestyle.d.ts.map +1 -0
  263. package/dist/components/tablev2/Tablestyle.js +136 -0
  264. package/dist/components/tablev2/Tablev2.component.d.ts +71 -0
  265. package/dist/components/tablev2/Tablev2.component.d.ts.map +1 -0
  266. package/dist/components/tablev2/Tablev2.component.js +144 -0
  267. package/dist/components/tablev2/react-table-config.d.ts +28 -0
  268. package/dist/components/tablev2/react-table-config.d.ts.map +1 -0
  269. package/dist/components/tablev2/react-table-config.js +1 -0
  270. package/dist/components/tablev2/useCheckbox.d.ts +6 -0
  271. package/dist/components/tablev2/useCheckbox.d.ts.map +1 -0
  272. package/dist/components/tablev2/useCheckbox.js +40 -0
  273. package/dist/components/tablev2/useSyncedScroll.d.ts +7 -0
  274. package/dist/components/tablev2/useSyncedScroll.d.ts.map +1 -0
  275. package/dist/components/tablev2/useSyncedScroll.js +43 -0
  276. package/dist/components/tabsv2/ScrollButton.d.ts +8 -0
  277. package/dist/components/tabsv2/ScrollButton.d.ts.map +1 -0
  278. package/dist/components/tabsv2/ScrollButton.js +32 -0
  279. package/dist/components/tabsv2/StyledTabs.d.ts +18 -0
  280. package/dist/components/tabsv2/StyledTabs.d.ts.map +1 -0
  281. package/dist/components/tabsv2/StyledTabs.js +96 -0
  282. package/dist/components/tabsv2/Tab.d.ts +17 -0
  283. package/dist/components/tabsv2/Tab.d.ts.map +1 -0
  284. package/dist/components/tabsv2/Tab.js +10 -0
  285. package/dist/components/tabsv2/Tabsv2.component.d.ts +21 -0
  286. package/dist/components/tabsv2/Tabsv2.component.d.ts.map +1 -0
  287. package/dist/components/tabsv2/Tabsv2.component.js +89 -0
  288. package/dist/components/tabsv2/useScrollingTabs.d.ts +17 -0
  289. package/dist/components/tabsv2/useScrollingTabs.d.ts.map +1 -0
  290. package/dist/components/tabsv2/useScrollingTabs.js +261 -0
  291. package/dist/components/text/Text.component.d.ts +33 -0
  292. package/dist/components/text/Text.component.d.ts.map +1 -0
  293. package/dist/components/text/Text.component.js +154 -0
  294. package/dist/components/textarea/TextArea.component.d.ts +10 -0
  295. package/dist/components/textarea/TextArea.component.d.ts.map +1 -0
  296. package/dist/components/textarea/TextArea.component.js +60 -0
  297. package/dist/components/textbadge/TextBadge.component.d.ts +9 -0
  298. package/dist/components/textbadge/TextBadge.component.d.ts.map +1 -0
  299. package/dist/components/textbadge/TextBadge.component.js +19 -0
  300. package/dist/components/toast/DurationBasedProgressBar.d.ts +6 -0
  301. package/dist/components/toast/DurationBasedProgressBar.d.ts.map +1 -0
  302. package/dist/components/toast/DurationBasedProgressBar.js +24 -0
  303. package/dist/components/toast/Toast.component.d.ts +20 -0
  304. package/dist/components/toast/Toast.component.d.ts.map +1 -0
  305. package/dist/components/toast/Toast.component.js +106 -0
  306. package/dist/components/toast/ToastPositionHelpers.d.ts +4 -0
  307. package/dist/components/toast/ToastPositionHelpers.d.ts.map +1 -0
  308. package/dist/components/toast/ToastPositionHelpers.js +28 -0
  309. package/dist/components/toast/ToastProvider.d.ts +14 -0
  310. package/dist/components/toast/ToastProvider.d.ts.map +1 -0
  311. package/dist/components/toast/ToastProvider.js +18 -0
  312. package/dist/components/toast/useMutationsHandler.d.ts +40 -0
  313. package/dist/components/toast/useMutationsHandler.d.ts.map +1 -0
  314. package/dist/components/toast/useMutationsHandler.js +66 -0
  315. package/dist/components/toast/useToastParameters.d.ts +10 -0
  316. package/dist/components/toast/useToastParameters.d.ts.map +1 -0
  317. package/dist/components/toast/useToastParameters.js +39 -0
  318. package/dist/components/toggle/Toggle.component.d.ts +11 -0
  319. package/dist/components/toggle/Toggle.component.d.ts.map +1 -0
  320. package/dist/components/toggle/Toggle.component.js +80 -0
  321. package/dist/components/tooltip/Tooltip.component.d.ts +23 -0
  322. package/dist/components/tooltip/Tooltip.component.d.ts.map +1 -0
  323. package/dist/components/tooltip/Tooltip.component.js +82 -0
  324. package/dist/components/vegachart/VegaChart.component.d.ts +14 -0
  325. package/dist/components/vegachart/VegaChart.component.d.ts.map +1 -0
  326. package/dist/components/vegachart/VegaChart.component.js +120 -0
  327. package/dist/components/vegachartv2/SyncedCursorCharts.d.ts +13 -0
  328. package/dist/components/vegachartv2/SyncedCursorCharts.d.ts.map +1 -0
  329. package/dist/components/vegachartv2/SyncedCursorCharts.js +17 -0
  330. package/dist/components/vegachartv2/VegaChartV2.component.d.ts +16 -0
  331. package/dist/components/vegachartv2/VegaChartV2.component.d.ts.map +1 -0
  332. package/dist/components/vegachartv2/VegaChartV2.component.js +216 -0
  333. package/dist/hooks.d.ts +2 -0
  334. package/dist/hooks.d.ts.map +1 -0
  335. package/dist/hooks.js +19 -0
  336. package/dist/icons/branding.d.ts +4 -0
  337. package/dist/icons/branding.d.ts.map +1 -0
  338. package/dist/icons/branding.js +3 -0
  339. package/dist/icons/scality-loading.d.ts +4 -0
  340. package/dist/icons/scality-loading.d.ts.map +1 -0
  341. package/dist/icons/scality-loading.js +3 -0
  342. package/dist/index.css +25 -0
  343. package/dist/index.d.ts +65 -0
  344. package/dist/index.d.ts.map +1 -0
  345. package/dist/index.js +64 -0
  346. package/dist/next.d.ts +15 -0
  347. package/dist/next.d.ts.map +1 -0
  348. package/dist/next.js +14 -0
  349. package/dist/organisms/attachments/AttachmentConfirmationModal.d.ts +22 -0
  350. package/dist/organisms/attachments/AttachmentConfirmationModal.d.ts.map +1 -0
  351. package/dist/organisms/attachments/AttachmentConfirmationModal.js +142 -0
  352. package/dist/organisms/attachments/AttachmentTable.d.ts +37 -0
  353. package/dist/organisms/attachments/AttachmentTable.d.ts.map +1 -0
  354. package/dist/organisms/attachments/AttachmentTable.js +375 -0
  355. package/dist/organisms/attachments/AttachmentTypes.d.ts +15 -0
  356. package/dist/organisms/attachments/AttachmentTypes.d.ts.map +1 -0
  357. package/dist/organisms/attachments/AttachmentTypes.js +5 -0
  358. package/dist/spacing.d.ts +44 -0
  359. package/dist/spacing.d.ts.map +1 -0
  360. package/dist/spacing.js +60 -0
  361. package/dist/style/fonts/Lato-Bold.woff +0 -0
  362. package/dist/style/fonts/Lato-Bold.woff2 +0 -0
  363. package/dist/style/fonts/Lato-Regular.woff +0 -0
  364. package/dist/style/fonts/Lato-Regular.woff2 +0 -0
  365. package/dist/style/theme.d.ts +160 -0
  366. package/dist/style/theme.d.ts.map +1 -0
  367. package/dist/style/theme.js +234 -0
  368. package/dist/testUtils.d.ts +9 -0
  369. package/dist/testUtils.d.ts.map +1 -0
  370. package/dist/testUtils.js +11 -0
  371. package/dist/utils.d.ts +9 -0
  372. package/dist/utils.d.ts.map +1 -0
  373. package/dist/utils.js +46 -0
  374. package/global-setup.js +3 -0
  375. package/jest.config.js +8 -0
  376. package/package.json +161 -0
  377. package/plop-templates/component.hbs +18 -0
  378. package/plop-templates/component.test.hbs +10 -0
  379. package/plop-templates/stories.hbs +18 -0
  380. package/plopfile.js +38 -0
  381. package/setupTests.js +3 -0
  382. package/src/lib/components/IconHelper.tsx +23 -0
  383. package/src/lib/components/areachart/AreaChart.component.tsx +49 -0
  384. package/src/lib/components/banner/Banner.component.tsx +59 -0
  385. package/src/lib/components/barchart/BarChart.component.tsx +46 -0
  386. package/src/lib/components/box/Box.ts +57 -0
  387. package/src/lib/components/breadcrumb/Breadcrumb.component.tsx +101 -0
  388. package/src/lib/components/button/Button.component.tsx +312 -0
  389. package/src/lib/components/buttonv2/Buttonv2.component.tsx +270 -0
  390. package/src/lib/components/buttonv2/CopyButton.component.tsx +89 -0
  391. package/src/lib/components/card/Card.component.tsx +196 -0
  392. package/src/lib/components/checkbox/Checkbox.component.tsx +131 -0
  393. package/src/lib/components/chips/Chips.component.tsx +169 -0
  394. package/src/lib/components/circularprogressbar/CircularProgressBar.component.style.ts +31 -0
  395. package/src/lib/components/circularprogressbar/CircularProgressBar.component.tsx +58 -0
  396. package/src/lib/components/cloudprogressbar/CloudProgressBar.component.tsx +105 -0
  397. package/src/lib/components/collapsiblepanel/CollapsiblePanel.component.tsx +77 -0
  398. package/src/lib/components/constants.ts +67 -0
  399. package/src/lib/components/constrainedtext/Constrainedtext.component.tsx +93 -0
  400. package/src/lib/components/coreuithemeprovider/CoreUiThemeProvider.tsx +21 -0
  401. package/src/lib/components/date/FormattedDateTime.spec.tsx +217 -0
  402. package/src/lib/components/date/FormattedDateTime.tsx +150 -0
  403. package/src/lib/components/date/dateDiffer.spec.ts +13 -0
  404. package/src/lib/components/date/dateDiffer.ts +12 -0
  405. package/src/lib/components/dropdown/Dropdown.component.tsx +184 -0
  406. package/src/lib/components/dropzone/Dropzone.tsx +181 -0
  407. package/src/lib/components/emptystate/Emptystate.component.tsx +66 -0
  408. package/src/lib/components/emptytable/Emptytable.component.tsx +79 -0
  409. package/src/lib/components/error-pages/ErrorPage401.component.tsx +77 -0
  410. package/src/lib/components/error-pages/ErrorPage404.component.tsx +64 -0
  411. package/src/lib/components/error-pages/ErrorPage500.component.tsx +88 -0
  412. package/src/lib/components/error-pages/ErrorPageAuth.component.tsx +70 -0
  413. package/src/lib/components/error-pages/ErrorPageStyle.ts +34 -0
  414. package/src/lib/components/form/Form.component.tsx +416 -0
  415. package/src/lib/components/globalhealthbar/GlobalHealthBar.component.tsx +201 -0
  416. package/src/lib/components/globalhealthbar/tooltip/index.ts +72 -0
  417. package/src/lib/components/healthselectorv2/HealthSelector.component.test.tsx +62 -0
  418. package/src/lib/components/healthselectorv2/HealthSelector.component.tsx +103 -0
  419. package/src/lib/components/icon/Icon.component.tsx +280 -0
  420. package/src/lib/components/infomessage/InfoMessage.component.tsx +47 -0
  421. package/src/lib/components/infomessage/InfoMessageUtils.test.tsx +110 -0
  422. package/src/lib/components/infomessage/InfoMessageUtils.ts +39 -0
  423. package/src/lib/components/input/Input.component.style.ts +141 -0
  424. package/src/lib/components/input/Input.component.tsx +174 -0
  425. package/src/lib/components/inputlist/InputButtons.tsx +111 -0
  426. package/src/lib/components/inputlist/InputList.component.tsx +98 -0
  427. package/src/lib/components/inputlist/InputList.test.tsx +102 -0
  428. package/src/lib/components/inputv2/inputv2.tsx +155 -0
  429. package/src/lib/components/lateralnavbarlayout/LateralNavbarLayout.component.tsx +38 -0
  430. package/src/lib/components/layout/Layout.component.tsx +46 -0
  431. package/src/lib/components/layout/v2/AppContainer.tsx +160 -0
  432. package/src/lib/components/layout/v2/index.tsx +30 -0
  433. package/src/lib/components/layout/v2/panels.tsx +105 -0
  434. package/src/lib/components/linechart/LineChart.component.tsx +152 -0
  435. package/src/lib/components/linetemporalchart/ChartUtil.test.ts +261 -0
  436. package/src/lib/components/linetemporalchart/ChartUtil.ts +187 -0
  437. package/src/lib/components/linetemporalchart/LineTemporalChart.component.tsx +797 -0
  438. package/src/lib/components/linetemporalchart/MetricTimespanProvider.tsx +50 -0
  439. package/src/lib/components/linetemporalchart/tooltip/index.ts +178 -0
  440. package/src/lib/components/loader/Loader.component.tsx +71 -0
  441. package/src/lib/components/modal/Modal.component.tsx +121 -0
  442. package/src/lib/components/multiselect/MultiSelect.component.tsx +158 -0
  443. package/src/lib/components/navbar/Navbar.component.tsx +238 -0
  444. package/src/lib/components/notifications/Notification.component.tsx +160 -0
  445. package/src/lib/components/notifications/Notifications.component.tsx +73 -0
  446. package/src/lib/components/prettybytes/PrettyBytes.component.tsx +39 -0
  447. package/src/lib/components/prettybytes/prettybytes.test.tsx +217 -0
  448. package/src/lib/components/progressbar/ProgressBar.component.tsx +217 -0
  449. package/src/lib/components/scrollbarwrapper/ScrollbarWrapper.component.tsx +66 -0
  450. package/src/lib/components/searchinput/SearchInput.component.tsx +146 -0
  451. package/src/lib/components/select/Select.component.tsx +98 -0
  452. package/src/lib/components/selectv2/SelectStyle.ts +267 -0
  453. package/src/lib/components/selectv2/Selectv2.component.tsx +487 -0
  454. package/src/lib/components/selectv2/selectv2.test.tsx +277 -0
  455. package/src/lib/components/sidebar/Sidebar.component.tsx +217 -0
  456. package/src/lib/components/spacedbox/SpacedBox.ts +116 -0
  457. package/src/lib/components/sparkline/SparkLine.component.tsx +176 -0
  458. package/src/lib/components/statuswrapper/Statuswrapper.component.tsx +66 -0
  459. package/src/lib/components/steppers/Stepper.component.d.ts +70 -0
  460. package/src/lib/components/steppers/Stepper.component.tsx +62 -0
  461. package/src/lib/components/steppers/Steppers.component.tsx +157 -0
  462. package/src/lib/components/tablev2/MultiSelectableContent.tsx +318 -0
  463. package/src/lib/components/tablev2/Search.tsx +112 -0
  464. package/src/lib/components/tablev2/SearchWithQueryParams.tsx +38 -0
  465. package/src/lib/components/tablev2/SingleSelectableContent.tsx +222 -0
  466. package/src/lib/components/tablev2/TableCommon.tsx +102 -0
  467. package/src/lib/components/tablev2/TableUtils.test.ts +17 -0
  468. package/src/lib/components/tablev2/TableUtils.ts +60 -0
  469. package/src/lib/components/tablev2/Tablestyle.tsx +184 -0
  470. package/src/lib/components/tablev2/Tablev2.component.tsx +316 -0
  471. package/src/lib/components/tablev2/Tablev2.test.tsx +136 -0
  472. package/src/lib/components/tablev2/react-table-config.ts +90 -0
  473. package/src/lib/components/tablev2/useCheckbox.tsx +62 -0
  474. package/src/lib/components/tablev2/useSyncedScroll.ts +64 -0
  475. package/src/lib/components/tabsv2/ScrollButton.tsx +39 -0
  476. package/src/lib/components/tabsv2/StyledTabs.ts +108 -0
  477. package/src/lib/components/tabsv2/Tab.ts +27 -0
  478. package/src/lib/components/tabsv2/Tabsv2.component.tsx +247 -0
  479. package/src/lib/components/tabsv2/useScrollingTabs.ts +335 -0
  480. package/src/lib/components/text/Text.component.tsx +194 -0
  481. package/src/lib/components/textarea/TextArea.component.tsx +106 -0
  482. package/src/lib/components/textbadge/TextBadge.component.tsx +44 -0
  483. package/src/lib/components/toast/DurationBasedProgressBar.tsx +45 -0
  484. package/src/lib/components/toast/Toast.component.tsx +181 -0
  485. package/src/lib/components/toast/ToastPositionHelpers.ts +38 -0
  486. package/src/lib/components/toast/ToastProvider.tsx +40 -0
  487. package/src/lib/components/toast/useMutationsHandler.test.tsx +238 -0
  488. package/src/lib/components/toast/useMutationsHandler.ts +172 -0
  489. package/src/lib/components/toast/useToastParameters.ts +59 -0
  490. package/src/lib/components/toggle/Toggle.component.tsx +128 -0
  491. package/src/lib/components/tooltip/Tooltip.component.tsx +136 -0
  492. package/src/lib/components/vegachart/VegaChart.component.tsx +146 -0
  493. package/src/lib/components/vegachartv2/SyncedCursorCharts.tsx +30 -0
  494. package/src/lib/components/vegachartv2/VegaChartV2.component.tsx +279 -0
  495. package/src/lib/hooks.ts +26 -0
  496. package/src/lib/icons/branding.tsx +55 -0
  497. package/src/lib/icons/scality-loading.tsx +118 -0
  498. package/src/lib/index.css +25 -0
  499. package/src/lib/index.ts +75 -0
  500. package/src/lib/next.ts +17 -0
  501. package/src/lib/organisms/attachments/AttachmentConfirmationModal.tsx +311 -0
  502. package/src/lib/organisms/attachments/AttachmentTable.tsx +728 -0
  503. package/src/lib/organisms/attachments/AttachmentTypes.ts +16 -0
  504. package/src/lib/spacing.tsx +108 -0
  505. package/src/lib/style/fonts/Lato-Bold.woff +0 -0
  506. package/src/lib/style/fonts/Lato-Bold.woff2 +0 -0
  507. package/src/lib/style/fonts/Lato-Regular.woff +0 -0
  508. package/src/lib/style/fonts/Lato-Regular.woff2 +0 -0
  509. package/src/lib/style/theme.ts +270 -0
  510. package/src/lib/testUtils.tsx +18 -0
  511. package/src/lib/utils.ts +57 -0
  512. package/stories/Button/button.guideline.mdx +199 -0
  513. package/stories/Button/button.stories.tsx +299 -0
  514. package/stories/Icon.mdx +31 -0
  515. package/stories/InfoMessage/infomessage.guideline.mdx +32 -0
  516. package/stories/InfoMessage/infomessage.stories.tsx +124 -0
  517. package/stories/Introduction.mdx +32 -0
  518. package/stories/Select/select.guideline.mdx +91 -0
  519. package/stories/Select/selectv2.stories.tsx +169 -0
  520. package/stories/areachart.stories.tsx +121 -0
  521. package/stories/banner.stories.tsx +75 -0
  522. package/stories/barchart.stories.tsx +148 -0
  523. package/stories/box.stories.tsx +114 -0
  524. package/stories/breadcrumb.stories.tsx +42 -0
  525. package/stories/card.stories.tsx +195 -0
  526. package/stories/checkbox.stories.tsx +63 -0
  527. package/stories/chips.stories.tsx +107 -0
  528. package/stories/circularprogressbar.stories.tsx +136 -0
  529. package/stories/cloudprogressbar.stories.tsx +93 -0
  530. package/stories/collapsiblepanel.stories.tsx +57 -0
  531. package/stories/color.mdx +43 -0
  532. package/stories/common.tsx +39 -0
  533. package/stories/constrainedtext.stories.tsx +51 -0
  534. package/stories/controls.ts +59 -0
  535. package/stories/copybutton.stories.tsx +58 -0
  536. package/stories/data/areachart.ts +122 -0
  537. package/stories/data/barchart.ts +1497 -0
  538. package/stories/data/linechart.ts +1516 -0
  539. package/stories/data/list.ts +802 -0
  540. package/stories/data/sparklinechart.ts +164 -0
  541. package/stories/designprinciples.mdx +29 -0
  542. package/stories/dropdown.stories.tsx +146 -0
  543. package/stories/dropzone.stories.tsx +49 -0
  544. package/stories/emptystate.stories.tsx +22 -0
  545. package/stories/errorpage401.stories.tsx +25 -0
  546. package/stories/errorpage404.stories.tsx +24 -0
  547. package/stories/errorpage500.stories.tsx +44 -0
  548. package/stories/errorpageauth.stories.tsx +31 -0
  549. package/stories/form.stories.tsx +255 -0
  550. package/stories/format.mdx +44 -0
  551. package/stories/formattedate.stories.tsx +58 -0
  552. package/stories/globalhealthbar.stories.tsx +171 -0
  553. package/stories/guideline/chart-guideline.mdx +63 -0
  554. package/stories/guideline/docs-template.mdx +43 -0
  555. package/stories/guideline/mdxExampleComponents.tsx +57 -0
  556. package/stories/healthselectorv2.stories.tsx +74 -0
  557. package/stories/icon.stories.tsx +146 -0
  558. package/stories/icons.mdx +108 -0
  559. package/stories/input.stories.tsx +228 -0
  560. package/stories/inputlist.stories.tsx +57 -0
  561. package/stories/lateralnavbarlayout.stories.tsx +127 -0
  562. package/stories/layout.stories.tsx +378 -0
  563. package/stories/linechart.stories.tsx +319 -0
  564. package/stories/linecharttemporal.stories.tsx +88 -0
  565. package/stories/loader.stories.tsx +49 -0
  566. package/stories/modal.mdx +17 -0
  567. package/stories/modal.stories.tsx +177 -0
  568. package/stories/multiselect.stories.tsx +126 -0
  569. package/stories/navbar.stories.tsx +156 -0
  570. package/stories/notifications.stories.tsx +199 -0
  571. package/stories/pictures/icon-design-system.png +0 -0
  572. package/stories/prettybytes.stories.tsx +51 -0
  573. package/stories/progressbar.stories.tsx +174 -0
  574. package/stories/scrollbar.stories.tsx +76 -0
  575. package/stories/searchinput.stories.tsx +86 -0
  576. package/stories/select.stories.tsx +52 -0
  577. package/stories/selectinput.stories.tsx +73 -0
  578. package/stories/sidebar.stories.tsx +95 -0
  579. package/stories/spacing.stories.mdx +50 -0
  580. package/stories/spacing.stories.tsx +116 -0
  581. package/stories/sparkline.stories.tsx +85 -0
  582. package/stories/statuswrapper.stories.tsx +108 -0
  583. package/stories/stepper.stories.tsx +124 -0
  584. package/stories/steppers.stories.tsx +115 -0
  585. package/stories/tablev2.stories.tsx +539 -0
  586. package/stories/tabsv2.stories.tsx +168 -0
  587. package/stories/text.stories.tsx +138 -0
  588. package/stories/textarea.stories.tsx +69 -0
  589. package/stories/textbadge.stories.tsx +27 -0
  590. package/stories/toast.stories.tsx +144 -0
  591. package/stories/toggle.stories.tsx +45 -0
  592. package/stories/tooltip.stories.tsx +170 -0
  593. package/stories/typography.mdx +28 -0
  594. package/stories/vegachart.stories.tsx +98 -0
  595. package/tsconfig.json +18 -0
  596. package/types/styled.d.ts +6 -0
@@ -0,0 +1,797 @@
1
+ // @ts-nocheck
2
+ import { useMemo, useRef, useLayoutEffect, Fragment } from 'react';
3
+ import styled, { useTheme } from 'styled-components';
4
+ import { lighten, darken } from 'polished';
5
+ import { expressionFunction } from 'vega';
6
+ import {
7
+ lineColor1,
8
+ lineColor2,
9
+ lineColor3,
10
+ lineColor4,
11
+ lineColor5,
12
+ lineColor6,
13
+ lineColor7,
14
+ lineColor8,
15
+ } from '../../style/theme';
16
+ import { VegaChart } from '../vegachartv2/VegaChartV2.component';
17
+ import { useCursorX } from '../vegachartv2/SyncedCursorCharts';
18
+ import { ChartTitleText } from '../text/Text.component';
19
+ import {
20
+ convert2VegaData,
21
+ getUnitLabel,
22
+ convertDataBaseValue,
23
+ addMissingDataPoint,
24
+ getRelativeValue,
25
+ getColorDomains,
26
+ relativeDatumToOriginalDatum,
27
+ normlizeVegaFieldName,
28
+ } from './ChartUtil';
29
+ import { useMetricsTimeSpan } from './MetricTimespanProvider';
30
+ import { spacing } from '../../style/theme';
31
+ import { SmallerText } from '../text/Text.component';
32
+ import { Loader } from '../loader/Loader.component';
33
+ import { formatValue } from './tooltip/index';
34
+ import { Tooltip as TooltipComponent } from '../tooltip/Tooltip.component';
35
+ import { Icon } from '../icon/Icon.component';
36
+ // some predefined values
37
+ export const YAXIS_TITLE_READ_WRITE = 'write(+) / read(-)';
38
+ export const YAXIS_TITLE_IN_OUT = 'in(+) / out(-)';
39
+ export const UNIT_RANGE_BS = [
40
+ {
41
+ threshold: 0,
42
+ label: 'B/s',
43
+ },
44
+ {
45
+ threshold: 1024,
46
+ label: 'KiB/s',
47
+ },
48
+ {
49
+ threshold: 1024 * 1024,
50
+ label: 'MiB/s',
51
+ },
52
+ {
53
+ threshold: 1024 * 1024 * 1024,
54
+ label: 'GiB/s',
55
+ },
56
+ {
57
+ threshold: 1024 * 1024 * 1024 * 1024,
58
+ label: 'TiB/s',
59
+ },
60
+ ];
61
+ const LineTemporalChartWrapper = styled.div`
62
+ display: flex;
63
+ flex-direction: column;
64
+ justify-content: flex-start; // to make sure the header, the graph itself and legend are aligned
65
+ `;
66
+ const Legends = styled.div`
67
+ display: flex;
68
+ align-items: center;
69
+ `;
70
+ const LegendStroke = styled.div`
71
+ margin: 0 ${spacing.sp8} 0 ${spacing.sp16};
72
+ height: ${spacing.sp2};
73
+ background: ${(props) =>
74
+ props.isLineDashed
75
+ ? `repeating-linear-gradient(to right,${props.lineColor} 0,${props.lineColor} ${spacing.sp1},transparent ${spacing.sp1},transparent ${spacing.sp2})`
76
+ : props.lineColor};
77
+ width: ${spacing.sp8};
78
+ `;
79
+ const ChartHeader = styled.div`
80
+ display: flex;
81
+ align-items: center;
82
+ `;
83
+
84
+ /*
85
+ We need to convert the data from raw prometheus data in the following steps:
86
+ prometheusData => series => addMissingDataPoint(series.data, startTimeStamp, sampleDuration, sampleFrequency) => VegaData
87
+
88
+ The data structure of multi-series chart using Vega-lite library
89
+ https://vega.github.io/vega-lite/examples/interactive_multi_line_pivot_tooltip.html
90
+ */
91
+ export type Serie = {
92
+ resource: string;
93
+ // the name of the resource
94
+ data: [number, string | null][];
95
+ // the original data format from prometheus
96
+ getTooltipLabel: (metricPrefix?: string, resource?: string) => string;
97
+ // it's mandatory to display tooltip label in the tooltip
98
+ getLegendLabel?: (metricPrefix?: string, resource?: string) => string;
99
+ // get the legend label for each of the series
100
+ color?: string;
101
+ // optional color field to specify the color of the line
102
+ metricPrefix?: string;
103
+ // the name of the metric prefix with read, write, in, out
104
+ isLineDashed?: boolean; // to specify if the line is dash
105
+ };
106
+ export type LineChartProps = {
107
+ series: Serie[];
108
+ title: string;
109
+ height: number;
110
+ startingTimeStamp: number;
111
+ // pass to addMissingDataPoint()
112
+ unitRange?: {
113
+ threshold: number;
114
+ label: string;
115
+ }[];
116
+ isLoading?: boolean;
117
+ // if to display a loader next to the title
118
+ isLegendHidden?: boolean;
119
+ yAxisType?: 'default' | 'percentage' | 'symmetrical';
120
+ yAxisTitle?: string;
121
+ helpText?: string | JSX.Element;
122
+ onHover?: (dataPoint: any) => void;
123
+ renderTooltipSerie?: (
124
+ arg0: {
125
+ color?: string;
126
+ isLineDashed?: boolean;
127
+ name: string;
128
+ value: string;
129
+ key: string;
130
+ unitLabel: string;
131
+ },
132
+ tooltipData: any,
133
+ ) => string;
134
+ };
135
+ // Custom formatter to display negative value as an absolute value in read/write, in/out chart
136
+ expressionFunction('negativeValueFormatter', function (datum) {
137
+ return Math.abs(datum).toFixed(2);
138
+ });
139
+ // We use 8 main color from the palette and decline them (lighter/ darker) when we have more than 8 datasets
140
+ const colorRange = [
141
+ lineColor1,
142
+ lineColor2,
143
+ lineColor3,
144
+ lineColor4,
145
+ lineColor5,
146
+ lineColor6,
147
+ lineColor7,
148
+ lineColor8,
149
+ lighten(0.3, lineColor1),
150
+ lighten(0.3, lineColor2),
151
+ lighten(0.3, lineColor3),
152
+ lighten(0.3, lineColor4),
153
+ lighten(0.3, lineColor5),
154
+ lighten(0.3, lineColor6),
155
+ lighten(0.3, lineColor7),
156
+ lighten(0.3, lineColor8),
157
+ darken(0.2, lineColor1),
158
+ darken(0.2, lineColor2),
159
+ darken(0.2, lineColor3),
160
+ darken(0.2, lineColor4),
161
+ darken(0.3, lineColor5),
162
+ darken(0.3, lineColor6),
163
+ darken(0.3, lineColor7),
164
+ darken(0.3, lineColor8),
165
+ ];
166
+
167
+ // Note: we need to make sure the start time and end timefor the prometheus query between the series are the same.
168
+ function LineTemporalChart({
169
+ series,
170
+ title,
171
+ height,
172
+ startingTimeStamp,
173
+ unitRange,
174
+ isLoading = false,
175
+ isLegendHidden = false,
176
+ yAxisType = 'default',
177
+ yAxisTitle,
178
+ helpText,
179
+ renderTooltipSerie,
180
+ onHover,
181
+ ...rest
182
+ }: LineChartProps) {
183
+ // property validation
184
+ if (!['default', 'percentage', 'symmetrical'].includes(yAxisType)) {
185
+ console.error(
186
+ `Invalid yAxisType props, expected default, percentage or symmetrical but received ${yAxisType}`,
187
+ );
188
+ }
189
+
190
+ if (!height) {
191
+ console.error('Please specify the height of the chart.');
192
+ }
193
+
194
+ if (!title) {
195
+ console.error('Please specify the title of the chart.');
196
+ }
197
+
198
+ // we have to make sure that when prop unitRange exists, there is at least one item defined.
199
+ if (unitRange) {
200
+ if (unitRange.length === 0) {
201
+ console.error('Please provide at least one entry in unitRange.');
202
+ }
203
+ }
204
+
205
+ const vegaViewRef = useRef();
206
+ const theme = useTheme();
207
+ const { frequency, duration } = useMetricsTimeSpan();
208
+ //##### Data Transformation Start
209
+
210
+ /**
211
+ * 1. Add missing data points
212
+ * During the downtime of the platform, there is no data returned by Prometheus API.
213
+ * Hence, we can see a line link the last data point before the downtime and the first data point once the platform restarts.
214
+ * However, this is not what we expect to see.
215
+ * So we need to manually add the missing data points with the value `null` to make sure there is nothing displayed on the graph during the downtime.
216
+ */
217
+ const addedMissingDataPointSeries = useMemo(() => {
218
+ return series.map((line) => {
219
+ return {
220
+ ...line,
221
+ data: addMissingDataPoint(
222
+ line.data,
223
+ startingTimeStamp,
224
+ duration,
225
+ frequency,
226
+ ),
227
+ };
228
+ });
229
+ }, [series, startingTimeStamp, duration, frequency]);
230
+ // 2. Change the data structure to a flat array which is required by Vega-lite
231
+ const vegaData = useMemo(() => {
232
+ return convert2VegaData(addedMissingDataPointSeries);
233
+ }, [addedMissingDataPointSeries]);
234
+ // 3. Search for the biggest value in order to define the unit for the chart, if the unit is needed.
235
+ const maxValue = useMemo(() => {
236
+ return Math.max.apply(
237
+ Math,
238
+ vegaData.map(function (datum: {
239
+ timestamp: number;
240
+ label: string;
241
+ value: number | 'NAN';
242
+ }): number {
243
+ if (datum.value && typeof datum.value === 'number') {
244
+ return datum.value;
245
+ }
246
+
247
+ return 0;
248
+ }),
249
+ );
250
+ }, [vegaData]);
251
+ // 4. Recompute the value base on the unit
252
+ const valueBase = useMemo(() => {
253
+ return unitRange ? getUnitLabel(unitRange, maxValue).valueBase : 1;
254
+ }, [maxValue, unitRange]);
255
+ const vegaDataWithUnit = unitRange
256
+ ? convertDataBaseValue(vegaData, valueBase)
257
+ : vegaData;
258
+ // 5. Convert the values of metric prefix `read` and `out` to negative.
259
+ const vegaSpecValues = vegaDataWithUnit.map(
260
+ (data: {
261
+ timestamp: number;
262
+ label: string;
263
+ // same as the tooltip label
264
+ value: number | 'NAN';
265
+ // manually set it to a string. It's for the tooltip to display a hyphen for the data that don't exist
266
+ isNegativeValue: boolean;
267
+ }) => {
268
+ if (
269
+ data.isNegativeValue &&
270
+ data.value &&
271
+ typeof data.value === 'number'
272
+ ) {
273
+ return { ...data, value: 0 - data.value };
274
+ } else return { ...data };
275
+ },
276
+ );
277
+ //##### Data Transformation End
278
+ const customizedColorRange = useMemo(() => {
279
+ const customizedColors = [];
280
+ series.map((line) => {
281
+ if (line.color) {
282
+ return customizedColors.push(line.color);
283
+ }
284
+ });
285
+ return customizedColors;
286
+ }, [series]);
287
+ // $FlowFixMe
288
+ const seriesResources = [...new Set(series.map((serie) => serie.resource))];
289
+ // for the series with the same resource, the color of legend and tooltip should be the same.
290
+ const legendLabels = useMemo(() => {
291
+ const uniqueLabel = [];
292
+ series.forEach((serie, index) => {
293
+ if (serie.getLegendLabel) {
294
+ const legend = serie.getLegendLabel(serie.metricPrefix, serie.resource);
295
+
296
+ if (!uniqueLabel.find((uLabel) => uLabel === legend)) {
297
+ const serieIndex =
298
+ yAxisType === 'symmetrical' && !customizedColorRange.length
299
+ ? seriesResources.findIndex(
300
+ (serieResource) => serieResource === serie.resource,
301
+ )
302
+ : index;
303
+ uniqueLabel.push({
304
+ legend,
305
+ serie,
306
+ serieIndex,
307
+ });
308
+ }
309
+ }
310
+ });
311
+ return uniqueLabel;
312
+ }, [series]);
313
+ const tooltipLabels = useMemo(
314
+ () =>
315
+ series.map((line) => {
316
+ return line.getTooltipLabel(line.metricPrefix, line.resource);
317
+ }),
318
+ [series],
319
+ );
320
+ const syncedVerticalRuler = {
321
+ mark: 'rule',
322
+ encoding: {
323
+ x: {
324
+ datum: {
325
+ expr: 'toDate(cursorX)',
326
+ }, // convert the timestamp in milliseconds to Date object
327
+ //https://vega.github.io/vega-lite/docs/datetime.html
328
+ },
329
+ color: {
330
+ value: theme.highlight,
331
+ opacity: 0.3,
332
+ },
333
+
334
+ /*
335
+ According to the design, the vertical ruler should be hided when the mouse points out of the graph area.
336
+ We can use param `isCursorDisplayed` to control the size of the vertical line.
337
+ */
338
+ size: {
339
+ value: 0,
340
+ condition: {
341
+ test: 'isCursorDisplayed',
342
+ value: 1,
343
+ },
344
+ },
345
+ },
346
+ };
347
+ const syncedVerticalRulerPercentage = {
348
+ mark: 'rule',
349
+ encoding: {
350
+ x: {
351
+ datum: {
352
+ expr: 'toDate(cursorX)',
353
+ }, // convert the timestamp to Date object
354
+ },
355
+ // We draw the line manually for the percentage chart to solve the issue that the synced vertical line can
356
+ // only reach the max value one the line.
357
+ y: {
358
+ datum: 0,
359
+ },
360
+ y2: {
361
+ datum: 100,
362
+ },
363
+ color: {
364
+ value: theme.highlight,
365
+ opacity: 0.3,
366
+ },
367
+
368
+ /*
369
+ According to the design, the vertical ruler should be hided when the mouse points out of the graph area.
370
+ We can use param `isCursorDisplayed` to control the size of the vertical line.
371
+ */
372
+ size: {
373
+ value: 0,
374
+ condition: {
375
+ test: 'isCursorDisplayed',
376
+ value: 1,
377
+ },
378
+ },
379
+ },
380
+ };
381
+ const syncedVerticalRulerSymmetrical = {
382
+ mark: 'rule',
383
+ encoding: {
384
+ x: {
385
+ datum: {
386
+ expr: 'toDate(cursorX)',
387
+ }, // convert the timestamp to Date object
388
+ },
389
+ y: {
390
+ expr: '-yAxisMaxValue',
391
+ },
392
+ y2: {
393
+ expr: 'yAxisMaxValue',
394
+ },
395
+ color: {
396
+ value: theme.highlight,
397
+ opacity: 0.3,
398
+ },
399
+
400
+ /*
401
+ According to the design, the vertical ruler should be hided when the mouse points out of the graph area.
402
+ We can use param `isCursorDisplayed` to control the size of the vertical line.
403
+ */
404
+ size: {
405
+ value: 0,
406
+ condition: {
407
+ test: 'isCursorDisplayed',
408
+ value: 1,
409
+ },
410
+ },
411
+ },
412
+ };
413
+ const xAxis = {
414
+ field: 'timestamp',
415
+ type: 'temporal',
416
+ axis: {
417
+ // Refer to all the available time format: https://github.com/d3/d3-time-format#locale_format
418
+ format: '%d %b %H:%M',
419
+ ticks: true,
420
+ tickCount: 5,
421
+ labelColor: theme.textSecondary,
422
+ // TODO: labelFontSize is not responsiveness
423
+ labelSeparation: 12, // The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default 0). This property is ignored if labelOverlap resolution is not enabled.
424
+ },
425
+ title: null,
426
+ };
427
+ const yAxis = useMemo(() => {
428
+ return {
429
+ field: 'value',
430
+ type: 'quantitative',
431
+ axis: {
432
+ title: yAxisTitle ? yAxisTitle : ' ',
433
+ orient: 'right',
434
+ translate: -5,
435
+ // translate both the x and y coordinates by 5 pixel
436
+ tickOffset: 5,
437
+ // shift back the y translate to make sure the tick align with the 0 seperation line
438
+ labelBaseline: 'middle',
439
+ labelPadding: 6,
440
+ labelFlush: true,
441
+ },
442
+ scale:
443
+ yAxisType === 'symmetrical'
444
+ ? {
445
+ domain: [
446
+ {
447
+ expr: '-yAxisMaxValue',
448
+ },
449
+ {
450
+ expr: 'yAxisMaxValue',
451
+ },
452
+ ],
453
+ }
454
+ : yAxisType === 'percentage'
455
+ ? {
456
+ domain: [0, 100],
457
+ }
458
+ : undefined,
459
+ };
460
+ }, [yAxisTitle, yAxisType]);
461
+ const symmetricalColorRange =
462
+ yAxisType !== 'symmetrical'
463
+ ? colorRange
464
+ : series.map(
465
+ (serie) => colorRange[seriesResources.indexOf(serie.resource)],
466
+ );
467
+ const color = {
468
+ field: 'label',
469
+ type: 'nominal',
470
+ scale: {
471
+ domain: getColorDomains(series),
472
+ // the order of the domain should be the same as the order of colorRange, otherwise the colors will be assigned to the line base on the alphabetical order: ;
473
+ range: customizedColorRange.length
474
+ ? customizedColorRange
475
+ : symmetricalColorRange, //if there is no customized color range, we will use the default the line color
476
+ },
477
+ legend: null,
478
+ };
479
+
480
+ // In order to add the tooltip we refered this example
481
+ // https://vega.github.io/vega-lite/examples/interactive_multi_line_pivot_tooltip.html
482
+ const getTooltipConfig = (
483
+ fields: {
484
+ field: string;
485
+ type: string;
486
+ title: string;
487
+ format: string;
488
+ }[],
489
+ ) => {
490
+ const tooltipConfigBase = {
491
+ // The pivot transform maps unique values from a field to new aggregated fields (columns) in the output stream.
492
+ // https://vega.github.io/vega-lite/docs/pivot.html
493
+ transform: [
494
+ {
495
+ pivot: 'label',
496
+ value: 'value',
497
+ groupby: ['timestamp'],
498
+ },
499
+ ],
500
+ mark: 'rule',
501
+ encoding: {
502
+ x: xAxis,
503
+ opacity: {
504
+ // to be check if we can remove this channel, since we don't need to have a rule next to the tooltip
505
+ condition: {
506
+ value: 0,
507
+ selection: 'hover',
508
+ },
509
+ value: 0,
510
+ },
511
+ tooltip: [
512
+ {
513
+ field: 'timestamp',
514
+ type: 'temporal',
515
+ axis: {
516
+ format: '%d %b %H:%M:%S',
517
+ ticks: true,
518
+ tickCount: 4,
519
+ labelAngle: -50,
520
+ labelColor: '#B5B5B5',
521
+ },
522
+ title: 'title',
523
+ },
524
+ ],
525
+ },
526
+ selection: {
527
+ hover: {
528
+ type: 'single',
529
+ fields: ['timestamp'],
530
+ nearest: true,
531
+ on: 'mouseover',
532
+ empty: 'none',
533
+ clear: 'mouseout',
534
+ },
535
+ },
536
+ };
537
+
538
+ if (fields.length) {
539
+ const newFields = [...tooltipConfigBase.encoding.tooltip, ...fields];
540
+ const newConfig = Object.assign({}, tooltipConfigBase);
541
+ newConfig.encoding.tooltip = newFields;
542
+ return newConfig;
543
+ }
544
+
545
+ return tooltipConfigBase;
546
+ };
547
+
548
+ const tooltipConfig = useMemo(
549
+ () =>
550
+ getTooltipConfig(
551
+ (() => {
552
+ const res = [];
553
+ tooltipLabels.forEach((label) => {
554
+ res.push({
555
+ field: `${normlizeVegaFieldName(label)}`,
556
+ type: 'quantitative',
557
+ title: `${label}`,
558
+ format: '.2f',
559
+ formatType: 'negativeValueFormatter',
560
+ });
561
+ });
562
+ return res;
563
+ })(),
564
+ ),
565
+ [tooltipLabels],
566
+ );
567
+ // we need to retrieve the vega view in order to update the signal
568
+ useLayoutEffect(() => {
569
+ if (vegaViewRef.current && yAxisType === 'symmetrical') {
570
+ vegaViewRef.current
571
+ .signal(
572
+ 'yAxisMaxValue',
573
+ Math.ceil(getRelativeValue(maxValue, valueBase)),
574
+ )
575
+ .run();
576
+ }
577
+ }, [maxValue, valueBase, vegaViewRef, yAxisType]);
578
+ // $FlowFixMe
579
+ const cursorX = useCursorX().cursorX;
580
+ // the specification of the Vega-lite chart
581
+ const spec = {
582
+ data: {
583
+ values: vegaSpecValues,
584
+ },
585
+ height,
586
+ width: 'container',
587
+ // set responsive width
588
+ mark: {
589
+ type: 'line',
590
+ tooltip: true,
591
+ },
592
+ // Add two params to control the display of the vertical ruler.
593
+ params: [
594
+ {
595
+ name: 'cursorX',
596
+ value: cursorX || Date.now(), // the value of signal can't be null
597
+ },
598
+ {
599
+ name: 'isCursorDisplayed',
600
+ value: false,
601
+ },
602
+ ],
603
+ layer: [
604
+ {
605
+ encoding: {
606
+ x: xAxis,
607
+ y: yAxis,
608
+ strokeDash: {
609
+ field: 'isDashed',
610
+ type: 'nominal',
611
+ legend: null,
612
+ condition: {
613
+ test: 'datum.isDashed === true',
614
+ value: [4, 2], // Change the value here if the dash is not visible. https://vega.github.io/vega-lite/docs/mark.html#stroke
615
+ },
616
+ },
617
+ color: color,
618
+ opacity: {
619
+ condition: {
620
+ test: 'datum.isDashed === true',
621
+ // for the dashed line, set the opacity to 0.5
622
+ value: 0.6,
623
+ },
624
+ value: 1,
625
+ },
626
+ },
627
+ layer: [
628
+ {
629
+ mark: {
630
+ type: 'line',
631
+ strokeWidth: 1,
632
+ },
633
+ }, // the width of the line should be 1px
634
+ {
635
+ mark: 'point',
636
+ encoding: {
637
+ size: {
638
+ value: 0,
639
+ condition: {
640
+ selection: 'hover',
641
+ value: 10,
642
+ },
643
+ },
644
+ },
645
+ },
646
+ yAxisType === 'percentage'
647
+ ? {
648
+ // for percentage chart we need to manually draw the line from 0-100
649
+ ...syncedVerticalRuler,
650
+ encoding: {
651
+ ...syncedVerticalRuler.encoding,
652
+ ...syncedVerticalRulerPercentage.encoding,
653
+ },
654
+ }
655
+ : yAxisType === 'symmetrical'
656
+ ? {
657
+ // for symmetrical chart we manually draw the line from minValue to maxValue
658
+ ...syncedVerticalRuler,
659
+ encoding: {
660
+ ...syncedVerticalRuler.encoding,
661
+ ...syncedVerticalRulerSymmetrical.encoding,
662
+ },
663
+ }
664
+ : syncedVerticalRuler,
665
+ ],
666
+ },
667
+ tooltipConfig,
668
+ ],
669
+ ...rest,
670
+ };
671
+ // the seperation line for symmetrical charts
672
+ const seperationLine = {
673
+ mark: 'rule',
674
+ encoding: {
675
+ y: {
676
+ datum: 0,
677
+ },
678
+ color: {
679
+ value: theme.border,
680
+ opacity: 1,
681
+ },
682
+ },
683
+ };
684
+
685
+ if (yAxisType === 'symmetrical') {
686
+ spec.layer.unshift(seperationLine);
687
+ spec.params.push({
688
+ name: 'yAxisMaxValue',
689
+ value: Math.ceil(getRelativeValue(maxValue, valueBase)),
690
+ });
691
+ }
692
+
693
+ const seriesNames = series
694
+ .map(
695
+ (serie) =>
696
+ title + serie.resource + (serie.metricPrefix ? serie.metricPrefix : ''),
697
+ )
698
+ .join(',');
699
+ const unitLabel = unitRange
700
+ ? getUnitLabel(unitRange, maxValue).unitLabel
701
+ : yAxisType === 'percentage'
702
+ ? '%'
703
+ : '';
704
+ return (
705
+ <LineTemporalChartWrapper>
706
+ <ChartHeader>
707
+ {unitLabel ? (
708
+ <ChartTitleText>
709
+ {title} ({unitLabel})
710
+ </ChartTitleText> // for the chart doesn't have title
711
+ ) : (
712
+ <ChartTitleText>{title}</ChartTitleText>
713
+ )}
714
+ {helpText && (
715
+ <TooltipComponent
716
+ placement="bottom-right"
717
+ overlay={
718
+ <SmallerText
719
+ style={{
720
+ minWidth: '15rem',
721
+ display: 'block',
722
+ }}
723
+ >
724
+ {helpText}
725
+ </SmallerText>
726
+ }
727
+ >
728
+ <Icon name="Info" color={theme.buttonSecondary} />
729
+ </TooltipComponent>
730
+ )}
731
+ {isLoading && (
732
+ <Loader
733
+ style={{
734
+ paddingLeft: `${spacing.sp4}`,
735
+ }}
736
+ />
737
+ )}
738
+ </ChartHeader>
739
+ {/* When the chart is in loading status, we display the chart skeleton */}
740
+ <VegaChart
741
+ key={seriesNames}
742
+ spec={spec}
743
+ onHover={(datum) => {
744
+ if (onHover) {
745
+ onHover({
746
+ ...datum,
747
+ metadata: {
748
+ unitLabel,
749
+ valueBase,
750
+ },
751
+ originalData: {
752
+ ...relativeDatumToOriginalDatum(datum, valueBase),
753
+ timestamp: datum.timestamp,
754
+ },
755
+ });
756
+ }
757
+ }}
758
+ theme={'custom'}
759
+ ref={vegaViewRef}
760
+ formatTooltip={useMemo(
761
+ () =>
762
+ formatValue(
763
+ series,
764
+ customizedColorRange,
765
+ colorRange,
766
+ unitLabel,
767
+ yAxisType,
768
+ renderTooltipSerie,
769
+ ),
770
+ [unitLabel, seriesNames, renderTooltipSerie],
771
+ )}
772
+ ></VegaChart>
773
+ {/* if it's for read/write and in/out graph, we only display the legends for the instances. */}
774
+ {!isLegendHidden && (
775
+ <Legends>
776
+ {legendLabels.map(({ legend, serie, serieIndex }, index) => {
777
+ return (
778
+ <Fragment key={`${title}-${legend}-${index}`}>
779
+ <LegendStroke
780
+ lineColor={
781
+ customizedColorRange.length
782
+ ? customizedColorRange[serieIndex]
783
+ : colorRange[serieIndex]
784
+ }
785
+ isLineDashed={serie.isLineDashed}
786
+ ></LegendStroke>
787
+ <SmallerText>{legend}</SmallerText>
788
+ </Fragment>
789
+ );
790
+ })}
791
+ </Legends>
792
+ )}
793
+ </LineTemporalChartWrapper>
794
+ );
795
+ }
796
+
797
+ export { LineTemporalChart };