@servicetitan/navigation 12.0.2 → 13.0.0-canary.256.299dd08.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 (251) hide show
  1. package/dist/components/counter-tag.d.ts +1 -1
  2. package/dist/components/counter-tag.d.ts.map +1 -1
  3. package/dist/components/counter-tag.js.map +1 -1
  4. package/dist/components/profile-dropdown/interface.d.ts +55 -0
  5. package/dist/components/profile-dropdown/interface.d.ts.map +1 -0
  6. package/dist/components/profile-dropdown/interface.js.map +1 -0
  7. package/dist/components/profile-dropdown/profile-dropdown-legacy.stories.d.ts +13 -0
  8. package/dist/components/profile-dropdown/profile-dropdown-legacy.stories.d.ts.map +1 -0
  9. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts +5 -1
  10. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts.map +1 -1
  11. package/dist/components/profile-dropdown/profile-dropdown.d.ts +9 -79
  12. package/dist/components/profile-dropdown/profile-dropdown.d.ts.map +1 -1
  13. package/dist/components/profile-dropdown/profile-dropdown.js +22 -22
  14. package/dist/components/profile-dropdown/profile-dropdown.js.map +1 -1
  15. package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts +5 -1
  16. package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts.map +1 -1
  17. package/dist/components/titan-layout/interface-internal.d.ts +12 -0
  18. package/dist/components/titan-layout/interface-internal.d.ts.map +1 -1
  19. package/dist/components/titan-layout/interface-internal.js.map +1 -1
  20. package/dist/components/titan-layout/interface.d.ts +67 -14
  21. package/dist/components/titan-layout/interface.d.ts.map +1 -1
  22. package/dist/components/titan-layout/interface.js.map +1 -1
  23. package/dist/components/titan-layout/layout-header-dark.d.ts.map +1 -1
  24. package/dist/components/titan-layout/layout-header-dark.js +22 -12
  25. package/dist/components/titan-layout/layout-header-dark.js.map +1 -1
  26. package/dist/components/titan-layout/layout-header-links-internal.d.ts +22 -3
  27. package/dist/components/titan-layout/layout-header-links-internal.d.ts.map +1 -1
  28. package/dist/components/titan-layout/layout-header-links-internal.js +15 -18
  29. package/dist/components/titan-layout/layout-header-links-internal.js.map +1 -1
  30. package/dist/components/titan-layout/layout-header-links.d.ts +3 -4
  31. package/dist/components/titan-layout/layout-header-links.d.ts.map +1 -1
  32. package/dist/components/titan-layout/layout-header-links.js +25 -5
  33. package/dist/components/titan-layout/layout-header-links.js.map +1 -1
  34. package/dist/components/titan-layout/layout-header.d.ts +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 +36 -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 -31
  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 +84 -83
  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 +32 -19
  50. package/dist/components/titan-layout/layout-sidebar-links.js.map +1 -1
  51. package/dist/components/titan-layout/layout-sidebar.d.ts +1 -1
  52. package/dist/components/titan-layout/layout-sidebar.d.ts.map +1 -1
  53. package/dist/components/titan-layout/layout-sidebar.js +51 -28
  54. package/dist/components/titan-layout/layout-sidebar.js.map +1 -1
  55. package/dist/components/titan-layout/layout-sidebar.module.less +74 -22
  56. package/dist/components/titan-layout/titan-layout-default.stories.d.ts +16 -0
  57. package/dist/components/titan-layout/titan-layout-default.stories.d.ts.map +1 -0
  58. package/dist/components/titan-layout/titan-layout-legacy.stories.d.ts +10 -0
  59. package/dist/components/titan-layout/titan-layout-legacy.stories.d.ts.map +1 -0
  60. package/dist/components/titan-layout/titan-layout-links.d.ts +5 -0
  61. package/dist/components/titan-layout/titan-layout-links.d.ts.map +1 -0
  62. package/dist/components/titan-layout/titan-layout-links.js +34 -0
  63. package/dist/components/titan-layout/titan-layout-links.js.map +1 -0
  64. package/dist/components/titan-layout/titan-layout-stacked.stories.d.ts +10 -0
  65. package/dist/components/titan-layout/titan-layout-stacked.stories.d.ts.map +1 -0
  66. package/dist/components/titan-layout/titan-layout.d.ts +5 -4
  67. package/dist/components/titan-layout/titan-layout.d.ts.map +1 -1
  68. package/dist/components/titan-layout/titan-layout.js +17 -11
  69. package/dist/components/titan-layout/titan-layout.js.map +1 -1
  70. package/dist/index.d.ts +1 -6
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +0 -4
  73. package/dist/index.js.map +1 -1
  74. package/dist/test/data.d.ts +26 -23
  75. package/dist/test/data.d.ts.map +1 -1
  76. package/dist/test/data.js +26 -69
  77. package/dist/test/data.js.map +1 -1
  78. package/dist/test/titan-layout.d.ts +16 -0
  79. package/dist/test/titan-layout.d.ts.map +1 -0
  80. package/dist/test/titan-layout.js +21 -0
  81. package/dist/test/titan-layout.js.map +1 -0
  82. package/dist/utils/navigation-context.d.ts +3 -22
  83. package/dist/utils/navigation-context.d.ts.map +1 -1
  84. package/dist/utils/navigation-context.js +2 -10
  85. package/dist/utils/navigation-context.js.map +1 -1
  86. package/dist/utils/navigation.d.ts +2 -7
  87. package/dist/utils/navigation.d.ts.map +1 -1
  88. package/dist/utils/navigation.js.map +1 -1
  89. package/package.json +2 -2
  90. package/src/components/counter-tag.tsx +1 -1
  91. package/src/components/profile-dropdown/interface.ts +47 -0
  92. package/src/components/profile-dropdown/profile-dropdown-legacy.stories.tsx +25 -0
  93. package/src/components/profile-dropdown/profile-dropdown-stacked.stories.tsx +15 -7
  94. package/src/components/profile-dropdown/profile-dropdown.stories.tsx +50 -43
  95. package/src/components/profile-dropdown/profile-dropdown.tsx +39 -115
  96. package/src/components/titan-layout/interface-internal.ts +13 -0
  97. package/src/components/titan-layout/interface.ts +73 -17
  98. package/src/components/titan-layout/layout-header-dark.tsx +18 -5
  99. package/src/components/titan-layout/layout-header-links-internal.tsx +41 -54
  100. package/src/components/titan-layout/layout-header-links.tsx +65 -12
  101. package/src/components/titan-layout/layout-header.module.less +36 -0
  102. package/src/components/titan-layout/layout-header.module.less.d.ts +2 -0
  103. package/src/components/titan-layout/layout-header.tsx +2 -2
  104. package/src/components/titan-layout/layout-profile.tsx +53 -34
  105. package/src/components/titan-layout/layout-sidebar-links-internal.tsx +183 -147
  106. package/src/components/titan-layout/layout-sidebar-links.tsx +73 -26
  107. package/src/components/titan-layout/layout-sidebar.module.less +74 -22
  108. package/src/components/titan-layout/layout-sidebar.tsx +55 -31
  109. package/src/components/titan-layout/{titan-layout.stories.tsx → titan-layout-default.stories.tsx} +131 -114
  110. package/src/components/titan-layout/titan-layout-legacy.stories.tsx +24 -0
  111. package/src/components/titan-layout/titan-layout-links.tsx +34 -0
  112. package/src/components/titan-layout/titan-layout-stacked.stories.tsx +30 -0
  113. package/src/components/titan-layout/titan-layout.tsx +16 -11
  114. package/src/index.ts +1 -12
  115. package/src/test/data.tsx +31 -83
  116. package/src/test/titan-layout.tsx +34 -0
  117. package/src/utils/navigation-context.tsx +9 -35
  118. package/src/utils/navigation.ts +3 -10
  119. package/dist/components/header-navigation/header-navigation-content.d.ts +0 -30
  120. package/dist/components/header-navigation/header-navigation-content.d.ts.map +0 -1
  121. package/dist/components/header-navigation/header-navigation-content.js +0 -58
  122. package/dist/components/header-navigation/header-navigation-content.js.map +0 -1
  123. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts +0 -9
  124. package/dist/components/header-navigation/header-navigation-extra-stacked.stories.d.ts.map +0 -1
  125. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts +0 -12
  126. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts.map +0 -1
  127. package/dist/components/header-navigation/header-navigation-links.d.ts +0 -11
  128. package/dist/components/header-navigation/header-navigation-links.d.ts.map +0 -1
  129. package/dist/components/header-navigation/header-navigation-links.js +0 -62
  130. package/dist/components/header-navigation/header-navigation-links.js.map +0 -1
  131. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts +0 -12
  132. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts.map +0 -1
  133. package/dist/components/header-navigation/header-navigation-stories.module.less +0 -6
  134. package/dist/components/header-navigation/header-navigation-stories.module.less.d.ts +0 -3
  135. package/dist/components/header-navigation/header-navigation.d.ts +0 -59
  136. package/dist/components/header-navigation/header-navigation.d.ts.map +0 -1
  137. package/dist/components/header-navigation/header-navigation.js +0 -228
  138. package/dist/components/header-navigation/header-navigation.js.map +0 -1
  139. package/dist/components/header-navigation/header-navigation.module.less +0 -260
  140. package/dist/components/header-navigation/header-navigation.module.less.d.ts +0 -22
  141. package/dist/components/header-navigation/header-navigation.stories.d.ts +0 -12
  142. package/dist/components/header-navigation/header-navigation.stories.d.ts.map +0 -1
  143. package/dist/components/header-navigation/index.d.ts +0 -2
  144. package/dist/components/header-navigation/index.d.ts.map +0 -1
  145. package/dist/components/header-navigation/index.js +0 -3
  146. package/dist/components/header-navigation/index.js.map +0 -1
  147. package/dist/components/header-navigation/with-tooltip.d.ts +0 -4
  148. package/dist/components/header-navigation/with-tooltip.d.ts.map +0 -1
  149. package/dist/components/header-navigation/with-tooltip.js +0 -10
  150. package/dist/components/header-navigation/with-tooltip.js.map +0 -1
  151. package/dist/components/layout.stories.d.ts +0 -13
  152. package/dist/components/layout.stories.d.ts.map +0 -1
  153. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts +0 -9
  154. package/dist/components/left-navigation/header-navigation-extra-tiny.stories.d.ts.map +0 -1
  155. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts +0 -18
  156. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts.map +0 -1
  157. package/dist/components/left-navigation/header-navigation-tiny-links.js +0 -79
  158. package/dist/components/left-navigation/header-navigation-tiny-links.js.map +0 -1
  159. package/dist/components/left-navigation/header-navigation-tiny.d.ts +0 -23
  160. package/dist/components/left-navigation/header-navigation-tiny.d.ts.map +0 -1
  161. package/dist/components/left-navigation/header-navigation-tiny.js +0 -32
  162. package/dist/components/left-navigation/header-navigation-tiny.js.map +0 -1
  163. package/dist/components/left-navigation/header-navigation-tiny.module.less +0 -117
  164. package/dist/components/left-navigation/header-navigation-tiny.module.less.d.ts +0 -15
  165. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts +0 -12
  166. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts.map +0 -1
  167. package/dist/components/left-navigation/index.d.ts +0 -5
  168. package/dist/components/left-navigation/index.d.ts.map +0 -1
  169. package/dist/components/left-navigation/index.js +0 -5
  170. package/dist/components/left-navigation/index.js.map +0 -1
  171. package/dist/components/left-navigation/interface-internal.d.ts +0 -10
  172. package/dist/components/left-navigation/interface-internal.d.ts.map +0 -1
  173. package/dist/components/left-navigation/interface-internal.js +0 -3
  174. package/dist/components/left-navigation/interface-internal.js.map +0 -1
  175. package/dist/components/left-navigation/interface.d.ts +0 -20
  176. package/dist/components/left-navigation/interface.d.ts.map +0 -1
  177. package/dist/components/left-navigation/interface.js.map +0 -1
  178. package/dist/components/left-navigation/side-navigation-context.d.ts +0 -8
  179. package/dist/components/left-navigation/side-navigation-context.d.ts.map +0 -1
  180. package/dist/components/left-navigation/side-navigation-context.js +0 -8
  181. package/dist/components/left-navigation/side-navigation-context.js.map +0 -1
  182. package/dist/components/left-navigation/side-navigation-links-internal.d.ts +0 -28
  183. package/dist/components/left-navigation/side-navigation-links-internal.d.ts.map +0 -1
  184. package/dist/components/left-navigation/side-navigation-links-internal.js +0 -89
  185. package/dist/components/left-navigation/side-navigation-links-internal.js.map +0 -1
  186. package/dist/components/left-navigation/side-navigation-links.d.ts +0 -6
  187. package/dist/components/left-navigation/side-navigation-links.d.ts.map +0 -1
  188. package/dist/components/left-navigation/side-navigation-links.js +0 -48
  189. package/dist/components/left-navigation/side-navigation-links.js.map +0 -1
  190. package/dist/components/left-navigation/side-navigation.d.ts +0 -29
  191. package/dist/components/left-navigation/side-navigation.d.ts.map +0 -1
  192. package/dist/components/left-navigation/side-navigation.js +0 -411
  193. package/dist/components/left-navigation/side-navigation.js.map +0 -1
  194. package/dist/components/left-navigation/side-navigation.module.less +0 -530
  195. package/dist/components/left-navigation/side-navigation.module.less.d.ts +0 -48
  196. package/dist/components/left-navigation/side-navigation.stories.d.ts +0 -17
  197. package/dist/components/left-navigation/side-navigation.stories.d.ts.map +0 -1
  198. package/dist/components/left-navigation/with-tooltip.d.ts +0 -4
  199. package/dist/components/left-navigation/with-tooltip.d.ts.map +0 -1
  200. package/dist/components/left-navigation/with-tooltip.js +0 -15
  201. package/dist/components/left-navigation/with-tooltip.js.map +0 -1
  202. package/dist/components/links.d.ts +0 -5
  203. package/dist/components/links.d.ts.map +0 -1
  204. package/dist/components/links.js +0 -35
  205. package/dist/components/links.js.map +0 -1
  206. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts +0 -9
  207. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts.map +0 -1
  208. package/dist/components/titan-layout/layout-profile.stories.d.ts +0 -13
  209. package/dist/components/titan-layout/layout-profile.stories.d.ts.map +0 -1
  210. package/dist/components/titan-layout/titan-layout.stories.d.ts +0 -29
  211. package/dist/components/titan-layout/titan-layout.stories.d.ts.map +0 -1
  212. package/dist/utils/navigation-legacy.d.ts +0 -88
  213. package/dist/utils/navigation-legacy.d.ts.map +0 -1
  214. package/dist/utils/navigation-legacy.js +0 -3
  215. package/dist/utils/navigation-legacy.js.map +0 -1
  216. package/src/components/header-navigation/header-navigation-content.tsx +0 -120
  217. package/src/components/header-navigation/header-navigation-extra-stacked.stories.tsx +0 -19
  218. package/src/components/header-navigation/header-navigation-extra.stories.tsx +0 -142
  219. package/src/components/header-navigation/header-navigation-links.tsx +0 -141
  220. package/src/components/header-navigation/header-navigation-stacked.stories.tsx +0 -146
  221. package/src/components/header-navigation/header-navigation-stories.module.less +0 -6
  222. package/src/components/header-navigation/header-navigation-stories.module.less.d.ts +0 -3
  223. package/src/components/header-navigation/header-navigation.module.less +0 -260
  224. package/src/components/header-navigation/header-navigation.module.less.d.ts +0 -22
  225. package/src/components/header-navigation/header-navigation.stories.tsx +0 -165
  226. package/src/components/header-navigation/header-navigation.tsx +0 -327
  227. package/src/components/header-navigation/index.ts +0 -1
  228. package/src/components/header-navigation/with-tooltip.tsx +0 -15
  229. package/src/components/layout.stories.tsx +0 -103
  230. package/src/components/left-navigation/header-navigation-extra-tiny.stories.tsx +0 -21
  231. package/src/components/left-navigation/header-navigation-tiny-links.tsx +0 -145
  232. package/src/components/left-navigation/header-navigation-tiny.module.less +0 -117
  233. package/src/components/left-navigation/header-navigation-tiny.module.less.d.ts +0 -15
  234. package/src/components/left-navigation/header-navigation-tiny.stories.tsx +0 -178
  235. package/src/components/left-navigation/header-navigation-tiny.tsx +0 -65
  236. package/src/components/left-navigation/index.ts +0 -4
  237. package/src/components/left-navigation/interface-internal.ts +0 -11
  238. package/src/components/left-navigation/interface.ts +0 -26
  239. package/src/components/left-navigation/side-navigation-context.tsx +0 -13
  240. package/src/components/left-navigation/side-navigation-links-internal.tsx +0 -151
  241. package/src/components/left-navigation/side-navigation-links.tsx +0 -57
  242. package/src/components/left-navigation/side-navigation.module.less +0 -530
  243. package/src/components/left-navigation/side-navigation.module.less.d.ts +0 -48
  244. package/src/components/left-navigation/side-navigation.stories.tsx +0 -226
  245. package/src/components/left-navigation/side-navigation.tsx +0 -543
  246. package/src/components/left-navigation/with-tooltip.tsx +0 -16
  247. package/src/components/links.tsx +0 -54
  248. package/src/components/profile-dropdown/profile-dropdown-tiny.stories.tsx +0 -25
  249. package/src/components/titan-layout/layout-profile.stories.tsx +0 -46
  250. package/src/utils/navigation-legacy.ts +0 -106
  251. /package/dist/components/{left-navigation → profile-dropdown}/interface.js +0 -0
@@ -17,7 +17,6 @@
17
17
 
18
18
  // mobile version
19
19
  .nav-drawer {
20
- // display: none;
21
20
  position: fixed;
22
21
  max-width: 400px;
23
22
  width: 0;
@@ -65,6 +64,24 @@
65
64
  margin-bottom: @spacing-half;
66
65
  }
67
66
  }
67
+
68
+ .nav-group-item {
69
+ .nav-item {
70
+ margin-right: 36px;
71
+
72
+ &.nav-item-active {
73
+ margin-right: @spacing-0;
74
+
75
+ .nav-item-icon-wrapper {
76
+ padding-right: 40px;
77
+ }
78
+ }
79
+ }
80
+
81
+ .nav-item-group-toggle-wrapper {
82
+ right: @spacing-0;
83
+ }
84
+ }
68
85
  }
69
86
 
70
87
  .nav-drawer-backdrop {
@@ -184,19 +201,38 @@
184
201
  }
185
202
 
186
203
  .nav-top .divider {
187
- margin-top: @spacing-1;
204
+ margin-top: @spacing-half;
188
205
  margin-bottom: @spacing-1;
189
206
  }
190
207
 
191
208
  .nav-main {
192
209
  padding-top: @spacing-1;
193
210
  }
211
+
212
+ .nav-group-item {
213
+ .nav-item {
214
+ margin-right: 44px;
215
+
216
+ &.nav-item-active {
217
+ margin-right: @spacing-1;
218
+
219
+ .nav-item-icon-wrapper {
220
+ padding-right: 40px;
221
+ }
222
+ }
223
+ }
224
+
225
+ .nav-item-group-toggle-wrapper {
226
+ right: @spacing-1;
227
+ }
228
+ }
194
229
  }
195
230
 
196
231
  .nav-drawer,
197
232
  .nav-wide {
198
233
  .nav-item {
199
234
  flex-direction: row;
235
+ margin-bottom: @spacing-half;
200
236
 
201
237
  .nav-item-icon-wrapper {
202
238
  flex: 1;
@@ -355,26 +391,6 @@
355
391
  min-height: 12px !important;
356
392
  }
357
393
 
358
- .nav-item-group-toggle-wrapper {
359
- position: relative;
360
- display: flex;
361
- justify-content: center;
362
- align-items: center;
363
-
364
- .nav-item-group-toggle[data-anv][data-anv] {
365
- color: inherit;
366
- font-weight: @font-weight-semibold;
367
- }
368
-
369
- .nav-item-group-toggle-click {
370
- position: absolute;
371
- left: -@spacing-2;
372
- right: -@spacing-half;
373
- top: -@spacing-1;
374
- bottom: -@spacing-1;
375
- }
376
- }
377
-
378
394
  .nav-icon[data-anv][data-anv] {
379
395
  height: 24px;
380
396
  width: 24px;
@@ -397,6 +413,42 @@
397
413
  .nav-group-wrapper {
398
414
  .nav-group-item {
399
415
  position: relative;
416
+
417
+ .nav-item {
418
+ .nav-item-counter[data-anv][data-anv] {
419
+ margin-right: @spacing-0;
420
+ }
421
+ }
422
+
423
+ &:has(.nav-item-active) {
424
+ .nav-item-group-toggle-wrapper {
425
+ color: @text-color-active;
426
+ }
427
+ }
428
+ }
429
+
430
+ .nav-item-group-toggle-wrapper {
431
+ position: absolute;
432
+ top: 0;
433
+ bottom: 0;
434
+ right: @spacing-0;
435
+ color: @text-color;
436
+ display: flex;
437
+ justify-content: center;
438
+ align-items: center;
439
+
440
+ .nav-item-group-toggle[data-anv][data-anv] {
441
+ color: inherit;
442
+ font-weight: @font-weight-semibold;
443
+ }
444
+
445
+ .nav-item-group-toggle-click {
446
+ position: absolute;
447
+ left: -@spacing-2;
448
+ right: -@spacing-half;
449
+ top: -@spacing-1;
450
+ bottom: -@spacing-1;
451
+ }
400
452
  }
401
453
 
402
454
  .submenu-wrapper:not(.submenu-wrapper-collapsed) {
@@ -32,7 +32,7 @@ export interface LayoutSidebarProps {
32
32
  bottom?: ReactElement;
33
33
  mainItems?: NavigationItemData[];
34
34
  barExpanded: boolean;
35
- submenuExpanded: string | undefined;
35
+ submenusExpanded: string[] | undefined;
36
36
  drawerOpened: boolean;
37
37
  mobile: boolean;
38
38
  navigationComponent: FC<NavLinkComponentProps>;
@@ -45,7 +45,7 @@ export const LayoutSidebar: FC<LayoutSidebarProps> = ({
45
45
  className,
46
46
  mobile,
47
47
  barExpanded,
48
- submenuExpanded,
48
+ submenusExpanded,
49
49
  drawerOpened,
50
50
  onBarExpandChange,
51
51
  onSubmenuExpandChange,
@@ -95,22 +95,29 @@ 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
- submenuExpanded={!!item.id && submenuExpanded === item.id}
100
+ submenuExpanded={
101
+ !!item.id && !!submenusExpanded?.includes(item.id)
102
+ }
100
103
  onSubmenuExpand={onSubmenuExpandChange}
101
104
  navigationComponent={navigationComponent}
102
- {...item}
103
105
  />
104
106
  ) : (
105
107
  <InternalSideNavigationLink
106
108
  key={item.id}
107
- submenuExpanded={undefined}
108
- navigationComponent={navigationComponent}
109
- {...item}
109
+ id={item.id}
110
+ to={item.to}
111
+ title={item.title}
112
+ isActive={item.isActive}
113
+ icon={item.icon}
114
+ iconActive={item.iconActive}
115
+ className={item.className}
110
116
  tag={getSubmenuGroupTag(
111
117
  item.submenu,
112
118
  getCounterTag(item.counter, item.tag)
113
119
  )}
120
+ navigationComponent={navigationComponent}
114
121
  />
115
122
  )
116
123
  )}
@@ -170,24 +177,23 @@ const SideNavigationOptionsToggle: FC<{
170
177
  );
171
178
 
172
179
  /** 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 }) => {
180
+ const SideNavigationGroupItem: FC<{
181
+ item: NavigationItemData;
182
+ navigationComponent: FC<NavLinkComponentProps>;
183
+ barExpanded: boolean;
184
+ submenuExpanded: boolean;
185
+ onSubmenuExpand: undefined | ((id: string, expanded: boolean) => void);
186
+ }> = ({ item, onSubmenuExpand, barExpanded, submenuExpanded, navigationComponent }) => {
181
187
  const onExpandToggle = useCallback(
182
188
  (e: MouseEvent<never>) => {
183
189
  e.preventDefault();
184
190
  e.stopPropagation();
185
191
 
186
- if (props.id) {
187
- onSubmenuExpand?.(props.id, !submenuExpanded);
192
+ if (item.id) {
193
+ onSubmenuExpand?.(item.id, !submenuExpanded);
188
194
  }
189
195
  },
190
- [props.id, submenuExpanded, onSubmenuExpand]
196
+ [item.id, submenuExpanded, onSubmenuExpand]
191
197
  );
192
198
  const {
193
199
  sidebar: {
@@ -195,19 +201,26 @@ const SideNavigationGroupItem: FC<
195
201
  },
196
202
  } = useTitanLayoutContext();
197
203
 
198
- const tag = getSubmenuGroupTag(props.submenu, getCounterTag(props.counter, props.tag));
204
+ const tag = getSubmenuGroupTag(item.submenu, getCounterTag(item.counter, item.tag));
199
205
 
200
206
  return barExpanded ? (
201
207
  <InternalSideNavigationGroup
202
- {...props}
208
+ id={item.id}
209
+ to={item.to}
210
+ title={item.title}
211
+ isActive={item.isActive}
212
+ icon={item.icon}
213
+ iconActive={item.iconActive}
214
+ className={item.className}
215
+ tag={tag}
203
216
  submenuExpanded={submenuExpanded}
204
217
  onExpandToggle={onExpandToggle}
205
- tag={tag}
218
+ navigationComponent={navigationComponent}
206
219
  >
207
220
  <SideNavigationGroupContent
208
- parentId={props.id}
209
- groups={props.submenu?.groups ?? []}
210
- navigationComponent={props.navigationComponent}
221
+ parentId={item.id}
222
+ groups={item.submenu?.groups ?? []}
223
+ navigationComponent={navigationComponent}
211
224
  />
212
225
  </InternalSideNavigationGroup>
213
226
  ) : (
@@ -216,9 +229,15 @@ const SideNavigationGroupItem: FC<
216
229
  {(triggerProps: any) => (
217
230
  <div {...triggerProps}>
218
231
  <InternalSideNavigationLink
219
- {...props}
220
- submenuExpanded={undefined}
232
+ id={item.id}
233
+ to={item.to}
234
+ title={item.title}
235
+ isActive={item.isActive}
236
+ icon={item.icon}
237
+ iconActive={item.iconActive}
238
+ className={item.className}
221
239
  tag={tag}
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, useEffect, useState } from 'react';
10
10
  import {
11
11
  CallsNavigationTrigger,
12
12
  LocationInfo,
13
13
  NavLinkMock,
14
- items,
14
+ navItems,
15
15
  withAnvil,
16
16
  withDefaultRedirects,
17
17
  withMemoryRouter,
18
18
  } from '../../test/data';
19
- import { SideNavigationLinkWrapperProps } from '../left-navigation';
20
- import { HeaderNavigationLink, HeaderNavigationTrigger } from '../links';
21
- import { ProfileDropdown, TitanLayout, TitanLayoutProps, TitanLayoutState } from './';
22
-
23
- interface LayoutContentArgs {
24
- header: boolean;
25
- sideTop: boolean;
26
- extraText: boolean;
27
- search: boolean;
28
- longContent: boolean;
29
- wideContent: boolean;
30
- minWidth: boolean;
31
- emptyNav: boolean;
32
- }
19
+ import {
20
+ LayoutContentArgs,
21
+ getDefaultArgs,
22
+ useDefaultLayoutProps,
23
+ withDefaultLayoutProps,
24
+ } from '../../test/titan-layout';
25
+ import {
26
+ ProfileDropdown,
27
+ TitanLayout,
28
+ TitanLayoutLinkWrapper,
29
+ TitanLayoutProps,
30
+ TitanLayoutState,
31
+ } from './';
33
32
 
34
33
  export default {
35
- title: 'Navigation/TitanLayout',
36
- decorators: [withDefaultRedirects, withMemoryRouter, withAnvil],
34
+ title: 'Navigation/TitanLayout/Default',
35
+ decorators: [
36
+ withDefaultLayoutProps({ navVariant: 'left' }),
37
+ withDefaultRedirects,
38
+ withMemoryRouter,
39
+ withAnvil,
40
+ ],
37
41
  parameters: {},
38
42
  argTypes: {},
39
- args: {
40
- header: true,
41
- sideTop: true,
42
- extraText: true,
43
- search: true,
44
- longContent: true,
45
- wideContent: false,
46
- minWidth: false,
47
- emptyNav: false,
48
- } as LayoutContentArgs,
43
+ args: getDefaultArgs(),
49
44
  };
50
45
 
51
46
  const mainNavItems = [
52
- items.dashboard,
53
- items.calendar,
54
- items.calls,
55
- items.accountingWithSubmenu,
56
- items.dispatch,
57
-
58
- items.fleet,
59
- items.followUps,
60
- items.inventory,
61
-
62
- items.marketing,
63
- items.priceBook,
64
- items.pointOfSale,
65
- items.reports,
47
+ navItems.dashboard,
48
+ navItems.calendar,
49
+ navItems.calls,
50
+ navItems.accountingWithSubmenu,
51
+ navItems.dispatch,
52
+
53
+ navItems.fleet,
54
+ navItems.followUpsWithSubmenu,
55
+ navItems.purchasingWithSubmenu,
56
+
57
+ navItems.marketing,
58
+ navItems.priceBook,
59
+ navItems.pointOfSale,
60
+ navItems.reports,
66
61
  ];
67
62
 
68
63
  const overflowNavItems = [
69
- { ...items.accounting, id: 'accounting-overflow', title: 'Other Accounting' },
70
- { ...items.reports, id: 'reports-overflow', title: 'Other Reports' },
64
+ { ...navItems.accounting, id: 'accounting-overflow', title: 'Other Accounting' },
65
+ { ...navItems.reports, id: 'reports-overflow', title: 'Other Reports' },
71
66
  ];
72
67
 
73
68
  const profile = (
@@ -101,14 +96,22 @@ const profile = (
101
96
  </ProfileDropdown>
102
97
  );
103
98
 
99
+ const profileEmpty = (
100
+ <ProfileDropdown>
101
+ <ProfileDropdown.Link id="sign-out" to="/sign-out">
102
+ sign out
103
+ </ProfileDropdown.Link>
104
+ <ProfileDropdown.Divider />
105
+ </ProfileDropdown>
106
+ );
107
+
104
108
  const extraLinks = (
105
109
  <Fragment>
106
- <HeaderNavigationLink
110
+ <TitanLayout.Link
107
111
  id="search"
108
112
  to="https://google.com"
109
113
  target="_blank"
110
114
  title="Search"
111
- hint="Search: for all the questions"
112
115
  tooltip="Search"
113
116
  icon={SvgSearch}
114
117
  iconActive={SvgSearch}
@@ -116,7 +119,7 @@ const extraLinks = (
116
119
 
117
120
  <CallsNavigationTrigger />
118
121
 
119
- <HeaderNavigationLink
122
+ <TitanLayout.Link
120
123
  id="titanAdvisor"
121
124
  to="/titanAdvisor"
122
125
  title="Titan Advisor"
@@ -124,13 +127,12 @@ const extraLinks = (
124
127
  iconActive={SvgRocketActive}
125
128
  />
126
129
 
127
- <HeaderNavigationLink
130
+ <TitanLayout.Link
128
131
  id="settings"
129
132
  to="/settings"
130
133
  title="Settings"
131
134
  target="_blank"
132
- aria-label="search"
133
- hint="Settings"
135
+ aria-label="settings"
134
136
  icon={SvgSettings}
135
137
  iconActive={SvgSettingsActive}
136
138
  />
@@ -138,7 +140,7 @@ const extraLinks = (
138
140
  );
139
141
 
140
142
  const extraLinksTop = (
141
- <HeaderNavigationTrigger
143
+ <TitanLayout.Trigger
142
144
  id="atlas"
143
145
  title="Atlas"
144
146
  icon={SvgAtlas}
@@ -149,7 +151,7 @@ const extraLinksTop = (
149
151
  />
150
152
  );
151
153
 
152
- const SideLinkPopoverWrapper: FC<SideNavigationLinkWrapperProps> = ({ children, context }) => {
154
+ const SideLinkPopoverWrapper: TitanLayoutLinkWrapper = ({ children, context }) => {
153
155
  return (
154
156
  <Popover placement="right" openOnHover>
155
157
  <Popover.Trigger>{(props: any) => <div {...props}>{children}</div>}</Popover.Trigger>
@@ -159,14 +161,13 @@ const SideLinkPopoverWrapper: FC<SideNavigationLinkWrapperProps> = ({ children,
159
161
  };
160
162
 
161
163
  const sidebarTop = () => [
162
- <TitanLayout.Link key="tasks" {...items.tasks} />,
163
- <TitanLayout.Link key="calls" {...items.calls} />,
164
+ <TitanLayout.Link key="tasks" {...navItems.tasks} />,
165
+ <TitanLayout.Link key="calls" {...navItems.calls} />,
164
166
  <TitanLayout.Trigger
165
167
  key="marketing"
166
- {...items.marketing}
168
+ {...navItems.marketing}
167
169
  isActive={false}
168
170
  wrapper={SideLinkPopoverWrapper}
169
- onMobileClick={() => alert('clicked')}
170
171
  counter={50}
171
172
  />,
172
173
  ];
@@ -204,7 +205,7 @@ const useLayoutProps = (args: LayoutContentArgs): TitanLayoutProps => {
204
205
 
205
206
  navigationComponent: NavLinkMock,
206
207
  navigationMainItems: args.emptyNav ? [] : mainNavItems,
207
- navigationOverflowItems: args.emptyNav ? [] : overflowNavItems,
208
+ navigationOverflowItems: args.emptyNav || !args.overflowItems ? [] : overflowNavItems,
208
209
 
209
210
  profile,
210
211
  top: args.search ? <SearchBar /> : undefined,
@@ -223,10 +224,15 @@ const useLayoutProps = (args: LayoutContentArgs): TitanLayoutProps => {
223
224
  };
224
225
 
225
226
  const Content = (args: LayoutContentArgs) => {
227
+ const [info, setInfo] = useState('');
228
+ useEffect(() => {
229
+ setInfo(new Date().toLocaleTimeString());
230
+ }, []);
226
231
  return (
227
232
  <Fragment>
228
233
  <LocationInfo className="m-b-3" />
229
- <div className="m-b-3">rendered - {new Date().toLocaleTimeString()}</div>
234
+ <div className="m-b-3">component rendered - {info}</div>
235
+ <div className="m-b-3">rerendered - {new Date().toLocaleTimeString()}</div>
230
236
  {args.wideContent && (
231
237
  <div style={{ width: '1200px' }}>
232
238
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
@@ -315,30 +321,8 @@ const Content = (args: LayoutContentArgs) => {
315
321
  );
316
322
  };
317
323
 
318
- export const TitanLayoutLegacy = (args: LayoutContentArgs) => (
319
- <TitanLayout {...useLayoutProps(args)} appearance="legacy">
320
- <div
321
- className="p-3"
322
- style={{ position: 'absolute', width: 'calc(100% - var(--nav-offset-left))' }}
323
- >
324
- <Content {...args} />
325
- </div>
326
- </TitanLayout>
327
- );
328
-
329
- export const TitanLayoutLegacyTopNav = (args: LayoutContentArgs) => (
330
- <TitanLayout {...useLayoutProps(args)} appearance="legacy" navVariant="top">
331
- <div
332
- className="p-3"
333
- style={{ position: 'absolute', width: 'calc(100% - var(--nav-offset-left))' }}
334
- >
335
- <Content {...args} />
336
- </div>
337
- </TitanLayout>
338
- );
339
-
340
- export const TitanLayoutLegacyTop = (args: LayoutContentArgs) => (
341
- <TitanLayout {...useLayoutProps(args)} appearance="legacy" navVariant="top" top={undefined}>
324
+ export const ContentLegacy = (args: LayoutContentArgs) => (
325
+ <TitanLayout {...useLayoutProps(args)} appearance="legacy" {...useDefaultLayoutProps()}>
342
326
  <div
343
327
  className="p-3"
344
328
  style={{ position: 'absolute', width: 'calc(100% - var(--nav-offset-left))' }}
@@ -348,46 +332,43 @@ export const TitanLayoutLegacyTop = (args: LayoutContentArgs) => (
348
332
  </TitanLayout>
349
333
  );
350
334
 
351
- export const TitanLayoutAnvil1 = (args: LayoutContentArgs) => (
352
- <TitanLayout {...useLayoutProps(args)} appearance="anvil1">
335
+ export const ContentAnvil1 = (args: LayoutContentArgs) => (
336
+ <TitanLayout {...useLayoutProps(args)} appearance="anvil1" {...useDefaultLayoutProps()}>
353
337
  <Anvil1Page>
354
338
  <Content {...args} />
355
339
  </Anvil1Page>
356
340
  </TitanLayout>
357
341
  );
358
342
 
359
- export const TitanLayoutAnvil1TopNav = (args: LayoutContentArgs) => (
360
- <TitanLayout {...useLayoutProps(args)} appearance="anvil1" navVariant="top">
361
- <Anvil1Page>
362
- <Content {...args} />
363
- </Anvil1Page>
343
+ export const ContentAnvil2 = (args: LayoutContentArgs) => (
344
+ <TitanLayout {...useLayoutProps(args)} appearance="anvil2" {...useDefaultLayoutProps()}>
345
+ <Anvil2Page>
346
+ <Anvil2Page.Content>
347
+ <Content {...args} />
348
+ </Anvil2Page.Content>
349
+ </Anvil2Page>
364
350
  </TitanLayout>
365
351
  );
366
352
 
367
- export const TitanLayoutAnvil1Top = (args: LayoutContentArgs) => (
353
+ export const ExtraWithTitle = (args: LayoutContentArgs) => (
368
354
  <TitanLayout
369
355
  {...useLayoutProps(args)}
370
- appearance="anvil1"
371
- navVariant="top"
372
- top={undefined}
373
- navigationOverflowItems={undefined}
356
+ appearance="anvil2"
357
+ profile={profileEmpty}
358
+ sideTop={undefined}
359
+ navigationMainItems={[navItems.projects]}
360
+ extraLinks={
361
+ <TitanLayout.Link
362
+ id="search"
363
+ to="/search"
364
+ title="Search"
365
+ icon={SvgSearch}
366
+ iconActive={SvgSearch}
367
+ extra={{ showTitle: true }}
368
+ />
369
+ }
370
+ {...useDefaultLayoutProps()}
374
371
  >
375
- <Anvil1Page>
376
- <Content {...args} />
377
- </Anvil1Page>
378
- </TitanLayout>
379
- );
380
-
381
- export const TitanLayoutAnvil1TopOverflow = (args: LayoutContentArgs) => (
382
- <TitanLayout {...useLayoutProps(args)} appearance="anvil1" navVariant="top" top={undefined}>
383
- <Anvil1Page>
384
- <Content {...args} />
385
- </Anvil1Page>
386
- </TitanLayout>
387
- );
388
-
389
- export const TitanLayoutAnvil2 = (args: LayoutContentArgs) => (
390
- <TitanLayout {...useLayoutProps(args)} appearance="anvil2">
391
372
  <Anvil2Page>
392
373
  <Anvil2Page.Content>
393
374
  <Content {...args} />
@@ -396,8 +377,26 @@ export const TitanLayoutAnvil2 = (args: LayoutContentArgs) => (
396
377
  </TitanLayout>
397
378
  );
398
379
 
399
- export const TitanLayoutAnvil2TopNav = (args: LayoutContentArgs) => (
400
- <TitanLayout {...useLayoutProps(args)} appearance="anvil2" navVariant="top">
380
+ export const ExtraWithFlashing = (args: LayoutContentArgs) => (
381
+ <TitanLayout
382
+ {...useLayoutProps(args)}
383
+ appearance="anvil2"
384
+ profile={profileEmpty}
385
+ sideTop={undefined}
386
+ navigationMainItems={[navItems.projects]}
387
+ extraLinks={
388
+ <TitanLayout.Link
389
+ id="search"
390
+ to="/search"
391
+ title="Search"
392
+ icon={SvgSearch}
393
+ iconActive={SvgSearch}
394
+ extra={{ flashing: true }}
395
+ side={{ counter: true }}
396
+ />
397
+ }
398
+ {...useDefaultLayoutProps()}
399
+ >
401
400
  <Anvil2Page>
402
401
  <Anvil2Page.Content>
403
402
  <Content {...args} />
@@ -406,8 +405,26 @@ export const TitanLayoutAnvil2TopNav = (args: LayoutContentArgs) => (
406
405
  </TitanLayout>
407
406
  );
408
407
 
409
- export const TitanLayoutAnvil2Top = (args: LayoutContentArgs) => (
410
- <TitanLayout {...useLayoutProps(args)} appearance="anvil2" navVariant="top" top={undefined}>
408
+ export const ExtraWithTitleFlashing = (args: LayoutContentArgs) => (
409
+ <TitanLayout
410
+ {...useLayoutProps(args)}
411
+ appearance="anvil2"
412
+ profile={profileEmpty}
413
+ sideTop={undefined}
414
+ navigationMainItems={[navItems.projects]}
415
+ extraLinks={
416
+ <TitanLayout.Link
417
+ id="search"
418
+ to="/search"
419
+ title="Search"
420
+ icon={SvgSearch}
421
+ iconActive={SvgSearch}
422
+ extra={{ showTitle: true, flashing: true }}
423
+ side={{ counter: true }}
424
+ />
425
+ }
426
+ {...useDefaultLayoutProps()}
427
+ >
411
428
  <Anvil2Page>
412
429
  <Anvil2Page.Content>
413
430
  <Content {...args} />