@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
@@ -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<'div', TreeItemProps>[] | JSX.Element;
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 = SystemProps & ThemingProps<'Tree'> & {
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<'div', TreeItemProps>[];
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,KAAK,EAAE,aAAa,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,CAAA;IACrD,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,WAAW,GACrC,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,KAAK,EAAE,aAAa,CAAC,EAAE,CAAA;IACvC,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,sBAAsB;IACtB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,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
+ {"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<"div", import("styled-components").DefaultTheme, import("..").SystemProps, never>;
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<"div", TreeItemProps>;
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":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAI5C,eAAO,MAAM,YAAY,+HAcxB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,sDAiJnB,CAAA;AAEF,eAAe,QAAQ,CAAA"}
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 { cs, isArray, isReactText } from '../utils';
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
- export const TreeItemBase = styled.divBox `
9
+ /*@formatter:off*/
10
+ export const TreeItemBase = styled.liBox `
9
11
  display: flex;
10
12
  flex-direction: column;
11
- line-height: normal;
12
- outline: none;
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
- target.style.backgroundColor = type === 'over' ? '#e2f1ff' : 'transparent';
60
- e.stopPropagation();
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
- return (React.createElement(TreeItemBase, { alignItems: "start", className: cs('vui-treeItem', className), h: collapsedInternal ? h : isCollapsable ? 'auto' : h, id: id, m: 0, onClick: !disabled ? (e) => toggle(e) : undefined, onMouseOut: !disabled ? (e) => hoverTreeItem(e, 'out') : undefined, onMouseOver: !disabled ? (e) => hoverTreeItem(e, 'over') : undefined, p: 0, ref: ref, w: 1, ...itemStyles, ...interactiveProps, ...rest, hoverBg: "transparent" },
79
- React.createElement(Box, { flexDirection: "column", hoverBg: "transparent", m: 0, pl: 2, pr: 0, py: py, w: 1 },
80
- React.createElement(Box, { alignItems: "center", bg: isActiveInternal ? 'hsl(139, 100%, 90%)' : 'transparent', className: isActiveInternal ? 'vui-treeItem-active' : 'vui-treeItem-permanent', flexDirection: "row", hoverBg: "transparent", m: 0, p: 0, w: 1 },
81
- items && items?.length > 0 && (React.createElement(React.Fragment, null, collapsedInternal ? React.createElement(TreeIcon, { mr: 1, name: iconExpand }) : React.createElement(TreeIcon, { mr: 1, name: iconCollapse }))),
82
- items?.length === 0 && React.createElement(TreeIcon, { mr: 1, name: "cusDotFullAlt" }),
83
- isReactText(text) ? React.createElement(TreeText, { ...{ isTruncated, text } }) : text),
84
- isCollapsable && !collapsedInternal && (React.createElement(Box, { className: "vui-treeItem-collapsible", flexDirection: "column", hoverBg: "transparent", m: 0, p: 0, w: 1 }, children ??
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,eAqHnB"}
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
- actionLabel,
37
- onAction)))))));
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;AAElC,+EAA+E;AAC/E,wBAAgB,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,EAAE,UAEtC;AAED,6BAA6B;AAC7B,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM;;;;EAIrC;AAED,0BAA0B;AAC1B,eAAO,MAAM,SAAS,MAAO,MAAM,KAAK,MAAM,KAAK,MAAM,UAAU,MAAM,WACW,CAAA;AAEpF,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,UAgBpD;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"}
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"}
@@ -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 buildRGBA(r, g, b, alpha);
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 buildRGBA(r, g, b, alpha);
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.7.0",
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 className={cs('vui-breadcrumbs', className)} ref={ref} {...styles} {...aliasedProps} {...rest}>
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, icon, ...rest } = omitThemingProps(props)
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
- <Box alignItems="center" className={cs('vui-breadcrumbs-separator', className)} p={0} {...rest}>
11
- {content || children || <Icon name="falAngleRight" pathFill="darkBlue.main" />}
12
- </Box>
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
@@ -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,
@@ -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 { children, className, columns, linkedIn, size, variant, isSlim, ...rest } = props
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
- {isSlim && (
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