@veracity/vui 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/avatar/theme.d.ts +1 -0
- package/dist/cjs/avatar/theme.d.ts.map +1 -1
- package/dist/cjs/avatar/theme.js +2 -1
- package/dist/cjs/badge/theme.d.ts +1 -0
- package/dist/cjs/badge/theme.d.ts.map +1 -1
- package/dist/cjs/badge/theme.js +2 -1
- package/dist/cjs/button/theme.d.ts +1 -0
- package/dist/cjs/button/theme.d.ts.map +1 -1
- package/dist/cjs/button/theme.js +2 -1
- package/dist/cjs/divider/divider.js +1 -1
- package/dist/cjs/dragAndDrop/dragAndDrop.d.ts +1 -1
- package/dist/cjs/dragAndDrop/dragAndDrop.d.ts.map +1 -1
- package/dist/cjs/dragAndDrop/dragAndDrop.js +3 -3
- package/dist/cjs/dragAndDrop/dragAndDrop.types.d.ts +1 -1
- package/dist/cjs/dragAndDrop/dragAndDrop.types.d.ts.map +1 -1
- package/dist/cjs/dragAndDrop/theme.d.ts +18 -3
- package/dist/cjs/dragAndDrop/theme.d.ts.map +1 -1
- package/dist/cjs/dragAndDrop/theme.js +23 -3
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/input/consts.d.ts +17 -3
- package/dist/cjs/input/consts.d.ts.map +1 -1
- package/dist/cjs/input/consts.js +27 -13
- package/dist/cjs/input/helpText.js +2 -2
- package/dist/cjs/input/input.d.ts.map +1 -1
- package/dist/cjs/input/input.js +8 -11
- package/dist/cjs/input/input.types.d.ts +6 -6
- package/dist/cjs/input/input.types.d.ts.map +1 -1
- package/dist/cjs/input/inputIcon.d.ts.map +1 -1
- package/dist/cjs/input/inputIcon.js +2 -1
- package/dist/cjs/input/theme.d.ts +33 -17
- package/dist/cjs/input/theme.d.ts.map +1 -1
- package/dist/cjs/input/theme.js +32 -22
- package/dist/cjs/skeleton/skeleton.types.d.ts +1 -1
- package/dist/cjs/skeleton/skeleton.types.d.ts.map +1 -1
- package/dist/cjs/skeleton/theme.d.ts +10 -14
- package/dist/cjs/skeleton/theme.d.ts.map +1 -1
- package/dist/cjs/skeleton/theme.js +10 -21
- package/dist/cjs/tag/theme.d.ts +1 -0
- package/dist/cjs/tag/theme.d.ts.map +1 -1
- package/dist/cjs/tag/theme.js +2 -1
- package/dist/cjs/theme/components.d.ts +110 -19
- package/dist/cjs/theme/components.d.ts.map +1 -1
- package/dist/cjs/theme/components.js +3 -1
- package/dist/cjs/theme/defaultTheme.d.ts +110 -19
- package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
- package/dist/cjs/tooltip/tooltip.js +1 -1
- package/dist/cjs/tooltip/tooltipContent.d.ts +1 -1
- package/dist/cjs/tooltip/tooltipContent.d.ts.map +1 -1
- package/dist/cjs/tooltip/tooltipContent.js +1 -4
- package/dist/cjs/tree/context.d.ts +5 -0
- package/dist/cjs/tree/context.d.ts.map +1 -0
- package/dist/cjs/tree/context.js +7 -0
- package/dist/cjs/tree/index.d.ts +8 -0
- package/dist/cjs/tree/index.d.ts.map +1 -0
- package/dist/cjs/tree/index.js +28 -0
- package/dist/cjs/tree/theme.d.ts +59 -0
- package/dist/cjs/tree/theme.d.ts.map +1 -0
- package/dist/cjs/tree/theme.js +69 -0
- package/dist/cjs/tree/tree.d.ts +14 -0
- package/dist/cjs/tree/tree.d.ts.map +1 -0
- package/dist/cjs/tree/tree.js +116 -0
- package/dist/cjs/tree/tree.types.d.ts +58 -0
- package/dist/cjs/tree/tree.types.d.ts.map +1 -0
- package/dist/cjs/tree/tree.types.js +2 -0
- package/dist/cjs/tree/treeIcon.d.ts +5 -0
- package/dist/cjs/tree/treeIcon.d.ts.map +1 -0
- package/dist/cjs/tree/treeIcon.js +29 -0
- package/dist/cjs/tree/treeItem.d.ts +8 -0
- package/dist/cjs/tree/treeItem.d.ts.map +1 -0
- package/dist/cjs/tree/treeItem.js +131 -0
- package/dist/cjs/tree/treeText.d.ts +5 -0
- package/dist/cjs/tree/treeText.d.ts.map +1 -0
- package/dist/cjs/tree/treeText.js +29 -0
- package/dist/cjs/tree/useTreeState.d.ts +9 -0
- package/dist/cjs/tree/useTreeState.d.ts.map +1 -0
- package/dist/cjs/tree/useTreeState.js +10 -0
- package/dist/esm/avatar/theme.d.ts +1 -0
- package/dist/esm/avatar/theme.d.ts.map +1 -1
- package/dist/esm/avatar/theme.js +2 -1
- package/dist/esm/badge/theme.d.ts +1 -0
- package/dist/esm/badge/theme.d.ts.map +1 -1
- package/dist/esm/badge/theme.js +2 -1
- package/dist/esm/button/theme.d.ts +1 -0
- package/dist/esm/button/theme.d.ts.map +1 -1
- package/dist/esm/button/theme.js +2 -1
- package/dist/esm/divider/divider.js +1 -1
- package/dist/esm/dragAndDrop/dragAndDrop.d.ts +1 -1
- package/dist/esm/dragAndDrop/dragAndDrop.d.ts.map +1 -1
- package/dist/esm/dragAndDrop/dragAndDrop.js +3 -3
- package/dist/esm/dragAndDrop/dragAndDrop.types.d.ts +1 -1
- package/dist/esm/dragAndDrop/dragAndDrop.types.d.ts.map +1 -1
- package/dist/esm/dragAndDrop/theme.d.ts +18 -3
- package/dist/esm/dragAndDrop/theme.d.ts.map +1 -1
- package/dist/esm/dragAndDrop/theme.js +23 -3
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/input/consts.d.ts +17 -3
- package/dist/esm/input/consts.d.ts.map +1 -1
- package/dist/esm/input/consts.js +26 -12
- package/dist/esm/input/helpText.js +3 -3
- package/dist/esm/input/input.d.ts.map +1 -1
- package/dist/esm/input/input.js +6 -9
- package/dist/esm/input/input.types.d.ts +6 -6
- package/dist/esm/input/input.types.d.ts.map +1 -1
- package/dist/esm/input/inputIcon.d.ts.map +1 -1
- package/dist/esm/input/inputIcon.js +2 -1
- package/dist/esm/input/theme.d.ts +33 -17
- package/dist/esm/input/theme.d.ts.map +1 -1
- package/dist/esm/input/theme.js +32 -22
- package/dist/esm/skeleton/skeleton.types.d.ts +1 -1
- package/dist/esm/skeleton/skeleton.types.d.ts.map +1 -1
- package/dist/esm/skeleton/theme.d.ts +10 -14
- package/dist/esm/skeleton/theme.d.ts.map +1 -1
- package/dist/esm/skeleton/theme.js +10 -21
- package/dist/esm/tag/theme.d.ts +1 -0
- package/dist/esm/tag/theme.d.ts.map +1 -1
- package/dist/esm/tag/theme.js +2 -1
- package/dist/esm/theme/components.d.ts +110 -19
- package/dist/esm/theme/components.d.ts.map +1 -1
- package/dist/esm/theme/components.js +3 -1
- package/dist/esm/theme/defaultTheme.d.ts +110 -19
- package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
- package/dist/esm/tooltip/tooltip.js +1 -1
- package/dist/esm/tooltip/tooltipContent.d.ts +1 -1
- package/dist/esm/tooltip/tooltipContent.d.ts.map +1 -1
- package/dist/esm/tooltip/tooltipContent.js +1 -4
- package/dist/esm/tree/context.d.ts +5 -0
- package/dist/esm/tree/context.d.ts.map +1 -0
- package/dist/esm/tree/context.js +3 -0
- package/dist/esm/tree/index.d.ts +8 -0
- package/dist/esm/tree/index.d.ts.map +1 -0
- package/dist/esm/tree/index.js +7 -0
- package/dist/esm/tree/theme.d.ts +59 -0
- package/dist/esm/tree/theme.d.ts.map +1 -0
- package/dist/esm/tree/theme.js +67 -0
- package/dist/esm/tree/tree.d.ts +14 -0
- package/dist/esm/tree/tree.d.ts.map +1 -0
- package/dist/esm/tree/tree.js +74 -0
- package/dist/esm/tree/tree.types.d.ts +58 -0
- package/dist/esm/tree/tree.types.d.ts.map +1 -0
- package/dist/esm/tree/tree.types.js +1 -0
- package/dist/esm/tree/treeIcon.d.ts +5 -0
- package/dist/esm/tree/treeIcon.d.ts.map +1 -0
- package/dist/esm/tree/treeIcon.js +12 -0
- package/dist/esm/tree/treeItem.d.ts +8 -0
- package/dist/esm/tree/treeItem.d.ts.map +1 -0
- package/dist/esm/tree/treeItem.js +91 -0
- package/dist/esm/tree/treeText.d.ts +5 -0
- package/dist/esm/tree/treeText.d.ts.map +1 -0
- package/dist/esm/tree/treeText.js +12 -0
- package/dist/esm/tree/useTreeState.d.ts +9 -0
- package/dist/esm/tree/useTreeState.d.ts.map +1 -0
- package/dist/esm/tree/useTreeState.js +6 -0
- package/package.json +1 -1
- package/src/avatar/theme.ts +2 -1
- package/src/badge/theme.ts +2 -1
- package/src/button/theme.ts +2 -1
- package/src/divider/divider.tsx +1 -1
- package/src/dragAndDrop/dragAndDrop.tsx +3 -3
- package/src/dragAndDrop/dragAndDrop.types.ts +1 -1
- package/src/dragAndDrop/theme.ts +24 -3
- package/src/index.ts +1 -0
- package/src/input/consts.ts +27 -12
- package/src/input/helpText.tsx +3 -3
- package/src/input/input.tsx +5 -14
- package/src/input/input.types.ts +6 -6
- package/src/input/inputIcon.tsx +2 -1
- package/src/input/theme.ts +31 -27
- package/src/skeleton/skeleton.types.ts +1 -1
- package/src/skeleton/theme.ts +9 -28
- package/src/tag/theme.ts +2 -1
- package/src/theme/components.ts +3 -1
- package/src/tooltip/tooltip.tsx +1 -1
- package/src/tooltip/tooltipContent.tsx +17 -21
- package/src/tree/context.ts +5 -0
- package/src/tree/index.ts +7 -0
- package/src/tree/theme.ts +76 -0
- package/src/tree/tree.tsx +121 -0
- package/src/tree/tree.types.ts +65 -0
- package/src/tree/treeIcon.tsx +16 -0
- package/src/tree/treeItem.tsx +177 -0
- package/src/tree/treeText.tsx +26 -0
- package/src/tree/useTreeState.ts +10 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TreeItemProps } from './tree.types';
|
|
2
|
+
export declare const TreeItemBase: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("..").SystemProps, never>;
|
|
3
|
+
/**
|
|
4
|
+
* Displays a tree item with text and optional icons. Can be shown as selected.
|
|
5
|
+
*/
|
|
6
|
+
export declare const TreeItem: import("../core").VuiComponent<"div", TreeItemProps>;
|
|
7
|
+
export default TreeItem;
|
|
8
|
+
//# sourceMappingURL=treeItem.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { Box } from '../box';
|
|
3
|
+
import { styled, useStyleConfig, vui } from '../core';
|
|
4
|
+
import { cs, isArray, isReactText } from '../utils';
|
|
5
|
+
import { useTreeContext } from './context';
|
|
6
|
+
import TreeIcon from './treeIcon';
|
|
7
|
+
import TreeText from './treeText';
|
|
8
|
+
export const TreeItemBase = styled.divBox `
|
|
9
|
+
display: flex;
|
|
10
|
+
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
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
/**
|
|
24
|
+
* Displays a tree item with text and optional icons. Can be shown as selected.
|
|
25
|
+
*/
|
|
26
|
+
export const TreeItem = vui((props, ref) => {
|
|
27
|
+
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;
|
|
29
|
+
const styles = useStyleConfig('Tree', useTreeContext());
|
|
30
|
+
const { activeBg, h, hoverBg, p, px, py, selectedBg, ...itemStyles } = styles.item;
|
|
31
|
+
const [collapsedInternal, setIsCollapsedInternal] = useState(false);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
setIsCollapsedInternal(!!isCollapsed);
|
|
34
|
+
}, [isCollapsed]);
|
|
35
|
+
const toggle = (e) => {
|
|
36
|
+
if (!disabled) {
|
|
37
|
+
onToggle?.({ id, collapsed: !collapsedInternal });
|
|
38
|
+
setIsCollapsedInternal(!collapsedInternal);
|
|
39
|
+
}
|
|
40
|
+
const target = e.target;
|
|
41
|
+
const active = target?.closest('.vui-tree')?.getElementsByClassName('vui-treeItem-active')[0];
|
|
42
|
+
active ? (active.style.backgroundColor = 'transparent') : null;
|
|
43
|
+
onClickTreeItem?.(id);
|
|
44
|
+
// Avoids triggering parent's onClick
|
|
45
|
+
e.stopPropagation();
|
|
46
|
+
};
|
|
47
|
+
const interactiveProps = !disabled
|
|
48
|
+
? {
|
|
49
|
+
cursor: 'pointer',
|
|
50
|
+
focusVisibleRing: 2,
|
|
51
|
+
hoverBg: 'transparent',
|
|
52
|
+
activeBg: 'transparent',
|
|
53
|
+
userSelect: 'none'
|
|
54
|
+
}
|
|
55
|
+
: {};
|
|
56
|
+
const hoverTreeItem = (e, type) => {
|
|
57
|
+
const target = e.target;
|
|
58
|
+
if (target.classList.contains('vui-treeItem-permanent')) {
|
|
59
|
+
target.style.backgroundColor = type === 'over' ? '#e2f1ff' : 'transparent';
|
|
60
|
+
e.stopPropagation();
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
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
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const isCollapsable = (isArray(children) && children.length > 0) || (isArray(items) && items.length > 0);
|
|
77
|
+
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 ??
|
|
85
|
+
(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 }));
|
|
88
|
+
})
|
|
89
|
+
: items))))));
|
|
90
|
+
});
|
|
91
|
+
export default TreeItem;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeText.d.ts","sourceRoot":"","sources":["../../../src/tree/treeText.tsx"],"names":[],"mappings":"AAGA,OAAU,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAIhC,yCAAyC;AACzC,eAAO,MAAM,QAAQ,gDAenB,CAAA;AAEF,eAAe,QAAQ,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useStyleConfig, vui } from '../core';
|
|
3
|
+
import T from '../t';
|
|
4
|
+
import { cs, ellipsisOverflow } from '../utils';
|
|
5
|
+
import { useTreeContext } from './context';
|
|
6
|
+
/** Displays text within the TreeItem. */
|
|
7
|
+
export const TreeText = vui((props, ref) => {
|
|
8
|
+
const { className, ...rest } = props;
|
|
9
|
+
const styles = useStyleConfig('Tree', useTreeContext());
|
|
10
|
+
return (React.createElement(T, { className: cs('vui-treeText', className), fontSize: "inherit", py: styles.item.py, ref: ref, ...ellipsisOverflow, ...styles.text, ...rest }));
|
|
11
|
+
});
|
|
12
|
+
export default TreeText;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { TreeItemId, TreeItemProps } from './tree.types';
|
|
3
|
+
export declare const useTreeState: (activeItemId?: TreeItemId) => {
|
|
4
|
+
itemsInternal: TreeItemProps[];
|
|
5
|
+
setItemsInternal: import("react").Dispatch<import("react").SetStateAction<TreeItemProps[]>>;
|
|
6
|
+
activeItemIndex: TreeItemId;
|
|
7
|
+
setActiveItemIndex: import("react").Dispatch<import("react").SetStateAction<TreeItemId>>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=useTreeState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTreeState.d.ts","sourceRoot":"","sources":["../../../src/tree/useTreeState.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAExD,eAAO,MAAM,YAAY,kBAAmB,UAAU;;;;;CAKrD,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
export const useTreeState = (activeItemId) => {
|
|
3
|
+
const [itemsInternal, setItemsInternal] = useState([]);
|
|
4
|
+
const [activeItemIndex, setActiveItemIndex] = useState(activeItemId ?? '');
|
|
5
|
+
return { itemsInternal, setItemsInternal, activeItemIndex, setActiveItemIndex };
|
|
6
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veracity/vui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
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",
|
package/src/avatar/theme.ts
CHANGED
package/src/badge/theme.ts
CHANGED
package/src/button/theme.ts
CHANGED
package/src/divider/divider.tsx
CHANGED
|
@@ -5,7 +5,7 @@ import { cs, filterUndefined } from '../utils'
|
|
|
5
5
|
import { DividerProps } from './divider.types'
|
|
6
6
|
|
|
7
7
|
export const DividerBase = styled.hrBox`
|
|
8
|
-
border-color:
|
|
8
|
+
border-color: sandstone.90;
|
|
9
9
|
`
|
|
10
10
|
|
|
11
11
|
/** Visually separates content with a horizontal or vertical line. */
|
|
@@ -17,7 +17,7 @@ const DragAndDropBase = styled.labelBox`
|
|
|
17
17
|
justify-content: center;
|
|
18
18
|
`
|
|
19
19
|
|
|
20
|
-
/**
|
|
20
|
+
/** Prepares uploading files by selecting or dragging. */
|
|
21
21
|
export const DragAndDrop = vui<'label', DragAndDropProps>((props, ref) => {
|
|
22
22
|
const {
|
|
23
23
|
accept,
|
|
@@ -51,12 +51,12 @@ export const DragAndDrop = vui<'label', DragAndDropProps>((props, ref) => {
|
|
|
51
51
|
|
|
52
52
|
return (
|
|
53
53
|
<DragAndDropBase
|
|
54
|
-
bg={disabled ? 'grey.20' : 'blue.20'}
|
|
55
54
|
className={cs('vui-drag-and-drop', className)}
|
|
56
55
|
cursor={disabled ? 'not-allowed' : 'pointer'}
|
|
57
56
|
onDragEnter={e => e.preventDefault()}
|
|
58
57
|
onDragOver={e => e.preventDefault()}
|
|
59
58
|
onDrop={e => handleDrop(e)}
|
|
59
|
+
opacity={disabled ? 0.5 : 1}
|
|
60
60
|
p={5}
|
|
61
61
|
pointerEvents={disabled ? 'none' : 'auto'}
|
|
62
62
|
ref={ref}
|
|
@@ -64,7 +64,7 @@ export const DragAndDrop = vui<'label', DragAndDropProps>((props, ref) => {
|
|
|
64
64
|
{...rest}
|
|
65
65
|
>
|
|
66
66
|
{children || (
|
|
67
|
-
<T
|
|
67
|
+
<T display="flex">
|
|
68
68
|
<Icon mr={1} name={icon} />
|
|
69
69
|
{text}
|
|
70
70
|
</T>
|
|
@@ -2,7 +2,7 @@ import { BoxProps } from '../box'
|
|
|
2
2
|
import { IconProp } from '../icon'
|
|
3
3
|
import { ThemingProps } from '../theme'
|
|
4
4
|
|
|
5
|
-
export type DragAndDropProps = BoxProps &
|
|
5
|
+
export type DragAndDropProps = Omit<BoxProps, 'variant'> &
|
|
6
6
|
ThemingProps<'DragAndDrop'> & {
|
|
7
7
|
/** A string that defines the file types the file input should accept. This string is a comma-separated list of [unique file type specifiers](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers). */
|
|
8
8
|
accept?: string
|
package/src/dragAndDrop/theme.ts
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
|
-
const
|
|
1
|
+
const colors = {
|
|
2
|
+
bg: 'skyBlue.95',
|
|
3
|
+
main: 'seaBlue.28',
|
|
4
|
+
hover: 'skyBlue.90'
|
|
5
|
+
}
|
|
2
6
|
|
|
3
|
-
const
|
|
7
|
+
const baseStyle = {
|
|
8
|
+
borderWidth: 2,
|
|
9
|
+
borderStyle: 'solid',
|
|
10
|
+
borderColor: 'transparent',
|
|
11
|
+
bg: colors.bg,
|
|
12
|
+
color: colors.main,
|
|
13
|
+
hoverBg: colors.hover
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const defaultProps = {
|
|
17
|
+
variant: 'default'
|
|
18
|
+
}
|
|
4
19
|
|
|
5
20
|
const sizes = {}
|
|
6
21
|
|
|
7
|
-
const variants = {
|
|
22
|
+
const variants = {
|
|
23
|
+
default: {},
|
|
24
|
+
outlined: {
|
|
25
|
+
borderColor: colors.main,
|
|
26
|
+
borderStyle: 'dashed'
|
|
27
|
+
}
|
|
28
|
+
}
|
|
8
29
|
|
|
9
30
|
export default {
|
|
10
31
|
baseStyle,
|
package/src/index.ts
CHANGED
package/src/input/consts.ts
CHANGED
|
@@ -1,30 +1,45 @@
|
|
|
1
1
|
import { InputStateMapping } from './input.types'
|
|
2
2
|
|
|
3
|
-
export const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
export const inputColors = {
|
|
4
|
+
border: 'sandstone.60',
|
|
5
|
+
placeholder: 'sandstone.55',
|
|
6
|
+
inputText: 'sandstone.10',
|
|
7
|
+
helpText: 'sandstone.30',
|
|
8
|
+
icons: 'seaBlue.28',
|
|
9
|
+
disabled: 'sandstone.95',
|
|
10
|
+
focus: 'seaBlue.28',
|
|
11
|
+
error: 'energyRed.45',
|
|
12
|
+
loading: 'seaBlue.70',
|
|
13
|
+
success: 'landGreen.41'
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const stateIcons = {
|
|
17
|
+
error: 'falExclamationTriangle',
|
|
18
|
+
loading: 'fadSpinnerThird',
|
|
19
|
+
success: 'falCheck'
|
|
20
|
+
}
|
|
6
21
|
|
|
7
22
|
export const inputStateMapping: InputStateMapping = {
|
|
8
23
|
error: {
|
|
9
|
-
|
|
24
|
+
variant: 'red',
|
|
10
25
|
iconProps: {
|
|
11
|
-
color:
|
|
12
|
-
icon:
|
|
26
|
+
color: inputColors.error,
|
|
27
|
+
icon: stateIcons.error
|
|
13
28
|
}
|
|
14
29
|
},
|
|
15
30
|
loading: {
|
|
16
|
-
|
|
31
|
+
variant: 'grey',
|
|
17
32
|
iconProps: {
|
|
18
33
|
animation: 'vui-spin 0.6s linear infinite',
|
|
19
|
-
name:
|
|
20
|
-
pathFill: [
|
|
34
|
+
name: stateIcons.loading,
|
|
35
|
+
pathFill: [inputColors.loading, inputColors.icons]
|
|
21
36
|
}
|
|
22
37
|
},
|
|
23
38
|
success: {
|
|
24
|
-
|
|
39
|
+
variant: 'green',
|
|
25
40
|
iconProps: {
|
|
26
|
-
color:
|
|
27
|
-
icon:
|
|
41
|
+
color: inputColors.success,
|
|
42
|
+
icon: stateIcons.success
|
|
28
43
|
}
|
|
29
44
|
}
|
|
30
45
|
}
|
package/src/input/helpText.tsx
CHANGED
|
@@ -4,7 +4,7 @@ import { useStyleConfig, vui } from '../core'
|
|
|
4
4
|
import Icon from '../icon'
|
|
5
5
|
import P from '../p'
|
|
6
6
|
import { cs } from '../utils'
|
|
7
|
-
import {
|
|
7
|
+
import { inputColors } from './consts'
|
|
8
8
|
import { useInputContext } from './context'
|
|
9
9
|
import { HelpTextProps } from './input.types'
|
|
10
10
|
|
|
@@ -15,7 +15,7 @@ export const HelpText = vui<'div', HelpTextProps>((props, ref) => {
|
|
|
15
15
|
const mergedProps = { ...inputProps, ...props }
|
|
16
16
|
const styles = useStyleConfig('Input', mergedProps)
|
|
17
17
|
|
|
18
|
-
const color = isError ?
|
|
18
|
+
const color = isError ? inputColors.error : inputColors.helpText
|
|
19
19
|
|
|
20
20
|
return (
|
|
21
21
|
<P
|
|
@@ -27,7 +27,7 @@ export const HelpText = vui<'div', HelpTextProps>((props, ref) => {
|
|
|
27
27
|
{...styles.helpText}
|
|
28
28
|
{...rest}
|
|
29
29
|
>
|
|
30
|
-
{isError && <Icon mr={1} name="falExclamationTriangle" pathFill={
|
|
30
|
+
{isError && <Icon mr={1} name="falExclamationTriangle" pathFill={inputColors.error} size="sm" />}
|
|
31
31
|
{children}
|
|
32
32
|
</P>
|
|
33
33
|
)
|
package/src/input/input.tsx
CHANGED
|
@@ -3,7 +3,7 @@ import React, { useEffect, useMemo, useState } from 'react'
|
|
|
3
3
|
import { styled, useStyleConfig, vui, VuiComponent } from '../core'
|
|
4
4
|
import { T } from '../t'
|
|
5
5
|
import { ChangeEvent, cs, filterUndefined, isString } from '../utils'
|
|
6
|
-
import {
|
|
6
|
+
import { inputColors, inputStateMapping } from './consts'
|
|
7
7
|
import { InputProvider } from './context'
|
|
8
8
|
import { getInitialCount } from './helpers'
|
|
9
9
|
import HelpText from './helpText'
|
|
@@ -40,7 +40,6 @@ export const Input = vui<'div', InputProps>((props, ref) => {
|
|
|
40
40
|
autoFocus,
|
|
41
41
|
children,
|
|
42
42
|
className,
|
|
43
|
-
colorScheme,
|
|
44
43
|
defaultValue,
|
|
45
44
|
disabled,
|
|
46
45
|
errorText,
|
|
@@ -50,7 +49,6 @@ export const Input = vui<'div', InputProps>((props, ref) => {
|
|
|
50
49
|
input,
|
|
51
50
|
inputProps,
|
|
52
51
|
inputRef,
|
|
53
|
-
isInvalid,
|
|
54
52
|
itemLeft,
|
|
55
53
|
itemRight,
|
|
56
54
|
helpText,
|
|
@@ -80,16 +78,9 @@ export const Input = vui<'div', InputProps>((props, ref) => {
|
|
|
80
78
|
const [valueInternal, setValueInternal] = useState(defaultValue || '')
|
|
81
79
|
const states = { ...inputStateMapping, ...stateMapping }
|
|
82
80
|
|
|
83
|
-
const
|
|
84
|
-
colorScheme: colorScheme ?? (isInvalid ? 'red' : undefined) ?? states[state]?.colorScheme
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
const styles = useStyleConfig('Input', { ...computedColorScheme, ...props })
|
|
81
|
+
const styles = useStyleConfig('Input', props)
|
|
88
82
|
|
|
89
|
-
const context = useMemo(
|
|
90
|
-
() => filterUndefined({ colorScheme, disabled, size, variant }),
|
|
91
|
-
[colorScheme, disabled, size, variant]
|
|
92
|
-
)
|
|
83
|
+
const context = useMemo(() => filterUndefined({ disabled, size, variant }), [disabled, size, variant])
|
|
93
84
|
|
|
94
85
|
function onChange(e: ChangeEvent) {
|
|
95
86
|
setValueInternal(e.target.value)
|
|
@@ -99,7 +90,7 @@ export const Input = vui<'div', InputProps>((props, ref) => {
|
|
|
99
90
|
|
|
100
91
|
const aliasedProps = filterUndefined({
|
|
101
92
|
'aria-disabled': disabled,
|
|
102
|
-
bg: readOnly ?
|
|
93
|
+
bg: readOnly ? inputColors.disabled : undefined,
|
|
103
94
|
focusWithinBorderColor: !readOnly ? 'transparent' : undefined,
|
|
104
95
|
focusWithinRingColor: readOnly ? 'transparent' : undefined
|
|
105
96
|
})
|
|
@@ -147,7 +138,7 @@ export const Input = vui<'div', InputProps>((props, ref) => {
|
|
|
147
138
|
{showCount && (
|
|
148
139
|
<T
|
|
149
140
|
className="vui-inputCount"
|
|
150
|
-
color={maxLength && count > maxLength ?
|
|
141
|
+
color={maxLength && count > maxLength ? inputColors.error : inputColors.helpText}
|
|
151
142
|
position="absolute"
|
|
152
143
|
right={0}
|
|
153
144
|
size="sm"
|
package/src/input/input.types.ts
CHANGED
|
@@ -14,7 +14,7 @@ export type InputProps = SystemProps &
|
|
|
14
14
|
autoComplete?: string
|
|
15
15
|
/** Passed to the inner input. */
|
|
16
16
|
autoFocus?: boolean
|
|
17
|
-
/**
|
|
17
|
+
/** Deprecated. Please use variant instead. @deprecated */
|
|
18
18
|
colorScheme?: 'green' | 'grey' | 'red'
|
|
19
19
|
/** Passed to the inner input. */
|
|
20
20
|
defaultValue?: number | string
|
|
@@ -32,7 +32,7 @@ export type InputProps = SystemProps &
|
|
|
32
32
|
inputProps?: InputInputProps
|
|
33
33
|
/** Ref passed to the inner input. */
|
|
34
34
|
inputRef?: React.MutableRefObject<HTMLInputElement | null> | null
|
|
35
|
-
/**
|
|
35
|
+
/** Deprecated. Please use variant="red" and/or state="error" instead. @deprecated*/
|
|
36
36
|
isInvalid?: boolean
|
|
37
37
|
/** Socket displaying a custom element on the left. */
|
|
38
38
|
itemLeft?: React.ReactNode
|
|
@@ -41,11 +41,11 @@ export type InputProps = SystemProps &
|
|
|
41
41
|
/** Socket displaying help text bellow an input. */
|
|
42
42
|
helpText?: React.ReactNode | string
|
|
43
43
|
/** Passed to the inner input. */
|
|
44
|
-
max?: number
|
|
44
|
+
max?: number
|
|
45
45
|
/** Passed to the inner input. */
|
|
46
46
|
maxLength?: number
|
|
47
47
|
/** Passed to the inner input. */
|
|
48
|
-
min?: number
|
|
48
|
+
min?: number
|
|
49
49
|
/** Passed to the inner input. */
|
|
50
50
|
name?: string
|
|
51
51
|
/** Passed to the inner input. */
|
|
@@ -69,7 +69,7 @@ export type InputProps = SystemProps &
|
|
|
69
69
|
/** Object definition of styles and content for each state. */
|
|
70
70
|
stateMapping?: InputStateMapping
|
|
71
71
|
/** Passed to the inner input. */
|
|
72
|
-
step?: number
|
|
72
|
+
step?: number
|
|
73
73
|
/** Passed to the inner input. */
|
|
74
74
|
type?: InputType
|
|
75
75
|
/** Passed to the inner input. */
|
|
@@ -85,7 +85,7 @@ export type InputState = 'default' | 'error' | 'loading' | 'success'
|
|
|
85
85
|
export type InputStateMapping = Record<
|
|
86
86
|
string,
|
|
87
87
|
{
|
|
88
|
-
|
|
88
|
+
variant?: InputProps['variant']
|
|
89
89
|
iconProps: IconProps
|
|
90
90
|
}
|
|
91
91
|
>
|
package/src/input/inputIcon.tsx
CHANGED
|
@@ -3,6 +3,7 @@ import React from 'react'
|
|
|
3
3
|
import { useStyleConfig, vui } from '../core'
|
|
4
4
|
import Icon, { IconProps } from '../icon'
|
|
5
5
|
import { cs } from '../utils'
|
|
6
|
+
import { inputColors } from './consts'
|
|
6
7
|
import { useInputContext } from './context'
|
|
7
8
|
|
|
8
9
|
/** Displays an icon within the Input. */
|
|
@@ -12,7 +13,7 @@ export const InputIcon = vui<'svg', IconProps>((props, ref) => {
|
|
|
12
13
|
const mergedProps = { ...inputProps, ...props }
|
|
13
14
|
const styles = useStyleConfig('Input', mergedProps)
|
|
14
15
|
|
|
15
|
-
const color = !mergedProps.disabled ?
|
|
16
|
+
const color = !mergedProps.disabled ? inputColors.icons : inputColors.placeholder
|
|
16
17
|
|
|
17
18
|
return <Icon className={cs('vui-inputIcon', className)} color={color} ref={ref} {...styles.icon} {...rest} />
|
|
18
19
|
})
|
package/src/input/theme.ts
CHANGED
|
@@ -1,37 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { inputColors } from './consts'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const container = {
|
|
7
|
-
borderColor: `${c}.80`,
|
|
3
|
+
const baseStyle = {
|
|
4
|
+
container: {
|
|
8
5
|
focusWithinRing: 2,
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
container.borderColor = `${c}.60`
|
|
14
|
-
container.focusWithinRingColor = 'blue.50'
|
|
6
|
+
color: inputColors.inputText
|
|
7
|
+
},
|
|
8
|
+
input: {
|
|
9
|
+
color: { placeholder: inputColors.placeholder }
|
|
15
10
|
}
|
|
16
|
-
|
|
17
|
-
const icon = {}
|
|
18
|
-
const input = {}
|
|
19
|
-
|
|
20
|
-
return { container, icon, input }
|
|
21
11
|
}
|
|
22
12
|
|
|
23
|
-
const baseStyle = {}
|
|
24
|
-
|
|
25
13
|
const defaultProps = {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
variant: 'default'
|
|
14
|
+
size: 'lg',
|
|
15
|
+
variant: 'grey'
|
|
29
16
|
}
|
|
30
17
|
|
|
31
18
|
const parts = ['container', 'icon', 'input']
|
|
32
19
|
|
|
33
20
|
const sizes = {
|
|
34
|
-
|
|
21
|
+
sm: {
|
|
35
22
|
container: {
|
|
36
23
|
fontSize: 'sm',
|
|
37
24
|
h: 24
|
|
@@ -41,7 +28,7 @@ const sizes = {
|
|
|
41
28
|
},
|
|
42
29
|
input: {}
|
|
43
30
|
},
|
|
44
|
-
|
|
31
|
+
md: {
|
|
45
32
|
container: {
|
|
46
33
|
fontSize: 'sm',
|
|
47
34
|
h: 32
|
|
@@ -51,7 +38,7 @@ const sizes = {
|
|
|
51
38
|
},
|
|
52
39
|
input: {}
|
|
53
40
|
},
|
|
54
|
-
|
|
41
|
+
lg: {
|
|
55
42
|
container: {
|
|
56
43
|
fontSize: 'md',
|
|
57
44
|
h: 40
|
|
@@ -61,7 +48,7 @@ const sizes = {
|
|
|
61
48
|
},
|
|
62
49
|
input: {}
|
|
63
50
|
},
|
|
64
|
-
|
|
51
|
+
xl: {
|
|
65
52
|
container: {
|
|
66
53
|
fontSize: 'lg',
|
|
67
54
|
h: 48
|
|
@@ -74,7 +61,24 @@ const sizes = {
|
|
|
74
61
|
}
|
|
75
62
|
|
|
76
63
|
const variants = {
|
|
77
|
-
|
|
64
|
+
grey: {
|
|
65
|
+
container: {
|
|
66
|
+
borderColor: inputColors.border,
|
|
67
|
+
focusWithinRingColor: inputColors.focus
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
green: {
|
|
71
|
+
container: {
|
|
72
|
+
borderColor: inputColors.success,
|
|
73
|
+
focusWithinRingColor: inputColors.success
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
red: {
|
|
77
|
+
container: {
|
|
78
|
+
borderColor: inputColors.error,
|
|
79
|
+
focusWithinRingColor: inputColors.error
|
|
80
|
+
}
|
|
81
|
+
}
|
|
78
82
|
}
|
|
79
83
|
|
|
80
84
|
export default {
|
|
@@ -5,7 +5,7 @@ export type SkeletonProps = SystemProps &
|
|
|
5
5
|
ThemingProps<'Skeleton'> & {
|
|
6
6
|
/** Children are disabled for this component. */
|
|
7
7
|
children?: never
|
|
8
|
-
/** Available theme colors for this component. @
|
|
8
|
+
/** Available theme colors for this component. @deprecated */
|
|
9
9
|
colorScheme?: 'blue' | 'grey'
|
|
10
10
|
/** Displays given amount of skeleton elements. */
|
|
11
11
|
repeat?: number
|
package/src/skeleton/theme.ts
CHANGED
|
@@ -1,32 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
function variantCircle(props: Dict) {
|
|
4
|
-
const { colorScheme: c } = props
|
|
5
|
-
|
|
6
|
-
const styles = {
|
|
7
|
-
borderRadius: '50%',
|
|
8
|
-
bg: `${c}.20`
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
return styles
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
function variantRectangle(props: Dict) {
|
|
15
|
-
const { colorScheme: c } = props
|
|
16
|
-
|
|
17
|
-
const styles = {
|
|
18
|
-
borderRadius: 'md',
|
|
19
|
-
bg: `${c}.20`,
|
|
20
|
-
w: '100%'
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return styles
|
|
1
|
+
const baseStyle = {
|
|
2
|
+
bg: 'skyBlue.95'
|
|
24
3
|
}
|
|
25
4
|
|
|
26
|
-
const baseStyle = {}
|
|
27
|
-
|
|
28
5
|
const defaultProps = {
|
|
29
|
-
colorScheme: 'blue',
|
|
30
6
|
size: 'md',
|
|
31
7
|
variant: 'rect'
|
|
32
8
|
}
|
|
@@ -47,8 +23,13 @@ const sizes = {
|
|
|
47
23
|
}
|
|
48
24
|
|
|
49
25
|
const variants = {
|
|
50
|
-
circle:
|
|
51
|
-
|
|
26
|
+
circle: {
|
|
27
|
+
borderRadius: '50%'
|
|
28
|
+
},
|
|
29
|
+
rect: {
|
|
30
|
+
borderRadius: 'md',
|
|
31
|
+
w: '100%'
|
|
32
|
+
}
|
|
52
33
|
}
|
|
53
34
|
|
|
54
35
|
export default {
|