@servicetitan/navigation 12.0.3 → 13.0.0-canary.256.5761ed1.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 (248) 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 +66 -13
  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 +21 -11
  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 +2 -2
  35. package/dist/components/titan-layout/layout-header.d.ts.map +1 -1
  36. package/dist/components/titan-layout/layout-header.js.map +1 -1
  37. package/dist/components/titan-layout/layout-header.module.less +31 -0
  38. package/dist/components/titan-layout/layout-header.module.less.d.ts +2 -0
  39. package/dist/components/titan-layout/layout-profile.d.ts +8 -5
  40. package/dist/components/titan-layout/layout-profile.d.ts.map +1 -1
  41. package/dist/components/titan-layout/layout-profile.js +30 -28
  42. package/dist/components/titan-layout/layout-profile.js.map +1 -1
  43. package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts +48 -25
  44. package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts.map +1 -1
  45. package/dist/components/titan-layout/layout-sidebar-links-internal.js +56 -52
  46. package/dist/components/titan-layout/layout-sidebar-links-internal.js.map +1 -1
  47. package/dist/components/titan-layout/layout-sidebar-links.d.ts +3 -3
  48. package/dist/components/titan-layout/layout-sidebar-links.d.ts.map +1 -1
  49. package/dist/components/titan-layout/layout-sidebar-links.js +33 -18
  50. package/dist/components/titan-layout/layout-sidebar-links.js.map +1 -1
  51. package/dist/components/titan-layout/layout-sidebar.d.ts.map +1 -1
  52. package/dist/components/titan-layout/layout-sidebar.js +49 -24
  53. package/dist/components/titan-layout/layout-sidebar.js.map +1 -1
  54. package/dist/components/titan-layout/titan-layout-default.stories.d.ts +16 -0
  55. package/dist/components/titan-layout/titan-layout-default.stories.d.ts.map +1 -0
  56. package/dist/components/titan-layout/titan-layout-legacy.stories.d.ts +10 -0
  57. package/dist/components/titan-layout/titan-layout-legacy.stories.d.ts.map +1 -0
  58. package/dist/components/titan-layout/titan-layout-links.d.ts +5 -0
  59. package/dist/components/titan-layout/titan-layout-links.d.ts.map +1 -0
  60. package/dist/components/titan-layout/titan-layout-links.js +34 -0
  61. package/dist/components/titan-layout/titan-layout-links.js.map +1 -0
  62. package/dist/components/titan-layout/titan-layout-stacked.stories.d.ts +10 -0
  63. package/dist/components/titan-layout/titan-layout-stacked.stories.d.ts.map +1 -0
  64. package/dist/components/titan-layout/titan-layout.d.ts +5 -4
  65. package/dist/components/titan-layout/titan-layout.d.ts.map +1 -1
  66. package/dist/components/titan-layout/titan-layout.js +10 -8
  67. package/dist/components/titan-layout/titan-layout.js.map +1 -1
  68. package/dist/index.d.ts +1 -6
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +0 -4
  71. package/dist/index.js.map +1 -1
  72. package/dist/test/data.d.ts +26 -23
  73. package/dist/test/data.d.ts.map +1 -1
  74. package/dist/test/data.js +26 -69
  75. package/dist/test/data.js.map +1 -1
  76. package/dist/test/titan-layout.d.ts +16 -0
  77. package/dist/test/titan-layout.d.ts.map +1 -0
  78. package/dist/test/titan-layout.js +21 -0
  79. package/dist/test/titan-layout.js.map +1 -0
  80. package/dist/utils/navigation-context.d.ts +3 -22
  81. package/dist/utils/navigation-context.d.ts.map +1 -1
  82. package/dist/utils/navigation-context.js +2 -10
  83. package/dist/utils/navigation-context.js.map +1 -1
  84. package/dist/utils/navigation.d.ts +2 -7
  85. package/dist/utils/navigation.d.ts.map +1 -1
  86. package/dist/utils/navigation.js.map +1 -1
  87. package/package.json +2 -2
  88. package/src/components/counter-tag.tsx +1 -1
  89. package/src/components/profile-dropdown/interface.ts +47 -0
  90. package/src/components/profile-dropdown/profile-dropdown-legacy.stories.tsx +25 -0
  91. package/src/components/profile-dropdown/profile-dropdown-stacked.stories.tsx +15 -7
  92. package/src/components/profile-dropdown/profile-dropdown.stories.tsx +50 -43
  93. package/src/components/profile-dropdown/profile-dropdown.tsx +39 -115
  94. package/src/components/titan-layout/interface-internal.ts +13 -0
  95. package/src/components/titan-layout/interface.ts +72 -16
  96. package/src/components/titan-layout/layout-header-dark.tsx +17 -4
  97. package/src/components/titan-layout/layout-header-links-internal.tsx +41 -54
  98. package/src/components/titan-layout/layout-header-links.tsx +65 -12
  99. package/src/components/titan-layout/layout-header.module.less +31 -0
  100. package/src/components/titan-layout/layout-header.module.less.d.ts +2 -0
  101. package/src/components/titan-layout/layout-header.tsx +2 -2
  102. package/src/components/titan-layout/layout-profile.tsx +53 -34
  103. package/src/components/titan-layout/layout-sidebar-links-internal.tsx +169 -116
  104. package/src/components/titan-layout/layout-sidebar-links.tsx +73 -24
  105. package/src/components/titan-layout/layout-sidebar.tsx +52 -28
  106. package/src/components/titan-layout/{titan-layout.stories.tsx → titan-layout-default.stories.tsx} +125 -113
  107. package/src/components/titan-layout/titan-layout-legacy.stories.tsx +24 -0
  108. package/src/components/titan-layout/titan-layout-links.tsx +34 -0
  109. package/src/components/titan-layout/titan-layout-stacked.stories.tsx +30 -0
  110. package/src/components/titan-layout/titan-layout.tsx +12 -9
  111. package/src/index.ts +1 -12
  112. package/src/test/data.tsx +31 -83
  113. package/src/test/titan-layout.tsx +34 -0
  114. package/src/utils/navigation-context.tsx +9 -35
  115. package/src/utils/navigation.ts +3 -10
  116. package/dist/components/header-navigation/header-navigation-content.d.ts +0 -30
  117. package/dist/components/header-navigation/header-navigation-content.d.ts.map +0 -1
  118. package/dist/components/header-navigation/header-navigation-content.js +0 -58
  119. package/dist/components/header-navigation/header-navigation-content.js.map +0 -1
  120. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts +0 -9
  121. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts.map +0 -1
  122. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts +0 -12
  123. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts.map +0 -1
  124. package/dist/components/header-navigation/header-navigation-links.d.ts +0 -11
  125. package/dist/components/header-navigation/header-navigation-links.d.ts.map +0 -1
  126. package/dist/components/header-navigation/header-navigation-links.js +0 -62
  127. package/dist/components/header-navigation/header-navigation-links.js.map +0 -1
  128. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts +0 -12
  129. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts.map +0 -1
  130. package/dist/components/header-navigation/header-navigation-stories.module.less +0 -6
  131. package/dist/components/header-navigation/header-navigation-stories.module.less.d.ts +0 -3
  132. package/dist/components/header-navigation/header-navigation.d.ts +0 -59
  133. package/dist/components/header-navigation/header-navigation.d.ts.map +0 -1
  134. package/dist/components/header-navigation/header-navigation.js +0 -228
  135. package/dist/components/header-navigation/header-navigation.js.map +0 -1
  136. package/dist/components/header-navigation/header-navigation.module.less +0 -260
  137. package/dist/components/header-navigation/header-navigation.module.less.d.ts +0 -22
  138. package/dist/components/header-navigation/header-navigation.stories.d.ts +0 -12
  139. package/dist/components/header-navigation/header-navigation.stories.d.ts.map +0 -1
  140. package/dist/components/header-navigation/index.d.ts +0 -2
  141. package/dist/components/header-navigation/index.d.ts.map +0 -1
  142. package/dist/components/header-navigation/index.js +0 -3
  143. package/dist/components/header-navigation/index.js.map +0 -1
  144. package/dist/components/header-navigation/with-tooltip.d.ts +0 -4
  145. package/dist/components/header-navigation/with-tooltip.d.ts.map +0 -1
  146. package/dist/components/header-navigation/with-tooltip.js +0 -10
  147. package/dist/components/header-navigation/with-tooltip.js.map +0 -1
  148. package/dist/components/layout.stories.d.ts +0 -13
  149. package/dist/components/layout.stories.d.ts.map +0 -1
  150. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts +0 -9
  151. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts.map +0 -1
  152. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts +0 -18
  153. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts.map +0 -1
  154. package/dist/components/left-navigation/header-navigation-tiny-links.js +0 -79
  155. package/dist/components/left-navigation/header-navigation-tiny-links.js.map +0 -1
  156. package/dist/components/left-navigation/header-navigation-tiny.d.ts +0 -23
  157. package/dist/components/left-navigation/header-navigation-tiny.d.ts.map +0 -1
  158. package/dist/components/left-navigation/header-navigation-tiny.js +0 -32
  159. package/dist/components/left-navigation/header-navigation-tiny.js.map +0 -1
  160. package/dist/components/left-navigation/header-navigation-tiny.module.less +0 -117
  161. package/dist/components/left-navigation/header-navigation-tiny.module.less.d.ts +0 -15
  162. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts +0 -12
  163. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts.map +0 -1
  164. package/dist/components/left-navigation/index.d.ts +0 -5
  165. package/dist/components/left-navigation/index.d.ts.map +0 -1
  166. package/dist/components/left-navigation/index.js +0 -5
  167. package/dist/components/left-navigation/index.js.map +0 -1
  168. package/dist/components/left-navigation/interface-internal.d.ts +0 -10
  169. package/dist/components/left-navigation/interface-internal.d.ts.map +0 -1
  170. package/dist/components/left-navigation/interface-internal.js +0 -3
  171. package/dist/components/left-navigation/interface-internal.js.map +0 -1
  172. package/dist/components/left-navigation/interface.d.ts +0 -20
  173. package/dist/components/left-navigation/interface.d.ts.map +0 -1
  174. package/dist/components/left-navigation/interface.js.map +0 -1
  175. package/dist/components/left-navigation/side-navigation-context.d.ts +0 -8
  176. package/dist/components/left-navigation/side-navigation-context.d.ts.map +0 -1
  177. package/dist/components/left-navigation/side-navigation-context.js +0 -8
  178. package/dist/components/left-navigation/side-navigation-context.js.map +0 -1
  179. package/dist/components/left-navigation/side-navigation-links-internal.d.ts +0 -28
  180. package/dist/components/left-navigation/side-navigation-links-internal.d.ts.map +0 -1
  181. package/dist/components/left-navigation/side-navigation-links-internal.js +0 -89
  182. package/dist/components/left-navigation/side-navigation-links-internal.js.map +0 -1
  183. package/dist/components/left-navigation/side-navigation-links.d.ts +0 -6
  184. package/dist/components/left-navigation/side-navigation-links.d.ts.map +0 -1
  185. package/dist/components/left-navigation/side-navigation-links.js +0 -48
  186. package/dist/components/left-navigation/side-navigation-links.js.map +0 -1
  187. package/dist/components/left-navigation/side-navigation.d.ts +0 -29
  188. package/dist/components/left-navigation/side-navigation.d.ts.map +0 -1
  189. package/dist/components/left-navigation/side-navigation.js +0 -411
  190. package/dist/components/left-navigation/side-navigation.js.map +0 -1
  191. package/dist/components/left-navigation/side-navigation.module.less +0 -530
  192. package/dist/components/left-navigation/side-navigation.module.less.d.ts +0 -48
  193. package/dist/components/left-navigation/side-navigation.stories.d.ts +0 -17
  194. package/dist/components/left-navigation/side-navigation.stories.d.ts.map +0 -1
  195. package/dist/components/left-navigation/with-tooltip.d.ts +0 -4
  196. package/dist/components/left-navigation/with-tooltip.d.ts.map +0 -1
  197. package/dist/components/left-navigation/with-tooltip.js +0 -15
  198. package/dist/components/left-navigation/with-tooltip.js.map +0 -1
  199. package/dist/components/links.d.ts +0 -5
  200. package/dist/components/links.d.ts.map +0 -1
  201. package/dist/components/links.js +0 -35
  202. package/dist/components/links.js.map +0 -1
  203. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts +0 -9
  204. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts.map +0 -1
  205. package/dist/components/titan-layout/layout-profile.stories.d.ts +0 -13
  206. package/dist/components/titan-layout/layout-profile.stories.d.ts.map +0 -1
  207. package/dist/components/titan-layout/titan-layout.stories.d.ts +0 -29
  208. package/dist/components/titan-layout/titan-layout.stories.d.ts.map +0 -1
  209. package/dist/utils/navigation-legacy.d.ts +0 -88
  210. package/dist/utils/navigation-legacy.d.ts.map +0 -1
  211. package/dist/utils/navigation-legacy.js +0 -3
  212. package/dist/utils/navigation-legacy.js.map +0 -1
  213. package/src/components/header-navigation/header-navigation-content.tsx +0 -120
  214. package/src/components/header-navigation/header-navigation-extra-stacked.stories.tsx +0 -19
  215. package/src/components/header-navigation/header-navigation-extra.stories.tsx +0 -142
  216. package/src/components/header-navigation/header-navigation-links.tsx +0 -141
  217. package/src/components/header-navigation/header-navigation-stacked.stories.tsx +0 -146
  218. package/src/components/header-navigation/header-navigation-stories.module.less +0 -6
  219. package/src/components/header-navigation/header-navigation-stories.module.less.d.ts +0 -3
  220. package/src/components/header-navigation/header-navigation.module.less +0 -260
  221. package/src/components/header-navigation/header-navigation.module.less.d.ts +0 -22
  222. package/src/components/header-navigation/header-navigation.stories.tsx +0 -165
  223. package/src/components/header-navigation/header-navigation.tsx +0 -327
  224. package/src/components/header-navigation/index.ts +0 -1
  225. package/src/components/header-navigation/with-tooltip.tsx +0 -15
  226. package/src/components/layout.stories.tsx +0 -103
  227. package/src/components/left-navigation/header-navigation-extra-tiny.stories.tsx +0 -21
  228. package/src/components/left-navigation/header-navigation-tiny-links.tsx +0 -145
  229. package/src/components/left-navigation/header-navigation-tiny.module.less +0 -117
  230. package/src/components/left-navigation/header-navigation-tiny.module.less.d.ts +0 -15
  231. package/src/components/left-navigation/header-navigation-tiny.stories.tsx +0 -178
  232. package/src/components/left-navigation/header-navigation-tiny.tsx +0 -65
  233. package/src/components/left-navigation/index.ts +0 -4
  234. package/src/components/left-navigation/interface-internal.ts +0 -11
  235. package/src/components/left-navigation/interface.ts +0 -26
  236. package/src/components/left-navigation/side-navigation-context.tsx +0 -13
  237. package/src/components/left-navigation/side-navigation-links-internal.tsx +0 -151
  238. package/src/components/left-navigation/side-navigation-links.tsx +0 -57
  239. package/src/components/left-navigation/side-navigation.module.less +0 -530
  240. package/src/components/left-navigation/side-navigation.module.less.d.ts +0 -48
  241. package/src/components/left-navigation/side-navigation.stories.tsx +0 -226
  242. package/src/components/left-navigation/side-navigation.tsx +0 -543
  243. package/src/components/left-navigation/with-tooltip.tsx +0 -16
  244. package/src/components/links.tsx +0 -54
  245. package/src/components/profile-dropdown/profile-dropdown-tiny.stories.tsx +0 -25
  246. package/src/components/titan-layout/layout-profile.stories.tsx +0 -46
  247. package/src/utils/navigation-legacy.ts +0 -106
  248. /package/dist/components/{left-navigation → profile-dropdown}/interface.js +0 -0
@@ -1,6 +1,6 @@
1
1
  import { FC, ReactElement } from 'react';
2
2
  import { getCounterTag } from '../../utils/side-nav';
3
- import { TitanLayoutSidebarLinkProps, TitanLayoutSidebarTriggerProps } from './interface';
3
+ import { TitanLayoutLinkProps, TitanLayoutTriggerProps } from './interface';
4
4
  import { useTitanLayoutContext } from './layout-context';
5
5
  import {
6
6
  InternalSideNavigationLink,
@@ -10,62 +10,111 @@ import { useNotificationsContext } from './notifications-context';
10
10
 
11
11
  const WrappedLink: FC<{
12
12
  children: ReactElement<any>;
13
- wrapper: NonNullable<TitanLayoutSidebarLinkProps['wrapper']>;
14
- }> = ({ children, wrapper: WrapperComponent }) => {
13
+ wrapper: NonNullable<TitanLayoutLinkProps['wrapper']>;
14
+ isMobile: boolean;
15
+ }> = ({ children, isMobile, wrapper: WrapperComponent }) => {
15
16
  const { sidebar } = useTitanLayoutContext();
16
- return <WrapperComponent context={sidebar}>{children}</WrapperComponent>;
17
+ return (
18
+ <WrapperComponent isMobile={isMobile} context={sidebar}>
19
+ {children}
20
+ </WrapperComponent>
21
+ );
17
22
  };
18
23
 
19
24
  /** Side Navigation menu link */
20
- export function TitanLayoutSidebarLink({ wrapper, ...props }: TitanLayoutSidebarLinkProps) {
25
+ export function LayoutSidebarLink({
26
+ id,
27
+ to,
28
+ title,
29
+ isActive,
30
+ icon,
31
+ iconActive,
32
+ counter,
33
+ tag,
34
+ className,
35
+
36
+ tooltip,
37
+ wrapper,
38
+ extra,
39
+ side,
40
+ ...rest
41
+ }: TitanLayoutLinkProps) {
21
42
  const {
22
43
  NavigationComponent,
23
44
  breakpoint: { isMobile },
24
45
  } = useTitanLayoutContext();
25
46
  const { onNotificationsUpdate } = useNotificationsContext();
26
- const tag = getCounterTag(props.counter, props.tag);
47
+ const tagData = getCounterTag(side?.counter ?? counter, tag);
27
48
 
28
- onNotificationsUpdate(props.id, !!tag);
49
+ onNotificationsUpdate(id, !!tagData);
29
50
 
30
51
  const element = (
31
52
  <InternalSideNavigationLink
32
- {...props}
53
+ id={id}
54
+ to={to}
55
+ title={title}
56
+ isActive={isActive}
57
+ icon={icon}
58
+ iconActive={iconActive}
59
+ tag={tagData}
60
+ className={className}
61
+ {...rest}
33
62
  navigationComponent={NavigationComponent}
34
63
  submenuExpanded={undefined}
35
- dataPrefix="navigation-item"
36
- tag={tag}
37
64
  />
38
65
  );
39
66
 
40
- return wrapper && !isMobile ? <WrappedLink wrapper={wrapper}>{element}</WrappedLink> : element;
67
+ return wrapper ? (
68
+ <WrappedLink isMobile={isMobile} wrapper={wrapper}>
69
+ {element}
70
+ </WrappedLink>
71
+ ) : (
72
+ element
73
+ );
41
74
  }
42
75
 
43
76
  /** Side Navigation menu trigger */
44
- export function TitanLayoutSidebarTrigger({
77
+ export function LayoutSidebarTrigger({
78
+ id,
79
+ title,
80
+ isActive,
81
+ icon,
82
+ iconActive,
83
+ counter,
84
+ tag,
85
+ className,
86
+
87
+ tooltip,
45
88
  wrapper,
46
- onMobileClick,
47
- onClick,
48
- ...props
49
- }: TitanLayoutSidebarTriggerProps) {
89
+ extra,
90
+ side,
91
+ ...rest
92
+ }: TitanLayoutTriggerProps) {
50
93
  const {
51
94
  breakpoint: { isMobile },
52
95
  } = useTitanLayoutContext();
53
96
  const { onNotificationsUpdate } = useNotificationsContext();
54
- const tag = getCounterTag(props.counter, props.tag);
97
+ const tagData = getCounterTag(side?.counter ?? counter, tag);
55
98
 
56
- onNotificationsUpdate(props.id, !!tag);
99
+ onNotificationsUpdate(id, !!tagData);
57
100
 
58
101
  const element = (
59
102
  <InternalSideNavigationTrigger
60
- {...props}
103
+ id={id}
104
+ title={title}
105
+ isActive={isActive}
106
+ icon={icon}
107
+ iconActive={iconActive}
108
+ tag={tagData}
109
+ className={className}
110
+ {...rest}
61
111
  submenuExpanded={undefined}
62
- dataPrefix="navigation-trigger"
63
- tag={tag}
64
- onClick={isMobile && !!onMobileClick ? onMobileClick : onClick}
65
112
  />
66
113
  );
67
- return wrapper && (!isMobile || !onMobileClick) ? (
68
- <WrappedLink wrapper={wrapper}>{element}</WrappedLink>
114
+ return wrapper ? (
115
+ <WrappedLink isMobile={isMobile} wrapper={wrapper}>
116
+ {element}
117
+ </WrappedLink>
69
118
  ) : (
70
119
  element
71
120
  );
@@ -95,22 +95,28 @@ export const LayoutSidebar: FC<LayoutSidebarProps> = ({
95
95
  item.submenu ? (
96
96
  <SideNavigationGroupItem
97
97
  key={item.id}
98
+ item={item}
98
99
  barExpanded={mobile ? drawerOpened : barExpanded}
99
100
  submenuExpanded={!!item.id && submenuExpanded === item.id}
100
101
  onSubmenuExpand={onSubmenuExpandChange}
101
102
  navigationComponent={navigationComponent}
102
- {...item}
103
103
  />
104
104
  ) : (
105
105
  <InternalSideNavigationLink
106
106
  key={item.id}
107
- submenuExpanded={undefined}
108
- navigationComponent={navigationComponent}
109
- {...item}
107
+ id={item.id}
108
+ to={item.to}
109
+ title={item.title}
110
+ isActive={item.isActive}
111
+ icon={item.icon}
112
+ iconActive={item.iconActive}
113
+ className={item.className}
110
114
  tag={getSubmenuGroupTag(
111
115
  item.submenu,
112
116
  getCounterTag(item.counter, item.tag)
113
117
  )}
118
+ submenuExpanded={undefined}
119
+ navigationComponent={navigationComponent}
114
120
  />
115
121
  )
116
122
  )}
@@ -170,24 +176,23 @@ const SideNavigationOptionsToggle: FC<{
170
176
  );
171
177
 
172
178
  /** Side Navigation menu item */
173
- const SideNavigationGroupItem: FC<
174
- NavigationItemData & {
175
- navigationComponent: FC<NavLinkComponentProps>;
176
- barExpanded: boolean;
177
- submenuExpanded: boolean;
178
- onSubmenuExpand: undefined | ((id: string, expanded: boolean) => void);
179
- }
180
- > = ({ onSubmenuExpand, barExpanded, submenuExpanded, ...props }) => {
179
+ const SideNavigationGroupItem: FC<{
180
+ item: NavigationItemData;
181
+ navigationComponent: FC<NavLinkComponentProps>;
182
+ barExpanded: boolean;
183
+ submenuExpanded: boolean;
184
+ onSubmenuExpand: undefined | ((id: string, expanded: boolean) => void);
185
+ }> = ({ item, onSubmenuExpand, barExpanded, submenuExpanded, navigationComponent }) => {
181
186
  const onExpandToggle = useCallback(
182
187
  (e: MouseEvent<never>) => {
183
188
  e.preventDefault();
184
189
  e.stopPropagation();
185
190
 
186
- if (props.id) {
187
- onSubmenuExpand?.(props.id, !submenuExpanded);
191
+ if (item.id) {
192
+ onSubmenuExpand?.(item.id, !submenuExpanded);
188
193
  }
189
194
  },
190
- [props.id, submenuExpanded, onSubmenuExpand]
195
+ [item.id, submenuExpanded, onSubmenuExpand]
191
196
  );
192
197
  const {
193
198
  sidebar: {
@@ -195,19 +200,26 @@ const SideNavigationGroupItem: FC<
195
200
  },
196
201
  } = useTitanLayoutContext();
197
202
 
198
- const tag = getSubmenuGroupTag(props.submenu, getCounterTag(props.counter, props.tag));
203
+ const tag = getSubmenuGroupTag(item.submenu, getCounterTag(item.counter, item.tag));
199
204
 
200
205
  return barExpanded ? (
201
206
  <InternalSideNavigationGroup
202
- {...props}
207
+ id={item.id}
208
+ to={item.to}
209
+ title={item.title}
210
+ isActive={item.isActive}
211
+ icon={item.icon}
212
+ iconActive={item.iconActive}
213
+ className={item.className}
214
+ tag={tag}
203
215
  submenuExpanded={submenuExpanded}
204
216
  onExpandToggle={onExpandToggle}
205
- tag={tag}
217
+ navigationComponent={navigationComponent}
206
218
  >
207
219
  <SideNavigationGroupContent
208
- parentId={props.id}
209
- groups={props.submenu?.groups ?? []}
210
- navigationComponent={props.navigationComponent}
220
+ parentId={item.id}
221
+ groups={item.submenu?.groups ?? []}
222
+ navigationComponent={navigationComponent}
211
223
  />
212
224
  </InternalSideNavigationGroup>
213
225
  ) : (
@@ -216,9 +228,16 @@ const SideNavigationGroupItem: FC<
216
228
  {(triggerProps: any) => (
217
229
  <div {...triggerProps}>
218
230
  <InternalSideNavigationLink
219
- {...props}
220
- submenuExpanded={undefined}
231
+ id={item.id}
232
+ to={item.to}
233
+ title={item.title}
234
+ isActive={item.isActive}
235
+ icon={item.icon}
236
+ iconActive={item.iconActive}
237
+ className={item.className}
221
238
  tag={tag}
239
+ submenuExpanded={undefined}
240
+ navigationComponent={navigationComponent}
222
241
  />
223
242
  </div>
224
243
  )}
@@ -231,12 +250,12 @@ const SideNavigationGroupItem: FC<
231
250
  size="small"
232
251
  className="c-white m-b-half-i m-t-1"
233
252
  >
234
- {props.title}
253
+ {item.title}
235
254
  </Text>
236
255
  <SideNavigationGroupContent
237
- parentId={props.id}
238
- groups={props.submenu?.groups ?? []}
239
- navigationComponent={props.navigationComponent}
256
+ parentId={item.id}
257
+ groups={item.submenu?.groups ?? []}
258
+ navigationComponent={navigationComponent}
240
259
  />
241
260
  </div>
242
261
  </Popover.Content>
@@ -270,7 +289,12 @@ const SideNavigationGroupContent: FC<
270
289
  ...group.links.map((link, index) => (
271
290
  <InternalSideNavigationGroupLink
272
291
  key={`:${parentId}:${link.id}:${index}`}
273
- {...link}
292
+ id={link.id}
293
+ to={link.to}
294
+ title={link.title}
295
+ isActive={link.isActive}
296
+ className={undefined}
297
+ tag={getCounterTag(link.counter, link.tag)}
274
298
  parentId={parentId}
275
299
  navigationComponent={navigationComponent}
276
300
  />
@@ -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, 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.followUps,
55
+ navItems.inventory,
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,
@@ -315,30 +316,8 @@ const Content = (args: LayoutContentArgs) => {
315
316
  );
316
317
  };
317
318
 
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}>
319
+ export const ContentLegacy = (args: LayoutContentArgs) => (
320
+ <TitanLayout {...useLayoutProps(args)} appearance="legacy" {...useDefaultLayoutProps()}>
342
321
  <div
343
322
  className="p-3"
344
323
  style={{ position: 'absolute', width: 'calc(100% - var(--nav-offset-left))' }}
@@ -348,46 +327,43 @@ export const TitanLayoutLegacyTop = (args: LayoutContentArgs) => (
348
327
  </TitanLayout>
349
328
  );
350
329
 
351
- export const TitanLayoutAnvil1 = (args: LayoutContentArgs) => (
352
- <TitanLayout {...useLayoutProps(args)} appearance="anvil1">
330
+ export const ContentAnvil1 = (args: LayoutContentArgs) => (
331
+ <TitanLayout {...useLayoutProps(args)} appearance="anvil1" {...useDefaultLayoutProps()}>
353
332
  <Anvil1Page>
354
333
  <Content {...args} />
355
334
  </Anvil1Page>
356
335
  </TitanLayout>
357
336
  );
358
337
 
359
- export const TitanLayoutAnvil1TopNav = (args: LayoutContentArgs) => (
360
- <TitanLayout {...useLayoutProps(args)} appearance="anvil1" navVariant="top">
361
- <Anvil1Page>
362
- <Content {...args} />
363
- </Anvil1Page>
338
+ export const ContentAnvil2 = (args: LayoutContentArgs) => (
339
+ <TitanLayout {...useLayoutProps(args)} appearance="anvil2" {...useDefaultLayoutProps()}>
340
+ <Anvil2Page>
341
+ <Anvil2Page.Content>
342
+ <Content {...args} />
343
+ </Anvil2Page.Content>
344
+ </Anvil2Page>
364
345
  </TitanLayout>
365
346
  );
366
347
 
367
- export const TitanLayoutAnvil1Top = (args: LayoutContentArgs) => (
348
+ export const ExtraWithTitle = (args: LayoutContentArgs) => (
368
349
  <TitanLayout
369
350
  {...useLayoutProps(args)}
370
- appearance="anvil1"
371
- navVariant="top"
372
- top={undefined}
373
- navigationOverflowItems={undefined}
351
+ appearance="anvil2"
352
+ profile={profileEmpty}
353
+ sideTop={undefined}
354
+ navigationMainItems={[navItems.projects]}
355
+ extraLinks={
356
+ <TitanLayout.Link
357
+ id="search"
358
+ to="/search"
359
+ title="Search"
360
+ icon={SvgSearch}
361
+ iconActive={SvgSearch}
362
+ extra={{ showTitle: true }}
363
+ />
364
+ }
365
+ {...useDefaultLayoutProps()}
374
366
  >
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
367
  <Anvil2Page>
392
368
  <Anvil2Page.Content>
393
369
  <Content {...args} />
@@ -396,8 +372,26 @@ export const TitanLayoutAnvil2 = (args: LayoutContentArgs) => (
396
372
  </TitanLayout>
397
373
  );
398
374
 
399
- export const TitanLayoutAnvil2TopNav = (args: LayoutContentArgs) => (
400
- <TitanLayout {...useLayoutProps(args)} appearance="anvil2" navVariant="top">
375
+ export const ExtraWithFlashing = (args: LayoutContentArgs) => (
376
+ <TitanLayout
377
+ {...useLayoutProps(args)}
378
+ appearance="anvil2"
379
+ profile={profileEmpty}
380
+ sideTop={undefined}
381
+ navigationMainItems={[navItems.projects]}
382
+ extraLinks={
383
+ <TitanLayout.Link
384
+ id="search"
385
+ to="/search"
386
+ title="Search"
387
+ icon={SvgSearch}
388
+ iconActive={SvgSearch}
389
+ extra={{ flashing: true }}
390
+ side={{ counter: true }}
391
+ />
392
+ }
393
+ {...useDefaultLayoutProps()}
394
+ >
401
395
  <Anvil2Page>
402
396
  <Anvil2Page.Content>
403
397
  <Content {...args} />
@@ -406,8 +400,26 @@ export const TitanLayoutAnvil2TopNav = (args: LayoutContentArgs) => (
406
400
  </TitanLayout>
407
401
  );
408
402
 
409
- export const TitanLayoutAnvil2Top = (args: LayoutContentArgs) => (
410
- <TitanLayout {...useLayoutProps(args)} appearance="anvil2" navVariant="top" top={undefined}>
403
+ export const ExtraWithTitleFlashing = (args: LayoutContentArgs) => (
404
+ <TitanLayout
405
+ {...useLayoutProps(args)}
406
+ appearance="anvil2"
407
+ profile={profileEmpty}
408
+ sideTop={undefined}
409
+ navigationMainItems={[navItems.projects]}
410
+ extraLinks={
411
+ <TitanLayout.Link
412
+ id="search"
413
+ to="/search"
414
+ title="Search"
415
+ icon={SvgSearch}
416
+ iconActive={SvgSearch}
417
+ extra={{ showTitle: true, flashing: true }}
418
+ side={{ counter: true }}
419
+ />
420
+ }
421
+ {...useDefaultLayoutProps()}
422
+ >
411
423
  <Anvil2Page>
412
424
  <Anvil2Page.Content>
413
425
  <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';