@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.
- package/dist/components/header-navigation/header-navigation-content.d.ts.map +1 -1
- package/dist/components/header-navigation/header-navigation-content.js +3 -3
- package/dist/components/header-navigation/header-navigation-content.js.map +1 -1
- package/dist/components/header-navigation/header-navigation-extra.stories.d.ts +3 -3
- package/dist/components/header-navigation/header-navigation-extra.stories.d.ts.map +1 -1
- package/dist/components/header-navigation/header-navigation-extra.stories.js +8 -22
- package/dist/components/header-navigation/header-navigation-extra.stories.js.map +1 -1
- package/dist/components/header-navigation/header-navigation-links.d.ts +3 -30
- package/dist/components/header-navigation/header-navigation-links.d.ts.map +1 -1
- package/dist/components/header-navigation/header-navigation-links.js +8 -5
- package/dist/components/header-navigation/header-navigation-links.js.map +1 -1
- package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts +1 -0
- package/dist/components/header-navigation/header-navigation-stacked.stories.d.ts.map +1 -1
- package/dist/components/header-navigation/header-navigation-stacked.stories.js +8 -26
- package/dist/components/header-navigation/header-navigation-stacked.stories.js.map +1 -1
- package/dist/components/header-navigation/header-navigation.d.ts +1 -28
- package/dist/components/header-navigation/header-navigation.d.ts.map +1 -1
- package/dist/components/header-navigation/header-navigation.js +5 -8
- package/dist/components/header-navigation/header-navigation.js.map +1 -1
- package/dist/components/header-navigation/header-navigation.module.less +13 -70
- package/dist/components/header-navigation/header-navigation.stories.d.ts +1 -0
- package/dist/components/header-navigation/header-navigation.stories.d.ts.map +1 -1
- package/dist/components/header-navigation/header-navigation.stories.js +9 -27
- package/dist/components/header-navigation/header-navigation.stories.js.map +1 -1
- package/dist/components/header-navigation/index.d.ts +0 -1
- package/dist/components/header-navigation/index.d.ts.map +1 -1
- package/dist/components/header-navigation/index.js +0 -1
- package/dist/components/header-navigation/index.js.map +1 -1
- package/dist/components/layout.stories.d.ts +1 -0
- package/dist/components/layout.stories.d.ts.map +1 -1
- package/dist/components/layout.stories.js +4 -2
- package/dist/components/layout.stories.js.map +1 -1
- package/dist/components/left-navigation/header-navigation-tiny-links.d.ts +16 -0
- package/dist/components/left-navigation/header-navigation-tiny-links.d.ts.map +1 -0
- package/dist/components/left-navigation/header-navigation-tiny-links.js +43 -0
- package/dist/components/left-navigation/header-navigation-tiny-links.js.map +1 -0
- package/dist/components/left-navigation/header-navigation-tiny.d.ts +23 -0
- package/dist/components/left-navigation/header-navigation-tiny.d.ts.map +1 -0
- package/dist/components/left-navigation/header-navigation-tiny.js +7 -0
- package/dist/components/left-navigation/header-navigation-tiny.js.map +1 -0
- package/dist/components/left-navigation/header-navigation-tiny.module.less +109 -0
- package/dist/components/{header-navigation → left-navigation}/header-navigation-tiny.stories.d.ts +2 -2
- package/dist/components/left-navigation/header-navigation-tiny.stories.d.ts.map +1 -0
- package/dist/components/left-navigation/header-navigation-tiny.stories.js +30 -0
- package/dist/components/left-navigation/header-navigation-tiny.stories.js.map +1 -0
- package/dist/components/left-navigation/index.d.ts +3 -0
- package/dist/components/left-navigation/index.d.ts.map +1 -0
- package/dist/components/left-navigation/index.js +3 -0
- package/dist/components/left-navigation/index.js.map +1 -0
- package/dist/components/{side-navigation → left-navigation}/side-navigation.d.ts +1 -12
- package/dist/components/left-navigation/side-navigation.d.ts.map +1 -0
- package/dist/components/left-navigation/side-navigation.js +23 -0
- package/dist/components/left-navigation/side-navigation.js.map +1 -0
- package/dist/components/{side-navigation → left-navigation}/side-navigation.module.less +28 -22
- package/dist/components/left-navigation/side-navigation.stories.d.ts +10 -0
- package/dist/components/left-navigation/side-navigation.stories.d.ts.map +1 -0
- package/dist/components/left-navigation/side-navigation.stories.js +31 -0
- package/dist/components/left-navigation/side-navigation.stories.js.map +1 -0
- package/dist/components/links.d.ts +5 -0
- package/dist/components/links.d.ts.map +1 -0
- package/dist/components/links.js +14 -0
- package/dist/components/links.js.map +1 -0
- package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts +2 -8
- package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts.map +1 -1
- package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.js +5 -43
- package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.js.map +1 -1
- package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts +9 -0
- package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.d.ts.map +1 -0
- package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.js +13 -0
- package/dist/components/profile-dropdown/profile-dropdown-tiny.stories.js.map +1 -0
- package/dist/components/profile-dropdown/profile-dropdown.d.ts +2 -1
- package/dist/components/profile-dropdown/profile-dropdown.d.ts.map +1 -1
- package/dist/components/profile-dropdown/profile-dropdown.js +16 -7
- package/dist/components/profile-dropdown/profile-dropdown.js.map +1 -1
- package/dist/components/profile-dropdown/profile-dropdown.module.less +7 -1
- package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts +9 -8
- package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts.map +1 -1
- package/dist/components/profile-dropdown/profile-dropdown.stories.js +39 -39
- package/dist/components/profile-dropdown/profile-dropdown.stories.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/test/data-stories.module.less +8 -0
- package/dist/test/data.stories.d.ts +26 -0
- package/dist/test/data.stories.d.ts.map +1 -0
- package/dist/test/data.stories.js +151 -0
- package/dist/test/data.stories.js.map +1 -0
- package/dist/utils/navigation-context.d.ts +2 -2
- package/dist/utils/navigation-context.d.ts.map +1 -1
- package/dist/utils/navigation-context.js +18 -5
- package/dist/utils/navigation-context.js.map +1 -1
- package/dist/utils/navigation.d.ts +47 -0
- package/dist/utils/navigation.d.ts.map +1 -1
- package/package.json +11 -11
- package/src/components/header-navigation/header-navigation-content.tsx +3 -3
- package/src/components/header-navigation/header-navigation-extra.stories.tsx +29 -38
- package/src/components/header-navigation/header-navigation-links.tsx +19 -41
- package/src/components/header-navigation/header-navigation-stacked.stories.tsx +18 -70
- package/src/components/header-navigation/header-navigation.module.less +13 -70
- package/src/components/header-navigation/header-navigation.module.less.d.ts +0 -1
- package/src/components/header-navigation/header-navigation.stories.tsx +20 -71
- package/src/components/header-navigation/header-navigation.tsx +6 -82
- package/src/components/header-navigation/index.ts +0 -1
- package/src/components/layout.stories.tsx +4 -2
- package/src/components/left-navigation/header-navigation-tiny-links.tsx +110 -0
- package/src/components/left-navigation/header-navigation-tiny.module.less +109 -0
- package/src/components/left-navigation/header-navigation-tiny.module.less.d.ts +14 -0
- package/src/components/{header-navigation → left-navigation}/header-navigation-tiny.stories.tsx +39 -46
- package/src/components/left-navigation/header-navigation-tiny.tsx +65 -0
- package/src/components/left-navigation/index.ts +2 -0
- package/src/components/{side-navigation → left-navigation}/side-navigation.module.less +28 -22
- package/src/components/{side-navigation → left-navigation}/side-navigation.module.less.d.ts +3 -3
- package/src/components/left-navigation/side-navigation.stories.tsx +46 -0
- package/src/components/left-navigation/side-navigation.tsx +171 -0
- package/src/components/links.tsx +31 -0
- package/src/components/profile-dropdown/profile-dropdown-stacked.stories.tsx +5 -170
- package/src/components/profile-dropdown/profile-dropdown-tiny.stories.tsx +15 -0
- package/src/components/profile-dropdown/profile-dropdown.module.less +7 -1
- package/src/components/profile-dropdown/profile-dropdown.module.less.d.ts +1 -0
- package/src/components/profile-dropdown/profile-dropdown.stories.tsx +106 -129
- package/src/components/profile-dropdown/profile-dropdown.tsx +35 -8
- package/src/index.ts +2 -1
- package/src/test/data-stories.module.less +8 -0
- package/src/test/data-stories.module.less.d.ts +3 -0
- package/src/test/data.stories.tsx +223 -0
- package/src/utils/navigation-context.tsx +10 -10
- package/src/utils/navigation.ts +54 -0
- package/dist/components/header-navigation/header-navigation-tiny.stories.d.ts.map +0 -1
- package/dist/components/header-navigation/header-navigation-tiny.stories.js +0 -25
- package/dist/components/header-navigation/header-navigation-tiny.stories.js.map +0 -1
- package/dist/components/side-navigation/icons.d.ts +0 -7
- package/dist/components/side-navigation/icons.d.ts.map +0 -1
- package/dist/components/side-navigation/icons.js +0 -5
- package/dist/components/side-navigation/icons.js.map +0 -1
- package/dist/components/side-navigation/index.d.ts +0 -2
- package/dist/components/side-navigation/index.d.ts.map +0 -1
- package/dist/components/side-navigation/index.js +0 -2
- package/dist/components/side-navigation/index.js.map +0 -1
- package/dist/components/side-navigation/side-navigation.d.ts.map +0 -1
- package/dist/components/side-navigation/side-navigation.js +0 -37
- package/dist/components/side-navigation/side-navigation.js.map +0 -1
- package/dist/components/side-navigation/side-navigation.stories.d.ts +0 -10
- package/dist/components/side-navigation/side-navigation.stories.d.ts.map +0 -1
- package/dist/components/side-navigation/side-navigation.stories.js +0 -52
- package/dist/components/side-navigation/side-navigation.stories.js.map +0 -1
- package/src/components/side-navigation/icons.tsx +0 -74
- package/src/components/side-navigation/index.ts +0 -1
- package/src/components/side-navigation/side-navigation.stories.tsx +0 -95
- 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
|
-
);
|