@servicetitan/navigation 12.0.3 → 13.0.0-canary.256.44cf055.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 (252) hide show
  1. package/dist/components/counter-tag.d.ts +1 -1
  2. package/dist/components/counter-tag.d.ts.map +1 -1
  3. package/dist/components/counter-tag.js.map +1 -1
  4. package/dist/components/profile-dropdown/interface.d.ts +55 -0
  5. package/dist/components/profile-dropdown/interface.d.ts.map +1 -0
  6. package/dist/components/profile-dropdown/interface.js.map +1 -0
  7. package/dist/components/profile-dropdown/profile-dropdown-legacy.stories.d.ts +13 -0
  8. package/dist/components/profile-dropdown/profile-dropdown-legacy.stories.d.ts.map +1 -0
  9. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts +5 -1
  10. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts.map +1 -1
  11. package/dist/components/profile-dropdown/profile-dropdown.d.ts +9 -79
  12. package/dist/components/profile-dropdown/profile-dropdown.d.ts.map +1 -1
  13. package/dist/components/profile-dropdown/profile-dropdown.js +22 -22
  14. package/dist/components/profile-dropdown/profile-dropdown.js.map +1 -1
  15. package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts +5 -1
  16. package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts.map +1 -1
  17. package/dist/components/titan-layout/interface-internal.d.ts +12 -0
  18. package/dist/components/titan-layout/interface-internal.d.ts.map +1 -1
  19. package/dist/components/titan-layout/interface-internal.js.map +1 -1
  20. package/dist/components/titan-layout/interface.d.ts +67 -14
  21. package/dist/components/titan-layout/interface.d.ts.map +1 -1
  22. package/dist/components/titan-layout/interface.js.map +1 -1
  23. package/dist/components/titan-layout/layout-header-dark.d.ts.map +1 -1
  24. package/dist/components/titan-layout/layout-header-dark.js +24 -12
  25. package/dist/components/titan-layout/layout-header-dark.js.map +1 -1
  26. package/dist/components/titan-layout/layout-header-links-internal.d.ts +22 -3
  27. package/dist/components/titan-layout/layout-header-links-internal.d.ts.map +1 -1
  28. package/dist/components/titan-layout/layout-header-links-internal.js +15 -18
  29. package/dist/components/titan-layout/layout-header-links-internal.js.map +1 -1
  30. package/dist/components/titan-layout/layout-header-links.d.ts +3 -4
  31. package/dist/components/titan-layout/layout-header-links.d.ts.map +1 -1
  32. package/dist/components/titan-layout/layout-header-links.js +25 -5
  33. package/dist/components/titan-layout/layout-header-links.js.map +1 -1
  34. package/dist/components/titan-layout/layout-header.d.ts +4 -2
  35. package/dist/components/titan-layout/layout-header.d.ts.map +1 -1
  36. package/dist/components/titan-layout/layout-header.js +25 -16
  37. package/dist/components/titan-layout/layout-header.js.map +1 -1
  38. package/dist/components/titan-layout/layout-header.module.less +37 -1
  39. package/dist/components/titan-layout/layout-header.module.less.d.ts +3 -0
  40. package/dist/components/titan-layout/layout-profile.d.ts +8 -5
  41. package/dist/components/titan-layout/layout-profile.d.ts.map +1 -1
  42. package/dist/components/titan-layout/layout-profile.js +30 -28
  43. package/dist/components/titan-layout/layout-profile.js.map +1 -1
  44. package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts +48 -31
  45. package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts.map +1 -1
  46. package/dist/components/titan-layout/layout-sidebar-links-internal.js +87 -83
  47. package/dist/components/titan-layout/layout-sidebar-links-internal.js.map +1 -1
  48. package/dist/components/titan-layout/layout-sidebar-links.d.ts +3 -3
  49. package/dist/components/titan-layout/layout-sidebar-links.d.ts.map +1 -1
  50. package/dist/components/titan-layout/layout-sidebar-links.js +32 -19
  51. package/dist/components/titan-layout/layout-sidebar-links.js.map +1 -1
  52. package/dist/components/titan-layout/layout-sidebar.d.ts +1 -1
  53. package/dist/components/titan-layout/layout-sidebar.d.ts.map +1 -1
  54. package/dist/components/titan-layout/layout-sidebar.js +81 -102
  55. package/dist/components/titan-layout/layout-sidebar.js.map +1 -1
  56. package/dist/components/titan-layout/layout-sidebar.module.less +74 -22
  57. package/dist/components/titan-layout/titan-layout-default.stories.d.ts +16 -0
  58. package/dist/components/titan-layout/titan-layout-default.stories.d.ts.map +1 -0
  59. package/dist/components/titan-layout/titan-layout-legacy.stories.d.ts +10 -0
  60. package/dist/components/titan-layout/titan-layout-legacy.stories.d.ts.map +1 -0
  61. package/dist/components/titan-layout/titan-layout-links.d.ts +5 -0
  62. package/dist/components/titan-layout/titan-layout-links.d.ts.map +1 -0
  63. package/dist/components/titan-layout/titan-layout-links.js +34 -0
  64. package/dist/components/titan-layout/titan-layout-links.js.map +1 -0
  65. package/dist/components/titan-layout/titan-layout-stacked.stories.d.ts +10 -0
  66. package/dist/components/titan-layout/titan-layout-stacked.stories.d.ts.map +1 -0
  67. package/dist/components/titan-layout/titan-layout.d.ts +5 -4
  68. package/dist/components/titan-layout/titan-layout.d.ts.map +1 -1
  69. package/dist/components/titan-layout/titan-layout.js +33 -14
  70. package/dist/components/titan-layout/titan-layout.js.map +1 -1
  71. package/dist/index.d.ts +1 -6
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +0 -4
  74. package/dist/index.js.map +1 -1
  75. package/dist/test/data.d.ts +26 -23
  76. package/dist/test/data.d.ts.map +1 -1
  77. package/dist/test/data.js +26 -69
  78. package/dist/test/data.js.map +1 -1
  79. package/dist/test/titan-layout.d.ts +16 -0
  80. package/dist/test/titan-layout.d.ts.map +1 -0
  81. package/dist/test/titan-layout.js +21 -0
  82. package/dist/test/titan-layout.js.map +1 -0
  83. package/dist/utils/navigation-context.d.ts +3 -22
  84. package/dist/utils/navigation-context.d.ts.map +1 -1
  85. package/dist/utils/navigation-context.js +2 -10
  86. package/dist/utils/navigation-context.js.map +1 -1
  87. package/dist/utils/navigation.d.ts +2 -7
  88. package/dist/utils/navigation.d.ts.map +1 -1
  89. package/dist/utils/navigation.js.map +1 -1
  90. package/package.json +4 -4
  91. package/src/components/counter-tag.tsx +1 -1
  92. package/src/components/profile-dropdown/interface.ts +47 -0
  93. package/src/components/profile-dropdown/profile-dropdown-legacy.stories.tsx +25 -0
  94. package/src/components/profile-dropdown/profile-dropdown-stacked.stories.tsx +15 -7
  95. package/src/components/profile-dropdown/profile-dropdown.stories.tsx +50 -43
  96. package/src/components/profile-dropdown/profile-dropdown.tsx +39 -115
  97. package/src/components/titan-layout/interface-internal.ts +13 -0
  98. package/src/components/titan-layout/interface.ts +73 -17
  99. package/src/components/titan-layout/layout-header-dark.tsx +21 -5
  100. package/src/components/titan-layout/layout-header-links-internal.tsx +41 -54
  101. package/src/components/titan-layout/layout-header-links.tsx +65 -12
  102. package/src/components/titan-layout/layout-header.module.less +37 -1
  103. package/src/components/titan-layout/layout-header.module.less.d.ts +3 -0
  104. package/src/components/titan-layout/layout-header.tsx +28 -15
  105. package/src/components/titan-layout/layout-profile.tsx +53 -34
  106. package/src/components/titan-layout/layout-sidebar-links-internal.tsx +188 -147
  107. package/src/components/titan-layout/layout-sidebar-links.tsx +73 -26
  108. package/src/components/titan-layout/layout-sidebar.module.less +74 -22
  109. package/src/components/titan-layout/layout-sidebar.tsx +55 -80
  110. package/src/components/titan-layout/{titan-layout.stories.tsx → titan-layout-default.stories.tsx} +131 -114
  111. package/src/components/titan-layout/titan-layout-legacy.stories.tsx +24 -0
  112. package/src/components/titan-layout/titan-layout-links.tsx +34 -0
  113. package/src/components/titan-layout/titan-layout-stacked.stories.tsx +30 -0
  114. package/src/components/titan-layout/titan-layout.tsx +39 -15
  115. package/src/index.ts +1 -12
  116. package/src/test/data.tsx +31 -83
  117. package/src/test/titan-layout.tsx +34 -0
  118. package/src/utils/navigation-context.tsx +9 -35
  119. package/src/utils/navigation.ts +3 -10
  120. package/dist/components/header-navigation/header-navigation-content.d.ts +0 -30
  121. package/dist/components/header-navigation/header-navigation-content.d.ts.map +0 -1
  122. package/dist/components/header-navigation/header-navigation-content.js +0 -58
  123. package/dist/components/header-navigation/header-navigation-content.js.map +0 -1
  124. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts +0 -9
  125. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts.map +0 -1
  126. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts +0 -12
  127. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts.map +0 -1
  128. package/dist/components/header-navigation/header-navigation-links.d.ts +0 -11
  129. package/dist/components/header-navigation/header-navigation-links.d.ts.map +0 -1
  130. package/dist/components/header-navigation/header-navigation-links.js +0 -62
  131. package/dist/components/header-navigation/header-navigation-links.js.map +0 -1
  132. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts +0 -12
  133. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts.map +0 -1
  134. package/dist/components/header-navigation/header-navigation-stories.module.less +0 -6
  135. package/dist/components/header-navigation/header-navigation-stories.module.less.d.ts +0 -3
  136. package/dist/components/header-navigation/header-navigation.d.ts +0 -59
  137. package/dist/components/header-navigation/header-navigation.d.ts.map +0 -1
  138. package/dist/components/header-navigation/header-navigation.js +0 -228
  139. package/dist/components/header-navigation/header-navigation.js.map +0 -1
  140. package/dist/components/header-navigation/header-navigation.module.less +0 -260
  141. package/dist/components/header-navigation/header-navigation.module.less.d.ts +0 -22
  142. package/dist/components/header-navigation/header-navigation.stories.d.ts +0 -12
  143. package/dist/components/header-navigation/header-navigation.stories.d.ts.map +0 -1
  144. package/dist/components/header-navigation/index.d.ts +0 -2
  145. package/dist/components/header-navigation/index.d.ts.map +0 -1
  146. package/dist/components/header-navigation/index.js +0 -3
  147. package/dist/components/header-navigation/index.js.map +0 -1
  148. package/dist/components/header-navigation/with-tooltip.d.ts +0 -4
  149. package/dist/components/header-navigation/with-tooltip.d.ts.map +0 -1
  150. package/dist/components/header-navigation/with-tooltip.js +0 -10
  151. package/dist/components/header-navigation/with-tooltip.js.map +0 -1
  152. package/dist/components/layout.stories.d.ts +0 -13
  153. package/dist/components/layout.stories.d.ts.map +0 -1
  154. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts +0 -9
  155. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts.map +0 -1
  156. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts +0 -18
  157. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts.map +0 -1
  158. package/dist/components/left-navigation/header-navigation-tiny-links.js +0 -79
  159. package/dist/components/left-navigation/header-navigation-tiny-links.js.map +0 -1
  160. package/dist/components/left-navigation/header-navigation-tiny.d.ts +0 -23
  161. package/dist/components/left-navigation/header-navigation-tiny.d.ts.map +0 -1
  162. package/dist/components/left-navigation/header-navigation-tiny.js +0 -32
  163. package/dist/components/left-navigation/header-navigation-tiny.js.map +0 -1
  164. package/dist/components/left-navigation/header-navigation-tiny.module.less +0 -117
  165. package/dist/components/left-navigation/header-navigation-tiny.module.less.d.ts +0 -15
  166. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts +0 -12
  167. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts.map +0 -1
  168. package/dist/components/left-navigation/index.d.ts +0 -5
  169. package/dist/components/left-navigation/index.d.ts.map +0 -1
  170. package/dist/components/left-navigation/index.js +0 -5
  171. package/dist/components/left-navigation/index.js.map +0 -1
  172. package/dist/components/left-navigation/interface-internal.d.ts +0 -10
  173. package/dist/components/left-navigation/interface-internal.d.ts.map +0 -1
  174. package/dist/components/left-navigation/interface-internal.js +0 -3
  175. package/dist/components/left-navigation/interface-internal.js.map +0 -1
  176. package/dist/components/left-navigation/interface.d.ts +0 -20
  177. package/dist/components/left-navigation/interface.d.ts.map +0 -1
  178. package/dist/components/left-navigation/interface.js.map +0 -1
  179. package/dist/components/left-navigation/side-navigation-context.d.ts +0 -8
  180. package/dist/components/left-navigation/side-navigation-context.d.ts.map +0 -1
  181. package/dist/components/left-navigation/side-navigation-context.js +0 -8
  182. package/dist/components/left-navigation/side-navigation-context.js.map +0 -1
  183. package/dist/components/left-navigation/side-navigation-links-internal.d.ts +0 -28
  184. package/dist/components/left-navigation/side-navigation-links-internal.d.ts.map +0 -1
  185. package/dist/components/left-navigation/side-navigation-links-internal.js +0 -89
  186. package/dist/components/left-navigation/side-navigation-links-internal.js.map +0 -1
  187. package/dist/components/left-navigation/side-navigation-links.d.ts +0 -6
  188. package/dist/components/left-navigation/side-navigation-links.d.ts.map +0 -1
  189. package/dist/components/left-navigation/side-navigation-links.js +0 -48
  190. package/dist/components/left-navigation/side-navigation-links.js.map +0 -1
  191. package/dist/components/left-navigation/side-navigation.d.ts +0 -29
  192. package/dist/components/left-navigation/side-navigation.d.ts.map +0 -1
  193. package/dist/components/left-navigation/side-navigation.js +0 -411
  194. package/dist/components/left-navigation/side-navigation.js.map +0 -1
  195. package/dist/components/left-navigation/side-navigation.module.less +0 -530
  196. package/dist/components/left-navigation/side-navigation.module.less.d.ts +0 -48
  197. package/dist/components/left-navigation/side-navigation.stories.d.ts +0 -17
  198. package/dist/components/left-navigation/side-navigation.stories.d.ts.map +0 -1
  199. package/dist/components/left-navigation/with-tooltip.d.ts +0 -4
  200. package/dist/components/left-navigation/with-tooltip.d.ts.map +0 -1
  201. package/dist/components/left-navigation/with-tooltip.js +0 -15
  202. package/dist/components/left-navigation/with-tooltip.js.map +0 -1
  203. package/dist/components/links.d.ts +0 -5
  204. package/dist/components/links.d.ts.map +0 -1
  205. package/dist/components/links.js +0 -35
  206. package/dist/components/links.js.map +0 -1
  207. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts +0 -9
  208. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts.map +0 -1
  209. package/dist/components/titan-layout/layout-profile.stories.d.ts +0 -13
  210. package/dist/components/titan-layout/layout-profile.stories.d.ts.map +0 -1
  211. package/dist/components/titan-layout/titan-layout.stories.d.ts +0 -29
  212. package/dist/components/titan-layout/titan-layout.stories.d.ts.map +0 -1
  213. package/dist/utils/navigation-legacy.d.ts +0 -88
  214. package/dist/utils/navigation-legacy.d.ts.map +0 -1
  215. package/dist/utils/navigation-legacy.js +0 -3
  216. package/dist/utils/navigation-legacy.js.map +0 -1
  217. package/src/components/header-navigation/header-navigation-content.tsx +0 -120
  218. package/src/components/header-navigation/header-navigation-extra-stacked.stories.tsx +0 -19
  219. package/src/components/header-navigation/header-navigation-extra.stories.tsx +0 -142
  220. package/src/components/header-navigation/header-navigation-links.tsx +0 -141
  221. package/src/components/header-navigation/header-navigation-stacked.stories.tsx +0 -146
  222. package/src/components/header-navigation/header-navigation-stories.module.less +0 -6
  223. package/src/components/header-navigation/header-navigation-stories.module.less.d.ts +0 -3
  224. package/src/components/header-navigation/header-navigation.module.less +0 -260
  225. package/src/components/header-navigation/header-navigation.module.less.d.ts +0 -22
  226. package/src/components/header-navigation/header-navigation.stories.tsx +0 -165
  227. package/src/components/header-navigation/header-navigation.tsx +0 -327
  228. package/src/components/header-navigation/index.ts +0 -1
  229. package/src/components/header-navigation/with-tooltip.tsx +0 -15
  230. package/src/components/layout.stories.tsx +0 -103
  231. package/src/components/left-navigation/header-navigation-extra-tiny.stories.tsx +0 -21
  232. package/src/components/left-navigation/header-navigation-tiny-links.tsx +0 -145
  233. package/src/components/left-navigation/header-navigation-tiny.module.less +0 -117
  234. package/src/components/left-navigation/header-navigation-tiny.module.less.d.ts +0 -15
  235. package/src/components/left-navigation/header-navigation-tiny.stories.tsx +0 -178
  236. package/src/components/left-navigation/header-navigation-tiny.tsx +0 -65
  237. package/src/components/left-navigation/index.ts +0 -4
  238. package/src/components/left-navigation/interface-internal.ts +0 -11
  239. package/src/components/left-navigation/interface.ts +0 -26
  240. package/src/components/left-navigation/side-navigation-context.tsx +0 -13
  241. package/src/components/left-navigation/side-navigation-links-internal.tsx +0 -151
  242. package/src/components/left-navigation/side-navigation-links.tsx +0 -57
  243. package/src/components/left-navigation/side-navigation.module.less +0 -530
  244. package/src/components/left-navigation/side-navigation.module.less.d.ts +0 -48
  245. package/src/components/left-navigation/side-navigation.stories.tsx +0 -226
  246. package/src/components/left-navigation/side-navigation.tsx +0 -543
  247. package/src/components/left-navigation/with-tooltip.tsx +0 -16
  248. package/src/components/links.tsx +0 -54
  249. package/src/components/profile-dropdown/profile-dropdown-tiny.stories.tsx +0 -25
  250. package/src/components/titan-layout/layout-profile.stories.tsx +0 -46
  251. package/src/utils/navigation-legacy.ts +0 -106
  252. /package/dist/components/{left-navigation → profile-dropdown}/interface.js +0 -0
@@ -6,68 +6,63 @@ import SvgSettings from '@servicetitan/anvil2/assets/icons/st/gnav_settings_inac
6
6
  import SvgRocketActive from '@servicetitan/anvil2/assets/icons/st/gnav_titan_advisor_active.svg';
7
7
  import SvgRocket from '@servicetitan/anvil2/assets/icons/st/gnav_titan_advisor_inactive.svg';
8
8
  import { Page as Anvil1Page } from '@servicetitan/design-system';
9
- import { FC, Fragment, useState } from 'react';
9
+ import { Fragment, useEffect, useState } from 'react';
10
10
  import {
11
11
  CallsNavigationTrigger,
12
12
  LocationInfo,
13
13
  NavLinkMock,
14
- items,
14
+ navItems,
15
15
  withAnvil,
16
16
  withDefaultRedirects,
17
17
  withMemoryRouter,
18
18
  } from '../../test/data';
19
- import { SideNavigationLinkWrapperProps } from '../left-navigation';
20
- import { HeaderNavigationLink, HeaderNavigationTrigger } from '../links';
21
- import { ProfileDropdown, TitanLayout, TitanLayoutProps, TitanLayoutState } from './';
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
- }
19
+ import {
20
+ LayoutContentArgs,
21
+ getDefaultArgs,
22
+ useDefaultLayoutProps,
23
+ withDefaultLayoutProps,
24
+ } from '../../test/titan-layout';
25
+ import {
26
+ ProfileDropdown,
27
+ TitanLayout,
28
+ TitanLayoutLinkWrapper,
29
+ TitanLayoutProps,
30
+ TitanLayoutState,
31
+ } from './';
33
32
 
34
33
  export default {
35
- title: 'Navigation/TitanLayout',
36
- decorators: [withDefaultRedirects, withMemoryRouter, withAnvil],
34
+ title: 'Navigation/TitanLayout/Default',
35
+ decorators: [
36
+ withDefaultLayoutProps({ navVariant: 'left' }),
37
+ withDefaultRedirects,
38
+ withMemoryRouter,
39
+ withAnvil,
40
+ ],
37
41
  parameters: {},
38
42
  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,
43
+ args: getDefaultArgs(),
49
44
  };
50
45
 
51
46
  const mainNavItems = [
52
- items.dashboard,
53
- items.calendar,
54
- items.calls,
55
- items.accountingWithSubmenu,
56
- items.dispatch,
57
-
58
- items.fleet,
59
- items.followUps,
60
- items.inventory,
61
-
62
- items.marketing,
63
- items.priceBook,
64
- items.pointOfSale,
65
- items.reports,
47
+ navItems.dashboard,
48
+ navItems.calendar,
49
+ navItems.calls,
50
+ navItems.accountingWithSubmenu,
51
+ navItems.dispatch,
52
+
53
+ navItems.fleet,
54
+ navItems.followUpsWithSubmenu,
55
+ navItems.purchasingWithSubmenu,
56
+
57
+ navItems.marketing,
58
+ navItems.priceBook,
59
+ navItems.pointOfSale,
60
+ navItems.reports,
66
61
  ];
67
62
 
68
63
  const overflowNavItems = [
69
- { ...items.accounting, id: 'accounting-overflow', title: 'Other Accounting' },
70
- { ...items.reports, id: 'reports-overflow', title: 'Other Reports' },
64
+ { ...navItems.accounting, id: 'accounting-overflow', title: 'Other Accounting' },
65
+ { ...navItems.reports, id: 'reports-overflow', title: 'Other Reports' },
71
66
  ];
72
67
 
73
68
  const profile = (
@@ -101,14 +96,22 @@ const profile = (
101
96
  </ProfileDropdown>
102
97
  );
103
98
 
99
+ const profileEmpty = (
100
+ <ProfileDropdown>
101
+ <ProfileDropdown.Link id="sign-out" to="/sign-out">
102
+ sign out
103
+ </ProfileDropdown.Link>
104
+ <ProfileDropdown.Divider />
105
+ </ProfileDropdown>
106
+ );
107
+
104
108
  const extraLinks = (
105
109
  <Fragment>
106
- <HeaderNavigationLink
110
+ <TitanLayout.Link
107
111
  id="search"
108
112
  to="https://google.com"
109
113
  target="_blank"
110
114
  title="Search"
111
- hint="Search: for all the questions"
112
115
  tooltip="Search"
113
116
  icon={SvgSearch}
114
117
  iconActive={SvgSearch}
@@ -116,7 +119,7 @@ const extraLinks = (
116
119
 
117
120
  <CallsNavigationTrigger />
118
121
 
119
- <HeaderNavigationLink
122
+ <TitanLayout.Link
120
123
  id="titanAdvisor"
121
124
  to="/titanAdvisor"
122
125
  title="Titan Advisor"
@@ -124,13 +127,12 @@ const extraLinks = (
124
127
  iconActive={SvgRocketActive}
125
128
  />
126
129
 
127
- <HeaderNavigationLink
130
+ <TitanLayout.Link
128
131
  id="settings"
129
132
  to="/settings"
130
133
  title="Settings"
131
134
  target="_blank"
132
- aria-label="search"
133
- hint="Settings"
135
+ aria-label="settings"
134
136
  icon={SvgSettings}
135
137
  iconActive={SvgSettingsActive}
136
138
  />
@@ -138,7 +140,7 @@ const extraLinks = (
138
140
  );
139
141
 
140
142
  const extraLinksTop = (
141
- <HeaderNavigationTrigger
143
+ <TitanLayout.Trigger
142
144
  id="atlas"
143
145
  title="Atlas"
144
146
  icon={SvgAtlas}
@@ -149,7 +151,7 @@ const extraLinksTop = (
149
151
  />
150
152
  );
151
153
 
152
- const SideLinkPopoverWrapper: FC<SideNavigationLinkWrapperProps> = ({ children, context }) => {
154
+ const SideLinkPopoverWrapper: TitanLayoutLinkWrapper = ({ children, context }) => {
153
155
  return (
154
156
  <Popover placement="right" openOnHover>
155
157
  <Popover.Trigger>{(props: any) => <div {...props}>{children}</div>}</Popover.Trigger>
@@ -159,14 +161,13 @@ const SideLinkPopoverWrapper: FC<SideNavigationLinkWrapperProps> = ({ children,
159
161
  };
160
162
 
161
163
  const sidebarTop = () => [
162
- <TitanLayout.Link key="tasks" {...items.tasks} />,
163
- <TitanLayout.Link key="calls" {...items.calls} />,
164
+ <TitanLayout.Link key="tasks" {...navItems.tasks} />,
165
+ <TitanLayout.Link key="calls" {...navItems.calls} />,
164
166
  <TitanLayout.Trigger
165
167
  key="marketing"
166
- {...items.marketing}
168
+ {...navItems.marketing}
167
169
  isActive={false}
168
170
  wrapper={SideLinkPopoverWrapper}
169
- onMobileClick={() => alert('clicked')}
170
171
  counter={50}
171
172
  />,
172
173
  ];
@@ -204,7 +205,7 @@ const useLayoutProps = (args: LayoutContentArgs): TitanLayoutProps => {
204
205
 
205
206
  navigationComponent: NavLinkMock,
206
207
  navigationMainItems: args.emptyNav ? [] : mainNavItems,
207
- navigationOverflowItems: args.emptyNav ? [] : overflowNavItems,
208
+ navigationOverflowItems: args.emptyNav || !args.overflowItems ? [] : overflowNavItems,
208
209
 
209
210
  profile,
210
211
  top: args.search ? <SearchBar /> : undefined,
@@ -223,10 +224,15 @@ const useLayoutProps = (args: LayoutContentArgs): TitanLayoutProps => {
223
224
  };
224
225
 
225
226
  const Content = (args: LayoutContentArgs) => {
227
+ const [info, setInfo] = useState('');
228
+ useEffect(() => {
229
+ setInfo(new Date().toLocaleTimeString());
230
+ }, []);
226
231
  return (
227
232
  <Fragment>
228
233
  <LocationInfo className="m-b-3" />
229
- <div className="m-b-3">rendered - {new Date().toLocaleTimeString()}</div>
234
+ <div className="m-b-3">component rendered - {info}</div>
235
+ <div className="m-b-3">rerendered - {new Date().toLocaleTimeString()}</div>
230
236
  {args.wideContent && (
231
237
  <div style={{ width: '1200px' }}>
232
238
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
@@ -315,30 +321,8 @@ const Content = (args: LayoutContentArgs) => {
315
321
  );
316
322
  };
317
323
 
318
- export const TitanLayoutLegacy = (args: LayoutContentArgs) => (
319
- <TitanLayout {...useLayoutProps(args)} appearance="legacy">
320
- <div
321
- className="p-3"
322
- style={{ position: 'absolute', width: 'calc(100% - var(--nav-offset-left))' }}
323
- >
324
- <Content {...args} />
325
- </div>
326
- </TitanLayout>
327
- );
328
-
329
- export const TitanLayoutLegacyTopNav = (args: LayoutContentArgs) => (
330
- <TitanLayout {...useLayoutProps(args)} appearance="legacy" navVariant="top">
331
- <div
332
- className="p-3"
333
- style={{ position: 'absolute', width: 'calc(100% - var(--nav-offset-left))' }}
334
- >
335
- <Content {...args} />
336
- </div>
337
- </TitanLayout>
338
- );
339
-
340
- export const TitanLayoutLegacyTop = (args: LayoutContentArgs) => (
341
- <TitanLayout {...useLayoutProps(args)} appearance="legacy" navVariant="top" top={undefined}>
324
+ export const ContentLegacy = (args: LayoutContentArgs) => (
325
+ <TitanLayout {...useLayoutProps(args)} appearance="legacy" {...useDefaultLayoutProps()}>
342
326
  <div
343
327
  className="p-3"
344
328
  style={{ position: 'absolute', width: 'calc(100% - var(--nav-offset-left))' }}
@@ -348,46 +332,43 @@ export const TitanLayoutLegacyTop = (args: LayoutContentArgs) => (
348
332
  </TitanLayout>
349
333
  );
350
334
 
351
- export const TitanLayoutAnvil1 = (args: LayoutContentArgs) => (
352
- <TitanLayout {...useLayoutProps(args)} appearance="anvil1">
335
+ export const ContentAnvil1 = (args: LayoutContentArgs) => (
336
+ <TitanLayout {...useLayoutProps(args)} appearance="anvil1" {...useDefaultLayoutProps()}>
353
337
  <Anvil1Page>
354
338
  <Content {...args} />
355
339
  </Anvil1Page>
356
340
  </TitanLayout>
357
341
  );
358
342
 
359
- export const TitanLayoutAnvil1TopNav = (args: LayoutContentArgs) => (
360
- <TitanLayout {...useLayoutProps(args)} appearance="anvil1" navVariant="top">
361
- <Anvil1Page>
362
- <Content {...args} />
363
- </Anvil1Page>
343
+ export const ContentAnvil2 = (args: LayoutContentArgs) => (
344
+ <TitanLayout {...useLayoutProps(args)} appearance="anvil2" {...useDefaultLayoutProps()}>
345
+ <Anvil2Page>
346
+ <Anvil2Page.Content>
347
+ <Content {...args} />
348
+ </Anvil2Page.Content>
349
+ </Anvil2Page>
364
350
  </TitanLayout>
365
351
  );
366
352
 
367
- export const TitanLayoutAnvil1Top = (args: LayoutContentArgs) => (
353
+ export const ExtraWithTitle = (args: LayoutContentArgs) => (
368
354
  <TitanLayout
369
355
  {...useLayoutProps(args)}
370
- appearance="anvil1"
371
- navVariant="top"
372
- top={undefined}
373
- navigationOverflowItems={undefined}
356
+ appearance="anvil2"
357
+ profile={profileEmpty}
358
+ sideTop={undefined}
359
+ navigationMainItems={[navItems.projects]}
360
+ extraLinks={
361
+ <TitanLayout.Link
362
+ id="search"
363
+ to="/search"
364
+ title="Search"
365
+ icon={SvgSearch}
366
+ iconActive={SvgSearch}
367
+ extra={{ showTitle: true }}
368
+ />
369
+ }
370
+ {...useDefaultLayoutProps()}
374
371
  >
375
- <Anvil1Page>
376
- <Content {...args} />
377
- </Anvil1Page>
378
- </TitanLayout>
379
- );
380
-
381
- export const TitanLayoutAnvil1TopOverflow = (args: LayoutContentArgs) => (
382
- <TitanLayout {...useLayoutProps(args)} appearance="anvil1" navVariant="top" top={undefined}>
383
- <Anvil1Page>
384
- <Content {...args} />
385
- </Anvil1Page>
386
- </TitanLayout>
387
- );
388
-
389
- export const TitanLayoutAnvil2 = (args: LayoutContentArgs) => (
390
- <TitanLayout {...useLayoutProps(args)} appearance="anvil2">
391
372
  <Anvil2Page>
392
373
  <Anvil2Page.Content>
393
374
  <Content {...args} />
@@ -396,8 +377,26 @@ export const TitanLayoutAnvil2 = (args: LayoutContentArgs) => (
396
377
  </TitanLayout>
397
378
  );
398
379
 
399
- export const TitanLayoutAnvil2TopNav = (args: LayoutContentArgs) => (
400
- <TitanLayout {...useLayoutProps(args)} appearance="anvil2" navVariant="top">
380
+ export const ExtraWithFlashing = (args: LayoutContentArgs) => (
381
+ <TitanLayout
382
+ {...useLayoutProps(args)}
383
+ appearance="anvil2"
384
+ profile={profileEmpty}
385
+ sideTop={undefined}
386
+ navigationMainItems={[navItems.projects]}
387
+ extraLinks={
388
+ <TitanLayout.Link
389
+ id="search"
390
+ to="/search"
391
+ title="Search"
392
+ icon={SvgSearch}
393
+ iconActive={SvgSearch}
394
+ extra={{ flashing: true }}
395
+ side={{ counter: true }}
396
+ />
397
+ }
398
+ {...useDefaultLayoutProps()}
399
+ >
401
400
  <Anvil2Page>
402
401
  <Anvil2Page.Content>
403
402
  <Content {...args} />
@@ -406,8 +405,26 @@ export const TitanLayoutAnvil2TopNav = (args: LayoutContentArgs) => (
406
405
  </TitanLayout>
407
406
  );
408
407
 
409
- export const TitanLayoutAnvil2Top = (args: LayoutContentArgs) => (
410
- <TitanLayout {...useLayoutProps(args)} appearance="anvil2" navVariant="top" top={undefined}>
408
+ export const ExtraWithTitleFlashing = (args: LayoutContentArgs) => (
409
+ <TitanLayout
410
+ {...useLayoutProps(args)}
411
+ appearance="anvil2"
412
+ profile={profileEmpty}
413
+ sideTop={undefined}
414
+ navigationMainItems={[navItems.projects]}
415
+ extraLinks={
416
+ <TitanLayout.Link
417
+ id="search"
418
+ to="/search"
419
+ title="Search"
420
+ icon={SvgSearch}
421
+ iconActive={SvgSearch}
422
+ extra={{ showTitle: true, flashing: true }}
423
+ side={{ counter: true }}
424
+ />
425
+ }
426
+ {...useDefaultLayoutProps()}
427
+ >
411
428
  <Anvil2Page>
412
429
  <Anvil2Page.Content>
413
430
  <Content {...args} />
@@ -0,0 +1,24 @@
1
+ import { withAnvil, withDefaultRedirects, withMemoryRouter } from '../../test/data';
2
+ import { getDefaultArgs, withDefaultLayoutProps } from '../../test/titan-layout';
3
+
4
+ export default {
5
+ title: 'Navigation/TitanLayout/Legacy',
6
+ decorators: [
7
+ withDefaultLayoutProps({ navVariant: 'top', top: undefined }),
8
+ withDefaultRedirects,
9
+ withMemoryRouter,
10
+ withAnvil,
11
+ ],
12
+ parameters: {},
13
+ argTypes: {},
14
+ args: getDefaultArgs(),
15
+ };
16
+
17
+ export {
18
+ ContentLegacy,
19
+ ContentAnvil1,
20
+ ContentAnvil2,
21
+ ExtraWithTitle,
22
+ ExtraWithFlashing,
23
+ ExtraWithTitleFlashing,
24
+ } from './titan-layout-default.stories';
@@ -0,0 +1,34 @@
1
+ import { FC } from 'react';
2
+
3
+ import { TitanLayoutLinkProps, TitanLayoutTriggerProps } from './interface';
4
+ import { useTitanLayoutPlacementContext } from './layout-context';
5
+ import { LayoutHeaderNavigationLink, LayoutHeaderNavigationTrigger } from './layout-header-links';
6
+ import { LayoutSidebarLink, LayoutSidebarTrigger } from './layout-sidebar-links';
7
+
8
+ export const TitanLayoutLink: FC<TitanLayoutLinkProps> = props => {
9
+ const placement = useTitanLayoutPlacementContext();
10
+
11
+ if (placement === 'top') {
12
+ return <LayoutHeaderNavigationLink {...props} />;
13
+ }
14
+
15
+ if (placement === 'side') {
16
+ return <LayoutSidebarLink {...props} />;
17
+ }
18
+
19
+ return null;
20
+ };
21
+
22
+ export const TitanLayoutTrigger: FC<TitanLayoutTriggerProps> = props => {
23
+ const placement = useTitanLayoutPlacementContext();
24
+
25
+ if (placement === 'top') {
26
+ return <LayoutHeaderNavigationTrigger {...props} />;
27
+ }
28
+
29
+ if (placement === 'side') {
30
+ return <LayoutSidebarTrigger {...props} />;
31
+ }
32
+
33
+ return null;
34
+ };
@@ -0,0 +1,30 @@
1
+ import { TextField } from '@servicetitan/anvil2';
2
+
3
+ import { withAnvil, withDefaultRedirects, withMemoryRouter } from '../../test/data';
4
+ import { getDefaultArgs, withDefaultLayoutProps } from '../../test/titan-layout';
5
+
6
+ const SearchBar = () => (
7
+ <TextField size="small" placeholder="Search" className="w-100-i m-x-half-i" />
8
+ );
9
+
10
+ export default {
11
+ title: 'Navigation/TitanLayout/Stacked',
12
+ decorators: [
13
+ withDefaultLayoutProps({ navVariant: 'top', top: <SearchBar /> }),
14
+ withDefaultRedirects,
15
+ withMemoryRouter,
16
+ withAnvil,
17
+ ],
18
+ parameters: {},
19
+ argTypes: {},
20
+ args: getDefaultArgs(),
21
+ };
22
+
23
+ export {
24
+ ContentLegacy,
25
+ ContentAnvil1,
26
+ ContentAnvil2,
27
+ ExtraWithTitle,
28
+ ExtraWithFlashing,
29
+ ExtraWithTitleFlashing,
30
+ } from './titan-layout-default.stories';
@@ -4,6 +4,7 @@ import {
4
4
  ComponentPropsWithoutRef,
5
5
  FC,
6
6
  Fragment,
7
+ MouseEvent,
7
8
  ReactElement,
8
9
  ReactNode,
9
10
  useCallback,
@@ -26,9 +27,9 @@ import { LayoutHeader } from './layout-header';
26
27
  import { LayoutHeaderDark } from './layout-header-dark';
27
28
  import { TitanLayoutLogoProps } from './layout-logo';
28
29
  import { LayoutSidebar } from './layout-sidebar';
29
- import { TitanLayoutSidebarLink, TitanLayoutSidebarTrigger } from './layout-sidebar-links';
30
30
  import { InternalSideNavigationTrigger } from './layout-sidebar-links-internal';
31
31
  import { useNotificationsState } from './notifications-context';
32
+ import { TitanLayoutLink, TitanLayoutTrigger } from './titan-layout-links';
32
33
  import * as Styles from './titan-layout.module.less';
33
34
 
34
35
  export type TitanLayoutProps = Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'style'> & {
@@ -92,7 +93,7 @@ const useAppearance = (appearance: TitanLayoutProps['appearance']) =>
92
93
  };
93
94
  }, [appearance]);
94
95
 
95
- const TitanLayoutComponent: FC<TitanLayoutProps> = ({
96
+ function TitanLayoutComponent({
96
97
  appearance = 'anvil2',
97
98
  navVariant = 'left',
98
99
  id,
@@ -112,7 +113,7 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
112
113
  extraText,
113
114
  minContentWidth,
114
115
  sideTop,
115
- }) => {
116
+ }: TitanLayoutProps) {
116
117
  const breakpoint = useTitanBreakpoint();
117
118
  const context: TitanLayoutContextType = useMemo(
118
119
  () => ({
@@ -148,10 +149,18 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
148
149
  }
149
150
  }, [view.isAnvil1]);
150
151
 
151
- const onBurgerClick = useCallback((e: MouseEvent) => {
152
- setMobileDrawerOpened(true);
153
- e.stopPropagation();
154
- }, []);
152
+ const onBurgerClick = useCallback(
153
+ (e: MouseEvent<never>) => {
154
+ if (isMobile) {
155
+ setMobileDrawerOpened(true);
156
+ } else {
157
+ onStateChange?.({ navCollapsed: !state?.navCollapsed });
158
+ }
159
+
160
+ e.stopPropagation();
161
+ },
162
+ [isMobile, state?.navCollapsed, onStateChange]
163
+ );
155
164
 
156
165
  const onBarExpandChange = useCallback(
157
166
  (expanded: boolean) => {
@@ -167,7 +176,10 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
167
176
  (id: string, expanded: boolean) => {
168
177
  onStateChange?.({
169
178
  navCollapsed: state?.navCollapsed ?? false,
170
- submenuExpanded: expanded ? id : undefined,
179
+ submenusExpanded: [
180
+ ...(state?.submenusExpanded ?? []).filter(i => i !== id),
181
+ ...(expanded ? [id] : []),
182
+ ],
171
183
  });
172
184
  },
173
185
  [state, onStateChange]
@@ -271,7 +283,17 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
271
283
  </Fragment>
272
284
  }
273
285
  isMobile={isMobile}
274
- hasNotifications={hasNotifications || hasMenuNotifications}
286
+ hasNotifications={
287
+ isMobile && (hasNotifications || hasMenuNotifications)
288
+ }
289
+ hasBurger={hasSideBar}
290
+ burgerTooltip={
291
+ isMobile
292
+ ? undefined
293
+ : state?.navCollapsed
294
+ ? 'Expand'
295
+ : 'Collapse'
296
+ }
275
297
  onBurgerClick={onBurgerClick}
276
298
  />
277
299
  ) : (
@@ -290,6 +312,7 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
290
312
  isMobile={isMobile}
291
313
  hasNotifications={hasNotifications || hasMenuNotifications}
292
314
  onBurgerClick={onBurgerClick}
315
+ hasBurger={isMobile}
293
316
  navigationMainItems={navigationMainItems}
294
317
  navigationOverflowItems={navigationOverflowItems}
295
318
  />
@@ -302,7 +325,7 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
302
325
  mobile={breakpoint.isMobile}
303
326
  barExpanded={!state?.navCollapsed}
304
327
  onBarExpandChange={onBarExpandChange}
305
- submenuExpanded={state?.submenuExpanded}
328
+ submenusExpanded={state?.submenusExpanded}
306
329
  onSubmenuExpandChange={onSubmenuExpandChange}
307
330
  drawerOpened={mobileDrawerOpened}
308
331
  onDrawerOpenChange={setMobileDrawerOpened}
@@ -318,10 +341,11 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
318
341
  <InternalSideNavigationTrigger
319
342
  id="--extra-text"
320
343
  title={extraText}
321
- submenuExpanded={undefined}
322
- tag={undefined}
344
+ isActive={undefined}
323
345
  icon={undefined}
324
346
  iconActive={undefined}
347
+ tag={undefined}
348
+ className={undefined}
325
349
  />
326
350
  )}
327
351
  </Fragment>
@@ -351,7 +375,7 @@ const TitanLayoutComponent: FC<TitanLayoutProps> = ({
351
375
  </LayoutPlacementContext.Provider>
352
376
  </LayoutContext.Provider>
353
377
  );
354
- };
378
+ }
355
379
 
356
380
  const TitanLayoutHeaderObserved: FC<{
357
381
  children: ReactNode;
@@ -445,6 +469,6 @@ const LayoutContentLegacy: FC<{
445
469
  };
446
470
 
447
471
  export const TitanLayout = Object.assign(TitanLayoutComponent, {
448
- Link: TitanLayoutSidebarLink,
449
- Trigger: TitanLayoutSidebarTrigger,
472
+ Link: TitanLayoutLink,
473
+ Trigger: TitanLayoutTrigger,
450
474
  });
package/src/index.ts CHANGED
@@ -1,19 +1,8 @@
1
- export * from './components/header-navigation';
2
1
  export * from './components/logo/logo-company-title';
3
2
  export * from './components/logo/logo-titan';
4
3
  export * from './components/logo/logo-titan-text';
5
4
  export * from './components/counter-tag';
6
- export * from './components/left-navigation';
7
5
  export * from './components/titan-layout';
8
- export * from './components/links';
9
6
  export type * from './utils/navigation';
10
- export type {
11
- NavLinkComponentPropsStrict,
12
- NavLinkComponentProps,
13
- NavigationLocationContextType,
14
- NavigationLocationInfo,
15
- NavigationActiveLinkMatcher,
16
- } from './utils/navigation-context';
17
- export { NavigationComponentContext, NavigationLocationContext } from './utils/navigation-context';
18
- export type * from './utils/navigation-legacy';
7
+ export type { NavLinkComponentProps } from './utils/navigation-context';
19
8
  export * from './utils/use-breakpoint';