@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,327 +0,0 @@
1
- import { Icon, Popover, PopoverPropsStrict } from '@servicetitan/design-system';
2
- import classNames from 'classnames';
3
- import { FC, ReactElement, ReactNode, useCallback, useEffect, useRef, useState } from 'react';
4
- import { NavigationLegacyContext } from '../../utils/navigation-context';
5
- import { HeaderNavigationItemData } from '../../utils/navigation-legacy';
6
- import { HeaderNavigationItem } from './header-navigation-content';
7
- import * as Styles from './header-navigation.module.less';
8
-
9
- function useForceUpdate() {
10
- const [, setTick] = useState(0);
11
- return useCallback(() => {
12
- setTick(tick => tick + 1);
13
- }, []);
14
- }
15
-
16
- export interface HeaderNavigationOverflowProps {
17
- direction: PopoverPropsStrict['direction'];
18
- width: PopoverPropsStrict['width'];
19
- portal?: boolean;
20
- }
21
-
22
- const HeaderNavigationOverflow: FC<{
23
- items: HeaderNavigationItemData[];
24
- overflow?: HeaderNavigationOverflowProps;
25
- }> = ({ items, overflow }) => {
26
- const [isOpen, setIsOpen] = useState(false);
27
-
28
- return (
29
- <Popover
30
- open={isOpen}
31
- trigger={
32
- <Icon
33
- name="more_vert"
34
- size="24px"
35
- className="c-pointer"
36
- onClick={() => setIsOpen(true)}
37
- color="white"
38
- data-cy="navigation-overflow-trigger"
39
- data-pendo="navigation-overflow-trigger"
40
- />
41
- }
42
- direction={overflow?.direction ?? 'bl'}
43
- width={overflow?.width ?? 'xs'}
44
- portal={overflow?.portal}
45
- onClickOutside={() => setIsOpen(false)}
46
- wrapperClassName="d-if-i align-items-center"
47
- popoverContentClassName={Styles.overflowPopover}
48
- >
49
- <div
50
- onClick={() => setIsOpen(false)}
51
- className={Styles.navigationOverflow}
52
- data-cy="navigation-overflow-content"
53
- >
54
- {items.map(item => (
55
- <HeaderNavigationItem {...item} key={item.id} minimized={false} main={false} />
56
- ))}
57
- </div>
58
- </Popover>
59
- );
60
- };
61
-
62
- export interface HeaderNavigationProps {
63
- /** extra navigation */
64
- children?: ReactNode;
65
- /** container class name */
66
- className?: string;
67
- /** extra navigation container class name */
68
- rightClassName?: string;
69
- /** container id */
70
- id?: string;
71
- /** left content (usually used for logo) */
72
- left?: ReactElement;
73
- /** left container class name */
74
- leftClassName?: string;
75
- /** minimal width for navigation bar */
76
- minWidth?: number;
77
- /** main navigation items */
78
- items?: HeaderNavigationItemData[];
79
- /** main navigation overflow items */
80
- itemsOverflow?: HeaderNavigationItemData[];
81
- /** props for main items overflow component */
82
- overflow?: HeaderNavigationOverflowProps;
83
- }
84
-
85
- enum MinimizedState {
86
- Calculating,
87
- Minimized,
88
- Full,
89
- }
90
-
91
- export const HeaderNavigation: FC<HeaderNavigationProps> = ({
92
- children,
93
- className,
94
- id,
95
- items,
96
- itemsOverflow,
97
- left,
98
- leftClassName,
99
- rightClassName,
100
- minWidth = 800,
101
- overflow,
102
- }) => {
103
- const leftRef = useRef<HTMLDivElement>(null);
104
- const rightRef = useRef<HTMLDivElement>(null);
105
- const centerRef = useRef<HTMLDivElement>(null);
106
- const navigationRef = useRef<HTMLDivElement>(null);
107
- const forceUpdate = useForceUpdate();
108
- const [minimized, setMinimized] = useState(MinimizedState.Calculating);
109
-
110
- useEffect(() => {
111
- const handleResize = () => {
112
- setMinimized(MinimizedState.Calculating);
113
- forceUpdate();
114
- };
115
-
116
- window.addEventListener('resize', handleResize);
117
- return () => window.removeEventListener('resize', handleResize);
118
- }, [forceUpdate]);
119
-
120
- useEffect(() => {
121
- setMinimized(MinimizedState.Calculating);
122
- forceUpdate();
123
- }, [items, itemsOverflow, forceUpdate]);
124
-
125
- const updateIsMinimized = () => {
126
- if (centerRef.current && navigationRef.current) {
127
- if (navigationRef.current.clientWidth > centerRef.current.clientWidth) {
128
- setMinimized(MinimizedState.Minimized);
129
- } else if (minimized === MinimizedState.Calculating) {
130
- setMinimized(MinimizedState.Full);
131
- }
132
- }
133
- };
134
-
135
- useEffect(() => {
136
- updateIsMinimized();
137
- });
138
-
139
- return (
140
- <NavigationLegacyContext.Provider value>
141
- <div
142
- className={classNames(Styles.header, className, {
143
- [Styles.calculating]: minimized === MinimizedState.Calculating,
144
- })}
145
- style={{ minWidth: `${minWidth}px` }}
146
- id={id}
147
- data-cy="header-navigation"
148
- >
149
- <div className={leftClassName} ref={leftRef} data-cy="navigation-left">
150
- {left}
151
- </div>
152
- <div
153
- ref={centerRef}
154
- className={classNames(
155
- 'd-if flex-grow-1 flex-basis-0 justify-content-center',
156
- Styles.center
157
- )}
158
- data-cy="navigation-items"
159
- >
160
- <div ref={navigationRef} className={classNames('d-if')}>
161
- {items?.map(item => (
162
- <HeaderNavigationItem
163
- {...item}
164
- minimized={minimized === MinimizedState.Minimized}
165
- main
166
- key={item.id}
167
- />
168
- ))}
169
- {!!itemsOverflow?.length && (
170
- <HeaderNavigationOverflow items={itemsOverflow} overflow={overflow} />
171
- )}
172
- </div>
173
- </div>
174
- <div
175
- className={classNames(
176
- 'd-f flex-row justify-content-end align-items-center',
177
- Styles.right,
178
- rightClassName
179
- )}
180
- ref={rightRef}
181
- data-cy="navigation-right"
182
- >
183
- {children}
184
- </div>
185
- </div>
186
- </NavigationLegacyContext.Provider>
187
- );
188
- };
189
-
190
- export interface HeaderNavigationStackedProps {
191
- /** container class name */
192
- className?: string;
193
- /** extra navigation */
194
- right?: ReactNode;
195
- /** extra navigation container class name */
196
- rightClassName?: string;
197
- /** container id */
198
- id?: string;
199
- /** left content (usually used for logo) */
200
- left?: ReactElement;
201
- /** left container class name */
202
- leftClassName?: string;
203
- /** center content */
204
- center?: ReactElement;
205
- /** center container class name */
206
- centerClassName?: string;
207
- /** minimal width for navigation bar */
208
- minWidth?: number;
209
- /** main navigation items */
210
- items?: HeaderNavigationItemData[];
211
- /** main navigation overflow items */
212
- itemsOverflow?: HeaderNavigationItemData[];
213
- /** props for main items overflow component */
214
- overflow?: HeaderNavigationOverflowProps;
215
- }
216
-
217
- export const HeaderNavigationStacked: FC<HeaderNavigationStackedProps> = ({
218
- className,
219
- id,
220
- items,
221
- itemsOverflow,
222
- left,
223
- leftClassName,
224
- right,
225
- rightClassName,
226
- center,
227
- centerClassName,
228
- minWidth = 800,
229
- overflow,
230
- }) => {
231
- const bottomRef = useRef<HTMLDivElement>(null);
232
- const navigationRef = useRef<HTMLDivElement>(null);
233
- const forceUpdate = useForceUpdate();
234
- const [minimized, setMinimized] = useState(MinimizedState.Calculating);
235
-
236
- useEffect(() => {
237
- const handleResize = () => {
238
- setMinimized(MinimizedState.Calculating);
239
- forceUpdate();
240
- };
241
-
242
- window.addEventListener('resize', handleResize);
243
- return () => window.removeEventListener('resize', handleResize);
244
- }, [forceUpdate]);
245
-
246
- useEffect(() => {
247
- setMinimized(MinimizedState.Calculating);
248
- forceUpdate();
249
- }, [items, itemsOverflow, forceUpdate]);
250
-
251
- const updateIsMinimized = () => {
252
- if (bottomRef.current && navigationRef.current) {
253
- if (navigationRef.current.clientWidth + 16 > bottomRef.current.clientWidth) {
254
- setMinimized(MinimizedState.Minimized);
255
- } else if (minimized === MinimizedState.Calculating) {
256
- setMinimized(MinimizedState.Full);
257
- }
258
- }
259
- };
260
-
261
- useEffect(() => {
262
- updateIsMinimized();
263
- });
264
-
265
- return (
266
- <NavigationLegacyContext.Provider value>
267
- <div
268
- className={classNames(
269
- Styles.headerStacked,
270
- {
271
- [Styles.calculating]: minimized === MinimizedState.Calculating,
272
- },
273
- className
274
- )}
275
- style={{ minWidth: `${minWidth}px` }}
276
- id={id}
277
- data-cy="header-navigation"
278
- >
279
- <div
280
- className={classNames(Styles.heTopLeft, leftClassName)}
281
- data-cy="navigation-left"
282
- >
283
- {left}
284
- </div>
285
- <div
286
- className={classNames(Styles.heTopCenter, centerClassName)}
287
- data-cy="navigation-center"
288
- >
289
- {center}
290
- </div>
291
- <div
292
- className={classNames(
293
- 'd-f flex-row justify-content-end align-items-center',
294
- Styles.heTopRight,
295
- rightClassName
296
- )}
297
- data-cy="navigation-right"
298
- >
299
- {right}
300
- </div>
301
- <div
302
- ref={bottomRef}
303
- className={classNames(
304
- Styles.heBottom,
305
- 'd-if flex-grow-1 flex-basis-0 justify-content-center',
306
- Styles.center
307
- )}
308
- data-cy="navigation-items"
309
- >
310
- <div ref={navigationRef} className={classNames('d-if')}>
311
- {items?.map(item => (
312
- <HeaderNavigationItem
313
- {...item}
314
- minimized={minimized === MinimizedState.Minimized}
315
- main
316
- key={item.id}
317
- />
318
- ))}
319
- {!!itemsOverflow?.length && (
320
- <HeaderNavigationOverflow items={itemsOverflow} overflow={overflow} />
321
- )}
322
- </div>
323
- </div>
324
- </div>
325
- </NavigationLegacyContext.Provider>
326
- );
327
- };
@@ -1 +0,0 @@
1
- export * from './header-navigation';
@@ -1,15 +0,0 @@
1
- import { Tooltip, TooltipPropsStrict } from '@servicetitan/design-system';
2
- import { ReactNode } from 'react';
3
-
4
- export const withTooltip = (
5
- element: ReactNode,
6
- tooltip: string | undefined,
7
- direction: TooltipPropsStrict['direction'] = 'b'
8
- ) =>
9
- tooltip ? (
10
- <Tooltip el="div" direction={direction} text={tooltip}>
11
- {element}
12
- </Tooltip>
13
- ) : (
14
- element
15
- );
@@ -1,103 +0,0 @@
1
- import { Page, Sidebar } from '@servicetitan/design-system';
2
- import { LocationInfo, withAnvil, withDefaultRedirects, withMemoryRouter } from '../test/data';
3
- import {
4
- WithAllMonolithData,
5
- WithAllMonolithDataCommercial,
6
- } from './left-navigation/header-navigation-tiny.stories';
7
- import {
8
- DefaultSideNavigation,
9
- SideNavigationLinksOnly,
10
- SideNavigationWithSubmenu,
11
- SideNavigationWithSubmenuBar,
12
- SideNavigationWithSubmenuBarAndTop,
13
- } from './left-navigation/side-navigation.stories';
14
-
15
- export default {
16
- title: 'Navigation/Layout',
17
- parameters: {},
18
- decorators: [withDefaultRedirects, withMemoryRouter, withAnvil],
19
- };
20
-
21
- export const LeftNavLayout = () => {
22
- return (
23
- <div className="d-f border flex-column" style={{ height: '800px' }}>
24
- <WithAllMonolithData />
25
- <div className="flex-grow-1 flex-basis-0 d-f">
26
- <DefaultSideNavigation />
27
- <div className="flex-grow-1 flex-basis-0" />
28
- </div>
29
- </div>
30
- );
31
- };
32
-
33
- export const LeftNavLayoutCommercial = () => {
34
- return (
35
- <div className="d-f border flex-column" style={{ height: '800px' }}>
36
- <WithAllMonolithDataCommercial />
37
- <div className="flex-grow-1 flex-basis-0 d-f">
38
- <DefaultSideNavigation />
39
- <div className="flex-grow-1 flex-basis-0" />
40
- </div>
41
- </div>
42
- );
43
- };
44
-
45
- export const LeftNavLayoutOnlyLinks = () => {
46
- return (
47
- <div className="d-f border flex-column" style={{ height: '800px' }}>
48
- <WithAllMonolithDataCommercial />
49
- <div className="flex-grow-1 flex-basis-0 d-f">
50
- <SideNavigationLinksOnly />
51
- <div className="flex-grow-1 flex-basis-0" />
52
- </div>
53
- </div>
54
- );
55
- };
56
-
57
- export const LeftNavLayoutSubmenu = () => {
58
- return (
59
- <div className="d-f border flex-column" style={{ height: '800px' }}>
60
- <WithAllMonolithDataCommercial />
61
- <div className="flex-grow-1 flex-basis-0 d-f">
62
- <SideNavigationWithSubmenu />
63
- <div className="flex-grow-1 flex-basis-0">
64
- <Page sidebar={<Sidebar localStorageKey="undefined">sidebar</Sidebar>}>
65
- <LocationInfo />
66
- </Page>
67
- </div>
68
- </div>
69
- </div>
70
- );
71
- };
72
-
73
- export const LeftNavLayoutSubmenuBar = () => {
74
- return (
75
- <div className="d-f border flex-column" style={{ height: '800px' }}>
76
- <WithAllMonolithDataCommercial />
77
- <div className="flex-grow-1 flex-basis-0 d-f">
78
- <SideNavigationWithSubmenuBar />
79
- <div className="flex-grow-1 flex-basis-0">
80
- <Page sidebar={<Sidebar localStorageKey="undefined">sidebar</Sidebar>}>
81
- <LocationInfo />
82
- </Page>
83
- </div>
84
- </div>
85
- </div>
86
- );
87
- };
88
-
89
- export const LeftNavLayoutSubmenuBarWithTop = () => {
90
- return (
91
- <div className="d-f border flex-column" style={{ height: '800px' }}>
92
- <WithAllMonolithDataCommercial />
93
- <div className="flex-grow-1 flex-basis-0 d-f">
94
- <SideNavigationWithSubmenuBarAndTop />
95
- <div className="flex-grow-1 flex-basis-0">
96
- <Page sidebar={<Sidebar localStorageKey="undefined">sidebar</Sidebar>}>
97
- <LocationInfo />
98
- </Page>
99
- </div>
100
- </div>
101
- </div>
102
- );
103
- };
@@ -1,21 +0,0 @@
1
- import { withAnvil, withMemoryRouter } from '../../test/data';
2
- import { HeaderNavigationLink } from '../links';
3
- import { HeaderNavigationTiny } from './header-navigation-tiny';
4
-
5
- const withHeaderNavigationTiny = (Story: any) => (
6
- <HeaderNavigationTiny className="border" right={<Story />} />
7
- );
8
-
9
- export default {
10
- title: 'Navigation/Extra/Tiny',
11
- component: HeaderNavigationLink,
12
- decorators: [withHeaderNavigationTiny, withMemoryRouter, withAnvil],
13
- parameters: {},
14
- };
15
-
16
- export {
17
- ExtraWithTooltip,
18
- ExtraLink,
19
- ExtraTrigger,
20
- ExtraWithLabel,
21
- } from '../header-navigation/header-navigation-extra.stories';
@@ -1,145 +0,0 @@
1
- import { Icon, IconProps } from '@servicetitan/anvil2';
2
- import classNames from 'classnames';
3
- import { FC, Fragment, useContext } from 'react';
4
- import { NavigationComponentContext } from '../../utils/navigation-context';
5
- import {
6
- HeaderNavigationLinkProps,
7
- HeaderNavigationTriggerProps,
8
- } from '../../utils/navigation-legacy';
9
- import { getCounterTag } from '../../utils/side-nav';
10
- import { CounterTag, CounterTagProps } from '../counter-tag';
11
- // use v1 tooltips due to bug with v2 in monolith
12
- import { withTooltip } from '../header-navigation/with-tooltip';
13
- import * as Styles from './header-navigation-tiny.module.less';
14
-
15
- /** Content for navigation items */
16
- export const HeaderNavigationItemContent: FC<{
17
- tag?: CounterTagProps;
18
- counterClassName?: string;
19
- icon: IconProps['svg'] | undefined;
20
- iconActive: IconProps['svg'] | undefined;
21
- label?: string;
22
- labelClassName?: string;
23
- }> = ({ counterClassName, icon, iconActive, label, labelClassName, tag }) => {
24
- return (
25
- <Fragment>
26
- {!!icon && <Icon svg={icon} className={Styles.navigationIcon} />}
27
- {!!iconActive && (
28
- <Icon
29
- svg={iconActive}
30
- className={classNames(Styles.navigationIcon, Styles.navigationIconActive)}
31
- />
32
- )}
33
-
34
- {!!label && (
35
- <span className={classNames(Styles.navigationItemLabel, labelClassName)}>
36
- {label}
37
- </span>
38
- )}
39
-
40
- {!!tag && (
41
- <CounterTag
42
- data={tag}
43
- className={classNames(Styles.navigationItemCounter, counterClassName)}
44
- longClassName={Styles.navigationItemCounterLong}
45
- />
46
- )}
47
- </Fragment>
48
- );
49
- };
50
-
51
- /** Navigation extra item with link */
52
- export const HeaderNavigationLink: FC<HeaderNavigationLinkProps> = ({
53
- id,
54
- to,
55
- hint,
56
- tooltip,
57
- className,
58
- counter,
59
- icon,
60
- iconActive,
61
- iconClassName,
62
- iconComponent,
63
- iconName,
64
- isActive,
65
- label,
66
- labelClassName,
67
- tag,
68
- target,
69
- ...rest
70
- }) => {
71
- const NavigationComponent = useContext(NavigationComponentContext);
72
-
73
- return withTooltip(
74
- <NavigationComponent
75
- data-cy={`navigation-link-${id}`}
76
- data-pendo={`navigation-link-${id}`}
77
- {...rest}
78
- key={id}
79
- to={to}
80
- title={hint}
81
- className={classNames(Styles.navigationLink, className, {
82
- [Styles.navigationItemActive]: isActive === true,
83
- [Styles.navigationItemIconState]: !!icon && !!iconActive,
84
- })}
85
- isActive={typeof isActive === 'function' ? isActive : undefined}
86
- activeClassName={Styles.navigationItemActive}
87
- target={target}
88
- >
89
- <HeaderNavigationItemContent
90
- tag={getCounterTag(counter, tag)}
91
- icon={icon}
92
- iconActive={iconActive}
93
- label={label}
94
- labelClassName={labelClassName}
95
- />
96
- </NavigationComponent>,
97
- tooltip
98
- );
99
- };
100
-
101
- /** Navigation extra item with icon button */
102
- export const HeaderNavigationTrigger: FC<HeaderNavigationTriggerProps> = ({
103
- id,
104
- className,
105
- counter,
106
- icon,
107
- iconActive,
108
- iconName,
109
- isActive,
110
- hint,
111
- label,
112
- labelClassName,
113
- tag,
114
- tooltip,
115
- title,
116
- titleClassName,
117
- ...rest
118
- }) => {
119
- return withTooltip(
120
- <div
121
- data-cy={`navigation-trigger-${id}`}
122
- data-pendo={`navigation-trigger-${id}`}
123
- {...rest}
124
- title={hint}
125
- className={classNames(
126
- Styles.navigationLink,
127
- {
128
- [Styles.navigationItemActive]: isActive === true,
129
- [Styles.navigationItemIconState]: !!icon && !!iconActive,
130
- },
131
- 'cursor-pointer',
132
- className
133
- )}
134
- >
135
- <HeaderNavigationItemContent
136
- tag={getCounterTag(counter, tag)}
137
- icon={icon}
138
- iconActive={iconActive}
139
- label={label}
140
- labelClassName={labelClassName}
141
- />
142
- </div>,
143
- tooltip
144
- );
145
- };