@centreon/ui 23.10.37 → 23.10.38

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 (386) hide show
  1. package/README.md +44 -14
  2. package/package.json +84 -26
  3. package/public/README.md +39 -0
  4. package/public/mockServiceWorker.js +303 -0
  5. package/src/@assets/README.md +5 -0
  6. package/src/@assets/brand/centreon-logo-one-line-dark.svg +1 -0
  7. package/src/@assets/brand/centreon-logo-one-line-light.svg +1 -0
  8. package/src/@assets/icons/downtime.icon.svg +1 -0
  9. package/src/@types/aria-attributes.d.ts +10 -0
  10. package/src/@types/data-attributes.d.ts +3 -0
  11. package/src/@types/globals.d.ts +9 -0
  12. package/src/@types/vite-env.d.ts +2 -0
  13. package/src/Button/Icon/index.tsx +1 -1
  14. package/src/Button/Save/index.stories.tsx +10 -5
  15. package/src/Button/Save/index.tsx +1 -1
  16. package/src/Checkbox/Checkbox.tsx +107 -0
  17. package/src/Checkbox/CheckboxGroup/index.stories.tsx +41 -0
  18. package/src/Checkbox/CheckboxGroup/index.tsx +66 -0
  19. package/src/Checkbox/index.stories.tsx +39 -0
  20. package/src/Checkbox/index.tsx +2 -0
  21. package/src/Dashboard/Dashboard.styles.ts +85 -0
  22. package/src/Dashboard/DashboardLayout.stories.tsx +104 -0
  23. package/src/Dashboard/Grid.tsx +70 -0
  24. package/src/Dashboard/Item.tsx +81 -0
  25. package/src/Dashboard/Layout.tsx +74 -0
  26. package/src/Dashboard/index.tsx +9 -0
  27. package/src/Dashboard/utils.ts +28 -0
  28. package/src/Dialog/Confirm/index.tsx +14 -4
  29. package/src/Dialog/Duplicate/index.test.tsx +1 -1
  30. package/src/Dialog/index.tsx +14 -2
  31. package/src/FallbackPage/FallbackPage.tsx +2 -2
  32. package/src/FileDropZone/index.tsx +1 -1
  33. package/src/Form/CollapsibleGroup.tsx +15 -5
  34. package/src/Form/{index.stories.tsx → Form.stories.tsx} +2 -3
  35. package/src/Form/Form.styles.ts +11 -0
  36. package/src/Form/{index.tsx → Form.tsx} +38 -16
  37. package/src/Form/FormButtons.tsx +2 -4
  38. package/src/Form/Inputs/Autocomplete.tsx +1 -1
  39. package/src/Form/Inputs/Checkbox.tsx +57 -0
  40. package/src/Form/Inputs/CheckboxGroup.tsx +76 -0
  41. package/src/Form/Inputs/Grid.tsx +4 -2
  42. package/src/Form/Inputs/Radio.tsx +1 -1
  43. package/src/Form/Inputs/Switch.tsx +1 -1
  44. package/src/Form/Inputs/Text.tsx +18 -7
  45. package/src/Form/Inputs/index.tsx +30 -12
  46. package/src/Form/Inputs/models.ts +17 -2
  47. package/src/Form/index.ts +1 -0
  48. package/src/Form/storiesData.tsx +50 -3
  49. package/src/Graph/BasicComponents/Axes/UnitLabel.tsx +20 -0
  50. package/src/Graph/BasicComponents/Axes/index.tsx +88 -0
  51. package/src/Graph/BasicComponents/Axes/models.ts +26 -0
  52. package/src/Graph/BasicComponents/Axes/useAxisY.ts +100 -0
  53. package/src/Graph/BasicComponents/Grids/index.tsx +20 -0
  54. package/src/Graph/BasicComponents/Lines/RegularLines/index.tsx +91 -0
  55. package/src/Graph/BasicComponents/Lines/RegularLines/useRegularLines.ts +15 -0
  56. package/src/Graph/BasicComponents/Lines/StackedLines/index.tsx +76 -0
  57. package/src/Graph/BasicComponents/Lines/StackedLines/useStackedLines.ts +39 -0
  58. package/src/Graph/BasicComponents/Lines/Threshold/BasicThreshold.tsx +51 -0
  59. package/src/Graph/BasicComponents/Lines/Threshold/Circle.tsx +43 -0
  60. package/src/Graph/BasicComponents/Lines/Threshold/ThresholdWithPatternLines.tsx +73 -0
  61. package/src/Graph/BasicComponents/Lines/Threshold/ThresholdWithVariation.tsx +59 -0
  62. package/src/Graph/BasicComponents/Lines/Threshold/helpers/index.ts +69 -0
  63. package/src/Graph/BasicComponents/Lines/Threshold/index.tsx +138 -0
  64. package/src/Graph/BasicComponents/Lines/Threshold/models.ts +105 -0
  65. package/src/Graph/BasicComponents/Lines/Threshold/useCoordinateCircle.ts +46 -0
  66. package/src/Graph/BasicComponents/Lines/Threshold/useScaleThreshold.ts +171 -0
  67. package/src/Graph/BasicComponents/Lines/index.tsx +180 -0
  68. package/src/Graph/BasicComponents/Lines/models.ts +42 -0
  69. package/src/Graph/BasicComponents/LoadingProgress.tsx +46 -0
  70. package/src/Graph/BasicComponents/useFilterLines.ts +60 -0
  71. package/src/Graph/Graph.styles.ts +45 -0
  72. package/src/Graph/Graph.tsx +217 -0
  73. package/src/Graph/Header/index.tsx +65 -0
  74. package/src/Graph/Icons/Downtime.tsx +9 -0
  75. package/src/Graph/InteractiveComponents/AnchorPoint/AnchorPoint.styles.ts +58 -0
  76. package/src/Graph/InteractiveComponents/AnchorPoint/GuidingLines.tsx +45 -0
  77. package/src/Graph/InteractiveComponents/AnchorPoint/RegularAnchorPoint.tsx +66 -0
  78. package/src/Graph/InteractiveComponents/AnchorPoint/StackedAnchorPoint.tsx +76 -0
  79. package/src/Graph/InteractiveComponents/AnchorPoint/TooltipAnchorPoint.tsx +70 -0
  80. package/src/Graph/InteractiveComponents/AnchorPoint/index.tsx +20 -0
  81. package/src/Graph/InteractiveComponents/AnchorPoint/models.ts +62 -0
  82. package/src/Graph/InteractiveComponents/AnchorPoint/useTickGraph.ts +94 -0
  83. package/src/Graph/InteractiveComponents/AnchorPoint/useTooltipAnchorPoint.ts +107 -0
  84. package/src/Graph/InteractiveComponents/Annotations/Annotation/Area.tsx +114 -0
  85. package/src/Graph/InteractiveComponents/Annotations/Annotation/Line.tsx +103 -0
  86. package/src/Graph/InteractiveComponents/Annotations/Annotation/index.tsx +81 -0
  87. package/src/Graph/InteractiveComponents/Annotations/Area/Downtime.tsx +27 -0
  88. package/src/Graph/InteractiveComponents/Annotations/EventAnnotations.tsx +61 -0
  89. package/src/Graph/InteractiveComponents/Annotations/Line/Acknowledgement.tsx +27 -0
  90. package/src/Graph/InteractiveComponents/Annotations/Line/Comments.tsx +25 -0
  91. package/src/Graph/InteractiveComponents/Annotations/annotationsAtoms.ts +183 -0
  92. package/src/Graph/InteractiveComponents/Annotations/index.tsx +49 -0
  93. package/src/Graph/InteractiveComponents/Annotations/models.ts +25 -0
  94. package/src/Graph/InteractiveComponents/Annotations/useAnnotation.ts +56 -0
  95. package/src/Graph/InteractiveComponents/Bar.tsx +21 -0
  96. package/src/Graph/InteractiveComponents/TimeShiftZones/TimeShiftIcon.tsx +62 -0
  97. package/src/Graph/InteractiveComponents/TimeShiftZones/TimeShiftZone.tsx +74 -0
  98. package/src/Graph/InteractiveComponents/TimeShiftZones/index.tsx +85 -0
  99. package/src/Graph/InteractiveComponents/TimeShiftZones/models.ts +12 -0
  100. package/src/Graph/InteractiveComponents/TimeShiftZones/useTimeShiftZones.ts +72 -0
  101. package/src/Graph/InteractiveComponents/Tooltip/index.tsx +59 -0
  102. package/src/Graph/InteractiveComponents/Tooltip/models.ts +9 -0
  103. package/src/Graph/InteractiveComponents/Tooltip/useGraphTooltip.ts +67 -0
  104. package/src/Graph/InteractiveComponents/ZoomPreview/index.tsx +38 -0
  105. package/src/Graph/InteractiveComponents/ZoomPreview/models.ts +9 -0
  106. package/src/Graph/InteractiveComponents/ZoomPreview/useZoomPreview.ts +107 -0
  107. package/src/Graph/InteractiveComponents/ZoomPreview/zoomPreviewAtoms.ts +3 -0
  108. package/src/Graph/InteractiveComponents/index.tsx +168 -0
  109. package/src/Graph/InteractiveComponents/interactionWithGraphAtoms.ts +51 -0
  110. package/src/Graph/Legend/InteractiveValue.tsx +22 -0
  111. package/src/Graph/Legend/Legend.styles.ts +71 -0
  112. package/src/Graph/Legend/LegendContent.tsx +27 -0
  113. package/src/Graph/Legend/LegendHeader.tsx +45 -0
  114. package/src/Graph/Legend/Marker.tsx +43 -0
  115. package/src/Graph/Legend/index.tsx +166 -0
  116. package/src/Graph/Legend/models.ts +11 -0
  117. package/src/Graph/Legend/useInteractiveValues.ts +86 -0
  118. package/src/Graph/Legend/useLegend.ts +114 -0
  119. package/src/Graph/LoadingSkeleton.tsx +44 -0
  120. package/src/Graph/common/index.ts +35 -0
  121. package/src/Graph/graphAtoms.ts +6 -0
  122. package/src/Graph/helpers/doc.ts +560 -0
  123. package/src/Graph/helpers/index.ts +58 -0
  124. package/src/Graph/index.stories.tsx +372 -0
  125. package/src/Graph/index.tsx +90 -0
  126. package/src/Graph/mockedData/annotationData.json +326 -0
  127. package/src/Graph/mockedData/exclusionPeriodFirstPeriod.json +588 -0
  128. package/src/Graph/mockedData/exclusionPeriodSecondPeriod.json +588 -0
  129. package/src/Graph/mockedData/exclusionPeriodThirdPeriod.json +581 -0
  130. package/src/Graph/mockedData/lastDay.json +1326 -0
  131. package/src/Graph/mockedData/lastDayAreaStack.json +3106 -0
  132. package/src/Graph/mockedData/lastDayForward.json +1338 -0
  133. package/src/Graph/mockedData/lastDayThreshold.json +2352 -0
  134. package/src/Graph/mockedData/lastMonth.json +1674 -0
  135. package/src/Graph/mockedData/lastWeek.json +2202 -0
  136. package/src/Graph/mockedData/zoomPreview.json +742 -0
  137. package/src/Graph/models.ts +150 -0
  138. package/src/Graph/timeSeries/index.test.ts +506 -0
  139. package/src/Graph/timeSeries/index.ts +512 -0
  140. package/src/Graph/timeSeries/models.ts +120 -0
  141. package/src/Graph/translatedLabels.ts +9 -0
  142. package/src/Graph/useGraphData.ts +47 -0
  143. package/src/Graph/useGraphIntersection.ts +36 -0
  144. package/src/Home.stories.mdx +1 -84
  145. package/src/Image/index.stories.tsx +2 -2
  146. package/src/Image/index.test.tsx +3 -3
  147. package/src/InputField/Search/PersistentTooltip.tsx +7 -2
  148. package/src/InputField/Select/Autocomplete/Connected/Multi/MultiConnectedAutocompleteField.cypress.spec.tsx +161 -0
  149. package/src/InputField/Select/Autocomplete/Connected/Multi/index.test.tsx +3 -22
  150. package/src/InputField/Select/Autocomplete/Connected/Multi/utils/index.ts +22 -0
  151. package/src/InputField/Select/Autocomplete/Connected/index.stories.tsx +0 -3
  152. package/src/InputField/Select/Autocomplete/Connected/index.test.tsx +1 -1
  153. package/src/InputField/Select/Autocomplete/Connected/index.tsx +16 -3
  154. package/src/InputField/Select/Autocomplete/Draggable/index.stories.tsx +0 -2
  155. package/src/InputField/Select/Autocomplete/index.stories.tsx +1 -10
  156. package/src/InputField/Select/Autocomplete/index.tsx +1 -1
  157. package/src/InputField/Select/index.tsx +1 -1
  158. package/src/InputField/Text/index.tsx +4 -2
  159. package/src/Listing/ActionBar/index.tsx +1 -1
  160. package/src/Listing/Cell/DataCell.styles.ts +24 -0
  161. package/src/Listing/Cell/DataCell.tsx +26 -63
  162. package/src/Listing/Cell/index.tsx +1 -1
  163. package/src/Listing/EmptyResult/EmptyResult.tsx +13 -0
  164. package/src/Listing/Header/Cell/ListingHeaderCell.styles.ts +71 -0
  165. package/src/Listing/Header/{SortableCell/Content.tsx → Cell/ListingHeaderCell.tsx} +16 -81
  166. package/src/Listing/Header/Cell/SelectActionListingHeaderCell.styles.ts +26 -0
  167. package/src/Listing/Header/Cell/SelectActionListingHeaderCell.tsx +70 -0
  168. package/src/Listing/Header/ListingHeader.styles.ts +16 -0
  169. package/src/Listing/Header/{index.tsx → ListingHeader.tsx} +25 -102
  170. package/src/Listing/Header/_internals/DraggableIconButton.tsx +35 -0
  171. package/src/Listing/Header/{PredefinedSelectionList.tsx → _internals/PredefinedSelectionList.tsx} +1 -1
  172. package/src/Listing/Header/index.ts +1 -0
  173. package/src/Listing/Listing.styles.ts +76 -0
  174. package/src/Listing/Row/EmptyRow.styles.ts +14 -0
  175. package/src/Listing/Row/EmptyRow.tsx +30 -0
  176. package/src/Listing/{Row.tsx → Row/Row.tsx} +4 -6
  177. package/src/Listing/Row/SkeletonLoaderRows.tsx +23 -0
  178. package/src/Listing/index.stories.tsx +34 -4
  179. package/src/Listing/index.test.tsx +1 -1
  180. package/src/Listing/index.tsx +21 -128
  181. package/src/Listing/useStyleTable.ts +1 -1
  182. package/src/ListingPage/index.tsx +1 -1
  183. package/src/Logo/CentreonLogo.tsx +2 -2
  184. package/src/Module/LicensedModule/LicenseCheck/index.stories.tsx +0 -2
  185. package/src/Panel/Memoized.tsx +1 -1
  186. package/src/Panel/Section/index.test.tsx +1 -1
  187. package/src/Panel/Section/index.tsx +1 -1
  188. package/src/Panel/index.tsx +6 -4
  189. package/src/RichTextEditor/ContentEditable.tsx +27 -7
  190. package/src/RichTextEditor/RichTextEditor.cypress.spec.tsx +204 -0
  191. package/src/RichTextEditor/RichTextEditor.tsx +86 -45
  192. package/src/RichTextEditor/plugins/FloatingLinkEditorPlugin.tsx +1 -0
  193. package/src/Snackbar/index.tsx +14 -4
  194. package/src/Snackbar/useSnackbar.tsx +5 -1
  195. package/src/SortableItems/SortableItem.tsx +1 -1
  196. package/src/ThemeProvider/index.tsx +35 -5
  197. package/src/ThemeProvider/palettes.ts +389 -201
  198. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.styles.ts +51 -0
  199. package/src/TimePeriods/CustomTimePeriod/CompactCustomTimePeriod.tsx +95 -0
  200. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/ErrorText.tsx +14 -0
  201. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/PickersStartEndDate.tsx +163 -0
  202. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/index.tsx +76 -0
  203. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/models.ts +61 -0
  204. package/src/TimePeriods/CustomTimePeriod/PopoverCustomTimePeriod/usePickersStartEndDate.ts +82 -0
  205. package/src/TimePeriods/CustomTimePeriod/index.tsx +66 -0
  206. package/src/TimePeriods/DateTimePickerInput.tsx +49 -0
  207. package/src/TimePeriods/ResolutionTimePeriod.cypress.spec.tsx +65 -0
  208. package/src/TimePeriods/SelectedTimePeriod.tsx +102 -0
  209. package/src/TimePeriods/TimePeriods.cypress.spec.tsx +510 -0
  210. package/src/TimePeriods/TimePeriods.styles.ts +22 -0
  211. package/src/TimePeriods/helpers/index.ts +26 -0
  212. package/src/TimePeriods/index.stories.tsx +98 -0
  213. package/src/TimePeriods/index.tsx +78 -0
  214. package/src/TimePeriods/mockedData.ts +12 -0
  215. package/src/TimePeriods/models.ts +97 -0
  216. package/src/TimePeriods/timePeriodsAtoms.ts +102 -0
  217. package/src/TimePeriods/translatedLabels.ts +9 -0
  218. package/src/TimePeriods/useSortTimePeriods.ts +31 -0
  219. package/src/TimePeriods/useTimePeriod.ts +49 -0
  220. package/src/Typography/FluidTypography/index.stories.tsx +63 -0
  221. package/src/Typography/FluidTypography/index.tsx +51 -0
  222. package/src/Typography/FluidTypography/useFluidResizeObserver.ts +56 -0
  223. package/src/Typography/{index.stories.tsx → Typography.stories.tsx} +5 -5
  224. package/src/WallpaperPage/index.stories.tsx +1 -1
  225. package/src/Wizard/ActionsBar.test.tsx +1 -1
  226. package/src/Wizard/index.stories.tsx +5 -18
  227. package/src/Wizard/index.test.tsx +1 -1
  228. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-dashboard-normal-1-snap.png +0 -0
  229. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-dashboard-with-item-header-1-snap.png +0 -0
  230. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-dashboard-with-many-panels-1-snap.png +0 -0
  231. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-fluid-typography-basic-1-snap.png +0 -0
  232. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-fluid-typography-with-20-px-height-1-snap.png +0 -0
  233. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-fluid-typography-with-200-px-width-1-snap.png +0 -0
  234. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-fluid-typography-with-heading-5-variant-1-snap.png +0 -0
  235. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-fluid-typography-with-long-text-1-snap.png +0 -0
  236. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-listing-as-empty-state-1-snap.png +0 -0
  237. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-listing-loading-with-no-data-1-snap.png +0 -0
  238. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-listing-with-editable-and-sortable-columns-1-snap.png +0 -0
  239. package/src/api/TestQueryProvider.tsx +2 -1
  240. package/src/api/customFetch.ts +10 -0
  241. package/src/api/useFetchQuery/index.ts +8 -7
  242. package/src/api/useMutationQuery/index.ts +18 -13
  243. package/src/api/useRequest/index.ts +9 -6
  244. package/src/base/tokens/README.md +3 -0
  245. package/src/base/tokens/source/$metadata.json +5 -0
  246. package/src/base/tokens/source/base.json +142 -0
  247. package/src/base/tokens/themes/base.tokens.d.ts +38 -0
  248. package/src/base/tokens/themes/base.tokens.json +695 -0
  249. package/src/base/tokens/themes/base.tokens.ts +38 -0
  250. package/src/base/tokens/themes/ui-dark.tokens.d.ts +38 -0
  251. package/src/base/tokens/themes/ui-dark.tokens.json +695 -0
  252. package/src/base/tokens/themes/ui-dark.tokens.ts +38 -0
  253. package/src/base/tokens/themes/ui-light.tokens.d.ts +38 -0
  254. package/src/base/tokens/themes/ui-light.tokens.json +695 -0
  255. package/src/base/tokens/themes/ui-light.tokens.ts +38 -0
  256. package/src/components/Button/Button.stories.tsx +34 -0
  257. package/src/components/Button/Button.styles.ts +44 -0
  258. package/src/components/Button/Button.tsx +78 -0
  259. package/src/components/Button/Icon/IconButton.stories.tsx +18 -0
  260. package/src/components/Button/Icon/IconButton.styles.ts +14 -0
  261. package/src/components/Button/Icon/IconButton.tsx +58 -0
  262. package/src/components/Button/Icon/index.tsx +1 -0
  263. package/src/components/Button/index.ts +2 -0
  264. package/src/components/DataTable/DataTable.stories.tsx +51 -0
  265. package/src/components/DataTable/DataTable.styles.ts +27 -0
  266. package/src/components/DataTable/DataTable.tsx +35 -0
  267. package/src/components/DataTable/EmptyState/DataTableEmptyState.stories.tsx +21 -0
  268. package/src/components/DataTable/EmptyState/DataTableEmptyState.styles.ts +26 -0
  269. package/src/components/DataTable/EmptyState/DataTableEmptyState.tsx +53 -0
  270. package/src/components/DataTable/Item/DataTableItem.stories.tsx +25 -0
  271. package/src/components/DataTable/Item/DataTableItem.styles.ts +39 -0
  272. package/src/components/DataTable/Item/DataTableItem.tsx +102 -0
  273. package/src/components/DataTable/Item/DataTableItemSkeleton.tsx +13 -0
  274. package/src/components/DataTable/index.ts +10 -0
  275. package/src/components/Form/Dashboard/Dashboard.resource.ts +4 -0
  276. package/src/components/Form/Dashboard/DashboardForm.stories.ts +39 -0
  277. package/src/components/Form/Dashboard/DashboardForm.styles.ts +19 -0
  278. package/src/components/Form/Dashboard/DashboardForm.tsx +104 -0
  279. package/src/components/Form/Dashboard/DashboardFormActions.tsx +56 -0
  280. package/src/components/Form/Dashboard/index.ts +2 -0
  281. package/src/components/Form/Dashboard/translatedLabels.ts +6 -0
  282. package/src/components/Form/Form.models.ts +1 -0
  283. package/src/components/Form/index.ts +2 -0
  284. package/src/components/Header/Header.styles.ts +0 -0
  285. package/src/components/Header/PageHeader/PageHeader.stories.tsx +88 -0
  286. package/src/components/Header/PageHeader/PageHeader.styles.ts +99 -0
  287. package/src/components/Header/PageHeader/PageHeader.tsx +15 -0
  288. package/src/components/Header/PageHeader/PageHeaderActions.tsx +17 -0
  289. package/src/components/Header/PageHeader/PageHeaderMain.tsx +15 -0
  290. package/src/components/Header/PageHeader/PageHeaderMenu.tsx +15 -0
  291. package/src/components/Header/PageHeader/PageHeaderTitle.tsx +47 -0
  292. package/src/components/Header/PageHeader/index.ts +12 -0
  293. package/src/components/Header/index.ts +1 -0
  294. package/src/components/Icon/Icon.styles.ts +0 -0
  295. package/src/components/Icon/Icon.tsx +2 -0
  296. package/src/components/Icon/index.ts +0 -0
  297. package/src/components/Layout/AreaIndicator.styles.ts +33 -0
  298. package/src/components/Layout/AreaIndicator.tsx +35 -0
  299. package/src/components/Layout/PageLayout/PageLayout.stories.tsx +81 -0
  300. package/src/components/Layout/PageLayout/PageLayout.styles.ts +40 -0
  301. package/src/components/Layout/PageLayout/PageLayout.tsx +21 -0
  302. package/src/components/Layout/PageLayout/PageLayoutActions.tsx +15 -0
  303. package/src/components/Layout/PageLayout/PageLayoutBody.tsx +24 -0
  304. package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +15 -0
  305. package/src/components/Layout/PageLayout/index.ts +10 -0
  306. package/src/components/Layout/index.ts +1 -0
  307. package/src/components/Menu/Button/MenuButton.stories.tsx +16 -0
  308. package/src/components/Menu/Button/MenuButton.styles.ts +27 -0
  309. package/src/components/Menu/Button/MenuButton.tsx +62 -0
  310. package/src/components/Menu/Button/index.ts +1 -0
  311. package/src/components/Menu/Menu.stories.tsx +71 -0
  312. package/src/components/Menu/Menu.styles.ts +70 -0
  313. package/src/components/Menu/Menu.tsx +25 -0
  314. package/src/components/Menu/MenuDivider.tsx +13 -0
  315. package/src/components/Menu/MenuItem.tsx +36 -0
  316. package/src/components/Menu/MenuItems.tsx +35 -0
  317. package/src/components/Menu/index.ts +12 -0
  318. package/src/components/Menu/useMenu.tsx +79 -0
  319. package/src/components/Modal/Modal.stories.tsx +111 -0
  320. package/src/components/Modal/Modal.styles.ts +55 -0
  321. package/src/components/Modal/Modal.tsx +59 -0
  322. package/src/components/Modal/ModalActions.tsx +59 -0
  323. package/src/components/Modal/ModalBody.tsx +15 -0
  324. package/src/components/Modal/ModalHeader.tsx +21 -0
  325. package/src/components/Modal/index.ts +12 -0
  326. package/src/components/README.md +3 -0
  327. package/src/components/Tooltip/TextOverflowTooltip/TextOverflowTooltip.stories.tsx +70 -0
  328. package/src/components/Tooltip/TextOverflowTooltip/TextOverflowTooltip.styles.ts +5 -0
  329. package/src/components/Tooltip/TextOverflowTooltip/TextOverflowTooltip.tsx +115 -0
  330. package/src/components/Tooltip/TextOverflowTooltip/index.tsx +1 -0
  331. package/src/components/Tooltip/Tooltip.stories.tsx +41 -0
  332. package/src/components/Tooltip/Tooltip.styles.ts +5 -0
  333. package/src/components/Tooltip/Tooltip.tsx +46 -0
  334. package/src/components/Tooltip/index.ts +1 -0
  335. package/src/components/index.ts +8 -0
  336. package/src/index.ts +7 -19
  337. package/src/screens/dashboard/DashboardsDetail.stories.tsx +108 -0
  338. package/src/screens/dashboard/DashboardsOverview.stories.tsx +281 -0
  339. package/src/styles/tokens/themes/_ui-dark.tokens.json +695 -0
  340. package/src/styles/tokens/themes/_ui-light.tokens.json +695 -0
  341. package/src/utils/docsURL.ts +31 -0
  342. package/src/utils/getNormalizedId.ts +1 -3
  343. package/src/utils/index.ts +18 -0
  344. package/src/utils/panelSize.ts +15 -0
  345. package/src/utils/sanitizedHTML.ts +18 -0
  346. package/src/utils/useCopyToClipboard.ts +2 -3
  347. package/src/utils/useDateTimePickerAdapter.ts +309 -0
  348. package/src/utils/useDebounce.ts +1 -3
  349. package/src/utils/useDeepCallback.ts +1 -3
  350. package/src/utils/useDeepMemo.ts +1 -3
  351. package/src/utils/useIntersectionObserver.ts +5 -5
  352. package/src/utils/useKeyObserver.tsx +1 -3
  353. package/src/utils/useLocaleDateTimeFormat/index.test.tsx +1 -1
  354. package/src/utils/useLocaleDateTimeFormat/index.ts +1 -2
  355. package/src/utils/useLocaleDateTimeFormat/localeFallback.test.tsx +1 -1
  356. package/src/utils/useMemoComponent.ts +1 -1
  357. package/src/utils/useResizeObserver.ts +6 -0
  358. package/{setupTests.js → test/setupTests.js} +1 -1
  359. package/{src → test}/testRenderer.tsx +1 -1
  360. package/.storybook/main.js +0 -82
  361. package/.storybook/preview.tsx +0 -21
  362. package/jest.config.js +0 -20
  363. package/src/Listing/Header/SortableCell/DraggableIcon.tsx +0 -41
  364. package/src/Listing/Skeleton.tsx +0 -11
  365. package/src/storyshots.test.js +0 -52
  366. package/testRunner.js +0 -36
  367. package/tsconfig.json +0 -29
  368. package/types/declarations.d.ts +0 -9
  369. /package/{assets → public/brand}/centreon-logo-one-line-dark.svg +0 -0
  370. /package/{assets → public/brand}/centreon-logo-one-line-light.svg +0 -0
  371. /package/{fonts/fonts-generated → public/fonts}/roboto-bold-webfont.ttf +0 -0
  372. /package/{fonts/fonts-generated → public/fonts}/roboto-bold-webfont.woff +0 -0
  373. /package/{fonts/fonts-generated → public/fonts}/roboto-bold-webfont.woff2 +0 -0
  374. /package/{fonts/fonts-generated → public/fonts}/roboto-light-webfont.ttf +0 -0
  375. /package/{fonts/fonts-generated → public/fonts}/roboto-light-webfont.woff +0 -0
  376. /package/{fonts/fonts-generated → public/fonts}/roboto-light-webfont.woff2 +0 -0
  377. /package/{fonts/fonts-generated → public/fonts}/roboto-medium-webfont.ttf +0 -0
  378. /package/{fonts/fonts-generated → public/fonts}/roboto-medium-webfont.woff +0 -0
  379. /package/{fonts/fonts-generated → public/fonts}/roboto-medium-webfont.woff2 +0 -0
  380. /package/{fonts/fonts-generated → public/fonts}/roboto-regular-webfont.ttf +0 -0
  381. /package/{fonts/fonts-generated → public/fonts}/roboto-regular-webfont.woff +0 -0
  382. /package/{fonts/fonts-generated → public/fonts}/roboto-regular-webfont.woff2 +0 -0
  383. /package/{assets → src/@assets/images}/not-authorized-template-background-dark.svg +0 -0
  384. /package/{assets → src/@assets/images}/not-authorized-template-background-light.svg +0 -0
  385. /package/src/Listing/Header/{Label.tsx → _internals/Label.tsx} +0 -0
  386. /package/src/Typography/{index.tsx → story.utils.tsx} +0 -0
@@ -0,0 +1,31 @@
1
+ interface OnPremDocsURL {
2
+ majorVersion: string;
3
+ minorVersion: string;
4
+ }
5
+
6
+ interface DocsURL {
7
+ isCloudPlatform: boolean;
8
+ majorVersion: string;
9
+ minorVersion: string;
10
+ }
11
+
12
+ export const getOnPremDocsURL = ({
13
+ majorVersion,
14
+ minorVersion
15
+ }: OnPremDocsURL): string => {
16
+ return `https://docs.centreon.com/docs/${majorVersion}.${minorVersion}/alerts-notifications/resources-status/#search-bar`;
17
+ };
18
+ export const cloudDocsURL =
19
+ 'https://docs.centreon.com/cloud/alerts-notifications/resources-status/#search-bar';
20
+
21
+ export const getDocsURL = ({
22
+ isCloudPlatform,
23
+ majorVersion,
24
+ minorVersion
25
+ }: DocsURL): string => {
26
+ if (isCloudPlatform) {
27
+ return cloudDocsURL;
28
+ }
29
+
30
+ return getOnPremDocsURL({ majorVersion, minorVersion });
31
+ };
@@ -1,5 +1,3 @@
1
- const getNormalizedId = (idToNormalized: string): string => {
1
+ export const getNormalizedId = (idToNormalized: string): string => {
2
2
  return idToNormalized?.replace(/[^A-Z0-9]+/gi, '');
3
3
  };
4
-
5
- export default getNormalizedId;
@@ -0,0 +1,18 @@
1
+ export * from './useLocaleDateTimeFormat';
2
+ export * from './getNormalizedId';
3
+ export * from './statuses';
4
+ export * from './typedMemo';
5
+ export * from './useCopyToClipboard';
6
+ export * from './useDateTimePickerAdapter';
7
+ export * from './useDebounce';
8
+ export * from './useDeepCallback';
9
+ export * from './useDeepMemo';
10
+ export * from './useIntersectionObserver';
11
+ export * from './useKeyObserver';
12
+ export * from './useLoadImage';
13
+ export * from './useMemoComponent';
14
+ export * from './useThemeMode';
15
+ export * from './useViewportIntersection';
16
+ export * from './panelSize';
17
+ export * from './sanitizedHTML';
18
+ export * from './docsURL';
@@ -0,0 +1,15 @@
1
+ import { gt } from 'ramda';
2
+
3
+ export enum PanelSize {
4
+ Small = 550,
5
+ Medium = 675,
6
+ Large = 800
7
+ }
8
+
9
+ interface PanelSizeParams {
10
+ currentSize: number;
11
+ }
12
+
13
+ export const togglePanelSize = ({ currentSize }: PanelSizeParams): number => {
14
+ return gt(currentSize, PanelSize.Medium) ? PanelSize.Small : PanelSize.Large;
15
+ };
@@ -0,0 +1,18 @@
1
+ import sanitizeHtml, { IOptions } from 'sanitize-html';
2
+ import ReactHtmlParser from 'react-html-parser';
3
+
4
+ interface UseSanitizedHTMLProps {
5
+ initialContent: string;
6
+ sanitizeOptions?: IOptions;
7
+ }
8
+
9
+ const sanitizedHTML = ({
10
+ initialContent,
11
+ sanitizeOptions = {}
12
+ }: UseSanitizedHTMLProps): JSX.Element => {
13
+ const sanitizedContent = sanitizeHtml(initialContent, sanitizeOptions);
14
+
15
+ return ReactHtmlParser(sanitizedContent);
16
+ };
17
+
18
+ export { sanitizedHTML };
@@ -10,7 +10,8 @@ interface Props {
10
10
  errorMessage: string;
11
11
  successMessage: string;
12
12
  }
13
- const useCopyToClipboard = ({
13
+
14
+ export const useCopyToClipboard = ({
14
15
  successMessage,
15
16
  errorMessage
16
17
  }: Props): Result => {
@@ -53,5 +54,3 @@ const useCopyToClipboard = ({
53
54
 
54
55
  return { copy };
55
56
  };
56
-
57
- export default useCopyToClipboard;
@@ -0,0 +1,309 @@
1
+ /* eslint-disable class-methods-use-this */
2
+ import { useCallback } from 'react';
3
+
4
+ import dayjs from 'dayjs';
5
+ import { useAtomValue } from 'jotai';
6
+ import { equals, isNil, not } from 'ramda';
7
+
8
+ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
9
+
10
+ import { useLocaleDateTimeFormat } from '@centreon/ui';
11
+ import { userAtom } from '@centreon/ui-context';
12
+
13
+ interface GetDestinationAndConfiguredTimezoneOffsetProps {
14
+ endTimezone?: string;
15
+ startTimezone?: string;
16
+ }
17
+
18
+ interface UseDateTimePickerAdapterProps {
19
+ Adapter;
20
+ desktopPickerMediaQuery: string;
21
+ }
22
+
23
+ enum DSTState {
24
+ SUMMER,
25
+ WINTER,
26
+ NODST
27
+ }
28
+
29
+ interface ToTimezonedDateProps {
30
+ date: Date;
31
+ timeZone?: string;
32
+ }
33
+
34
+ interface GetDSTStateProps {
35
+ date: dayjs.Dayjs;
36
+ timezoneToUse?: string;
37
+ }
38
+
39
+ export const useDateTimePickerAdapter = (): UseDateTimePickerAdapterProps => {
40
+ const { timezone, locale } = useAtomValue(userAtom);
41
+ const { format } = useLocaleDateTimeFormat();
42
+
43
+ const desktopPickerMediaQuery =
44
+ '@media (pointer: fine) or (min-width: 1024px)';
45
+
46
+ const toTimezonedDate = ({
47
+ date,
48
+ timeZone = undefined
49
+ }: ToTimezonedDateProps): Date => {
50
+ if (isNil(timeZone)) {
51
+ return new Date(date.toLocaleString('en-US'));
52
+ }
53
+
54
+ return new Date(date.toLocaleString('en-US', { timeZone }));
55
+ };
56
+
57
+ const getDestinationAndConfiguredTimezoneOffset = ({
58
+ startTimezone = undefined,
59
+ endTimezone = timezone
60
+ }: GetDestinationAndConfiguredTimezoneOffsetProps): number => {
61
+ const now = new Date();
62
+ const currentTimezoneDate = toTimezonedDate({
63
+ date: now,
64
+ timeZone: startTimezone
65
+ });
66
+ const destinationTimezoneDate = toTimezonedDate({
67
+ date: now,
68
+ timeZone: endTimezone
69
+ });
70
+
71
+ return Math.floor(
72
+ (currentTimezoneDate.getTime() - destinationTimezoneDate.getTime()) /
73
+ 60 /
74
+ 60 /
75
+ 1000
76
+ );
77
+ };
78
+
79
+ const getDSTState = useCallback(
80
+ ({ date, timezoneToUse }: GetDSTStateProps): DSTState => {
81
+ const hasNoTimezone = isNil(timezoneToUse);
82
+ const currentYear = toTimezonedDate({
83
+ date: new Date(),
84
+ timeZone: timezoneToUse
85
+ }).getFullYear();
86
+
87
+ const january = hasNoTimezone
88
+ ? dayjs(new Date(currentYear, 0, 1)).utcOffset()
89
+ : dayjs(new Date(currentYear, 0, 1)).tz(timezoneToUse).utcOffset();
90
+ const july = hasNoTimezone
91
+ ? dayjs(new Date(currentYear, 6, 1)).utcOffset()
92
+ : dayjs(new Date(currentYear, 6, 1)).tz(timezoneToUse).utcOffset();
93
+
94
+ if (equals(january, july)) {
95
+ return DSTState.NODST;
96
+ }
97
+
98
+ return july === date.tz().utcOffset() ? DSTState.SUMMER : DSTState.WINTER;
99
+ },
100
+ [timezone]
101
+ );
102
+
103
+ const getDSTStateForCurrentTimezone = useCallback(
104
+ (date: dayjs.Dayjs): DSTState => {
105
+ return getDSTState({ date });
106
+ },
107
+ []
108
+ );
109
+
110
+ interface Chunk {
111
+ array: Array<unknown>;
112
+ size: number;
113
+ }
114
+ class Adapter extends AdapterDayjs {
115
+ public formatByString = (value, formatKey: string): string => {
116
+ return format({
117
+ date: value.tz(timezone).toDate(),
118
+ formatString: formatKey
119
+ });
120
+ };
121
+
122
+ public format = (date: dayjs.Dayjs, formatKey: string): string => {
123
+ return this.formatByString(
124
+ date.tz(timezone, true),
125
+ this.formats[formatKey]
126
+ );
127
+ };
128
+
129
+ public startOfWeek = (date: dayjs.Dayjs): dayjs.Dayjs => {
130
+ if (date.tz(timezone).isUTC()) {
131
+ return date.tz(timezone).startOf('week').utc();
132
+ }
133
+
134
+ return date.tz(timezone).startOf('week');
135
+ };
136
+
137
+ public setMinutes = (date: dayjs.Dayjs, count: number): dayjs.Dayjs => {
138
+ return date.minute(count);
139
+ };
140
+
141
+ public setHours = (date: dayjs.Dayjs, count: number): dayjs.Dayjs => {
142
+ return date.hour(count);
143
+ };
144
+
145
+ public isSameDay = (date: dayjs.Dayjs, comparing: dayjs.Dayjs): boolean => {
146
+ const isSameYearAndMonth = this.isSameYear(date, comparing)
147
+ ? this.isSameMonth(date, comparing)
148
+ : false;
149
+
150
+ return (
151
+ isSameYearAndMonth &&
152
+ date.tz(timezone).isSame(comparing.tz(timezone), 'day')
153
+ );
154
+ };
155
+
156
+ public startOfDay = (date: dayjs.Dayjs): dayjs.Dayjs => {
157
+ return date.tz(timezone).startOf('day') as dayjs.Dayjs;
158
+ };
159
+
160
+ public endOfDay = (date: dayjs.Dayjs): dayjs.Dayjs => {
161
+ return date.tz(timezone).endOf('day') as dayjs.Dayjs;
162
+ };
163
+
164
+ public startOfMonth = (date: dayjs.Dayjs): dayjs.Dayjs => {
165
+ if (date.tz(timezone).isUTC()) {
166
+ return date.tz(timezone).utc();
167
+ }
168
+
169
+ return date.tz(timezone);
170
+ };
171
+
172
+ public endOfMonth = (date: dayjs.Dayjs): dayjs.Dayjs => {
173
+ return date.tz(timezone).endOf('month') as dayjs.Dayjs;
174
+ };
175
+
176
+ public isSameMonth = (
177
+ date: dayjs.Dayjs,
178
+ comparing: dayjs.Dayjs
179
+ ): boolean => {
180
+ return date.tz(timezone).isSame(comparing.tz(timezone), 'month');
181
+ };
182
+
183
+ public getMonth = (date: dayjs.Dayjs): number => {
184
+ return date.tz(timezone).month();
185
+ };
186
+
187
+ public isAfter = (date: dayjs.Dayjs, value: dayjs.Dayjs): boolean => {
188
+ return date.isAfter(value.endOf('month'));
189
+ };
190
+
191
+ public isBefore = (date: dayjs.Dayjs, value: dayjs.Dayjs): boolean => {
192
+ return date.isBefore(value.startOf('month'));
193
+ };
194
+
195
+ public getDaysInMonth = (date: dayjs.Dayjs): number => {
196
+ return date.tz(timezone).daysInMonth();
197
+ };
198
+
199
+ public getWeekdays = (): Array<string> => {
200
+ const start = dayjs().locale(locale).tz(timezone).startOf('week');
201
+
202
+ return [0, 1, 2, 3, 4, 5, 6].map((diff) =>
203
+ this.formatByString(start.add(diff, 'day'), 'dd')
204
+ );
205
+ };
206
+
207
+ public getChunkFromArray = ({ array, size }: Chunk): Array<unknown> => {
208
+ if (!array.length) {
209
+ return [];
210
+ }
211
+ const head = array.slice(0, size);
212
+ const tail = array.slice(size);
213
+
214
+ return [head, ...this.getChunkFromArray({ array: tail, size })];
215
+ };
216
+
217
+ public getWeekArray = (date: dayjs.Dayjs): Array<Array<dayjs.Dayjs>> => {
218
+ const isMorning = equals(dayjs().tz(timezone).format('a'), 'am');
219
+ const startOfWeek = date.tz(timezone).startOf('month').startOf('week');
220
+ const endOfWeek = date.tz(timezone).endOf('month').endOf('week');
221
+ const start = startOfWeek.startOf('day');
222
+ const end = endOfWeek.endOf('day');
223
+ const customStart = isMorning
224
+ ? startOfWeek.startOf('day')
225
+ : startOfWeek.startOf('day');
226
+ const customEnd = isMorning
227
+ ? endOfWeek.startOf('day')
228
+ : endOfWeek.startOf('day');
229
+ const currentStart = start.isUTC()
230
+ ? start.tz(timezone, true)
231
+ : customStart;
232
+ const currentEnd = end.isUTC() ? end.tz(timezone, true) : customEnd;
233
+ const numberOfDaysInCurrentMonth = currentEnd.diff(
234
+ currentStart,
235
+ 'd',
236
+ true
237
+ );
238
+ const daysOfMonthWithTimezone = [
239
+ ...Array(Math.round(numberOfDaysInCurrentMonth)).keys()
240
+ ].reduce(
241
+ (acc, _, currentIndex) => {
242
+ if (acc[currentIndex].isUTC()) {
243
+ const newCurrent = acc[currentIndex]
244
+ .utc()
245
+ .add(1, 'day')
246
+ .tz(timezone, true);
247
+
248
+ return [...acc, newCurrent];
249
+ }
250
+ const newCurrent = acc[currentIndex].add(1, 'day');
251
+
252
+ return [...acc, newCurrent];
253
+ },
254
+ [currentStart]
255
+ );
256
+ const weeksArray = this.getChunkFromArray({
257
+ array: daysOfMonthWithTimezone,
258
+ size: 7
259
+ });
260
+
261
+ return weeksArray as Array<Array<dayjs.Dayjs>>;
262
+ };
263
+
264
+ public mergeDateAndTime = (
265
+ date: dayjs.Dayjs,
266
+ time: dayjs.Dayjs
267
+ ): dayjs.Dayjs => {
268
+ const dateWithTimezone = date.tz(timezone).startOf('day');
269
+ const timeWithTimezone = time.tz(timezone);
270
+ const dateDSTState = getDSTState({
271
+ date: dateWithTimezone,
272
+ timezoneToUse: timezone
273
+ });
274
+ const dateDSTStateWithCurrentTimezone =
275
+ getDSTStateForCurrentTimezone(date);
276
+
277
+ if (equals(dateDSTStateWithCurrentTimezone, DSTState.WINTER)) {
278
+ return dateWithTimezone
279
+ .add(
280
+ timeWithTimezone.hour() -
281
+ getDestinationAndConfiguredTimezoneOffset({
282
+ endTimezone: 'UTC',
283
+ startTimezone: dayjs.tz.guess()
284
+ }),
285
+ 'hour'
286
+ )
287
+ .add(timeWithTimezone.minute(), 'minute')
288
+ .add(timeWithTimezone.second(), 'second');
289
+ }
290
+
291
+ if (not(equals(dateDSTState, DSTState.SUMMER))) {
292
+ return dateWithTimezone
293
+ .add(timeWithTimezone.hour(), 'hour')
294
+ .add(timeWithTimezone.minute(), 'minute')
295
+ .add(timeWithTimezone.second(), 'second');
296
+ }
297
+
298
+ return dateWithTimezone
299
+ .hour(timeWithTimezone.hour())
300
+ .minute(timeWithTimezone.minute())
301
+ .second(timeWithTimezone.second());
302
+ };
303
+ }
304
+
305
+ return {
306
+ Adapter,
307
+ desktopPickerMediaQuery
308
+ };
309
+ };
@@ -6,7 +6,7 @@ interface Props {
6
6
  wait: number;
7
7
  }
8
8
 
9
- const useDebounce = ({
9
+ export const useDebounce = ({
10
10
  functionToDebounce,
11
11
  wait,
12
12
  memoProps = []
@@ -23,5 +23,3 @@ const useDebounce = ({
23
23
  }, wait);
24
24
  }, memoProps);
25
25
  };
26
-
27
- export default useDebounce;
@@ -7,11 +7,9 @@ interface UseDeepCallback<TParameters, TReturn, TMemoProps> {
7
7
  deps: Array<TMemoProps>;
8
8
  }
9
9
 
10
- const useDeepCallback = <TParameters, TReturn, TMemoProps>({
10
+ export const useDeepCallback = <TParameters, TReturn, TMemoProps>({
11
11
  deps,
12
12
  callback
13
13
  }: UseDeepCallback<TParameters, TReturn, TMemoProps>): ((
14
14
  props: TParameters
15
15
  ) => TReturn) => useCallback((props) => callback(props), useDeepCompare(deps));
16
-
17
- export default useDeepCallback;
@@ -7,10 +7,8 @@ interface UseDeepMemo<TVariable, TMemoProps> {
7
7
  variable: TVariable;
8
8
  }
9
9
 
10
- const useDeepMemo = <TVariable, TMemoProps>({
10
+ export const useDeepMemo = <TVariable, TMemoProps>({
11
11
  deps,
12
12
  variable
13
13
  }: UseDeepMemo<TVariable, TMemoProps>): TVariable =>
14
14
  useMemo(() => variable, useDeepCompare(deps));
15
-
16
- export default useDeepMemo;
@@ -2,16 +2,18 @@ import { useRef, useCallback } from 'react';
2
2
 
3
3
  interface HookParam {
4
4
  action: () => void;
5
+ intersectionObserverOptions?: IntersectionObserverInit;
5
6
  loading: boolean;
6
7
  maxPage: number;
7
8
  page: number;
8
9
  }
9
10
 
10
- const useIntersectionObserver = ({
11
+ export const useIntersectionObserver = ({
11
12
  maxPage,
12
13
  page,
13
14
  loading,
14
- action
15
+ action,
16
+ intersectionObserverOptions
15
17
  }: HookParam): ((node) => void) => {
16
18
  const observer = useRef<IntersectionObserver | null>(null);
17
19
  const lastElementRef = useCallback(
@@ -30,7 +32,7 @@ const useIntersectionObserver = ({
30
32
  if (entry.isIntersecting && page < maxPage) {
31
33
  action();
32
34
  }
33
- });
35
+ }, intersectionObserverOptions);
34
36
 
35
37
  if (node && observer.current) {
36
38
  observer.current.observe(node);
@@ -41,5 +43,3 @@ const useIntersectionObserver = ({
41
43
 
42
44
  return lastElementRef;
43
45
  };
44
-
45
- export default useIntersectionObserver;
@@ -4,7 +4,7 @@ interface UseKeyObserverProps {
4
4
  isShiftKeyDown: boolean;
5
5
  }
6
6
 
7
- const useKeyObserver = (): UseKeyObserverProps => {
7
+ export const useKeyObserver = (): UseKeyObserverProps => {
8
8
  const [isShiftKeyDown, setIsShiftKeyDown] = useState<boolean>(false);
9
9
 
10
10
  const pressShift = (): void => setIsShiftKeyDown(true);
@@ -34,5 +34,3 @@ const useKeyObserver = (): UseKeyObserverProps => {
34
34
  isShiftKeyDown
35
35
  };
36
36
  };
37
-
38
- export default useKeyObserver;
@@ -10,7 +10,7 @@ import { Provider, useSetAtom } from 'jotai';
10
10
 
11
11
  import { userAtom, ThemeMode } from '@centreon/ui-context';
12
12
 
13
- import useLocaleDateTimeFormat from '.';
13
+ import { useLocaleDateTimeFormat } from '.';
14
14
 
15
15
  dayjs.extend(timezonePlugin);
16
16
  dayjs.extend(utcPlugin);
@@ -87,5 +87,4 @@ const useLocaleDateTimeFormat = (): LocaleDateTimeFormat => {
87
87
  };
88
88
  };
89
89
 
90
- export default useLocaleDateTimeFormat;
91
- export { dateTimeFormat, dateFormat, timeFormat };
90
+ export { dateTimeFormat, dateFormat, timeFormat, useLocaleDateTimeFormat };
@@ -10,7 +10,7 @@ import { render, RenderResult } from '@testing-library/react';
10
10
 
11
11
  import { userAtom, ThemeMode } from '@centreon/ui-context';
12
12
 
13
- import useLocaleDateTimeFormat from '.';
13
+ import { useLocaleDateTimeFormat } from '.';
14
14
 
15
15
  dayjs.extend(timezonePlugin);
16
16
  dayjs.extend(utcPlugin);
@@ -19,7 +19,7 @@ interface MemoComponent {
19
19
  memoProps: Array<unknown>;
20
20
  }
21
21
 
22
- const useMemoComponent = ({
22
+ export const useMemoComponent = ({
23
23
  Component,
24
24
  memoProps
25
25
  }: MemoComponent): JSX.Element =>
@@ -0,0 +1,6 @@
1
+ // https://github.com/ZeeCoder/use-resize-observer
2
+ import useResizeObserver from 'use-resize-observer';
3
+
4
+ export * from 'use-resize-observer';
5
+
6
+ export { useResizeObserver };
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable no-underscore-dangle */
2
2
  /* eslint-disable no-undef */
3
- // import '@testing-library/jest-dom/extend-expect';
3
+
4
4
  import i18n from 'i18next';
5
5
  import { initReactI18next } from 'react-i18next';
6
6
  import fetchMock from 'jest-fetch-mock';
@@ -9,7 +9,7 @@ import fetchMock, { MockParams } from 'jest-fetch-mock';
9
9
 
10
10
  import { ThemeMode } from '@centreon/ui-context';
11
11
 
12
- import ThemeProvider from './StoryBookThemeProvider';
12
+ import ThemeProvider from '../src/StoryBookThemeProvider';
13
13
 
14
14
  interface Props {
15
15
  children: ReactElement;
@@ -1,82 +0,0 @@
1
- const { equals } = require("ramda");
2
-
3
- const excludeNodeModulesExceptCentreonUi =
4
- /node_modules(\\|\/)(?!(centreon-frontend(\\|\/)packages(\\|\/)(ui-context|centreon-ui)))/;
5
-
6
- module.exports = {
7
- core: {
8
- builder: 'webpack5',
9
- },
10
- features: {
11
- previewMdx2: true,
12
- },
13
- stories: ['../src/*.stories.mdx', '../src/**/*.stories.@(jsx|tsx)'],
14
- typescript: {
15
- reactDocgen: 'react-docgen-typescript'
16
- },
17
- addons: [
18
- 'storybook-addon-mock/register',
19
- 'storybook-dark-mode',
20
- '@storybook/addon-controls',
21
- {
22
- name: '@storybook/addon-docs',
23
- options: {
24
- configureJSX: true,
25
- },
26
- },
27
- ],
28
- webpackFinal: (config) => {
29
- delete config.resolve.alias['emotion-theming'];
30
- delete config.resolve.alias['@emotion/styled'];
31
- delete config.resolve.alias['@emotion/core'];
32
-
33
- const configWithoutEmotionAliases = {
34
- ...config,
35
- resolve: {
36
- ...config.resolve,
37
- extensions: ['.js', '.ts', '.tsx'],
38
- },
39
- module: {
40
- ...config.module,
41
- rules: [
42
- {
43
- test: /\.tsx?$/,
44
- exclude: /node_modules(\\|\/)(?!(@centreon))/,
45
- use: {
46
- loader: 'swc-loader',
47
- options: {
48
- jsc: {
49
- transform: {
50
- react: {
51
- runtime: 'automatic',
52
- },
53
- },
54
- parser: {
55
- syntax: 'typescript',
56
- },
57
- },
58
- parseMap: true,
59
- },
60
- }
61
- },
62
- {
63
- exclude: excludeNodeModulesExceptCentreonUi,
64
- test: /\.(bmp|png|jpg|jpeg|gif|svg)$/,
65
- use: [
66
- {
67
- loader: 'url-loader',
68
- options: {
69
- limit: 10000,
70
- name: '[name].[hash:8].[ext]',
71
- },
72
- },
73
- ],
74
- },
75
- ...(config.module.rules.filter(({ type }) => !equals(type, 'asset/resource'))),
76
- ],
77
- },
78
- }
79
-
80
- return configWithoutEmotionAliases;
81
- }
82
- };
@@ -1,21 +0,0 @@
1
- import { addDecorator } from '@storybook/react';
2
-
3
- import { useDarkMode } from 'storybook-dark-mode';
4
-
5
- import { ThemeMode } from '@centreon/ui-context';
6
-
7
- import StoryBookThemeProvider from '../src/StoryBookThemeProvider';
8
- import QueryProvider from '../src/api/QueryProvider';
9
- import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
10
-
11
-
12
- const withThemeProvider = (story): JSX.Element => (
13
- <StoryBookThemeProvider themeMode={useDarkMode() ? ThemeMode.dark : ThemeMode.light}>
14
- <QueryProvider>
15
- {story()}
16
- <ReactQueryDevtools />
17
- </QueryProvider>
18
- </StoryBookThemeProvider>
19
- );
20
-
21
- addDecorator(withThemeProvider);