@ledgerhq/react-ui 0.5.0 → 0.6.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/components/asorted/index.d.ts +1 -1
- package/components/asorted/index.js +1 -1
- package/components/cta/Button/index.d.ts +10 -8
- package/components/cta/Button/index.js +14 -9
- package/components/form/BaseInput/index.js +1 -1
- package/components/form/Dropdown/index.d.ts +3 -2
- package/components/form/Dropdown/index.js +2 -1
- package/components/form/Radio/RadioElement.d.ts +3 -2
- package/components/form/Radio/RadioElement.js +72 -3
- package/components/form/Radio/index.d.ts +1 -1
- package/components/form/SelectInput/Control.d.ts +3 -9
- package/components/form/SelectInput/Control.js +2 -1
- package/components/form/SelectInput/DropdownIndicator.d.ts +3 -9
- package/components/form/SelectInput/IndicatorsContainer.d.ts +2 -5
- package/components/form/SelectInput/IndicatorsContainer.js +1 -1
- package/components/form/SelectInput/MenuList.d.ts +3 -9
- package/components/form/SelectInput/Option.d.ts +6 -18
- package/components/form/SelectInput/ValueContainer.d.ts +5 -14
- package/components/form/SelectInput/ValueContainer.js +1 -1
- package/components/form/SelectInput/VirtualMenuList.d.ts +2 -5
- package/components/form/SelectInput/VirtualMenuList.js +2 -1
- package/components/form/SelectInput/index.d.ts +7 -16
- package/components/form/SelectInput/index.js +9 -1
- package/components/layout/Drawer/index.d.ts +3 -0
- package/components/layout/Drawer/index.js +30 -13
- package/components/loaders/InfiniteLoader/index.d.ts +8 -7
- package/components/loaders/InfiniteLoader/index.js +35 -9
- package/components/loaders/ProgressLoader/index.d.ts +22 -1
- package/components/loaders/ProgressLoader/index.js +10 -12
- package/components/message/Alert/index.d.ts +20 -11
- package/components/message/Alert/index.js +6 -7
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/package.json +4 -5
- package/styles/InvertTheme.js +1 -1
- package/styles/index.d.ts +1 -0
- package/styles/index.js +1 -0
- package/styles/theme.d.ts +1 -1
- package/styles/theme.js +7 -7
- package/components/loaders/InfiniteLoader/image.d.ts +0 -2
- package/components/loaders/InfiniteLoader/image.js +0 -1
|
@@ -14,13 +14,13 @@ interface BaseProps extends BaseStyledProps, BordersProps {
|
|
|
14
14
|
iconButton?: boolean;
|
|
15
15
|
disabled?: boolean;
|
|
16
16
|
}
|
|
17
|
-
export interface ButtonProps extends BaseProps {
|
|
17
|
+
export interface ButtonProps extends BaseProps, React.RefAttributes<HTMLButtonElement> {
|
|
18
18
|
Icon?: React.ComponentType<{
|
|
19
19
|
size: number;
|
|
20
20
|
color?: string;
|
|
21
21
|
}>;
|
|
22
22
|
children?: React.ReactNode;
|
|
23
|
-
onClick
|
|
23
|
+
onClick?: (event: React.SyntheticEvent<HTMLButtonElement>) => void;
|
|
24
24
|
iconSize?: number;
|
|
25
25
|
style?: React.CSSProperties;
|
|
26
26
|
}
|
|
@@ -29,13 +29,15 @@ export declare const Base: import("styled-components").StyledComponent<"button",
|
|
|
29
29
|
fontFamily: string;
|
|
30
30
|
fontSize: number;
|
|
31
31
|
} & BaseProps, "fontFamily" | "fontSize">;
|
|
32
|
-
declare const
|
|
33
|
-
({ Icon, iconPosition, iconSize, children, onClick, ...props }: ButtonProps): React.ReactElement;
|
|
32
|
+
declare const ButtonWithRef: {
|
|
33
|
+
({ Icon, iconPosition, iconSize, children, onClick, ...props }: ButtonProps, ref?: React.ForwardedRef<HTMLButtonElement> | undefined): React.ReactElement;
|
|
34
34
|
Unstyled: import("styled-components").StyledComponent<"button", import("styled-components").DefaultTheme, {}, never>;
|
|
35
|
+
Expand: React.ForwardRefExoticComponent<Pick<ButtonProps & {
|
|
36
|
+
onToggle?: ((arg0: boolean) => void) | undefined;
|
|
37
|
+
}, "overflow" | "p" | "style" | "key" | "color" | "children" | "onClick" | "variant" | "size" | "rowGap" | "alignContent" | "alignItems" | "alignSelf" | "backgroundColor" | "borderBottomColor" | "borderBottomLeftRadius" | "borderBottomRightRadius" | "borderBottomStyle" | "borderBottomWidth" | "borderLeftColor" | "borderLeftStyle" | "borderLeftWidth" | "borderRightColor" | "borderRightStyle" | "borderRightWidth" | "borderTopColor" | "borderTopLeftRadius" | "borderTopRightRadius" | "borderTopStyle" | "borderTopWidth" | "bottom" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontSize" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "marginBottom" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "opacity" | "order" | "overflowX" | "overflowY" | "paddingBottom" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "top" | "verticalAlign" | "width" | "zIndex" | "border" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderStyle" | "borderTop" | "borderWidth" | "flex" | "margin" | "outline" | "padding" | "disabled" | "onToggle" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "pt" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "bg" | "borderX" | "borderY" | "Icon" | "iconSize" | "ff" | "iconPosition" | "iconButton"> & React.RefAttributes<HTMLButtonElement>>;
|
|
35
38
|
};
|
|
36
|
-
export declare type
|
|
39
|
+
export declare type ButtonExpandProps = React.PropsWithChildren<ButtonProps & {
|
|
37
40
|
onToggle?: (arg0: boolean) => void;
|
|
38
|
-
onClick?: (arg0: React.SyntheticEvent<HTMLButtonElement>) => void;
|
|
39
41
|
}>;
|
|
40
|
-
export declare
|
|
41
|
-
export default
|
|
42
|
+
export declare function ButtonExpand({ onToggle, onClick, ...props }: ButtonExpandProps, ref?: React.ForwardedRef<HTMLButtonElement>): React.ReactElement;
|
|
43
|
+
export default ButtonWithRef;
|
|
@@ -15,6 +15,7 @@ import baseStyled from "../../styled";
|
|
|
15
15
|
import { fontSize, border, compose } from "styled-system";
|
|
16
16
|
import fontFamily from "../../../styles/styled/fontFamily";
|
|
17
17
|
import { fontSizes } from "../../../styles/theme";
|
|
18
|
+
import { rgba } from "../../../styles/helpers";
|
|
18
19
|
import ChevronBottom from "@ledgerhq/icons-ui/react/ChevronBottomRegular";
|
|
19
20
|
const IconContainer = styled.div `
|
|
20
21
|
display: inline-block;
|
|
@@ -153,7 +154,7 @@ export const Base = baseStyled.button.attrs((p) => {
|
|
|
153
154
|
position: relative;
|
|
154
155
|
cursor: ${(p) => (p.disabled ? "default" : "pointer")};
|
|
155
156
|
&:active {
|
|
156
|
-
box-shadow: 0 0 0 4px ${(p) => p.theme.colors.primary.c60};
|
|
157
|
+
box-shadow: 0 0 0 4px ${(p) => rgba(p.theme.colors.primary.c60, 0.4)};
|
|
157
158
|
}
|
|
158
159
|
|
|
159
160
|
${(p) => {
|
|
@@ -188,19 +189,20 @@ export const Base = baseStyled.button.attrs((p) => {
|
|
|
188
189
|
}
|
|
189
190
|
`
|
|
190
191
|
: ""}
|
|
191
|
-
${(p) => p.theme.transition(["background-color", "color", "border-color"])}
|
|
192
|
+
${(p) => p.theme.transition(["background-color", "color", "border-color", "box-shadow"], "0.2s")}
|
|
192
193
|
`;
|
|
193
194
|
const ContentContainer = styled.div ``;
|
|
194
|
-
const Button = (_a) => {
|
|
195
|
+
const Button = (_a, ref) => {
|
|
195
196
|
var _b;
|
|
196
197
|
var { Icon, iconPosition = "right", iconSize = 16, children, onClick } = _a, props = __rest(_a, ["Icon", "iconPosition", "iconSize", "children", "onClick"]);
|
|
197
|
-
return (React.createElement(Base, Object.assign({}, props, { iconButton: !(Icon == null) && !children, onClick: onClick }),
|
|
198
|
+
return (React.createElement(Base, Object.assign({}, props, { ref: ref, iconButton: !(Icon == null) && !children, onClick: onClick }),
|
|
198
199
|
iconPosition === "right" ? React.createElement(ContentContainer, null, children) : null,
|
|
199
200
|
Icon != null ? (React.createElement(IconContainer, { iconPosition: iconPosition },
|
|
200
201
|
React.createElement(Icon, { size: iconSize || fontSizes[(_b = props.fontSize) !== null && _b !== void 0 ? _b : 4] }))) : null,
|
|
201
202
|
iconPosition === "left" ? React.createElement(ContentContainer, null, children) : null));
|
|
202
203
|
};
|
|
203
|
-
const
|
|
204
|
+
const ButtonWithRef = React.forwardRef(Button);
|
|
205
|
+
const StyledButtonExpand = styled(ButtonWithRef).attrs((props) => ({
|
|
204
206
|
Icon: props.Icon != null || ChevronBottom,
|
|
205
207
|
iconPosition: props.iconPosition || "right",
|
|
206
208
|
})) `
|
|
@@ -209,14 +211,17 @@ const StyledExpandButton = styled(Button).attrs((props) => ({
|
|
|
209
211
|
${(p) => (p.expanded ? "transform: rotate(180deg)" : "")}
|
|
210
212
|
}
|
|
211
213
|
`;
|
|
212
|
-
export
|
|
214
|
+
export function ButtonExpand(_a, ref) {
|
|
213
215
|
var { onToggle, onClick } = _a, props = __rest(_a, ["onToggle", "onClick"]);
|
|
214
216
|
const [expanded, setExpanded] = useState(false);
|
|
215
|
-
return (React.createElement(
|
|
217
|
+
return (React.createElement(StyledButtonExpand, Object.assign({}, props, { ref: ref, expanded: expanded, onClick: (event) => {
|
|
216
218
|
setExpanded((expanded) => !expanded);
|
|
217
219
|
onToggle != null && onToggle(!expanded);
|
|
218
220
|
onClick != null && onClick(event);
|
|
219
221
|
} })));
|
|
220
|
-
}
|
|
222
|
+
}
|
|
221
223
|
Button.Unstyled = ButtonUnstyled;
|
|
222
|
-
|
|
224
|
+
Button.Expand = React.forwardRef(ButtonExpand);
|
|
225
|
+
ButtonWithRef.Unstyled = Button.Unstyled;
|
|
226
|
+
ButtonWithRef.Expand = Button.Expand;
|
|
227
|
+
export default ButtonWithRef;
|
|
@@ -28,7 +28,7 @@ export const InputContainer = styled.div `
|
|
|
28
28
|
!p.warning &&
|
|
29
29
|
css `
|
|
30
30
|
border: 1px solid ${p.theme.colors.primary.c80};
|
|
31
|
-
box-shadow: 0 0 0 4px ${rgba(p.theme.colors.primary.c60, 0.
|
|
31
|
+
box-shadow: 0 0 0 4px ${rgba(p.theme.colors.primary.c60, 0.4)};
|
|
32
32
|
`};
|
|
33
33
|
|
|
34
34
|
${(p) => p.error &&
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { GroupBase } from "react-select";
|
|
1
2
|
import { Props as SelectInputProps } from "../../form/SelectInput";
|
|
2
|
-
export declare type Props = SelectInputProps & {
|
|
3
|
+
export declare type Props<O> = SelectInputProps<O, false, GroupBase<O>> & {
|
|
3
4
|
label: string;
|
|
4
5
|
};
|
|
5
|
-
export default function Dropdown(props: Props): JSX.Element;
|
|
6
|
+
export default function Dropdown<O>(props: Props<O>): JSX.Element;
|
|
@@ -18,7 +18,8 @@ import { ValueContainer } from "../../form/SelectInput/ValueContainer";
|
|
|
18
18
|
import { ChevronBottomMedium, ChevronTopMedium } from "@ledgerhq/icons-ui/react";
|
|
19
19
|
import FlexBox from "../../layout/Flex";
|
|
20
20
|
function DropdownControl(props) {
|
|
21
|
-
const { selectProps
|
|
21
|
+
const { selectProps, children } = props;
|
|
22
|
+
const { label } = selectProps;
|
|
22
23
|
return (React.createElement(components.Control, Object.assign({}, props),
|
|
23
24
|
React.createElement(Text, { fontWeight: "semiBold", variant: "paragraph", color: "neutral.c80", mr: 2 }, label),
|
|
24
25
|
children));
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { InputHTMLAttributes } from "react";
|
|
2
2
|
declare type InputAttributes = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "onChange" | "name">;
|
|
3
3
|
export declare type RadioElementProps = InputAttributes & {
|
|
4
|
-
variant?: "default" | "success" | "error";
|
|
4
|
+
variant?: "default" | "main" | "success" | "error";
|
|
5
5
|
label: string;
|
|
6
|
+
outlined?: boolean;
|
|
6
7
|
};
|
|
7
8
|
declare const Element: {
|
|
8
|
-
({ label, value, disabled, variant, ...props }: RadioElementProps): JSX.Element;
|
|
9
|
+
({ label, value, disabled, outlined, variant, ...props }: RadioElementProps): JSX.Element;
|
|
9
10
|
displayName: string;
|
|
10
11
|
};
|
|
11
12
|
export default Element;
|
|
@@ -10,7 +10,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import React, { useContext, useMemo } from "react";
|
|
13
|
-
import styled from "styled-components";
|
|
13
|
+
import styled, { css } from "styled-components";
|
|
14
14
|
import { rgba } from "../../../styles/helpers";
|
|
15
15
|
import Text from "../../asorted/Text";
|
|
16
16
|
import { RadioContext } from "./index";
|
|
@@ -25,6 +25,7 @@ const Input = styled.input `
|
|
|
25
25
|
appearance: none;
|
|
26
26
|
width: var(--ledger-ui-checkbox-size);
|
|
27
27
|
height: var(--ledger-ui-checkbox-size);
|
|
28
|
+
flex-shrink: 0;
|
|
28
29
|
border-radius: ${(p) => `${p.theme.radii[1]}px`};
|
|
29
30
|
border: 1px solid var(--ledger-ui-checkbox-color);
|
|
30
31
|
cursor: pointer;
|
|
@@ -60,6 +61,20 @@ const Input = styled.input `
|
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
|
|
64
|
+
&[data-variant="main"] {
|
|
65
|
+
:hover {
|
|
66
|
+
--ledger-ui-checkbox-color: ${(p) => p.theme.colors.neutral.c90};
|
|
67
|
+
}
|
|
68
|
+
:active,
|
|
69
|
+
:checked,
|
|
70
|
+
:focus {
|
|
71
|
+
--ledger-ui-checkbox-color: ${(p) => p.theme.colors.neutral.c100};
|
|
72
|
+
}
|
|
73
|
+
:focus {
|
|
74
|
+
box-shadow: 0px 0px 0px 4px ${(p) => rgba(p.theme.colors.neutral.c60, 0.48)};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
63
78
|
&[data-variant="success"] {
|
|
64
79
|
:hover,
|
|
65
80
|
:checked:not([disabled]),
|
|
@@ -88,13 +103,67 @@ const Input = styled.input `
|
|
|
88
103
|
background-color: ${(p) => p.theme.colors.neutral.c30};
|
|
89
104
|
}
|
|
90
105
|
`;
|
|
106
|
+
const outlinedCSS = css `
|
|
107
|
+
padding: 20px;
|
|
108
|
+
border: 1px solid ${(p) => p.theme.colors.neutral.c50};
|
|
109
|
+
border-radius: ${(p) => p.theme.radii[2]}px;
|
|
110
|
+
&[data-variant="default"] {
|
|
111
|
+
:hover {
|
|
112
|
+
border-color: ${(p) => p.theme.colors.primary.c90};
|
|
113
|
+
}
|
|
114
|
+
&[data-checked] :active {
|
|
115
|
+
border-color: ${(p) => p.theme.colors.primary.c100};
|
|
116
|
+
}
|
|
117
|
+
:focus {
|
|
118
|
+
border-color: ${(p) => p.theme.colors.primary.c80};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
&[data-variant="main"] {
|
|
123
|
+
:hover {
|
|
124
|
+
border-color: ${(p) => p.theme.colors.neutral.c90};
|
|
125
|
+
}
|
|
126
|
+
&[data-checked],
|
|
127
|
+
:active :focus {
|
|
128
|
+
border-color: ${(p) => p.theme.colors.neutral.c100};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
&[data-variant="success"] {
|
|
133
|
+
&[data-checked]:not([disabled]) {
|
|
134
|
+
border-color: ${(p) => p.theme.colors.success.c100};
|
|
135
|
+
}
|
|
136
|
+
:hover {
|
|
137
|
+
border-color: ${(p) => p.theme.colors.success.c100};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
&[data-variant="error"] {
|
|
142
|
+
&[data-checked]:not([disabled]) {
|
|
143
|
+
border-color: ${(p) => p.theme.colors.error.c100};
|
|
144
|
+
}
|
|
145
|
+
:hover {
|
|
146
|
+
border-color: ${(p) => p.theme.colors.error.c100};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
&[data-variant]:disabled {
|
|
151
|
+
border-color: ${(p) => p.theme.colors.neutral.c40};
|
|
152
|
+
cursor: unset;
|
|
153
|
+
}
|
|
154
|
+
`;
|
|
91
155
|
const RadioElement = styled.label.attrs({ tabIndex: -1 }) `
|
|
92
156
|
display: inline-flex;
|
|
93
157
|
column-gap: 0.75rem;
|
|
94
158
|
align-items: center;
|
|
159
|
+
cursor: pointer;
|
|
160
|
+
&[data-variant]:disabled {
|
|
161
|
+
cursor: unset;
|
|
162
|
+
}
|
|
163
|
+
${(p) => p.outlined && outlinedCSS}
|
|
95
164
|
`;
|
|
96
165
|
const Element = (_a) => {
|
|
97
|
-
var { label, value, disabled, variant = "default" } = _a, props = __rest(_a, ["label", "value", "disabled", "variant"]);
|
|
166
|
+
var { label, value, disabled, outlined, variant = "default" } = _a, props = __rest(_a, ["label", "value", "disabled", "outlined", "variant"]);
|
|
98
167
|
const context = useContext(RadioContext);
|
|
99
168
|
if (context === undefined)
|
|
100
169
|
throw new Error("RadioElement must be used within a RadioProvider");
|
|
@@ -103,7 +172,7 @@ const Element = (_a) => {
|
|
|
103
172
|
const handleChange = (event) => {
|
|
104
173
|
context.onChange(event.target.value);
|
|
105
174
|
};
|
|
106
|
-
return (React.createElement(RadioElement,
|
|
175
|
+
return (React.createElement(RadioElement, Object.assign({ "data-variant": variant }, (isChecked ? { "data-checked": true } : {}), { outlined: outlined }),
|
|
107
176
|
React.createElement(Input, Object.assign({ type: "radio", "data-variant": variant, checked: isChecked, disabled: disabled, onChange: handleChange, value: value, name: context.name }, props)),
|
|
108
177
|
React.createElement(Label, { variant: "paragraph" }, label)));
|
|
109
178
|
};
|
|
@@ -11,7 +11,7 @@ export declare const RadioContext: React.Context<Omit<RadioProps, "children" | "
|
|
|
11
11
|
declare const Radio: {
|
|
12
12
|
({ currentValue, name, onChange, children, containerProps, }: RadioProps): JSX.Element;
|
|
13
13
|
Element: {
|
|
14
|
-
({ label, value, disabled, variant, ...props }: import("./RadioElement").RadioElementProps): JSX.Element;
|
|
14
|
+
({ label, value, disabled, outlined, variant, ...props }: import("./RadioElement").RadioElementProps): JSX.Element;
|
|
15
15
|
displayName: string;
|
|
16
16
|
};
|
|
17
17
|
ListElement: {
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GroupBase, StylesConfig, ControlProps } from "react-select";
|
|
2
2
|
import { DefaultTheme } from "styled-components";
|
|
3
|
-
export declare function getStyles<
|
|
4
|
-
|
|
5
|
-
value: string;
|
|
6
|
-
}, M extends boolean = false>(theme: DefaultTheme): NonNullable<Styles<T, M>["control"]>;
|
|
7
|
-
export declare function Control<T extends OptionTypeBase = {
|
|
8
|
-
label: string;
|
|
9
|
-
value: string;
|
|
10
|
-
}, M extends boolean = false>(props: ControlProps<T, M>): JSX.Element;
|
|
3
|
+
export declare function getStyles<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(theme: DefaultTheme): NonNullable<StylesConfig<O, M, G>["control"]>;
|
|
4
|
+
export declare function Control<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(props: ControlProps<O, M, G>): JSX.Element;
|
|
@@ -5,7 +5,8 @@ export function getStyles(theme) {
|
|
|
5
5
|
return (provided) => (Object.assign(Object.assign({}, provided), { display: "flex", alignItems: "center", width: "100%", border: 0, padding: `0px ${theme.space[7]}px`, boxShadow: "none", borderRadius: "inherit", background: "transparent" }));
|
|
6
6
|
}
|
|
7
7
|
export function Control(props) {
|
|
8
|
-
const { isFocused, selectProps
|
|
8
|
+
const { isFocused, selectProps, children } = props;
|
|
9
|
+
const { isDisabled, error, renderLeft } = selectProps;
|
|
9
10
|
return (React.createElement(InputContainer, { disabled: isDisabled, error: error, focus: isFocused },
|
|
10
11
|
React.createElement(components.Control, Object.assign({}, props),
|
|
11
12
|
renderLeft ? renderLeft(props) : null,
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function getStyles<
|
|
3
|
-
|
|
4
|
-
value: string;
|
|
5
|
-
}, M extends boolean = false>(): NonNullable<Styles<T, M>["dropdownIndicator"]>;
|
|
6
|
-
export declare function DropdownIndicator<T extends OptionTypeBase = {
|
|
7
|
-
label: string;
|
|
8
|
-
value: string;
|
|
9
|
-
}, M extends boolean = false>(props: IndicatorProps<T, M>): JSX.Element;
|
|
1
|
+
import { GroupBase, StylesConfig, DropdownIndicatorProps } from "react-select";
|
|
2
|
+
export declare function getStyles<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(): NonNullable<StylesConfig<O, M, G>["dropdownIndicator"]>;
|
|
3
|
+
export declare function DropdownIndicator<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(props: DropdownIndicatorProps<O, M, G>): JSX.Element;
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function IndicatorsContainer<
|
|
3
|
-
label: string;
|
|
4
|
-
value: string;
|
|
5
|
-
}, M extends boolean = false>(props: IndicatorContainerProps<T, M>): JSX.Element;
|
|
1
|
+
import { GroupBase, IndicatorsContainerProps } from "react-select";
|
|
2
|
+
export declare function IndicatorsContainer<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(props: IndicatorsContainerProps<O, M, G>): JSX.Element;
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
import { components } from "react-select";
|
|
3
3
|
import FlexBox from "../../layout/Flex";
|
|
4
4
|
export function IndicatorsContainer(props) {
|
|
5
|
-
const {
|
|
5
|
+
const { renderRight } = props.selectProps;
|
|
6
6
|
return (React.createElement(FlexBox, { alignItems: "center" },
|
|
7
7
|
renderRight ? renderRight(props) : null,
|
|
8
8
|
React.createElement(components.IndicatorsContainer, Object.assign({}, props))));
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GroupBase, StylesConfig, MenuListProps } from "react-select";
|
|
2
2
|
import { DefaultTheme } from "styled-components";
|
|
3
|
-
export declare function getStyles<
|
|
4
|
-
|
|
5
|
-
value: string;
|
|
6
|
-
}, M extends boolean = false>(theme: DefaultTheme): NonNullable<Styles<T, M>["menuList"]>;
|
|
7
|
-
export declare function MenuList<T extends OptionTypeBase = {
|
|
8
|
-
label: string;
|
|
9
|
-
value: string;
|
|
10
|
-
}, M extends boolean = false>(props: MenuListComponentProps<T, M>): JSX.Element;
|
|
3
|
+
export declare function getStyles<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(theme: DefaultTheme): NonNullable<StylesConfig<O, M, G>["menuList"]>;
|
|
4
|
+
export declare function MenuList<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(props: MenuListProps<O, M, G>): JSX.Element;
|
|
@@ -1,20 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
export declare function getStyles<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}, M extends boolean = false>(): NonNullable<Styles<T, M>["option"]>;
|
|
7
|
-
export declare type ExtraProps<T extends OptionTypeBase = {
|
|
8
|
-
label: string;
|
|
9
|
-
value: string;
|
|
10
|
-
}, M extends boolean = false> = {
|
|
11
|
-
render?: (props: React.PropsWithChildren<OptionProps<T, M>>) => React.ReactNode;
|
|
2
|
+
import { GroupBase, StylesConfig, OptionProps } from "react-select";
|
|
3
|
+
export declare function getStyles<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(): NonNullable<StylesConfig<O, M, G>["option"]>;
|
|
4
|
+
export declare type ExtraProps<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>> = {
|
|
5
|
+
render?: (props: React.PropsWithChildren<OptionProps<O, M, G>>) => React.ReactNode;
|
|
12
6
|
};
|
|
13
|
-
export declare type Props<
|
|
14
|
-
|
|
15
|
-
value: string;
|
|
16
|
-
}, M extends boolean = false> = OptionProps<T, M> & ExtraProps<T, M>;
|
|
17
|
-
export declare function Option<T extends OptionTypeBase = {
|
|
18
|
-
label: string;
|
|
19
|
-
value: string;
|
|
20
|
-
}, M extends boolean = false>(props: Props<T, M>): JSX.Element;
|
|
7
|
+
export declare type Props<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>> = OptionProps<O, M, G> & ExtraProps<O, M, G>;
|
|
8
|
+
export declare function Option<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(props: Props<O, M, G>): JSX.Element;
|
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
export declare function getStyles<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}, M extends boolean = false>(): Styles<T, M>["valueContainer"];
|
|
7
|
-
declare type ExtraProps<T extends OptionTypeBase = {
|
|
8
|
-
label: string;
|
|
9
|
-
value: string;
|
|
10
|
-
}, M extends boolean = false> = {
|
|
11
|
-
render?: (props: React.PropsWithChildren<ValueContainerProps<T, M>>) => React.ReactNode;
|
|
2
|
+
import { GroupBase, StylesConfig, ValueContainerProps } from "react-select";
|
|
3
|
+
export declare function getStyles<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(): StylesConfig<O, M, G>["valueContainer"];
|
|
4
|
+
declare type ExtraProps<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>> = {
|
|
5
|
+
render?: (props: React.PropsWithChildren<ValueContainerProps<O, M, G>>) => React.ReactNode;
|
|
12
6
|
};
|
|
13
|
-
export declare function ValueContainer<
|
|
14
|
-
label: string;
|
|
15
|
-
value: string;
|
|
16
|
-
}, M extends boolean = false>(props: ValueContainerProps<T, M> & ExtraProps<T, M>): JSX.Element;
|
|
7
|
+
export declare function ValueContainer<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(props: ValueContainerProps<O, M, G> & ExtraProps<O, M, G>): JSX.Element;
|
|
17
8
|
export {};
|
|
@@ -7,5 +7,5 @@ export function getStyles() {
|
|
|
7
7
|
export function ValueContainer(props) {
|
|
8
8
|
const color = props.selectProps.isDisabled ? "neutral.c60" : "neutral.c100";
|
|
9
9
|
return (React.createElement(components.ValueContainer, Object.assign({}, props),
|
|
10
|
-
React.createElement(Text, { as: "div", variant: "paragraph", color: color }, props.render ? props.render(props) : props.children)));
|
|
10
|
+
React.createElement(Text, { as: "div", variant: "paragraph", color: color, style: { display: "inherit", alignItems: "center" } }, props.render ? props.render(props) : props.children)));
|
|
11
11
|
}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { GroupBase, MenuListProps } from "react-select";
|
|
3
3
|
export declare type RowProps = React.PropsWithChildren<{
|
|
4
4
|
style: React.CSSProperties;
|
|
5
5
|
}>;
|
|
6
6
|
export declare const VirtualRow: React.MemoExoticComponent<({ style, children }: RowProps) => JSX.Element>;
|
|
7
|
-
export declare function VirtualMenuList<
|
|
8
|
-
label: string;
|
|
9
|
-
value: string;
|
|
10
|
-
}, M extends boolean = false>(props: MenuListComponentProps<T, M>): React.ReactElement;
|
|
7
|
+
export declare function VirtualMenuList<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>>(props: MenuListProps<O, M, G>): React.ReactElement;
|
|
@@ -3,7 +3,8 @@ import { components } from "react-select";
|
|
|
3
3
|
import { FixedSizeList as List } from "react-window";
|
|
4
4
|
export const VirtualRow = memo(({ style, children }) => (React.createElement("div", { style: style }, children)));
|
|
5
5
|
export function VirtualMenuList(props) {
|
|
6
|
-
const { children, options, maxHeight, getValue, getStyles, selectProps
|
|
6
|
+
const { children, options, maxHeight, getValue, getStyles, selectProps } = props;
|
|
7
|
+
const { noOptionsMessage, rowHeight = 0 } = selectProps;
|
|
7
8
|
const listRef = useRef();
|
|
8
9
|
const [value] = getValue();
|
|
9
10
|
const initialOffset = options.indexOf(value) * rowHeight;
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { Props as SelectProps,
|
|
3
|
-
export declare type SelfProps<
|
|
4
|
-
label: string;
|
|
5
|
-
value: string;
|
|
6
|
-
}, M extends boolean = false> = {
|
|
2
|
+
import { Props as SelectProps, ControlProps, IndicatorsContainerProps, GroupBase, StylesConfig } from "react-select";
|
|
3
|
+
export declare type SelfProps<O, M extends boolean, G extends GroupBase<O>> = {
|
|
7
4
|
error?: string;
|
|
8
|
-
renderLeft?: (props:
|
|
9
|
-
renderRight?: (props:
|
|
5
|
+
renderLeft?: (props: ControlProps<O, M, G>) => React.ReactNode;
|
|
6
|
+
renderRight?: (props: IndicatorsContainerProps<O, M, G>) => React.ReactNode;
|
|
10
7
|
rowHeight?: number;
|
|
11
8
|
unwrapped?: boolean;
|
|
12
|
-
extendStyles?: (styles:
|
|
9
|
+
extendStyles?: (styles: StylesConfig<O, M, G>) => StylesConfig<O, M, G>;
|
|
13
10
|
};
|
|
14
|
-
export declare type Props<
|
|
15
|
-
|
|
16
|
-
value: string;
|
|
17
|
-
}, M extends boolean = false> = SelectProps<T, M> & SelfProps<T, M>;
|
|
18
|
-
declare function SelectInput<T extends OptionTypeBase = {
|
|
19
|
-
label: string;
|
|
20
|
-
value: string;
|
|
21
|
-
}, M extends boolean = false>({ error, rowHeight, unwrapped, extendStyles, ...props }: Props<T, M>): JSX.Element;
|
|
11
|
+
export declare type Props<O = unknown, M extends boolean = false, G extends GroupBase<O> = GroupBase<O>> = SelectProps<O, M, G> & SelfProps<O, M, G>;
|
|
12
|
+
declare function SelectInput<O, M extends boolean, G extends GroupBase<O>>({ error, rowHeight, unwrapped, extendStyles, ...props }: Props<O, M, G>): JSX.Element;
|
|
22
13
|
declare const _default: typeof SelectInput;
|
|
23
14
|
export default _default;
|
|
@@ -28,6 +28,12 @@ const stylesFn = (theme) => ({
|
|
|
28
28
|
input: (provided) => (Object.assign(Object.assign({}, provided), { color: theme.colors.neutral.c100 })),
|
|
29
29
|
placeholder: (provided) => (Object.assign(Object.assign({}, provided), { color: theme.colors.neutral.c60 })),
|
|
30
30
|
singleValue: (provided) => (Object.assign(Object.assign({}, provided), { color: "inherit" })),
|
|
31
|
+
multiValue: (provided) => (Object.assign(Object.assign({}, provided), { backgroundColor: theme.colors.primary.c20, borderRadius: theme.radii[1] })),
|
|
32
|
+
multiValueLabel: (provided) => (Object.assign(Object.assign({}, provided), { color: theme.colors.neutral.c100 })),
|
|
33
|
+
multiValueRemove: (provided) => (Object.assign(Object.assign({}, provided), { cursor: "pointer", ":hover": {
|
|
34
|
+
color: theme.colors.error.c100,
|
|
35
|
+
backgroundColor: theme.colors.error.c30,
|
|
36
|
+
} })),
|
|
31
37
|
menu: (provided) => (Object.assign(Object.assign({}, provided), { border: 0, boxShadow: "none", background: "none" })),
|
|
32
38
|
});
|
|
33
39
|
function SelectInput(_a) {
|
|
@@ -35,7 +41,9 @@ function SelectInput(_a) {
|
|
|
35
41
|
const theme = useTheme();
|
|
36
42
|
const styles = useMemo(() => (extendStyles ? extendStyles(stylesFn(theme)) : stylesFn(theme)), [theme, extendStyles]);
|
|
37
43
|
const { isDisabled, components = {} } = props;
|
|
38
|
-
const innerContent = (React.createElement(Select, Object.assign({}, props, {
|
|
44
|
+
const innerContent = (React.createElement(Select, Object.assign({}, props, { styles: Object.assign(Object.assign({}, styles), props.styles), classNamePrefix: "react-select", components: Object.assign({ Control: ControlModule.Control, ValueContainer: ValueContainerModule.ValueContainer, IndicatorsContainer, DropdownIndicator: DropdownIndicatorModule.DropdownIndicator, MenuList: MenuListModule.MenuList, Option: OptionModule.Option, IndicatorSeparator: null }, components),
|
|
45
|
+
// @ts-expect-error We want to be able to pass extra props here…
|
|
46
|
+
rowHeight: rowHeight })));
|
|
39
47
|
if (unwrapped)
|
|
40
48
|
return innerContent;
|
|
41
49
|
return (React.createElement("div", null,
|
|
@@ -3,7 +3,10 @@ export interface DrawerProps {
|
|
|
3
3
|
isOpen: boolean;
|
|
4
4
|
children: React.ReactNode;
|
|
5
5
|
title?: React.ReactNode;
|
|
6
|
+
footer?: React.ReactNode;
|
|
6
7
|
big?: boolean;
|
|
8
|
+
ignoreBackdropClick?: boolean;
|
|
9
|
+
backgroundColor?: string;
|
|
7
10
|
onClose: () => void;
|
|
8
11
|
onBack?: () => void;
|
|
9
12
|
setTransitionsEnabled?: (arg0: boolean) => void;
|
|
@@ -13,7 +13,8 @@ import React, { useCallback } from "react";
|
|
|
13
13
|
import ReactDOM from "react-dom";
|
|
14
14
|
import styled from "styled-components";
|
|
15
15
|
import FlexBox from "../Flex";
|
|
16
|
-
import
|
|
16
|
+
import Divider from "../../asorted/Divider";
|
|
17
|
+
import Close from "@ledgerhq/icons-ui/react/CloseMedium";
|
|
17
18
|
import ArrowLeft from "@ledgerhq/icons-ui/react/ArrowLeftRegular";
|
|
18
19
|
import TransitionSlide from "../../transitions/TransitionSlide";
|
|
19
20
|
import TransitionInOut from "../../transitions/TransitionInOut";
|
|
@@ -22,19 +23,21 @@ const Container = styled(FlexBox) `
|
|
|
22
23
|
width: 100%;
|
|
23
24
|
height: 100%;
|
|
24
25
|
flex-direction: column;
|
|
25
|
-
background-color: ${(p) => p.theme.colors.neutral.c00};
|
|
26
|
-
padding: ${(p) => p.theme.space[6]}px ${(p) => p.theme.space[12]}px;
|
|
27
26
|
`;
|
|
28
27
|
const Header = styled(FlexBox) `
|
|
29
|
-
display: flex;
|
|
30
|
-
flex-direction: row;
|
|
31
28
|
justify-content: space-between;
|
|
32
29
|
align-items: center;
|
|
33
|
-
|
|
30
|
+
padding: ${(p) => p.theme.space[12]}px;
|
|
31
|
+
padding-bottom: ${(p) => p.theme.space[10]}px;
|
|
32
|
+
`;
|
|
33
|
+
const Footer = styled(FlexBox) `
|
|
34
|
+
align-items: center;
|
|
35
|
+
padding: ${(p) => p.theme.space[8]}px ${(p) => p.theme.space[12]}px;
|
|
34
36
|
`;
|
|
35
37
|
const Wrapper = styled.div `
|
|
36
38
|
height: 100%;
|
|
37
39
|
width: ${(p) => p.big ? p.theme.sizes.drawer.side.big.width : p.theme.sizes.drawer.side.small.width}px;
|
|
40
|
+
background-color: ${(p) => { var _a; return (_a = p.backgroundColor) !== null && _a !== void 0 ? _a : p.theme.colors.neutral.c00; }};
|
|
38
41
|
display: flex;
|
|
39
42
|
flex-direction: column;
|
|
40
43
|
align-items: stretch;
|
|
@@ -55,6 +58,8 @@ const Overlay = styled.div `
|
|
|
55
58
|
const ScrollWrapper = styled.div `
|
|
56
59
|
overflow: scroll;
|
|
57
60
|
position: relative;
|
|
61
|
+
padding: ${(p) => p.theme.space[12]}px;
|
|
62
|
+
padding-top: 0px;
|
|
58
63
|
flex: 1;
|
|
59
64
|
|
|
60
65
|
&::-webkit-scrollbar {
|
|
@@ -70,21 +75,33 @@ const Button = styled.button `
|
|
|
70
75
|
cursor: pointer;
|
|
71
76
|
color: ${(p) => p.theme.colors.neutral.c100};
|
|
72
77
|
`;
|
|
73
|
-
const DrawerContent = ({ isOpen, title, children, big, onClose, setTransitionsEnabled = () => 0, onBack, hideNavigation = true, }) => {
|
|
78
|
+
const DrawerContent = ({ isOpen, title, children, footer, big, onClose, backgroundColor, setTransitionsEnabled = () => 0, onBack, ignoreBackdropClick = false, hideNavigation = true, }) => {
|
|
74
79
|
const disableChildAnimations = useCallback(() => setTransitionsEnabled(false), [setTransitionsEnabled]);
|
|
75
80
|
const enableChildAnimations = useCallback(() => setTransitionsEnabled(true), [setTransitionsEnabled]);
|
|
81
|
+
const handleBackdropClick = useCallback(() => {
|
|
82
|
+
if (!ignoreBackdropClick) {
|
|
83
|
+
onClose();
|
|
84
|
+
}
|
|
85
|
+
}, [onClose, ignoreBackdropClick]);
|
|
86
|
+
const stopClickPropagation = useCallback((e) => {
|
|
87
|
+
e.stopPropagation();
|
|
88
|
+
}, []);
|
|
76
89
|
return (React.createElement(TransitionInOut, { in: isOpen, appear: true, mountOnEnter: true, unmountOnExit: true, onEntering: disableChildAnimations, onEntered: enableChildAnimations, onExiting: disableChildAnimations },
|
|
77
|
-
React.createElement(Overlay,
|
|
90
|
+
React.createElement(Overlay, { onClick: handleBackdropClick },
|
|
78
91
|
React.createElement(TransitionSlide, { in: isOpen, fixed: true, reverseExit: true, appear: true, mountOnEnter: true, unmountOnExit: true },
|
|
79
|
-
React.createElement(Wrapper, { big: big },
|
|
92
|
+
React.createElement(Wrapper, { big: big, onClick: stopClickPropagation, backgroundColor: backgroundColor },
|
|
80
93
|
React.createElement(Container, null,
|
|
81
94
|
React.createElement(Header, null,
|
|
82
95
|
!hideNavigation && (React.createElement(React.Fragment, null, onBack != null ? (React.createElement(Button, { onClick: onBack },
|
|
83
96
|
React.createElement(ArrowLeft, { size: 21 }))) : (React.createElement(ButtonPlaceholder, null)))),
|
|
84
|
-
(React.createElement(Text, { variant: "
|
|
85
|
-
React.createElement(
|
|
86
|
-
React.createElement(
|
|
87
|
-
|
|
97
|
+
(React.createElement(Text, { variant: "h3", flex: 1, textAlign: "center" }, title)) || React.createElement("div", null),
|
|
98
|
+
React.createElement(FlexBox, { alignSelf: "flex-start" },
|
|
99
|
+
React.createElement(Button, { onClick: onClose },
|
|
100
|
+
React.createElement(Close, null)))),
|
|
101
|
+
React.createElement(ScrollWrapper, null, children),
|
|
102
|
+
footer && (React.createElement(React.Fragment, null,
|
|
103
|
+
React.createElement(Divider, { variant: "light" }),
|
|
104
|
+
React.createElement(Footer, null, footer)))))))));
|
|
88
105
|
};
|
|
89
106
|
const Drawer = (_a) => {
|
|
90
107
|
var { children } = _a, sideProps = __rest(_a, ["children"]);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
export default InfiniteLoader;
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SizeProps } from "styled-system";
|
|
3
|
+
declare const Loader: import("styled-components").StyledComponent<"svg", import("styled-components").DefaultTheme, SizeProps<Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>, import("csstype").Property.Height<import("styled-system").TLengthStyledSystem>>, never>;
|
|
4
|
+
export declare type Props = React.ComponentProps<typeof Loader> & {
|
|
5
|
+
color?: string;
|
|
6
|
+
};
|
|
7
|
+
export default function InfiniteLoader({ size, color, ...extraProps }: Props): JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -1,5 +1,17 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import React from "react";
|
|
1
13
|
import styled, { keyframes } from "styled-components";
|
|
2
|
-
import
|
|
14
|
+
import { system, size } from "styled-system";
|
|
3
15
|
const rotate = keyframes `
|
|
4
16
|
0% {
|
|
5
17
|
transform: rotate(0deg);
|
|
@@ -8,13 +20,27 @@ const rotate = keyframes `
|
|
|
8
20
|
transform: rotate(360deg);
|
|
9
21
|
}
|
|
10
22
|
`;
|
|
11
|
-
const
|
|
12
|
-
alt: "loading...",
|
|
13
|
-
src: `data:image/png;base64,${image}`,
|
|
14
|
-
width: "28",
|
|
15
|
-
height: "28",
|
|
16
|
-
}) `
|
|
23
|
+
const Loader = styled.svg `
|
|
17
24
|
animation: ${rotate} 1s linear infinite;
|
|
18
|
-
|
|
25
|
+
${size}
|
|
26
|
+
${system({
|
|
27
|
+
stroke: {
|
|
28
|
+
property: "stroke",
|
|
29
|
+
scale: "colors",
|
|
30
|
+
},
|
|
31
|
+
})}
|
|
19
32
|
`;
|
|
20
|
-
export default InfiniteLoader
|
|
33
|
+
export default function InfiniteLoader(_a) {
|
|
34
|
+
var { size = 38, color = "primary.c50" } = _a, extraProps = __rest(_a, ["size", "color"]);
|
|
35
|
+
return (React.createElement(Loader, Object.assign({ size: size, stroke: color, viewBox: "0 0 38 38", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, extraProps),
|
|
36
|
+
React.createElement("linearGradient", { id: "gradient-start", gradientUnits: "userSpaceOnUse", gradientTransform: "rotate(-20)" },
|
|
37
|
+
React.createElement("stop", { offset: "0", stopColor: "white", stopOpacity: "0.5" }),
|
|
38
|
+
React.createElement("stop", { offset: "1", stopColor: "white", stopOpacity: "1" })),
|
|
39
|
+
React.createElement("linearGradient", { id: "gradient-end", gradientUnits: "userSpaceOnUse", gradientTransform: "rotate(-20)" },
|
|
40
|
+
React.createElement("stop", { offset: "0", stopColor: "white", stopOpacity: "0.5" }),
|
|
41
|
+
React.createElement("stop", { offset: "1", stopColor: "white", stopOpacity: "0" })),
|
|
42
|
+
React.createElement("mask", { id: "gradient-mask", maskUnits: "userSpaceOnUse" },
|
|
43
|
+
React.createElement("rect", { x: "-0", y: "-4", width: "44", height: "22", strokeWidth: "0", fill: "url(#gradient-start)", transform: "rotate(10)" }),
|
|
44
|
+
React.createElement("rect", { x: "0", y: "18", width: "44", height: "21", strokeWidth: "0", fill: "url(#gradient-end)", transform: "rotate(10)" })),
|
|
45
|
+
React.createElement("path", { d: "M34.8807 20.9499C35.3608 17.0398 34.3815 13.09 32.1304 9.85712C29.8793 6.6242 26.5146 4.33541 22.6808 3.42914C18.847 2.52287 14.8136 3.06283 11.3532 4.94559C7.89277 6.82836 5.24858 9.92158 3.92708 13.6328C2.60558 17.344 2.69968 21.4123 4.19135 25.0584C5.68302 28.7045 8.4674 31.6722 12.0112 33.3929C15.5549 35.1137 19.609 35.4666 23.3968 34.384C27.1846 33.3015 30.4398 30.8596 32.5391 27.526", strokeWidth: "6", strokeLinecap: "round", strokeLinejoin: "round", mask: "url(#gradient-mask)" })));
|
|
46
|
+
}
|
|
@@ -11,5 +11,26 @@ export interface Props {
|
|
|
11
11
|
* Progress of the loader, in percent, between 0 and 100.
|
|
12
12
|
*/
|
|
13
13
|
progress?: number;
|
|
14
|
+
/**
|
|
15
|
+
* Whether to display the progress, defaults to true.
|
|
16
|
+
*/
|
|
17
|
+
showPercentage?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Percentage text color
|
|
20
|
+
*/
|
|
21
|
+
textColor?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Front stroke color.
|
|
24
|
+
*/
|
|
25
|
+
frontStrokeColor?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Front stroke linecap.
|
|
28
|
+
* https://developer.mozilla.org/fr/docs/Web/SVG/Attribute/stroke-linecap
|
|
29
|
+
*/
|
|
30
|
+
frontStrokeLinecap?: "butt" | "round";
|
|
31
|
+
/**
|
|
32
|
+
* Background stroke color.
|
|
33
|
+
*/
|
|
34
|
+
backgroundStrokeColor?: string;
|
|
14
35
|
}
|
|
15
|
-
export default function ProgressLoader({ radius, stroke, progress, }: Props): JSX.Element;
|
|
36
|
+
export default function ProgressLoader({ radius, stroke, progress, showPercentage, textColor, frontStrokeColor, frontStrokeLinecap, backgroundStrokeColor, }: Props): JSX.Element;
|
|
@@ -11,14 +11,12 @@ const StyledCircle = styled.circle.attrs({
|
|
|
11
11
|
transform-origin: 50% 50%;
|
|
12
12
|
`;
|
|
13
13
|
const StyledCircleBackground = styled(StyledCircle).attrs((props) => ({
|
|
14
|
-
stroke: props.theme.colors.primary.c20,
|
|
14
|
+
stroke: props.stroke || props.theme.colors.primary.c20,
|
|
15
15
|
})) ``;
|
|
16
16
|
const StyledCircleFront = styled(StyledCircle).attrs((props) => ({
|
|
17
|
-
stroke: props.theme.colors.primary.c60,
|
|
17
|
+
stroke: props.stroke || props.theme.colors.primary.c60,
|
|
18
18
|
})) ``;
|
|
19
|
-
const StyledCenteredText = styled(Text)
|
|
20
|
-
color: "primary.c80",
|
|
21
|
-
}) `
|
|
19
|
+
const StyledCenteredText = styled(Text) `
|
|
22
20
|
position: absolute;
|
|
23
21
|
top: 50%;
|
|
24
22
|
left: 50%;
|
|
@@ -29,18 +27,18 @@ const StyledProgressLoaderContainer = styled.div `
|
|
|
29
27
|
display: flex;
|
|
30
28
|
position: absolute;
|
|
31
29
|
`;
|
|
32
|
-
function ProgressCircleSvg({ radius, stroke, progress, }) {
|
|
30
|
+
function ProgressCircleSvg({ radius, stroke, progress, backgroundStrokeColor, frontStrokeColor, frontStrokeLinecap, }) {
|
|
33
31
|
const normalizedRadius = radius - stroke / 2;
|
|
34
32
|
const circumference = normalizedRadius * 2 * Math.PI;
|
|
35
33
|
const strokeDashoffset = circumference - (progress / 100) * circumference;
|
|
36
34
|
return (React.createElement("svg", { height: radius * 2, width: radius * 2 },
|
|
37
|
-
React.createElement(StyledCircleBackground, { strokeWidth: stroke, strokeDasharray: circumference + " " + circumference, style: { strokeDashoffset: 0 }, r: normalizedRadius }),
|
|
38
|
-
React.createElement(StyledCircleFront, { strokeWidth: stroke, strokeDasharray: circumference + " " + circumference, style: { strokeDashoffset }, r: normalizedRadius })));
|
|
35
|
+
React.createElement(StyledCircleBackground, { strokeWidth: stroke, strokeDasharray: circumference + " " + circumference, style: { strokeDashoffset: 0 }, stroke: backgroundStrokeColor, r: normalizedRadius }),
|
|
36
|
+
React.createElement(StyledCircleFront, { strokeWidth: stroke, strokeDasharray: circumference + " " + circumference, style: { strokeDashoffset }, stroke: frontStrokeColor, strokeLinecap: frontStrokeLinecap, r: normalizedRadius })));
|
|
39
37
|
}
|
|
40
|
-
export default function ProgressLoader({ radius = 32, stroke = 6, progress = 0, }) {
|
|
38
|
+
export default function ProgressLoader({ radius = 32, stroke = 6, progress = 0, showPercentage = true, textColor, frontStrokeColor, frontStrokeLinecap, backgroundStrokeColor, }) {
|
|
41
39
|
return (React.createElement(StyledProgressLoaderContainer, null,
|
|
42
|
-
React.createElement(StyledCenteredText, { variant: "body" },
|
|
40
|
+
showPercentage && (React.createElement(StyledCenteredText, { variant: "body", color: textColor || "primary.c80" },
|
|
43
41
|
progress,
|
|
44
|
-
"%"),
|
|
45
|
-
React.createElement(ProgressCircleSvg, { radius: radius, stroke: stroke, progress: progress })));
|
|
42
|
+
"%")),
|
|
43
|
+
React.createElement(ProgressCircleSvg, { radius: radius, stroke: stroke, progress: progress, frontStrokeColor: frontStrokeColor, frontStrokeLinecap: frontStrokeLinecap, backgroundStrokeColor: backgroundStrokeColor })));
|
|
46
44
|
}
|
|
@@ -1,28 +1,37 @@
|
|
|
1
1
|
import { TextVariants } from "../../../styles/theme";
|
|
2
2
|
declare type AlertType = "info" | "warning" | "error";
|
|
3
|
+
declare type RenderProps = (props: {
|
|
4
|
+
color: string;
|
|
5
|
+
textProps: {
|
|
6
|
+
variant?: TextVariants;
|
|
7
|
+
fontWeight?: string;
|
|
8
|
+
};
|
|
9
|
+
}) => JSX.Element;
|
|
3
10
|
export interface AlertProps {
|
|
4
11
|
/**
|
|
5
|
-
* Affects the colors of the background & text and what icon can be displayed
|
|
12
|
+
* Affects the colors of the background & text and what icon can be displayed.
|
|
6
13
|
*/
|
|
7
14
|
type?: AlertType;
|
|
8
15
|
/**
|
|
9
|
-
* Title of the Alert
|
|
16
|
+
* Title of the Alert.
|
|
10
17
|
*/
|
|
11
18
|
title?: string;
|
|
12
19
|
/**
|
|
13
|
-
* Method for rendering additional content under the title `{ color: string; textProps: { variant?: TextVariants; fontWeight?: string } }` is passed as props to easily style text elements
|
|
20
|
+
* Method for rendering additional content under the title. `{ color: string; textProps: { variant?: TextVariants; fontWeight?: string } }` is passed as props to easily style text elements.
|
|
14
21
|
*/
|
|
15
|
-
renderContent?:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
renderContent?: RenderProps;
|
|
23
|
+
/**
|
|
24
|
+
* Method for rendering additional content to the right. `{ color: string; textProps: { variant?: TextVariants; fontWeight?: string } }` is passed as props to easily style text elements.
|
|
25
|
+
*/
|
|
26
|
+
renderRight?: RenderProps;
|
|
27
|
+
/**
|
|
28
|
+
* Additional props to be passed to the top level container (containing icon + content).
|
|
29
|
+
*/
|
|
30
|
+
containerProps?: Record<string, unknown>;
|
|
22
31
|
/**
|
|
23
32
|
* Whether or not to display an icon
|
|
24
33
|
*/
|
|
25
34
|
showIcon?: boolean;
|
|
26
35
|
}
|
|
27
|
-
export default function Alert({ type, title, showIcon, renderContent, }: AlertProps): JSX.Element;
|
|
36
|
+
export default function Alert({ type, title, showIcon, renderContent, renderRight, containerProps, }: AlertProps): JSX.Element;
|
|
28
37
|
export {};
|
|
@@ -35,22 +35,21 @@ const getColors = ({ theme, type }) => {
|
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
const StyledAlertContainer = styled(Flex)
|
|
39
|
-
padding: 6,
|
|
40
|
-
})) `
|
|
38
|
+
const StyledAlertContainer = styled(Flex) `
|
|
41
39
|
border-radius: ${(p) => `${p.theme.radii[1]}px`};
|
|
42
40
|
align-items: center;
|
|
43
41
|
`;
|
|
44
|
-
export default function Alert({ type = "info", title, showIcon = true, renderContent, }) {
|
|
42
|
+
export default function Alert({ type = "info", title, showIcon = true, renderContent, renderRight, containerProps, }) {
|
|
45
43
|
const theme = useTheme();
|
|
46
44
|
const { color, background } = getColors({ theme, type });
|
|
47
45
|
const textProps = {
|
|
48
46
|
variant: "paragraph",
|
|
49
47
|
fontWeight: "medium",
|
|
50
48
|
};
|
|
51
|
-
return (React.createElement(StyledAlertContainer, { color: color, backgroundColor: background },
|
|
49
|
+
return (React.createElement(StyledAlertContainer, Object.assign({ color: color, backgroundColor: background, padding: 6 }, containerProps),
|
|
52
50
|
showIcon && !!icons[type] && React.createElement(StyledIconContainer, null, icons[type]),
|
|
53
|
-
React.createElement(Flex, { flexDirection: "column", alignItems: "flex-start", rowGap: "6px" },
|
|
51
|
+
React.createElement(Flex, { flexDirection: "column", flex: 1, alignItems: "flex-start", rowGap: "6px" },
|
|
54
52
|
title && (React.createElement(Text, Object.assign({}, textProps, { color: "inherit" }), title)),
|
|
55
|
-
renderContent && renderContent({ color, textProps }))
|
|
53
|
+
renderContent && renderContent({ color, textProps })),
|
|
54
|
+
React.createElement(Flex, null, renderRight && renderRight({ color, textProps }))));
|
|
56
55
|
}
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/react-ui",
|
|
3
3
|
"description": "Ledger Live - Desktop UI",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.6.0",
|
|
5
5
|
"author": "Ledger Live Team <team-live@ledger.fr>",
|
|
6
6
|
"repository": "https://github.com/LedgerHQ/ui",
|
|
7
7
|
"license": "MIT",
|
|
@@ -27,13 +27,12 @@
|
|
|
27
27
|
"index.js"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@ledgerhq/icons-ui": "^0.2.
|
|
31
|
-
"@ledgerhq/ui-shared": "^0.1.
|
|
30
|
+
"@ledgerhq/icons-ui": "^0.2.1",
|
|
31
|
+
"@ledgerhq/ui-shared": "^0.1.4",
|
|
32
32
|
"@tippyjs/react": "^4.2.6",
|
|
33
33
|
"@types/color": "^3.0.2",
|
|
34
34
|
"@types/react": "~17.0.37",
|
|
35
35
|
"@types/react-dom": "^17.0.11",
|
|
36
|
-
"@types/react-select": "^4.0.18",
|
|
37
36
|
"@types/react-transition-group": "^4.4.2",
|
|
38
37
|
"@types/react-window": "^1.8.5",
|
|
39
38
|
"@types/styled-components": "^5.1.14",
|
|
@@ -44,7 +43,7 @@
|
|
|
44
43
|
"moment": "^2.29.1",
|
|
45
44
|
"react-chartjs-2": "^3.0.5",
|
|
46
45
|
"react-is": "^17.0.2",
|
|
47
|
-
"react-select": "^
|
|
46
|
+
"react-select": "^5.2.1",
|
|
48
47
|
"react-transition-group": "^4.4.2",
|
|
49
48
|
"react-window": "^1.8.6",
|
|
50
49
|
"styled-system": "^5.1.5"
|
package/styles/InvertTheme.js
CHANGED
|
@@ -5,6 +5,6 @@ import { palettes } from "@ledgerhq/ui-shared";
|
|
|
5
5
|
export const InvertTheme = ({ children }) => {
|
|
6
6
|
const { theme } = useTheme();
|
|
7
7
|
const revertTheme = theme === "light" ? "dark" : "light";
|
|
8
|
-
const newTheme = useMemo(() => (Object.assign(Object.assign({}, defaultTheme), { colors: Object.assign(Object.assign({},
|
|
8
|
+
const newTheme = useMemo(() => (Object.assign(Object.assign({}, defaultTheme), { colors: Object.assign(Object.assign({}, palettes[revertTheme]), { palette: palettes[revertTheme] }), theme: revertTheme })), [revertTheme]);
|
|
9
9
|
return React.createElement(ThemeProvider, { theme: newTheme }, children);
|
|
10
10
|
};
|
package/styles/index.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ export { default as defaultTheme } from "./theme";
|
|
|
2
2
|
export * from "./helpers";
|
|
3
3
|
export * from "./global";
|
|
4
4
|
export * from "./StyleProvider";
|
|
5
|
+
export { InvertTheme } from "./InvertTheme";
|
|
5
6
|
export type { ThemeNames, ColorPalette } from "@ledgerhq/ui-shared";
|
|
6
7
|
export { palettes } from "@ledgerhq/ui-shared";
|
package/styles/index.js
CHANGED
package/styles/theme.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ export declare const fontFamilies: {
|
|
|
45
45
|
};
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
|
-
declare const transition: (properties?: string[]) => FlattenSimpleInterpolation;
|
|
48
|
+
declare const transition: (properties?: string[], duration?: string, easing?: string) => FlattenSimpleInterpolation;
|
|
49
49
|
declare const animations: {
|
|
50
50
|
fadeIn: () => FlattenSimpleInterpolation;
|
|
51
51
|
fadeOut: () => FlattenSimpleInterpolation;
|
package/styles/theme.js
CHANGED
|
@@ -76,14 +76,14 @@ export const fontFamilies = {
|
|
|
76
76
|
},
|
|
77
77
|
},
|
|
78
78
|
};
|
|
79
|
-
const
|
|
79
|
+
const animationDuration = "0.33s";
|
|
80
80
|
const easings = {
|
|
81
81
|
outQuadratic: "cubic-bezier(0.25, 0.46, 0.45, 0.94)",
|
|
82
82
|
};
|
|
83
|
-
const transition = (properties = ["all"]) => css `
|
|
83
|
+
const transition = (properties = ["all"], duration = animationDuration, easing = easings.outQuadratic) => css `
|
|
84
84
|
transition-property: ${properties.join(",")};
|
|
85
|
-
transition-duration: ${
|
|
86
|
-
transition-timing-function: ${
|
|
85
|
+
transition-duration: ${duration};
|
|
86
|
+
transition-timing-function: ${easing};
|
|
87
87
|
`;
|
|
88
88
|
const fadeIn = keyframes `
|
|
89
89
|
0% {
|
|
@@ -123,16 +123,16 @@ const fadeInUp = keyframes `
|
|
|
123
123
|
`;
|
|
124
124
|
const animations = {
|
|
125
125
|
fadeIn: () => css `
|
|
126
|
-
${fadeIn} ${
|
|
126
|
+
${fadeIn} ${animationDuration} ${easings.outQuadratic} forwards
|
|
127
127
|
`,
|
|
128
128
|
fadeOut: () => css `
|
|
129
|
-
${fadeOut} ${
|
|
129
|
+
${fadeOut} ${animationDuration} ${easings.outQuadratic} forwards
|
|
130
130
|
`,
|
|
131
131
|
fadeInGrowX: () => css `
|
|
132
132
|
${fadeInGrowX} 0.6s ${easings.outQuadratic} forwards
|
|
133
133
|
`,
|
|
134
134
|
fadeInUp: () => css `
|
|
135
|
-
${fadeInUp} ${
|
|
135
|
+
${fadeInUp} ${animationDuration} ${easings.outQuadratic} forwards
|
|
136
136
|
`,
|
|
137
137
|
};
|
|
138
138
|
const overflow = {
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
declare const _default: "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";
|
|
2
|
-
export default _default;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default "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";
|