@databiosphere/findable-ui 22.0.0 → 23.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +28 -0
  3. package/lib/common/selectors.d.ts +6 -2
  4. package/lib/common/selectors.js +7 -2
  5. package/lib/components/DataDictionary/components/Entities/constants.d.ts +1 -0
  6. package/lib/components/DataDictionary/components/Entities/constants.js +2 -1
  7. package/lib/components/DataDictionary/components/Entities/entities.d.ts +1 -1
  8. package/lib/components/DataDictionary/components/Entities/entities.js +2 -2
  9. package/lib/components/DataDictionary/components/Entities/types.d.ts +2 -0
  10. package/lib/components/DataDictionary/components/Entity/entity.d.ts +1 -1
  11. package/lib/components/DataDictionary/components/Entity/entity.js +9 -4
  12. package/lib/components/DataDictionary/components/Entity/entity.styles.d.ts +2 -0
  13. package/lib/components/DataDictionary/components/Entity/entity.styles.js +10 -0
  14. package/lib/components/DataDictionary/components/Entity/types.d.ts +2 -0
  15. package/lib/components/DataDictionary/components/Layout/components/EntitiesLayout/entitiesLayout.d.ts +2 -0
  16. package/lib/components/DataDictionary/components/Layout/components/EntitiesLayout/entitiesLayout.js +5 -0
  17. package/lib/components/DataDictionary/components/Layout/components/EntitiesLayout/entitiesLayout.styles.d.ts +5 -0
  18. package/lib/components/DataDictionary/components/Layout/components/EntitiesLayout/entitiesLayout.styles.js +19 -0
  19. package/lib/components/DataDictionary/components/Layout/components/EntitiesLayout/types.d.ts +5 -0
  20. package/lib/components/DataDictionary/components/Layout/components/EntitiesLayout/types.js +1 -0
  21. package/lib/components/DataDictionary/components/Layout/components/OutlineLayout/outlineLayout.d.ts +2 -0
  22. package/lib/components/DataDictionary/components/Layout/components/OutlineLayout/outlineLayout.js +6 -0
  23. package/lib/components/DataDictionary/components/Layout/components/OutlineLayout/outlineLayout.styles.d.ts +9 -0
  24. package/lib/components/DataDictionary/components/Layout/components/OutlineLayout/outlineLayout.styles.js +26 -0
  25. package/lib/components/DataDictionary/components/Layout/components/OutlineLayout/types.d.ts +5 -0
  26. package/lib/components/DataDictionary/components/Layout/components/OutlineLayout/types.js +1 -0
  27. package/lib/components/DataDictionary/components/Layout/components/TitleLayout/titleLayout.d.ts +2 -0
  28. package/lib/components/DataDictionary/components/Layout/components/TitleLayout/titleLayout.js +5 -0
  29. package/lib/components/DataDictionary/components/Layout/components/TitleLayout/titleLayout.styles.d.ts +5 -0
  30. package/lib/components/DataDictionary/components/Layout/components/TitleLayout/titleLayout.styles.js +16 -0
  31. package/lib/components/DataDictionary/components/Layout/components/TitleLayout/types.d.ts +5 -0
  32. package/lib/components/DataDictionary/components/Layout/components/TitleLayout/types.js +1 -0
  33. package/lib/components/DataDictionary/components/Layout/constants.d.ts +5 -0
  34. package/lib/components/DataDictionary/components/Layout/constants.js +5 -0
  35. package/lib/components/DataDictionary/components/Outline/components/ContentsTab/constants.d.ts +2 -0
  36. package/lib/components/DataDictionary/components/Outline/components/ContentsTab/constants.js +5 -0
  37. package/lib/components/DataDictionary/components/Outline/components/ContentsTab/contentsTab.d.ts +1 -0
  38. package/lib/components/DataDictionary/components/Outline/components/ContentsTab/contentsTab.js +6 -0
  39. package/lib/components/DataDictionary/components/Outline/components/ContentsTab/contentsTab.styles.d.ts +3 -0
  40. package/lib/components/DataDictionary/components/Outline/components/ContentsTab/contentsTab.styles.js +7 -0
  41. package/lib/components/DataDictionary/components/Outline/outline.d.ts +2 -0
  42. package/lib/components/DataDictionary/components/Outline/outline.js +6 -0
  43. package/lib/components/DataDictionary/components/Outline/outline.styles.d.ts +3 -0
  44. package/lib/components/DataDictionary/components/Outline/outline.styles.js +19 -0
  45. package/lib/components/DataDictionary/components/Outline/types.d.ts +5 -0
  46. package/lib/components/DataDictionary/components/Outline/types.js +1 -0
  47. package/lib/components/DataDictionary/components/Outline/utils.d.ts +8 -0
  48. package/lib/components/DataDictionary/components/Outline/utils.js +15 -0
  49. package/lib/components/DataDictionary/components/Table/components/BasicCell/basicCell.js +2 -2
  50. package/lib/components/DataDictionary/components/Title/title.d.ts +2 -0
  51. package/lib/components/DataDictionary/components/Title/title.js +3 -0
  52. package/lib/components/DataDictionary/components/Title/title.styles.d.ts +3 -0
  53. package/lib/components/DataDictionary/components/Title/title.styles.js +17 -0
  54. package/lib/components/DataDictionary/dataDictionary.d.ts +2 -2
  55. package/lib/components/DataDictionary/dataDictionary.js +17 -3
  56. package/lib/components/DataDictionary/dataDictionary.styles.d.ts +5 -1
  57. package/lib/components/DataDictionary/dataDictionary.styles.js +16 -3
  58. package/lib/components/DataDictionary/hooks/UseDataDictionary/hook.js +2 -1
  59. package/lib/components/DataDictionary/hooks/UseLayoutSpacing/hook.d.ts +2 -0
  60. package/lib/components/DataDictionary/hooks/UseLayoutSpacing/hook.js +10 -0
  61. package/lib/components/DataDictionary/hooks/UseLayoutSpacing/types.d.ts +7 -0
  62. package/lib/components/DataDictionary/hooks/UseLayoutSpacing/types.js +1 -0
  63. package/lib/components/DataDictionary/types.d.ts +9 -0
  64. package/lib/components/DataDictionary/types.js +1 -0
  65. package/lib/components/Error/error.js +3 -3
  66. package/lib/components/Filter/components/SearchAllFilters/searchAllFilters.js +3 -3
  67. package/lib/components/Index/index.js +3 -4
  68. package/lib/components/Layout/components/ContentLayout/contentLayout.js +7 -7
  69. package/lib/components/Layout/components/Footer/footer.js +4 -1
  70. package/lib/components/Layout/components/Footer/footer.styles.js +1 -0
  71. package/lib/components/Layout/components/Header/header.js +4 -3
  72. package/lib/components/Layout/components/Main/main.js +3 -4
  73. package/lib/components/Layout/components/Outline/components/ContentsTab/contentsTab.d.ts +1 -5
  74. package/lib/components/Layout/components/Outline/components/ContentsTab/contentsTab.js +5 -3
  75. package/lib/components/Layout/components/Outline/components/ContentsTab/contentsTab.styles.d.ts +1 -1
  76. package/lib/components/Layout/components/Outline/components/ContentsTab/contentsTab.styles.js +2 -2
  77. package/lib/components/Layout/components/Outline/components/ContentsTab/types.d.ts +5 -0
  78. package/lib/components/Layout/components/Outline/components/ContentsTab/types.js +1 -0
  79. package/lib/components/Layout/components/Outline/hooks/UseHash/hook.d.ts +11 -0
  80. package/lib/components/Layout/components/Outline/hooks/UseHash/hook.js +16 -0
  81. package/lib/components/Layout/components/Outline/hooks/UseHash/types.d.ts +3 -0
  82. package/lib/components/Layout/components/Outline/hooks/UseHash/types.js +1 -0
  83. package/lib/components/Layout/components/Outline/hooks/UseTabs/constants.d.ts +2 -0
  84. package/lib/components/Layout/components/Outline/hooks/UseTabs/hook.d.ts +3 -0
  85. package/lib/components/Layout/components/Outline/hooks/UseTabs/hook.js +24 -0
  86. package/lib/components/Layout/components/Outline/hooks/UseTabs/utils.d.ts +9 -0
  87. package/lib/components/Layout/components/Outline/hooks/UseTabs/utils.js +13 -0
  88. package/lib/components/Layout/components/Outline/outline.d.ts +2 -13
  89. package/lib/components/Layout/components/Outline/outline.js +8 -32
  90. package/lib/components/Layout/components/Outline/outline.styles.d.ts +2 -2
  91. package/lib/components/Layout/components/Outline/outline.styles.js +2 -2
  92. package/lib/components/Layout/components/Outline/types.d.ts +14 -0
  93. package/lib/components/Layout/components/Outline/types.js +1 -0
  94. package/lib/components/Layout/components/Sidebar/components/SidebarPositioner/sidebarPositioner.js +4 -4
  95. package/lib/components/Login/components/Section/components/Warning/warning.js +2 -3
  96. package/lib/components/Table/components/TableCell/components/RowPositionCell/constants.js +2 -2
  97. package/lib/components/common/AnchorLink/anchorLink.d.ts +6 -0
  98. package/lib/components/common/LoginDialog/constants.js +4 -4
  99. package/lib/providers/layoutDimensions/constants.d.ts +2 -0
  100. package/lib/providers/layoutDimensions/constants.js +4 -0
  101. package/lib/providers/layoutDimensions/context.d.ts +2 -0
  102. package/lib/providers/layoutDimensions/context.js +7 -0
  103. package/lib/providers/layoutDimensions/hook.d.ts +2 -0
  104. package/lib/providers/layoutDimensions/hook.js +5 -0
  105. package/lib/providers/layoutDimensions/provider.d.ts +2 -0
  106. package/lib/providers/layoutDimensions/provider.js +14 -0
  107. package/lib/providers/layoutDimensions/types.d.ts +14 -0
  108. package/lib/providers/layoutDimensions/types.js +1 -0
  109. package/lib/styles/common/mui/tab.d.ts +7 -0
  110. package/lib/styles/common/mui/tab.js +9 -0
  111. package/lib/styles/common/mui/tabs.d.ts +9 -0
  112. package/lib/styles/common/mui/tabs.js +11 -0
  113. package/lib/styles/common/mui/typography.d.ts +8 -2
  114. package/lib/styles/common/mui/typography.js +8 -2
  115. package/package.json +1 -1
  116. package/src/common/selectors.ts +6 -3
  117. package/src/components/DataDictionary/components/Entities/constants.ts +3 -1
  118. package/src/components/DataDictionary/components/Entities/entities.tsx +2 -2
  119. package/src/components/DataDictionary/components/Entities/types.ts +2 -0
  120. package/src/components/DataDictionary/components/Entity/entity.styles.ts +12 -0
  121. package/src/components/DataDictionary/components/Entity/entity.tsx +17 -7
  122. package/src/components/DataDictionary/components/Entity/types.ts +2 -0
  123. package/src/components/DataDictionary/components/Layout/components/EntitiesLayout/entitiesLayout.styles.ts +22 -0
  124. package/src/components/DataDictionary/components/Layout/components/EntitiesLayout/entitiesLayout.tsx +10 -0
  125. package/src/components/DataDictionary/components/Layout/components/EntitiesLayout/types.ts +6 -0
  126. package/src/components/DataDictionary/components/Layout/components/OutlineLayout/outlineLayout.styles.ts +31 -0
  127. package/src/components/DataDictionary/components/Layout/components/OutlineLayout/outlineLayout.tsx +14 -0
  128. package/src/components/DataDictionary/components/Layout/components/OutlineLayout/types.ts +6 -0
  129. package/src/components/DataDictionary/components/Layout/components/TitleLayout/titleLayout.styles.ts +18 -0
  130. package/src/components/DataDictionary/components/Layout/components/TitleLayout/titleLayout.tsx +10 -0
  131. package/src/components/DataDictionary/components/Layout/components/TitleLayout/types.ts +6 -0
  132. package/src/components/DataDictionary/components/Layout/constants.ts +5 -0
  133. package/src/components/DataDictionary/components/Outline/components/ContentsTab/constants.ts +7 -0
  134. package/src/components/DataDictionary/components/Outline/components/ContentsTab/contentsTab.styles.ts +8 -0
  135. package/src/components/DataDictionary/components/Outline/components/ContentsTab/contentsTab.tsx +7 -0
  136. package/src/components/DataDictionary/components/Outline/outline.styles.ts +24 -0
  137. package/src/components/DataDictionary/components/Outline/outline.tsx +11 -0
  138. package/src/components/DataDictionary/components/Outline/types.ts +6 -0
  139. package/src/components/DataDictionary/components/Outline/utils.ts +18 -0
  140. package/src/components/DataDictionary/components/Table/components/BasicCell/basicCell.tsx +6 -2
  141. package/src/components/DataDictionary/components/Title/title.styles.ts +18 -0
  142. package/src/components/DataDictionary/components/Title/title.tsx +8 -0
  143. package/src/components/DataDictionary/dataDictionary.styles.ts +17 -3
  144. package/src/components/DataDictionary/dataDictionary.tsx +26 -4
  145. package/src/components/DataDictionary/hooks/UseDataDictionary/hook.ts +2 -1
  146. package/src/components/DataDictionary/hooks/UseLayoutSpacing/hook.ts +12 -0
  147. package/src/components/DataDictionary/hooks/UseLayoutSpacing/types.ts +8 -0
  148. package/src/components/DataDictionary/types.ts +10 -0
  149. package/src/components/Error/error.tsx +3 -5
  150. package/src/components/Filter/components/SearchAllFilters/searchAllFilters.tsx +3 -3
  151. package/src/components/Index/index.tsx +3 -4
  152. package/src/components/Layout/components/ContentLayout/contentLayout.tsx +7 -9
  153. package/src/components/Layout/components/Footer/footer.styles.ts +1 -0
  154. package/src/components/Layout/components/Footer/footer.tsx +5 -0
  155. package/src/components/Layout/components/Header/header.tsx +9 -3
  156. package/src/components/Layout/components/Main/main.tsx +3 -4
  157. package/src/components/Layout/components/Outline/components/ContentsTab/contentsTab.styles.ts +2 -2
  158. package/src/components/Layout/components/Outline/components/ContentsTab/contentsTab.tsx +8 -11
  159. package/src/components/Layout/components/Outline/components/ContentsTab/types.ts +8 -0
  160. package/src/components/Layout/components/Outline/hooks/UseHash/hook.ts +17 -0
  161. package/src/components/Layout/components/Outline/hooks/UseHash/types.ts +3 -0
  162. package/src/components/Layout/components/Outline/hooks/UseTabs/constants.ts +3 -0
  163. package/src/components/Layout/components/Outline/hooks/UseTabs/hook.ts +32 -0
  164. package/src/components/Layout/components/Outline/hooks/UseTabs/utils.ts +18 -0
  165. package/src/components/Layout/components/Outline/outline.styles.ts +2 -2
  166. package/src/components/Layout/components/Outline/outline.tsx +22 -59
  167. package/src/components/Layout/components/Outline/types.ts +16 -0
  168. package/src/components/Layout/components/Sidebar/components/SidebarPositioner/sidebarPositioner.tsx +7 -6
  169. package/src/components/Login/components/Section/components/Warning/warning.tsx +3 -4
  170. package/src/components/Table/components/TableCell/components/RowPositionCell/constants.ts +2 -2
  171. package/src/components/common/AnchorLink/anchorLink.tsx +7 -0
  172. package/src/components/common/LoginDialog/constants.ts +4 -4
  173. package/src/providers/layoutDimensions/constants.ts +6 -0
  174. package/src/providers/layoutDimensions/context.tsx +10 -0
  175. package/src/providers/layoutDimensions/hook.ts +7 -0
  176. package/src/providers/layoutDimensions/provider.tsx +29 -0
  177. package/src/providers/layoutDimensions/types.ts +17 -0
  178. package/src/styles/common/mui/tab.ts +16 -0
  179. package/src/styles/common/mui/tabs.ts +20 -0
  180. package/src/styles/common/mui/typography.ts +14 -2
  181. package/lib/components/Layout/components/Header/hooks/useMeasureHeader.d.ts +0 -5
  182. package/lib/components/Layout/components/Header/hooks/useMeasureHeader.js +0 -19
  183. package/lib/components/Layout/components/Outline/common/constants.d.ts +0 -2
  184. package/lib/hooks/useLayoutState.d.ts +0 -6
  185. package/lib/hooks/useLayoutState.js +0 -9
  186. package/lib/providers/layoutState.d.ts +0 -40
  187. package/lib/providers/layoutState.js +0 -47
  188. package/src/components/Layout/components/Header/hooks/useMeasureHeader.ts +0 -28
  189. package/src/components/Layout/components/Outline/common/constants.ts +0 -3
  190. package/src/hooks/useLayoutState.ts +0 -13
  191. package/src/providers/layoutState.tsx +0 -94
  192. /package/lib/components/Layout/components/Outline/{common → hooks/UseTabs}/constants.js +0 -0
@@ -2,8 +2,8 @@ import { Divider, Typography } from "@mui/material";
2
2
  import Link from "next/link";
3
3
  import React from "react";
4
4
  import { useExploreState } from "../../hooks/useExploreState";
5
- import { useLayoutState } from "../../hooks/useLayoutState";
6
5
  import { ExploreActionKind } from "../../providers/exploreState";
6
+ import { useLayoutDimensions } from "../../providers/layoutDimensions/hook";
7
7
  import { ButtonPrimary } from "../common/Button/components/ButtonPrimary/buttonPrimary";
8
8
  import { AlertIcon } from "../common/CustomIcon/components/AlertIcon/alertIcon";
9
9
  import { Grid } from "../common/Grid/grid";
@@ -17,7 +17,7 @@ const ErrorMessage = ({ detail, title, }) => (React.createElement(Content, null,
17
17
  React.createElement(ErrorCode, null, detail))));
18
18
  export const Error = ({ errorMessage, onReset, requestUrlMessage, rootPath, }) => {
19
19
  const { exploreDispatch } = useExploreState();
20
- const { layoutState: { headerHeight }, } = useLayoutState();
20
+ const { dimensions } = useLayoutDimensions();
21
21
  const handleToHomePageClicked = () => {
22
22
  onReset?.();
23
23
  exploreDispatch({
@@ -25,7 +25,7 @@ export const Error = ({ errorMessage, onReset, requestUrlMessage, rootPath, }) =
25
25
  type: ExploreActionKind.ResetState,
26
26
  });
27
27
  };
28
- return (React.createElement(ErrorLayout, { offset: headerHeight },
28
+ return (React.createElement(ErrorLayout, { offset: dimensions.header.height },
29
29
  React.createElement(CustomError, null,
30
30
  React.createElement(ErrorSection, null,
31
31
  React.createElement(StatusIcon, { priority: PRIORITY.HIGH, StatusIcon: AlertIcon }),
@@ -1,5 +1,5 @@
1
1
  import React, { createContext, useContext, useEffect, useRef, useState, } from "react";
2
- import { BODY, SIDEBAR_POSITIONER } from "../../../../common/selectors";
2
+ import { SELECTOR } from "../../../../common/selectors";
3
3
  import { BREAKPOINT_FN_NAME, useBreakpointHelper, } from "../../../../hooks/useBreakpointHelper";
4
4
  import { DESKTOP_SM } from "../../../../theme/common/breakpoints";
5
5
  import { SearchCloseButton } from "../SearchAllFiltersSearch/components/SearchCloseButton/searchCloseButton";
@@ -35,8 +35,8 @@ export const SearchAllFilters = ({ categoryViews, drawerOpen = false, onFilter,
35
35
  const handleBackgroundScroll = (overflowStyle) => {
36
36
  if (desktopSmUp) {
37
37
  setElementsOverflowStyle([
38
- document.querySelector(BODY),
39
- document.getElementById(SIDEBAR_POSITIONER),
38
+ document.querySelector(SELECTOR.BODY),
39
+ document.getElementById(SELECTOR.SIDEBAR_POSITIONER),
40
40
  ], overflowStyle);
41
41
  }
42
42
  };
@@ -1,11 +1,10 @@
1
1
  import React from "react";
2
- import { useLayoutState } from "../../hooks/useLayoutState";
2
+ import { useLayoutDimensions } from "../../providers/layoutDimensions/hook";
3
3
  import { Hero } from "./components/Hero/hero";
4
4
  import { Index as IndexLayout } from "./index.styles";
5
5
  export const Index = ({ className, List, ListHero, SideBarButton, SubTitleHero, Summaries, Tabs, title, }) => {
6
- const { layoutState } = useLayoutState();
7
- const { headerHeight } = layoutState;
8
- return (React.createElement(IndexLayout, { className: className, marginTop: headerHeight },
6
+ const { dimensions } = useLayoutDimensions();
7
+ return (React.createElement(IndexLayout, { className: className, marginTop: dimensions.header.height },
9
8
  React.createElement(Hero, { SideBarButton: SideBarButton, Summaries: Summaries, title: title }),
10
9
  SubTitleHero,
11
10
  Tabs,
@@ -1,18 +1,18 @@
1
1
  import { useRouter } from "next/router";
2
2
  import React from "react";
3
- import { useLayoutState } from "../../../../hooks/useLayoutState";
3
+ import { useLayoutDimensions } from "../../../../providers/layoutDimensions/hook";
4
4
  import { Content, ContentGrid, ContentLayout as Layout, Navigation, NavigationGrid, Outline, OutlineGrid, Positioner, } from "./contentLayout.styles";
5
5
  export const ContentLayout = ({ className, content, layoutStyle, navigation, outline, }) => {
6
6
  const { asPath } = useRouter();
7
- const { layoutState: { headerHeight }, } = useLayoutState();
7
+ const { dimensions } = useLayoutDimensions();
8
8
  return (React.createElement(Layout, { className: className, hasNavigation: Boolean(navigation), panelColor: layoutStyle?.content },
9
- navigation && (React.createElement(NavigationGrid, { headerHeight: headerHeight, panelColor: layoutStyle?.navigation },
10
- React.createElement(Positioner, { headerHeight: headerHeight },
9
+ navigation && (React.createElement(NavigationGrid, { headerHeight: dimensions.header.height, panelColor: layoutStyle?.navigation },
10
+ React.createElement(Positioner, { headerHeight: dimensions.header.height },
11
11
  React.createElement(Navigation, null, navigation)))),
12
- React.createElement(ContentGrid, { headerHeight: headerHeight, panelColor: layoutStyle?.content },
12
+ React.createElement(ContentGrid, { headerHeight: dimensions.header.height, panelColor: layoutStyle?.content },
13
13
  React.createElement(Content, null, content)),
14
- outline && (React.createElement(OutlineGrid, { key: getOutlineKey(asPath), headerHeight: headerHeight, panelColor: layoutStyle?.outline },
15
- React.createElement(Positioner, { headerHeight: headerHeight },
14
+ outline && (React.createElement(OutlineGrid, { key: getOutlineKey(asPath), headerHeight: dimensions.header.height, panelColor: layoutStyle?.outline },
15
+ React.createElement(Positioner, { headerHeight: dimensions.header.height },
16
16
  React.createElement(Outline, null, outline))))));
17
17
  };
18
18
  /**
@@ -1,11 +1,14 @@
1
1
  import { Toolbar } from "@mui/material";
2
2
  import React from "react";
3
+ import { SELECTOR } from "../../../../common/selectors";
4
+ import { useLayoutDimensions } from "../../../../providers/layoutDimensions/hook";
3
5
  import { ANCHOR_TARGET } from "../../../Links/common/entities";
4
6
  import { isNodeBoolean } from "../../../utils";
5
7
  import { VersionInfo } from "./components/VersionInfo/versionInfo";
6
8
  import { AppBar, Link, Links, Socials } from "./footer.styles";
7
9
  export const Footer = ({ Branding, className, navLinks, socials, versionInfo, }) => {
8
- return (React.createElement(AppBar, { className: className, color: "inherit", component: "footer", variant: "footer" },
10
+ const { footerRef } = useLayoutDimensions();
11
+ return (React.createElement(AppBar, { className: className, color: "inherit", component: "footer", id: SELECTOR.FOOTER, ref: footerRef, variant: "footer" },
9
12
  React.createElement(Toolbar, { variant: "dense" },
10
13
  Branding,
11
14
  (navLinks || socials || versionInfo) && (React.createElement(Links, null,
@@ -7,6 +7,7 @@ import { Socials as DXSocials } from "../../../common/Socials/socials";
7
7
  import { Link as DXLink } from "../../../Links/components/Link/link";
8
8
  export const AppBar = styled(MAppBar) `
9
9
  padding: 16px 0;
10
+ z-index: 1; /* required for outline or navigation overflow */
10
11
 
11
12
  .MuiToolbar-root {
12
13
  align-items: flex-start;
@@ -1,6 +1,8 @@
1
1
  import { Fade, Toolbar } from "@mui/material";
2
2
  import { usePathname } from "next/navigation";
3
3
  import React from "react";
4
+ import { SELECTOR } from "../../../../common/selectors";
5
+ import { useLayoutDimensions } from "../../../../providers/layoutDimensions/hook";
4
6
  import { APP_BAR_PROPS, FADE_TRANSITION_PROPS, TOOLBAR_PROPS, } from "./common/constants";
5
7
  import { Announcements } from "./components/Announcements/announcements";
6
8
  import { Actions } from "./components/Content/components/Actions/actions";
@@ -15,12 +17,11 @@ import { Socials } from "./components/Content/components/Socials/socials.styles"
15
17
  import { AppBar, Center, Left, Right } from "./header.styles";
16
18
  import { useHeaderNavigation } from "./hooks/useHeaderNavigation";
17
19
  import { useHeaderVisibility } from "./hooks/useHeaderVisibility";
18
- import { useMeasureHeader } from "./hooks/useMeasureHeader";
19
20
  import { useMenu } from "./hooks/useMenu";
20
21
  export const Header = ({ ...headerProps }) => {
21
22
  const { navigation } = useHeaderNavigation(headerProps);
22
23
  const { isIn } = useHeaderVisibility({ ...headerProps, navigation });
23
- const { headerRef } = useMeasureHeader();
24
+ const { headerRef } = useLayoutDimensions();
24
25
  const { onClose, onOpen, open } = useMenu();
25
26
  const pathname = usePathname() ?? "";
26
27
  const { actions, announcements, authenticationEnabled, className, logo, searchEnabled, searchURL, slogan, socialMedia, } = headerProps;
@@ -29,7 +30,7 @@ export const Header = ({ ...headerProps }) => {
29
30
  headerProps: { ...headerProps, navigation },
30
31
  pathname,
31
32
  };
32
- return (React.createElement(AppBar, { ...APP_BAR_PROPS, ref: headerRef, className: className },
33
+ return (React.createElement(AppBar, { ...APP_BAR_PROPS, className: className, id: SELECTOR.HEADER, ref: headerRef },
33
34
  React.createElement(Announcements, { announcements: announcements }),
34
35
  React.createElement(Toolbar, { ...TOOLBAR_PROPS },
35
36
  React.createElement(Fade, { ...FADE_TRANSITION_PROPS, in: isIn.isLeftGroupIn },
@@ -1,8 +1,7 @@
1
1
  import React from "react";
2
- import { useLayoutState } from "../../../../hooks/useLayoutState";
2
+ import { useLayoutDimensions } from "../../../../providers/layoutDimensions/hook";
3
3
  import { MainWithOffset } from "./main.styles";
4
4
  export const Main = ({ children, className }) => {
5
- const { layoutState } = useLayoutState();
6
- const { headerHeight } = layoutState;
7
- return (React.createElement(MainWithOffset, { className: className, offset: headerHeight }, children));
5
+ const { dimensions } = useLayoutDimensions();
6
+ return (React.createElement(MainWithOffset, { className: className, offset: dimensions.header.height }, children));
8
7
  };
@@ -1,6 +1,2 @@
1
- import { TabProps as MTabProps } from "@mui/material";
2
- export interface ContentsTabProps extends Omit<MTabProps, "value"> {
3
- className?: string;
4
- value: string;
5
- }
1
+ import { ContentsTabProps } from "./types";
6
2
  export declare const ContentsTab: ({ className, value, ...props }: ContentsTabProps) => JSX.Element;
@@ -1,6 +1,8 @@
1
1
  import React from "react";
2
+ import { FONT_SIZE } from "../../../../../../styles/common/mui/icon";
3
+ import { TAB_PROPS } from "../../../../../../styles/common/mui/tab";
2
4
  import { Segment } from "../../../../../common/CustomIcon/components/Segment/segment";
3
- import { Tab } from "./contentsTab.styles";
4
- export const ContentsTab = ({ className, value, ...props /* Spread props to allow for Mui Tab specific prop overrides. */ }) => {
5
- return (React.createElement(Tab, { className: className, label: "Contents", icon: React.createElement(Segment, { fontSize: "small" }), iconPosition: "start", value: value, ...props }));
5
+ import { StyledTab } from "./contentsTab.styles";
6
+ export const ContentsTab = ({ className, value, ...props /* MuiTabProps. */ }) => {
7
+ return (React.createElement(StyledTab, { className: className, label: "Contents", icon: React.createElement(Segment, { fontSize: FONT_SIZE.SMALL }), iconPosition: TAB_PROPS.ICON_POSITION.START, value: value, ...props }));
6
8
  };
@@ -1,4 +1,4 @@
1
- export declare const Tab: import("@emotion/styled").StyledComponent<import("@mui/material").TabOwnProps & Omit<import("@mui/material").ButtonBaseOwnProps, "classes"> & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
1
+ export declare const StyledTab: import("@emotion/styled").StyledComponent<import("@mui/material").TabOwnProps & Omit<import("@mui/material").ButtonBaseOwnProps, "classes"> & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
2
2
  ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
3
3
  }, "label" | "style" | "className" | "classes" | "tabIndex" | "children" | "sx" | "disabled" | "value" | "action" | "icon" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "wrapped" | "iconPosition"> & {
4
4
  theme?: import("@emotion/react").Theme;
@@ -1,9 +1,9 @@
1
1
  import styled from "@emotion/styled";
2
- import { Tab as MTab } from "@mui/material";
2
+ import { Tab } from "@mui/material";
3
3
  import { inkLight } from "../../../../../../styles/common/mixins/colors";
4
4
  import { textUppercase500 } from "../../../../../../styles/common/mixins/fonts";
5
5
  import { tab } from "../../outline.styles";
6
- export const Tab = styled(MTab) `
6
+ export const StyledTab = styled(Tab) `
7
7
  ${tab};
8
8
 
9
9
  && {
@@ -0,0 +1,5 @@
1
+ import { TabProps } from "@mui/material";
2
+ import { BaseComponentProps } from "../../../../../types";
3
+ export interface ContentsTabProps extends BaseComponentProps, Omit<TabProps, "value"> {
4
+ value: string;
5
+ }
@@ -0,0 +1,11 @@
1
+ import { UseHash } from "./types";
2
+ /**
3
+ * Hook to get the current URL hash without the leading '#' character.
4
+ *
5
+ * @description
6
+ * Extracts the hash from window.location.hash and removes the leading '#'.
7
+ * Returns empty string when running in SSR environment.
8
+ *
9
+ * @returns Object containing the hash without leading '#', or empty string if SSR.
10
+ */
11
+ export declare function useHash(): UseHash;
@@ -0,0 +1,16 @@
1
+ import { isSSR } from "../../../../../../utils/ssr";
2
+ /**
3
+ * Hook to get the current URL hash without the leading '#' character.
4
+ *
5
+ * @description
6
+ * Extracts the hash from window.location.hash and removes the leading '#'.
7
+ * Returns empty string when running in SSR environment.
8
+ *
9
+ * @returns Object containing the hash without leading '#', or empty string if SSR.
10
+ */
11
+ export function useHash() {
12
+ if (isSSR())
13
+ return { hash: "" };
14
+ const { hash } = window.location;
15
+ return { hash: hash.replace(/^#/, "") };
16
+ }
@@ -0,0 +1,3 @@
1
+ export interface UseHash {
2
+ hash: string;
3
+ }
@@ -0,0 +1,2 @@
1
+ import { TabProps } from "@mui/material";
2
+ export declare const DEFAULT_TAB_VALUE: TabProps["value"];
@@ -0,0 +1,3 @@
1
+ import { TabsProps } from "@mui/material";
2
+ import { OutlineItem } from "../../types";
3
+ export declare function useTabs(outline: OutlineItem[]): Pick<TabsProps, "indicatorColor" | "onChange" | "orientation" | "value">;
@@ -0,0 +1,24 @@
1
+ import Router from "next/router";
2
+ import { useCallback, useEffect, useState } from "react";
3
+ import { TABS_PROPS } from "../../../../../../styles/common/mui/tabs";
4
+ import { useHash } from "../UseHash/hook";
5
+ import { DEFAULT_TAB_VALUE } from "./constants";
6
+ import { getNextValue } from "./utils";
7
+ export function useTabs(outline) {
8
+ const [value, setValue] = useState(DEFAULT_TAB_VALUE);
9
+ const { hash } = useHash();
10
+ const onChange = useCallback((_event, hash) => {
11
+ Router.push({ hash });
12
+ }, []);
13
+ useEffect(() => {
14
+ setValue(getNextValue(hash, outline));
15
+ }, [hash, outline]);
16
+ return {
17
+ indicatorColor: value
18
+ ? TABS_PROPS.INDICATOR_COLOR.PRIMARY
19
+ : TABS_PROPS.INDICATOR_COLOR.TRANSPARENT,
20
+ onChange,
21
+ orientation: TABS_PROPS.ORIENTATION.VERTICAL,
22
+ value,
23
+ };
24
+ }
@@ -0,0 +1,9 @@
1
+ import { TabsProps } from "@mui/material";
2
+ import { OutlineItem } from "../../types";
3
+ /**
4
+ * Returns the tab value for navigation.
5
+ * @param hash - The current hash from the URL.
6
+ * @param outlineItems - Outline items.
7
+ * @returns The item's hash if found and enabled, otherwise returns the default tab value.
8
+ */
9
+ export declare function getNextValue(hash: string, outlineItems: OutlineItem[]): TabsProps["value"];
@@ -0,0 +1,13 @@
1
+ import { DEFAULT_TAB_VALUE } from "./constants";
2
+ /**
3
+ * Returns the tab value for navigation.
4
+ * @param hash - The current hash from the URL.
5
+ * @param outlineItems - Outline items.
6
+ * @returns The item's hash if found and enabled, otherwise returns the default tab value.
7
+ */
8
+ export function getNextValue(hash, outlineItems) {
9
+ const item = outlineItems.find((item) => item.hash === hash);
10
+ if (!item || item.disabled)
11
+ return DEFAULT_TAB_VALUE;
12
+ return item.hash;
13
+ }
@@ -1,13 +1,2 @@
1
- import { ElementType } from "react";
2
- import { ContentsTabProps } from "./components/ContentsTab/contentsTab";
3
- export interface OutlineItem {
4
- depth: number;
5
- hash: string;
6
- value: string;
7
- }
8
- export interface OutlineProps {
9
- className?: string;
10
- Contents: ElementType<ContentsTabProps>;
11
- outline: OutlineItem[];
12
- }
13
- export declare const Outline: ({ className, Contents, outline, ...props }: OutlineProps) => JSX.Element;
1
+ import { OutlineProps } from "./types";
2
+ export declare const Outline: ({ className, Contents, outline, ...props }: OutlineProps) => JSX.Element | null;
@@ -1,34 +1,10 @@
1
- import { useRouter } from "next/router";
2
- import React, { useEffect, useState } from "react";
3
- import { DEFAULT_TAB_VALUE } from "./common/constants";
4
- import { Tab, Tabs } from "./outline.styles";
5
- export const Outline = ({ className, Contents, outline, ...props /* Spread props to allow for Mui Tabs specific prop overrides. */ }) => {
6
- const { asPath, push } = useRouter();
7
- const [activeTab, setActiveTab] = useState("");
8
- // Callback fired when selected tab value changes.
9
- const handleChange = (_event, tabValue) => {
10
- push(`#${tabValue}`);
11
- };
12
- // Update active tab when path changes.
13
- useEffect(() => {
14
- setActiveTab(getActiveTab(outline, asPath));
15
- }, [asPath, outline]);
16
- return (React.createElement(Tabs, { className: className, indicatorColor: activeTab ? "primary" : "transparent", onChange: handleChange, orientation: "vertical", value: activeTab, ...props },
1
+ import React from "react";
2
+ import { DEFAULT_TAB_VALUE } from "./hooks/UseTabs/constants";
3
+ import { useTabs } from "./hooks/UseTabs/hook";
4
+ import { StyledTab, StyledTabs } from "./outline.styles";
5
+ export const Outline = ({ className, Contents, outline, ...props /* MuiTabsProps */ }) => {
6
+ const { indicatorColor, onChange, orientation, value } = useTabs(outline);
7
+ return (React.createElement(StyledTabs, { className: className, indicatorColor: indicatorColor, onChange: onChange, orientation: orientation, value: value, ...props },
17
8
  React.createElement(Contents, { value: DEFAULT_TAB_VALUE }),
18
- outline.map(({ depth, hash, value }) => (React.createElement(Tab, { key: hash, depth: depth, label: value, value: hash })))));
9
+ outline.map(({ depth, disabled, hash, value }) => (React.createElement(StyledTab, { depth: depth, disabled: disabled, key: hash, label: value, value: hash })))));
19
10
  };
20
- /**
21
- * Initializes active tab.
22
- * @param outline - Outline items.
23
- * @param asPath - Current path.
24
- * @returns active tab.
25
- */
26
- function getActiveTab(outline, asPath) {
27
- if (asPath.includes("#")) {
28
- const hashLink = asPath.split("#")[1];
29
- if (outline.some(({ hash }) => hash === hashLink)) {
30
- return hashLink;
31
- }
32
- }
33
- return DEFAULT_TAB_VALUE;
34
- }
@@ -3,12 +3,12 @@ interface Props extends TabProps {
3
3
  depth: number;
4
4
  }
5
5
  export declare const tab: import("@emotion/react").SerializedStyles;
6
- export declare const Tabs: import("@emotion/styled").StyledComponent<import("@mui/material").TabsOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
6
+ export declare const StyledTabs: import("@emotion/styled").StyledComponent<import("@mui/material").TabsOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
7
7
  ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
8
8
  }, "style" | "className" | "classes" | "aria-label" | "aria-labelledby" | "children" | "onChange" | "sx" | "variant" | "orientation" | "value" | "action" | "slotProps" | "slots" | "allowScrollButtonsMobile" | "centered" | "indicatorColor" | "ScrollButtonComponent" | "scrollButtons" | "selectionFollowsFocus" | "TabIndicatorProps" | "TabScrollButtonProps" | "textColor" | "visibleScrollbar"> & {
9
9
  theme?: import("@emotion/react").Theme;
10
10
  }, {}, {}>;
11
- export declare const Tab: import("@emotion/styled").StyledComponent<import("@mui/material").TabOwnProps & Omit<import("@mui/material").ButtonBaseOwnProps, "classes"> & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
11
+ export declare const StyledTab: import("@emotion/styled").StyledComponent<import("@mui/material").TabOwnProps & Omit<import("@mui/material").ButtonBaseOwnProps, "classes"> & import("@mui/material/OverridableComponent").CommonProps & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
12
12
  ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
13
13
  }, "label" | "style" | "className" | "classes" | "tabIndex" | "children" | "sx" | "disabled" | "value" | "action" | "icon" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "wrapped" | "iconPosition"> & {
14
14
  theme?: import("@emotion/react").Theme;
@@ -15,7 +15,7 @@ export const tab = css `
15
15
  text-decoration: none;
16
16
  }
17
17
  `;
18
- export const Tabs = styled(MTabs) `
18
+ export const StyledTabs = styled(MTabs) `
19
19
  align-self: flex-start;
20
20
  box-shadow: inset 1px 0 ${smokeMain};
21
21
  margin: 0;
@@ -36,7 +36,7 @@ export const Tabs = styled(MTabs) `
36
36
  width: 3px;
37
37
  }
38
38
  `;
39
- export const Tab = styled(MTab, {
39
+ export const StyledTab = styled(MTab, {
40
40
  shouldForwardProp: (prop) => prop !== "depth",
41
41
  }) `
42
42
  ${tab};
@@ -0,0 +1,14 @@
1
+ import { TabsProps } from "@mui/material";
2
+ import { ElementType } from "react";
3
+ import { BaseComponentProps } from "../../../types";
4
+ import { ContentsTabProps } from "./components/ContentsTab/types";
5
+ export interface OutlineItem {
6
+ depth: number;
7
+ disabled?: boolean;
8
+ hash: string;
9
+ value: string;
10
+ }
11
+ export interface OutlineProps extends BaseComponentProps, TabsProps {
12
+ Contents: ElementType<ContentsTabProps>;
13
+ outline: OutlineItem[];
14
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
- import { SIDEBAR_POSITIONER } from "../../../../../../common/selectors";
3
- import { useLayoutState } from "../../../../../../hooks/useLayoutState";
2
+ import { SELECTOR } from "../../../../../../common/selectors";
3
+ import { useLayoutDimensions } from "../../../../../../providers/layoutDimensions/hook";
4
4
  import { SidebarPositioner as Positioner } from "./sidebarPositioner.styles";
5
5
  export const SidebarPositioner = ({ children, }) => {
6
- const { layoutState: { headerHeight }, } = useLayoutState();
7
- return (React.createElement(Positioner, { headerHeight: headerHeight, id: SIDEBAR_POSITIONER }, children));
6
+ const { dimensions } = useLayoutDimensions();
7
+ return (React.createElement(Positioner, { headerHeight: dimensions.header.height, id: SELECTOR.SIDEBAR_POSITIONER }, children));
8
8
  };
@@ -1,9 +1,8 @@
1
1
  import { Typography } from "@mui/material";
2
2
  import React from "react";
3
- import { COLOR } from "../../../../../../styles/common/mui/typography";
4
- import { TEXT_BODY_SMALL_400 } from "../../../../../../theme/common/typography";
3
+ import { TYPOGRAPHY_PROPS } from "../../../../../../styles/common/mui/typography";
5
4
  export const Warning = ({ children, className, ...props /* Mui TypographyOwnProps */ }) => {
6
5
  if (!children)
7
6
  return null;
8
- return (React.createElement(Typography, { className: className, color: COLOR.INK_LIGHT, mt: 6, variant: TEXT_BODY_SMALL_400, ...props }, children));
7
+ return (React.createElement(Typography, { className: className, color: TYPOGRAPHY_PROPS.COLOR.INK_LIGHT, mt: 6, variant: TYPOGRAPHY_PROPS.VARIANT.TEXT_BODY_SMALL_400, ...props }, children));
9
8
  };
@@ -1,5 +1,5 @@
1
- import { VARIANT } from "../../../../../../styles/common/mui/typography";
1
+ import { TYPOGRAPHY_PROPS as MUI_TYPOGRAPHY_PROPS } from "../../../../../../styles/common/mui/typography";
2
2
  export const TYPOGRAPHY_PROPS = {
3
3
  sx: { marginRight: -2, paddingLeft: 2 },
4
- variant: VARIANT.INHERIT,
4
+ variant: MUI_TYPOGRAPHY_PROPS.VARIANT.INHERIT,
5
5
  };
@@ -1,3 +1,9 @@
1
+ /**
2
+ * An anchor link component that provides deep linking functionality.
3
+ * @important The parent element must have `position: relative` CSS property
4
+ * to ensure proper positioning of the anchor link icon, and hover pseudo-class
5
+ * to change opacity of the icon.
6
+ */
1
7
  interface AnchorLinkProps {
2
8
  anchorLink: string;
3
9
  className?: string;
@@ -1,15 +1,15 @@
1
1
  import { FONT_SIZE } from "../../../styles/common/mui/icon";
2
- import { COLOR, VARIANT } from "../../../styles/common/mui/typography";
2
+ import { TYPOGRAPHY_PROPS } from "../../../styles/common/mui/typography";
3
3
  export const DIALOG_CONTENT_TEXT_PROPS = {
4
- color: COLOR.INK_LIGHT,
4
+ color: TYPOGRAPHY_PROPS.COLOR.INK_LIGHT,
5
5
  component: "div",
6
- variant: VARIANT.TEXT_BODY_400,
6
+ variant: TYPOGRAPHY_PROPS.VARIANT.TEXT_BODY_400,
7
7
  };
8
8
  export const DIALOG_PROPS = {
9
9
  PaperProps: { elevation: 0 },
10
10
  };
11
11
  export const DIALOG_TITLE_PROPS = {
12
- variant: VARIANT.TEXT_HEADING_SMALL,
12
+ variant: TYPOGRAPHY_PROPS.VARIANT.TEXT_HEADING_SMALL,
13
13
  };
14
14
  export const ICON_BUTTON_PROPS = {
15
15
  color: "inkLight",
@@ -0,0 +1,2 @@
1
+ import { LayoutDimensions } from "./types";
2
+ export declare const DEFAULT_LAYOUT_DIMENSIONS: LayoutDimensions;
@@ -0,0 +1,4 @@
1
+ export const DEFAULT_LAYOUT_DIMENSIONS = {
2
+ footer: { height: 0 },
3
+ header: { height: 0 },
4
+ };
@@ -0,0 +1,2 @@
1
+ import { LayoutDimensionsContextProps } from "./types";
2
+ export declare const LayoutDimensionsContext: import("react").Context<LayoutDimensionsContextProps>;
@@ -0,0 +1,7 @@
1
+ import { createContext } from "react";
2
+ import { DEFAULT_LAYOUT_DIMENSIONS } from "./constants";
3
+ export const LayoutDimensionsContext = createContext({
4
+ dimensions: DEFAULT_LAYOUT_DIMENSIONS,
5
+ footerRef: null,
6
+ headerRef: null,
7
+ });
@@ -0,0 +1,2 @@
1
+ import { LayoutDimensionsContextProps } from "./types";
2
+ export declare const useLayoutDimensions: () => LayoutDimensionsContextProps;
@@ -0,0 +1,5 @@
1
+ import { useContext } from "react";
2
+ import { LayoutDimensionsContext } from "./context";
3
+ export const useLayoutDimensions = () => {
4
+ return useContext(LayoutDimensionsContext);
5
+ };
@@ -0,0 +1,2 @@
1
+ import { LayoutDimensionsProviderProps } from "./types";
2
+ export declare const LayoutDimensionsProvider: ({ children, }: LayoutDimensionsProviderProps) => JSX.Element;
@@ -0,0 +1,14 @@
1
+ import React, { useRef } from "react";
2
+ import { getBorderBoxSizeHeight, useResizeObserver, } from "../../hooks/useResizeObserver";
3
+ import { LayoutDimensionsContext } from "./context";
4
+ export const LayoutDimensionsProvider = ({ children, }) => {
5
+ const footerRef = useRef(null);
6
+ const headerRef = useRef(null);
7
+ const footerRect = useResizeObserver(footerRef, getBorderBoxSizeHeight);
8
+ const headerRect = useResizeObserver(headerRef, getBorderBoxSizeHeight);
9
+ const dimensions = {
10
+ footer: { height: footerRect?.height ?? 0 },
11
+ header: { height: headerRect?.height ?? 0 },
12
+ };
13
+ return (React.createElement(LayoutDimensionsContext.Provider, { value: { dimensions, footerRef, headerRef } }, children));
14
+ };
@@ -0,0 +1,14 @@
1
+ import { ReactNode, RefObject } from "react";
2
+ import { ElementRect } from "../../hooks/useResizeObserver";
3
+ export interface LayoutDimensions {
4
+ footer: Pick<ElementRect, "height">;
5
+ header: Pick<ElementRect, "height">;
6
+ }
7
+ export interface LayoutDimensionsContextProps {
8
+ dimensions: LayoutDimensions;
9
+ footerRef: RefObject<HTMLElement> | null;
10
+ headerRef: RefObject<HTMLElement> | null;
11
+ }
12
+ export interface LayoutDimensionsProviderProps {
13
+ children: ReactNode | ReactNode[];
14
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import { TabProps } from "@mui/material";
2
+ type TabPropsOptions = {
3
+ ICON_POSITION: typeof ICON_POSITION;
4
+ };
5
+ declare const ICON_POSITION: Record<string, TabProps["iconPosition"]>;
6
+ export declare const TAB_PROPS: TabPropsOptions;
7
+ export {};
@@ -0,0 +1,9 @@
1
+ const ICON_POSITION = {
2
+ BOTTOM: "bottom",
3
+ END: "end",
4
+ START: "start",
5
+ TOP: "top",
6
+ };
7
+ export const TAB_PROPS = {
8
+ ICON_POSITION,
9
+ };
@@ -0,0 +1,9 @@
1
+ import { TabsProps } from "@mui/material";
2
+ type TabsPropsOptions = {
3
+ INDICATOR_COLOR: typeof INDICATOR_COLOR;
4
+ ORIENTATION: typeof ORIENTATION;
5
+ };
6
+ declare const INDICATOR_COLOR: Record<string, TabsProps["indicatorColor"]>;
7
+ declare const ORIENTATION: Record<string, TabsProps["orientation"]>;
8
+ export declare const TABS_PROPS: TabsPropsOptions;
9
+ export {};