@centreon/ui 23.10.37 → 23.10.39

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 (388) 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/Wizard/index.tsx +13 -3
  229. package/src/Wizard/models.ts +1 -0
  230. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-dashboard-normal-1-snap.png +0 -0
  231. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-dashboard-with-item-header-1-snap.png +0 -0
  232. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-dashboard-with-many-panels-1-snap.png +0 -0
  233. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-fluid-typography-basic-1-snap.png +0 -0
  234. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-fluid-typography-with-20-px-height-1-snap.png +0 -0
  235. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-fluid-typography-with-200-px-width-1-snap.png +0 -0
  236. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-fluid-typography-with-heading-5-variant-1-snap.png +0 -0
  237. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-fluid-typography-with-long-text-1-snap.png +0 -0
  238. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-listing-as-empty-state-1-snap.png +0 -0
  239. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-listing-loading-with-no-data-1-snap.png +0 -0
  240. package/src/__image_snapshots__/storyshots-test-js-image-story-shots-listing-with-editable-and-sortable-columns-1-snap.png +0 -0
  241. package/src/api/TestQueryProvider.tsx +2 -1
  242. package/src/api/customFetch.ts +10 -0
  243. package/src/api/useFetchQuery/index.ts +8 -7
  244. package/src/api/useMutationQuery/index.ts +18 -13
  245. package/src/api/useRequest/index.ts +9 -6
  246. package/src/base/tokens/README.md +3 -0
  247. package/src/base/tokens/source/$metadata.json +5 -0
  248. package/src/base/tokens/source/base.json +142 -0
  249. package/src/base/tokens/themes/base.tokens.d.ts +38 -0
  250. package/src/base/tokens/themes/base.tokens.json +695 -0
  251. package/src/base/tokens/themes/base.tokens.ts +38 -0
  252. package/src/base/tokens/themes/ui-dark.tokens.d.ts +38 -0
  253. package/src/base/tokens/themes/ui-dark.tokens.json +695 -0
  254. package/src/base/tokens/themes/ui-dark.tokens.ts +38 -0
  255. package/src/base/tokens/themes/ui-light.tokens.d.ts +38 -0
  256. package/src/base/tokens/themes/ui-light.tokens.json +695 -0
  257. package/src/base/tokens/themes/ui-light.tokens.ts +38 -0
  258. package/src/components/Button/Button.stories.tsx +34 -0
  259. package/src/components/Button/Button.styles.ts +44 -0
  260. package/src/components/Button/Button.tsx +78 -0
  261. package/src/components/Button/Icon/IconButton.stories.tsx +18 -0
  262. package/src/components/Button/Icon/IconButton.styles.ts +14 -0
  263. package/src/components/Button/Icon/IconButton.tsx +58 -0
  264. package/src/components/Button/Icon/index.tsx +1 -0
  265. package/src/components/Button/index.ts +2 -0
  266. package/src/components/DataTable/DataTable.stories.tsx +51 -0
  267. package/src/components/DataTable/DataTable.styles.ts +27 -0
  268. package/src/components/DataTable/DataTable.tsx +35 -0
  269. package/src/components/DataTable/EmptyState/DataTableEmptyState.stories.tsx +21 -0
  270. package/src/components/DataTable/EmptyState/DataTableEmptyState.styles.ts +26 -0
  271. package/src/components/DataTable/EmptyState/DataTableEmptyState.tsx +53 -0
  272. package/src/components/DataTable/Item/DataTableItem.stories.tsx +25 -0
  273. package/src/components/DataTable/Item/DataTableItem.styles.ts +39 -0
  274. package/src/components/DataTable/Item/DataTableItem.tsx +102 -0
  275. package/src/components/DataTable/Item/DataTableItemSkeleton.tsx +13 -0
  276. package/src/components/DataTable/index.ts +10 -0
  277. package/src/components/Form/Dashboard/Dashboard.resource.ts +4 -0
  278. package/src/components/Form/Dashboard/DashboardForm.stories.ts +39 -0
  279. package/src/components/Form/Dashboard/DashboardForm.styles.ts +19 -0
  280. package/src/components/Form/Dashboard/DashboardForm.tsx +104 -0
  281. package/src/components/Form/Dashboard/DashboardFormActions.tsx +56 -0
  282. package/src/components/Form/Dashboard/index.ts +2 -0
  283. package/src/components/Form/Dashboard/translatedLabels.ts +6 -0
  284. package/src/components/Form/Form.models.ts +1 -0
  285. package/src/components/Form/index.ts +2 -0
  286. package/src/components/Header/Header.styles.ts +0 -0
  287. package/src/components/Header/PageHeader/PageHeader.stories.tsx +88 -0
  288. package/src/components/Header/PageHeader/PageHeader.styles.ts +99 -0
  289. package/src/components/Header/PageHeader/PageHeader.tsx +15 -0
  290. package/src/components/Header/PageHeader/PageHeaderActions.tsx +17 -0
  291. package/src/components/Header/PageHeader/PageHeaderMain.tsx +15 -0
  292. package/src/components/Header/PageHeader/PageHeaderMenu.tsx +15 -0
  293. package/src/components/Header/PageHeader/PageHeaderTitle.tsx +47 -0
  294. package/src/components/Header/PageHeader/index.ts +12 -0
  295. package/src/components/Header/index.ts +1 -0
  296. package/src/components/Icon/Icon.styles.ts +0 -0
  297. package/src/components/Icon/Icon.tsx +2 -0
  298. package/src/components/Icon/index.ts +0 -0
  299. package/src/components/Layout/AreaIndicator.styles.ts +33 -0
  300. package/src/components/Layout/AreaIndicator.tsx +35 -0
  301. package/src/components/Layout/PageLayout/PageLayout.stories.tsx +81 -0
  302. package/src/components/Layout/PageLayout/PageLayout.styles.ts +40 -0
  303. package/src/components/Layout/PageLayout/PageLayout.tsx +21 -0
  304. package/src/components/Layout/PageLayout/PageLayoutActions.tsx +15 -0
  305. package/src/components/Layout/PageLayout/PageLayoutBody.tsx +24 -0
  306. package/src/components/Layout/PageLayout/PageLayoutHeader.tsx +15 -0
  307. package/src/components/Layout/PageLayout/index.ts +10 -0
  308. package/src/components/Layout/index.ts +1 -0
  309. package/src/components/Menu/Button/MenuButton.stories.tsx +16 -0
  310. package/src/components/Menu/Button/MenuButton.styles.ts +27 -0
  311. package/src/components/Menu/Button/MenuButton.tsx +62 -0
  312. package/src/components/Menu/Button/index.ts +1 -0
  313. package/src/components/Menu/Menu.stories.tsx +71 -0
  314. package/src/components/Menu/Menu.styles.ts +70 -0
  315. package/src/components/Menu/Menu.tsx +25 -0
  316. package/src/components/Menu/MenuDivider.tsx +13 -0
  317. package/src/components/Menu/MenuItem.tsx +36 -0
  318. package/src/components/Menu/MenuItems.tsx +35 -0
  319. package/src/components/Menu/index.ts +12 -0
  320. package/src/components/Menu/useMenu.tsx +79 -0
  321. package/src/components/Modal/Modal.stories.tsx +111 -0
  322. package/src/components/Modal/Modal.styles.ts +55 -0
  323. package/src/components/Modal/Modal.tsx +59 -0
  324. package/src/components/Modal/ModalActions.tsx +59 -0
  325. package/src/components/Modal/ModalBody.tsx +15 -0
  326. package/src/components/Modal/ModalHeader.tsx +21 -0
  327. package/src/components/Modal/index.ts +12 -0
  328. package/src/components/README.md +3 -0
  329. package/src/components/Tooltip/TextOverflowTooltip/TextOverflowTooltip.stories.tsx +70 -0
  330. package/src/components/Tooltip/TextOverflowTooltip/TextOverflowTooltip.styles.ts +5 -0
  331. package/src/components/Tooltip/TextOverflowTooltip/TextOverflowTooltip.tsx +115 -0
  332. package/src/components/Tooltip/TextOverflowTooltip/index.tsx +1 -0
  333. package/src/components/Tooltip/Tooltip.stories.tsx +41 -0
  334. package/src/components/Tooltip/Tooltip.styles.ts +5 -0
  335. package/src/components/Tooltip/Tooltip.tsx +46 -0
  336. package/src/components/Tooltip/index.ts +1 -0
  337. package/src/components/index.ts +8 -0
  338. package/src/index.ts +7 -19
  339. package/src/screens/dashboard/DashboardsDetail.stories.tsx +108 -0
  340. package/src/screens/dashboard/DashboardsOverview.stories.tsx +281 -0
  341. package/src/styles/tokens/themes/_ui-dark.tokens.json +695 -0
  342. package/src/styles/tokens/themes/_ui-light.tokens.json +695 -0
  343. package/src/utils/docsURL.ts +31 -0
  344. package/src/utils/getNormalizedId.ts +1 -3
  345. package/src/utils/index.ts +18 -0
  346. package/src/utils/panelSize.ts +15 -0
  347. package/src/utils/sanitizedHTML.ts +18 -0
  348. package/src/utils/useCopyToClipboard.ts +2 -3
  349. package/src/utils/useDateTimePickerAdapter.ts +309 -0
  350. package/src/utils/useDebounce.ts +1 -3
  351. package/src/utils/useDeepCallback.ts +1 -3
  352. package/src/utils/useDeepMemo.ts +1 -3
  353. package/src/utils/useIntersectionObserver.ts +5 -5
  354. package/src/utils/useKeyObserver.tsx +1 -3
  355. package/src/utils/useLocaleDateTimeFormat/index.test.tsx +1 -1
  356. package/src/utils/useLocaleDateTimeFormat/index.ts +1 -2
  357. package/src/utils/useLocaleDateTimeFormat/localeFallback.test.tsx +1 -1
  358. package/src/utils/useMemoComponent.ts +1 -1
  359. package/src/utils/useResizeObserver.ts +6 -0
  360. package/{setupTests.js → test/setupTests.js} +1 -1
  361. package/{src → test}/testRenderer.tsx +1 -1
  362. package/.storybook/main.js +0 -82
  363. package/.storybook/preview.tsx +0 -21
  364. package/jest.config.js +0 -20
  365. package/src/Listing/Header/SortableCell/DraggableIcon.tsx +0 -41
  366. package/src/Listing/Skeleton.tsx +0 -11
  367. package/src/storyshots.test.js +0 -52
  368. package/testRunner.js +0 -36
  369. package/tsconfig.json +0 -29
  370. package/types/declarations.d.ts +0 -9
  371. /package/{assets → public/brand}/centreon-logo-one-line-dark.svg +0 -0
  372. /package/{assets → public/brand}/centreon-logo-one-line-light.svg +0 -0
  373. /package/{fonts/fonts-generated → public/fonts}/roboto-bold-webfont.ttf +0 -0
  374. /package/{fonts/fonts-generated → public/fonts}/roboto-bold-webfont.woff +0 -0
  375. /package/{fonts/fonts-generated → public/fonts}/roboto-bold-webfont.woff2 +0 -0
  376. /package/{fonts/fonts-generated → public/fonts}/roboto-light-webfont.ttf +0 -0
  377. /package/{fonts/fonts-generated → public/fonts}/roboto-light-webfont.woff +0 -0
  378. /package/{fonts/fonts-generated → public/fonts}/roboto-light-webfont.woff2 +0 -0
  379. /package/{fonts/fonts-generated → public/fonts}/roboto-medium-webfont.ttf +0 -0
  380. /package/{fonts/fonts-generated → public/fonts}/roboto-medium-webfont.woff +0 -0
  381. /package/{fonts/fonts-generated → public/fonts}/roboto-medium-webfont.woff2 +0 -0
  382. /package/{fonts/fonts-generated → public/fonts}/roboto-regular-webfont.ttf +0 -0
  383. /package/{fonts/fonts-generated → public/fonts}/roboto-regular-webfont.woff +0 -0
  384. /package/{fonts/fonts-generated → public/fonts}/roboto-regular-webfont.woff2 +0 -0
  385. /package/{assets → src/@assets/images}/not-authorized-template-background-dark.svg +0 -0
  386. /package/{assets → src/@assets/images}/not-authorized-template-background-light.svg +0 -0
  387. /package/src/Listing/Header/{Label.tsx → _internals/Label.tsx} +0 -0
  388. /package/src/Typography/{index.tsx → story.utils.tsx} +0 -0
@@ -0,0 +1,98 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import dayjs from 'dayjs';
3
+
4
+ import Switch from '@mui/material/Switch';
5
+
6
+ import { dateFormat } from './models';
7
+
8
+ import TimePeriod from '.';
9
+
10
+ const meta: Meta<typeof TimePeriod> = {
11
+ component: TimePeriod,
12
+ tags: ['autodocs']
13
+ };
14
+
15
+ export default meta;
16
+
17
+ type Story = StoryObj<typeof TimePeriod>;
18
+
19
+ const Template: Story = {
20
+ render: (args) => <TimePeriod {...args} />
21
+ };
22
+
23
+ const TemplateWithExternalComponent: Story = {
24
+ render: (args) => (
25
+ <TimePeriod {...args} renderExternalComponent={<Switch />} />
26
+ )
27
+ };
28
+
29
+ const argTypes = {
30
+ disabled: {
31
+ control: 'boolean',
32
+ description: 'If true, the component is disabled.',
33
+ table: {
34
+ defaultValue: { summary: false },
35
+ type: { summary: 'boolean' }
36
+ }
37
+ },
38
+ extraTimePeriods: {
39
+ control: 'object',
40
+ description: 'soon',
41
+ table: {
42
+ defaultValue: { summary: '[]' },
43
+ type: { detail: 'extra selected time periods', summary: 'array' }
44
+ }
45
+ },
46
+ getIsError: {
47
+ description:
48
+ 'Callback fired when The end date is smaller or equal to the start date',
49
+ table: {
50
+ category: 'Events',
51
+ type: { detail: '(value:boolean)=>void', summary: 'function' }
52
+ }
53
+ },
54
+ getStartEndParameters: {
55
+ description: 'Callback fired when the the user select or pick a date',
56
+ table: {
57
+ category: 'Events',
58
+ type: {
59
+ detail: '({start:isoString,end:isoString})=>void',
60
+ summary: 'function'
61
+ }
62
+ }
63
+ }
64
+ };
65
+ const args = {
66
+ extraTimePeriods: [
67
+ {
68
+ dateTimeFormat: dateFormat,
69
+ getStart: (): Date => dayjs(Date.now()).subtract(29, 'day').toDate(),
70
+ id: 'last_29_days',
71
+ largeName: 'last 29 days',
72
+ name: '29 days'
73
+ },
74
+ {
75
+ dateTimeFormat: dateFormat,
76
+ getStart: (): Date => dayjs(Date.now()).subtract(5, 'day').toDate(),
77
+ id: 'last_5_days',
78
+ largeName: 'last 5 days',
79
+ name: '5 days'
80
+ }
81
+ ]
82
+ };
83
+
84
+ export const BasicTimePeriod: Story = {
85
+ ...Template,
86
+ argTypes
87
+ };
88
+
89
+ export const WithExtraTimePeriods: Story = {
90
+ ...Template,
91
+ argTypes,
92
+ args
93
+ };
94
+
95
+ export const WithExternalComponent: Story = {
96
+ ...TemplateWithExternalComponent,
97
+ argTypes
98
+ };
@@ -0,0 +1,78 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ import { Responsive } from '@visx/visx';
4
+ import dayjs from 'dayjs';
5
+ import 'dayjs/locale/en';
6
+ import 'dayjs/locale/es';
7
+ import 'dayjs/locale/fr';
8
+ import 'dayjs/locale/pt';
9
+ import duration from 'dayjs/plugin/duration';
10
+ import isSameOrAfter from 'dayjs/plugin/isSameOrAfter';
11
+ import timezonePlugin from 'dayjs/plugin/timezone';
12
+ import utcPlugin from 'dayjs/plugin/utc';
13
+
14
+ import { Paper } from '@mui/material';
15
+
16
+ import CustomTimePeriod from './CustomTimePeriod';
17
+ import SelectedTimePeriod from './SelectedTimePeriod';
18
+ import { useStyles } from './TimePeriods.styles';
19
+ import {
20
+ CustomTimePeriod as CustomTimePeriodModel,
21
+ EndStartInterval,
22
+ TimePeriod
23
+ } from './models';
24
+ import useTimePeriod from './useTimePeriod';
25
+
26
+ dayjs.extend(isSameOrAfter);
27
+ dayjs.extend(utcPlugin);
28
+ dayjs.extend(timezonePlugin);
29
+ dayjs.extend(duration);
30
+ interface Parameters extends EndStartInterval {
31
+ timelineEventsLimit: number;
32
+ }
33
+ export interface Props {
34
+ adjustTimePeriodData?: Omit<CustomTimePeriodModel, 'timelineEventsLimit'>;
35
+ disabled?: boolean;
36
+ extraTimePeriods?: Array<Omit<TimePeriod, 'timelineEventsLimit'>>;
37
+ getIsError?: (value: boolean) => void;
38
+ getParameters?: ({ start, end, timelineEventsLimit }: Parameters) => void;
39
+ renderExternalComponent?: ReactNode;
40
+ }
41
+
42
+ const TimePeriod = ({
43
+ extraTimePeriods,
44
+ disabled = false,
45
+ getParameters,
46
+ getIsError,
47
+ adjustTimePeriodData,
48
+ renderExternalComponent
49
+ }: Props): JSX.Element => {
50
+ const { classes } = useStyles({ disabled });
51
+
52
+ useTimePeriod({
53
+ adjustTimePeriodData,
54
+ getIsError,
55
+ getParameters
56
+ });
57
+
58
+ return (
59
+ <div>
60
+ <Responsive.ParentSize>
61
+ {({ width }): JSX.Element => {
62
+ return (
63
+ <Paper className={classes.header} style={{ width }}>
64
+ <SelectedTimePeriod
65
+ disabled={disabled}
66
+ extraTimePeriods={extraTimePeriods}
67
+ width={width}
68
+ />
69
+ <CustomTimePeriod disabled={disabled} />
70
+ <div>{renderExternalComponent}</div>
71
+ </Paper>
72
+ );
73
+ }}
74
+ </Responsive.ParentSize>
75
+ </div>
76
+ );
77
+ };
78
+ export default TimePeriod;
@@ -0,0 +1,12 @@
1
+ import { ListingVariant } from '@centreon/ui-context';
2
+
3
+ export const retrievedUser = {
4
+ alias: 'Admin alias',
5
+ default_page: '/monitoring/resources',
6
+ is_export_button_enabled: true,
7
+ isExportButtonEnabled: true,
8
+ locale: 'fr_FR.UTF8',
9
+ name: 'Admin',
10
+ use_deprecated_pages: false,
11
+ user_interface_density: ListingVariant.compact
12
+ };
@@ -0,0 +1,97 @@
1
+ import dayjs from 'dayjs';
2
+
3
+ import {
4
+ labelLastDay,
5
+ label1Day,
6
+ label7Days,
7
+ label31Days,
8
+ labelLast7Days,
9
+ labelLast31Days
10
+ } from './translatedLabels';
11
+
12
+ export const dateFormat = 'L';
13
+ export const timeFormat = 'LT';
14
+ export const dateTimeFormat = `${dateFormat} ${timeFormat}`;
15
+
16
+ export enum CustomTimePeriodProperty {
17
+ end = 'end',
18
+ start = 'start'
19
+ }
20
+
21
+ export interface TimePeriod {
22
+ dateTimeFormat: string;
23
+ getStart: () => Date;
24
+ id: string;
25
+ largeName: string;
26
+ name: string;
27
+ timelineEventsLimit: number;
28
+ }
29
+
30
+ export const lastDayPeriod: TimePeriod = {
31
+ dateTimeFormat: timeFormat,
32
+ getStart: (): Date => dayjs(Date.now()).subtract(24, 'hour').toDate(),
33
+ id: 'last_24_h',
34
+ largeName: labelLastDay,
35
+ name: label1Day,
36
+ timelineEventsLimit: 20
37
+ };
38
+
39
+ export const last7Days: TimePeriod = {
40
+ dateTimeFormat: dateFormat,
41
+ getStart: (): Date => dayjs(Date.now()).subtract(7, 'day').toDate(),
42
+ id: 'last_7_days',
43
+ largeName: labelLast7Days,
44
+ name: label7Days,
45
+ timelineEventsLimit: 100
46
+ };
47
+
48
+ export const last31Days: TimePeriod = {
49
+ dateTimeFormat: dateFormat,
50
+ getStart: (): Date => dayjs(Date.now()).subtract(31, 'day').toDate(),
51
+ id: 'last_31_days',
52
+ largeName: labelLast31Days,
53
+ name: label31Days,
54
+ timelineEventsLimit: 500
55
+ };
56
+
57
+ export const timePeriods: Array<TimePeriod> = [
58
+ lastDayPeriod,
59
+ last7Days,
60
+ last31Days
61
+ ];
62
+
63
+ export interface TimePeriodById {
64
+ id: string;
65
+ timePeriods: Array<TimePeriod>;
66
+ }
67
+
68
+ export interface CustomTimePeriod {
69
+ end: Date;
70
+ start: Date;
71
+ timelineEventsLimit: number;
72
+ }
73
+
74
+ export interface DateTimePickerInputModel {
75
+ changeDate: (props) => void;
76
+ date: Date | null;
77
+ disabled?: boolean;
78
+ maxDate?: Date;
79
+ minDate?: Date;
80
+ property: CustomTimePeriodProperty;
81
+ }
82
+
83
+ export interface TimeLineAxisTickFormat extends CustomTimePeriod {
84
+ timeLineLimit: number;
85
+ xAxisTickFormat: string;
86
+ }
87
+
88
+ export interface GraphQueryParametersProps {
89
+ endDate?: Date;
90
+ startDate?: Date;
91
+ timePeriod?: TimePeriod | null;
92
+ }
93
+
94
+ export interface EndStartInterval {
95
+ end: string;
96
+ start: string;
97
+ }
@@ -0,0 +1,102 @@
1
+ import dayjs from 'dayjs';
2
+ import { atom } from 'jotai';
3
+ import { always, cond, gte, isNil, T } from 'ramda';
4
+
5
+ import {
6
+ defaultTimePeriod,
7
+ getTimePeriodById,
8
+ getTimePeriodFromNow
9
+ } from './helpers';
10
+ import { CustomTimePeriod, TimePeriod, TimePeriodById } from './models';
11
+
12
+ export const selectedTimePeriodAtom = atom<TimePeriod | null>(
13
+ defaultTimePeriod
14
+ );
15
+
16
+ const defaultCustomTimePeriod = getTimePeriodFromNow(defaultTimePeriod);
17
+
18
+ export const customTimePeriodAtom = atom(defaultCustomTimePeriod);
19
+
20
+ export const errorTimePeriodAtom = atom(false);
21
+
22
+ export const getNewCustomTimePeriod = ({
23
+ start,
24
+ end
25
+ }: Omit<CustomTimePeriod, 'timelineEventsLimit'>): CustomTimePeriod => {
26
+ const customTimePeriodInDay = dayjs
27
+ .duration(dayjs(end).diff(dayjs(start)))
28
+ .asDays();
29
+
30
+ const timelineEventsLimit = cond<number, number>([
31
+ [gte(1), always(20)],
32
+ [gte(7), always(100)],
33
+ [T, always(500)]
34
+ ])(customTimePeriodInDay) as number;
35
+
36
+ return {
37
+ end,
38
+ start,
39
+ timelineEventsLimit
40
+ };
41
+ };
42
+
43
+ export const changeSelectedTimePeriodDerivedAtom = atom(
44
+ null,
45
+ (_, set, { id, timePeriods }: TimePeriodById) => {
46
+ const timePeriod = getTimePeriodById({ id, timePeriods });
47
+
48
+ set(selectedTimePeriodAtom, timePeriod);
49
+
50
+ const newCustomTimePeriod = getTimePeriodFromNow(timePeriod);
51
+
52
+ set(customTimePeriodAtom, newCustomTimePeriod);
53
+ }
54
+ );
55
+
56
+ export const changeCustomTimePeriodDerivedAtom = atom(
57
+ null,
58
+ (get, set, { date, property }) => {
59
+ const customTimePeriod = get(customTimePeriodAtom);
60
+
61
+ const newCustomTimePeriod = getNewCustomTimePeriod({
62
+ ...customTimePeriod,
63
+ [property]: date
64
+ });
65
+
66
+ set(customTimePeriodAtom, newCustomTimePeriod);
67
+ set(selectedTimePeriodAtom, null);
68
+ }
69
+ );
70
+
71
+ export const getDatesDerivedAtom = atom(
72
+ (get) =>
73
+ (timePeriod?: TimePeriod | null): [string, string, number] => {
74
+ const customTimePeriod = get(customTimePeriodAtom);
75
+
76
+ if (isNil(timePeriod)) {
77
+ return [
78
+ customTimePeriod.start.toISOString(),
79
+ customTimePeriod.end.toISOString(),
80
+ customTimePeriod.timelineEventsLimit
81
+ ];
82
+ }
83
+
84
+ return [
85
+ timePeriod.getStart().toISOString(),
86
+ new Date(Date.now()).toISOString(),
87
+ timePeriod.timelineEventsLimit
88
+ ];
89
+ }
90
+ );
91
+
92
+ export const adjustTimePeriodDerivedAtom = atom(
93
+ null,
94
+ (
95
+ _,
96
+ set,
97
+ adjustTimePeriodProps: Omit<CustomTimePeriod, 'timelineEventsLimit'>
98
+ ) => {
99
+ set(customTimePeriodAtom, getNewCustomTimePeriod(adjustTimePeriodProps));
100
+ set(selectedTimePeriodAtom, null);
101
+ }
102
+ );
@@ -0,0 +1,9 @@
1
+ export const label1Day = '1 day';
2
+ export const label7Days = '7 days';
3
+ export const label31Days = '31 days';
4
+ export const labelLastDay = 'Last day';
5
+ export const labelLast7Days = 'Last 7 days';
6
+ export const labelLast31Days = 'Last 31 days';
7
+ export const labelFrom = 'From';
8
+ export const labelTo = 'To';
9
+ export const labelCompactTimePeriod = 'Compact time period';
@@ -0,0 +1,31 @@
1
+ import dayjs from 'dayjs';
2
+ import { T, always, cond, gte } from 'ramda';
3
+
4
+ import { getTimePeriodFromNow } from './helpers';
5
+ import { TimePeriod } from './models';
6
+
7
+ const useSortTimePeriods = (
8
+ timePeriods: Array<TimePeriod>
9
+ ): Array<TimePeriod> => {
10
+ const adjustedTimePeriods = timePeriods.map((item) => {
11
+ const { end, start } = getTimePeriodFromNow(item);
12
+
13
+ const numberOfDays = dayjs.duration(dayjs(end).diff(dayjs(start))).asDays();
14
+
15
+ const timelineEventsLimit = cond<number, number>([
16
+ [gte(1), always(20)],
17
+ [gte(7), always(100)],
18
+ [T, always(500)]
19
+ ])(numberOfDays) as number;
20
+
21
+ return { item: { ...item, timelineEventsLimit }, numberOfDays };
22
+ });
23
+
24
+ const sortedTimePeriods = adjustedTimePeriods.sort(
25
+ (a, b) => a.numberOfDays - b.numberOfDays
26
+ );
27
+
28
+ return sortedTimePeriods.map((element) => element.item);
29
+ };
30
+
31
+ export default useSortTimePeriods;
@@ -0,0 +1,49 @@
1
+ import { useEffect } from 'react';
2
+
3
+ import { useAtomValue, useSetAtom } from 'jotai';
4
+
5
+ import {
6
+ customTimePeriodAtom,
7
+ getDatesDerivedAtom,
8
+ selectedTimePeriodAtom,
9
+ errorTimePeriodAtom,
10
+ adjustTimePeriodDerivedAtom
11
+ } from './timePeriodsAtoms';
12
+
13
+ import { Props } from '.';
14
+
15
+ const useTimePeriod = ({
16
+ getParameters,
17
+ getIsError,
18
+ adjustTimePeriodData
19
+ }: Omit<Props, 'extraTimePeriods' | 'disabled'>): void => {
20
+ const selectedTimePeriod = useAtomValue(selectedTimePeriodAtom);
21
+ const customTimePeriod = useAtomValue(customTimePeriodAtom);
22
+ const getCurrentEndStartInterval = useAtomValue(getDatesDerivedAtom);
23
+ const errorTimePeriod = useAtomValue(errorTimePeriodAtom);
24
+ const adjustTimeTimePeriod = useSetAtom(adjustTimePeriodDerivedAtom);
25
+
26
+ useEffect(() => {
27
+ if (!adjustTimePeriodData) {
28
+ return;
29
+ }
30
+
31
+ adjustTimeTimePeriod(adjustTimePeriodData);
32
+ }, [adjustTimePeriodData?.start, adjustTimePeriodData?.end]);
33
+
34
+ useEffect(() => {
35
+ const [start, end, timelineEventsLimit] =
36
+ getCurrentEndStartInterval(selectedTimePeriod);
37
+
38
+ getParameters?.({ end, start, timelineEventsLimit });
39
+ }, [customTimePeriod.start, customTimePeriod.end, selectedTimePeriod]);
40
+
41
+ useEffect(() => {
42
+ if (!errorTimePeriod) {
43
+ return;
44
+ }
45
+ getIsError?.(errorTimePeriod);
46
+ }, [errorTimePeriod]);
47
+ };
48
+
49
+ export default useTimePeriod;
@@ -0,0 +1,63 @@
1
+ import { ComponentMeta } from '@storybook/react';
2
+
3
+ import { Box } from '@mui/material';
4
+
5
+ import FluidTypography, { FluidTypographyProps } from '.';
6
+
7
+ interface Props extends FluidTypographyProps {
8
+ height?: string | number;
9
+ width?: string | number;
10
+ }
11
+
12
+ const FluidTypographyTemplate = ({
13
+ width = '900px',
14
+ height = '700px',
15
+ text,
16
+ variant
17
+ }: Props): JSX.Element => {
18
+ return (
19
+ <Box sx={{ height, width }}>
20
+ <FluidTypography text={text} variant={variant} />
21
+ </Box>
22
+ );
23
+ };
24
+
25
+ export default {
26
+ argTypes: {
27
+ height: { control: 'text' },
28
+ text: { control: 'text' },
29
+ variant: { control: 'text' },
30
+ width: { control: 'text' }
31
+ },
32
+ component: FluidTypographyTemplate,
33
+ title: 'Fluid Typography'
34
+ } as ComponentMeta<typeof FluidTypographyTemplate>;
35
+
36
+ export const basic = FluidTypographyTemplate.bind({});
37
+ basic.args = {
38
+ text: 'Hello world'
39
+ };
40
+
41
+ export const with200pxWidth = FluidTypographyTemplate.bind({});
42
+ with200pxWidth.args = {
43
+ height: '200px',
44
+ text: 'Hello world',
45
+ width: '200px'
46
+ };
47
+
48
+ export const with20pxHeight = FluidTypographyTemplate.bind({});
49
+ with20pxHeight.args = {
50
+ height: '20px',
51
+ text: 'Hello world'
52
+ };
53
+
54
+ export const withLongText = FluidTypographyTemplate.bind({});
55
+ withLongText.args = {
56
+ text: 'This is a very long text becaaaaaaause it has a lot to sayyyyy !!!!!!!!'
57
+ };
58
+
59
+ export const withHeading5Variant = FluidTypographyTemplate.bind({});
60
+ withHeading5Variant.args = {
61
+ text: 'Hello world',
62
+ variant: 'h5'
63
+ };
@@ -0,0 +1,51 @@
1
+ import { useRef } from 'react';
2
+
3
+ import { Typography, TypographyProps } from '@mui/material';
4
+
5
+ import useFluidResizeObserver from './useFluidResizeObserver';
6
+
7
+ type CustomTypographyProps = Pick<TypographyProps, 'variant'>;
8
+ export interface FluidTypographyProps extends CustomTypographyProps {
9
+ className?: string;
10
+ text: string;
11
+ }
12
+
13
+ const FluidTypography = ({
14
+ text,
15
+ variant = 'body1',
16
+ className
17
+ }: FluidTypographyProps): JSX.Element => {
18
+ const containerRef = useRef<HTMLElement>();
19
+ const parentRef = useRef<HTMLElement>();
20
+
21
+ const size = useFluidResizeObserver({ ref: containerRef });
22
+ const parentSize = useFluidResizeObserver({ isParent: true, ref: parentRef });
23
+
24
+ return (
25
+ <div
26
+ ref={parentRef}
27
+ style={{
28
+ height: `${parentSize.height}px`,
29
+ width: `100%`
30
+ }}
31
+ >
32
+ <div ref={containerRef} style={{ height: '100%', width: '100%' }}>
33
+ <Typography
34
+ className={className}
35
+ sx={{
36
+ fontSize: `clamp(10px, min(${Math.floor(
37
+ size.width / 6
38
+ )}px, ${Math.floor(size.height / 6)}px), min(${size.width}px, ${
39
+ size.height
40
+ }px))`
41
+ }}
42
+ variant={variant}
43
+ >
44
+ {text}
45
+ </Typography>
46
+ </div>
47
+ </div>
48
+ );
49
+ };
50
+
51
+ export default FluidTypography;
@@ -0,0 +1,56 @@
1
+ import {
2
+ MutableRefObject,
3
+ useCallback,
4
+ useEffect,
5
+ useRef,
6
+ useState
7
+ } from 'react';
8
+
9
+ interface Size {
10
+ height: number;
11
+ width: number;
12
+ }
13
+
14
+ interface UseFluidResizeObserver {
15
+ isParent?: boolean;
16
+ ref: MutableRefObject<HTMLElement | undefined>;
17
+ }
18
+
19
+ const useFluidResizeObserver = ({
20
+ ref,
21
+ isParent
22
+ }: UseFluidResizeObserver): Size => {
23
+ const [size, setSize] = useState<Size>({ height: 0, width: 0 });
24
+
25
+ const observer = useRef<ResizeObserver | null>(null);
26
+
27
+ const resizeObserver = useCallback(
28
+ (element) => {
29
+ if (observer.current) {
30
+ observer.current.disconnect();
31
+ }
32
+
33
+ observer.current = new ResizeObserver(
34
+ ([entry]: Array<ResizeObserverEntry>) => {
35
+ setSize({
36
+ height: entry.target?.getBoundingClientRect().height || 0,
37
+ width: entry.target?.getBoundingClientRect().width || 0
38
+ });
39
+ }
40
+ );
41
+
42
+ if (element && observer.current) {
43
+ observer.current.observe(element);
44
+ }
45
+ },
46
+ [ref.current]
47
+ );
48
+
49
+ useEffect(() => {
50
+ resizeObserver(isParent ? ref.current?.parentElement : ref.current);
51
+ }, [ref.current]);
52
+
53
+ return size;
54
+ };
55
+
56
+ export default useFluidResizeObserver;
@@ -1,16 +1,16 @@
1
1
  import { ComponentMeta, ComponentStory } from '@storybook/react';
2
2
 
3
- import TypographtStory from '.';
3
+ import TypographyStory from './story.utils';
4
4
 
5
5
  export default {
6
6
  argTypes: {},
7
- component: TypographtStory,
7
+ component: TypographyStory,
8
8
  title: 'Typography'
9
- } as ComponentMeta<typeof TypographtStory>;
9
+ } as ComponentMeta<typeof TypographyStory>;
10
10
 
11
- const TemplateTypographtStory: ComponentStory<typeof TypographtStory> = (
11
+ const TemplateTypographtStory: ComponentStory<typeof TypographyStory> = (
12
12
  args
13
- ) => <TypographtStory {...args} />;
13
+ ) => <TypographyStory {...args} />;
14
14
 
15
15
  export const typography = (): JSX.Element => (
16
16
  <TemplateTypographtStory text="Hello world" />
@@ -1,6 +1,6 @@
1
1
  import { ComponentMeta } from '@storybook/react';
2
2
 
3
- import image from '../../assets/not-authorized-template-background-light.svg';
3
+ import image from '../@assets/images/not-authorized-template-background-light.svg';
4
4
 
5
5
  import WallpaperPage from '.';
6
6
 
@@ -1,4 +1,4 @@
1
- import { render, screen, fireEvent } from '../testRenderer';
1
+ import { render, screen, fireEvent } from '../../test/testRenderer';
2
2
 
3
3
  import ActionsBar from './ActionsBar';
4
4