@veracity/vui 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/avatar/avatar.js +1 -1
  2. package/button/button.types.d.ts +4 -4
  3. package/button/consts.js +2 -2
  4. package/footer/consts.d.ts +105 -8
  5. package/footer/consts.js +18 -9
  6. package/footer/footerColumn.d.ts +1 -1
  7. package/footer/helpers.d.ts +2 -3
  8. package/footer/helpers.js +16 -16
  9. package/header/consts.d.ts +58 -0
  10. package/header/consts.js +76 -0
  11. package/header/context.d.ts +2 -2
  12. package/header/context.js +3 -3
  13. package/header/header.d.ts +7 -7
  14. package/header/header.js +30 -15
  15. package/header/header.types.d.ts +41 -22
  16. package/header/headerAccount.d.ts +4 -0
  17. package/header/{headerProfile.js → headerAccount.js} +17 -9
  18. package/header/headerAccount.types.d.ts +35 -0
  19. package/header/headerContent.js +1 -1
  20. package/header/headerCreateAccount.js +7 -4
  21. package/header/headerDivider.js +2 -2
  22. package/header/headerLinkItem.d.ts +4 -0
  23. package/header/headerLinkItem.js +53 -0
  24. package/header/headerLinksList.d.ts +4 -0
  25. package/header/{headerLinks.js → headerLinksList.js} +10 -7
  26. package/header/headerLogo.js +5 -9
  27. package/header/headerMobileContent.js +4 -3
  28. package/header/headerMobileToggle.d.ts +2 -2
  29. package/header/headerMobileToggle.js +6 -7
  30. package/header/headerNotifications.js +5 -6
  31. package/header/headerServices.js +15 -11
  32. package/header/headerSignIn.js +1 -1
  33. package/header/helpers.d.ts +17 -0
  34. package/header/helpers.js +66 -0
  35. package/header/index.d.ts +7 -3
  36. package/header/index.js +7 -3
  37. package/header/loggedInHeader.d.ts +1 -1
  38. package/header/loggedInHeader.js +12 -8
  39. package/header/loggedOutHeader.js +13 -10
  40. package/header/theme.d.ts +60 -7
  41. package/header/theme.js +49 -12
  42. package/icons/baseIcons/fas/fasCalendarAlt.js +1 -1
  43. package/index.d.ts +2 -0
  44. package/index.js +2 -0
  45. package/input/consts.js +2 -2
  46. package/input/input.types.d.ts +3 -3
  47. package/link/link.types.d.ts +4 -4
  48. package/list/listItem.js +1 -1
  49. package/menu/menuItem.js +7 -22
  50. package/menu/menuList.js +1 -1
  51. package/modal/context.d.ts +4 -0
  52. package/modal/context.js +23 -0
  53. package/modal/focusLock.d.ts +9 -0
  54. package/modal/focusLock.js +47 -0
  55. package/modal/focusLock.types.d.ts +28 -0
  56. package/modal/focusLock.types.js +2 -0
  57. package/modal/index.d.ts +7 -0
  58. package/modal/index.js +24 -0
  59. package/modal/modal.d.ts +10 -0
  60. package/modal/modal.js +109 -0
  61. package/modal/modal.types.d.ts +40 -0
  62. package/modal/modal.types.js +2 -0
  63. package/modal/modalBackdrop.d.ts +4 -0
  64. package/modal/modalBackdrop.js +38 -0
  65. package/modal/modalManager.d.ts +12 -0
  66. package/modal/modalManager.js +33 -0
  67. package/modal/theme.d.ts +7 -0
  68. package/modal/theme.js +12 -0
  69. package/notification/consts.js +2 -2
  70. package/notification/notification.types.d.ts +1 -2
  71. package/package.json +3 -1
  72. package/popover/popover.d.ts +1 -1
  73. package/popover/popover.js +5 -4
  74. package/popover/popoverContent.js +1 -1
  75. package/popover/usePopover.js +7 -9
  76. package/popover/usePopover.types.d.ts +1 -1
  77. package/portal/index.d.ts +3 -0
  78. package/portal/index.js +20 -0
  79. package/portal/portal.d.ts +5 -0
  80. package/portal/portal.js +56 -0
  81. package/portal/portal.types.d.ts +7 -0
  82. package/portal/portal.types.js +2 -0
  83. package/svg/svg.js +9 -7
  84. package/svg/svg.types.d.ts +2 -2
  85. package/tag/tag.types.d.ts +3 -4
  86. package/theme/components.d.ts +60 -7
  87. package/theme/defaultTheme.d.ts +60 -7
  88. package/utils/index.d.ts +1 -0
  89. package/utils/index.js +1 -0
  90. package/utils/react.d.ts +10 -5
  91. package/utils/react.js +64 -9
  92. package/utils/string.d.ts +5 -0
  93. package/utils/string.js +19 -0
  94. package/utils/types.d.ts +4 -2
  95. package/header/headerLink.d.ts +0 -4
  96. package/header/headerLink.js +0 -43
  97. package/header/headerLinks.d.ts +0 -4
  98. package/header/headerProfile.d.ts +0 -4
  99. package/header/headerProfile.types.d.ts +0 -35
  100. /package/header/{headerProfile.types.js → headerAccount.types.js} +0 -0
package/header/header.js CHANGED
@@ -69,49 +69,64 @@ var react_1 = __importStar(require("react"));
69
69
  var core_1 = require("../core");
70
70
  var utils_1 = require("../utils");
71
71
  var context_1 = require("./context");
72
+ var headerAccount_1 = __importDefault(require("./headerAccount"));
72
73
  var headerContent_1 = __importDefault(require("./headerContent"));
73
74
  var headerCreateAccount_1 = __importDefault(require("./headerCreateAccount"));
74
75
  var headerDivider_1 = __importDefault(require("./headerDivider"));
75
- var headerLink_1 = __importDefault(require("./headerLink"));
76
- var headerLinks_1 = __importDefault(require("./headerLinks"));
76
+ var headerLinkItem_1 = __importDefault(require("./headerLinkItem"));
77
+ var headerLinksList_1 = __importDefault(require("./headerLinksList"));
77
78
  var headerLogo_1 = __importDefault(require("./headerLogo"));
78
79
  var headerMobileContent_1 = __importDefault(require("./headerMobileContent"));
79
80
  var headerMobileToggle_1 = __importDefault(require("./headerMobileToggle"));
80
81
  var headerNotifications_1 = __importDefault(require("./headerNotifications"));
81
- var headerProfile_1 = __importDefault(require("./headerProfile"));
82
82
  var headerServices_1 = __importDefault(require("./headerServices"));
83
83
  var headerSignIn_1 = __importDefault(require("./headerSignIn"));
84
- exports.HeaderBase = core_1.styled.headerBox(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n\talign-items: center;\n\tbackground-color: white;\n\tborder-bottom: 1px solid prussian.80;\n\tdisplay: flex;\n\theight: 72px;\n\tposition: relative;\n"], ["\n\talign-items: center;\n\tbackground-color: white;\n\tborder-bottom: 1px solid prussian.80;\n\tdisplay: flex;\n\theight: 72px;\n\tposition: relative;\n"
84
+ exports.HeaderBase = core_1.styled.headerBox(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n\talign-items: center;\n\tbackground-color: white;\n\tborder-bottom: 1px solid prussian.80;\n\tdisplay: flex;\n\tposition: relative;\n"], ["\n\talign-items: center;\n\tbackground-color: white;\n\tborder-bottom: 1px solid prussian.80;\n\tdisplay: flex;\n\tposition: relative;\n"
85
85
  /**
86
- * Branded Veracity Header with logo, links, services, profile and other data. Controls max-width of the content.
86
+ * Branded Veracity Header with logo, links, services, account and other data. Controls max-width of the content.
87
87
  * Exposes some props to the children via context.
88
88
  */
89
89
  ])));
90
90
  /**
91
- * Branded Veracity Header with logo, links, services, profile and other data. Controls max-width of the content.
91
+ * Branded Veracity Header with logo, links, services, account and other data. Controls max-width of the content.
92
92
  * Exposes some props to the children via context.
93
93
  */
94
94
  exports.Header = (0, core_1.vui)(function (props, ref) {
95
- var _a = __read((0, react_1.useState)(false), 2), isMobileOpen = _a[0], setIsMobileOpen = _a[1];
96
- var children = props.children, className = props.className, size = props.size, variant = props.variant, rest = __rest(props, ["children", "className", "size", "variant"]);
95
+ var children = props.children, className = props.className, _a = props.headerHeight, headerHeight = _a === void 0 ? 72 : _a, size = props.size, variant = props.variant, rest = __rest(props, ["children", "className", "headerHeight", "size", "variant"]);
96
+ var _b = __read((0, react_1.useState)(false), 2), isMobileOpen = _b[0], setIsMobileOpen = _b[1];
97
+ var mobileContentRef = (0, react_1.useRef)(null);
98
+ var mobileToggleRef = (0, react_1.useRef)(null);
97
99
  var styles = (0, core_1.useStyleConfig)('Header', props);
98
- var isDesktop = (0, core_1.useUp)('lg');
99
- var isMobile = (0, core_1.useDown)('lg');
100
- var context = (0, react_1.useMemo)(function () { return ({ isDesktop: isDesktop, isMobile: isMobile, isMobileOpen: isMobileOpen, setIsMobileOpen: setIsMobileOpen, size: size, variant: variant }); }, [isDesktop, isMobile, isMobileOpen, setIsMobileOpen, size, variant]);
100
+ (0, utils_1.useClickOutside)([mobileContentRef, mobileToggleRef], function () {
101
+ setIsMobileOpen(false);
102
+ });
103
+ var isDesktop = (0, core_1.useUp)('md');
104
+ var isMobile = (0, core_1.useDown)('md');
105
+ var context = {
106
+ headerHeight: headerHeight,
107
+ isDesktop: isDesktop,
108
+ isMobile: isMobile,
109
+ isMobileOpen: isMobileOpen,
110
+ mobileContentRef: mobileContentRef,
111
+ mobileToggleRef: mobileToggleRef,
112
+ setIsMobileOpen: setIsMobileOpen,
113
+ size: size,
114
+ variant: variant
115
+ };
101
116
  return (react_1.default.createElement(context_1.HeaderProvider, { value: context },
102
- react_1.default.createElement(exports.HeaderBase, __assign({ className: (0, utils_1.cs)('vui-header', className), px: { xs: 2, lg: 5 }, ref: ref }, styles.container, rest), (0, utils_1.runIfFn)(children, context))));
117
+ react_1.default.createElement(exports.HeaderBase, __assign({ className: (0, utils_1.cs)('vui-header', className), h: headerHeight, px: { xs: 2, lg: 5 }, ref: ref }, styles.container, rest), (0, utils_1.runIfFn)(children, context))));
103
118
  });
104
119
  exports.Header.displayName = 'Header';
120
+ exports.Header.Account = headerAccount_1.default;
105
121
  exports.Header.Content = headerContent_1.default;
106
122
  exports.Header.CreateAccount = headerCreateAccount_1.default;
107
123
  exports.Header.Divider = headerDivider_1.default;
108
- exports.Header.Link = headerLink_1.default;
109
- exports.Header.Links = headerLinks_1.default;
124
+ exports.Header.LinkItem = headerLinkItem_1.default;
125
+ exports.Header.LinksList = headerLinksList_1.default;
110
126
  exports.Header.Logo = headerLogo_1.default;
111
127
  exports.Header.MobileContent = headerMobileContent_1.default;
112
128
  exports.Header.MobileToggle = headerMobileToggle_1.default;
113
129
  exports.Header.Notifications = headerNotifications_1.default;
114
- exports.Header.Profile = headerProfile_1.default;
115
130
  exports.Header.Services = headerServices_1.default;
116
131
  exports.Header.SignIn = headerSignIn_1.default;
117
132
  exports.default = exports.Header;
@@ -1,4 +1,4 @@
1
- import { Dispatch, SetStateAction } from 'react';
1
+ import { Dispatch, RefObject, SetStateAction } from 'react';
2
2
  import { BoxProps } from '../box';
3
3
  import { ButtonProps } from '../button';
4
4
  import { IconProp } from '../icon';
@@ -6,79 +6,98 @@ import { ListItemProps, ListProps } from '../list';
6
6
  import { MenuProps } from '../menu';
7
7
  import { SystemProps } from '../system';
8
8
  import { ThemingProps } from '../theme';
9
- import { AnyElement, RenderProps } from '../utils';
10
- import { HeaderProfileData } from './headerProfile.types';
11
- export declare type HeaderContext = {
9
+ import { RenderProps } from '../utils';
10
+ import { headerLinksProd } from './consts';
11
+ import { HeaderAccountData } from './headerAccount.types';
12
+ export declare type HeaderContext = Pick<HeaderProps, 'headerHeight'> & {
12
13
  isDesktop: boolean;
13
14
  isMobile: boolean;
14
15
  isMobileOpen: boolean;
16
+ mobileContentRef: RefObject<HTMLElement | null>;
17
+ mobileToggleRef: RefObject<HTMLElement | null>;
15
18
  setIsMobileOpen: Dispatch<SetStateAction<boolean>>;
16
19
  };
17
- /** Defines create account link URL. */
18
20
  export declare type HeaderCreateAccountData = {
21
+ /** Provides URL to create account link. */
19
22
  url?: string;
20
23
  };
21
24
  export declare type HeaderCreateAccountProps = BoxProps & HeaderCreateAccountData;
22
- /** Defines link information. */
23
25
  export declare type HeaderLinkData = {
26
+ /** Displays and icon on the left side of the link. */
24
27
  icon?: IconProp;
28
+ /** Adds styling for currently active link. */
29
+ isActive?: boolean;
30
+ /** Provides text content to the list item. */
25
31
  text?: string;
32
+ /** Provides href attribute to the internal link element. */
26
33
  url?: string;
27
34
  };
28
- export declare type HeaderLinkProps = ListItemProps & HeaderLinkData;
29
- export declare type HeaderLinksProps = ListProps & {
35
+ /** Union of link ids based on Header links dictionary for Prod environment. */
36
+ export declare type HeaderLinkKey = keyof typeof headerLinksProd;
37
+ export declare type HeaderLinkItemProps = ListItemProps & HeaderLinkData;
38
+ export declare type HeaderLinksListProps = ListProps & {
30
39
  /** Array of objects with data for each link. */
31
40
  links?: HeaderLinkData[];
32
41
  };
33
- /** Defines src to load the logo from and link's URL. */
34
42
  export declare type HeaderLogoData = {
43
+ /** Loads logo svg from the given source. */
35
44
  src?: string;
45
+ /** Renders logo wrapper as a link with given url as href. */
36
46
  url?: string;
37
47
  };
38
48
  export declare type HeaderLogoProps = BoxProps & HeaderLogoData;
39
- /** Defines notifications count and icon link URL. */
40
49
  export declare type HeaderNotificationsData = {
50
+ /** Displays a badge with given number of notifications. */
41
51
  count?: number;
52
+ /** Provides href to the icon link. */
42
53
  url?: string;
43
54
  };
44
55
  export declare type HeaderNotificationsProps = ThemingProps<'Header'> & Omit<ButtonProps, 'size' | 'variant'> & HeaderNotificationsData;
45
56
  export declare type HeaderProps = SystemProps & ThemingProps<'Header'> & {
46
57
  /** Exposes render props to the children. */
47
58
  children?: HeaderRenderProps;
59
+ /** Sets the height of the Header and is used by internal parts for positioning and sizing. */
60
+ headerHeight?: number;
48
61
  };
49
62
  export declare type HeaderRenderProps = RenderProps<HeaderContext>;
63
+ export declare type HeaderServicesData = {
64
+ /** Provides text content to the service item. */
65
+ text?: string;
66
+ /** Provides href attribute to the internal link element. */
67
+ url?: string;
68
+ };
50
69
  export declare type HeaderServicesProps = MenuProps & {
51
70
  /** Props object passed to the MenuButton component. */
52
71
  buttonProps?: ButtonProps;
53
72
  /** Props object passed to the MenuList component. */
54
73
  listProps?: ListProps;
55
74
  /** Array of objects with data for each service link. */
56
- services?: HeaderLinkData[];
75
+ services?: HeaderServicesData[];
57
76
  };
58
- /** Defines URL of the sign in button. */
59
77
  export declare type HeaderSignInData = {
78
+ /** Provides href to the button link. */
60
79
  url?: string;
61
80
  };
62
81
  export declare type HeaderSignInProps = ButtonProps & HeaderSignInData;
63
82
  export declare type LoggedInHeaderProps = HeaderProps & {
83
+ /** Socket placing account popover icon on the right side. */
84
+ account?: HeaderAccountData | JSX.Element;
64
85
  /** Socket placing links in the middle. */
65
- links?: HeaderLinkData[] | AnyElement;
86
+ links?: HeaderLinkData[] | JSX.Element;
66
87
  /** Socket placing logo on the left side. */
67
- logo?: HeaderLogoData | AnyElement;
88
+ logo?: HeaderLogoData | JSX.Element;
68
89
  /** Socket placing notifications icon on the right side. */
69
- notifications?: HeaderNotificationsData | AnyElement;
70
- /** Socket placing profile popover icon on the right side. */
71
- profile?: HeaderProfileData | AnyElement;
90
+ notifications?: HeaderNotificationsData | JSX.Element;
72
91
  /** Socket placing services menu icon on the right side. */
73
- services?: HeaderLinkData[] | AnyElement;
92
+ services?: HeaderServicesData[] | JSX.Element;
74
93
  };
75
94
  export declare type LoggedOutHeaderProps = HeaderProps & {
76
95
  /** Socket placing create account prompt on the right side. */
77
- createAccount?: string | AnyElement;
96
+ createAccount?: HeaderCreateAccountData | JSX.Element;
78
97
  /** Socket placing links in the middle. */
79
- links?: HeaderLinkData[] | AnyElement;
98
+ links?: HeaderLinkData[] | JSX.Element;
80
99
  /** Socket placing logo on the left side. */
81
- logo?: HeaderLogoData | AnyElement;
100
+ logo?: HeaderLogoData | JSX.Element;
82
101
  /** Socket placing sign in button on the right side. */
83
- signIn?: HeaderSignInData['url'] | AnyElement;
102
+ signIn?: HeaderSignInData | JSX.Element;
84
103
  };
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { HeaderAccountProps } from './headerAccount.types';
3
+ /** Displays user account information and helpful links, like settings or logout. */
4
+ export default function HeaderAccount(props: HeaderAccountProps): JSX.Element;
@@ -71,20 +71,28 @@ var utils_1 = require("../utils");
71
71
  var context_1 = require("./context");
72
72
  function UserInfo(_a) {
73
73
  var companyName = _a.companyName, userName = _a.userName;
74
- return (react_1.default.createElement(box_1.default, { p: 2, spaceX: 2 },
74
+ return (react_1.default.createElement(box_1.default, { p: 2, pb: 1, spaceX: 2 },
75
75
  react_1.default.createElement(avatar_1.default, { colorScheme: "prussian", name: userName, size: "lg", variant: "solid" }),
76
76
  react_1.default.createElement(box_1.default, { column: true },
77
77
  userName && (react_1.default.createElement(t_1.default, { mb: 0.5, weight: "demi" }, userName)),
78
78
  companyName && react_1.default.createElement(t_1.default, null, companyName))));
79
79
  }
80
- /** Displays user profile information and helpful links, like settings or logout. */
81
- function HeaderProfile(props) {
82
- var children = props.children, contentProps = props.contentProps, sections = props.sections, triggerProps = props.triggerProps, userInfo = props.userInfo, rest = __rest(props, ["children", "contentProps", "sections", "triggerProps", "userInfo"]);
83
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)()).profile;
80
+ /** Disables popper's dynamic re-positioning */
81
+ var mobilePopoverOptions = { popperOptions: { modifiers: [{ name: 'computeStyles', enabled: false }] } };
82
+ /** Displays user account information and helpful links, like settings or logout. */
83
+ function HeaderAccount(props) {
84
+ var children = props.children, contentProps = props.contentProps, _a = props.options, options = _a === void 0 ? {} : _a, sections = props.sections, triggerProps = props.triggerProps, userInfo = props.userInfo, rest = __rest(props, ["children", "contentProps", "options", "sections", "triggerProps", "userInfo"]);
85
+ var _b = (0, context_1.useHeaderContext)(), headerHeight = _b.headerHeight, isMobile = _b.isMobile;
86
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)()).account;
87
+ // Render content in full view on mobile
88
+ var popoverOptions = isMobile ? (0, utils_1.merge)(options, mobilePopoverOptions) : options;
89
+ var contentScreenProps = isMobile
90
+ ? { h: "calc(100vh - " + headerHeight + "px)", left: 0, position: 'fixed', top: headerHeight, w: '100vw' }
91
+ : { maxH: 360, py: 1, w: 320 };
84
92
  var name = (0, utils_1.isObject)(userInfo) ? userInfo.userName : '';
85
- return (react_1.default.createElement(popover_1.default, __assign({ placement: "bottom-end" }, rest),
86
- react_1.default.createElement(popover_1.default.Trigger, __assign({ as: avatar_1.default, colorScheme: "prussian", isInteractive: true, name: name, variant: "solid" }, styles.trigger, triggerProps)),
87
- react_1.default.createElement(popover_1.default.Content, __assign({ column: true, py: 1 }, styles.content, contentProps),
93
+ return (react_1.default.createElement(popover_1.default, __assign({ offset: [0, 8], options: popoverOptions, placement: "bottom-end" }, rest),
94
+ react_1.default.createElement(popover_1.default.Trigger, __assign({ as: avatar_1.default, colorScheme: "prussian", isInteractive: true, ml: 2, name: name, title: "Account", variant: "solid" }, styles.trigger, triggerProps)),
95
+ react_1.default.createElement(popover_1.default.Content, __assign({ column: true }, styles.content, contentScreenProps, contentProps),
88
96
  (0, utils_1.isObject)(userInfo) ? react_1.default.createElement(UserInfo, __assign({}, userInfo)) : userInfo,
89
97
  (0, utils_1.isObject)(sections)
90
98
  ? Object.entries(sections).map(function (_a) {
@@ -98,4 +106,4 @@ function HeaderProfile(props) {
98
106
  })
99
107
  : sections)));
100
108
  }
101
- exports.default = HeaderProfile;
109
+ exports.default = HeaderAccount;
@@ -0,0 +1,35 @@
1
+ /// <reference types="react" />
2
+ import { AvatarProps } from '../avatar';
3
+ import { BoxProps } from '../box';
4
+ import { PopoverProps } from '../popover';
5
+ import { HeaderLinkData } from './header.types';
6
+ /** Defines account link sections and user information. */
7
+ export declare type HeaderAccountData = {
8
+ sections?: HeaderAccountSectionsData;
9
+ userInfo?: HeaderAccountUserInfoData;
10
+ };
11
+ export declare type HeaderAccountProps = PopoverProps & {
12
+ /** Props object passed to the PopoverContent component. */
13
+ contentProps?: BoxProps;
14
+ /** Socket displaying a set of link sections below user information. */
15
+ sections?: HeaderAccountData['sections'] | JSX.Element;
16
+ /** Props object passed to the PopoverTrigger component. */
17
+ triggerProps?: AvatarProps;
18
+ /** Socket displaying user information on top of the account popover. */
19
+ userInfo?: HeaderAccountData['userInfo'] | JSX.Element;
20
+ };
21
+ /** Defines heading and an array of links within one section. */
22
+ export declare type HeaderAccountSectionData = {
23
+ heading?: string;
24
+ links?: HeaderLinkData[];
25
+ };
26
+ /** Defines a set of link sections within the account popover. */
27
+ export declare type HeaderAccountSectionsData = {
28
+ [sectionName: string]: HeaderAccountSectionData;
29
+ };
30
+ /** Defines user information within the Account. */
31
+ export declare type HeaderAccountUserInfoData = {
32
+ companyName?: string;
33
+ userName?: string;
34
+ };
35
+ export declare type HeaderAccountUserInfoProps = HeaderAccountUserInfoData;
@@ -21,7 +21,7 @@ var core_1 = require("../core");
21
21
  var context_1 = require("./context");
22
22
  /** Controls max-width of the content and centers itself vertically. */
23
23
  exports.HeaderContent = (0, core_1.vui)(function (props, ref) {
24
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)());
24
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)());
25
25
  return (react_1.default.createElement(box_1.default, __assign({ centerV: true, className: "vui-headerContent", h: "100%", maxW: 1440, mx: "auto", ref: ref, w: "100%" }, styles.content, props)));
26
26
  });
27
27
  exports.HeaderContent.displayName = 'HeaderContent';
@@ -34,11 +34,14 @@ var t_1 = __importDefault(require("../t"));
34
34
  var context_1 = require("./context");
35
35
  /** Text inviting to create an account when logged out. */
36
36
  exports.HeaderCreateAccount = (0, core_1.vui)(function (props, ref) {
37
+ var _a;
37
38
  var url = props.url, rest = __rest(props, ["url"]);
38
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)());
39
- return (react_1.default.createElement(box_1.default, __assign({ className: "vui-headerCreateAccount", column: true, flexShrink: 0, ref: ref }, styles.createAccount, rest),
40
- react_1.default.createElement(t_1.default, { size: "sm" }, "New to Veracity?"),
41
- react_1.default.createElement(link_1.default, { fontWeight: "medium", href: url, isUnderlined: true, size: "sm" }, "Create account")));
39
+ var isMobile = ((_a = (0, context_1.useHeaderContext)()) !== null && _a !== void 0 ? _a : {}).isMobile;
40
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)()).createAccount;
41
+ var screenProps = isMobile ? { borderBottom: '1px solid grey.40', p: 2 } : { ml: 3 };
42
+ return (react_1.default.createElement(box_1.default, __assign({ className: "vui-headerCreateAccount", column: true, flexShrink: 0, ref: ref }, styles.container, screenProps, rest),
43
+ react_1.default.createElement(t_1.default, __assign({ size: "sm" }, styles.text), "New to Veracity?"),
44
+ react_1.default.createElement(link_1.default, __assign({ fontWeight: "medium", href: url, isUnderlined: true, size: "sm" }, styles.link), "Create account")));
42
45
  });
43
46
  exports.HeaderCreateAccount.displayName = 'HeaderCreateAccount';
44
47
  exports.default = exports.HeaderCreateAccount;
@@ -21,8 +21,8 @@ var divider_1 = __importDefault(require("../divider"));
21
21
  var context_1 = require("./context");
22
22
  /** Vertical line dividing some of the Header content. */
23
23
  exports.HeaderDivider = (0, core_1.vui)(function (props, ref) {
24
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)());
25
- return (react_1.default.createElement(divider_1.default, __assign({ borderColor: "prussian.80", className: "vui-headerDivider", isVertical: true, mx: 1, ref: ref }, styles.divider, props)));
24
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)());
25
+ return (react_1.default.createElement(divider_1.default, __assign({ borderColor: "prussian.80", className: "vui-headerDivider", h: 40, isVertical: true, ref: ref }, styles.divider, props)));
26
26
  });
27
27
  exports.HeaderDivider.displayName = 'HeaderDivider';
28
28
  exports.default = exports.HeaderDivider;
@@ -0,0 +1,4 @@
1
+ import { HeaderLinkItemProps } from './header.types';
2
+ /** Individual link item of the Header. */
3
+ export declare const HeaderLinkItem: import("../core").VuiComponent<"li", HeaderLinkItemProps>;
4
+ export default HeaderLinkItem;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.HeaderLinkItem = void 0;
29
+ var react_1 = __importDefault(require("react"));
30
+ var core_1 = require("../core");
31
+ var list_1 = __importDefault(require("../list"));
32
+ var utils_1 = require("../utils");
33
+ var context_1 = require("./context");
34
+ /** Individual link item of the Header. */
35
+ exports.HeaderLinkItem = (0, core_1.vui)(function (props, ref) {
36
+ var _a;
37
+ var className = props.className, icon = props.icon, isActive = props.isActive, linkProps = props.linkProps, onClickProp = props.onClick, url = props.url, rest = __rest(props, ["className", "icon", "isActive", "linkProps", "onClick", "url"]);
38
+ var _b = (_a = (0, context_1.useHeaderContext)()) !== null && _a !== void 0 ? _a : {}, isMobile = _b.isMobile, setIsMobileOpen = _b.setIsMobileOpen;
39
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)()).linkItem;
40
+ var onClick = (0, utils_1.useCallbackRef)(function (e) {
41
+ setIsMobileOpen(false);
42
+ onClickProp === null || onClickProp === void 0 ? void 0 : onClickProp(e);
43
+ });
44
+ var linkActiveProps = isActive
45
+ ? isMobile
46
+ ? { bg: 'blue.10', borderLeftWidth: 6, hoverBg: 'blue.20', pl: '10px' }
47
+ : { borderBottomWidth: 4, pt: '4px' }
48
+ : {};
49
+ var itemScreenProps = isMobile ? {} : { display: 'inline-flex', fontWeight: 'medium', h: '100%' };
50
+ return (react_1.default.createElement(list_1.default.Item, __assign({ className: (0, utils_1.cs)('vui-headerLinkItem', className), iconLeft: icon, linkProps: __assign(__assign(__assign(__assign({}, linkActiveProps), { borderColor: 'prussian.80', href: url, ringInset: true, transition: 'all 0.1s, border-width 0s, padding 0s', w: { xs: '100%', md: 'max-content' } }), styles.link), linkProps), onClick: onClick, ref: ref }, itemScreenProps, styles.container, rest)));
51
+ });
52
+ exports.HeaderLinkItem.displayName = 'HeaderLinkItem';
53
+ exports.default = exports.HeaderLinkItem;
@@ -0,0 +1,4 @@
1
+ import { HeaderLinksListProps } from './header.types';
2
+ /** List of Header Links. */
3
+ export declare const HeaderLinksList: import("../core").VuiComponent<"ul", HeaderLinksListProps>;
4
+ export default HeaderLinksList;
@@ -25,17 +25,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
25
25
  return (mod && mod.__esModule) ? mod : { "default": mod };
26
26
  };
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
- exports.HeaderLinks = void 0;
28
+ exports.HeaderLinksList = void 0;
29
29
  var react_1 = __importDefault(require("react"));
30
30
  var core_1 = require("../core");
31
31
  var list_1 = __importDefault(require("../list"));
32
32
  var context_1 = require("./context");
33
- var headerLink_1 = __importDefault(require("./headerLink"));
33
+ var headerLinkItem_1 = __importDefault(require("./headerLinkItem"));
34
34
  /** List of Header Links. */
35
- exports.HeaderLinks = (0, core_1.vui)(function (props, ref) {
35
+ exports.HeaderLinksList = (0, core_1.vui)(function (props, ref) {
36
+ var _a;
36
37
  var children = props.children, links = props.links, rest = __rest(props, ["children", "links"]);
37
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)());
38
- return (react_1.default.createElement(list_1.default, __assign({ className: "vui-headerLinks", ref: ref }, styles.links, rest), children !== null && children !== void 0 ? children : links === null || links === void 0 ? void 0 : links.map(function (link, index) { return react_1.default.createElement(headerLink_1.default, __assign({ key: index }, link)); })));
38
+ var isMobile = ((_a = (0, context_1.useHeaderContext)()) !== null && _a !== void 0 ? _a : {}).isMobile;
39
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)());
40
+ var screenStyles = isMobile ? { borderBottom: '1px solid grey.40', flexDirection: 'column', mb: 1 } : { h: '100%' };
41
+ return (react_1.default.createElement(list_1.default, __assign({ className: "vui-headerLinksList", display: "flex", ref: ref }, styles.linksList, screenStyles, rest), children !== null && children !== void 0 ? children : links === null || links === void 0 ? void 0 : links.map(function (link, index) { return react_1.default.createElement(headerLinkItem_1.default, __assign({ key: index }, link)); })));
39
42
  });
40
- exports.HeaderLinks.displayName = 'HeaderLinks';
41
- exports.default = exports.HeaderLinks;
43
+ exports.HeaderLinksList.displayName = 'HeaderLinksList';
44
+ exports.default = exports.HeaderLinksList;
@@ -30,19 +30,15 @@ var react_1 = __importDefault(require("react"));
30
30
  var box_1 = __importDefault(require("../box"));
31
31
  var core_1 = require("../core");
32
32
  var svg_1 = __importDefault(require("../svg"));
33
- var utils_1 = require("../utils");
34
33
  var context_1 = require("./context");
35
- var defaultLogo = core_1.cdnUrl + "/common/icons/logos/veracity-by-dnv.svg";
34
+ var defaultLogo = core_1.cdnUrl + "/common/icons/logos/veracity-logo.svg";
36
35
  /** Logo displayed in the left corner of the Header. By default Veracity logo is used. */
37
36
  exports.HeaderLogo = (0, core_1.vui)(function (props, ref) {
38
37
  var _a = props.src, src = _a === void 0 ? defaultLogo : _a, url = props.url, rest = __rest(props, ["src", "url"]);
39
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)());
40
- var aliasedProps = (0, utils_1.filterUndefined)({
41
- as: url ? 'a' : undefined,
42
- href: url ? url : undefined
43
- });
44
- return (react_1.default.createElement(box_1.default, __assign({ className: "vui-headerLogo", maxH: 72, mr: 2, ref: ref }, styles.logo, aliasedProps, rest),
45
- react_1.default.createElement(svg_1.default, { src: src })));
38
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)()).logo;
39
+ var linkProps = url ? { as: 'a', href: url, outline: 'none', focusRing: 2 } : {};
40
+ return (react_1.default.createElement(box_1.default, __assign({ centerV: true, className: "vui-headerLogo", flexShrink: 0, h: 40, mr: 2, ref: ref }, styles.container, linkProps, rest),
41
+ react_1.default.createElement(svg_1.default, __assign({ "aria-label": "logo", h: "100%", src: src }, styles.svg))));
46
42
  });
47
43
  exports.HeaderLogo.displayName = 'HeaderLogo';
48
44
  exports.default = exports.HeaderLogo;
@@ -18,13 +18,14 @@ exports.HeaderMobileContent = void 0;
18
18
  var react_1 = __importDefault(require("react"));
19
19
  var box_1 = __importDefault(require("../box"));
20
20
  var core_1 = require("../core");
21
+ var utils_1 = require("../utils");
21
22
  var context_1 = require("./context");
22
23
  /** Displays some of the Header content when on a mobile screen. */
23
24
  exports.HeaderMobileContent = (0, core_1.vui)(function (props, ref) {
24
25
  var _a;
25
- var isMobileOpen = ((_a = (0, context_1.useHeader)()) !== null && _a !== void 0 ? _a : {}).isMobileOpen;
26
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)());
27
- return isMobileOpen ? (react_1.default.createElement(box_1.default, __assign({ bg: "white", className: "vui-headerMobileContent", column: true, position: "absolute", ref: ref, top: "100%", zIndex: "100" }, styles.mobileContent, props))) : null;
26
+ var _b = (_a = (0, context_1.useHeaderContext)()) !== null && _a !== void 0 ? _a : {}, isMobileOpen = _b.isMobileOpen, mobileContentRef = _b.mobileContentRef;
27
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)());
28
+ return isMobileOpen ? (react_1.default.createElement(box_1.default, __assign({ bg: "white", className: "vui-headerMobileContent", column: true, h: "calc(100vh - 100% - 1px)", left: 0, overflowX: "hidden", overflowY: "auto", position: "absolute", ref: (0, utils_1.mergeRefs)(ref, mobileContentRef), right: 0, top: "calc(100% + 1px)", zIndex: "100" }, styles.mobileContent, props))) : null;
28
29
  });
29
30
  exports.HeaderMobileContent.displayName = 'HeaderMobileContent';
30
31
  exports.default = exports.HeaderMobileContent;
@@ -1,4 +1,4 @@
1
- import { IconProps } from '../icon';
1
+ import { ButtonProps } from '../button';
2
2
  /** Button that toggles display of the mobile content. */
3
- export declare const HeaderMobileToggle: import("../core").VuiComponent<"svg", IconProps>;
3
+ export declare const HeaderMobileToggle: import("../core").VuiComponent<"button", ButtonProps>;
4
4
  export default HeaderMobileToggle;
@@ -16,19 +16,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.HeaderMobileToggle = void 0;
18
18
  var react_1 = __importDefault(require("react"));
19
+ var button_1 = require("../button");
19
20
  var core_1 = require("../core");
20
21
  var icon_1 = __importDefault(require("../icon"));
22
+ var utils_1 = require("../utils");
21
23
  var context_1 = require("./context");
22
24
  /** Button that toggles display of the mobile content. */
23
25
  exports.HeaderMobileToggle = (0, core_1.vui)(function (props, ref) {
24
26
  var _a;
25
- var _b = (_a = (0, context_1.useHeader)()) !== null && _a !== void 0 ? _a : {}, isMobileOpen = _b.isMobileOpen, setIsMobileOpen = _b.setIsMobileOpen;
26
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)());
27
- var icon = isMobileOpen ? 'falTimes' : 'falBars';
28
- function onClick() {
29
- setIsMobileOpen(function (s) { return !s; });
30
- }
31
- return (react_1.default.createElement(icon_1.default, __assign({ className: "vui-headerMobileToggle", cursor: "pointer", name: icon, onClick: onClick, ref: ref, scale: 2 }, styles.mobileToggle, props)));
27
+ var _b = (_a = (0, context_1.useHeaderContext)()) !== null && _a !== void 0 ? _a : {}, isMobileOpen = _b.isMobileOpen, mobileToggleRef = _b.mobileToggleRef, setIsMobileOpen = _b.setIsMobileOpen;
28
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)());
29
+ var iconName = isMobileOpen ? 'falTimes' : 'falBars';
30
+ return (react_1.default.createElement(button_1.IconButton, __assign({ className: "vui-headerMobileToggle", colorScheme: "prussian", icon: react_1.default.createElement(icon_1.default, { name: iconName, scale: 2 }), ml: 2, onClick: function () { return setIsMobileOpen(function (s) { return !s; }); }, p: "3px", ref: (0, utils_1.mergeRefs)(ref, mobileToggleRef) }, styles.mobileToggle, props)));
32
31
  });
33
32
  exports.HeaderMobileToggle.displayName = 'HeaderMobileToggle';
34
33
  exports.default = exports.HeaderMobileToggle;
@@ -33,19 +33,18 @@ exports.HeaderNotifications = void 0;
33
33
  var react_1 = __importDefault(require("react"));
34
34
  var button_1 = __importDefault(require("../button"));
35
35
  var core_1 = require("../core");
36
- var icon_1 = __importDefault(require("../icon"));
37
36
  var context_1 = require("./context");
38
- var Badge = core_1.styled.span(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n\tbackground-color: red.70;\n"], ["\n\tbackground-color: red.70;\n"
37
+ var Badge = core_1.styled.span(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n\talign-items: center;\n\tbackground-color: red.70;\n\tborder-radius: round;\n\tcolor: white;\n\tdisplay: flex;\n\tfont-size: 8px;\n\tfont-weight: medium;\n\theight: 16px;\n\tjustify-content: center;\n\tposition: absolute;\n\tright: 1px;\n\ttop: 1px;\n\twidth: 16px;\n"], ["\n\talign-items: center;\n\tbackground-color: red.70;\n\tborder-radius: round;\n\tcolor: white;\n\tdisplay: flex;\n\tfont-size: 8px;\n\tfont-weight: medium;\n\theight: 16px;\n\tjustify-content: center;\n\tposition: absolute;\n\tright: 1px;\n\ttop: 1px;\n\twidth: 16px;\n"
39
38
  /** Icon link to Veracity notifications engine with an optional number of new notifications. */
40
39
  ])));
41
40
  /** Icon link to Veracity notifications engine with an optional number of new notifications. */
42
41
  exports.HeaderNotifications = (0, core_1.vui)(function (props, ref) {
43
42
  var children = props.children, _a = props.count, count = _a === void 0 ? 0 : _a, url = props.url, rest = __rest(props, ["children", "count", "url"]);
44
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)());
45
- return (react_1.default.createElement(button_1.default, __assign({ as: "a", href: url, minW: 0, px: "7px", ref: ref }, styles.notifications, rest),
43
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)());
44
+ return (react_1.default.createElement(button_1.default, __assign({ as: "a", href: url, minW: 0, ml: 1, position: "relative", px: "7px", ref: ref, title: "Notifications", variant: "text" }, styles.notifications, rest),
46
45
  react_1.default.createElement(react_1.default.Fragment, null,
47
- react_1.default.createElement(icon_1.default, { name: "falBell" }),
48
- count > 0 && react_1.default.createElement(Badge, null, count))));
46
+ react_1.default.createElement(button_1.default.Icon, { name: "falBell" }),
47
+ count > 0 && react_1.default.createElement(Badge, null, count < 100 ? count : '99+'))));
49
48
  });
50
49
  exports.HeaderNotifications.displayName = 'HeaderNotifications';
51
50
  exports.default = exports.HeaderNotifications;
@@ -33,19 +33,23 @@ var context_1 = require("./context");
33
33
  /** Displays a list of services available to the user. */
34
34
  function HeaderServices(props) {
35
35
  var buttonProps = props.buttonProps, children = props.children, listProps = props.listProps, _a = props.services, services = _a === void 0 ? [] : _a, rest = __rest(props, ["buttonProps", "children", "listProps", "services"]);
36
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)()).services;
36
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)()).services;
37
37
  return (react_1.default.createElement(react_1.default.Fragment, null,
38
- react_1.default.createElement(core_1.RenderOnDesktop, { screen: "lg" },
39
- react_1.default.createElement(menu_1.default, __assign({}, rest),
40
- react_1.default.createElement(menu_1.default.Button, __assign({ icon: "falTh" }, styles.button, buttonProps)),
41
- react_1.default.createElement(menu_1.default.List, __assign({}, styles.list, listProps), services.map(function (_a, index) {
38
+ react_1.default.createElement(core_1.RenderOnDesktop, null,
39
+ react_1.default.createElement(menu_1.default, __assign({ offset: [0, 8], placement: "bottom-end", size: "lg" }, rest),
40
+ react_1.default.createElement(menu_1.default.Button, __assign({ colorScheme: "prussian", icon: "falTh", ml: 1, title: "My services" }, styles.button, buttonProps)),
41
+ react_1.default.createElement(menu_1.default.List, __assign({ maxH: 400, maxW: 320 }, styles.list, listProps),
42
+ react_1.default.createElement(menu_1.default.List.Heading, null, "My Services"),
43
+ services.map(function (_a, index) {
44
+ var text = _a.text, url = _a.url;
45
+ return (react_1.default.createElement(menu_1.default.Item, __assign({ isTruncated: true, key: index, linkProps: { href: url }, text: text }, styles.item)));
46
+ })))),
47
+ react_1.default.createElement(core_1.RenderOnMobile, null,
48
+ react_1.default.createElement(list_1.default, __assign({ borderBottom: "1px solid grey.40" }, styles.list, listProps),
49
+ react_1.default.createElement(list_1.default.Heading, null, "My Services"),
50
+ services.map(function (_a, index) {
42
51
  var text = _a.text, url = _a.url;
43
52
  return (react_1.default.createElement(menu_1.default.Item, __assign({ key: index, linkProps: { href: url }, text: text }, styles.item)));
44
- })))),
45
- react_1.default.createElement(core_1.RenderOnMobile, { screen: "lg" },
46
- react_1.default.createElement(list_1.default, __assign({}, styles.list, listProps), services.map(function (_a, index) {
47
- var text = _a.text, url = _a.url;
48
- return (react_1.default.createElement(menu_1.default.Item, __assign({ key: index, linkProps: { href: url }, text: text }, styles.item)));
49
- })))));
53
+ })))));
50
54
  }
51
55
  exports.default = HeaderServices;
@@ -33,7 +33,7 @@ var context_1 = require("./context");
33
33
  /** Sign in button leading to Veracity login page. */
34
34
  exports.HeaderSignIn = (0, core_1.vui)(function (props, ref) {
35
35
  var url = props.url, rest = __rest(props, ["url"]);
36
- var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeader)());
36
+ var styles = (0, core_1.useStyleConfig)('Header', (0, context_1.useHeaderContext)());
37
37
  return (react_1.default.createElement(button_1.default, __assign({ as: "a", className: "vui-headerSignIn", href: url, ref: ref }, styles.signIn, rest), "Sign in"));
38
38
  });
39
39
  exports.HeaderSignIn.displayName = 'HeaderSignIn';
@@ -0,0 +1,17 @@
1
+ import { Environment } from '../utils';
2
+ import { HeaderLinkData } from './header.types';
3
+ import { HeaderAccountSectionsData } from './headerAccount.types';
4
+ /**
5
+ * Computes Header links for the Account's sections.
6
+ * Links are selected per environment and modified based on log in state.
7
+ * @param environment current application environment
8
+ * @param isLoggedIn is current user logged in
9
+ */
10
+ export declare function getHeaderAccountSections(environment: Environment, isLoggedIn?: boolean): HeaderAccountSectionsData;
11
+ /**
12
+ * Computes Header main links.
13
+ * Links are selected per environment and modified based on log in state.
14
+ * @param environment current application environment
15
+ * @param isLoggedIn is current user logged in
16
+ */
17
+ export declare function getHeaderMainLinks(environment: Environment, isLoggedIn?: boolean): HeaderLinkData[];