@servicetitan/navigation 13.0.0-canary.256.b43c6d7.0 → 13.0.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/counter-tag.d.ts +1 -1
- package/dist/components/counter-tag.d.ts.map +1 -1
- package/dist/components/counter-tag.js.map +1 -1
- package/dist/components/profile-dropdown/interface.d.ts +55 -0
- package/dist/components/profile-dropdown/interface.d.ts.map +1 -0
- package/dist/components/profile-dropdown/interface.js +3 -0
- package/dist/components/profile-dropdown/interface.js.map +1 -0
- package/dist/components/profile-dropdown/profile-dropdown-legacy.stories.d.ts +5 -1
- package/dist/components/profile-dropdown/profile-dropdown-legacy.stories.d.ts.map +1 -1
- package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts +5 -1
- package/dist/components/profile-dropdown/profile-dropdown-stacked.stories.d.ts.map +1 -1
- package/dist/components/profile-dropdown/profile-dropdown.d.ts +9 -79
- package/dist/components/profile-dropdown/profile-dropdown.d.ts.map +1 -1
- package/dist/components/profile-dropdown/profile-dropdown.js +17 -14
- package/dist/components/profile-dropdown/profile-dropdown.js.map +1 -1
- package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts +5 -1
- package/dist/components/profile-dropdown/profile-dropdown.stories.d.ts.map +1 -1
- package/dist/components/titan-layout/interface-internal.d.ts +12 -0
- package/dist/components/titan-layout/interface-internal.d.ts.map +1 -1
- package/dist/components/titan-layout/interface-internal.js.map +1 -1
- package/dist/components/titan-layout/interface.d.ts +60 -4
- package/dist/components/titan-layout/interface.d.ts.map +1 -1
- package/dist/components/titan-layout/interface.js.map +1 -1
- package/dist/components/titan-layout/layout-header-dark.d.ts.map +1 -1
- package/dist/components/titan-layout/layout-header-dark.js +24 -12
- package/dist/components/titan-layout/layout-header-dark.js.map +1 -1
- package/dist/components/titan-layout/layout-header-links-internal.d.ts +22 -3
- package/dist/components/titan-layout/layout-header-links-internal.d.ts.map +1 -1
- package/dist/components/titan-layout/layout-header-links-internal.js +15 -18
- package/dist/components/titan-layout/layout-header-links-internal.js.map +1 -1
- package/dist/components/titan-layout/layout-header-links.d.ts +2 -3
- package/dist/components/titan-layout/layout-header-links.d.ts.map +1 -1
- package/dist/components/titan-layout/layout-header-links.js +25 -5
- package/dist/components/titan-layout/layout-header-links.js.map +1 -1
- package/dist/components/titan-layout/layout-header.d.ts +2 -0
- package/dist/components/titan-layout/layout-header.d.ts.map +1 -1
- package/dist/components/titan-layout/layout-header.js +25 -16
- package/dist/components/titan-layout/layout-header.js.map +1 -1
- package/dist/components/titan-layout/layout-header.module.less +37 -1
- package/dist/components/titan-layout/layout-header.module.less.d.ts +3 -0
- package/dist/components/titan-layout/layout-profile.d.ts +8 -5
- package/dist/components/titan-layout/layout-profile.d.ts.map +1 -1
- package/dist/components/titan-layout/layout-profile.js +29 -21
- package/dist/components/titan-layout/layout-profile.js.map +1 -1
- package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts +48 -24
- package/dist/components/titan-layout/layout-sidebar-links-internal.d.ts.map +1 -1
- package/dist/components/titan-layout/layout-sidebar-links-internal.js +62 -51
- package/dist/components/titan-layout/layout-sidebar-links-internal.js.map +1 -1
- package/dist/components/titan-layout/layout-sidebar-links.d.ts +2 -2
- package/dist/components/titan-layout/layout-sidebar-links.d.ts.map +1 -1
- package/dist/components/titan-layout/layout-sidebar-links.js +27 -14
- package/dist/components/titan-layout/layout-sidebar-links.js.map +1 -1
- package/dist/components/titan-layout/layout-sidebar.d.ts +1 -1
- package/dist/components/titan-layout/layout-sidebar.d.ts.map +1 -1
- package/dist/components/titan-layout/layout-sidebar.js +81 -104
- package/dist/components/titan-layout/layout-sidebar.js.map +1 -1
- package/dist/components/titan-layout/layout-sidebar.module.less +74 -22
- package/dist/components/titan-layout/titan-layout-default.stories.d.ts +16 -0
- package/dist/components/titan-layout/titan-layout-default.stories.d.ts.map +1 -0
- package/dist/components/titan-layout/titan-layout-legacy.stories.d.ts +10 -0
- package/dist/components/titan-layout/titan-layout-legacy.stories.d.ts.map +1 -0
- package/dist/components/titan-layout/titan-layout-stacked.stories.d.ts +10 -0
- package/dist/components/titan-layout/titan-layout-stacked.stories.d.ts.map +1 -0
- package/dist/components/titan-layout/titan-layout.d.ts +28 -1
- package/dist/components/titan-layout/titan-layout.d.ts.map +1 -1
- package/dist/components/titan-layout/titan-layout.js +30 -11
- package/dist/components/titan-layout/titan-layout.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/test/data.d.ts +0 -22
- package/dist/test/data.d.ts.map +1 -1
- package/dist/test/data.js +0 -197
- package/dist/test/data.js.map +1 -1
- package/dist/test/titan-layout.d.ts +16 -0
- package/dist/test/titan-layout.d.ts.map +1 -0
- package/dist/test/titan-layout.js +21 -0
- package/dist/test/titan-layout.js.map +1 -0
- package/dist/utils/navigation.d.ts +1 -4
- package/dist/utils/navigation.d.ts.map +1 -1
- package/dist/utils/navigation.js.map +1 -1
- package/package.json +4 -4
- package/src/components/counter-tag.tsx +1 -1
- package/src/components/profile-dropdown/interface.ts +47 -0
- package/src/components/profile-dropdown/profile-dropdown-legacy.stories.tsx +3 -3
- package/src/components/profile-dropdown/profile-dropdown-stacked.stories.tsx +3 -3
- package/src/components/profile-dropdown/profile-dropdown.stories.tsx +39 -39
- package/src/components/profile-dropdown/profile-dropdown.tsx +37 -104
- package/src/components/titan-layout/interface-internal.ts +13 -0
- package/src/components/titan-layout/interface.ts +64 -7
- package/src/components/titan-layout/layout-header-dark.tsx +21 -5
- package/src/components/titan-layout/layout-header-links-internal.tsx +41 -54
- package/src/components/titan-layout/layout-header-links.tsx +64 -8
- package/src/components/titan-layout/layout-header.module.less +37 -1
- package/src/components/titan-layout/layout-header.module.less.d.ts +3 -0
- package/src/components/titan-layout/layout-header.tsx +26 -13
- package/src/components/titan-layout/layout-profile.tsx +51 -28
- package/src/components/titan-layout/layout-sidebar-links-internal.tsx +155 -102
- package/src/components/titan-layout/layout-sidebar-links.tsx +45 -12
- package/src/components/titan-layout/layout-sidebar.module.less +74 -22
- package/src/components/titan-layout/layout-sidebar.tsx +55 -80
- package/src/components/titan-layout/{titan-layout.stories.tsx → titan-layout-default.stories.tsx} +100 -84
- package/src/components/titan-layout/titan-layout-legacy.stories.tsx +24 -0
- package/src/components/titan-layout/titan-layout-stacked.stories.tsx +30 -0
- package/src/components/titan-layout/titan-layout.tsx +67 -12
- package/src/index.ts +0 -1
- package/src/test/data.tsx +0 -165
- package/src/test/titan-layout.tsx +34 -0
- package/src/utils/navigation.ts +1 -6
- package/dist/components/titan-layout/titan-layout.stories.d.ts +0 -29
- package/dist/components/titan-layout/titan-layout.stories.d.ts.map +0 -1
- package/dist/utils/navigation-legacy.d.ts +0 -88
- package/dist/utils/navigation-legacy.d.ts.map +0 -1
- package/dist/utils/navigation-legacy.js +0 -3
- package/dist/utils/navigation-legacy.js.map +0 -1
- package/src/utils/navigation-legacy.ts +0 -106
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { createElement as _createElement } from "react";
|
|
3
2
|
import { ButtonCompound, Icon, Menu } from '@servicetitan/anvil2';
|
|
4
3
|
import SvgMoreVert from '@servicetitan/anvil2/assets/icons/material/round/more_vert.svg';
|
|
5
4
|
import classNames from 'classnames';
|
|
6
5
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
6
|
+
import { getCounterTag } from '../../utils/side-nav';
|
|
7
7
|
import { useTitanLayoutContext } from './layout-context';
|
|
8
8
|
import { LayoutHeader } from './layout-header';
|
|
9
9
|
import { InternalLayoutHeaderNavigationLink } from './layout-header-links-internal';
|
|
@@ -21,7 +21,7 @@ var MinimizedState = /*#__PURE__*/ function(MinimizedState) {
|
|
|
21
21
|
MinimizedState[MinimizedState["Full"] = 2] = "Full";
|
|
22
22
|
return MinimizedState;
|
|
23
23
|
}(MinimizedState || {});
|
|
24
|
-
export const LayoutHeaderDark = ({ className, isMobile, navigationMainItems, navigationOverflowItems, hasNotifications,
|
|
24
|
+
export const LayoutHeaderDark = ({ className, isMobile, navigationMainItems, navigationOverflowItems, hasNotifications, logo, profile, right, rightText, rightClassName, center, centerClassName, hasBurger, onBurgerClick, ...rest })=>{
|
|
25
25
|
return center ? /*#__PURE__*/ _jsxs("div", {
|
|
26
26
|
className: classNames(Styles.headerStacked, className),
|
|
27
27
|
"data-cy": "header-navigation",
|
|
@@ -39,6 +39,7 @@ export const LayoutHeaderDark = ({ className, isMobile, navigationMainItems, nav
|
|
|
39
39
|
logo: logo,
|
|
40
40
|
profile: profile,
|
|
41
41
|
onBurgerClick: onBurgerClick,
|
|
42
|
+
hasBurger: hasBurger,
|
|
42
43
|
"data-cy": "header-navigation-top"
|
|
43
44
|
}),
|
|
44
45
|
!isMobile && !!(navigationMainItems === null || navigationMainItems === void 0 ? void 0 : navigationMainItems.length) && /*#__PURE__*/ _jsx(LayoutHeaderNav, {
|
|
@@ -63,6 +64,7 @@ export const LayoutHeaderDark = ({ className, isMobile, navigationMainItems, nav
|
|
|
63
64
|
logo: logo,
|
|
64
65
|
profile: profile,
|
|
65
66
|
onBurgerClick: onBurgerClick,
|
|
67
|
+
hasBurger: hasBurger,
|
|
66
68
|
...rest
|
|
67
69
|
});
|
|
68
70
|
};
|
|
@@ -112,12 +114,17 @@ const LayoutHeaderNav = ({ className, mainItems, overflowItems })=>{
|
|
|
112
114
|
/*#__PURE__*/ _jsx("div", {
|
|
113
115
|
ref: navigationRef,
|
|
114
116
|
className: classNames(Styles.headerNavigation),
|
|
115
|
-
children: mainItems === null || mainItems === void 0 ? void 0 : mainItems.map((item)=>withTooltip(/*#__PURE__*/
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
children: mainItems === null || mainItems === void 0 ? void 0 : mainItems.map((item)=>withTooltip(/*#__PURE__*/ _jsx(InternalLayoutHeaderNavigationLink, {
|
|
118
|
+
id: item.id,
|
|
119
|
+
to: item.to,
|
|
120
|
+
title: isMinimized ? undefined : item.title,
|
|
121
|
+
isActive: item.isActive,
|
|
122
|
+
icon: item.icon,
|
|
123
|
+
iconActive: item.iconActive,
|
|
124
|
+
tag: getCounterTag(item.counter, item.tag),
|
|
125
|
+
className: item.className,
|
|
119
126
|
navigationComponent: NavigationComponent
|
|
120
|
-
}), isMinimized ? item.title : undefined, {
|
|
127
|
+
}, item.id), isMinimized ? item.title : undefined, {
|
|
121
128
|
key: item.id
|
|
122
129
|
}))
|
|
123
130
|
}),
|
|
@@ -144,13 +151,18 @@ const LayoutHeaderNavOverflow = ({ items, navigationComponent })=>{
|
|
|
144
151
|
children: /*#__PURE__*/ _jsx("div", {
|
|
145
152
|
"data-cy": "navigation-overflow-content",
|
|
146
153
|
className: Styles.headerNavigationOverflow,
|
|
147
|
-
children: items.map((item)=>/*#__PURE__*/
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
154
|
+
children: items.map((item)=>/*#__PURE__*/ _jsx(InternalLayoutHeaderNavigationLink, {
|
|
155
|
+
id: item.id,
|
|
156
|
+
to: item.to,
|
|
157
|
+
title: item.title,
|
|
158
|
+
isActive: item.isActive,
|
|
159
|
+
icon: item.icon,
|
|
160
|
+
iconActive: item.iconActive,
|
|
161
|
+
tag: getCounterTag(item.counter, item.tag),
|
|
162
|
+
className: item.className,
|
|
151
163
|
navigationComponent: navigationComponent,
|
|
152
164
|
isOverflow: true
|
|
153
|
-
}))
|
|
165
|
+
}, item.id))
|
|
154
166
|
})
|
|
155
167
|
});
|
|
156
168
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/titan-layout/layout-header-dark.tsx"],"sourcesContent":["import { ButtonCompound, Icon, Menu, MenuProps } from '@servicetitan/anvil2';\nimport SvgMoreVert from '@servicetitan/anvil2/assets/icons/material/round/more_vert.svg';\nimport classNames from 'classnames';\nimport { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport { NavigationItemData } from '../../utils/navigation';\nimport { NavigationComponentProps } from './interface-internal';\nimport { useTitanLayoutContext } from './layout-context';\nimport { LayoutHeader, LayoutHeaderProps } from './layout-header';\nimport { InternalLayoutHeaderNavigationLink } from './layout-header-links-internal';\nimport * as Styles from './layout-header.module.less';\nimport { withTooltip } from './with-tooltip';\n\nfunction useForceUpdate() {\n const [, setTick] = useState(0);\n return useCallback(() => {\n setTick(tick => tick + 1);\n }, []);\n}\n\nenum MinimizedState {\n Calculating,\n Minimized,\n Full,\n}\n\ninterface LayoutHeaderStackedProps extends Omit<LayoutHeaderProps, 'variant'> {\n navigationMainItems?: NavigationItemData[];\n navigationOverflowItems?: NavigationItemData[];\n}\n\nexport const LayoutHeaderDark: FC<LayoutHeaderStackedProps> = ({\n className,\n isMobile,\n navigationMainItems,\n navigationOverflowItems,\n hasNotifications,\n onBurgerClick,\n logo,\n profile,\n right,\n rightText,\n rightClassName,\n center,\n centerClassName,\n ...rest\n}) => {\n return center ? (\n <div\n className={classNames(Styles.headerStacked, className)}\n data-cy=\"header-navigation\"\n {...rest}\n >\n <LayoutHeader\n variant=\"dark\"\n right={right}\n rightText={rightText}\n rightClassName={rightClassName}\n center={center}\n centerClassName={centerClassName}\n isMobile={isMobile}\n hasNotifications={hasNotifications}\n logo={logo}\n profile={profile}\n onBurgerClick={onBurgerClick}\n data-cy=\"header-navigation-top\"\n />\n\n {!isMobile && !!navigationMainItems?.length && (\n <LayoutHeaderNav\n className={Styles.headerStackedNav}\n mainItems={navigationMainItems}\n overflowItems={navigationOverflowItems}\n />\n )}\n </div>\n ) : (\n <LayoutHeader\n variant=\"dark\"\n className={classNames(className, !isMobile && Styles.headerDesktopNav)}\n right={right}\n rightText={rightText}\n rightClassName={rightClassName}\n center={\n isMobile ? undefined : (\n <LayoutHeaderNav\n mainItems={navigationMainItems}\n overflowItems={navigationOverflowItems}\n />\n )\n }\n centerClassName={centerClassName}\n isMobile={isMobile}\n hasNotifications={hasNotifications}\n logo={logo}\n profile={profile}\n onBurgerClick={onBurgerClick}\n {...rest}\n />\n );\n};\n\ninterface LayoutHeaderNavProps {\n className?: string;\n mainItems?: NavigationItemData[];\n overflowItems?: NavigationItemData[];\n}\nconst LayoutHeaderNav: FC<LayoutHeaderNavProps> = ({ className, mainItems, overflowItems }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const navigationRef = useRef<HTMLDivElement>(null);\n const forceUpdate = useForceUpdate();\n const [minimized, setMinimized] = useState(MinimizedState.Calculating);\n const { NavigationComponent } = useTitanLayoutContext();\n\n useEffect(() => {\n const handleResize = () => {\n setMinimized(MinimizedState.Calculating);\n forceUpdate();\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [forceUpdate]);\n\n const updateIsMinimized = () => {\n if (containerRef.current && navigationRef.current) {\n const widthGap = 16 + (overflowItems?.length ? 32 : 0);\n if (navigationRef.current.clientWidth + widthGap > containerRef.current.clientWidth) {\n setMinimized(MinimizedState.Minimized);\n } else if (minimized === MinimizedState.Calculating) {\n setMinimized(MinimizedState.Full);\n }\n }\n };\n\n useEffect(() => {\n updateIsMinimized();\n });\n\n useEffect(() => {\n setMinimized(MinimizedState.Calculating);\n forceUpdate();\n }, [forceUpdate]);\n\n const isMinimized = minimized === MinimizedState.Minimized;\n\n return (\n <div\n ref={containerRef}\n className={classNames(Styles.headerNavigationWrapper, className, {\n [Styles.calculating]: minimized === MinimizedState.Calculating,\n })}\n data-cy=\"navigation-items\"\n >\n <div ref={navigationRef} className={classNames(Styles.headerNavigation)}>\n {mainItems?.map(item =>\n withTooltip(\n <InternalLayoutHeaderNavigationLink\n {...item}\n label={isMinimized ? undefined : item.title}\n key={item.id}\n navigationComponent={NavigationComponent}\n />,\n isMinimized ? item.title : undefined,\n { key: item.id }\n )\n )}\n </div>\n {!!overflowItems?.length && (\n <LayoutHeaderNavOverflow\n items={overflowItems}\n navigationComponent={NavigationComponent}\n />\n )}\n </div>\n );\n};\n\nconst LayoutHeaderNavOverflowTrigger: MenuProps['trigger'] = props => (\n <ButtonCompound\n {...props}\n className={Styles.headerNavigationOverflowTrigger}\n data-cy=\"navigation-overflow-trigger\"\n >\n <Icon svg={SvgMoreVert} size=\"medium\" />\n </ButtonCompound>\n);\n\nconst LayoutHeaderNavOverflow: FC<\n {\n items: NavigationItemData[];\n } & NavigationComponentProps\n> = ({ items, navigationComponent }) => {\n return (\n <Menu trigger={LayoutHeaderNavOverflowTrigger} placement=\"bottom-end\">\n <div data-cy=\"navigation-overflow-content\" className={Styles.headerNavigationOverflow}>\n {items.map(item => (\n <InternalLayoutHeaderNavigationLink\n {...item}\n label={item.title}\n key={item.id}\n navigationComponent={navigationComponent}\n isOverflow\n />\n ))}\n </div>\n </Menu>\n );\n};\n"],"names":["ButtonCompound","Icon","Menu","SvgMoreVert","classNames","useCallback","useEffect","useRef","useState","useTitanLayoutContext","LayoutHeader","InternalLayoutHeaderNavigationLink","Styles","withTooltip","useForceUpdate","setTick","tick","MinimizedState","LayoutHeaderDark","className","isMobile","navigationMainItems","navigationOverflowItems","hasNotifications","onBurgerClick","logo","profile","right","rightText","rightClassName","center","centerClassName","rest","div","headerStacked","data-cy","variant","length","LayoutHeaderNav","headerStackedNav","mainItems","overflowItems","headerDesktopNav","undefined","containerRef","navigationRef","forceUpdate","minimized","setMinimized","NavigationComponent","handleResize","window","addEventListener","removeEventListener","updateIsMinimized","current","widthGap","clientWidth","isMinimized","ref","headerNavigationWrapper","calculating","headerNavigation","map","item","label","title","key","id","navigationComponent","LayoutHeaderNavOverflow","items","LayoutHeaderNavOverflowTrigger","props","headerNavigationOverflowTrigger","svg","size","trigger","placement","headerNavigationOverflow","isOverflow"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/titan-layout/layout-header-dark.tsx"],"sourcesContent":["import { ButtonCompound, Icon, Menu, MenuProps } from '@servicetitan/anvil2';\nimport SvgMoreVert from '@servicetitan/anvil2/assets/icons/material/round/more_vert.svg';\nimport classNames from 'classnames';\nimport { FC, useCallback, useEffect, useRef, useState } from 'react';\nimport { NavigationItemData } from '../../utils/navigation';\nimport { getCounterTag } from '../../utils/side-nav';\nimport { NavigationComponentProps } from './interface-internal';\nimport { useTitanLayoutContext } from './layout-context';\nimport { LayoutHeader, LayoutHeaderProps } from './layout-header';\nimport { InternalLayoutHeaderNavigationLink } from './layout-header-links-internal';\nimport * as Styles from './layout-header.module.less';\nimport { withTooltip } from './with-tooltip';\n\nfunction useForceUpdate() {\n const [, setTick] = useState(0);\n return useCallback(() => {\n setTick(tick => tick + 1);\n }, []);\n}\n\nenum MinimizedState {\n Calculating,\n Minimized,\n Full,\n}\n\ninterface LayoutHeaderStackedProps extends Omit<LayoutHeaderProps, 'variant'> {\n navigationMainItems?: NavigationItemData[];\n navigationOverflowItems?: NavigationItemData[];\n}\n\nexport const LayoutHeaderDark: FC<LayoutHeaderStackedProps> = ({\n className,\n isMobile,\n navigationMainItems,\n navigationOverflowItems,\n hasNotifications,\n logo,\n profile,\n right,\n rightText,\n rightClassName,\n center,\n centerClassName,\n hasBurger,\n onBurgerClick,\n ...rest\n}) => {\n return center ? (\n <div\n className={classNames(Styles.headerStacked, className)}\n data-cy=\"header-navigation\"\n {...rest}\n >\n <LayoutHeader\n variant=\"dark\"\n right={right}\n rightText={rightText}\n rightClassName={rightClassName}\n center={center}\n centerClassName={centerClassName}\n isMobile={isMobile}\n hasNotifications={hasNotifications}\n logo={logo}\n profile={profile}\n onBurgerClick={onBurgerClick}\n hasBurger={hasBurger}\n data-cy=\"header-navigation-top\"\n />\n\n {!isMobile && !!navigationMainItems?.length && (\n <LayoutHeaderNav\n className={Styles.headerStackedNav}\n mainItems={navigationMainItems}\n overflowItems={navigationOverflowItems}\n />\n )}\n </div>\n ) : (\n <LayoutHeader\n variant=\"dark\"\n className={classNames(className, !isMobile && Styles.headerDesktopNav)}\n right={right}\n rightText={rightText}\n rightClassName={rightClassName}\n center={\n isMobile ? undefined : (\n <LayoutHeaderNav\n mainItems={navigationMainItems}\n overflowItems={navigationOverflowItems}\n />\n )\n }\n centerClassName={centerClassName}\n isMobile={isMobile}\n hasNotifications={hasNotifications}\n logo={logo}\n profile={profile}\n onBurgerClick={onBurgerClick}\n hasBurger={hasBurger}\n {...rest}\n />\n );\n};\n\ninterface LayoutHeaderNavProps {\n className?: string;\n mainItems?: NavigationItemData[];\n overflowItems?: NavigationItemData[];\n}\nconst LayoutHeaderNav: FC<LayoutHeaderNavProps> = ({ className, mainItems, overflowItems }) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const navigationRef = useRef<HTMLDivElement>(null);\n const forceUpdate = useForceUpdate();\n const [minimized, setMinimized] = useState(MinimizedState.Calculating);\n const { NavigationComponent } = useTitanLayoutContext();\n\n useEffect(() => {\n const handleResize = () => {\n setMinimized(MinimizedState.Calculating);\n forceUpdate();\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [forceUpdate]);\n\n const updateIsMinimized = () => {\n if (containerRef.current && navigationRef.current) {\n const widthGap = 16 + (overflowItems?.length ? 32 : 0);\n if (navigationRef.current.clientWidth + widthGap > containerRef.current.clientWidth) {\n setMinimized(MinimizedState.Minimized);\n } else if (minimized === MinimizedState.Calculating) {\n setMinimized(MinimizedState.Full);\n }\n }\n };\n\n useEffect(() => {\n updateIsMinimized();\n });\n\n useEffect(() => {\n setMinimized(MinimizedState.Calculating);\n forceUpdate();\n }, [forceUpdate]);\n\n const isMinimized = minimized === MinimizedState.Minimized;\n\n return (\n <div\n ref={containerRef}\n className={classNames(Styles.headerNavigationWrapper, className, {\n [Styles.calculating]: minimized === MinimizedState.Calculating,\n })}\n data-cy=\"navigation-items\"\n >\n <div ref={navigationRef} className={classNames(Styles.headerNavigation)}>\n {mainItems?.map(item =>\n withTooltip(\n <InternalLayoutHeaderNavigationLink\n id={item.id}\n to={item.to}\n title={isMinimized ? undefined : item.title}\n isActive={item.isActive}\n icon={item.icon}\n iconActive={item.iconActive}\n tag={getCounterTag(item.counter, item.tag)}\n className={item.className}\n key={item.id}\n navigationComponent={NavigationComponent}\n />,\n isMinimized ? item.title : undefined,\n { key: item.id }\n )\n )}\n </div>\n {!!overflowItems?.length && (\n <LayoutHeaderNavOverflow\n items={overflowItems}\n navigationComponent={NavigationComponent}\n />\n )}\n </div>\n );\n};\n\nconst LayoutHeaderNavOverflowTrigger: MenuProps['trigger'] = props => (\n <ButtonCompound\n {...props}\n className={Styles.headerNavigationOverflowTrigger}\n data-cy=\"navigation-overflow-trigger\"\n >\n <Icon svg={SvgMoreVert} size=\"medium\" />\n </ButtonCompound>\n);\n\nconst LayoutHeaderNavOverflow: FC<\n {\n items: NavigationItemData[];\n } & NavigationComponentProps\n> = ({ items, navigationComponent }) => {\n return (\n <Menu trigger={LayoutHeaderNavOverflowTrigger} placement=\"bottom-end\">\n <div data-cy=\"navigation-overflow-content\" className={Styles.headerNavigationOverflow}>\n {items.map(item => (\n <InternalLayoutHeaderNavigationLink\n id={item.id}\n to={item.to}\n title={item.title}\n isActive={item.isActive}\n icon={item.icon}\n iconActive={item.iconActive}\n tag={getCounterTag(item.counter, item.tag)}\n className={item.className}\n key={item.id}\n navigationComponent={navigationComponent}\n isOverflow\n />\n ))}\n </div>\n </Menu>\n );\n};\n"],"names":["ButtonCompound","Icon","Menu","SvgMoreVert","classNames","useCallback","useEffect","useRef","useState","getCounterTag","useTitanLayoutContext","LayoutHeader","InternalLayoutHeaderNavigationLink","Styles","withTooltip","useForceUpdate","setTick","tick","MinimizedState","LayoutHeaderDark","className","isMobile","navigationMainItems","navigationOverflowItems","hasNotifications","logo","profile","right","rightText","rightClassName","center","centerClassName","hasBurger","onBurgerClick","rest","div","headerStacked","data-cy","variant","length","LayoutHeaderNav","headerStackedNav","mainItems","overflowItems","headerDesktopNav","undefined","containerRef","navigationRef","forceUpdate","minimized","setMinimized","NavigationComponent","handleResize","window","addEventListener","removeEventListener","updateIsMinimized","current","widthGap","clientWidth","isMinimized","ref","headerNavigationWrapper","calculating","headerNavigation","map","item","id","to","title","isActive","icon","iconActive","tag","counter","navigationComponent","key","LayoutHeaderNavOverflow","items","LayoutHeaderNavOverflowTrigger","props","headerNavigationOverflowTrigger","svg","size","trigger","placement","headerNavigationOverflow","isOverflow"],"mappings":"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"}
|
|
@@ -1,10 +1,29 @@
|
|
|
1
|
+
import { IconProps } from '@servicetitan/anvil2';
|
|
1
2
|
import { FC } from 'react';
|
|
2
|
-
import {
|
|
3
|
+
import { CounterTagData } from '../../utils/counter-tag';
|
|
3
4
|
import { NavigationComponentProps } from './interface-internal';
|
|
4
5
|
/** Navigation extra item with link */
|
|
5
|
-
export declare const InternalLayoutHeaderNavigationLink: FC<
|
|
6
|
+
export declare const InternalLayoutHeaderNavigationLink: FC<NavigationComponentProps & {
|
|
7
|
+
id: string;
|
|
8
|
+
to: string;
|
|
9
|
+
title: string | undefined;
|
|
10
|
+
isActive: boolean | ((pathname: string) => boolean) | undefined;
|
|
11
|
+
icon: IconProps['svg'] | undefined;
|
|
12
|
+
iconActive: IconProps['svg'] | undefined;
|
|
13
|
+
tag: CounterTagData | undefined;
|
|
14
|
+
className: string | undefined;
|
|
6
15
|
isOverflow?: boolean;
|
|
16
|
+
flashing?: boolean;
|
|
7
17
|
}>;
|
|
8
18
|
/** Navigation extra item with icon button */
|
|
9
|
-
export declare const InternalLayoutHeaderNavigationTrigger: FC<
|
|
19
|
+
export declare const InternalLayoutHeaderNavigationTrigger: FC<{
|
|
20
|
+
id: string;
|
|
21
|
+
title: string | undefined;
|
|
22
|
+
isActive: boolean | undefined;
|
|
23
|
+
icon: IconProps['svg'] | undefined;
|
|
24
|
+
iconActive: IconProps['svg'] | undefined;
|
|
25
|
+
tag: CounterTagData | undefined;
|
|
26
|
+
className: string | undefined;
|
|
27
|
+
flashing?: boolean;
|
|
28
|
+
}>;
|
|
10
29
|
//# sourceMappingURL=layout-header-links-internal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-header-links-internal.d.ts","sourceRoot":"","sources":["../../../src/components/titan-layout/layout-header-links-internal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layout-header-links-internal.d.ts","sourceRoot":"","sources":["../../../src/components/titan-layout/layout-header-links-internal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAQ,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAY,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAsChE,sCAAsC;AACtC,eAAO,MAAM,kCAAkC,EAAE,EAAE,CAC/C,wBAAwB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,OAAO,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAChE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IACnC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IACzC,GAAG,EAAE,cAAc,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,CA0CJ,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,qCAAqC,EAAE,EAAE,CAAC;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IACnC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IACzC,GAAG,EAAE,cAAc,GAAG,SAAS,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,CAyBA,CAAC"}
|
|
@@ -3,10 +3,9 @@ import { createElement as _createElement } from "react";
|
|
|
3
3
|
import { Icon } from '@servicetitan/anvil2';
|
|
4
4
|
import classNames from 'classnames';
|
|
5
5
|
import { Fragment } from 'react';
|
|
6
|
-
import { getCounterTag } from '../../utils/side-nav';
|
|
7
6
|
import { CounterTag } from '../counter-tag';
|
|
8
7
|
import * as Styles from './layout-header.module.less';
|
|
9
|
-
/** Content for navigation items */ const InternalHeaderNavigationItemContent = ({ counterClassName, icon, iconActive,
|
|
8
|
+
/** Content for navigation items */ const InternalHeaderNavigationItemContent = ({ counterClassName, icon, iconActive, title, tag })=>{
|
|
10
9
|
return /*#__PURE__*/ _jsxs(Fragment, {
|
|
11
10
|
children: [
|
|
12
11
|
!!icon && /*#__PURE__*/ _jsx(Icon, {
|
|
@@ -17,10 +16,10 @@ import * as Styles from './layout-header.module.less';
|
|
|
17
16
|
svg: iconActive,
|
|
18
17
|
className: classNames(Styles.navigationIcon, Styles.navigationIconActive)
|
|
19
18
|
}),
|
|
20
|
-
!!
|
|
21
|
-
className:
|
|
19
|
+
!!title && /*#__PURE__*/ _jsx("span", {
|
|
20
|
+
className: Styles.navigationItemLabel,
|
|
22
21
|
"data-cy": "nav-item-label",
|
|
23
|
-
children:
|
|
22
|
+
children: title
|
|
24
23
|
}),
|
|
25
24
|
!!tag && /*#__PURE__*/ _jsx(CounterTag, {
|
|
26
25
|
data: tag,
|
|
@@ -30,7 +29,7 @@ import * as Styles from './layout-header.module.less';
|
|
|
30
29
|
]
|
|
31
30
|
});
|
|
32
31
|
};
|
|
33
|
-
/** Navigation extra item with link */ export const InternalLayoutHeaderNavigationLink = ({ id, to,
|
|
32
|
+
/** Navigation extra item with link */ export const InternalLayoutHeaderNavigationLink = ({ id, to, title, isActive, icon, iconActive, tag, className, isOverflow, flashing, navigationComponent: NavigationComponent, ...rest })=>{
|
|
34
33
|
return /*#__PURE__*/ _createElement(NavigationComponent, {
|
|
35
34
|
"data-cy": `navigation-item-${id}`,
|
|
36
35
|
"data-pendo": `navigation-item-${id}`,
|
|
@@ -39,35 +38,33 @@ import * as Styles from './layout-header.module.less';
|
|
|
39
38
|
to: to,
|
|
40
39
|
className: classNames(isOverflow ? Styles.navigationLinkOverflow : Styles.navigationLink, className, {
|
|
41
40
|
[Styles.navigationItemActive]: isActive === true,
|
|
42
|
-
[Styles.navigationItemIconState]: !!icon && !!iconActive
|
|
41
|
+
[Styles.navigationItemIconState]: !!icon && !!iconActive,
|
|
42
|
+
[Styles.navigationItemFlashing]: flashing
|
|
43
43
|
}),
|
|
44
44
|
isActive: typeof isActive === 'function' ? isActive : undefined,
|
|
45
|
-
activeClassName: Styles.navigationItemActive
|
|
46
|
-
target: target
|
|
45
|
+
activeClassName: Styles.navigationItemActive
|
|
47
46
|
}, /*#__PURE__*/ _jsx(InternalHeaderNavigationItemContent, {
|
|
48
|
-
tag:
|
|
47
|
+
tag: tag,
|
|
49
48
|
icon: icon,
|
|
50
49
|
iconActive: iconActive,
|
|
51
|
-
|
|
52
|
-
labelClassName: labelClassName
|
|
50
|
+
title: title
|
|
53
51
|
}));
|
|
54
52
|
};
|
|
55
|
-
/** Navigation extra item with icon button */ export const InternalLayoutHeaderNavigationTrigger = ({ id, className,
|
|
53
|
+
/** Navigation extra item with icon button */ export const InternalLayoutHeaderNavigationTrigger = ({ id, className, flashing, icon, iconActive, isActive, tag, title, ...rest })=>{
|
|
56
54
|
return /*#__PURE__*/ _jsx("div", {
|
|
57
55
|
"data-cy": `navigation-trigger-${id}`,
|
|
58
56
|
"data-pendo": `navigation-trigger-${id}`,
|
|
59
57
|
...rest,
|
|
60
|
-
title: hint,
|
|
61
58
|
className: classNames(Styles.navigationLink, {
|
|
62
59
|
[Styles.navigationItemActive]: isActive === true,
|
|
63
|
-
[Styles.navigationItemIconState]: !!icon && !!iconActive
|
|
60
|
+
[Styles.navigationItemIconState]: !!icon && !!iconActive,
|
|
61
|
+
[Styles.navigationItemFlashing]: flashing
|
|
64
62
|
}, 'cursor-pointer', className),
|
|
65
63
|
children: /*#__PURE__*/ _jsx(InternalHeaderNavigationItemContent, {
|
|
66
|
-
tag:
|
|
64
|
+
tag: tag,
|
|
67
65
|
icon: icon,
|
|
68
66
|
iconActive: iconActive,
|
|
69
|
-
|
|
70
|
-
labelClassName: labelClassName
|
|
67
|
+
title: title
|
|
71
68
|
})
|
|
72
69
|
});
|
|
73
70
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/titan-layout/layout-header-links-internal.tsx"],"sourcesContent":["import { Icon, IconProps } from '@servicetitan/anvil2';\nimport classNames from 'classnames';\nimport { FC, Fragment } from 'react';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/components/titan-layout/layout-header-links-internal.tsx"],"sourcesContent":["import { Icon, IconProps } from '@servicetitan/anvil2';\nimport classNames from 'classnames';\nimport { FC, Fragment } from 'react';\nimport { CounterTagData } from '../../utils/counter-tag';\nimport { CounterTag, CounterTagProps } from '../counter-tag';\nimport { NavigationComponentProps } from './interface-internal';\nimport * as Styles from './layout-header.module.less';\n\n/** Content for navigation items */\nconst InternalHeaderNavigationItemContent: FC<{\n tag?: CounterTagProps;\n counterClassName?: string;\n icon: IconProps['svg'] | undefined;\n iconActive?: IconProps['svg'];\n title?: string;\n}> = ({ counterClassName, icon, iconActive, title, tag }) => {\n return (\n <Fragment>\n {!!icon && <Icon svg={icon} className={Styles.navigationIcon} />}\n {!!iconActive && (\n <Icon\n svg={iconActive}\n className={classNames(Styles.navigationIcon, Styles.navigationIconActive)}\n />\n )}\n\n {!!title && (\n <span className={Styles.navigationItemLabel} data-cy=\"nav-item-label\">\n {title}\n </span>\n )}\n\n {!!tag && (\n <CounterTag\n data={tag}\n className={classNames(Styles.navigationItemCounter, counterClassName)}\n longClassName={Styles.navigationItemCounterLong}\n />\n )}\n </Fragment>\n );\n};\n\n/** Navigation extra item with link */\nexport const InternalLayoutHeaderNavigationLink: FC<\n NavigationComponentProps & {\n id: string;\n to: string;\n title: string | undefined;\n isActive: boolean | ((pathname: string) => boolean) | undefined;\n icon: IconProps['svg'] | undefined;\n iconActive: IconProps['svg'] | undefined;\n tag: CounterTagData | undefined;\n className: string | undefined;\n\n isOverflow?: boolean;\n flashing?: boolean;\n }\n> = ({\n id,\n to,\n title,\n isActive,\n icon,\n iconActive,\n tag,\n className,\n isOverflow,\n flashing,\n navigationComponent: NavigationComponent,\n ...rest\n}) => {\n return (\n <NavigationComponent\n data-cy={`navigation-item-${id}`}\n data-pendo={`navigation-item-${id}`}\n {...rest}\n key={id}\n to={to}\n className={classNames(\n isOverflow ? Styles.navigationLinkOverflow : Styles.navigationLink,\n className,\n {\n [Styles.navigationItemActive]: isActive === true,\n [Styles.navigationItemIconState]: !!icon && !!iconActive,\n [Styles.navigationItemFlashing]: flashing,\n }\n )}\n isActive={typeof isActive === 'function' ? isActive : undefined}\n activeClassName={Styles.navigationItemActive}\n >\n <InternalHeaderNavigationItemContent\n tag={tag}\n icon={icon}\n iconActive={iconActive}\n title={title}\n />\n </NavigationComponent>\n );\n};\n\n/** Navigation extra item with icon button */\nexport const InternalLayoutHeaderNavigationTrigger: FC<{\n id: string;\n title: string | undefined;\n isActive: boolean | undefined;\n icon: IconProps['svg'] | undefined;\n iconActive: IconProps['svg'] | undefined;\n tag: CounterTagData | undefined;\n className: string | undefined;\n\n flashing?: boolean;\n}> = ({ id, className, flashing, icon, iconActive, isActive, tag, title, ...rest }) => {\n return (\n <div\n data-cy={`navigation-trigger-${id}`}\n data-pendo={`navigation-trigger-${id}`}\n {...rest}\n className={classNames(\n Styles.navigationLink,\n {\n [Styles.navigationItemActive]: isActive === true,\n [Styles.navigationItemIconState]: !!icon && !!iconActive,\n [Styles.navigationItemFlashing]: flashing,\n },\n 'cursor-pointer',\n className\n )}\n >\n <InternalHeaderNavigationItemContent\n tag={tag}\n icon={icon}\n iconActive={iconActive}\n title={title}\n />\n </div>\n );\n};\n"],"names":["Icon","classNames","Fragment","CounterTag","Styles","InternalHeaderNavigationItemContent","counterClassName","icon","iconActive","title","tag","svg","className","navigationIcon","navigationIconActive","span","navigationItemLabel","data-cy","data","navigationItemCounter","longClassName","navigationItemCounterLong","InternalLayoutHeaderNavigationLink","id","to","isActive","isOverflow","flashing","navigationComponent","NavigationComponent","rest","data-pendo","key","navigationLinkOverflow","navigationLink","navigationItemActive","navigationItemIconState","navigationItemFlashing","undefined","activeClassName","InternalLayoutHeaderNavigationTrigger","div"],"mappings":";;AAAA,SAASA,IAAI,QAAmB,uBAAuB;AACvD,OAAOC,gBAAgB,aAAa;AACpC,SAAaC,QAAQ,QAAQ,QAAQ;AAErC,SAASC,UAAU,QAAyB,iBAAiB;AAE7D,YAAYC,YAAY,8BAA8B;AAEtD,iCAAiC,GACjC,MAAMC,sCAMD,CAAC,EAAEC,gBAAgB,EAAEC,IAAI,EAAEC,UAAU,EAAEC,KAAK,EAAEC,GAAG,EAAE;IACpD,qBACI,MAACR;;YACI,CAAC,CAACK,sBAAQ,KAACP;gBAAKW,KAAKJ;gBAAMK,WAAWR,OAAOS,cAAc;;YAC3D,CAAC,CAACL,4BACC,KAACR;gBACGW,KAAKH;gBACLI,WAAWX,WAAWG,OAAOS,cAAc,EAAET,OAAOU,oBAAoB;;YAI/E,CAAC,CAACL,uBACC,KAACM;gBAAKH,WAAWR,OAAOY,mBAAmB;gBAAEC,WAAQ;0BAChDR;;YAIR,CAAC,CAACC,qBACC,KAACP;gBACGe,MAAMR;gBACNE,WAAWX,WAAWG,OAAOe,qBAAqB,EAAEb;gBACpDc,eAAehB,OAAOiB,yBAAyB;;;;AAKnE;AAEA,oCAAoC,GACpC,OAAO,MAAMC,qCAcT,CAAC,EACDC,EAAE,EACFC,EAAE,EACFf,KAAK,EACLgB,QAAQ,EACRlB,IAAI,EACJC,UAAU,EACVE,GAAG,EACHE,SAAS,EACTc,UAAU,EACVC,QAAQ,EACRC,qBAAqBC,mBAAmB,EACxC,GAAGC,MACN;IACG,qBACI,eAACD;QACGZ,WAAS,CAAC,gBAAgB,EAAEM,IAAI;QAChCQ,cAAY,CAAC,gBAAgB,EAAER,IAAI;QAClC,GAAGO,IAAI;QACRE,KAAKT;QACLC,IAAIA;QACJZ,WAAWX,WACPyB,aAAatB,OAAO6B,sBAAsB,GAAG7B,OAAO8B,cAAc,EAClEtB,WACA;YACI,CAACR,OAAO+B,oBAAoB,CAAC,EAAEV,aAAa;YAC5C,CAACrB,OAAOgC,uBAAuB,CAAC,EAAE,CAAC,CAAC7B,QAAQ,CAAC,CAACC;YAC9C,CAACJ,OAAOiC,sBAAsB,CAAC,EAAEV;QACrC;QAEJF,UAAU,OAAOA,aAAa,aAAaA,WAAWa;QACtDC,iBAAiBnC,OAAO+B,oBAAoB;qBAE5C,KAAC9B;QACGK,KAAKA;QACLH,MAAMA;QACNC,YAAYA;QACZC,OAAOA;;AAIvB,EAAE;AAEF,2CAA2C,GAC3C,OAAO,MAAM+B,wCAUR,CAAC,EAAEjB,EAAE,EAAEX,SAAS,EAAEe,QAAQ,EAAEpB,IAAI,EAAEC,UAAU,EAAEiB,QAAQ,EAAEf,GAAG,EAAED,KAAK,EAAE,GAAGqB,MAAM;IAC9E,qBACI,KAACW;QACGxB,WAAS,CAAC,mBAAmB,EAAEM,IAAI;QACnCQ,cAAY,CAAC,mBAAmB,EAAER,IAAI;QACrC,GAAGO,IAAI;QACRlB,WAAWX,WACPG,OAAO8B,cAAc,EACrB;YACI,CAAC9B,OAAO+B,oBAAoB,CAAC,EAAEV,aAAa;YAC5C,CAACrB,OAAOgC,uBAAuB,CAAC,EAAE,CAAC,CAAC7B,QAAQ,CAAC,CAACC;YAC9C,CAACJ,OAAOiC,sBAAsB,CAAC,EAAEV;QACrC,GACA,kBACAf;kBAGJ,cAAA,KAACP;YACGK,KAAKA;YACLH,MAAMA;YACNC,YAAYA;YACZC,OAAOA;;;AAIvB,EAAE"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
1
|
import { TitanLayoutLinkProps, TitanLayoutTriggerProps } from './interface';
|
|
3
2
|
/** Navigation extra item with link */
|
|
4
|
-
export declare
|
|
3
|
+
export declare function LayoutHeaderNavigationLink({ id, to, title, isActive, icon, iconActive, counter, tag, className, tooltip, extra, side, wrapper, ...rest }: TitanLayoutLinkProps): import("react/jsx-runtime").JSX.Element;
|
|
5
4
|
/** Navigation extra item with icon button */
|
|
6
|
-
export declare
|
|
5
|
+
export declare function LayoutHeaderNavigationTrigger({ id, title, isActive, icon, iconActive, counter, tag, className, tooltip, extra, side, wrapper, ...rest }: TitanLayoutTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
7
6
|
//# sourceMappingURL=layout-header-links.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-header-links.d.ts","sourceRoot":"","sources":["../../../src/components/titan-layout/layout-header-links.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layout-header-links.d.ts","sourceRoot":"","sources":["../../../src/components/titan-layout/layout-header-links.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAQ5E,sCAAsC;AACtC,wBAAgB,0BAA0B,CAAC,EACvC,EAAE,EACF,EAAE,EACF,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,OAAO,EACP,GAAG,EACH,SAAS,EAET,OAAO,EACP,KAAK,EACL,IAAI,EACJ,OAAO,EACP,GAAG,IAAI,EACV,EAAE,oBAAoB,2CAoBtB;AAED,6CAA6C;AAC7C,wBAAgB,6BAA6B,CAAC,EAC1C,EAAE,EACF,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,OAAO,EACP,GAAG,EACH,SAAS,EAET,OAAO,EACP,KAAK,EACL,IAAI,EACJ,OAAO,EACP,GAAG,IAAI,EACV,EAAE,uBAAuB,2CAiBzB"}
|
|
@@ -1,18 +1,38 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { getCounterTag } from '../../utils/side-nav';
|
|
2
3
|
import { useTitanLayoutContext } from './layout-context';
|
|
3
4
|
import { InternalLayoutHeaderNavigationLink, InternalLayoutHeaderNavigationTrigger } from './layout-header-links-internal';
|
|
4
5
|
import { withTooltip } from './with-tooltip';
|
|
5
|
-
/** Navigation extra item with link */ export
|
|
6
|
+
/** Navigation extra item with link */ export function LayoutHeaderNavigationLink({ id, to, title, isActive, icon, iconActive, counter, tag, className, tooltip, extra, side, wrapper, ...rest }) {
|
|
6
7
|
const { NavigationComponent } = useTitanLayoutContext();
|
|
8
|
+
const { showTitle, flashing } = extra !== null && extra !== void 0 ? extra : {};
|
|
7
9
|
return withTooltip(/*#__PURE__*/ _jsx(InternalLayoutHeaderNavigationLink, {
|
|
10
|
+
id: id,
|
|
11
|
+
to: to,
|
|
12
|
+
title: showTitle ? title : undefined,
|
|
13
|
+
isActive: isActive,
|
|
14
|
+
icon: icon,
|
|
15
|
+
iconActive: iconActive,
|
|
16
|
+
tag: getCounterTag(counter, tag),
|
|
17
|
+
className: className,
|
|
8
18
|
...rest,
|
|
19
|
+
flashing: flashing,
|
|
9
20
|
navigationComponent: NavigationComponent
|
|
10
21
|
}), tooltip);
|
|
11
|
-
}
|
|
12
|
-
/** Navigation extra item with icon button */ export
|
|
22
|
+
}
|
|
23
|
+
/** Navigation extra item with icon button */ export function LayoutHeaderNavigationTrigger({ id, title, isActive, icon, iconActive, counter, tag, className, tooltip, extra, side, wrapper, ...rest }) {
|
|
24
|
+
const { showTitle, flashing } = extra !== null && extra !== void 0 ? extra : {};
|
|
13
25
|
return withTooltip(/*#__PURE__*/ _jsx(InternalLayoutHeaderNavigationTrigger, {
|
|
14
|
-
|
|
26
|
+
id: id,
|
|
27
|
+
title: showTitle ? title : undefined,
|
|
28
|
+
isActive: isActive,
|
|
29
|
+
icon: icon,
|
|
30
|
+
iconActive: iconActive,
|
|
31
|
+
tag: getCounterTag(counter, tag),
|
|
32
|
+
className: className,
|
|
33
|
+
...rest,
|
|
34
|
+
flashing: flashing
|
|
15
35
|
}), tooltip);
|
|
16
|
-
}
|
|
36
|
+
}
|
|
17
37
|
|
|
18
38
|
//# sourceMappingURL=layout-header-links.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/titan-layout/layout-header-links.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../src/components/titan-layout/layout-header-links.tsx"],"sourcesContent":["import { getCounterTag } from '../../utils/side-nav';\nimport { TitanLayoutLinkProps, TitanLayoutTriggerProps } from './interface';\nimport { useTitanLayoutContext } from './layout-context';\nimport {\n InternalLayoutHeaderNavigationLink,\n InternalLayoutHeaderNavigationTrigger,\n} from './layout-header-links-internal';\nimport { withTooltip } from './with-tooltip';\n\n/** Navigation extra item with link */\nexport function LayoutHeaderNavigationLink({\n id,\n to,\n title,\n isActive,\n icon,\n iconActive,\n counter,\n tag,\n className,\n\n tooltip,\n extra,\n side,\n wrapper,\n ...rest\n}: TitanLayoutLinkProps) {\n const { NavigationComponent } = useTitanLayoutContext();\n const { showTitle, flashing } = extra ?? {};\n\n return withTooltip(\n <InternalLayoutHeaderNavigationLink\n id={id}\n to={to}\n title={showTitle ? title : undefined}\n isActive={isActive}\n icon={icon}\n iconActive={iconActive}\n tag={getCounterTag(counter, tag)}\n className={className}\n {...rest}\n flashing={flashing}\n navigationComponent={NavigationComponent}\n />,\n tooltip\n );\n}\n\n/** Navigation extra item with icon button */\nexport function LayoutHeaderNavigationTrigger({\n id,\n title,\n isActive,\n icon,\n iconActive,\n counter,\n tag,\n className,\n\n tooltip,\n extra,\n side,\n wrapper,\n ...rest\n}: TitanLayoutTriggerProps) {\n const { showTitle, flashing } = extra ?? {};\n\n return withTooltip(\n <InternalLayoutHeaderNavigationTrigger\n id={id}\n title={showTitle ? title : undefined}\n isActive={isActive}\n icon={icon}\n iconActive={iconActive}\n tag={getCounterTag(counter, tag)}\n className={className}\n {...rest}\n flashing={flashing}\n />,\n tooltip\n );\n}\n"],"names":["getCounterTag","useTitanLayoutContext","InternalLayoutHeaderNavigationLink","InternalLayoutHeaderNavigationTrigger","withTooltip","LayoutHeaderNavigationLink","id","to","title","isActive","icon","iconActive","counter","tag","className","tooltip","extra","side","wrapper","rest","NavigationComponent","showTitle","flashing","undefined","navigationComponent","LayoutHeaderNavigationTrigger"],"mappings":";AAAA,SAASA,aAAa,QAAQ,uBAAuB;AAErD,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,SACIC,kCAAkC,EAClCC,qCAAqC,QAClC,iCAAiC;AACxC,SAASC,WAAW,QAAQ,iBAAiB;AAE7C,oCAAoC,GACpC,OAAO,SAASC,2BAA2B,EACvCC,EAAE,EACFC,EAAE,EACFC,KAAK,EACLC,QAAQ,EACRC,IAAI,EACJC,UAAU,EACVC,OAAO,EACPC,GAAG,EACHC,SAAS,EAETC,OAAO,EACPC,KAAK,EACLC,IAAI,EACJC,OAAO,EACP,GAAGC,MACgB;IACnB,MAAM,EAAEC,mBAAmB,EAAE,GAAGnB;IAChC,MAAM,EAAEoB,SAAS,EAAEC,QAAQ,EAAE,GAAGN,kBAAAA,mBAAAA,QAAS,CAAC;IAE1C,OAAOZ,0BACH,KAACF;QACGI,IAAIA;QACJC,IAAIA;QACJC,OAAOa,YAAYb,QAAQe;QAC3Bd,UAAUA;QACVC,MAAMA;QACNC,YAAYA;QACZE,KAAKb,cAAcY,SAASC;QAC5BC,WAAWA;QACV,GAAGK,IAAI;QACRG,UAAUA;QACVE,qBAAqBJ;QAEzBL;AAER;AAEA,2CAA2C,GAC3C,OAAO,SAASU,8BAA8B,EAC1CnB,EAAE,EACFE,KAAK,EACLC,QAAQ,EACRC,IAAI,EACJC,UAAU,EACVC,OAAO,EACPC,GAAG,EACHC,SAAS,EAETC,OAAO,EACPC,KAAK,EACLC,IAAI,EACJC,OAAO,EACP,GAAGC,MACmB;IACtB,MAAM,EAAEE,SAAS,EAAEC,QAAQ,EAAE,GAAGN,kBAAAA,mBAAAA,QAAS,CAAC;IAE1C,OAAOZ,0BACH,KAACD;QACGG,IAAIA;QACJE,OAAOa,YAAYb,QAAQe;QAC3Bd,UAAUA;QACVC,MAAMA;QACNC,YAAYA;QACZE,KAAKb,cAAcY,SAASC;QAC5BC,WAAWA;QACV,GAAGK,IAAI;QACRG,UAAUA;QAEdP;AAER"}
|
|
@@ -12,6 +12,8 @@ export type LayoutHeaderProps = Omit<ComponentPropsWithoutRef<'div'>, 'children'
|
|
|
12
12
|
isMobile: boolean;
|
|
13
13
|
variant: 'light' | 'dark';
|
|
14
14
|
hasNotifications: boolean;
|
|
15
|
+
hasBurger: boolean;
|
|
16
|
+
burgerTooltip?: string;
|
|
15
17
|
onBurgerClick?: (e: MouseEvent<never>) => void;
|
|
16
18
|
};
|
|
17
19
|
export declare const LayoutHeader: FC<LayoutHeaderProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-header.d.ts","sourceRoot":"","sources":["../../../src/components/titan-layout/layout-header.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI1F,OAAO,EAAc,oBAAoB,EAAgB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"layout-header.d.ts","sourceRoot":"","sources":["../../../src/components/titan-layout/layout-header.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI1F,OAAO,EAAc,oBAAoB,EAAgB,MAAM,eAAe,CAAC;AAG/E,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,GAAG;IAChF,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAgF9C,CAAC"}
|
|
@@ -5,7 +5,21 @@ import { LayoutPlacementContext } from './layout-context';
|
|
|
5
5
|
import { LayoutHeaderNavigationTrigger } from './layout-header-links';
|
|
6
6
|
import * as Styles from './layout-header.module.less';
|
|
7
7
|
import { LayoutLogo, isLogoCustom } from './layout-logo';
|
|
8
|
-
|
|
8
|
+
import { withTooltip } from './with-tooltip';
|
|
9
|
+
export const LayoutHeader = ({ className, right, rightText, rightClassName, center, centerClassName, isMobile, hasNotifications, logo, profile, variant, hasBurger, burgerTooltip, onBurgerClick, ...rest })=>{
|
|
10
|
+
const burgerElement = hasBurger && /*#__PURE__*/ _jsx("div", {
|
|
11
|
+
className: Styles.burger,
|
|
12
|
+
children: /*#__PURE__*/ _jsx(LayoutHeaderNavigationTrigger, {
|
|
13
|
+
id: "burger",
|
|
14
|
+
title: "",
|
|
15
|
+
icon: SvgBurgerMenu,
|
|
16
|
+
iconActive: undefined,
|
|
17
|
+
onClick: onBurgerClick,
|
|
18
|
+
tag: {
|
|
19
|
+
value: hasNotifications
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
});
|
|
9
23
|
return /*#__PURE__*/ _jsx(LayoutPlacementContext.Provider, {
|
|
10
24
|
value: "top",
|
|
11
25
|
children: /*#__PURE__*/ _jsxs("div", {
|
|
@@ -13,21 +27,16 @@ export const LayoutHeader = ({ className, right, rightText, rightClassName, cent
|
|
|
13
27
|
"data-cy": "header-navigation",
|
|
14
28
|
...rest,
|
|
15
29
|
children: [
|
|
16
|
-
|
|
17
|
-
className: Styles.
|
|
18
|
-
children:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
})
|
|
28
|
-
}),
|
|
29
|
-
/*#__PURE__*/ _jsx(LayoutLogo, {
|
|
30
|
-
...logo
|
|
30
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
31
|
+
className: Styles.heTopLeft,
|
|
32
|
+
children: [
|
|
33
|
+
burgerElement && (burgerTooltip ? withTooltip(burgerElement, burgerTooltip, {
|
|
34
|
+
placement: 'bottom-end'
|
|
35
|
+
}) : burgerElement),
|
|
36
|
+
/*#__PURE__*/ _jsx(LayoutLogo, {
|
|
37
|
+
...logo
|
|
38
|
+
})
|
|
39
|
+
]
|
|
31
40
|
}),
|
|
32
41
|
/*#__PURE__*/ _jsx("div", {
|
|
33
42
|
className: classNames(Styles.heTopCenter, 'd-f align-items-center justify-content-center', centerClassName),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/titan-layout/layout-header.tsx"],"sourcesContent":["import SvgBurgerMenu from '@servicetitan/anvil2/assets/icons/material/round/menu.svg';\nimport classNames from 'classnames';\nimport { ComponentPropsWithoutRef, FC, MouseEvent, ReactElement, ReactNode } from 'react';\nimport { LayoutPlacementContext } from './layout-context';\nimport { LayoutHeaderNavigationTrigger } from './layout-header-links';\nimport * as Styles from './layout-header.module.less';\nimport { LayoutLogo, TitanLayoutLogoProps, isLogoCustom } from './layout-logo';\n\nexport type LayoutHeaderProps = Omit<ComponentPropsWithoutRef<'div'>, 'children'> & {\n right?: ReactNode;\n rightText?: string;\n rightClassName?: string;\n\n id?: string;\n\n center?: ReactElement;\n centerClassName?: string;\n\n logo?: TitanLayoutLogoProps;\n profile?: ReactElement;\n\n isMobile: boolean;\n variant: 'light' | 'dark';\n hasNotifications: boolean;\n onBurgerClick?: (e: MouseEvent<never>) => void;\n};\n\nexport const LayoutHeader: FC<LayoutHeaderProps> = ({\n className,\n right,\n rightText,\n rightClassName,\n center,\n centerClassName,\n isMobile,\n hasNotifications,\n logo,\n profile,\n variant,\n onBurgerClick,\n ...rest\n}) => {\n return (\n <LayoutPlacementContext.Provider value=\"top\">\n <div\n className={classNames(\n Styles.header,\n variant === 'light' ? Styles.headerLight : Styles.headerDark,\n isMobile ? Styles.headerMobile : Styles.headerDesktop,\n isLogoCustom(logo, isMobile) && Styles.headerLogoCustom,\n className\n )}\n data-cy=\"header-navigation\"\n {...rest}\n >\n
|
|
1
|
+
{"version":3,"sources":["../../../src/components/titan-layout/layout-header.tsx"],"sourcesContent":["import SvgBurgerMenu from '@servicetitan/anvil2/assets/icons/material/round/menu.svg';\nimport classNames from 'classnames';\nimport { ComponentPropsWithoutRef, FC, MouseEvent, ReactElement, ReactNode } from 'react';\nimport { LayoutPlacementContext } from './layout-context';\nimport { LayoutHeaderNavigationTrigger } from './layout-header-links';\nimport * as Styles from './layout-header.module.less';\nimport { LayoutLogo, TitanLayoutLogoProps, isLogoCustom } from './layout-logo';\nimport { withTooltip } from './with-tooltip';\n\nexport type LayoutHeaderProps = Omit<ComponentPropsWithoutRef<'div'>, 'children'> & {\n right?: ReactNode;\n rightText?: string;\n rightClassName?: string;\n\n id?: string;\n\n center?: ReactElement;\n centerClassName?: string;\n\n logo?: TitanLayoutLogoProps;\n profile?: ReactElement;\n\n isMobile: boolean;\n variant: 'light' | 'dark';\n hasNotifications: boolean;\n hasBurger: boolean;\n burgerTooltip?: string;\n onBurgerClick?: (e: MouseEvent<never>) => void;\n};\n\nexport const LayoutHeader: FC<LayoutHeaderProps> = ({\n className,\n right,\n rightText,\n rightClassName,\n center,\n centerClassName,\n isMobile,\n hasNotifications,\n logo,\n profile,\n variant,\n hasBurger,\n burgerTooltip,\n onBurgerClick,\n ...rest\n}) => {\n const burgerElement = hasBurger && (\n <div className={Styles.burger}>\n <LayoutHeaderNavigationTrigger\n id=\"burger\"\n title=\"\"\n icon={SvgBurgerMenu}\n iconActive={undefined}\n onClick={onBurgerClick}\n tag={{ value: hasNotifications }}\n />\n </div>\n );\n\n return (\n <LayoutPlacementContext.Provider value=\"top\">\n <div\n className={classNames(\n Styles.header,\n variant === 'light' ? Styles.headerLight : Styles.headerDark,\n isMobile ? Styles.headerMobile : Styles.headerDesktop,\n isLogoCustom(logo, isMobile) && Styles.headerLogoCustom,\n className\n )}\n data-cy=\"header-navigation\"\n {...rest}\n >\n <div className={Styles.heTopLeft}>\n {burgerElement &&\n (burgerTooltip\n ? withTooltip(burgerElement, burgerTooltip, { placement: 'bottom-end' })\n : burgerElement)}\n <LayoutLogo {...logo} />\n </div>\n\n <div\n className={classNames(\n Styles.heTopCenter,\n 'd-f align-items-center justify-content-center',\n centerClassName\n )}\n data-cy=\"navigation-center\"\n >\n {center}\n </div>\n <div\n className={classNames(\n 'd-f flex-row justify-content-end align-items-center',\n Styles.heTopRight,\n rightClassName\n )}\n data-cy=\"navigation-right\"\n >\n {!!rightText && (\n <div className={Styles.heTopRightText} data-cy=\"navigation-right-text\">\n {rightText}\n </div>\n )}\n {right}\n {profile}\n </div>\n </div>\n </LayoutPlacementContext.Provider>\n );\n};\n"],"names":["SvgBurgerMenu","classNames","LayoutPlacementContext","LayoutHeaderNavigationTrigger","Styles","LayoutLogo","isLogoCustom","withTooltip","LayoutHeader","className","right","rightText","rightClassName","center","centerClassName","isMobile","hasNotifications","logo","profile","variant","hasBurger","burgerTooltip","onBurgerClick","rest","burgerElement","div","burger","id","title","icon","iconActive","undefined","onClick","tag","value","Provider","header","headerLight","headerDark","headerMobile","headerDesktop","headerLogoCustom","data-cy","heTopLeft","placement","heTopCenter","heTopRight","heTopRightText"],"mappings":";AAAA,OAAOA,mBAAmB,4DAA4D;AACtF,OAAOC,gBAAgB,aAAa;AAEpC,SAASC,sBAAsB,QAAQ,mBAAmB;AAC1D,SAASC,6BAA6B,QAAQ,wBAAwB;AACtE,YAAYC,YAAY,8BAA8B;AACtD,SAASC,UAAU,EAAwBC,YAAY,QAAQ,gBAAgB;AAC/E,SAASC,WAAW,QAAQ,iBAAiB;AAuB7C,OAAO,MAAMC,eAAsC,CAAC,EAChDC,SAAS,EACTC,KAAK,EACLC,SAAS,EACTC,cAAc,EACdC,MAAM,EACNC,eAAe,EACfC,QAAQ,EACRC,gBAAgB,EAChBC,IAAI,EACJC,OAAO,EACPC,OAAO,EACPC,SAAS,EACTC,aAAa,EACbC,aAAa,EACb,GAAGC,MACN;IACG,MAAMC,gBAAgBJ,2BAClB,KAACK;QAAIhB,WAAWL,OAAOsB,MAAM;kBACzB,cAAA,KAACvB;YACGwB,IAAG;YACHC,OAAM;YACNC,MAAM7B;YACN8B,YAAYC;YACZC,SAASV;YACTW,KAAK;gBAAEC,OAAOlB;YAAiB;;;IAK3C,qBACI,KAACd,uBAAuBiC,QAAQ;QAACD,OAAM;kBACnC,cAAA,MAACT;YACGhB,WAAWR,WACPG,OAAOgC,MAAM,EACbjB,YAAY,UAAUf,OAAOiC,WAAW,GAAGjC,OAAOkC,UAAU,EAC5DvB,WAAWX,OAAOmC,YAAY,GAAGnC,OAAOoC,aAAa,EACrDlC,aAAaW,MAAMF,aAAaX,OAAOqC,gBAAgB,EACvDhC;YAEJiC,WAAQ;YACP,GAAGnB,IAAI;;8BAER,MAACE;oBAAIhB,WAAWL,OAAOuC,SAAS;;wBAC3BnB,iBACIH,CAAAA,gBACKd,YAAYiB,eAAeH,eAAe;4BAAEuB,WAAW;wBAAa,KACpEpB,aAAY;sCACtB,KAACnB;4BAAY,GAAGY,IAAI;;;;8BAGxB,KAACQ;oBACGhB,WAAWR,WACPG,OAAOyC,WAAW,EAClB,iDACA/B;oBAEJ4B,WAAQ;8BAEP7B;;8BAEL,MAACY;oBACGhB,WAAWR,WACP,uDACAG,OAAO0C,UAAU,EACjBlC;oBAEJ8B,WAAQ;;wBAEP,CAAC,CAAC/B,2BACC,KAACc;4BAAIhB,WAAWL,OAAO2C,cAAc;4BAAEL,WAAQ;sCAC1C/B;;wBAGRD;wBACAQ;;;;;;AAKrB,EAAE"}
|
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
/* stylelint-disable no-duplicate-selectors */
|
|
3
3
|
@import (reference) '@servicetitan/tokens/core/tokens.less';
|
|
4
4
|
|
|
5
|
+
@keyframes ExtraPulseAnimation {
|
|
6
|
+
0% {
|
|
7
|
+
opacity: 0.7;
|
|
8
|
+
}
|
|
9
|
+
50% {
|
|
10
|
+
opacity: 0.5;
|
|
11
|
+
}
|
|
12
|
+
100% {
|
|
13
|
+
opacity: 0;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
5
17
|
@size-links-tiny: 24px;
|
|
6
18
|
@bg-light: @color-white;
|
|
7
19
|
@bg-dark: @color-neutral-300;
|
|
@@ -36,6 +48,11 @@
|
|
|
36
48
|
overflow-y: hidden;
|
|
37
49
|
}
|
|
38
50
|
|
|
51
|
+
.he-top-left {
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: row;
|
|
54
|
+
}
|
|
55
|
+
|
|
39
56
|
.he-top-center {
|
|
40
57
|
overflow: hidden;
|
|
41
58
|
}
|
|
@@ -146,7 +163,7 @@
|
|
|
146
163
|
grid-template-columns: repeat(3, 1fr);
|
|
147
164
|
grid-template-rows: 48px;
|
|
148
165
|
|
|
149
|
-
.
|
|
166
|
+
.he-top-left,
|
|
150
167
|
.he-top-center,
|
|
151
168
|
.he-top-right {
|
|
152
169
|
grid-column: span 1;
|
|
@@ -352,6 +369,25 @@
|
|
|
352
369
|
}
|
|
353
370
|
}
|
|
354
371
|
|
|
372
|
+
.he-top-right .navigation-item-flashing {
|
|
373
|
+
&::before {
|
|
374
|
+
content: '';
|
|
375
|
+
position: absolute;
|
|
376
|
+
animation-name: ExtraPulseAnimation;
|
|
377
|
+
will-change: opacity;
|
|
378
|
+
background-color: var(--color-neutral-60, @color-neutral-60);
|
|
379
|
+
animation-iteration-count: infinite;
|
|
380
|
+
animation-duration: 500ms;
|
|
381
|
+
animation-direction: alternate;
|
|
382
|
+
border-radius: 12px;
|
|
383
|
+
inset: 0;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
&.navigation-item-active::before {
|
|
387
|
+
background-color: var(--color-blue-200, @color-blue-200);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
355
391
|
// styles specific to main nav links
|
|
356
392
|
.header-navigation .navigation-link {
|
|
357
393
|
font-family: @base-font-family;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export const __esModule: true;
|
|
2
2
|
export const burger: string;
|
|
3
3
|
export const calculating: string;
|
|
4
|
+
export const extraPulseAnimation: string;
|
|
4
5
|
export const heTopCenter: string;
|
|
6
|
+
export const heTopLeft: string;
|
|
5
7
|
export const heTopRight: string;
|
|
6
8
|
export const heTopRightText: string;
|
|
7
9
|
export const header: string;
|
|
@@ -29,6 +31,7 @@ export const navigationIconActive: string;
|
|
|
29
31
|
export const navigationItemActive: string;
|
|
30
32
|
export const navigationItemCounter: string;
|
|
31
33
|
export const navigationItemCounterLong: string;
|
|
34
|
+
export const navigationItemFlashing: string;
|
|
32
35
|
export const navigationItemIconState: string;
|
|
33
36
|
export const navigationItemLabel: string;
|
|
34
37
|
export const navigationLink: string;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
|
-
import { ProfileDropdownLinkProps, ProfileDropdownProps, ProfileDropdownSectionProps } from '../profile-dropdown/
|
|
3
|
-
export type { ProfileDropdownProps, ProfileDropdownSectionProps, ProfileDropdownLinkProps, } from '../profile-dropdown/
|
|
4
|
-
|
|
2
|
+
import { ProfileDropdownLinkProps, ProfileDropdownProps, ProfileDropdownSectionProps } from '../profile-dropdown/interface';
|
|
3
|
+
export type { ProfileDropdownProps, ProfileDropdownSectionProps, ProfileDropdownLinkProps, } from '../profile-dropdown/interface';
|
|
4
|
+
declare function ProfileDropdownComponent(props: ProfileDropdownProps): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare function ProfileDropdownSection(props: ProfileDropdownSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
declare function ProfileDropdownLink(props: ProfileDropdownLinkProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare const ProfileDropdown: typeof ProfileDropdownComponent & {
|
|
5
8
|
Divider: FC;
|
|
6
|
-
Link:
|
|
7
|
-
Section:
|
|
9
|
+
Link: typeof ProfileDropdownLink;
|
|
10
|
+
Section: typeof ProfileDropdownSection;
|
|
8
11
|
};
|
|
9
12
|
//# sourceMappingURL=layout-profile.d.ts.map
|