@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
package/src/tree/tree.tsx
CHANGED
|
@@ -18,24 +18,17 @@ export const TreeBase = styled.divBox`
|
|
|
18
18
|
|
|
19
19
|
/** Displays a tree of tree link items and optional heading. Exposes some props to the children via context. */
|
|
20
20
|
export const Tree = vui<'div', TreeProps>((props, ref) => {
|
|
21
|
-
const {
|
|
22
|
-
|
|
23
|
-
children,
|
|
24
|
-
className,
|
|
25
|
-
iconCollapse = 'falMinus',
|
|
26
|
-
iconExpand = 'falPlus',
|
|
27
|
-
items,
|
|
28
|
-
onClickItem,
|
|
29
|
-
size,
|
|
30
|
-
variant,
|
|
31
|
-
...rest
|
|
32
|
-
} = props
|
|
21
|
+
const { activeItemId, children, className, iconCollapse, iconExpand, items, onClickItem, size, variant, ...rest } =
|
|
22
|
+
props
|
|
33
23
|
const styles = useStyleConfig('Tree', props)
|
|
34
24
|
|
|
35
25
|
const { itemsInternal, setItemsInternal, activeItemIndex, setActiveItemIndex } = useTreeState(activeItemId)
|
|
36
26
|
|
|
37
27
|
const context = useMemo(() => filterUndefined({ size, variant }), [size, variant])
|
|
38
28
|
|
|
29
|
+
const iconCollapseInternal = iconCollapse ? iconCollapse : variant === 'default' ? 'falAngleRight' : 'falMinus'
|
|
30
|
+
const iconExpandInternal = iconExpand ? iconExpand : variant === 'default' ? 'falAngleDown' : 'falPlus'
|
|
31
|
+
|
|
39
32
|
const transformChildrenToItems = (children: any) => {
|
|
40
33
|
const t: TreeItemProps[] = []
|
|
41
34
|
|
|
@@ -56,7 +49,7 @@ export const Tree = vui<'div', TreeProps>((props, ref) => {
|
|
|
56
49
|
isCollapsed: child.props.isCollapsed,
|
|
57
50
|
disabled: child.props.disabled,
|
|
58
51
|
onClickTreeItem: onClickTreeItem
|
|
59
|
-
})
|
|
52
|
+
} as unknown as TreeItemProps)
|
|
60
53
|
}
|
|
61
54
|
})
|
|
62
55
|
}
|
|
@@ -95,10 +88,11 @@ export const Tree = vui<'div', TreeProps>((props, ref) => {
|
|
|
95
88
|
return (
|
|
96
89
|
<TreeItem
|
|
97
90
|
activeItemIndex={activeItemIndex}
|
|
98
|
-
iconCollapse={
|
|
99
|
-
iconExpand={
|
|
91
|
+
iconCollapse={iconCollapseInternal}
|
|
92
|
+
iconExpand={iconExpandInternal}
|
|
100
93
|
id={id}
|
|
101
|
-
isActive={activeItemIndex ? activeItemIndex === id : false}
|
|
94
|
+
isActive={isActive ? isActive : activeItemIndex ? activeItemIndex === id : false}
|
|
95
|
+
isFirstLevel={true}
|
|
102
96
|
key={id ?? index}
|
|
103
97
|
onClickTreeItem={onClickTreeItem}
|
|
104
98
|
{...props}
|
package/src/tree/tree.types.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { ReactNode, ReactText } from 'react'
|
|
|
2
2
|
|
|
3
3
|
import { IconProp } from '../icon'
|
|
4
4
|
import { LinkProps } from '../link'
|
|
5
|
+
import { ListItemProps } from '../list'
|
|
5
6
|
import { SystemProps } from '../system'
|
|
6
7
|
import { ThemingProps } from '../theme'
|
|
7
8
|
import { PropsOf } from '../utils'
|
|
@@ -15,7 +16,7 @@ export type TreeProps = SystemProps &
|
|
|
15
16
|
/** Socket defining the expand icon on the left. */
|
|
16
17
|
iconExpand?: IconProp
|
|
17
18
|
/** Socket displaying a tree of items. */
|
|
18
|
-
items?: PropsOf<'
|
|
19
|
+
items?: PropsOf<'li', TreeItemProps>[] | JSX.Element
|
|
19
20
|
/** Socket defining the size of the tree. */
|
|
20
21
|
onClickItem?: (id: TreeItemId) => void
|
|
21
22
|
}
|
|
@@ -29,7 +30,7 @@ export type TreeOnToggleEvent = {
|
|
|
29
30
|
collapsed: boolean
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
export type TreeItemProps =
|
|
33
|
+
export type TreeItemProps = ListItemProps &
|
|
33
34
|
ThemingProps<'Tree'> & {
|
|
34
35
|
activeItemId?: TreeItemId
|
|
35
36
|
/** internal, not exposed */
|
|
@@ -47,16 +48,22 @@ export type TreeItemProps = SystemProps &
|
|
|
47
48
|
/** Socket defining the expand icon on the left. */
|
|
48
49
|
iconExpand?: IconProp
|
|
49
50
|
/** The children of this tree item. */
|
|
50
|
-
items?: PropsOf<'
|
|
51
|
+
items?: PropsOf<'li', TreeItemProps>[]
|
|
51
52
|
children?: ReactNode
|
|
52
53
|
/** Collapsed state */
|
|
53
54
|
isCollapsed?: boolean
|
|
55
|
+
/** indicates if the item is first-level; if yes it can be styled differently */
|
|
56
|
+
isFirstLevel?: boolean
|
|
54
57
|
/** Displays item and its content in disabled state with appropriate styling. */
|
|
55
58
|
disabled?: boolean
|
|
56
59
|
/** Displays item in selected state with appropriate styling. */
|
|
57
60
|
isActive?: boolean
|
|
58
61
|
/** If provided, content is wrapper with a link and the props are provided to the element. */
|
|
59
62
|
linkProps?: TreeItemLinkProps
|
|
63
|
+
/** internal, padding left; if provided it will accumulate function of levels. */
|
|
64
|
+
propagatedPL?: number
|
|
65
|
+
/** Socket defining the size of the padding increment. */
|
|
66
|
+
plUnit?: number
|
|
60
67
|
/** Socket displaying text within the item. */
|
|
61
68
|
text: ReactText | JSX.Element
|
|
62
69
|
/** Collapse change state */
|
package/src/tree/treeItem.tsx
CHANGED
|
@@ -2,32 +2,26 @@ import React, { useEffect, useState } from 'react'
|
|
|
2
2
|
|
|
3
3
|
import { Box } from '../box'
|
|
4
4
|
import { styled, useStyleConfig, vui } from '../core'
|
|
5
|
-
import {
|
|
5
|
+
import { List } from '../list'
|
|
6
|
+
import { cs, isArray, isReactText, vuiColorToRGBA } from '../utils'
|
|
6
7
|
import { useTreeContext } from './context'
|
|
7
8
|
import { TreeItemProps } from './tree.types'
|
|
8
9
|
import TreeIcon from './treeIcon'
|
|
9
10
|
import TreeText from './treeText'
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
/*@formatter:off*/
|
|
13
|
+
export const TreeItemBase = styled.liBox`
|
|
12
14
|
display: flex;
|
|
13
15
|
flex-direction: column;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
align-content: flex-start;
|
|
17
|
-
align-items: flex-start;
|
|
18
|
-
overflow: visible;
|
|
19
|
-
height: auto;
|
|
20
|
-
|
|
21
|
-
& [aria-disabled='true'] {
|
|
22
|
-
cursor: not-allowed;
|
|
23
|
-
user-select: none;
|
|
24
|
-
}
|
|
16
|
+
transition-duration: fast;
|
|
17
|
+
width: 100%;
|
|
25
18
|
`
|
|
19
|
+
/*@formatter:on*/
|
|
26
20
|
|
|
27
21
|
/**
|
|
28
22
|
* Displays a tree item with text and optional icons. Can be shown as selected.
|
|
29
23
|
*/
|
|
30
|
-
export const TreeItem = vui<'
|
|
24
|
+
export const TreeItem = vui<'li', TreeItemProps>((props, ref) => {
|
|
31
25
|
const mergedProps = { ...useTreeContext(), ...props }
|
|
32
26
|
|
|
33
27
|
const {
|
|
@@ -45,18 +39,24 @@ export const TreeItem = vui<'div', TreeItemProps>((props, ref) => {
|
|
|
45
39
|
id,
|
|
46
40
|
items,
|
|
47
41
|
isActive,
|
|
42
|
+
isFirstLevel,
|
|
48
43
|
isTruncated,
|
|
49
44
|
key,
|
|
50
45
|
onClickTreeItem,
|
|
51
46
|
onToggle,
|
|
47
|
+
propagatedPL,
|
|
48
|
+
plUnit = 26,
|
|
52
49
|
text,
|
|
53
50
|
...rest
|
|
54
51
|
} = mergedProps
|
|
55
52
|
const styles = useStyleConfig('Tree', useTreeContext())
|
|
56
|
-
const { activeBg, h, hoverBg, p, px, py, selectedBg, ...itemStyles } = styles.item
|
|
53
|
+
const { activeBg, bg, color, h, hoverBg, hoverColor, p, px, py, selectedBg, ...itemStyles } = styles.item
|
|
57
54
|
|
|
58
55
|
const [collapsedInternal, setIsCollapsedInternal] = useState<boolean>(false)
|
|
59
56
|
|
|
57
|
+
const innerBoxPl = propagatedPL || 0
|
|
58
|
+
const innerListPl = innerBoxPl + (plUnit || 0)
|
|
59
|
+
|
|
60
60
|
useEffect(() => {
|
|
61
61
|
setIsCollapsedInternal(!!isCollapsed)
|
|
62
62
|
}, [isCollapsed])
|
|
@@ -77,84 +77,111 @@ export const TreeItem = vui<'div', TreeItemProps>((props, ref) => {
|
|
|
77
77
|
e.stopPropagation()
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
const interactiveProps = !disabled
|
|
81
|
-
? {
|
|
82
|
-
cursor: 'pointer',
|
|
83
|
-
focusVisibleRing: 2,
|
|
84
|
-
hoverBg: 'transparent',
|
|
85
|
-
activeBg: 'transparent',
|
|
86
|
-
userSelect: 'none'
|
|
87
|
-
}
|
|
88
|
-
: {}
|
|
89
|
-
|
|
90
80
|
const hoverTreeItem = (e: Event, type: string) => {
|
|
91
81
|
const target = e.target as HTMLDivElement
|
|
92
82
|
|
|
83
|
+
let parentDiv = undefined
|
|
84
|
+
|
|
93
85
|
if (target.classList.contains('vui-treeItem-permanent')) {
|
|
94
|
-
|
|
95
|
-
e.stopPropagation()
|
|
86
|
+
parentDiv = target
|
|
96
87
|
} else {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
?.getElementsByClassName('vui-treeItem-permanent')[0] as HTMLDivElement
|
|
101
|
-
|
|
102
|
-
const collapsible = target
|
|
103
|
-
.closest('.vui-treeItem')
|
|
104
|
-
?.getElementsByClassName('vui-treeItem-collapsible')[0] as HTMLDivElement
|
|
105
|
-
|
|
106
|
-
const active = target.closest('.vui-treeItem')?.getElementsByClassName('vui-treeItem-active')[0] as HTMLDivElement
|
|
88
|
+
const parentLi = target.closest('.vui-treeItem')
|
|
89
|
+
parentDiv = parentLi?.getElementsByClassName('vui-treeItem-permanent')[0] as HTMLDivElement
|
|
90
|
+
}
|
|
107
91
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
92
|
+
const isDivActive = parentDiv.classList.contains('vui-treeItem-active') ? true : false
|
|
93
|
+
|
|
94
|
+
// translate the list-item style over to the div
|
|
95
|
+
if (parentDiv.classList.contains('vui-treeItem-permanent')) {
|
|
96
|
+
// is it a fist level item?
|
|
97
|
+
if (parentDiv.classList.contains('vui-treeItem-firstLevel')) {
|
|
98
|
+
if (type === 'over') {
|
|
99
|
+
parentDiv.style.backgroundColor = vuiColorToRGBA(styles?.firstLevelItem?.hoverBg || 'transparent')
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (type === 'out') {
|
|
103
|
+
parentDiv.style.backgroundColor = isDivActive
|
|
104
|
+
? vuiColorToRGBA(styles?.firstLevelItem?.activeBg || 'transparent')
|
|
105
|
+
: vuiColorToRGBA(styles?.firstLevelItem?.bg || 'transparent')
|
|
106
|
+
}
|
|
107
|
+
} else {
|
|
108
|
+
// it is NOT first level
|
|
109
|
+
if (type === 'over') {
|
|
110
|
+
parentDiv.style.backgroundColor = vuiColorToRGBA(styles?.item?.hoverBg || 'transparent')
|
|
111
|
+
}
|
|
112
|
+
if (type === 'out') {
|
|
113
|
+
parentDiv.style.backgroundColor = isDivActive
|
|
114
|
+
? vuiColorToRGBA(styles?.item?.activeBg || 'transparent')
|
|
115
|
+
: vuiColorToRGBA(styles?.item?.bg || 'transparent')
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
} else {
|
|
119
|
+
e.preventDefault()
|
|
111
120
|
}
|
|
121
|
+
|
|
122
|
+
e.stopPropagation()
|
|
112
123
|
}
|
|
113
124
|
|
|
114
125
|
const isCollapsable = (isArray(children) && children.length > 0) || (isArray(items) && items.length > 0)
|
|
115
126
|
const isActiveInternal = (!activeItemIndex && isActive) || activeItemIndex === id
|
|
116
127
|
|
|
128
|
+
let textMl = items && items?.length > 0 ? 0 : 1.5
|
|
129
|
+
if (!isCollapsable) {
|
|
130
|
+
textMl += 3.8
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// hoverBg cannot be styled directly from theme, it has to be JS manipulated because of event propagation
|
|
117
134
|
return (
|
|
118
135
|
<TreeItemBase
|
|
119
|
-
|
|
120
|
-
|
|
136
|
+
className={cs('vui-treeItem', isFirstLevel ? 'vui-treeItem-firstLevel' : '', className)}
|
|
137
|
+
color={isFirstLevel ? styles?.firstLevelItem?.color : color}
|
|
121
138
|
h={collapsedInternal ? h : isCollapsable ? 'auto' : h}
|
|
122
|
-
id={id}
|
|
139
|
+
id={id.toString()}
|
|
123
140
|
m={0}
|
|
124
141
|
onClick={!disabled ? (e: Event) => toggle(e) : undefined}
|
|
125
142
|
onMouseOut={!disabled ? (e: Event) => hoverTreeItem(e, 'out') : undefined}
|
|
126
143
|
onMouseOver={!disabled ? (e: Event) => hoverTreeItem(e, 'over') : undefined}
|
|
127
144
|
p={0}
|
|
145
|
+
propagatedPL={propagatedPL}
|
|
128
146
|
ref={ref}
|
|
129
147
|
w={1}
|
|
130
148
|
{...itemStyles}
|
|
131
|
-
{
|
|
149
|
+
bg={
|
|
150
|
+
isFirstLevel
|
|
151
|
+
? isActiveInternal
|
|
152
|
+
? styles?.firstLevelItem?.activeBg
|
|
153
|
+
: styles?.firstLevelItem?.bg
|
|
154
|
+
: isActiveInternal
|
|
155
|
+
? styles?.item?.activeBg
|
|
156
|
+
: bg
|
|
157
|
+
}
|
|
158
|
+
hoverBg={undefined}
|
|
132
159
|
{...rest}
|
|
133
|
-
hoverBg="transparent"
|
|
134
160
|
>
|
|
135
|
-
|
|
161
|
+
<>
|
|
136
162
|
<Box
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
163
|
+
centerV
|
|
164
|
+
className={cs(
|
|
165
|
+
'vui-treeItem-permanent',
|
|
166
|
+
isActiveInternal ? 'vui-treeItem-active' : '',
|
|
167
|
+
isFirstLevel ? 'vui-treeItem-firstLevel' : ''
|
|
168
|
+
)}
|
|
169
|
+
fontWeight={isActiveInternal ? '600' : '500'}
|
|
170
|
+
pl={`${innerBoxPl}px`}
|
|
145
171
|
>
|
|
146
172
|
{items && items?.length > 0 && (
|
|
147
|
-
<>
|
|
173
|
+
<>
|
|
174
|
+
{collapsedInternal ? <TreeIcon mx={1.5} name={iconExpand} /> : <TreeIcon mx={1.5} name={iconCollapse} />}
|
|
175
|
+
</>
|
|
148
176
|
)}
|
|
149
|
-
{
|
|
150
|
-
{isReactText(text) ? <TreeText {...{ isTruncated, text }} /> : text}
|
|
177
|
+
{isReactText(text) ? <TreeText ml={textMl} {...{ isTruncated, text }} /> : text}
|
|
151
178
|
</Box>
|
|
152
179
|
|
|
153
180
|
{isCollapsable && !collapsedInternal && (
|
|
154
|
-
<
|
|
181
|
+
<List w={1}>
|
|
155
182
|
{children ??
|
|
156
183
|
(isArray<TreeItemProps>(items)
|
|
157
|
-
? items.map(({ key, ...props }, index) => {
|
|
184
|
+
? items.map(({ key, propagatedPL, ...props }, index) => {
|
|
158
185
|
return (
|
|
159
186
|
<TreeItem
|
|
160
187
|
activeItemIndex={activeItemIndex}
|
|
@@ -162,14 +189,15 @@ export const TreeItem = vui<'div', TreeItemProps>((props, ref) => {
|
|
|
162
189
|
iconExpand={iconExpand}
|
|
163
190
|
key={key ?? index}
|
|
164
191
|
onClickTreeItem={onClickTreeItem}
|
|
192
|
+
propagatedPL={innerListPl}
|
|
165
193
|
{...props}
|
|
166
194
|
/>
|
|
167
195
|
)
|
|
168
196
|
})
|
|
169
197
|
: items)}
|
|
170
|
-
</
|
|
198
|
+
</List>
|
|
171
199
|
)}
|
|
172
|
-
|
|
200
|
+
</>
|
|
173
201
|
</TreeItemBase>
|
|
174
202
|
)
|
|
175
203
|
})
|
package/src/utils/styles.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Property } from 'csstype'
|
|
2
2
|
|
|
3
|
+
import { colors } from '../theme'
|
|
4
|
+
|
|
3
5
|
/** Concatenates individual className arguments and returns a single string. */
|
|
4
6
|
export function cs(...classNames: any[]) {
|
|
5
7
|
return classNames.filter(Boolean).join(' ')
|
|
@@ -12,10 +14,6 @@ export function parseHSL(color: string) {
|
|
|
12
14
|
return { h: Number(res?.[0]) || 0, s: Number(res?.[1]) || 0, l: Number(res?.[2]) || 0 }
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
/** Builds RGBA string. */
|
|
16
|
-
export const buildRGBA = (r: number, g: number, b: number, alpha?: number) =>
|
|
17
|
-
alpha !== undefined ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgb(${r}, ${g}, ${b})`
|
|
18
|
-
|
|
19
17
|
/** Converts hex color value to rgb with optional alpha property. */
|
|
20
18
|
export function hexToRGBA(hex: string, alpha?: number) {
|
|
21
19
|
let hexStr = hex
|
|
@@ -32,7 +30,18 @@ export function hexToRGBA(hex: string, alpha?: number) {
|
|
|
32
30
|
const g = parseInt(hexStr.slice(2, 4), 16)
|
|
33
31
|
const b = parseInt(hexStr.slice(4, 6), 16)
|
|
34
32
|
|
|
35
|
-
return
|
|
33
|
+
return alpha !== undefined ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgb(${r}, ${g}, ${b})`
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function vuiColorToRGBA(color: string, alpha?: number) {
|
|
37
|
+
if (!color.includes('.')) return 'transparent'
|
|
38
|
+
|
|
39
|
+
const [colorName, shade] = color.split('.')
|
|
40
|
+
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
const x = parseHSL(colors[colorName][shade])
|
|
44
|
+
return HSLToRGBA(x.h, x.s, x.l, alpha || shade === 'main' ? 1 : parseInt(shade))
|
|
36
45
|
}
|
|
37
46
|
|
|
38
47
|
/** Converts hsl color value to rgb with optional alpha property. */
|
|
@@ -77,7 +86,7 @@ export function HSLToRGBA(h: number, s: number, l: number, alpha?: number) {
|
|
|
77
86
|
g = Math.round((g + m) * 255)
|
|
78
87
|
b = Math.round((b + m) * 255)
|
|
79
88
|
|
|
80
|
-
return
|
|
89
|
+
return alpha !== undefined ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgb(${r}, ${g}, ${b})`
|
|
81
90
|
}
|
|
82
91
|
|
|
83
92
|
/** Styling to add ellipsis for long texts. */
|