@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.
- package/dist/cjs/breadcrumbs/breadcrumbs.d.ts.map +1 -1
- package/dist/cjs/breadcrumbs/breadcrumbs.js +7 -3
- package/dist/cjs/breadcrumbs/breadcrumbs.types.d.ts +0 -3
- package/dist/cjs/breadcrumbs/breadcrumbs.types.d.ts.map +1 -1
- package/dist/cjs/breadcrumbs/breadcrumbsItem.d.ts.map +1 -1
- package/dist/cjs/breadcrumbs/breadcrumbsItem.js +2 -6
- package/dist/cjs/breadcrumbs/breadcrumbsSeparator.d.ts.map +1 -1
- package/dist/cjs/breadcrumbs/breadcrumbsSeparator.js +4 -1
- package/dist/cjs/breadcrumbs/theme.d.ts +66 -4
- package/dist/cjs/breadcrumbs/theme.d.ts.map +1 -1
- package/dist/cjs/breadcrumbs/theme.js +61 -5
- package/dist/cjs/footer/footer.d.ts.map +1 -1
- package/dist/cjs/footer/footer.js +21 -4
- package/dist/cjs/footer/footer.types.d.ts +3 -0
- package/dist/cjs/footer/footer.types.d.ts.map +1 -1
- package/dist/cjs/header/header.d.ts +2 -0
- package/dist/cjs/header/header.d.ts.map +1 -1
- package/dist/cjs/header/header.js +2 -0
- package/dist/cjs/header/header.types.d.ts +14 -0
- package/dist/cjs/header/header.types.d.ts.map +1 -1
- package/dist/cjs/header/headerAccount.d.ts +1 -0
- package/dist/cjs/header/headerAccount.d.ts.map +1 -1
- package/dist/cjs/header/headerAccount.js +4 -9
- package/dist/cjs/header/headerAccountUserInfo.js +2 -2
- package/dist/cjs/header/headerLinkItem.js +2 -2
- package/dist/cjs/header/headerMainLinks.d.ts.map +1 -1
- package/dist/cjs/header/headerMainLinks.js +0 -1
- package/dist/cjs/header/headerMobileContent.d.ts.map +1 -1
- package/dist/cjs/header/headerMobileContent.js +2 -1
- package/dist/cjs/header/headerServices.d.ts.map +1 -1
- package/dist/cjs/header/headerServices.js +5 -4
- package/dist/cjs/header/headerSupport.d.ts +5 -0
- package/dist/cjs/header/headerSupport.d.ts.map +1 -0
- package/dist/cjs/header/headerSupport.js +45 -0
- package/dist/cjs/header/loggedInHeader.d.ts.map +1 -1
- package/dist/cjs/header/loggedInHeader.js +51 -8
- package/dist/cjs/icons/baseIcons/cul/culDatasetAlt.d.ts +4 -0
- package/dist/cjs/icons/baseIcons/cul/culDatasetAlt.d.ts.map +1 -0
- package/dist/cjs/icons/baseIcons/cul/culDatasetAlt.js +8 -0
- package/dist/cjs/icons/baseIcons/icons.d.ts +1 -0
- package/dist/cjs/icons/baseIcons/icons.d.ts.map +1 -1
- package/dist/cjs/icons/baseIcons/icons.js +10 -8
- package/dist/cjs/icons/baseIcons/types.d.ts +1 -1
- package/dist/cjs/icons/baseIcons/types.d.ts.map +1 -1
- package/dist/cjs/theme/components.d.ts +109 -35
- package/dist/cjs/theme/components.d.ts.map +1 -1
- package/dist/cjs/theme/defaultTheme.d.ts +109 -35
- package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
- package/dist/cjs/tree/theme.d.ts +43 -33
- package/dist/cjs/tree/theme.d.ts.map +1 -1
- package/dist/cjs/tree/theme.js +48 -43
- package/dist/cjs/tree/tree.d.ts.map +1 -1
- package/dist/cjs/tree/tree.js +4 -2
- package/dist/cjs/tree/tree.types.d.ts +10 -3
- package/dist/cjs/tree/tree.types.d.ts.map +1 -1
- package/dist/cjs/tree/treeItem.d.ts +2 -2
- package/dist/cjs/tree/treeItem.d.ts.map +1 -1
- package/dist/cjs/tree/treeItem.js +64 -43
- package/dist/cjs/tutorial/tutorialCard.d.ts.map +1 -1
- package/dist/cjs/tutorial/tutorialCard.js +3 -2
- package/dist/cjs/utils/styles.d.ts +1 -2
- package/dist/cjs/utils/styles.d.ts.map +1 -1
- package/dist/cjs/utils/styles.js +14 -6
- package/dist/esm/breadcrumbs/breadcrumbs.d.ts.map +1 -1
- package/dist/esm/breadcrumbs/breadcrumbs.js +7 -3
- package/dist/esm/breadcrumbs/breadcrumbs.types.d.ts +0 -3
- package/dist/esm/breadcrumbs/breadcrumbs.types.d.ts.map +1 -1
- package/dist/esm/breadcrumbs/breadcrumbsItem.d.ts.map +1 -1
- package/dist/esm/breadcrumbs/breadcrumbsItem.js +2 -6
- package/dist/esm/breadcrumbs/breadcrumbsSeparator.d.ts.map +1 -1
- package/dist/esm/breadcrumbs/breadcrumbsSeparator.js +6 -1
- package/dist/esm/breadcrumbs/theme.d.ts +66 -4
- package/dist/esm/breadcrumbs/theme.d.ts.map +1 -1
- package/dist/esm/breadcrumbs/theme.js +61 -5
- package/dist/esm/footer/footer.d.ts.map +1 -1
- package/dist/esm/footer/footer.js +21 -4
- package/dist/esm/footer/footer.types.d.ts +3 -0
- package/dist/esm/footer/footer.types.d.ts.map +1 -1
- package/dist/esm/header/header.d.ts +2 -0
- package/dist/esm/header/header.d.ts.map +1 -1
- package/dist/esm/header/header.js +2 -0
- package/dist/esm/header/header.types.d.ts +14 -0
- package/dist/esm/header/header.types.d.ts.map +1 -1
- package/dist/esm/header/headerAccount.d.ts +1 -0
- package/dist/esm/header/headerAccount.d.ts.map +1 -1
- package/dist/esm/header/headerAccount.js +5 -10
- package/dist/esm/header/headerAccountUserInfo.js +2 -2
- package/dist/esm/header/headerLinkItem.js +2 -2
- package/dist/esm/header/headerMainLinks.d.ts.map +1 -1
- package/dist/esm/header/headerMainLinks.js +0 -1
- package/dist/esm/header/headerMobileContent.d.ts.map +1 -1
- package/dist/esm/header/headerMobileContent.js +3 -2
- package/dist/esm/header/headerServices.d.ts.map +1 -1
- package/dist/esm/header/headerServices.js +5 -4
- package/dist/esm/header/headerSupport.d.ts +5 -0
- package/dist/esm/header/headerSupport.d.ts.map +1 -0
- package/dist/esm/header/headerSupport.js +27 -0
- package/dist/esm/header/loggedInHeader.d.ts.map +1 -1
- package/dist/esm/header/loggedInHeader.js +46 -9
- package/dist/esm/icons/baseIcons/cul/culDatasetAlt.d.ts +4 -0
- package/dist/esm/icons/baseIcons/cul/culDatasetAlt.d.ts.map +1 -0
- package/dist/esm/icons/baseIcons/cul/culDatasetAlt.js +6 -0
- package/dist/esm/icons/baseIcons/icons.d.ts +1 -0
- package/dist/esm/icons/baseIcons/icons.d.ts.map +1 -1
- package/dist/esm/icons/baseIcons/icons.js +1 -0
- package/dist/esm/icons/baseIcons/types.d.ts +1 -1
- package/dist/esm/icons/baseIcons/types.d.ts.map +1 -1
- package/dist/esm/theme/components.d.ts +109 -35
- package/dist/esm/theme/components.d.ts.map +1 -1
- package/dist/esm/theme/defaultTheme.d.ts +109 -35
- package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
- package/dist/esm/tree/theme.d.ts +43 -33
- package/dist/esm/tree/theme.d.ts.map +1 -1
- package/dist/esm/tree/theme.js +48 -43
- package/dist/esm/tree/tree.d.ts.map +1 -1
- package/dist/esm/tree/tree.js +4 -2
- package/dist/esm/tree/tree.types.d.ts +10 -3
- package/dist/esm/tree/tree.types.d.ts.map +1 -1
- package/dist/esm/tree/treeItem.d.ts +2 -2
- package/dist/esm/tree/treeItem.d.ts.map +1 -1
- package/dist/esm/tree/treeItem.js +63 -45
- package/dist/esm/tutorial/tutorialCard.d.ts.map +1 -1
- package/dist/esm/tutorial/tutorialCard.js +3 -2
- package/dist/esm/utils/styles.d.ts +1 -2
- package/dist/esm/utils/styles.d.ts.map +1 -1
- package/dist/esm/utils/styles.js +12 -4
- package/package.json +1 -1
- package/src/breadcrumbs/breadcrumbs.tsx +14 -3
- package/src/breadcrumbs/breadcrumbs.types.ts +0 -3
- package/src/breadcrumbs/breadcrumbsItem.tsx +2 -7
- package/src/breadcrumbs/breadcrumbsSeparator.tsx +11 -5
- package/src/breadcrumbs/theme.ts +61 -5
- package/src/footer/footer.tsx +71 -4
- package/src/footer/footer.types.ts +3 -0
- package/src/header/header.tsx +3 -0
- package/src/header/header.types.ts +15 -0
- package/src/header/headerAccount.tsx +6 -14
- package/src/header/headerAccountUserInfo.tsx +2 -2
- package/src/header/headerLinkItem.tsx +2 -2
- package/src/header/headerMainLinks.tsx +0 -1
- package/src/header/headerMobileContent.tsx +4 -3
- package/src/header/headerServices.tsx +12 -4
- package/src/header/headerSupport.tsx +76 -0
- package/src/header/loggedInHeader.tsx +130 -13
- package/src/icons/baseIcons/cul/culDatasetAlt.ts +9 -0
- package/src/icons/baseIcons/icons.ts +1 -0
- package/src/icons/baseIcons/types.ts +1 -0
- package/src/tree/theme.ts +50 -49
- package/src/tree/tree.tsx +10 -16
- package/src/tree/tree.types.ts +10 -3
- package/src/tree/treeItem.tsx +89 -61
- package/src/tutorial/tutorialCard.tsx +4 -2
- package/src/utils/styles.ts +15 -6
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ReactNode, ReactText } from 'react';
|
|
2
2
|
import { IconProp } from '../icon';
|
|
3
3
|
import { LinkProps } from '../link';
|
|
4
|
+
import { ListItemProps } from '../list';
|
|
4
5
|
import { SystemProps } from '../system';
|
|
5
6
|
import { ThemingProps } from '../theme';
|
|
6
7
|
import { PropsOf } from '../utils';
|
|
@@ -12,7 +13,7 @@ export declare type TreeProps = SystemProps & ThemingProps<'Tree'> & {
|
|
|
12
13
|
/** Socket defining the expand icon on the left. */
|
|
13
14
|
iconExpand?: IconProp;
|
|
14
15
|
/** Socket displaying a tree of items. */
|
|
15
|
-
items?: PropsOf<'
|
|
16
|
+
items?: PropsOf<'li', TreeItemProps>[] | JSX.Element;
|
|
16
17
|
/** Socket defining the size of the tree. */
|
|
17
18
|
onClickItem?: (id: TreeItemId) => void;
|
|
18
19
|
};
|
|
@@ -22,7 +23,7 @@ export declare type TreeOnToggleEvent = {
|
|
|
22
23
|
id: TreeItemId;
|
|
23
24
|
collapsed: boolean;
|
|
24
25
|
};
|
|
25
|
-
export declare type TreeItemProps =
|
|
26
|
+
export declare type TreeItemProps = ListItemProps & ThemingProps<'Tree'> & {
|
|
26
27
|
activeItemId?: TreeItemId;
|
|
27
28
|
/** internal, not exposed */
|
|
28
29
|
activeItemIndex?: TreeItemId;
|
|
@@ -39,16 +40,22 @@ export declare type TreeItemProps = SystemProps & ThemingProps<'Tree'> & {
|
|
|
39
40
|
/** Socket defining the expand icon on the left. */
|
|
40
41
|
iconExpand?: IconProp;
|
|
41
42
|
/** The children of this tree item. */
|
|
42
|
-
items?: PropsOf<'
|
|
43
|
+
items?: PropsOf<'li', TreeItemProps>[];
|
|
43
44
|
children?: ReactNode;
|
|
44
45
|
/** Collapsed state */
|
|
45
46
|
isCollapsed?: boolean;
|
|
47
|
+
/** indicates if the item is first-level; if yes it can be styled differently */
|
|
48
|
+
isFirstLevel?: boolean;
|
|
46
49
|
/** Displays item and its content in disabled state with appropriate styling. */
|
|
47
50
|
disabled?: boolean;
|
|
48
51
|
/** Displays item in selected state with appropriate styling. */
|
|
49
52
|
isActive?: boolean;
|
|
50
53
|
/** If provided, content is wrapper with a link and the props are provided to the element. */
|
|
51
54
|
linkProps?: TreeItemLinkProps;
|
|
55
|
+
/** internal, padding left; if provided it will accumulate function of levels. */
|
|
56
|
+
propagatedPL?: number;
|
|
57
|
+
/** Socket defining the size of the padding increment. */
|
|
58
|
+
plUnit?: number;
|
|
52
59
|
/** Socket displaying text within the item. */
|
|
53
60
|
text: ReactText | JSX.Element;
|
|
54
61
|
/** Collapse change state */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.types.d.ts","sourceRoot":"","sources":["../../../src/tree/tree.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElC,oBAAY,SAAS,GAAG,WAAW,GACjC,YAAY,CAAC,MAAM,CAAC,GAAG;IACrB,gCAAgC;IAChC,YAAY,CAAC,EAAE,UAAU,CAAA;IACzB,qDAAqD;IACrD,YAAY,CAAC,EAAE,QAAQ,CAAA;IACvB,mDAAmD;IACnD,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"tree.types.d.ts","sourceRoot":"","sources":["../../../src/tree/tree.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElC,oBAAY,SAAS,GAAG,WAAW,GACjC,YAAY,CAAC,MAAM,CAAC,GAAG;IACrB,gCAAgC;IAChC,YAAY,CAAC,EAAE,UAAU,CAAA;IACzB,qDAAqD;IACrD,YAAY,CAAC,EAAE,QAAQ,CAAA;IACvB,mDAAmD;IACnD,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,CAAA;IACpD,4CAA4C;IAC5C,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,IAAI,CAAA;CACvC,CAAA;AAEH,oBAAY,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,MAAM,CAAA;AAEhE,oBAAY,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;AAExC,oBAAY,iBAAiB,GAAG;IAC9B,EAAE,EAAE,UAAU,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,oBAAY,aAAa,GAAG,aAAa,GACvC,YAAY,CAAC,MAAM,CAAC,GAAG;IACrB,YAAY,CAAC,EAAE,UAAU,CAAA;IACzB,4BAA4B;IAC5B,eAAe,CAAC,EAAE,UAAU,CAAA;IAC5B,gBAAgB;IAChB,EAAE,EAAE,UAAU,CAAA;IACd,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,qDAAqD;IACrD,YAAY,CAAC,EAAE,QAAQ,CAAA;IACvB,mDAAmD;IACnD,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAA;IACtC,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,sBAAsB;IACtB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,CAAA;IAC7B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;IAC7C,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,IAAI,CAAA;CAC3C,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { TreeItemProps } from './tree.types';
|
|
2
|
-
export declare const TreeItemBase: import("styled-components").StyledComponent<"
|
|
2
|
+
export declare const TreeItemBase: import("styled-components").StyledComponent<"li", import("styled-components").DefaultTheme, import("..").SystemProps, never>;
|
|
3
3
|
/**
|
|
4
4
|
* Displays a tree item with text and optional icons. Can be shown as selected.
|
|
5
5
|
*/
|
|
6
|
-
export declare const TreeItem: import("../core").VuiComponent<"
|
|
6
|
+
export declare const TreeItem: import("../core").VuiComponent<"li", TreeItemProps>;
|
|
7
7
|
export default TreeItem;
|
|
8
8
|
//# sourceMappingURL=treeItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeItem.d.ts","sourceRoot":"","sources":["../../../src/tree/treeItem.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"treeItem.d.ts","sourceRoot":"","sources":["../../../src/tree/treeItem.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAK5C,eAAO,MAAM,YAAY,8HAKxB,CAAA;AAGD;;GAEG;AACH,eAAO,MAAM,QAAQ,qDAmLnB,CAAA;AAEF,eAAe,QAAQ,CAAA"}
|
|
@@ -1,34 +1,30 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
|
2
2
|
import { Box } from '../box';
|
|
3
3
|
import { styled, useStyleConfig, vui } from '../core';
|
|
4
|
-
import {
|
|
4
|
+
import { List } from '../list';
|
|
5
|
+
import { cs, isArray, isReactText, vuiColorToRGBA } from '../utils';
|
|
5
6
|
import { useTreeContext } from './context';
|
|
6
7
|
import TreeIcon from './treeIcon';
|
|
7
8
|
import TreeText from './treeText';
|
|
8
|
-
|
|
9
|
+
/*@formatter:off*/
|
|
10
|
+
export const TreeItemBase = styled.liBox `
|
|
9
11
|
display: flex;
|
|
10
12
|
flex-direction: column;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
align-content: flex-start;
|
|
14
|
-
align-items: flex-start;
|
|
15
|
-
overflow: visible;
|
|
16
|
-
height: auto;
|
|
17
|
-
|
|
18
|
-
& [aria-disabled='true'] {
|
|
19
|
-
cursor: not-allowed;
|
|
20
|
-
user-select: none;
|
|
21
|
-
}
|
|
13
|
+
transition-duration: fast;
|
|
14
|
+
width: 100%;
|
|
22
15
|
`;
|
|
16
|
+
/*@formatter:on*/
|
|
23
17
|
/**
|
|
24
18
|
* Displays a tree item with text and optional icons. Can be shown as selected.
|
|
25
19
|
*/
|
|
26
20
|
export const TreeItem = vui((props, ref) => {
|
|
27
21
|
const mergedProps = { ...useTreeContext(), ...props };
|
|
28
|
-
const { activeItemId, activeItemIndex, children, center, centerH, centerV = true, className, iconCollapse = 'falMinus', isCollapsed, disabled, iconExpand = 'falPlus', id, items, isActive, isTruncated, key, onClickTreeItem, onToggle, text, ...rest } = mergedProps;
|
|
22
|
+
const { activeItemId, activeItemIndex, children, center, centerH, centerV = true, className, iconCollapse = 'falMinus', isCollapsed, disabled, iconExpand = 'falPlus', id, items, isActive, isFirstLevel, isTruncated, key, onClickTreeItem, onToggle, propagatedPL, plUnit = 26, text, ...rest } = mergedProps;
|
|
29
23
|
const styles = useStyleConfig('Tree', useTreeContext());
|
|
30
|
-
const { activeBg, h, hoverBg, p, px, py, selectedBg, ...itemStyles } = styles.item;
|
|
24
|
+
const { activeBg, bg, color, h, hoverBg, hoverColor, p, px, py, selectedBg, ...itemStyles } = styles.item;
|
|
31
25
|
const [collapsedInternal, setIsCollapsedInternal] = useState(false);
|
|
26
|
+
const innerBoxPl = propagatedPL || 0;
|
|
27
|
+
const innerListPl = innerBoxPl + (plUnit || 0);
|
|
32
28
|
useEffect(() => {
|
|
33
29
|
setIsCollapsedInternal(!!isCollapsed);
|
|
34
30
|
}, [isCollapsed]);
|
|
@@ -44,47 +40,69 @@ export const TreeItem = vui((props, ref) => {
|
|
|
44
40
|
// Avoids triggering parent's onClick
|
|
45
41
|
e.stopPropagation();
|
|
46
42
|
};
|
|
47
|
-
const interactiveProps = !disabled
|
|
48
|
-
? {
|
|
49
|
-
cursor: 'pointer',
|
|
50
|
-
focusVisibleRing: 2,
|
|
51
|
-
hoverBg: 'transparent',
|
|
52
|
-
activeBg: 'transparent',
|
|
53
|
-
userSelect: 'none'
|
|
54
|
-
}
|
|
55
|
-
: {};
|
|
56
43
|
const hoverTreeItem = (e, type) => {
|
|
57
44
|
const target = e.target;
|
|
45
|
+
let parentDiv = undefined;
|
|
58
46
|
if (target.classList.contains('vui-treeItem-permanent')) {
|
|
59
|
-
|
|
60
|
-
|
|
47
|
+
parentDiv = target;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const parentLi = target.closest('.vui-treeItem');
|
|
51
|
+
parentDiv = parentLi?.getElementsByClassName('vui-treeItem-permanent')[0];
|
|
52
|
+
}
|
|
53
|
+
const isDivActive = parentDiv.classList.contains('vui-treeItem-active') ? true : false;
|
|
54
|
+
// translate the list-item style over to the div
|
|
55
|
+
if (parentDiv.classList.contains('vui-treeItem-permanent')) {
|
|
56
|
+
// is it a fist level item?
|
|
57
|
+
if (parentDiv.classList.contains('vui-treeItem-firstLevel')) {
|
|
58
|
+
if (type === 'over') {
|
|
59
|
+
parentDiv.style.backgroundColor = vuiColorToRGBA(styles?.firstLevelItem?.hoverBg || 'transparent');
|
|
60
|
+
}
|
|
61
|
+
if (type === 'out') {
|
|
62
|
+
parentDiv.style.backgroundColor = isDivActive
|
|
63
|
+
? vuiColorToRGBA(styles?.firstLevelItem?.activeBg || 'transparent')
|
|
64
|
+
: vuiColorToRGBA(styles?.firstLevelItem?.bg || 'transparent');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// it is NOT first level
|
|
69
|
+
if (type === 'over') {
|
|
70
|
+
parentDiv.style.backgroundColor = vuiColorToRGBA(styles?.item?.hoverBg || 'transparent');
|
|
71
|
+
}
|
|
72
|
+
if (type === 'out') {
|
|
73
|
+
parentDiv.style.backgroundColor = isDivActive
|
|
74
|
+
? vuiColorToRGBA(styles?.item?.activeBg || 'transparent')
|
|
75
|
+
: vuiColorToRGBA(styles?.item?.bg || 'transparent');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
61
78
|
}
|
|
62
79
|
else {
|
|
63
80
|
e.preventDefault();
|
|
64
|
-
const permanent = target
|
|
65
|
-
.closest('.vui-treeItem')
|
|
66
|
-
?.getElementsByClassName('vui-treeItem-permanent')[0];
|
|
67
|
-
const collapsible = target
|
|
68
|
-
.closest('.vui-treeItem')
|
|
69
|
-
?.getElementsByClassName('vui-treeItem-collapsible')[0];
|
|
70
|
-
const active = target.closest('.vui-treeItem')?.getElementsByClassName('vui-treeItem-active')[0];
|
|
71
|
-
permanent ? (permanent.style.backgroundColor = type === 'over' ? '#e2f1ff' : 'transparent') : null;
|
|
72
|
-
collapsible ? (collapsible.style.backgroundColor = 'transparent') : null;
|
|
73
|
-
active ? (active.style.backgroundColor = 'hsl(139, 100%, 90%)') : null;
|
|
74
81
|
}
|
|
82
|
+
e.stopPropagation();
|
|
75
83
|
};
|
|
76
84
|
const isCollapsable = (isArray(children) && children.length > 0) || (isArray(items) && items.length > 0);
|
|
77
85
|
const isActiveInternal = (!activeItemIndex && isActive) || activeItemIndex === id;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
let textMl = items && items?.length > 0 ? 0 : 1.5;
|
|
87
|
+
if (!isCollapsable) {
|
|
88
|
+
textMl += 3.8;
|
|
89
|
+
}
|
|
90
|
+
// hoverBg cannot be styled directly from theme, it has to be JS manipulated because of event propagation
|
|
91
|
+
return (React.createElement(TreeItemBase, { className: cs('vui-treeItem', isFirstLevel ? 'vui-treeItem-firstLevel' : '', className), color: isFirstLevel ? styles?.firstLevelItem?.color : color, h: collapsedInternal ? h : isCollapsable ? 'auto' : h, id: id.toString(), m: 0, onClick: !disabled ? (e) => toggle(e) : undefined, onMouseOut: !disabled ? (e) => hoverTreeItem(e, 'out') : undefined, onMouseOver: !disabled ? (e) => hoverTreeItem(e, 'over') : undefined, p: 0, propagatedPL: propagatedPL, ref: ref, w: 1, ...itemStyles, bg: isFirstLevel
|
|
92
|
+
? isActiveInternal
|
|
93
|
+
? styles?.firstLevelItem?.activeBg
|
|
94
|
+
: styles?.firstLevelItem?.bg
|
|
95
|
+
: isActiveInternal
|
|
96
|
+
? styles?.item?.activeBg
|
|
97
|
+
: bg, hoverBg: undefined, ...rest },
|
|
98
|
+
React.createElement(React.Fragment, null,
|
|
99
|
+
React.createElement(Box, { centerV: true, className: cs('vui-treeItem-permanent', isActiveInternal ? 'vui-treeItem-active' : '', isFirstLevel ? 'vui-treeItem-firstLevel' : ''), fontWeight: isActiveInternal ? '600' : '500', pl: `${innerBoxPl}px` },
|
|
100
|
+
items && items?.length > 0 && (React.createElement(React.Fragment, null, collapsedInternal ? React.createElement(TreeIcon, { mx: 1.5, name: iconExpand }) : React.createElement(TreeIcon, { mx: 1.5, name: iconCollapse }))),
|
|
101
|
+
isReactText(text) ? React.createElement(TreeText, { ml: textMl, ...{ isTruncated, text } }) : text),
|
|
102
|
+
isCollapsable && !collapsedInternal && (React.createElement(List, { w: 1 }, children ??
|
|
85
103
|
(isArray(items)
|
|
86
|
-
? items.map(({ key, ...props }, index) => {
|
|
87
|
-
return (React.createElement(TreeItem, { activeItemIndex: activeItemIndex, iconCollapse: iconCollapse, iconExpand: iconExpand, key: key ?? index, onClickTreeItem: onClickTreeItem, ...props }));
|
|
104
|
+
? items.map(({ key, propagatedPL, ...props }, index) => {
|
|
105
|
+
return (React.createElement(TreeItem, { activeItemIndex: activeItemIndex, iconCollapse: iconCollapse, iconExpand: iconExpand, key: key ?? index, onClickTreeItem: onClickTreeItem, propagatedPL: innerListPl, ...props }));
|
|
88
106
|
})
|
|
89
107
|
: items))))));
|
|
90
108
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tutorialCard.d.ts","sourceRoot":"","sources":["../../../src/tutorial/tutorialCard.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAyC,MAAM,kBAAkB,CAAA;AAG3F,wBAAgB,YAAY,CAAC,EAC3B,WAAsB,EACtB,SAAS,EACT,KAAK,EACL,YAAY,EACZ,KAAK,EAAE,UAAe,EACtB,cAAc,EACd,QAAQ,EACR,SAAS,EACT,QAAQ,EACT,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"tutorialCard.d.ts","sourceRoot":"","sources":["../../../src/tutorial/tutorialCard.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAyC,MAAM,kBAAkB,CAAA;AAG3F,wBAAgB,YAAY,CAAC,EAC3B,WAAsB,EACtB,SAAS,EACT,KAAK,EACL,YAAY,EACZ,KAAK,EAAE,UAAe,EACtB,cAAc,EACd,QAAQ,EACR,SAAS,EACT,QAAQ,EACT,EAAE,iBAAiB,eAuHnB"}
|
|
@@ -33,6 +33,7 @@ export function TutorialCard({ actionLabel = 'Action', className, title, readMor
|
|
|
33
33
|
showSkipButton && !isFinalStep && (React.createElement(Button, { mr: 2, onClick: onDismiss, variant: "primaryLight" }, "Skip")),
|
|
34
34
|
isFinalStep && (React.createElement(Button, { mr: 2, onClick: onFinish, variant: "primaryLight" }, "Finish")),
|
|
35
35
|
!!onAction && (React.createElement(Button, { mr: 6, onClick: onAction, variant: "primaryLight" },
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
React.createElement(React.Fragment, null,
|
|
37
|
+
actionLabel,
|
|
38
|
+
onAction))))))));
|
|
38
39
|
}
|
|
@@ -7,10 +7,9 @@ export declare function parseHSL(color: string): {
|
|
|
7
7
|
s: number;
|
|
8
8
|
l: number;
|
|
9
9
|
};
|
|
10
|
-
/** Builds RGBA string. */
|
|
11
|
-
export declare const buildRGBA: (r: number, g: number, b: number, alpha?: number) => string;
|
|
12
10
|
/** Converts hex color value to rgb with optional alpha property. */
|
|
13
11
|
export declare function hexToRGBA(hex: string, alpha?: number): string;
|
|
12
|
+
export declare function vuiColorToRGBA(color: string, alpha?: number): string;
|
|
14
13
|
/** Converts hsl color value to rgb with optional alpha property. */
|
|
15
14
|
export declare function HSLToRGBA(h: number, s: number, l: number, alpha?: number): string;
|
|
16
15
|
/** Styling to add ellipsis for long texts. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/utils/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/utils/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIlC,+EAA+E;AAC/E,wBAAgB,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,EAAE,UAEtC;AAED,6BAA6B;AAC7B,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM;;;;EAIrC;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,UAgBpD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,UAS3D;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,UA0CxE;AAED,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB;;;;CAI5B,CAAA"}
|
package/dist/esm/utils/styles.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { colors } from '../theme';
|
|
1
2
|
/** Concatenates individual className arguments and returns a single string. */
|
|
2
3
|
export function cs(...classNames) {
|
|
3
4
|
return classNames.filter(Boolean).join(' ');
|
|
@@ -8,8 +9,6 @@ export function parseHSL(color) {
|
|
|
8
9
|
const res = regexp?.exec?.(color)?.slice?.(1);
|
|
9
10
|
return { h: Number(res?.[0]) || 0, s: Number(res?.[1]) || 0, l: Number(res?.[2]) || 0 };
|
|
10
11
|
}
|
|
11
|
-
/** Builds RGBA string. */
|
|
12
|
-
export const buildRGBA = (r, g, b, alpha) => alpha !== undefined ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgb(${r}, ${g}, ${b})`;
|
|
13
12
|
/** Converts hex color value to rgb with optional alpha property. */
|
|
14
13
|
export function hexToRGBA(hex, alpha) {
|
|
15
14
|
let hexStr = hex;
|
|
@@ -23,7 +22,16 @@ export function hexToRGBA(hex, alpha) {
|
|
|
23
22
|
const r = parseInt(hexStr.slice(0, 2), 16);
|
|
24
23
|
const g = parseInt(hexStr.slice(2, 4), 16);
|
|
25
24
|
const b = parseInt(hexStr.slice(4, 6), 16);
|
|
26
|
-
return
|
|
25
|
+
return alpha !== undefined ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgb(${r}, ${g}, ${b})`;
|
|
26
|
+
}
|
|
27
|
+
export function vuiColorToRGBA(color, alpha) {
|
|
28
|
+
if (!color.includes('.'))
|
|
29
|
+
return 'transparent';
|
|
30
|
+
const [colorName, shade] = color.split('.');
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
const x = parseHSL(colors[colorName][shade]);
|
|
34
|
+
return HSLToRGBA(x.h, x.s, x.l, alpha || shade === 'main' ? 1 : parseInt(shade));
|
|
27
35
|
}
|
|
28
36
|
/** Converts hsl color value to rgb with optional alpha property. */
|
|
29
37
|
export function HSLToRGBA(h, s, l, alpha) {
|
|
@@ -64,7 +72,7 @@ export function HSLToRGBA(h, s, l, alpha) {
|
|
|
64
72
|
r = Math.round((r + m) * 255);
|
|
65
73
|
g = Math.round((g + m) * 255);
|
|
66
74
|
b = Math.round((b + m) * 255);
|
|
67
|
-
return
|
|
75
|
+
return alpha !== undefined ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgb(${r}, ${g}, ${b})`;
|
|
68
76
|
}
|
|
69
77
|
/** Styling to add ellipsis for long texts. */
|
|
70
78
|
export const ellipsisOverflow = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veracity/vui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0-rc.1",
|
|
4
4
|
"description": "Veracity UI is a React component library crafted for use within Veracity applications and pages. Based on Styled Components and @xstyled.",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -11,18 +11,29 @@ export const BreadcrumbsBase = styled.divBox`
|
|
|
11
11
|
display: flex;
|
|
12
12
|
min-width: 0;
|
|
13
13
|
transition-duration: normal;
|
|
14
|
+
|
|
15
|
+
.vui-breadcrumbs-item:last-of-type {
|
|
16
|
+
font-weight: 600;
|
|
17
|
+
}
|
|
14
18
|
`
|
|
15
19
|
|
|
16
20
|
/** Breadcrumbs consist of a list of items that help a user visualize a page's location within the hierarchical structure of a website, and allow correspondent navigation. */
|
|
17
21
|
export const Breadcrumbs = vui<'div', BreadcrumbsProps>((props, ref) => {
|
|
18
|
-
const { children, className, size, ...rest } = props
|
|
22
|
+
const { children, className, size, variant, ...rest } = props
|
|
19
23
|
const styles = useStyleConfig('Breadcrumbs', props)
|
|
20
|
-
const context = useMemo(() => filterUndefined({ size }), [size])
|
|
24
|
+
const context = useMemo(() => filterUndefined({ size, variant }), [size, variant])
|
|
21
25
|
const aliasedProps = filterUndefined<BreadcrumbsProps>({})
|
|
22
26
|
const arrayChildren = Children.toArray(children)
|
|
27
|
+
|
|
23
28
|
return (
|
|
24
29
|
<BreadcrumbsProvider value={context}>
|
|
25
|
-
<BreadcrumbsBase
|
|
30
|
+
<BreadcrumbsBase
|
|
31
|
+
className={cs('vui-breadcrumbs', className)}
|
|
32
|
+
ref={ref}
|
|
33
|
+
{...styles.main}
|
|
34
|
+
{...aliasedProps}
|
|
35
|
+
{...rest}
|
|
36
|
+
>
|
|
26
37
|
{Children.map(arrayChildren, (child, key) => (
|
|
27
38
|
<Fragment key={key}>
|
|
28
39
|
{child}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ReactNode } from 'react'
|
|
2
2
|
|
|
3
3
|
import { BoxProps } from '../box'
|
|
4
|
-
import { IconProp } from '../icon'
|
|
5
4
|
import { SystemProps } from '../system'
|
|
6
5
|
import { ThemingProps } from '../theme'
|
|
7
6
|
|
|
@@ -12,8 +11,6 @@ export type BreadcrumbsItemProps = BoxProps & {
|
|
|
12
11
|
className?: string
|
|
13
12
|
/** Content */
|
|
14
13
|
children?: ReactNode
|
|
15
|
-
/** Icon */
|
|
16
|
-
icon?: IconProp
|
|
17
14
|
}
|
|
18
15
|
|
|
19
16
|
export type BreadcrumbsSeparatorProps = BoxProps & {
|
|
@@ -2,28 +2,23 @@ import React from 'react'
|
|
|
2
2
|
|
|
3
3
|
import { Box } from '../box'
|
|
4
4
|
import { omitThemingProps, useStyleConfig, vui, VuiComponent } from '../core'
|
|
5
|
-
import { Icon } from '../icon'
|
|
6
5
|
import { cs } from '../utils'
|
|
7
6
|
import { BreadcrumbsItemProps } from './breadcrumbs.types'
|
|
8
7
|
import { useBreadcrumbsContext } from './context'
|
|
9
8
|
|
|
10
9
|
/** A Breadcrumb item. */
|
|
11
10
|
export const BreadcrumbsItem = vui<'div', BreadcrumbsItemProps>((props, ref) => {
|
|
12
|
-
const { className, children,
|
|
11
|
+
const { className, children, ...rest } = omitThemingProps(props)
|
|
13
12
|
const styles = useStyleConfig('Breadcrumbs', useBreadcrumbsContext())
|
|
14
|
-
const color = rest.color || 'darkBlue.main'
|
|
15
|
-
|
|
16
13
|
return (
|
|
17
14
|
<Box
|
|
18
15
|
alignItems="center"
|
|
19
16
|
className={cs('vui-breadcrumbs-item', className)}
|
|
20
|
-
color={color}
|
|
21
17
|
p={0}
|
|
22
18
|
ref={ref}
|
|
23
|
-
{...rest}
|
|
24
19
|
{...styles.item}
|
|
20
|
+
{...rest}
|
|
25
21
|
>
|
|
26
|
-
{!!icon && <Icon name={icon} pathFill={color} size="sm" />}
|
|
27
22
|
{children}
|
|
28
23
|
</Box>
|
|
29
24
|
)
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
|
|
3
3
|
import { Box } from '../box'
|
|
4
|
+
import { useStyleConfig } from '../core'
|
|
4
5
|
import { Icon } from '../icon'
|
|
5
6
|
import { cs } from '../utils'
|
|
6
7
|
import { BreadcrumbsSeparatorProps } from './breadcrumbs.types'
|
|
8
|
+
import { useBreadcrumbsContext } from './context'
|
|
7
9
|
|
|
8
10
|
/** Breadcrumbs separator. */
|
|
9
|
-
export const BreadcrumbsSeparator = ({ className, children, content, ...rest }: BreadcrumbsSeparatorProps) =>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
)
|
|
11
|
+
export const BreadcrumbsSeparator = ({ className, children, content, ...rest }: BreadcrumbsSeparatorProps) => {
|
|
12
|
+
const styles = useStyleConfig('Breadcrumbs', useBreadcrumbsContext())
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<Box alignItems="center" className={cs('vui-breadcrumbs-separator', className)} p={0} {...rest}>
|
|
16
|
+
{content || children || <Icon name="falAngleRight" {...styles.separator} />}
|
|
17
|
+
</Box>
|
|
18
|
+
)
|
|
19
|
+
}
|
|
14
20
|
|
|
15
21
|
export default BreadcrumbsSeparator
|
package/src/breadcrumbs/theme.ts
CHANGED
|
@@ -1,22 +1,78 @@
|
|
|
1
1
|
const baseStyle = {}
|
|
2
2
|
|
|
3
3
|
const defaultProps = {
|
|
4
|
-
size: 'md'
|
|
4
|
+
size: 'md',
|
|
5
|
+
variant: 'dark'
|
|
5
6
|
}
|
|
6
7
|
|
|
7
8
|
const sizes = {
|
|
9
|
+
xs: {
|
|
10
|
+
item: {
|
|
11
|
+
fontSize: 12,
|
|
12
|
+
lineHeight: '18px'
|
|
13
|
+
},
|
|
14
|
+
separator: {
|
|
15
|
+
size: 'xs'
|
|
16
|
+
}
|
|
17
|
+
},
|
|
8
18
|
sm: {
|
|
9
|
-
item: {
|
|
19
|
+
item: {
|
|
20
|
+
fontSize: 14,
|
|
21
|
+
lineHeight: '22px'
|
|
22
|
+
},
|
|
23
|
+
separator: {
|
|
24
|
+
size: 'sm'
|
|
25
|
+
}
|
|
10
26
|
},
|
|
11
27
|
md: {
|
|
12
|
-
item: {}
|
|
28
|
+
item: { fontSize: 16, lineHeight: '26px' },
|
|
29
|
+
separator: {
|
|
30
|
+
size: 'md'
|
|
31
|
+
}
|
|
13
32
|
},
|
|
14
33
|
lg: {
|
|
15
|
-
item: {}
|
|
34
|
+
item: { fontSize: 18, lineHeight: '32px' },
|
|
35
|
+
separator: {
|
|
36
|
+
size: 'lg'
|
|
37
|
+
}
|
|
16
38
|
}
|
|
17
39
|
}
|
|
18
40
|
|
|
19
|
-
const variants = {
|
|
41
|
+
const variants = {
|
|
42
|
+
dark: {
|
|
43
|
+
item: {
|
|
44
|
+
color: 'seaBlue.main'
|
|
45
|
+
},
|
|
46
|
+
main: {
|
|
47
|
+
bg: 'transparent'
|
|
48
|
+
},
|
|
49
|
+
separator: {
|
|
50
|
+
pathFill: 'sandstone.10'
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
white: {
|
|
54
|
+
item: {
|
|
55
|
+
color: 'white'
|
|
56
|
+
},
|
|
57
|
+
main: {
|
|
58
|
+
bg: 'darkBlue.main'
|
|
59
|
+
},
|
|
60
|
+
separator: {
|
|
61
|
+
pathFill: 'white'
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
light: {
|
|
65
|
+
item: {
|
|
66
|
+
color: 'digiGreen.main'
|
|
67
|
+
},
|
|
68
|
+
main: {
|
|
69
|
+
bg: 'darkBlue.main'
|
|
70
|
+
},
|
|
71
|
+
separator: {
|
|
72
|
+
pathFill: 'white'
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
20
76
|
|
|
21
77
|
export default {
|
|
22
78
|
baseStyle,
|
package/src/footer/footer.tsx
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
|
|
3
|
+
import { Box } from '../box'
|
|
3
4
|
import { styled, useDown, useStyleConfig, vui, VuiComponent } from '../core'
|
|
4
5
|
import { Divider } from '../divider'
|
|
5
6
|
import { Link } from '../link'
|
|
@@ -26,12 +27,30 @@ export const FooterBase = styled.divBox`
|
|
|
26
27
|
|
|
27
28
|
/** Branded Veracity Footer with trademark and links sections. Controls max-width of the content. */
|
|
28
29
|
export const Footer = vui<'div', FooterProps>((props, ref) => {
|
|
29
|
-
const {
|
|
30
|
+
const {
|
|
31
|
+
applicationLinks,
|
|
32
|
+
applicationStaticItems = [],
|
|
33
|
+
children,
|
|
34
|
+
className,
|
|
35
|
+
columns,
|
|
36
|
+
isApplication = false,
|
|
37
|
+
linkedIn,
|
|
38
|
+
size,
|
|
39
|
+
variant,
|
|
40
|
+
isSlim,
|
|
41
|
+
...rest
|
|
42
|
+
} = props
|
|
30
43
|
|
|
31
44
|
const context = { size, variant }
|
|
32
45
|
|
|
33
46
|
const styles = useStyleConfig('Footer', props)
|
|
34
47
|
|
|
48
|
+
if (isApplication) {
|
|
49
|
+
if (!applicationLinks) {
|
|
50
|
+
console.error('Footer: isApplication is true but applicationLinks is not set.')
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
35
54
|
const slimLinks: FooterLinkData[] = [
|
|
36
55
|
{
|
|
37
56
|
id: 'home',
|
|
@@ -58,13 +77,61 @@ export const Footer = vui<'div', FooterProps>((props, ref) => {
|
|
|
58
77
|
return (
|
|
59
78
|
<FooterProvider value={context}>
|
|
60
79
|
<FooterBase
|
|
61
|
-
className={cs('vui-footer', className)}
|
|
80
|
+
className={cs('vui-footer', isApplication ? 'vui-footer-app' : '', className)}
|
|
81
|
+
px={isApplication ? '40px' : 3}
|
|
62
82
|
py={isSlim ? (downMd ? '16px' : '9px') : 5}
|
|
63
83
|
{...styles.container}
|
|
64
84
|
ref={ref}
|
|
65
85
|
{...rest}
|
|
66
86
|
>
|
|
67
|
-
{
|
|
87
|
+
{isApplication && (
|
|
88
|
+
<FooterContent alignContent="center" alignItems="center" maxW="100%">
|
|
89
|
+
<FooterRow alignContent="space-between" w={1}>
|
|
90
|
+
<Box
|
|
91
|
+
alignItems="self-start"
|
|
92
|
+
columnGap={3}
|
|
93
|
+
flex={{ xs: '0 0 100%', sm: '0 0 100%', md: '0 0 100%', lg: '0 0 50%' }}
|
|
94
|
+
py={{ xs: 1, sm: 1, md: 1.25, lg: 1.5 }}
|
|
95
|
+
wrap
|
|
96
|
+
>
|
|
97
|
+
{applicationLinks?.map((link, index) => (
|
|
98
|
+
<Box flex={{ xs: '0 0 50%', sm: '0 0 auto' }} key={index} minW={70}>
|
|
99
|
+
<FooterLink {...link} />
|
|
100
|
+
</Box>
|
|
101
|
+
))}
|
|
102
|
+
</Box>
|
|
103
|
+
{downLg && <Divider borderColor="sandstone.main" mb={0.5} mt={1} w={1} />}
|
|
104
|
+
<Box
|
|
105
|
+
centerV
|
|
106
|
+
columnGap={3}
|
|
107
|
+
flex={{ xs: '0 0 100%', sm: '0 0 100%', md: '0 0 100%', lg: '0 0 50%' }}
|
|
108
|
+
justifyContent={{ sm: 'center', lg: 'flex-end' }}
|
|
109
|
+
py={{ xs: 1, sm: 1, md: 1.25, lg: 1.5 }}
|
|
110
|
+
wrap
|
|
111
|
+
>
|
|
112
|
+
{applicationStaticItems?.map((text, index) => (
|
|
113
|
+
<Box key={index}>
|
|
114
|
+
<T size="sm">{text}</T>
|
|
115
|
+
</Box>
|
|
116
|
+
))}
|
|
117
|
+
<Box>
|
|
118
|
+
<Link
|
|
119
|
+
fontWeight="demi"
|
|
120
|
+
href={linkedIn ?? defaultLinkedInUrl}
|
|
121
|
+
iconLeft={<Link.Icon mr={1} name="cubCircleLinkedIn" radius="50%" size="xs" />}
|
|
122
|
+
isExternal
|
|
123
|
+
size={{ _: 'sm', md: 'md' }}
|
|
124
|
+
{...styles.link}
|
|
125
|
+
>
|
|
126
|
+
<FooterHeading fontSize="16px" mb={0} text="Follow us" />
|
|
127
|
+
</Link>
|
|
128
|
+
</Box>
|
|
129
|
+
</Box>
|
|
130
|
+
</FooterRow>
|
|
131
|
+
</FooterContent>
|
|
132
|
+
)}
|
|
133
|
+
|
|
134
|
+
{!isApplication && isSlim && (
|
|
68
135
|
<FooterContent alignContent="center" alignItems="center" maxW={{ xs: 343, sm: 305, md: 720, lg: 975 }}>
|
|
69
136
|
<FooterRow>
|
|
70
137
|
{slimLinks.map((link, index) => {
|
|
@@ -104,7 +171,7 @@ export const Footer = vui<'div', FooterProps>((props, ref) => {
|
|
|
104
171
|
</FooterContent>
|
|
105
172
|
)}
|
|
106
173
|
|
|
107
|
-
{!isSlim && (
|
|
174
|
+
{!isApplication && !isSlim && (
|
|
108
175
|
<FooterContent>
|
|
109
176
|
{children ??
|
|
110
177
|
(columns && (
|
|
@@ -24,8 +24,11 @@ export type FooterLinkData = {
|
|
|
24
24
|
export type FooterProps = Omit<BoxProps, 'size' | 'variant'> &
|
|
25
25
|
ThemingProps<'Footer'> &
|
|
26
26
|
Pick<FooterTrademarkProps, 'linkedIn'> & {
|
|
27
|
+
applicationLinks?: FooterLinkData[]
|
|
28
|
+
applicationStaticItems?: string[]
|
|
27
29
|
/** Data defining content of multiple columns. */
|
|
28
30
|
columns?: FooterColumnData[]
|
|
31
|
+
isApplication?: boolean
|
|
29
32
|
isSlim?: boolean
|
|
30
33
|
}
|
|
31
34
|
|