@servicetitan/navigation 12.0.3 → 13.0.0-canary.256.b43c6d7.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 (196) hide show
  1. package/dist/components/profile-dropdown/{profile-dropdown-tiny.stories.d.ts → profile-dropdown-legacy.stories.d.ts} +1 -1
  2. package/dist/components/profile-dropdown/profile-dropdown-legacy.stories.d.ts.map +1 -0
  3. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts.map +1 -1
  4. package/dist/components/profile-dropdown/profile-dropdown.d.ts.map +1 -1
  5. package/dist/components/profile-dropdown/profile-dropdown.js +5 -8
  6. package/dist/components/profile-dropdown/profile-dropdown.js.map +1 -1
  7. package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts.map +1 -1
  8. package/dist/components/titan-layout/interface.d.ts +14 -12
  9. package/dist/components/titan-layout/interface.d.ts.map +1 -1
  10. package/dist/components/titan-layout/interface.js.map +1 -1
  11. package/dist/components/titan-layout/layout-header-links.d.ts +3 -3
  12. package/dist/components/titan-layout/layout-header-links.d.ts.map +1 -1
  13. package/dist/components/titan-layout/layout-header-links.js.map +1 -1
  14. package/dist/components/titan-layout/layout-header.d.ts +2 -2
  15. package/dist/components/titan-layout/layout-header.d.ts.map +1 -1
  16. package/dist/components/titan-layout/layout-header.js.map +1 -1
  17. package/dist/components/titan-layout/layout-profile.d.ts.map +1 -1
  18. package/dist/components/titan-layout/layout-profile.js +1 -7
  19. package/dist/components/titan-layout/layout-profile.js.map +1 -1
  20. package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts +10 -17
  21. package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts.map +1 -1
  22. package/dist/components/titan-layout/layout-sidebar-links-internal.js +34 -41
  23. package/dist/components/titan-layout/layout-sidebar-links-internal.js.map +1 -1
  24. package/dist/components/titan-layout/layout-sidebar-links.d.ts +3 -3
  25. package/dist/components/titan-layout/layout-sidebar-links.d.ts.map +1 -1
  26. package/dist/components/titan-layout/layout-sidebar-links.js +13 -13
  27. package/dist/components/titan-layout/layout-sidebar-links.js.map +1 -1
  28. package/dist/components/titan-layout/layout-sidebar.js +5 -3
  29. package/dist/components/titan-layout/layout-sidebar.js.map +1 -1
  30. package/dist/components/titan-layout/titan-layout-links.d.ts +5 -0
  31. package/dist/components/titan-layout/titan-layout-links.d.ts.map +1 -0
  32. package/dist/components/titan-layout/titan-layout-links.js +34 -0
  33. package/dist/components/titan-layout/titan-layout-links.js.map +1 -0
  34. package/dist/components/titan-layout/titan-layout.d.ts +2 -3
  35. package/dist/components/titan-layout/titan-layout.d.ts.map +1 -1
  36. package/dist/components/titan-layout/titan-layout.js +3 -3
  37. package/dist/components/titan-layout/titan-layout.js.map +1 -1
  38. package/dist/components/titan-layout/titan-layout.stories.d.ts.map +1 -1
  39. package/dist/index.d.ts +1 -5
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +0 -4
  42. package/dist/index.js.map +1 -1
  43. package/dist/test/data.d.ts +27 -2
  44. package/dist/test/data.d.ts.map +1 -1
  45. package/dist/test/data.js +181 -27
  46. package/dist/test/data.js.map +1 -1
  47. package/dist/utils/navigation-context.d.ts +3 -22
  48. package/dist/utils/navigation-context.d.ts.map +1 -1
  49. package/dist/utils/navigation-context.js +2 -10
  50. package/dist/utils/navigation-context.js.map +1 -1
  51. package/dist/utils/navigation.d.ts +2 -5
  52. package/dist/utils/navigation.d.ts.map +1 -1
  53. package/dist/utils/navigation.js.map +1 -1
  54. package/package.json +2 -2
  55. package/src/components/profile-dropdown/{profile-dropdown-tiny.stories.tsx → profile-dropdown-legacy.stories.tsx} +6 -6
  56. package/src/components/profile-dropdown/profile-dropdown-stacked.stories.tsx +12 -4
  57. package/src/components/profile-dropdown/profile-dropdown.stories.tsx +16 -9
  58. package/src/components/profile-dropdown/profile-dropdown.tsx +2 -11
  59. package/src/components/titan-layout/interface.ts +19 -15
  60. package/src/components/titan-layout/layout-header-links.tsx +3 -6
  61. package/src/components/titan-layout/layout-header.tsx +2 -2
  62. package/src/components/titan-layout/layout-profile.tsx +2 -6
  63. package/src/components/titan-layout/layout-sidebar-links-internal.tsx +69 -81
  64. package/src/components/titan-layout/layout-sidebar-links.tsx +38 -24
  65. package/src/components/titan-layout/layout-sidebar.tsx +1 -1
  66. package/src/components/titan-layout/titan-layout-links.tsx +34 -0
  67. package/src/components/titan-layout/titan-layout.stories.tsx +34 -33
  68. package/src/components/titan-layout/titan-layout.tsx +5 -4
  69. package/src/index.ts +1 -11
  70. package/src/test/data.tsx +152 -39
  71. package/src/utils/navigation-context.tsx +9 -35
  72. package/src/utils/navigation.ts +3 -7
  73. package/dist/components/header-navigation/header-navigation-content.d.ts +0 -30
  74. package/dist/components/header-navigation/header-navigation-content.d.ts.map +0 -1
  75. package/dist/components/header-navigation/header-navigation-content.js +0 -58
  76. package/dist/components/header-navigation/header-navigation-content.js.map +0 -1
  77. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts +0 -9
  78. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts.map +0 -1
  79. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts +0 -12
  80. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts.map +0 -1
  81. package/dist/components/header-navigation/header-navigation-links.d.ts +0 -11
  82. package/dist/components/header-navigation/header-navigation-links.d.ts.map +0 -1
  83. package/dist/components/header-navigation/header-navigation-links.js +0 -62
  84. package/dist/components/header-navigation/header-navigation-links.js.map +0 -1
  85. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts +0 -12
  86. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts.map +0 -1
  87. package/dist/components/header-navigation/header-navigation-stories.module.less +0 -6
  88. package/dist/components/header-navigation/header-navigation-stories.module.less.d.ts +0 -3
  89. package/dist/components/header-navigation/header-navigation.d.ts +0 -59
  90. package/dist/components/header-navigation/header-navigation.d.ts.map +0 -1
  91. package/dist/components/header-navigation/header-navigation.js +0 -228
  92. package/dist/components/header-navigation/header-navigation.js.map +0 -1
  93. package/dist/components/header-navigation/header-navigation.module.less +0 -260
  94. package/dist/components/header-navigation/header-navigation.module.less.d.ts +0 -22
  95. package/dist/components/header-navigation/header-navigation.stories.d.ts +0 -12
  96. package/dist/components/header-navigation/header-navigation.stories.d.ts.map +0 -1
  97. package/dist/components/header-navigation/index.d.ts +0 -2
  98. package/dist/components/header-navigation/index.d.ts.map +0 -1
  99. package/dist/components/header-navigation/index.js +0 -3
  100. package/dist/components/header-navigation/index.js.map +0 -1
  101. package/dist/components/header-navigation/with-tooltip.d.ts +0 -4
  102. package/dist/components/header-navigation/with-tooltip.d.ts.map +0 -1
  103. package/dist/components/header-navigation/with-tooltip.js +0 -10
  104. package/dist/components/header-navigation/with-tooltip.js.map +0 -1
  105. package/dist/components/layout.stories.d.ts +0 -13
  106. package/dist/components/layout.stories.d.ts.map +0 -1
  107. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts +0 -9
  108. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts.map +0 -1
  109. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts +0 -18
  110. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts.map +0 -1
  111. package/dist/components/left-navigation/header-navigation-tiny-links.js +0 -79
  112. package/dist/components/left-navigation/header-navigation-tiny-links.js.map +0 -1
  113. package/dist/components/left-navigation/header-navigation-tiny.d.ts +0 -23
  114. package/dist/components/left-navigation/header-navigation-tiny.d.ts.map +0 -1
  115. package/dist/components/left-navigation/header-navigation-tiny.js +0 -32
  116. package/dist/components/left-navigation/header-navigation-tiny.js.map +0 -1
  117. package/dist/components/left-navigation/header-navigation-tiny.module.less +0 -117
  118. package/dist/components/left-navigation/header-navigation-tiny.module.less.d.ts +0 -15
  119. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts +0 -12
  120. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts.map +0 -1
  121. package/dist/components/left-navigation/index.d.ts +0 -5
  122. package/dist/components/left-navigation/index.d.ts.map +0 -1
  123. package/dist/components/left-navigation/index.js +0 -5
  124. package/dist/components/left-navigation/index.js.map +0 -1
  125. package/dist/components/left-navigation/interface-internal.d.ts +0 -10
  126. package/dist/components/left-navigation/interface-internal.d.ts.map +0 -1
  127. package/dist/components/left-navigation/interface-internal.js +0 -3
  128. package/dist/components/left-navigation/interface-internal.js.map +0 -1
  129. package/dist/components/left-navigation/interface.d.ts +0 -20
  130. package/dist/components/left-navigation/interface.d.ts.map +0 -1
  131. package/dist/components/left-navigation/interface.js +0 -3
  132. package/dist/components/left-navigation/interface.js.map +0 -1
  133. package/dist/components/left-navigation/side-navigation-context.d.ts +0 -8
  134. package/dist/components/left-navigation/side-navigation-context.d.ts.map +0 -1
  135. package/dist/components/left-navigation/side-navigation-context.js +0 -8
  136. package/dist/components/left-navigation/side-navigation-context.js.map +0 -1
  137. package/dist/components/left-navigation/side-navigation-links-internal.d.ts +0 -28
  138. package/dist/components/left-navigation/side-navigation-links-internal.d.ts.map +0 -1
  139. package/dist/components/left-navigation/side-navigation-links-internal.js +0 -89
  140. package/dist/components/left-navigation/side-navigation-links-internal.js.map +0 -1
  141. package/dist/components/left-navigation/side-navigation-links.d.ts +0 -6
  142. package/dist/components/left-navigation/side-navigation-links.d.ts.map +0 -1
  143. package/dist/components/left-navigation/side-navigation-links.js +0 -48
  144. package/dist/components/left-navigation/side-navigation-links.js.map +0 -1
  145. package/dist/components/left-navigation/side-navigation.d.ts +0 -29
  146. package/dist/components/left-navigation/side-navigation.d.ts.map +0 -1
  147. package/dist/components/left-navigation/side-navigation.js +0 -411
  148. package/dist/components/left-navigation/side-navigation.js.map +0 -1
  149. package/dist/components/left-navigation/side-navigation.module.less +0 -530
  150. package/dist/components/left-navigation/side-navigation.module.less.d.ts +0 -48
  151. package/dist/components/left-navigation/side-navigation.stories.d.ts +0 -17
  152. package/dist/components/left-navigation/side-navigation.stories.d.ts.map +0 -1
  153. package/dist/components/left-navigation/with-tooltip.d.ts +0 -4
  154. package/dist/components/left-navigation/with-tooltip.d.ts.map +0 -1
  155. package/dist/components/left-navigation/with-tooltip.js +0 -15
  156. package/dist/components/left-navigation/with-tooltip.js.map +0 -1
  157. package/dist/components/links.d.ts +0 -5
  158. package/dist/components/links.d.ts.map +0 -1
  159. package/dist/components/links.js +0 -35
  160. package/dist/components/links.js.map +0 -1
  161. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts.map +0 -1
  162. package/dist/components/titan-layout/layout-profile.stories.d.ts +0 -13
  163. package/dist/components/titan-layout/layout-profile.stories.d.ts.map +0 -1
  164. package/src/components/header-navigation/header-navigation-content.tsx +0 -120
  165. package/src/components/header-navigation/header-navigation-extra-stacked.stories.tsx +0 -19
  166. package/src/components/header-navigation/header-navigation-extra.stories.tsx +0 -142
  167. package/src/components/header-navigation/header-navigation-links.tsx +0 -141
  168. package/src/components/header-navigation/header-navigation-stacked.stories.tsx +0 -146
  169. package/src/components/header-navigation/header-navigation-stories.module.less +0 -6
  170. package/src/components/header-navigation/header-navigation-stories.module.less.d.ts +0 -3
  171. package/src/components/header-navigation/header-navigation.module.less +0 -260
  172. package/src/components/header-navigation/header-navigation.module.less.d.ts +0 -22
  173. package/src/components/header-navigation/header-navigation.stories.tsx +0 -165
  174. package/src/components/header-navigation/header-navigation.tsx +0 -327
  175. package/src/components/header-navigation/index.ts +0 -1
  176. package/src/components/header-navigation/with-tooltip.tsx +0 -15
  177. package/src/components/layout.stories.tsx +0 -103
  178. package/src/components/left-navigation/header-navigation-extra-tiny.stories.tsx +0 -21
  179. package/src/components/left-navigation/header-navigation-tiny-links.tsx +0 -145
  180. package/src/components/left-navigation/header-navigation-tiny.module.less +0 -117
  181. package/src/components/left-navigation/header-navigation-tiny.module.less.d.ts +0 -15
  182. package/src/components/left-navigation/header-navigation-tiny.stories.tsx +0 -178
  183. package/src/components/left-navigation/header-navigation-tiny.tsx +0 -65
  184. package/src/components/left-navigation/index.ts +0 -4
  185. package/src/components/left-navigation/interface-internal.ts +0 -11
  186. package/src/components/left-navigation/interface.ts +0 -26
  187. package/src/components/left-navigation/side-navigation-context.tsx +0 -13
  188. package/src/components/left-navigation/side-navigation-links-internal.tsx +0 -151
  189. package/src/components/left-navigation/side-navigation-links.tsx +0 -57
  190. package/src/components/left-navigation/side-navigation.module.less +0 -530
  191. package/src/components/left-navigation/side-navigation.module.less.d.ts +0 -48
  192. package/src/components/left-navigation/side-navigation.stories.tsx +0 -226
  193. package/src/components/left-navigation/side-navigation.tsx +0 -543
  194. package/src/components/left-navigation/with-tooltip.tsx +0 -16
  195. package/src/components/links.tsx +0 -54
  196. package/src/components/titan-layout/layout-profile.stories.tsx +0 -46
@@ -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
- };