@servicetitan/navigation 11.0.0-canary.237.c90556e.0 → 11.0.0-canary.237.dd4db7e.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 (283) hide show
  1. package/dist/components/badge-tag.d.ts +12 -0
  2. package/dist/components/badge-tag.d.ts.map +1 -0
  3. package/dist/components/badge-tag.js +8 -0
  4. package/dist/components/badge-tag.js.map +1 -0
  5. package/dist/components/counter-tag.d.ts +12 -0
  6. package/dist/components/counter-tag.d.ts.map +1 -0
  7. package/dist/components/counter-tag.js +8 -0
  8. package/dist/components/counter-tag.js.map +1 -0
  9. package/dist/components/header-navigation/header-navigation-content.d.ts +30 -0
  10. package/dist/components/header-navigation/header-navigation-content.d.ts.map +1 -0
  11. package/dist/components/header-navigation/header-navigation-content.js +22 -0
  12. package/dist/components/header-navigation/header-navigation-content.js.map +1 -0
  13. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts +9 -0
  14. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts.map +1 -0
  15. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.js +13 -0
  16. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.js.map +1 -0
  17. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts +12 -0
  18. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts.map +1 -0
  19. package/dist/components/header-navigation/header-navigation-extra.stories.js +29 -0
  20. package/dist/components/header-navigation/header-navigation-extra.stories.js.map +1 -0
  21. package/dist/components/header-navigation/header-navigation-links.d.ts +11 -0
  22. package/dist/components/header-navigation/header-navigation-links.d.ts.map +1 -0
  23. package/dist/components/header-navigation/header-navigation-links.js +26 -0
  24. package/dist/components/header-navigation/header-navigation-links.js.map +1 -0
  25. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts +12 -0
  26. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts.map +1 -0
  27. package/dist/components/header-navigation/header-navigation-stacked.stories.js +50 -0
  28. package/dist/components/header-navigation/header-navigation-stacked.stories.js.map +1 -0
  29. package/dist/components/header-navigation/header-navigation-stories.module.less +6 -0
  30. package/dist/components/header-navigation/header-navigation.d.ts +59 -0
  31. package/dist/components/header-navigation/header-navigation.d.ts.map +1 -0
  32. package/dist/components/header-navigation/header-navigation.js +96 -0
  33. package/dist/components/header-navigation/header-navigation.js.map +1 -0
  34. package/dist/components/header-navigation/header-navigation.module.less +260 -0
  35. package/dist/components/header-navigation/header-navigation.stories.d.ts +12 -0
  36. package/dist/components/header-navigation/header-navigation.stories.d.ts.map +1 -0
  37. package/dist/components/header-navigation/header-navigation.stories.js +54 -0
  38. package/dist/components/header-navigation/header-navigation.stories.js.map +1 -0
  39. package/dist/components/header-navigation/index.d.ts +2 -0
  40. package/dist/components/header-navigation/index.d.ts.map +1 -0
  41. package/dist/components/header-navigation/index.js +2 -0
  42. package/dist/components/header-navigation/index.js.map +1 -0
  43. package/dist/components/header-navigation/with-tooltip.d.ts +4 -0
  44. package/dist/components/header-navigation/with-tooltip.d.ts.map +1 -0
  45. package/dist/components/header-navigation/with-tooltip.js +4 -0
  46. package/dist/components/header-navigation/with-tooltip.js.map +1 -0
  47. package/dist/components/layout.stories.d.ts +13 -0
  48. package/dist/components/layout.stories.d.ts.map +1 -0
  49. package/dist/components/layout.stories.js +29 -0
  50. package/dist/components/layout.stories.js.map +1 -0
  51. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts +9 -0
  52. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts.map +1 -0
  53. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.js +13 -0
  54. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.js.map +1 -0
  55. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts +18 -0
  56. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts.map +1 -0
  57. package/dist/components/left-navigation/header-navigation-tiny-links.js +32 -0
  58. package/dist/components/left-navigation/header-navigation-tiny-links.js.map +1 -0
  59. package/dist/components/left-navigation/header-navigation-tiny.d.ts +23 -0
  60. package/dist/components/left-navigation/header-navigation-tiny.d.ts.map +1 -0
  61. package/dist/components/left-navigation/header-navigation-tiny.js +7 -0
  62. package/dist/components/left-navigation/header-navigation-tiny.js.map +1 -0
  63. package/dist/components/left-navigation/header-navigation-tiny.module.less +117 -0
  64. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts +12 -0
  65. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts.map +1 -0
  66. package/dist/components/left-navigation/header-navigation-tiny.stories.js +30 -0
  67. package/dist/components/left-navigation/header-navigation-tiny.stories.js.map +1 -0
  68. package/dist/components/left-navigation/index.d.ts +5 -0
  69. package/dist/components/left-navigation/index.d.ts.map +1 -0
  70. package/dist/components/left-navigation/index.js +5 -0
  71. package/dist/components/left-navigation/index.js.map +1 -0
  72. package/dist/components/left-navigation/interface-internal.d.ts +10 -0
  73. package/dist/components/left-navigation/interface-internal.d.ts.map +1 -0
  74. package/dist/components/left-navigation/interface-internal.js +2 -0
  75. package/dist/components/left-navigation/interface-internal.js.map +1 -0
  76. package/dist/components/left-navigation/interface.d.ts +20 -0
  77. package/dist/components/left-navigation/interface.d.ts.map +1 -0
  78. package/dist/components/left-navigation/interface.js +2 -0
  79. package/dist/components/left-navigation/interface.js.map +1 -0
  80. package/dist/components/left-navigation/side-navigation-context.d.ts +8 -0
  81. package/dist/components/left-navigation/side-navigation-context.d.ts.map +1 -0
  82. package/dist/components/left-navigation/side-navigation-context.js +7 -0
  83. package/dist/components/left-navigation/side-navigation-context.js.map +1 -0
  84. package/dist/components/left-navigation/side-navigation-links-internal.d.ts +28 -0
  85. package/dist/components/left-navigation/side-navigation-links-internal.d.ts.map +1 -0
  86. package/dist/components/left-navigation/side-navigation-links-internal.js +29 -0
  87. package/dist/components/left-navigation/side-navigation-links-internal.js.map +1 -0
  88. package/dist/components/left-navigation/side-navigation-links.d.ts +6 -0
  89. package/dist/components/left-navigation/side-navigation-links.d.ts.map +1 -0
  90. package/dist/components/left-navigation/side-navigation-links.js +27 -0
  91. package/dist/components/left-navigation/side-navigation-links.js.map +1 -0
  92. package/dist/components/left-navigation/side-navigation.d.ts +29 -0
  93. package/dist/components/left-navigation/side-navigation.d.ts.map +1 -0
  94. package/dist/components/left-navigation/side-navigation.js +182 -0
  95. package/dist/components/left-navigation/side-navigation.js.map +1 -0
  96. package/dist/components/left-navigation/side-navigation.module.less +530 -0
  97. package/dist/components/left-navigation/side-navigation.stories.d.ts +17 -0
  98. package/dist/components/left-navigation/side-navigation.stories.d.ts.map +1 -0
  99. package/dist/components/left-navigation/side-navigation.stories.js +115 -0
  100. package/dist/components/left-navigation/side-navigation.stories.js.map +1 -0
  101. package/dist/components/left-navigation/with-tooltip.d.ts +4 -0
  102. package/dist/components/left-navigation/with-tooltip.d.ts.map +1 -0
  103. package/dist/components/left-navigation/with-tooltip.js +4 -0
  104. package/dist/components/left-navigation/with-tooltip.js.map +1 -0
  105. package/dist/components/links.d.ts +5 -0
  106. package/dist/components/links.d.ts.map +1 -0
  107. package/dist/components/links.js +14 -0
  108. package/dist/components/links.js.map +1 -0
  109. package/dist/components/logo/logo-company-title.d.ts +8 -0
  110. package/dist/components/logo/logo-company-title.d.ts.map +1 -0
  111. package/dist/components/logo/logo-company-title.js +6 -0
  112. package/dist/components/logo/logo-company-title.js.map +1 -0
  113. package/dist/components/logo/logo-titan-text.d.ts +29 -0
  114. package/dist/components/logo/logo-titan-text.d.ts.map +1 -0
  115. package/dist/components/logo/logo-titan-text.js +13 -0
  116. package/dist/components/logo/logo-titan-text.js.map +1 -0
  117. package/dist/components/logo/logo-titan-text.module.less +31 -0
  118. package/dist/components/logo/logo-titan.d.ts +9 -0
  119. package/dist/components/logo/logo-titan.d.ts.map +1 -0
  120. package/dist/components/logo/logo-titan.js +13 -0
  121. package/dist/components/logo/logo-titan.js.map +1 -0
  122. package/dist/components/logo/logo.stories.d.ts +14 -0
  123. package/dist/components/logo/logo.stories.d.ts.map +1 -0
  124. package/dist/components/logo/logo.stories.js +20 -0
  125. package/dist/components/logo/logo.stories.js.map +1 -0
  126. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts +9 -0
  127. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts.map +1 -0
  128. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.js +13 -0
  129. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.js.map +1 -0
  130. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts +9 -0
  131. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts.map +1 -0
  132. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.js +13 -0
  133. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.js.map +1 -0
  134. package/dist/components/profile-dropdown/profile-dropdown.d.ts +80 -0
  135. package/dist/components/profile-dropdown/profile-dropdown.d.ts.map +1 -0
  136. package/dist/components/profile-dropdown/profile-dropdown.js +85 -0
  137. package/dist/components/profile-dropdown/profile-dropdown.js.map +1 -0
  138. package/dist/components/profile-dropdown/profile-dropdown.module.less +173 -0
  139. package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts +16 -0
  140. package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts.map +1 -0
  141. package/dist/components/profile-dropdown/profile-dropdown.stories.js +51 -0
  142. package/dist/components/profile-dropdown/profile-dropdown.stories.js.map +1 -0
  143. package/dist/components/profile-dropdown/profile-icon.d.ts +3 -0
  144. package/dist/components/profile-dropdown/profile-icon.d.ts.map +1 -0
  145. package/dist/components/profile-dropdown/profile-icon.js +5 -0
  146. package/dist/components/profile-dropdown/profile-icon.js.map +1 -0
  147. package/dist/components/titan-layout/index.d.ts +6 -0
  148. package/dist/components/titan-layout/index.d.ts.map +1 -0
  149. package/dist/components/titan-layout/index.js +6 -0
  150. package/dist/components/titan-layout/index.js.map +1 -0
  151. package/dist/components/titan-layout/interface-internal.d.ts +6 -0
  152. package/dist/components/titan-layout/interface-internal.d.ts.map +1 -0
  153. package/dist/components/titan-layout/interface-internal.js +2 -0
  154. package/dist/components/titan-layout/interface-internal.js.map +1 -0
  155. package/dist/components/titan-layout/interface.d.ts +21 -0
  156. package/dist/components/titan-layout/interface.d.ts.map +1 -0
  157. package/dist/components/titan-layout/interface.js +2 -0
  158. package/dist/components/titan-layout/interface.js.map +1 -0
  159. package/dist/components/titan-layout/layout-context.d.ts +20 -0
  160. package/dist/components/titan-layout/layout-context.d.ts.map +1 -0
  161. package/dist/components/titan-layout/layout-context.js +12 -0
  162. package/dist/components/titan-layout/layout-context.js.map +1 -0
  163. package/dist/components/titan-layout/layout-header-links.d.ts +7 -0
  164. package/dist/components/titan-layout/layout-header-links.d.ts.map +1 -0
  165. package/dist/components/titan-layout/layout-header-links.js +32 -0
  166. package/dist/components/titan-layout/layout-header-links.js.map +1 -0
  167. package/dist/components/titan-layout/layout-header.d.ts +22 -0
  168. package/dist/components/titan-layout/layout-header.d.ts.map +1 -0
  169. package/dist/components/titan-layout/layout-header.js +10 -0
  170. package/dist/components/titan-layout/layout-header.js.map +1 -0
  171. package/dist/components/titan-layout/layout-header.module.less +200 -0
  172. package/dist/components/titan-layout/layout-logo.d.ts +12 -0
  173. package/dist/components/titan-layout/layout-logo.d.ts.map +1 -0
  174. package/dist/components/titan-layout/layout-logo.js +16 -0
  175. package/dist/components/titan-layout/layout-logo.js.map +1 -0
  176. package/dist/components/titan-layout/layout-logo.stories.d.ts +13 -0
  177. package/dist/components/titan-layout/layout-logo.stories.d.ts.map +1 -0
  178. package/dist/components/titan-layout/layout-logo.stories.js +17 -0
  179. package/dist/components/titan-layout/layout-logo.stories.js.map +1 -0
  180. package/dist/components/titan-layout/layout-profile.d.ts +9 -0
  181. package/dist/components/titan-layout/layout-profile.d.ts.map +1 -0
  182. package/dist/components/titan-layout/layout-profile.js +68 -0
  183. package/dist/components/titan-layout/layout-profile.js.map +1 -0
  184. package/dist/components/titan-layout/layout-profile.stories.d.ts +13 -0
  185. package/dist/components/titan-layout/layout-profile.stories.d.ts.map +1 -0
  186. package/dist/components/titan-layout/layout-profile.stories.js +13 -0
  187. package/dist/components/titan-layout/layout-profile.stories.js.map +1 -0
  188. package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts +46 -0
  189. package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts.map +1 -0
  190. package/dist/components/titan-layout/layout-sidebar-links-internal.js +61 -0
  191. package/dist/components/titan-layout/layout-sidebar-links-internal.js.map +1 -0
  192. package/dist/components/titan-layout/layout-sidebar-links.d.ts +6 -0
  193. package/dist/components/titan-layout/layout-sidebar-links.d.ts.map +1 -0
  194. package/dist/components/titan-layout/layout-sidebar-links.js +28 -0
  195. package/dist/components/titan-layout/layout-sidebar-links.js.map +1 -0
  196. package/dist/components/titan-layout/layout-sidebar.d.ts +19 -0
  197. package/dist/components/titan-layout/layout-sidebar.d.ts.map +1 -0
  198. package/dist/components/titan-layout/layout-sidebar.js +67 -0
  199. package/dist/components/titan-layout/layout-sidebar.js.map +1 -0
  200. package/dist/components/titan-layout/layout-sidebar.module.less +536 -0
  201. package/dist/components/titan-layout/notifications-context.d.ts +13 -0
  202. package/dist/components/titan-layout/notifications-context.d.ts.map +1 -0
  203. package/dist/components/titan-layout/notifications-context.js +23 -0
  204. package/dist/components/titan-layout/notifications-context.js.map +1 -0
  205. package/dist/components/titan-layout/titan-layout.d.ts +40 -0
  206. package/dist/components/titan-layout/titan-layout.d.ts.map +1 -0
  207. package/dist/components/titan-layout/titan-layout.js +161 -0
  208. package/dist/components/titan-layout/titan-layout.js.map +1 -0
  209. package/dist/components/titan-layout/titan-layout.module.less +107 -0
  210. package/dist/components/titan-layout/titan-layout.stories.d.ts +22 -0
  211. package/dist/components/titan-layout/titan-layout.stories.d.ts.map +1 -0
  212. package/dist/components/titan-layout/titan-layout.stories.js +83 -0
  213. package/dist/components/titan-layout/titan-layout.stories.js.map +1 -0
  214. package/dist/components/titan-layout/with-tooltip.d.ts +4 -0
  215. package/dist/components/titan-layout/with-tooltip.d.ts.map +1 -0
  216. package/dist/components/titan-layout/with-tooltip.js +4 -0
  217. package/dist/components/titan-layout/with-tooltip.js.map +1 -0
  218. package/dist/index.d.ts +13 -0
  219. package/dist/index.d.ts.map +1 -0
  220. package/dist/index.js +13 -0
  221. package/dist/index.js.map +1 -0
  222. package/dist/test/data-stories.module.less +8 -0
  223. package/dist/test/data.d.ts +35 -0
  224. package/dist/test/data.d.ts.map +1 -0
  225. package/dist/test/data.js +243 -0
  226. package/dist/test/data.js.map +1 -0
  227. package/dist/utils/counter-tag.d.ts +5 -0
  228. package/dist/utils/counter-tag.d.ts.map +1 -0
  229. package/dist/utils/counter-tag.js +2 -0
  230. package/dist/utils/counter-tag.js.map +1 -0
  231. package/dist/utils/navigation-context.d.ts +27 -0
  232. package/dist/utils/navigation-context.d.ts.map +1 -0
  233. package/dist/utils/navigation-context.js +10 -0
  234. package/dist/utils/navigation-context.js.map +1 -0
  235. package/dist/utils/navigation-legacy.d.ts +88 -0
  236. package/dist/utils/navigation-legacy.d.ts.map +1 -0
  237. package/dist/utils/navigation-legacy.js +2 -0
  238. package/dist/utils/navigation-legacy.js.map +1 -0
  239. package/dist/utils/navigation.d.ts +48 -0
  240. package/dist/utils/navigation.d.ts.map +1 -0
  241. package/dist/utils/navigation.js +2 -0
  242. package/dist/utils/navigation.js.map +1 -0
  243. package/dist/utils/side-nav.d.ts +6 -0
  244. package/dist/utils/side-nav.d.ts.map +1 -0
  245. package/dist/utils/side-nav.js +28 -0
  246. package/dist/utils/side-nav.js.map +1 -0
  247. package/dist/utils/use-breakpoint.d.ts +7 -0
  248. package/dist/utils/use-breakpoint.d.ts.map +1 -0
  249. package/dist/utils/use-breakpoint.js +13 -0
  250. package/dist/utils/use-breakpoint.js.map +1 -0
  251. package/package.json +3 -4
  252. package/src/components/badge-tag.tsx +1 -1
  253. package/src/components/header-navigation/header-navigation-stacked.stories.tsx +1 -1
  254. package/src/components/header-navigation/header-navigation-stories.module.less.d.ts +3 -0
  255. package/src/components/header-navigation/header-navigation.module.less.d.ts +22 -0
  256. package/src/components/header-navigation/header-navigation.stories.tsx +1 -1
  257. package/src/components/left-navigation/header-navigation-tiny.module.less.d.ts +15 -0
  258. package/src/components/left-navigation/header-navigation-tiny.stories.tsx +2 -2
  259. package/src/components/left-navigation/side-navigation-links.tsx +1 -1
  260. package/src/components/left-navigation/side-navigation.module.less.d.ts +48 -0
  261. package/src/components/logo/logo-titan-text.module.less.d.ts +6 -0
  262. package/src/components/logo/logo-titan-text.tsx +1 -1
  263. package/src/components/profile-dropdown/profile-dropdown.module.less +2 -0
  264. package/src/components/profile-dropdown/profile-dropdown.module.less.d.ts +21 -0
  265. package/src/components/profile-dropdown/profile-dropdown.tsx +13 -6
  266. package/src/components/titan-layout/layout-header.module.less +62 -15
  267. package/src/components/titan-layout/layout-header.module.less.d.ts +16 -0
  268. package/src/components/titan-layout/layout-header.tsx +12 -5
  269. package/src/components/titan-layout/layout-logo.tsx +13 -6
  270. package/src/components/titan-layout/layout-profile.stories.tsx +10 -1
  271. package/src/components/titan-layout/layout-profile.tsx +60 -25
  272. package/src/components/titan-layout/layout-sidebar-links-internal.tsx +18 -5
  273. package/src/components/titan-layout/layout-sidebar-links.tsx +17 -5
  274. package/src/components/titan-layout/layout-sidebar.module.less +29 -21
  275. package/src/components/titan-layout/layout-sidebar.module.less.d.ts +49 -0
  276. package/src/components/titan-layout/layout-sidebar.tsx +15 -9
  277. package/src/components/titan-layout/notifications-context.tsx +44 -0
  278. package/src/components/titan-layout/titan-layout.module.less +73 -19
  279. package/src/components/titan-layout/titan-layout.module.less.d.ts +16 -0
  280. package/src/components/titan-layout/titan-layout.stories.tsx +166 -19
  281. package/src/components/titan-layout/titan-layout.tsx +193 -75
  282. package/src/test/data-stories.module.less.d.ts +3 -0
  283. package/src/test/data.tsx +2 -3
@@ -1,4 +1,4 @@
1
- import { Page as Anvil2Page, Popover } from '@servicetitan/anvil2';
1
+ import { Announcement, Page as Anvil2Page, Button, Popover, TextField } from '@servicetitan/anvil2';
2
2
  import SvgSearch from '@servicetitan/anvil2/assets/icons/material/round/search.svg';
3
3
  import SvgAtlas from '@servicetitan/anvil2/assets/icons/st/atlas_logo.svg';
4
4
  import SvgSettingsActive from '@servicetitan/anvil2/assets/icons/st/gnav_settings_active.svg';
@@ -20,11 +20,32 @@ import { SideNavigationLinkWrapperProps } from '../left-navigation';
20
20
  import { HeaderNavigationLink, HeaderNavigationTrigger } from '../links';
21
21
  import { ProfileDropdown, TitanLayout, TitanLayoutProps, TitanLayoutState } from './';
22
22
 
23
+ interface LayoutContentArgs {
24
+ header: boolean;
25
+ sideTop: boolean;
26
+ extraText: boolean;
27
+ search: boolean;
28
+ longContent: boolean;
29
+ wideContent: boolean;
30
+ minWidth: boolean;
31
+ emptyNav: boolean;
32
+ }
33
+
23
34
  export default {
24
35
  title: 'Navigation/TitanLayout',
25
- component: TitanLayout,
26
36
  decorators: [withDefaultRedirects, withMemoryRouter, withAnvil],
27
37
  parameters: {},
38
+ argTypes: {},
39
+ args: {
40
+ header: true,
41
+ sideTop: true,
42
+ extraText: true,
43
+ search: true,
44
+ longContent: true,
45
+ wideContent: false,
46
+ minWidth: false,
47
+ emptyNav: false,
48
+ } as LayoutContentArgs,
28
49
  };
29
50
 
30
51
  const mainNavItems = [
@@ -51,6 +72,7 @@ const profile = (
51
72
  to="https://google.com"
52
73
  tooltip="Google it"
53
74
  target="_blank"
75
+ tag={{ value: true }}
54
76
  >
55
77
  first link
56
78
  </ProfileDropdown.Link>
@@ -131,9 +153,9 @@ const SideLinkPopoverWrapper: FC<SideNavigationLinkWrapperProps> = ({ children,
131
153
  };
132
154
 
133
155
  const sidebarTop = () => [
134
- <TitanLayout.SidebarLink key="tasks" {...items.tasks} />,
135
- <TitanLayout.SidebarLink key="calls" {...items.calls} />,
136
- <TitanLayout.SidebarTrigger
156
+ <TitanLayout.Link key="tasks" {...items.tasks} />,
157
+ <TitanLayout.Link key="calls" {...items.calls} />,
158
+ <TitanLayout.Trigger
137
159
  key="marketing"
138
160
  {...items.marketing}
139
161
  isActive={false}
@@ -142,51 +164,176 @@ const sidebarTop = () => [
142
164
  counter={50}
143
165
  />,
144
166
  ];
145
- const useLayoutProps = (): TitanLayoutProps => {
167
+ const ContentHeader = () => {
168
+ const [longInfo, setLongInfo] = useState(false);
169
+
170
+ return (
171
+ <Fragment>
172
+ <Announcement title="Some info" status="info" />
173
+ <Announcement title="Some warning" status="warning" />
174
+ <div
175
+ className="d-f justify-content-center align-items-center bg-purple-100-i"
176
+ style={{ height: longInfo ? '120px' : '48px' }}
177
+ >
178
+ <div className="d-f align-items-center gap-1">
179
+ custom content{' '}
180
+ <Button onClick={() => setLongInfo(!longInfo)} size="small" aria-label="test">
181
+ {longInfo ? '↑' : '↓'}
182
+ </Button>
183
+ </div>
184
+ </div>
185
+ </Fragment>
186
+ );
187
+ };
188
+ const SearchBar = () => (
189
+ <TextField size="small" placeholder="Search" className="w-100-i m-x-half-i" />
190
+ );
191
+
192
+ const useLayoutProps = (args: LayoutContentArgs): TitanLayoutProps => {
146
193
  const [state, setState] = useState<TitanLayoutState | undefined>(undefined);
147
194
 
148
195
  return {
149
196
  state,
150
197
  onStateChange: setState,
151
198
 
152
- navigationMainItems: mainNavItems,
199
+ navigationComponent: NavLinkMock,
200
+ navigationMainItems: args.emptyNav ? [] : mainNavItems,
201
+
153
202
  profile,
203
+ top: args.search ? <SearchBar /> : undefined,
204
+ header: args.header ? <ContentHeader /> : undefined,
205
+
154
206
  extraLinks,
155
207
  extraLinksTop,
208
+ extraText: args.extraText ? 'EST (-8 hrs)' : undefined,
156
209
 
157
- sidebarTop: sidebarTop(),
158
- navigationComponent: NavLinkMock,
159
- extraText: 'EST (-8 hrs)',
210
+ sideTop: args.sideTop && !args.emptyNav ? sidebarTop() : undefined,
211
+
212
+ minContentWidth: args.minWidth ? 900 : undefined,
160
213
  };
161
214
  };
162
215
 
163
- export const TitanLayoutLegacy = () => (
164
- <TitanLayout {...useLayoutProps()} appearance="legacy">
216
+ const Content = (args: LayoutContentArgs) => {
217
+ return (
218
+ <Fragment>
219
+ <LocationInfo className="m-b-3" />
220
+ {args.wideContent && (
221
+ <div style={{ width: '1200px' }}>
222
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
223
+ incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
224
+ nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
225
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
226
+ fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
227
+ culpa qui officia deserunt mollit anim id est laborum.
228
+ </div>
229
+ )}
230
+
231
+ {args.longContent && (
232
+ <div>
233
+ <p>Lorem</p>
234
+ <p>ipsum</p>
235
+ <p>dolor</p>
236
+ <p>sit</p>
237
+ <p>amet,</p>
238
+ <p>consectetur</p>
239
+ <p>adipiscing</p>
240
+ <p>elit,</p>
241
+ <p>sed</p>
242
+ <p>do</p>
243
+ <p>eiusmod</p>
244
+ <p>tempor</p>
245
+ <p>incididunt</p>
246
+ <p>ut</p>
247
+ <p>labore</p>
248
+ <p>et</p>
249
+ <p>dolore</p>
250
+ <p>magna</p>
251
+ <p>aliqua.</p>
252
+ <p>Ut</p>
253
+ <p>enim</p>
254
+ <p>ad</p>
255
+ <p>minim</p>
256
+ <p>veniam,</p>
257
+ <p>quis</p>
258
+ <p>nostrud</p>
259
+ <p>exercitation</p>
260
+ <p>ullamco</p>
261
+ <p>laboris</p>
262
+ <p>nisi</p>
263
+ <p>ut</p>
264
+ <p>aliquip</p>
265
+ <p>ex</p>
266
+ <p>ea</p>
267
+ <p>commodo</p>
268
+ <p>consequat.</p>
269
+ <p>Duis</p>
270
+ <p>aute</p>
271
+ <p>irure</p>
272
+ <p>dolor</p>
273
+ <p>in</p>
274
+ <p>reprehenderit</p>
275
+ <p>in</p>
276
+ <p>voluptate</p>
277
+ <p>velit</p>
278
+ <p>esse</p>
279
+ <p>cillum</p>
280
+ <p>dolore</p>
281
+ <p>eu</p>
282
+ <p>fugiat</p>
283
+ <p>nulla</p>
284
+ <p>pariatur.</p>
285
+ <p>Excepteur</p>
286
+ <p>sint</p>
287
+ <p>occaecat</p>
288
+ <p>cupidatat</p>
289
+ <p>non</p>
290
+ <p>proident,</p>
291
+ <p>sunt</p>
292
+ <p>in</p>
293
+ <p>culpa</p>
294
+ <p>qui</p>
295
+ <p>officia</p>
296
+ <p>deserunt</p>
297
+ <p>mollit</p>
298
+ <p>anim</p>
299
+ <p>id</p>
300
+ <p>est</p>
301
+ <p>laborum.</p>
302
+ </div>
303
+ )}
304
+ </Fragment>
305
+ );
306
+ };
307
+
308
+ export const TitanLayoutLegacy = (args: LayoutContentArgs) => (
309
+ <TitanLayout {...useLayoutProps(args)} appearance="legacy">
165
310
  <TitanLayout.Logo title />
166
311
  <TitanLayout.Content>
167
- <LocationInfo />
312
+ <div className="p-3">
313
+ <Content {...args} />
314
+ </div>
168
315
  </TitanLayout.Content>
169
316
  </TitanLayout>
170
317
  );
171
318
 
172
- export const TitanLayoutAnvil1 = () => (
173
- <TitanLayout {...useLayoutProps()} appearance="anvil1">
319
+ export const TitanLayoutAnvil1 = (args: LayoutContentArgs) => (
320
+ <TitanLayout {...useLayoutProps(args)} appearance="anvil1">
174
321
  <TitanLayout.Logo title />
175
322
  <TitanLayout.Content>
176
323
  <Anvil1Page>
177
- <LocationInfo />
324
+ <Content {...args} />
178
325
  </Anvil1Page>
179
326
  </TitanLayout.Content>
180
327
  </TitanLayout>
181
328
  );
182
329
 
183
- export const TitanLayoutAnvil2 = () => (
184
- <TitanLayout {...useLayoutProps()} appearance="anvil2">
330
+ export const TitanLayoutAnvil2 = (args: LayoutContentArgs) => (
331
+ <TitanLayout {...useLayoutProps(args)} appearance="anvil2">
185
332
  <TitanLayout.Logo title />
186
333
  <TitanLayout.Content>
187
334
  <Anvil2Page>
188
335
  <Anvil2Page.Content>
189
- <LocationInfo />
336
+ <Content {...args} />
190
337
  </Anvil2Page.Content>
191
338
  </Anvil2Page>
192
339
  </TitanLayout.Content>
@@ -11,6 +11,7 @@ import {
11
11
  useCallback,
12
12
  useEffect,
13
13
  useMemo,
14
+ useRef,
14
15
  useState,
15
16
  } from 'react';
16
17
  import { NavigationItemData } from '../../utils/navigation';
@@ -28,33 +29,38 @@ import { TitanLayoutLogo, TitanLayoutLogoProps } from './layout-logo';
28
29
  import { LayoutSidebar } from './layout-sidebar';
29
30
  import { TitanLayoutSidebarLink, TitanLayoutSidebarTrigger } from './layout-sidebar-links';
30
31
  import { InternalSideNavigationTrigger } from './layout-sidebar-links-internal';
32
+ import { useNotificationsState } from './notifications-context';
31
33
  import * as Styles from './titan-layout.module.less';
32
34
 
33
35
  type TitanLayoutChild = ReactElement<TitanLayoutContentProps> | ReactElement<TitanLayoutLogoProps>;
34
36
 
35
37
  export type TitanLayoutProps = Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'style'> & {
36
- empty?: boolean;
37
-
38
+ /** layout appearance */
38
39
  appearance?: 'legacy' | 'anvil1' | 'anvil2';
39
40
 
41
+ /** layout's content */
42
+ children?: TitanLayoutChild | TitanLayoutChild[];
43
+
44
+ /** show only content without side and top bars */
45
+ contentOnly?: boolean;
46
+
40
47
  /** component used for navigation */
41
48
  navigationComponent?: FC<NavLinkComponentProps>;
42
49
 
43
50
  /** data for main navigation links */
44
51
  navigationMainItems?: NavigationItemData[];
45
52
 
46
- /** layout's content */
47
- children?: TitanLayoutChild | TitanLayoutChild[];
48
-
49
53
  state?: TitanLayoutState;
50
54
  onStateChange?: (state: TitanLayoutState) => void;
51
55
 
52
56
  header?: ReactElement;
57
+ top?: ReactElement;
58
+ sideTop?: ReactElement[];
53
59
  profile?: ReactElement;
54
60
  extraLinks?: ReactElement;
55
61
  extraLinksTop?: ReactElement;
56
62
  extraText?: string;
57
- sidebarTop?: ReactElement[];
63
+ minContentWidth?: number;
58
64
  };
59
65
 
60
66
  const defaultSidebarContext: TitanLayoutSidebarContextType = {
@@ -76,7 +82,7 @@ const useVariant = (appearance: TitanLayoutProps['appearance']) =>
76
82
  isLegacy,
77
83
  isAnvil1,
78
84
  isAnvil2,
79
- isSequent: isLegacy || isAnvil1,
85
+ isSequent: isLegacy || isAnvil2,
80
86
  };
81
87
  }, [appearance]);
82
88
 
@@ -113,8 +119,10 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
113
119
  appearance = 'anvil2',
114
120
  id,
115
121
  children,
122
+ contentOnly,
116
123
  navigationComponent,
117
124
  header,
125
+ top,
118
126
  profile,
119
127
  state,
120
128
  onStateChange,
@@ -122,10 +130,10 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
122
130
  extraLinks,
123
131
  extraLinksTop,
124
132
  extraText,
125
- sidebarTop,
133
+ minContentWidth,
134
+ sideTop,
126
135
  }) => {
127
136
  const breakpoint = useTitanBreakpoint();
128
- const isMobile = breakpoint.isMobile;
129
137
  const context: TitanLayoutContextType = useMemo(
130
138
  () => ({
131
139
  NavigationComponent: navigationComponent ?? DefaultNavLinkComponent,
@@ -138,21 +146,19 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
138
146
  const variant = useVariant(appearance);
139
147
  const [mobileDrawerOpened, setMobileDrawerOpened] = useState(false);
140
148
  const { content, logo } = useLayoutChildren(children);
149
+ const { hasNotifications, NotificationsContextProvider } = useNotificationsState();
150
+
151
+ const isMobile = breakpoint.isMobile;
152
+ const hasSideBar = !contentOnly && (!!navigationMainItems?.length || !!sideTop?.length);
153
+ const hasTopBar = !contentOnly;
141
154
 
142
155
  useEffect(() => {
143
- if (!isMobile) {
144
- setMobileDrawerOpened(false);
145
- return;
156
+ if (variant.isAnvil1) {
157
+ const bodyClassName = 'of-hidden-i';
158
+ document.body.classList.add(bodyClassName);
159
+ return () => document.body.classList.remove(bodyClassName);
146
160
  }
147
-
148
- const listener = () => {
149
- setMobileDrawerOpened(false);
150
- };
151
-
152
- document.addEventListener('click', listener);
153
-
154
- return () => document.removeEventListener('click', listener);
155
- }, [isMobile]);
161
+ }, [variant.isAnvil1]);
156
162
 
157
163
  const onBurgerClick = useCallback((e: MouseEvent) => {
158
164
  setMobileDrawerOpened(true);
@@ -178,8 +184,24 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
178
184
  },
179
185
  [state, onStateChange]
180
186
  );
181
-
182
- const [layoutStyles] = useState<object>({});
187
+ const hasMenuNotifications = useMemo(() => {
188
+ try {
189
+ return (
190
+ navigationMainItems?.some(item => {
191
+ if (item.counter || item.tag?.value) {
192
+ return true;
193
+ } else if (item.submenu) {
194
+ return item.submenu.groups.some(group =>
195
+ group.links.some(link => !!link.counter || !!link.tag?.value)
196
+ );
197
+ }
198
+ return false;
199
+ }) ?? false
200
+ );
201
+ } catch {
202
+ return false;
203
+ }
204
+ }, [navigationMainItems]);
183
205
 
184
206
  const layoutClass = variant.isLegacy
185
207
  ? Styles.layoutLegacy
@@ -194,77 +216,173 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
194
216
  id={id}
195
217
  className={classNames(
196
218
  Styles.layout,
197
- isMobile
198
- ? Styles.layoutMobile
199
- : state?.navCollapsed
200
- ? Styles.layoutNavSlim
201
- : Styles.layoutNavWide,
219
+ isMobile ? Styles.layoutMobile : Styles.layoutDesktop,
220
+ {
221
+ [Styles.layoutTop]: hasTopBar,
222
+ [Styles.layoutNavSlim]: !isMobile && hasSideBar && state?.navCollapsed,
223
+ [Styles.layoutNavWide]: !isMobile && hasSideBar && !state?.navCollapsed,
224
+ },
202
225
  layoutClass
203
226
  )}
204
- style={layoutStyles}
205
227
  >
206
228
  {variant.isSequent && <div className={Styles.topPlaceholder} />}
207
- <LayoutHeader
208
- className={Styles.top}
209
- logo={logo}
210
- profile={isMobile ? undefined : profile}
211
- center={header}
212
- rightText={isMobile ? undefined : extraText}
213
- right={
214
- <Fragment>
215
- {extraLinksTop}
216
- {!isMobile && extraLinks}
217
- </Fragment>
218
- }
219
- onBurgerClick={onBurgerClick}
220
- />
221
-
222
- <LayoutSidebar
223
- flex={!variant.isSequent}
224
- mobile={breakpoint.isMobile}
225
- barExpanded={isMobile ? mobileDrawerOpened : !state?.navCollapsed}
226
- submenuExpanded={state?.submenuExpanded}
227
- onBarExpandChange={onBarExpandChange}
228
- onSubmenuExpandChange={onSubmenuExpandChange}
229
- top={sidebarTop}
230
- mainItems={navigationMainItems}
231
- navigationComponent={context.NavigationComponent}
232
- bottom={
233
- isMobile ? (
229
+ {hasTopBar && (
230
+ <LayoutHeader
231
+ className={Styles.top}
232
+ logo={logo}
233
+ profile={isMobile ? undefined : profile}
234
+ center={top}
235
+ rightText={isMobile ? undefined : extraText}
236
+ right={
234
237
  <Fragment>
235
- {profile}
236
- {extraLinks}
237
- {!!extraText && (
238
- <InternalSideNavigationTrigger
239
- id="__extra_text"
240
- title={extraText}
241
- submenuExpanded={undefined}
242
- dataPrefix="navigation-extra-text"
243
- tag={undefined}
244
- icon={undefined}
245
- iconActive={undefined}
246
- />
247
- )}
238
+ {extraLinksTop}
239
+ {!isMobile && extraLinks}
248
240
  </Fragment>
249
- ) : undefined
250
- }
251
- />
241
+ }
242
+ isMobile={isMobile}
243
+ hasNotifications={hasNotifications || hasMenuNotifications}
244
+ onBurgerClick={onBurgerClick}
245
+ />
246
+ )}
252
247
 
253
- {content}
248
+ {hasSideBar && (
249
+ <NotificationsContextProvider>
250
+ <LayoutSidebar
251
+ className={Styles.side}
252
+ mobile={breakpoint.isMobile}
253
+ barExpanded={!state?.navCollapsed}
254
+ onBarExpandChange={onBarExpandChange}
255
+ submenuExpanded={state?.submenuExpanded}
256
+ onSubmenuExpandChange={onSubmenuExpandChange}
257
+ drawerOpened={mobileDrawerOpened}
258
+ onDrawerOpenChange={setMobileDrawerOpened}
259
+ top={sideTop}
260
+ mainItems={navigationMainItems}
261
+ navigationComponent={context.NavigationComponent}
262
+ bottom={
263
+ isMobile ? (
264
+ <Fragment>
265
+ {profile}
266
+ {extraLinks}
267
+ {!!extraText && (
268
+ <InternalSideNavigationTrigger
269
+ id="__extra_text"
270
+ title={extraText}
271
+ submenuExpanded={undefined}
272
+ dataPrefix="navigation-extra-text"
273
+ tag={undefined}
274
+ icon={undefined}
275
+ iconActive={undefined}
276
+ />
277
+ )}
278
+ </Fragment>
279
+ ) : undefined
280
+ }
281
+ />
282
+ </NotificationsContextProvider>
283
+ )}
284
+ <LayoutContent
285
+ header={header}
286
+ anvil2={variant.isAnvil2}
287
+ anvil1={variant.isAnvil1}
288
+ minWidth={minContentWidth}
289
+ >
290
+ {content}
291
+ </LayoutContent>
254
292
  </div>
255
293
  </LayoutPlacementContext.Provider>
256
294
  </LayoutContext.Provider>
257
295
  );
258
296
  };
259
297
 
298
+ const TitanLayoutHeaderObserved: FC<{
299
+ children: ReactNode;
300
+ heightChange?(value: number): void;
301
+ }> = ({ children, heightChange }) => {
302
+ const ref = useRef<HTMLDivElement>(null);
303
+
304
+ useEffect(() => {
305
+ if (ref.current) {
306
+ const updatePosition = () => {
307
+ if (ref.current && heightChange) {
308
+ const pos = ref.current.getBoundingClientRect();
309
+ heightChange(pos.height);
310
+ }
311
+ };
312
+
313
+ const observer = new ResizeObserver(updatePosition);
314
+ observer.observe(ref.current);
315
+
316
+ updatePosition();
317
+ return () => observer.disconnect();
318
+ }
319
+ }, [heightChange]);
320
+
321
+ useEffect(() => {
322
+ return () => {
323
+ heightChange?.(0);
324
+ };
325
+ }, [heightChange]);
326
+ return (
327
+ <div ref={ref} className={Styles.contentHeader} data-cy="layout-content-header">
328
+ {children}
329
+ </div>
330
+ );
331
+ };
332
+
260
333
  export interface TitanLayoutContentProps {
261
334
  children: ReactNode;
262
335
  }
263
336
  const TitanLayoutContent: FC<TitanLayoutContentProps> = ({ children }) => children;
264
337
 
338
+ const LayoutContent: FC<{
339
+ children: ReactNode;
340
+ header?: ReactNode;
341
+ anvil1: boolean;
342
+ anvil2: boolean;
343
+ minWidth: number | undefined;
344
+ }> = ({ anvil1, anvil2, children, header, minWidth }) => {
345
+ const [anvil2Styles, setAnvil2Styles] = useState<object>({});
346
+ const updateIndicatorsHeight = useCallback((offset: number) => {
347
+ setAnvil2Styles({ '--offset': `calc(var(--nav-offset-top) + ${offset}px)` });
348
+ }, []);
349
+
350
+ const contentStyles = useMemo(
351
+ () => ({
352
+ ...(minWidth ? { minWidth: `${minWidth}px` } : {}),
353
+ ...(anvil2 ? anvil2Styles : {}),
354
+ }),
355
+ [anvil2, minWidth, anvil2Styles]
356
+ );
357
+
358
+ return (
359
+ <Fragment>
360
+ {!!header &&
361
+ (anvil2 ? (
362
+ <TitanLayoutHeaderObserved heightChange={updateIndicatorsHeight}>
363
+ {header}
364
+ </TitanLayoutHeaderObserved>
365
+ ) : (
366
+ <div className={Styles.contentHeader} data-cy="layout-content-header">
367
+ {header}
368
+ </div>
369
+ ))}
370
+ <div className={Styles.content} style={contentStyles} data-cy="layout-content">
371
+ {anvil1 ? (
372
+ <div className="position-relative d-f flex-grow-1 flex-basis-0 of-hidden">
373
+ {children}
374
+ </div>
375
+ ) : (
376
+ children
377
+ )}
378
+ </div>
379
+ </Fragment>
380
+ );
381
+ };
382
+
265
383
  export const TitanLayout = Object.assign(TitanLayoutComponent, {
266
384
  Content: TitanLayoutContent,
267
385
  Logo: TitanLayoutLogo,
268
- SidebarLink: TitanLayoutSidebarLink,
269
- SidebarTrigger: TitanLayoutSidebarTrigger,
386
+ Link: TitanLayoutSidebarLink,
387
+ Trigger: TitanLayoutSidebarTrigger,
270
388
  });
@@ -0,0 +1,3 @@
1
+ export const __esModule: true;
2
+ export const fixIcons: string;
3
+
package/src/test/data.tsx CHANGED
@@ -66,7 +66,6 @@ export const NavLinkMock = forwardRef<any, NavLinkComponentProps>(
66
66
  {...rest}
67
67
  onClick={e => {
68
68
  e.preventDefault();
69
- e.stopPropagation();
70
69
 
71
70
  if (!to.startsWith('http')) {
72
71
  history.replace(to);
@@ -82,10 +81,10 @@ export const NavLinkMock = forwardRef<any, NavLinkComponentProps>(
82
81
  }
83
82
  );
84
83
 
85
- export const LocationInfo = () => {
84
+ export const LocationInfo: FC<{ className?: string }> = ({ className }) => {
86
85
  const location = useLocation();
87
86
 
88
- return <BodyText>current location - {location.pathname}</BodyText>;
87
+ return <BodyText className={className}>current location - {location.pathname}</BodyText>;
89
88
  };
90
89
 
91
90
  const LocationProvider: FC<{ children: any }> = ({ children }) => {