@veracity/vui 2.7.0 → 2.8.0-rc.1

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 (153) hide show
  1. package/dist/cjs/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  2. package/dist/cjs/breadcrumbs/breadcrumbs.js +7 -3
  3. package/dist/cjs/breadcrumbs/breadcrumbs.types.d.ts +0 -3
  4. package/dist/cjs/breadcrumbs/breadcrumbs.types.d.ts.map +1 -1
  5. package/dist/cjs/breadcrumbs/breadcrumbsItem.d.ts.map +1 -1
  6. package/dist/cjs/breadcrumbs/breadcrumbsItem.js +2 -6
  7. package/dist/cjs/breadcrumbs/breadcrumbsSeparator.d.ts.map +1 -1
  8. package/dist/cjs/breadcrumbs/breadcrumbsSeparator.js +4 -1
  9. package/dist/cjs/breadcrumbs/theme.d.ts +66 -4
  10. package/dist/cjs/breadcrumbs/theme.d.ts.map +1 -1
  11. package/dist/cjs/breadcrumbs/theme.js +61 -5
  12. package/dist/cjs/footer/footer.d.ts.map +1 -1
  13. package/dist/cjs/footer/footer.js +21 -4
  14. package/dist/cjs/footer/footer.types.d.ts +3 -0
  15. package/dist/cjs/footer/footer.types.d.ts.map +1 -1
  16. package/dist/cjs/header/header.d.ts +2 -0
  17. package/dist/cjs/header/header.d.ts.map +1 -1
  18. package/dist/cjs/header/header.js +2 -0
  19. package/dist/cjs/header/header.types.d.ts +14 -0
  20. package/dist/cjs/header/header.types.d.ts.map +1 -1
  21. package/dist/cjs/header/headerAccount.d.ts +1 -0
  22. package/dist/cjs/header/headerAccount.d.ts.map +1 -1
  23. package/dist/cjs/header/headerAccount.js +4 -9
  24. package/dist/cjs/header/headerAccountUserInfo.js +2 -2
  25. package/dist/cjs/header/headerLinkItem.js +2 -2
  26. package/dist/cjs/header/headerMainLinks.d.ts.map +1 -1
  27. package/dist/cjs/header/headerMainLinks.js +0 -1
  28. package/dist/cjs/header/headerMobileContent.d.ts.map +1 -1
  29. package/dist/cjs/header/headerMobileContent.js +2 -1
  30. package/dist/cjs/header/headerServices.d.ts.map +1 -1
  31. package/dist/cjs/header/headerServices.js +5 -4
  32. package/dist/cjs/header/headerSupport.d.ts +5 -0
  33. package/dist/cjs/header/headerSupport.d.ts.map +1 -0
  34. package/dist/cjs/header/headerSupport.js +45 -0
  35. package/dist/cjs/header/loggedInHeader.d.ts.map +1 -1
  36. package/dist/cjs/header/loggedInHeader.js +51 -8
  37. package/dist/cjs/icons/baseIcons/cul/culDatasetAlt.d.ts +4 -0
  38. package/dist/cjs/icons/baseIcons/cul/culDatasetAlt.d.ts.map +1 -0
  39. package/dist/cjs/icons/baseIcons/cul/culDatasetAlt.js +8 -0
  40. package/dist/cjs/icons/baseIcons/icons.d.ts +1 -0
  41. package/dist/cjs/icons/baseIcons/icons.d.ts.map +1 -1
  42. package/dist/cjs/icons/baseIcons/icons.js +10 -8
  43. package/dist/cjs/icons/baseIcons/types.d.ts +1 -1
  44. package/dist/cjs/icons/baseIcons/types.d.ts.map +1 -1
  45. package/dist/cjs/theme/components.d.ts +109 -35
  46. package/dist/cjs/theme/components.d.ts.map +1 -1
  47. package/dist/cjs/theme/defaultTheme.d.ts +109 -35
  48. package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
  49. package/dist/cjs/tree/theme.d.ts +43 -33
  50. package/dist/cjs/tree/theme.d.ts.map +1 -1
  51. package/dist/cjs/tree/theme.js +48 -43
  52. package/dist/cjs/tree/tree.d.ts.map +1 -1
  53. package/dist/cjs/tree/tree.js +4 -2
  54. package/dist/cjs/tree/tree.types.d.ts +10 -3
  55. package/dist/cjs/tree/tree.types.d.ts.map +1 -1
  56. package/dist/cjs/tree/treeItem.d.ts +2 -2
  57. package/dist/cjs/tree/treeItem.d.ts.map +1 -1
  58. package/dist/cjs/tree/treeItem.js +64 -43
  59. package/dist/cjs/tutorial/tutorialCard.d.ts.map +1 -1
  60. package/dist/cjs/tutorial/tutorialCard.js +3 -2
  61. package/dist/cjs/utils/styles.d.ts +1 -2
  62. package/dist/cjs/utils/styles.d.ts.map +1 -1
  63. package/dist/cjs/utils/styles.js +14 -6
  64. package/dist/esm/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  65. package/dist/esm/breadcrumbs/breadcrumbs.js +7 -3
  66. package/dist/esm/breadcrumbs/breadcrumbs.types.d.ts +0 -3
  67. package/dist/esm/breadcrumbs/breadcrumbs.types.d.ts.map +1 -1
  68. package/dist/esm/breadcrumbs/breadcrumbsItem.d.ts.map +1 -1
  69. package/dist/esm/breadcrumbs/breadcrumbsItem.js +2 -6
  70. package/dist/esm/breadcrumbs/breadcrumbsSeparator.d.ts.map +1 -1
  71. package/dist/esm/breadcrumbs/breadcrumbsSeparator.js +6 -1
  72. package/dist/esm/breadcrumbs/theme.d.ts +66 -4
  73. package/dist/esm/breadcrumbs/theme.d.ts.map +1 -1
  74. package/dist/esm/breadcrumbs/theme.js +61 -5
  75. package/dist/esm/footer/footer.d.ts.map +1 -1
  76. package/dist/esm/footer/footer.js +21 -4
  77. package/dist/esm/footer/footer.types.d.ts +3 -0
  78. package/dist/esm/footer/footer.types.d.ts.map +1 -1
  79. package/dist/esm/header/header.d.ts +2 -0
  80. package/dist/esm/header/header.d.ts.map +1 -1
  81. package/dist/esm/header/header.js +2 -0
  82. package/dist/esm/header/header.types.d.ts +14 -0
  83. package/dist/esm/header/header.types.d.ts.map +1 -1
  84. package/dist/esm/header/headerAccount.d.ts +1 -0
  85. package/dist/esm/header/headerAccount.d.ts.map +1 -1
  86. package/dist/esm/header/headerAccount.js +5 -10
  87. package/dist/esm/header/headerAccountUserInfo.js +2 -2
  88. package/dist/esm/header/headerLinkItem.js +2 -2
  89. package/dist/esm/header/headerMainLinks.d.ts.map +1 -1
  90. package/dist/esm/header/headerMainLinks.js +0 -1
  91. package/dist/esm/header/headerMobileContent.d.ts.map +1 -1
  92. package/dist/esm/header/headerMobileContent.js +3 -2
  93. package/dist/esm/header/headerServices.d.ts.map +1 -1
  94. package/dist/esm/header/headerServices.js +5 -4
  95. package/dist/esm/header/headerSupport.d.ts +5 -0
  96. package/dist/esm/header/headerSupport.d.ts.map +1 -0
  97. package/dist/esm/header/headerSupport.js +27 -0
  98. package/dist/esm/header/loggedInHeader.d.ts.map +1 -1
  99. package/dist/esm/header/loggedInHeader.js +46 -9
  100. package/dist/esm/icons/baseIcons/cul/culDatasetAlt.d.ts +4 -0
  101. package/dist/esm/icons/baseIcons/cul/culDatasetAlt.d.ts.map +1 -0
  102. package/dist/esm/icons/baseIcons/cul/culDatasetAlt.js +6 -0
  103. package/dist/esm/icons/baseIcons/icons.d.ts +1 -0
  104. package/dist/esm/icons/baseIcons/icons.d.ts.map +1 -1
  105. package/dist/esm/icons/baseIcons/icons.js +1 -0
  106. package/dist/esm/icons/baseIcons/types.d.ts +1 -1
  107. package/dist/esm/icons/baseIcons/types.d.ts.map +1 -1
  108. package/dist/esm/theme/components.d.ts +109 -35
  109. package/dist/esm/theme/components.d.ts.map +1 -1
  110. package/dist/esm/theme/defaultTheme.d.ts +109 -35
  111. package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
  112. package/dist/esm/tree/theme.d.ts +43 -33
  113. package/dist/esm/tree/theme.d.ts.map +1 -1
  114. package/dist/esm/tree/theme.js +48 -43
  115. package/dist/esm/tree/tree.d.ts.map +1 -1
  116. package/dist/esm/tree/tree.js +4 -2
  117. package/dist/esm/tree/tree.types.d.ts +10 -3
  118. package/dist/esm/tree/tree.types.d.ts.map +1 -1
  119. package/dist/esm/tree/treeItem.d.ts +2 -2
  120. package/dist/esm/tree/treeItem.d.ts.map +1 -1
  121. package/dist/esm/tree/treeItem.js +63 -45
  122. package/dist/esm/tutorial/tutorialCard.d.ts.map +1 -1
  123. package/dist/esm/tutorial/tutorialCard.js +3 -2
  124. package/dist/esm/utils/styles.d.ts +1 -2
  125. package/dist/esm/utils/styles.d.ts.map +1 -1
  126. package/dist/esm/utils/styles.js +12 -4
  127. package/package.json +1 -1
  128. package/src/breadcrumbs/breadcrumbs.tsx +14 -3
  129. package/src/breadcrumbs/breadcrumbs.types.ts +0 -3
  130. package/src/breadcrumbs/breadcrumbsItem.tsx +2 -7
  131. package/src/breadcrumbs/breadcrumbsSeparator.tsx +11 -5
  132. package/src/breadcrumbs/theme.ts +61 -5
  133. package/src/footer/footer.tsx +71 -4
  134. package/src/footer/footer.types.ts +3 -0
  135. package/src/header/header.tsx +3 -0
  136. package/src/header/header.types.ts +15 -0
  137. package/src/header/headerAccount.tsx +6 -14
  138. package/src/header/headerAccountUserInfo.tsx +2 -2
  139. package/src/header/headerLinkItem.tsx +2 -2
  140. package/src/header/headerMainLinks.tsx +0 -1
  141. package/src/header/headerMobileContent.tsx +4 -3
  142. package/src/header/headerServices.tsx +12 -4
  143. package/src/header/headerSupport.tsx +76 -0
  144. package/src/header/loggedInHeader.tsx +130 -13
  145. package/src/icons/baseIcons/cul/culDatasetAlt.ts +9 -0
  146. package/src/icons/baseIcons/icons.ts +1 -0
  147. package/src/icons/baseIcons/types.ts +1 -0
  148. package/src/tree/theme.ts +50 -49
  149. package/src/tree/tree.tsx +10 -16
  150. package/src/tree/tree.types.ts +10 -3
  151. package/src/tree/treeItem.tsx +89 -61
  152. package/src/tutorial/tutorialCard.tsx +4 -2
  153. package/src/utils/styles.ts +15 -6
@@ -19,6 +19,7 @@ import HeaderNotifications from './headerNotifications'
19
19
  import HeaderServices from './headerServices'
20
20
  import HeaderServicesMessage from './headerServicesMessage'
21
21
  import HeaderSignIn from './headerSignIn'
22
+ import HeaderSupport from './headerSupport'
22
23
 
23
24
  /*@formatter:off*/
24
25
  export const HeaderBase = styled.headerBox`
@@ -77,6 +78,7 @@ export const Header = vui<'header', HeaderProps>((props, ref) => {
77
78
  }) as VuiComponent<'header', HeaderProps> & {
78
79
  Account: typeof HeaderAccount
79
80
  AccountUserInfo: typeof HeaderAccountUserInfo
81
+ Support: typeof HeaderSupport
80
82
  ApplicationName: typeof HeaderApplicationName
81
83
  Content: typeof HeaderContent
82
84
  CreateAccount: typeof HeaderCreateAccount
@@ -94,6 +96,7 @@ export const Header = vui<'header', HeaderProps>((props, ref) => {
94
96
 
95
97
  Header.Account = HeaderAccount
96
98
  Header.AccountUserInfo = HeaderAccountUserInfo
99
+ Header.Support = HeaderSupport
97
100
  Header.ApplicationName = HeaderApplicationName
98
101
  Header.Content = HeaderContent
99
102
  Header.CreateAccount = HeaderCreateAccount
@@ -76,10 +76,15 @@ export type HeaderServicesProps = MenuProps &
76
76
  buttonProps?: ButtonProps
77
77
  /** Children are disabled for this component. */
78
78
  children?: never
79
+ isApplication?: boolean
79
80
  /** Props object passed to the MenuList component. */
80
81
  listProps?: ListProps
82
+ /** Props object passed to the MenuItem component; introduced for app MD */
83
+ showTopBorder?: boolean
81
84
  }
82
85
 
86
+ export type HeaderSupportProps = MenuProps & HeaderServicesData & {}
87
+
83
88
  export type HeaderSignInData = {
84
89
  /** Provides href to the button link. */
85
90
  url?: string
@@ -90,6 +95,10 @@ export type HeaderSignInProps = ButtonProps & HeaderSignInData
90
95
  export type LoggedInHeaderProps = HeaderProps & {
91
96
  /** Socket for account popover icon on the right side. */
92
97
  account?: HeaderAccountData | JSX.Element
98
+ supportLinks?: HeaderServicesData
99
+ /** Socket for the app name on the left side. */
100
+ applicationName?: string
101
+ isApplication?: boolean
93
102
  /** Socket for logo on the left side. */
94
103
  logo?: LogoData | JSX.Element
95
104
  /** Socket for main links in the middle-right. */
@@ -98,6 +107,12 @@ export type LoggedInHeaderProps = HeaderProps & {
98
107
  notifications?: HeaderNotificationsData | JSX.Element
99
108
  /** Socket for services menu icon on the right side. */
100
109
  services?: HeaderServicesData | JSX.Element
110
+ /** Socket for showing the alt user Info with role; introduced for APP; by default it is displayed. */
111
+ showAltUserInfo?: boolean
112
+ /** Socket for showing the services trigger up front; introduced for APP; by default it is displayed. */
113
+ showServices?: boolean
114
+ /** Socket for showing the main Links up front in case of APP. by default they are folded into the hamburger menu. */
115
+ showMainLinks?: boolean
101
116
  }
102
117
 
103
118
  export type LoggedInAppHeaderProps = HeaderProps & {
@@ -4,33 +4,24 @@ import Avatar from '../avatar'
4
4
  import { useStyleConfig } from '../core'
5
5
  import List from '../list'
6
6
  import Popover from '../popover'
7
- import { isJsx, isObject, merge } from '../utils'
7
+ import { isJsx, isObject } from '../utils'
8
8
  import { useHeaderContext } from './context'
9
9
  import { HeaderAccountProps, HeaderAccountUserInfoData } from './headerAccount.types'
10
10
  import HeaderAccountUserInfo from './headerAccountUserInfo'
11
11
 
12
12
  /** Disables popper's dynamic re-positioning */
13
- const mobilePopoverOptions = { popperOptions: { modifiers: [{ name: 'computeStyles', enabled: false }] } }
14
13
 
15
14
  /** Displays user account information and helpful links, like settings or logout. */
16
15
  export function HeaderAccount(props: HeaderAccountProps) {
17
16
  const { contentProps, options = {}, sections, triggerProps, userInfo, ...rest } = props
18
- const { headerHeight, isMobile } = useHeaderContext()
17
+ const { isMobile } = useHeaderContext()
19
18
  const styles = useStyleConfig('Header', useHeaderContext()).account
20
-
21
- // Render content in full view on mobile
22
- const popoverOptions = isMobile ? merge(options, mobilePopoverOptions) : options
23
-
24
- const contentScreenProps = isMobile
25
- ? { h: `calc(100vh - ${headerHeight}px)`, left: 0, position: 'fixed', top: headerHeight, w: '100vw' }
26
- : { maxH: 360, py: 1, minW: 320, w: 'auto' }
27
-
28
19
  const name = isObject<HeaderAccountUserInfoData>(userInfo) ? userInfo.displayName : ''
29
-
30
20
  const variant = styles?.trigger?.variant ?? 'solidDarkBlue'
21
+ const offsetX = isMobile ? 64 : 39
31
22
 
32
23
  return (
33
- <Popover isLazy={false} offset={[0, 8]} options={popoverOptions} placement="bottom-end" {...rest}>
24
+ <Popover isLazy={false} offset={[offsetX, 16]} placement="bottom-end" {...rest}>
34
25
  <Popover.Trigger
35
26
  as={Avatar}
36
27
  className="vui-headerAccountTrigger"
@@ -45,10 +36,11 @@ export function HeaderAccount(props: HeaderAccountProps) {
45
36
  />
46
37
 
47
38
  <Popover.Content
39
+ borderRadius={0}
48
40
  className="vui-headerAccountContent"
49
41
  column
50
42
  {...styles.content}
51
- {...contentScreenProps}
43
+ w={isMobile ? 280 : 320}
52
44
  {...contentProps}
53
45
  >
54
46
  {isJsx(userInfo) ? userInfo : userInfo && <HeaderAccountUserInfo {...userInfo} />}
@@ -31,9 +31,9 @@ export const HeaderAccountUserInfo = vui<'div', HeaderAccountUserInfoProps>((pro
31
31
  {!isApplication && (
32
32
  <Avatar className="vui-headerAccountUserInfoAvatar" name={displayName} size="xl" variant="solidDarkBlue" />
33
33
  )}
34
- <Box column>
34
+ <Box column rowGap={role ? 0 : 0.5}>
35
35
  {displayName && (
36
- <T fontSize={isApplication ? '12px' : 'inherit'} mb={isApplication ? 0 : 0.5} weight="demi">
36
+ <T fontSize={isApplication ? '12px' : 'inherit'} weight="demi">
37
37
  {displayName}
38
38
  </T>
39
39
  )}
@@ -22,7 +22,7 @@ export const HeaderLinkItem = vui<'li', HeaderLinkItemProps>((props, ref) => {
22
22
  ? {
23
23
  bg: 'skyBlue.95',
24
24
  borderColor: 'seaBlue.main',
25
- borderLeftWidth: 6,
25
+ borderLeftWidth: 3,
26
26
  hoverBg: 'skyBlue.90',
27
27
  pl: '10px',
28
28
  activeBorderBottomWidth: 0,
@@ -36,7 +36,7 @@ export const HeaderLinkItem = vui<'li', HeaderLinkItemProps>((props, ref) => {
36
36
  color: 'darkBlue.main',
37
37
  hoverBg: 'skyBlue.90',
38
38
  activeBorderColor: 'seaBlue.main',
39
- activeBorderLeftWidth: 6,
39
+ activeBorderLeftWidth: 3,
40
40
  pt: '0'
41
41
  }
42
42
  : { activeBorderBottomWidth: 4, pt: '0px', activePt: '4px' }
@@ -15,7 +15,6 @@ export const HeaderMainLinks = vui<'ul', HeaderMainLinksProps>((props, ref) => {
15
15
 
16
16
  const screenStyles = isMobile
17
17
  ? {
18
- borderBottom: '1px solid sandstone.main',
19
18
  flexDirection: 'column',
20
19
  mb: 1
21
20
  }
@@ -1,7 +1,7 @@
1
1
  import React from 'react'
2
2
 
3
3
  import Box, { BoxProps } from '../box'
4
- import { useStyleConfig, vui } from '../core'
4
+ import { useDown, useStyleConfig, vui } from '../core'
5
5
  import { cs, mergeRefs } from '../utils'
6
6
  import { useHeaderContext } from './context'
7
7
 
@@ -10,20 +10,21 @@ export const HeaderMobileContent = vui<'div', BoxProps>((props, ref) => {
10
10
  const { className, ...rest } = props
11
11
  const { isMobileOpen, mobileContentRef } = useHeaderContext() ?? {}
12
12
  const styles = useStyleConfig('Header', useHeaderContext())
13
+ const isTablet = useDown('lg')
13
14
 
14
15
  return isMobileOpen ? (
15
16
  <Box
16
17
  bg="white"
17
18
  className={cs('vui-headerMobileContent', className)}
18
19
  column
19
- h={`calc(100vh - 100% - 1px)`}
20
- left={0}
21
20
  overflowX="hidden"
22
21
  overflowY="auto"
23
22
  position="absolute"
24
23
  ref={mergeRefs(ref, mobileContentRef)}
25
24
  right={0}
25
+ shadow={2}
26
26
  top="calc(100% + 1px)"
27
+ w={isTablet ? 280 : 320}
27
28
  zIndex="100"
28
29
  {...styles.mobileContent}
29
30
  {...rest}
@@ -26,13 +26,15 @@ function ListContent({ links = [] }: Pick<HeaderServicesProps, 'links'>) {
26
26
 
27
27
  /** Displays a list of services available to the user. */
28
28
  export function HeaderServices(props: HeaderServicesProps) {
29
- const { buttonProps, links = [], ...rest } = props
29
+ const { buttonProps, isApplication = false, links = [], showTopBorder = false, ...rest } = props
30
30
  const styles = useStyleConfig('Header', useHeaderContext()).services
31
31
 
32
+ const offsetX = isApplication ? 183 : 135
33
+
32
34
  return (
33
35
  <>
34
36
  <RenderOnScreen minWidth="lg">
35
- <Menu isLazy={false} offset={[0, 8]} placement="bottom-end" size="lg" {...rest}>
37
+ <Menu isLazy={false} offset={[offsetX, 20]} placement="bottom-end" size="lg" {...rest}>
36
38
  <Menu.Button
37
39
  className="vui-services-trigger"
38
40
  icon="falTh"
@@ -41,14 +43,20 @@ export function HeaderServices(props: HeaderServicesProps) {
41
43
  {...buttonProps}
42
44
  />
43
45
 
44
- <Menu.List heading="My Services" maxH={400} w={320} {...styles.list}>
46
+ <Menu.List heading="My Services" maxH={400} right={0} w={320} {...styles.list}>
45
47
  <ListContent links={links} />
46
48
  </Menu.List>
47
49
  </Menu>
48
50
  </RenderOnScreen>
49
51
 
50
52
  <RenderOnScreen maxWidth="lg">
51
- <List borderBottom="1px solid sandstone.main" heading="My Services" {...styles.list}>
53
+ <List
54
+ heading="My Services"
55
+ {...styles.list}
56
+ borderTop={showTopBorder ? 1 : 0}
57
+ borderTopColor="sandstone.main"
58
+ pt={1}
59
+ >
52
60
  <ListContent links={links} />
53
61
  </List>
54
62
  </RenderOnScreen>
@@ -0,0 +1,76 @@
1
+ import React from 'react'
2
+
3
+ import { useDown, useStyleConfig } from '../core'
4
+ import Menu from '../menu'
5
+ import { useHeaderContext } from './context'
6
+ import { HeaderSupportProps } from './header.types'
7
+
8
+ /** Supporting internal component to avoid code duplication. */
9
+ function ListContent({ links = [] }: Pick<HeaderSupportProps, 'links'>) {
10
+ const styles = useStyleConfig('Header', useHeaderContext()).services
11
+
12
+ return (
13
+ <>
14
+ <Menu.Item
15
+ isTruncated
16
+ key="veracity-support"
17
+ linkProps={{ href: 'https://support.veracity.com/' }}
18
+ text="Veracity support"
19
+ title="Veracity support"
20
+ {...styles.item}
21
+ />
22
+ <Menu.Item
23
+ isTruncated
24
+ key="veracity-terms"
25
+ linkProps={{ href: 'https://id.veracity.com/terms-of-use' }}
26
+ text="Veracity terms"
27
+ title="Veracity terms"
28
+ {...styles.item}
29
+ />
30
+ <Menu.Item
31
+ isTruncated
32
+ key="privacy"
33
+ linkProps={{ href: 'https://services.veracity.com/PrivacyStatement' }}
34
+ text="Privacy"
35
+ title="Privacy"
36
+ {...styles.item}
37
+ />
38
+
39
+ {links.length > 0 &&
40
+ links.map(({ text, url }, index) => (
41
+ <Menu.Item isTruncated key={index} linkProps={{ href: url }} text={text} title={text} {...styles.item} />
42
+ ))}
43
+ </>
44
+ )
45
+ }
46
+
47
+ /** Displays a list of services available to the user. */
48
+ export function HeaderSupport(props: HeaderSupportProps) {
49
+ const { links = [], ...rest } = props
50
+ const styles = useStyleConfig('Header', useHeaderContext()).services
51
+
52
+ const isTablet = useDown('lg')
53
+ const offsetX = isTablet ? 162 : 135
54
+
55
+ return (
56
+ <>
57
+ <Menu isLazy={false} offset={[offsetX, 16]} placement="bottom-end" size="lg" {...rest}>
58
+ <Menu.Button
59
+ className="vui-app-info-trigger"
60
+ color={styles.button.color}
61
+ icon="falQuestionCircle"
62
+ ml={1}
63
+ size="lg"
64
+ title="My services"
65
+ {...styles.button}
66
+ />
67
+
68
+ <Menu.List maxH={400} right={0} w={isTablet ? 280 : 320} {...styles.list}>
69
+ <ListContent links={links} />
70
+ </Menu.List>
71
+ </Menu>
72
+ </>
73
+ )
74
+ }
75
+
76
+ export default HeaderSupport
@@ -1,47 +1,164 @@
1
1
  import React from 'react'
2
2
 
3
3
  import Box from '../box'
4
- import { RenderOnScreen, vui } from '../core'
4
+ import { RenderOnScreen, useDown, useStyleConfig, vui } from '../core'
5
+ import List from '../list'
5
6
  import { cs, isJsx } from '../utils'
7
+ import { useHeaderContext } from './context'
6
8
  import Header from './header'
7
- import { LoggedInHeaderProps } from './header.types'
9
+ import { HeaderLinkData, LoggedInHeaderProps } from './header.types'
10
+ import HeaderAccountUserInfo from './headerAccountUserInfo'
8
11
 
9
12
  /** Displays Header content appropriate for logged-in users, such as services, notifications or account information. */
10
13
  export const LoggedInHeader = vui<'div', LoggedInHeaderProps>((props, ref) => {
11
- const { account, children, className, logo, mainLinks, services, notifications, ...rest } = props
14
+ const {
15
+ account,
16
+ supportLinks,
17
+ applicationName,
18
+ children,
19
+ className,
20
+ isApplication = false,
21
+ logo,
22
+ mainLinks,
23
+ services,
24
+ showAltUserInfo = true,
25
+ showMainLinks = isApplication ? false : true,
26
+ showServices = true,
27
+ notifications,
28
+ ...rest
29
+ } = props
30
+
31
+ if (isApplication) {
32
+ if (!applicationName) {
33
+ console.error('Header: isApplication is true but applicationName is not set.')
34
+ }
35
+ }
36
+
37
+ const userInfo = !isJsx(account) ? account?.userInfo || {} : {}
38
+ const isSmallScreen = useDown('md')
39
+
40
+ const servicesLinks: HeaderLinkData[] = isJsx(services) ? [] : services?.links || []
41
+ const styles = useStyleConfig('Header', useHeaderContext())
12
42
 
13
43
  return (
14
- <Header className={cs('vui-loggedInHeader', className)} ref={ref} {...rest}>
44
+ <Header
45
+ className={cs('vui-loggedInHeader', isApplication ? 'vui-loggedInAppHeader' : '', className)}
46
+ mb={isApplication && isSmallScreen ? '41px' : 'inherited'}
47
+ ref={ref}
48
+ {...rest}
49
+ >
15
50
  <Header.Content>
16
51
  {isJsx(logo) ? logo : <Header.Logo {...logo} />}
17
52
 
18
- <RenderOnScreen minWidth="lg">{children}</RenderOnScreen>
53
+ {isApplication && (
54
+ <>
55
+ <RenderOnScreen minWidth="md">
56
+ <Header.Divider mr={2} />
57
+ </RenderOnScreen>
58
+
59
+ <Header.ApplicationName title={applicationName} />
60
+ </>
61
+ )}
62
+
63
+ {!isApplication && <RenderOnScreen minWidth="lg">{children}</RenderOnScreen>}
19
64
 
20
65
  <Box ml="auto" />
21
66
 
22
- <RenderOnScreen minWidth="lg">
23
- {isJsx(mainLinks) ? mainLinks : <Header.MainLinks links={mainLinks} />}
67
+ {isApplication && (
68
+ <>
69
+ <RenderOnScreen minWidth="lg">
70
+ {showMainLinks && mainLinks !== undefined && (
71
+ <>
72
+ {isJsx(mainLinks) ? mainLinks : <Header.MainLinks links={mainLinks} />}
73
+ <Header.Divider mx={1} />
74
+ </>
75
+ )}
76
+ {!showMainLinks &&
77
+ showAltUserInfo &&
78
+ (isJsx(userInfo) ? (
79
+ userInfo
80
+ ) : (
81
+ <>
82
+ <HeaderAccountUserInfo className="vui-altUserInfo" isApplication {...userInfo} />
83
+ <Header.Divider mx={1} />
84
+ </>
85
+ ))}
86
+
87
+ {/* the main-links are folded into the hamburger menu by default */}
88
+ {!showMainLinks && mainLinks && (
89
+ <>
90
+ <Header.MobileToggle ml={0} />
91
+ <Header.MobileContent>
92
+ <>
93
+ {isJsx(mainLinks) ? (
94
+ mainLinks
95
+ ) : (
96
+ <Box column w={1}>
97
+ <List py={1}>
98
+ {mainLinks?.map(({ icon, url, ...rest }, index) => (
99
+ <List.Item iconLeft={icon} key={index} linkProps={{ href: url }} {...rest} />
100
+ ))}
101
+ </List>
102
+ </Box>
103
+ )}
104
+
105
+ {!showServices && servicesLinks && (
106
+ <Box column w={1}>
107
+ <List
108
+ heading="My Services"
109
+ maxH={400}
110
+ right={0}
111
+ w={320}
112
+ {...styles.services.list}
113
+ borderTop={1}
114
+ borderTopColor="sandstone.main"
115
+ pt={1}
116
+ >
117
+ {servicesLinks?.map(({ url, ...rest }, index: number) => (
118
+ <List.Item key={index} linkProps={{ href: url }} {...rest} />
119
+ ))}
120
+ </List>
121
+ </Box>
122
+ )}
123
+ </>
124
+ </Header.MobileContent>
125
+ </>
126
+ )}
127
+ {showServices && services && (
128
+ <>{isJsx(services) ? services : <Header.Services isApplication={isApplication} {...services} />}</>
129
+ )}
130
+ </RenderOnScreen>
131
+
132
+ <Header.Support {...supportLinks} />
133
+ </>
134
+ )}
135
+
136
+ {!isApplication && (
137
+ <RenderOnScreen minWidth="lg">
138
+ {isJsx(mainLinks) ? mainLinks : <Header.MainLinks links={mainLinks} />}
24
139
 
25
- {mainLinks !== undefined && <Header.Divider mx={1} />}
140
+ {mainLinks !== undefined && <Header.Divider mx={1} />}
26
141
 
27
- {isJsx(services) ? services : <Header.Services {...services} />}
28
- </RenderOnScreen>
142
+ {isJsx(services) ? services : <Header.Services {...services} />}
143
+ </RenderOnScreen>
144
+ )}
29
145
 
30
146
  {isJsx(notifications) ? notifications : <Header.Notifications {...notifications} />}
31
147
 
32
148
  {isJsx(account) ? account : <Header.Account {...account} />}
33
149
 
34
150
  <RenderOnScreen maxWidth="lg">
35
- {(account !== undefined || notifications !== undefined) && <Header.Divider ml={2} />}
151
+ {isApplication && <Header.Divider ml={1} />}
152
+ {!isApplication && (account !== undefined || notifications !== undefined) && <Header.Divider ml={1} />}
36
153
 
37
154
  <Header.MobileToggle />
38
155
 
39
156
  <Header.MobileContent>
40
- {children}
157
+ {!isApplication && children}
41
158
 
42
159
  {isJsx(mainLinks) ? mainLinks : <Header.MainLinks links={mainLinks} />}
43
160
 
44
- {isJsx(services) ? services : <Header.Services {...services} />}
161
+ {isJsx(services) ? services : <Header.Services {...services} showTopBorder={mainLinks ? true : false} />}
45
162
  </Header.MobileContent>
46
163
  </RenderOnScreen>
47
164
  </Header.Content>
@@ -0,0 +1,9 @@
1
+ /* eslint-disable */
2
+
3
+ import { IconDefinition } from '../../types'
4
+
5
+ export default {
6
+ details: [32, 32, [], '', 'M16 16.6C16 16.2686 16.2686 16 16.6 16H18.4C18.7314 16 19 16.2686 19 16.6V18.4C19 18.7314 18.7314 19 18.4 19H16.6C16.2686 19 16 18.7314 16 18.4V16.6Z M16 24.6C16 24.2686 16.2686 24 16.6 24H18.4C18.7314 24 19 24.2686 19 24.6V26.4C19 26.7314 18.7314 27 18.4 27H16.6C16.2686 27 16 26.7314 16 26.4V24.6Z M24.6 16C24.2686 16 24 16.2686 24 16.6V18.4C24 18.7314 24.2686 19 24.6 19H26.4C26.7314 19 27 18.7314 27 18.4V16.6C27 16.2686 26.7314 16 26.4 16H24.6Z M24 24.6C24 24.2686 24.2686 24 24.6 24H26.4C26.7314 24 27 24.2686 27 24.6V26.4C27 26.7314 26.7314 27 26.4 27H24.6C24.2686 27 24 26.7314 24 26.4V24.6Z M5.60001 16C5.26863 16 5 16.2686 5 16.6V18.4C5 18.7314 5.26863 19 5.60001 19H7.39999C7.73137 19 8 18.7314 8 18.4V16.6C8 16.2686 7.73137 16 7.39999 16H5.60001Z M5.60001 24C5.26863 24 5 24.2686 5 24.6V26.4C5 26.7314 5.26863 27 5.60001 27H7.39999C7.73137 27 8 26.7314 8 26.4V24.6C8 24.2686 7.73137 24 7.39999 24H5.60001Z M16.6 5C16.2686 5 16 5.26862 16 5.60001V7.39999C16 7.73138 16.2686 8 16.6 8H18.4C18.7314 8 19 7.73138 19 7.39999V5.60001C19 5.26862 18.7314 5 18.4 5H16.6Z M24.6 5C24.2686 5 24 5.26862 24 5.60001V7.39999C24 7.73138 24.2686 8 24.6 8H26.4C26.7314 8 27 7.73138 27 7.39999V5.60001C27 5.26862 26.7314 5 26.4 5H24.6Z M32 4C32 1.79086 30.2091 0 28 0H4C1.79086 0 0 1.79086 0 4V28C0 30.2091 1.79086 32 4 32H28C30.2091 32 32 30.2091 32 28V4ZM2 11V4C2 2.89542 2.89543 2 4 2H11V11H2ZM28 30H13V13H30V28C30 29.1046 29.1046 30 28 30ZM11 30V13H2V28C2 29.1046 2.89543 30 4 30H11ZM30 11H13V2H28C29.1046 2 30 2.89542 30 4V11Z'],
7
+ name: 'culDatasetAlt',
8
+ pathProps: { fillRule: 'evenodd', clipRule: 'evenodd' }
9
+ } as IconDefinition
@@ -45,6 +45,7 @@ export { default as culCovid } from './cul/culCovid'
45
45
  export { default as culCreateReport } from './cul/culCreateReport'
46
46
  export { default as culDatacatalogue } from './cul/culDatacatalogue'
47
47
  export { default as culDataset } from './cul/culDataset'
48
+ export { default as culDatasetAlt } from './cul/culDatasetAlt'
48
49
  export { default as culDeepSearch } from './cul/culDeepSearch'
49
50
  export { default as culDotsMenu } from './cul/culDotsMenu'
50
51
  export { default as culEyeAssess } from './cul/culEyeAssess'
@@ -46,6 +46,7 @@ export type BaseIcon =
46
46
  | 'culCreateReport'
47
47
  | 'culDatacatalogue'
48
48
  | 'culDataset'
49
+ | 'culDatasetAlt'
49
50
  | 'culDeepSearch'
50
51
  | 'culDotsMenu'
51
52
  | 'culEyeAssess'
package/src/tree/theme.ts CHANGED
@@ -1,72 +1,73 @@
1
- import { Dict } from '../utils'
2
-
3
- function variantDefault(props: Dict) {
4
- const item: Dict = {
5
- activeBg: 'skyBlue.30',
6
- hoverBg: 'skyBlue.20',
7
- selectedBg: 'skyBlue.10',
8
- px: 2
9
- }
10
-
11
- return { item }
12
- }
13
-
14
1
  const baseStyle = {}
15
2
 
16
3
  const defaultProps = {
17
- size: 'md',
4
+ size: 'xl',
18
5
  variant: 'default'
19
6
  }
20
7
 
21
- const parts = ['container', 'icon', 'item', 'text']
8
+ const parts = ['container', 'icon', 'firstLevelItem', 'item', 'text']
22
9
 
23
10
  const sizes = {
24
- sm: {
25
- icon: {
26
- size: 'xs'
27
- },
11
+ xl: {
28
12
  item: {
29
- fontSize: 'md',
30
- h: 32,
31
- py: '3px'
32
- }
33
- },
34
- md: {
13
+ fontSize: 'md', // 16px
14
+ height: 48,
15
+ lineHeight: '24px',
16
+ py: '12px'
17
+ },
35
18
  icon: {
36
- size: 'sm'
19
+ height: 18,
20
+ width: 18
21
+ }
22
+ }
23
+ }
24
+
25
+ const variants = {
26
+ default: {
27
+ container: {
28
+ bg: 'white'
29
+ },
30
+ firstLevelItem: {
31
+ bg: 'white',
32
+ color: 'seaBlue.main',
33
+ activeColor: 'seaBlue.main',
34
+ activeBg: 'skyBlue.85',
35
+ hoverBg: 'skyBlue.80' // '#A6DEF2'
37
36
  },
38
37
  item: {
39
- fontSize: 'md',
40
- h: 40,
41
- py: '5px'
38
+ bg: 'white',
39
+ color: 'seaBlue.main',
40
+ activeColor: 'seaBlue.main',
41
+ activeBg: 'skyBlue.85',
42
+ hoverBg: 'skyBlue.80',
43
+ selectedBg: 'skyBlue.10',
44
+ px: 2
42
45
  }
43
46
  },
44
- lg: {
45
- item: {
46
- fontSize: 'md',
47
- h: 48,
48
- py: '7px'
47
+ dark: {
48
+ container: {
49
+ bg: 'darkBlue.main',
50
+ color: 'white'
49
51
  },
50
- icon: {
51
- size: 'md'
52
- }
53
- },
54
- xl: {
55
- item: {
56
- fontSize: 'lg',
57
- h: 56,
58
- py: '9px'
52
+ firstLevelItem: {
53
+ bg: 'darkBlue.main',
54
+ color: 'white',
55
+ activeBg: 'darkBlue.25',
56
+ activeColor: 'seaBlue.main',
57
+ hoverBg: 'darkBlue.25', //'#152D6A'
58
+ hoverColor: 'white'
59
59
  },
60
- icon: {
61
- scale: 2
60
+ item: {
61
+ bg: 'skyBlue.97',
62
+ color: 'seaBlue.main',
63
+ activeBg: 'skyBlue.85',
64
+ activeColor: 'seaBlue.main',
65
+ hoverBg: 'skyBlue.80',
66
+ hoverColor: 'seaBlue.main'
62
67
  }
63
68
  }
64
69
  }
65
70
 
66
- const variants = {
67
- default: variantDefault
68
- }
69
-
70
71
  export default {
71
72
  baseStyle,
72
73
  defaultProps,