@servicetitan/navigation 3.3.0 → 4.1.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 (150) hide show
  1. package/dist/components/header-navigation/header-navigation-content.d.ts.map +1 -1
  2. package/dist/components/header-navigation/header-navigation-content.js +3 -3
  3. package/dist/components/header-navigation/header-navigation-content.js.map +1 -1
  4. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts +3 -3
  5. package/dist/components/header-navigation/header-navigation-extra.stories.d.ts.map +1 -1
  6. package/dist/components/header-navigation/header-navigation-extra.stories.js +8 -22
  7. package/dist/components/header-navigation/header-navigation-extra.stories.js.map +1 -1
  8. package/dist/components/header-navigation/header-navigation-links.d.ts +3 -30
  9. package/dist/components/header-navigation/header-navigation-links.d.ts.map +1 -1
  10. package/dist/components/header-navigation/header-navigation-links.js +8 -5
  11. package/dist/components/header-navigation/header-navigation-links.js.map +1 -1
  12. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts +1 -0
  13. package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts.map +1 -1
  14. package/dist/components/header-navigation/header-navigation-stacked.stories.js +8 -26
  15. package/dist/components/header-navigation/header-navigation-stacked.stories.js.map +1 -1
  16. package/dist/components/header-navigation/header-navigation.d.ts +1 -28
  17. package/dist/components/header-navigation/header-navigation.d.ts.map +1 -1
  18. package/dist/components/header-navigation/header-navigation.js +5 -8
  19. package/dist/components/header-navigation/header-navigation.js.map +1 -1
  20. package/dist/components/header-navigation/header-navigation.module.less +13 -70
  21. package/dist/components/header-navigation/header-navigation.stories.d.ts +1 -0
  22. package/dist/components/header-navigation/header-navigation.stories.d.ts.map +1 -1
  23. package/dist/components/header-navigation/header-navigation.stories.js +9 -27
  24. package/dist/components/header-navigation/header-navigation.stories.js.map +1 -1
  25. package/dist/components/header-navigation/index.d.ts +0 -1
  26. package/dist/components/header-navigation/index.d.ts.map +1 -1
  27. package/dist/components/header-navigation/index.js +0 -1
  28. package/dist/components/header-navigation/index.js.map +1 -1
  29. package/dist/components/layout.stories.d.ts +1 -0
  30. package/dist/components/layout.stories.d.ts.map +1 -1
  31. package/dist/components/layout.stories.js +4 -2
  32. package/dist/components/layout.stories.js.map +1 -1
  33. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts +16 -0
  34. package/dist/components/left-navigation/header-navigation-tiny-links.d.ts.map +1 -0
  35. package/dist/components/left-navigation/header-navigation-tiny-links.js +43 -0
  36. package/dist/components/left-navigation/header-navigation-tiny-links.js.map +1 -0
  37. package/dist/components/left-navigation/header-navigation-tiny.d.ts +23 -0
  38. package/dist/components/left-navigation/header-navigation-tiny.d.ts.map +1 -0
  39. package/dist/components/left-navigation/header-navigation-tiny.js +7 -0
  40. package/dist/components/left-navigation/header-navigation-tiny.js.map +1 -0
  41. package/dist/components/left-navigation/header-navigation-tiny.module.less +109 -0
  42. package/dist/components/{header-navigation → left-navigation}/header-navigation-tiny.stories.d.ts +2 -2
  43. package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts.map +1 -0
  44. package/dist/components/left-navigation/header-navigation-tiny.stories.js +30 -0
  45. package/dist/components/left-navigation/header-navigation-tiny.stories.js.map +1 -0
  46. package/dist/components/left-navigation/index.d.ts +3 -0
  47. package/dist/components/left-navigation/index.d.ts.map +1 -0
  48. package/dist/components/left-navigation/index.js +3 -0
  49. package/dist/components/left-navigation/index.js.map +1 -0
  50. package/dist/components/{side-navigation → left-navigation}/side-navigation.d.ts +1 -12
  51. package/dist/components/left-navigation/side-navigation.d.ts.map +1 -0
  52. package/dist/components/left-navigation/side-navigation.js +23 -0
  53. package/dist/components/left-navigation/side-navigation.js.map +1 -0
  54. package/dist/components/{side-navigation → left-navigation}/side-navigation.module.less +28 -22
  55. package/dist/components/left-navigation/side-navigation.stories.d.ts +10 -0
  56. package/dist/components/left-navigation/side-navigation.stories.d.ts.map +1 -0
  57. package/dist/components/left-navigation/side-navigation.stories.js +31 -0
  58. package/dist/components/left-navigation/side-navigation.stories.js.map +1 -0
  59. package/dist/components/links.d.ts +5 -0
  60. package/dist/components/links.d.ts.map +1 -0
  61. package/dist/components/links.js +14 -0
  62. package/dist/components/links.js.map +1 -0
  63. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts +2 -8
  64. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts.map +1 -1
  65. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.js +5 -43
  66. package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.js.map +1 -1
  67. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts +9 -0
  68. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts.map +1 -0
  69. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.js +13 -0
  70. package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.js.map +1 -0
  71. package/dist/components/profile-dropdown/profile-dropdown.d.ts +2 -1
  72. package/dist/components/profile-dropdown/profile-dropdown.d.ts.map +1 -1
  73. package/dist/components/profile-dropdown/profile-dropdown.js +16 -7
  74. package/dist/components/profile-dropdown/profile-dropdown.js.map +1 -1
  75. package/dist/components/profile-dropdown/profile-dropdown.module.less +7 -1
  76. package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts +9 -8
  77. package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts.map +1 -1
  78. package/dist/components/profile-dropdown/profile-dropdown.stories.js +39 -39
  79. package/dist/components/profile-dropdown/profile-dropdown.stories.js.map +1 -1
  80. package/dist/index.d.ts +2 -1
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +2 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/test/data-stories.module.less +8 -0
  85. package/dist/test/data.stories.d.ts +26 -0
  86. package/dist/test/data.stories.d.ts.map +1 -0
  87. package/dist/test/data.stories.js +151 -0
  88. package/dist/test/data.stories.js.map +1 -0
  89. package/dist/utils/navigation-context.d.ts +2 -2
  90. package/dist/utils/navigation-context.d.ts.map +1 -1
  91. package/dist/utils/navigation-context.js +18 -5
  92. package/dist/utils/navigation-context.js.map +1 -1
  93. package/dist/utils/navigation.d.ts +47 -0
  94. package/dist/utils/navigation.d.ts.map +1 -1
  95. package/package.json +11 -11
  96. package/src/components/header-navigation/header-navigation-content.tsx +3 -3
  97. package/src/components/header-navigation/header-navigation-extra.stories.tsx +29 -38
  98. package/src/components/header-navigation/header-navigation-links.tsx +19 -41
  99. package/src/components/header-navigation/header-navigation-stacked.stories.tsx +18 -70
  100. package/src/components/header-navigation/header-navigation.module.less +13 -70
  101. package/src/components/header-navigation/header-navigation.module.less.d.ts +0 -1
  102. package/src/components/header-navigation/header-navigation.stories.tsx +20 -71
  103. package/src/components/header-navigation/header-navigation.tsx +6 -82
  104. package/src/components/header-navigation/index.ts +0 -1
  105. package/src/components/layout.stories.tsx +4 -2
  106. package/src/components/left-navigation/header-navigation-tiny-links.tsx +110 -0
  107. package/src/components/left-navigation/header-navigation-tiny.module.less +109 -0
  108. package/src/components/left-navigation/header-navigation-tiny.module.less.d.ts +14 -0
  109. package/src/components/{header-navigation → left-navigation}/header-navigation-tiny.stories.tsx +39 -46
  110. package/src/components/left-navigation/header-navigation-tiny.tsx +65 -0
  111. package/src/components/left-navigation/index.ts +2 -0
  112. package/src/components/{side-navigation → left-navigation}/side-navigation.module.less +28 -22
  113. package/src/components/{side-navigation → left-navigation}/side-navigation.module.less.d.ts +3 -3
  114. package/src/components/left-navigation/side-navigation.stories.tsx +46 -0
  115. package/src/components/left-navigation/side-navigation.tsx +171 -0
  116. package/src/components/links.tsx +31 -0
  117. package/src/components/profile-dropdown/profile-dropdown-stacked.stories.tsx +5 -170
  118. package/src/components/profile-dropdown/profile-dropdown-tiny.stories.tsx +15 -0
  119. package/src/components/profile-dropdown/profile-dropdown.module.less +7 -1
  120. package/src/components/profile-dropdown/profile-dropdown.module.less.d.ts +1 -0
  121. package/src/components/profile-dropdown/profile-dropdown.stories.tsx +106 -129
  122. package/src/components/profile-dropdown/profile-dropdown.tsx +35 -8
  123. package/src/index.ts +2 -1
  124. package/src/test/data-stories.module.less +8 -0
  125. package/src/test/data-stories.module.less.d.ts +3 -0
  126. package/src/test/data.stories.tsx +223 -0
  127. package/src/utils/navigation-context.tsx +10 -10
  128. package/src/utils/navigation.ts +54 -0
  129. package/dist/components/header-navigation/header-navigation-tiny.stories.d.ts.map +0 -1
  130. package/dist/components/header-navigation/header-navigation-tiny.stories.js +0 -25
  131. package/dist/components/header-navigation/header-navigation-tiny.stories.js.map +0 -1
  132. package/dist/components/side-navigation/icons.d.ts +0 -7
  133. package/dist/components/side-navigation/icons.d.ts.map +0 -1
  134. package/dist/components/side-navigation/icons.js +0 -5
  135. package/dist/components/side-navigation/icons.js.map +0 -1
  136. package/dist/components/side-navigation/index.d.ts +0 -2
  137. package/dist/components/side-navigation/index.d.ts.map +0 -1
  138. package/dist/components/side-navigation/index.js +0 -2
  139. package/dist/components/side-navigation/index.js.map +0 -1
  140. package/dist/components/side-navigation/side-navigation.d.ts.map +0 -1
  141. package/dist/components/side-navigation/side-navigation.js +0 -37
  142. package/dist/components/side-navigation/side-navigation.js.map +0 -1
  143. package/dist/components/side-navigation/side-navigation.stories.d.ts +0 -10
  144. package/dist/components/side-navigation/side-navigation.stories.d.ts.map +0 -1
  145. package/dist/components/side-navigation/side-navigation.stories.js +0 -52
  146. package/dist/components/side-navigation/side-navigation.stories.js.map +0 -1
  147. package/src/components/side-navigation/icons.tsx +0 -74
  148. package/src/components/side-navigation/index.ts +0 -1
  149. package/src/components/side-navigation/side-navigation.stories.tsx +0 -95
  150. package/src/components/side-navigation/side-navigation.tsx +0 -224
@@ -1,224 +0,0 @@
1
- import { BodyText, Divider, Eyebrow, Icon, Popover, Stack } from '@servicetitan/design-system';
2
- import classNames from 'classnames';
3
- import { FC, Fragment, PropsWithChildren, useState } from 'react';
4
- import { HeaderNavigationItemData, NavLinkComponentProps } from '../../utils/navigation';
5
- import {
6
- DefaultNavLinkComponent,
7
- NavLinkContext,
8
- useNavLink,
9
- } from '../../utils/navigation-context';
10
- import { withTooltip } from '../../utils/with-tooltip';
11
- import { CounterTag } from '../counter-tag';
12
- import { IconSideExpanded, IconSideOptions, IconSideSlim } from './icons';
13
- import * as Styles from './side-navigation.module.less';
14
-
15
- export interface SideNavigationProps {
16
- /** container class name */
17
- className?: string;
18
- /** container id */
19
- id?: string;
20
- /** main navigation items */
21
- items?: HeaderNavigationItemData[];
22
- /** top navigation items */
23
- itemsTop?: HeaderNavigationItemData[];
24
- /** is menu expanded */
25
- expanded?: boolean;
26
- /** navigation component used for routing */
27
- navigationComponent?: FC<NavLinkComponentProps>;
28
- /** expand change handler */
29
- onExpandedChange(expanded: boolean): void;
30
- }
31
-
32
- export const SideNavigation: FC<SideNavigationProps> = ({
33
- className,
34
- expanded,
35
- id,
36
- items,
37
- itemsTop,
38
- navigationComponent = DefaultNavLinkComponent,
39
- onExpandedChange,
40
- }) => {
41
- return (
42
- <NavLinkContext.Provider value={navigationComponent}>
43
- <div
44
- className={classNames(
45
- Styles.sideNav,
46
- expanded ? Styles.sideNavExpanded : Styles.sideNavSlim,
47
- className
48
- )}
49
- id={id}
50
- data-cy="side-navigation"
51
- >
52
- {!!itemsTop?.length && (
53
- <Fragment>
54
- <div className={Styles.sideNavTop} data-cy="navigation-items-top">
55
- {itemsTop.map(item => (
56
- <SideNavigationItem key={item.id} expanded={expanded} {...item} />
57
- ))}
58
- </div>
59
- <div className={Styles.divider} />
60
- </Fragment>
61
- )}
62
- <div className={Styles.sideNavContent} data-cy="navigation-items">
63
- {items?.map(item => (
64
- <SideNavigationItem key={item.id} expanded={expanded} {...item} />
65
- ))}
66
- </div>
67
- <div className={Styles.sideNavBottom}>
68
- <SideNavigationOptionsToggle
69
- expanded={expanded}
70
- onExpandedChange={onExpandedChange}
71
- />
72
- </div>
73
- </div>
74
- </NavLinkContext.Provider>
75
- );
76
- };
77
-
78
- interface SideNavigationItemProps extends HeaderNavigationItemData {
79
- expanded?: boolean;
80
- }
81
-
82
- /** Side Navigation menu item */
83
- export const SideNavigationItem: FC<SideNavigationItemProps> = ({
84
- id,
85
- to,
86
- title,
87
- hint,
88
- counter,
89
- className,
90
- iconClassName,
91
- iconComponent: IconComponent,
92
- iconName,
93
- isActive,
94
- expanded,
95
- }) => {
96
- const NavigationComponent = useNavLink();
97
- const iconClass = classNames(Styles.navigationIcon, iconClassName);
98
-
99
- return withTooltip(
100
- <NavigationComponent
101
- data-cy={`navigation-item-${id}`}
102
- data-pendo={`navigation-item-${id}`}
103
- key={id}
104
- to={to}
105
- title={hint}
106
- className={classNames(Styles.navigationItem, className, {
107
- [Styles.navigationItemActive]: isActive === true,
108
- })}
109
- isActive={typeof isActive === 'function' ? isActive : undefined}
110
- activeClassName={Styles.navigationItemActive}
111
- >
112
- {IconComponent ? (
113
- <i className={iconClass}>
114
- <IconComponent />
115
- </i>
116
- ) : iconName ? (
117
- <Icon name={iconName} className={iconClass} />
118
- ) : (
119
- <i className={iconClass} />
120
- )}
121
-
122
- {!!expanded && <span className={Styles.navigationItemText}>{title}</span>}
123
- {!!counter && <CounterTag data={counter} className={Styles.navigationItemCounter} />}
124
- </NavigationComponent>,
125
- expanded ? undefined : title,
126
- 'r'
127
- );
128
- };
129
-
130
- /** Side Navigation options toggle */
131
- export const SideNavigationOptionsToggle: FC<{
132
- expanded?: boolean;
133
- onExpandedChange(expanded: boolean): void;
134
- }> = ({ expanded, onExpandedChange }) =>
135
- withTooltip(
136
- <div
137
- data-cy="navigation-left-options"
138
- data-pendo="navigation-left-options"
139
- className={classNames(Styles.optionsItem)}
140
- onClick={() => onExpandedChange(!expanded)}
141
- >
142
- <div className={Styles.optionsIcon}>
143
- <IconSideOptions expanded={expanded} />
144
- </div>
145
-
146
- {!!expanded && <span className={Styles.optionsItemText}>Collapse Menu</span>}
147
- </div>,
148
- expanded ? undefined : 'Expand Menu',
149
- 'r'
150
- );
151
-
152
- /** Side Navigation options popover */
153
- export const SideNavigationOptionsPopover: FC<
154
- PropsWithChildren<{
155
- expanded?: boolean;
156
- onExpandedChange(expanded: boolean): void;
157
- }>
158
- > = ({ children, expanded, onExpandedChange }) => {
159
- const [open, setOpen] = useState(false);
160
-
161
- const onExpand = () => {
162
- setOpen(false);
163
- onExpandedChange(true);
164
- };
165
- const onCollapse = () => {
166
- setOpen(false);
167
- onExpandedChange(false);
168
- };
169
-
170
- return (
171
- <Popover
172
- className="bg-neutral-30"
173
- trigger={children}
174
- direction="tr"
175
- onClickOutside={() => setOpen(false)}
176
- open={open}
177
- padding="s"
178
- width="xs"
179
- >
180
- <Eyebrow className="p-l-2">menu options</Eyebrow>
181
- <SideNavigationOptionsItem
182
- active={!expanded}
183
- icon={IconSideSlim}
184
- title="Slim"
185
- onClick={onCollapse}
186
- />
187
- <SideNavigationOptionsItem
188
- active={!!expanded}
189
- icon={IconSideExpanded}
190
- title="Expanded"
191
- onClick={onExpand}
192
- />
193
-
194
- <Divider className="m-x-half m-y-1" />
195
-
196
- <SideNavigationOptionsItem
197
- active={false}
198
- icon={expanded ? IconSideExpanded : IconSideSlim}
199
- title={expanded ? 'Expanded' : 'Slim'}
200
- />
201
- </Popover>
202
- );
203
- };
204
-
205
- const SideNavigationOptionsItem: FC<{
206
- active: boolean;
207
- icon: FC;
208
- title: string;
209
- onClick?: () => void;
210
- }> = ({ active, onClick, title, icon: IconComponent }) => (
211
- <Stack
212
- className={classNames(
213
- active ? Styles.optionsPopoverItemActive : Styles.optionsPopoverItemInactive,
214
- 'p-y-1 p-x-2',
215
- { [Styles.optionsPopoverItemClickable]: onClick && !active }
216
- )}
217
- alignItems="center"
218
- onClick={!active && onClick}
219
- >
220
- <IconComponent />
221
- <BodyText className="c-inherit m-l-1 flex-grow-1 flex-basis-0">{title}</BodyText>
222
- {active && <Icon name="check" />}
223
- </Stack>
224
- );