@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.
Files changed (41) hide show
  1. package/components/asorted/index.d.ts +1 -1
  2. package/components/asorted/index.js +1 -1
  3. package/components/cta/Button/index.d.ts +10 -8
  4. package/components/cta/Button/index.js +14 -9
  5. package/components/form/BaseInput/index.js +1 -1
  6. package/components/form/Dropdown/index.d.ts +3 -2
  7. package/components/form/Dropdown/index.js +2 -1
  8. package/components/form/Radio/RadioElement.d.ts +3 -2
  9. package/components/form/Radio/RadioElement.js +72 -3
  10. package/components/form/Radio/index.d.ts +1 -1
  11. package/components/form/SelectInput/Control.d.ts +3 -9
  12. package/components/form/SelectInput/Control.js +2 -1
  13. package/components/form/SelectInput/DropdownIndicator.d.ts +3 -9
  14. package/components/form/SelectInput/IndicatorsContainer.d.ts +2 -5
  15. package/components/form/SelectInput/IndicatorsContainer.js +1 -1
  16. package/components/form/SelectInput/MenuList.d.ts +3 -9
  17. package/components/form/SelectInput/Option.d.ts +6 -18
  18. package/components/form/SelectInput/ValueContainer.d.ts +5 -14
  19. package/components/form/SelectInput/ValueContainer.js +1 -1
  20. package/components/form/SelectInput/VirtualMenuList.d.ts +2 -5
  21. package/components/form/SelectInput/VirtualMenuList.js +2 -1
  22. package/components/form/SelectInput/index.d.ts +7 -16
  23. package/components/form/SelectInput/index.js +9 -1
  24. package/components/layout/Drawer/index.d.ts +3 -0
  25. package/components/layout/Drawer/index.js +30 -13
  26. package/components/loaders/InfiniteLoader/index.d.ts +8 -7
  27. package/components/loaders/InfiniteLoader/index.js +35 -9
  28. package/components/loaders/ProgressLoader/index.d.ts +22 -1
  29. package/components/loaders/ProgressLoader/index.js +10 -12
  30. package/components/message/Alert/index.d.ts +20 -11
  31. package/components/message/Alert/index.js +6 -7
  32. package/index.d.ts +1 -1
  33. package/index.js +1 -1
  34. package/package.json +4 -5
  35. package/styles/InvertTheme.js +1 -1
  36. package/styles/index.d.ts +1 -0
  37. package/styles/index.js +1 -0
  38. package/styles/theme.d.ts +1 -1
  39. package/styles/theme.js +7 -7
  40. package/components/loaders/InfiniteLoader/image.d.ts +0 -2
  41. package/components/loaders/InfiniteLoader/image.js +0 -1
@@ -1,3 +1,3 @@
1
1
  export { default as Divider } from "./Divider";
2
- export { default as Icon, IconBox } from "./Icon";
2
+ export { default as Icon, IconBox, BoxedIcon } from "./Icon";
3
3
  export { default as Text } from "./Text";
@@ -1,3 +1,3 @@
1
1
  export { default as Divider } from "./Divider";
2
- export { default as Icon, IconBox } from "./Icon";
2
+ export { default as Icon, IconBox, BoxedIcon } from "./Icon";
3
3
  export { default as Text } from "./Text";
@@ -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: (event?: React.SyntheticEvent<HTMLButtonElement>) => void;
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 Button: {
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 ExpandButtonProps = React.PropsWithChildren<{
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 const ExpandButton: ({ onToggle, onClick, ...props }: ExpandButtonProps) => React.ReactElement;
41
- export default Button;
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 StyledExpandButton = styled(Button).attrs((props) => ({
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 const ExpandButton = function ExpandButton(_a) {
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(StyledExpandButton, Object.assign({}, props, { expanded: expanded, onClick: (event) => {
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
- export default Button;
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.48)};
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: { label }, children, } = props;
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, null,
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 { Styles, ControlProps, OptionTypeBase } from "react-select";
1
+ import { GroupBase, StylesConfig, ControlProps } from "react-select";
2
2
  import { DefaultTheme } from "styled-components";
3
- export declare function getStyles<T extends OptionTypeBase = {
4
- label: string;
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: { isDisabled, error, renderLeft }, children, } = props;
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 { Styles, IndicatorProps, OptionTypeBase } from "react-select";
2
- export declare function getStyles<T extends OptionTypeBase = {
3
- label: string;
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 { IndicatorContainerProps, OptionTypeBase } from "react-select";
2
- export declare function IndicatorsContainer<T extends OptionTypeBase = {
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 { selectProps: { renderRight }, } = props;
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 { Styles, MenuListComponentProps, OptionTypeBase } from "react-select";
1
+ import { GroupBase, StylesConfig, MenuListProps } from "react-select";
2
2
  import { DefaultTheme } from "styled-components";
3
- export declare function getStyles<T extends OptionTypeBase = {
4
- label: string;
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 { Styles, OptionProps, OptionTypeBase } from "react-select";
3
- export declare function getStyles<T extends OptionTypeBase = {
4
- label: string;
5
- value: string;
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<T extends OptionTypeBase = {
14
- label: string;
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 { Styles, ValueContainerProps, OptionTypeBase } from "react-select";
3
- export declare function getStyles<T extends OptionTypeBase = {
4
- label: string;
5
- value: string;
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<T extends OptionTypeBase = {
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 { MenuListComponentProps, OptionTypeBase } from "react-select";
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<T extends OptionTypeBase = {
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: { noOptionsMessage, rowHeight }, } = props;
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, OptionTypeBase, Styles } from "react-select";
3
- export declare type SelfProps<T extends OptionTypeBase = {
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: Props<T, M>) => React.ReactNode;
9
- renderRight?: (props: Props<T, M>) => React.ReactNode;
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: Styles<T, M>) => Styles<T, M>;
9
+ extendStyles?: (styles: StylesConfig<O, M, G>) => StylesConfig<O, M, G>;
13
10
  };
14
- export declare type Props<T extends OptionTypeBase = {
15
- label: string;
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, { error: error, styles: Object.assign(Object.assign({}, styles), props.styles), classNamePrefix: "react-select", rowHeight: rowHeight, components: Object.assign({ Control: ControlModule.Control, ValueContainer: ValueContainerModule.ValueContainer, IndicatorsContainer, DropdownIndicator: DropdownIndicatorModule.DropdownIndicator, MenuList: MenuListModule.MenuList, Option: OptionModule.Option, IndicatorSeparator: null }, components) })));
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 Close from "@ledgerhq/icons-ui/react/CloseRegular";
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
- min-height: ${(p) => p.theme.space[15]}px;
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, null,
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: "h5", flexShrink: 1 }, title)) || React.createElement("div", null),
85
- React.createElement(Button, { onClick: onClose },
86
- React.createElement(Close, null))),
87
- React.createElement(ScrollWrapper, null, children)))))));
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
- declare const InfiniteLoader: import("styled-components").StyledComponent<"img", import("styled-components").DefaultTheme, {
2
- alt: "loading...";
3
- src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABECAYAAAA4E5OyAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABGvSURBVHgB1Vx9jB3Vdf+dO/Pe2w/veo3jYFQcsJvEmIJUgiMaEtE4xh9AsE0Dq6pVK/VDLeGvqpUqRVUbo/bfqlWiVrRqFZKoquSgYDvEwRhiSClSUqQ0KHECiQifAWPir9317r73Zk7OuffcO/PWNt61d23vsWbvfN6Z85tzfufcc+eZcJHkO7t4xVQfrkeB1bL5fiKsZoCkXQmWVtZl2zHjCAgTujjCy50uXsibOLzp0/QyLoIQFkj27uWBFmN9k7GuIHxUFF0idyNpnSrvQbBtPZ/J73cepNCFrrt4niyHyxIvSPuDY2387+gojWMBZN4B2b+Xr8sYN4syt4kyS1gVUpU5KOfvSZWiHJ7BA+EMILZjtl9XHOw8Ck89UZR4rl3gkbvvpZ9iHmXeAPn2Hl7bZeyQHtchWIFXRN+8PyEqqq5BoY0WoZbgosvMAEYOJCuSE/w5iH3ofsL3ZfnSpu30fcyDXDAg+3fzKlHgd0XhdWT9xYdOLkHeRTxIHqCyOq5tGc+PytbcyQCJylMNQPi+7bj0/6y41D9v/Qy9hQuQ8wbEc0SJjfJgd5v/e17wHEH2kDWlVQlVioPLeAWpV8FkITUX8W6CyrL8erSwxEkc1uFPxn9u3EH/gfOU8wLkucf5iolpPCAXr/IKGBAIWrmy4oDTrMS7zgxATGkXlRLJgArcWj96fuatI4KDKkKZeepzvFV0cf/5WMucATmwl3+LC9wnTzFANV8uecZbCwAkAo2mTWRvPwJQBrMnA4pLZIlQqwjjosWZ4lSLWC7qkl6OWhxhTMj83zduo/+eg3pzA+Tbu/lO8fe72MxWlCHKzFUiGZamdHyjtbfslQnKeTNPitJprhI5xtVcMIRncz1QZRkRDFPIRWAQXPmh23fQv81WRzfbE596lO/oAgoI+xsLDKTvnhUWsD0thwYsBId43mmdsQVg04BrD8K1I7GP2NZAACPxVDjEyTqCu7pwTCz3s/sf5c9iljIrQJ7cw1sLxla5Q6kKstoG27/wMGFfeFA2hZnZLwkUD6IASJXy9esDKUYbCedTLSfxSiPkNeQMIK4RdeSghCj5sK1mcv+BPbMD5ZyAHNjNW0TVrY5MffnrFQsM4RePRDAddjWL8KGj2mYO53hWYdQsJ7hfJVy9fbs+ckbVmpu4zICiiEFwQy4rbkHgrAee3M0P4Bzynhyyfw/f5jTZihzhvAkm301sX1rqHR+YLMRaYiUmH7gDmJRLXpfl+bKNdynHKxjHxJY/pAl/v/086Dq4kgosket/Xc7/Tbn3TdLfUCJTa0ukUF9FsKCRM2QSt9X0VPL/my330O45A/I/j/GyU238lXTcT3VzVMbIAnlaPpFC52lRx0hRQHlRItPuyRyvbttGpzBHOfB1/oSQ1B3S32365l3gHWcg1Um0J/exF4EYmhEsbXxqGvfcPUpvYi6ACG98TpS5Qjsvy4rByd5BGbPH+jjF9SZS0v60KLB3y730E8yDHPwmr+x28afS712YaR0z8hUghd9I1GTn6vO+2O/wB5/YTmOYDSDCG7dLs9mn2jgt60xsX3cfig8RYDlaAF++Yzu9iAWQp/byR8oCfyf3+bU6GEDKcYgrgo37w4alAuJyXxTX+eLMvk8D5LH/4mWtQfy1xX+u5wApnzDzTOk6krnKQBcHpwjfPB/XmIvs2cND/SX+TB7i94EZpYTKMpzF9JhNV3yiMBbYtul36Mf1fvOZN2r24dO+29JHgogYe2vhsCibxvUYIX2IITy2eQftw0WQ7cHc//GJPTwhz3o/agkahZcGi09qvTG6hWgWsmd93r+Vrd+r99sTdqWWsVpOvk4IUMOn5gtchlzCt3oLCvlFyTHXcD5BKyX87btYYNRl83Z6SLR4SNfr5Bmz4jjgjMUmy16D2zvcItn3LfX+egCRqzZo9ikdlREICiCUKfeoMlXd5xM0Oe9bMmb4Fi6RKCjy4h+i4DKeU1wVbr1l2PgnDghDK1FIsu+/qPeVAHn8q3yVqLc6ZqAJCB9QZCGzCvhWDc8DJmvPbNpB+3GJZcsO+ldR+CtANfouAzjRMigNMpEKVHrux3TAGvtJgORLcUu0Dr/DgIkZpQuW4IGw4FXKxb/84DJccjCi9BP+RZpfWKSrchMDg2wfRa5x6diW2IcH5OCXuE9qlNeJCflxlPICO0utzVriGIU83QZgyi52rd5AU7hMRPMKebDPWdYaYLF8KaYPNjr2S4o6JUb37eNh2AHw+7BWhgRNRDcpw8LGE3Ew59ejhTg8v+neizM1MBcR1/muPN/3ACsdGBCEWgmyVlhCqPuONKaxVa/3gMhI9lr/yuNAzFlEMWJ1NpplZ1YiFpIXeAqXqXQY/2A1XGfu48Hxab+5SnQbwKY9HD4WGnh+WBWjhrcMc426hSg4ekyuKOSiQxvuoeO4TOXOHXRInvO7QOUuqfIWw289sw377tBrnWR8V4rCw5K1cXILDtYQw6p3oVDsU/bgboZ5KfkvqBD+KQ0rKt6IIKSFqrR/xM8gDBZYqmCw1SiKWNOoRRk95vOSYCGntmybn8HaQkonxyGhgfFUxKaewrdKqElzGo5oGePj6lcfKBDCqrqJM44ImW1KytIi+1/BIpA776STGeGQoxRJXJz84hiFqKr2W9nxBscZVvjMNCocCJRjQqYRRYbwCSS5wStYJCI5xH4DoZoPcjW3ibMCNnEmfz6gg7uWD6Nh0KNIqJVoihpNiqvqivfJw1gkIrq8QYEnVHrL3YzKcSzRkvNuzMnyD5AVhENqi54ap0gRR8BdXDaJ2LmE2vihaBfnlnuKHTb7x1xxii9v5LJjiLiqigMpQyW2ekjsX0HrtnACi0dOoJow65EKA6TJaGmv8amWRg8fQZAAUeRK58Ixzy0FCm2FrKaxSGTTKJ0QbTKuzxVTb9hFzFZtycnGLFo09nUP6ywVgaxVxikYi1FcMg6u/lLaNBsK8ZlcTMS0oKaEmtmi+yhkqClj1fV9X+AWFokcOMBLrdSpUhXB0TOW8SE5Vu+dVLFPaiKmi1bKCkvIdLuwVjNVH3rFjYY/4kl4UYhUda+xgpB+TeDDK89wESsAxCmN13LPExwmEpyV6aNnmLeEzp3PQzDxC7xPmjEsAukWoIxsqqSaayYboIb5wtLsBl7vk8ohR2TnEr0gFof0T60PD0xcz1oYwiKRBuO4pAuhyEyWbpQ+OQtZF8VxPaLCrys6Jzw/ZDZ4s3S9gE1MczUKFrsrZPsaLBLZ+Bl6VTR6Fkg11vjdSiwYxfJAnE75htYd39WxjPKHzdZztJY49C/MpfSYrC/ftYsXDY9IlNQ6q06tBh6JwHAAiap5pdc230NfdYOMN30ByEa79QoZB1/j2hhHo1E+nGE5Fols2U5flmf+e+pJ1BG/IPF/hTtPSui8V09wfn6TJB23ukfBNUuxCpmNZ8pYF5E5mJuwiGTTdnpQXuZfygt/DbUkTSfDhVO+QznW37adXgCQ8vyfUwy3rhryJyAoZbLwLeP9+nUALnPhnVL9FNvfKe3m7fiCTKTpNMunRJ8/Ft3+JGtijbjJxo13CdeYeEN65hv8IQlRv506Umgya+2jKRdrqkWqyr+9eRs9gctQFISvfQ35sWPgD38YfOQI+NAh8Oc/D37wQZC2RHTGvNtbyPJJvCquMu1T9zIoHsc3HJKzsE+Pm+UI76x4UsqPuMxEreHph9FcsgS0bBlIwHACjJO3rSC566+PFTKmM13vAblhlNpSB3iJXS9vsLlQt84r8PtKG/fc8vzz3MBlIqqkKNxqDYJGxuFWTMApMDffLEP6q0ArVoTl6acDOGfqI+2kBl5NBFqGUmKWpQJRmr5MEYd9qj9w7E3cgMtEHn4YrRWSO45NwTX7xBKuldm8w6B33oF72azlpZcCTSgwZ7KSnh3+a8MCV7o4AuaUxUfrQEz1Y2lArUrA+9HtWvq/hKKzj5MNNIeHwJ1pcHtpeN6hEyjfkFashSfHwOMrw37lF3GpcnSUino/PWYzPY3/r1uAKq3uQWTFZ629qvVY1PG80vUEu+7A13kdLpEcPMh9+Qr0N64EnWyIsUtRtHkivOyxpXB9x8Q61I1WVm6k/KJWMrOvHkDuGqW3EWqmoUjEacZfamtmDXWXMdDQ9WCt1Z+I4CKL/gihOIbBiRwkL9T1yxJBmVLXUWCuAvr6gvIKTH8/SEH55BGcFmlOI5Z2A/8Xc5GodBlyD3YxF7HJcFfLaHWRUsLaxx/h3+CDnGOBRf3/2T08NJJjMBMw8lNhmZClMQ6aFGAaYwGYIQGmJa1yy5o+zyWk3IL7ZlaOgbN9dHejKHhDuLGQq6s4xM/oGTAwl0ngZXK4EBfLcUpqrz/YupWOYgFEi1TZ1VjabMEV3TBN0hQL1vWuLh3hkQHwEm2XgIc7NV4R+18+Ah4bQnvDBupiNoDo4O2KFj4lqyPoDbkwEg2zeDEKCc9klqPoOWpRui1s9UZzGX62YZ4+mdDnWppjRHKmZktA6MgIvdUn9zFQpgWUAQVEwBiU9t2OgdKWZSg8v7gVX301iltvpckz3YPOdvP9X+FBGsRmUbbBbkaUMQvxRSO5oaTA/q0oUK6BUrJeLT+VMckT3A5POry1bRu9izmKJlqaW4wUWFb0oZlnvl8PQEvu25D7HTuKUjiC+2U5LkAMmKXo9RJ5SuELxjGZ3hRg+psoP3kfJs6WqdJ7PczBR/naDuOjCoKf7qSgbGZuoy6SBWvx7pKItjYW0ijV6aRstyM8dKw1gOPjJSbkobtCfNMx9IkFZGvWwL3zE/RPDaAxJPyg1qDHJCcq804Ao2x4XvOg5GIVZTe07Wlf6kI3gmKWciK8SH+P8XFMyf3aZ9P5PQFReXI3X69hFTW3cdyrvAfDLMWHZRfekLYpTGeBlMsaULq/KENRWyfTi8J/0+YfXIv8ZS4WwN76Sg+ILKfUVWRbrSNaibz5HteJXDLQF9rBgWDBQgBT53Lfc/4awidcXRyCpS+Oa9aQWdhSasoDn9TDMYdsl+uWpKf7tyxLR65zXZDWPnV/s+HfJDVyz0t+n58EkmJFR7bbbf/rBxrMwrHMWif7p6ekfprbfo06edjWViMPjp8bjFkBoqJf+0rHh3wIdlVuoq7jt7PqSyMl2qKoslx5QxCHoJT1ynZ98KNWoK28dbQ7YZ8AFRQVEFoBjyB91XUCon/2aQEDAzrDZKBK5FGgsrxahoVKNvzR7Ih91r+o2qDfhGTw34Uk6+iGT6GzWmhmc5XMQKqHbA9iVq0rMFrpF1dQcvQSp067CkrbA0VqHU5aAdqpNSgYfQaYKi/nBnCmwrUTE8CUrcv0wKlbR88cUS4IEBX9UEaK0T8U0+9EXlBv6RpIRVA4WQdHd6mBEAO/KqMGodyRXKZ+s2aYePfnKjitXktpx8kDU1XCKamVKCiShLllI8JP/Rib6zf3cwJERf9TguGVeEbYbzKSqquIsspXai4SxVuMRqQ8cMjMvrvVz8zIf5Kg5xhKaiG+jbzRCXziJBUX6wpuYqC0Gui8PY6j55P/nDPKvJc88Qh/SCzgg+4MA0KO4bhGwg2dHi7Ted7C7FOtsB1CaSl8pa4W8g0XIlCj8JbWE3ZLDbu2rynraizDOU58fBvGz5ZnLCggKs/t4v7xBtaKkiuihaToUloFLguWEZX2uQk8KXtlJY8oMwNB+xTeKDTSSFSBJFs6jVqq8qp4w8DQUNyMwEjbyjE58DqOr/9z6uAC5IIBieJ/ktbBGulwJOUnXIXctG1vXa+JgOS2L1lKGFB618q6ZhUKRt5rJU1tp4RFJnB8tlHkXDJvgEQ5uIuXdHOsktXlolDmwSmCktFq6i6lYTfui27iATEw4jnat253BRCaRiEWdTJbhokN8/xp+bwDEuXgTs6Lm7BcRpkjOh8s4bmlirZFwZarrEctJGaqXnmu+EO3s76wLsl2MdzAyaNjmPzezzC+cyeVWABZMEBmiv4EVQYVLWHW4ZzRX4afo2USKRreLcxShAqndV3C3ykhzPbxdzC16kZMrF9/YdwwW/kVde7c2j1PF5EAAAAASUVORK5CYII=";
4
- width: "28";
5
- height: "28";
6
- }, "height" | "width" | "alt" | "src">;
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 image from "./image";
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 InfiniteLoader = styled.img.attrs({
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
- transition: 100ms linear transform;
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).attrs({
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?: (props: {
16
- color: string;
17
- textProps: {
18
- variant?: TextVariants;
19
- fontWeight?: string;
20
- };
21
- }) => JSX.Element;
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).attrs(() => ({
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
@@ -1,3 +1,3 @@
1
1
  export * from "./components";
2
2
  export * from "./assets";
3
- export { StyleProvider } from "./styles";
3
+ export { StyleProvider, InvertTheme } from "./styles";
package/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from "./components";
2
2
  export * from "./assets";
3
- export { StyleProvider } from "./styles";
3
+ export { StyleProvider, InvertTheme } from "./styles";
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.5.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.0",
31
- "@ledgerhq/ui-shared": "^0.1.3",
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": "^3.2.0",
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"
@@ -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({}, defaultTheme.colors), { palette: palettes[revertTheme] }), theme: revertTheme })), [revertTheme]);
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
@@ -2,4 +2,5 @@ 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 { palettes } from "@ledgerhq/ui-shared";
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 animationLength = "0.33s";
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: ${animationLength};
86
- transition-timing-function: ${easings.outQuadratic};
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} ${animationLength} ${easings.outQuadratic} forwards
126
+ ${fadeIn} ${animationDuration} ${easings.outQuadratic} forwards
127
127
  `,
128
128
  fadeOut: () => css `
129
- ${fadeOut} ${animationLength} ${easings.outQuadratic} forwards
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} ${animationLength} ${easings.outQuadratic} forwards
135
+ ${fadeInUp} ${animationDuration} ${easings.outQuadratic} forwards
136
136
  `,
137
137
  };
138
138
  const overflow = {
@@ -1,2 +0,0 @@
1
- declare const _default: "iVBORw0KGgoAAAANSUhEUgAAAEQAAABECAYAAAA4E5OyAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABGvSURBVHgB1Vx9jB3Vdf+dO/Pe2w/veo3jYFQcsJvEmIJUgiMaEtE4xh9AsE0Dq6pVK/VDLeGvqpUqRVUbo/bfqlWiVrRqFZKoquSgYDvEwRhiSClSUqQ0KHECiQifAWPir9317r73Zk7OuffcO/PWNt61d23vsWbvfN6Z85tzfufcc+eZcJHkO7t4xVQfrkeB1bL5fiKsZoCkXQmWVtZl2zHjCAgTujjCy50uXsibOLzp0/QyLoIQFkj27uWBFmN9k7GuIHxUFF0idyNpnSrvQbBtPZ/J73cepNCFrrt4niyHyxIvSPuDY2387+gojWMBZN4B2b+Xr8sYN4syt4kyS1gVUpU5KOfvSZWiHJ7BA+EMILZjtl9XHOw8Ck89UZR4rl3gkbvvpZ9iHmXeAPn2Hl7bZeyQHtchWIFXRN+8PyEqqq5BoY0WoZbgosvMAEYOJCuSE/w5iH3ofsL3ZfnSpu30fcyDXDAg+3fzKlHgd0XhdWT9xYdOLkHeRTxIHqCyOq5tGc+PytbcyQCJylMNQPi+7bj0/6y41D9v/Qy9hQuQ8wbEc0SJjfJgd5v/e17wHEH2kDWlVQlVioPLeAWpV8FkITUX8W6CyrL8erSwxEkc1uFPxn9u3EH/gfOU8wLkucf5iolpPCAXr/IKGBAIWrmy4oDTrMS7zgxATGkXlRLJgArcWj96fuatI4KDKkKZeepzvFV0cf/5WMucATmwl3+LC9wnTzFANV8uecZbCwAkAo2mTWRvPwJQBrMnA4pLZIlQqwjjosWZ4lSLWC7qkl6OWhxhTMj83zduo/+eg3pzA+Tbu/lO8fe72MxWlCHKzFUiGZamdHyjtbfslQnKeTNPitJprhI5xtVcMIRncz1QZRkRDFPIRWAQXPmh23fQv81WRzfbE596lO/oAgoI+xsLDKTvnhUWsD0thwYsBId43mmdsQVg04BrD8K1I7GP2NZAACPxVDjEyTqCu7pwTCz3s/sf5c9iljIrQJ7cw1sLxla5Q6kKstoG27/wMGFfeFA2hZnZLwkUD6IASJXy9esDKUYbCedTLSfxSiPkNeQMIK4RdeSghCj5sK1mcv+BPbMD5ZyAHNjNW0TVrY5MffnrFQsM4RePRDAddjWL8KGj2mYO53hWYdQsJ7hfJVy9fbs+ckbVmpu4zICiiEFwQy4rbkHgrAee3M0P4Bzynhyyfw/f5jTZihzhvAkm301sX1rqHR+YLMRaYiUmH7gDmJRLXpfl+bKNdynHKxjHxJY/pAl/v/086Dq4kgosket/Xc7/Tbn3TdLfUCJTa0ukUF9FsKCRM2QSt9X0VPL/my330O45A/I/j/GyU238lXTcT3VzVMbIAnlaPpFC52lRx0hRQHlRItPuyRyvbttGpzBHOfB1/oSQ1B3S32365l3gHWcg1Um0J/exF4EYmhEsbXxqGvfcPUpvYi6ACG98TpS5Qjsvy4rByd5BGbPH+jjF9SZS0v60KLB3y730E8yDHPwmr+x28afS712YaR0z8hUghd9I1GTn6vO+2O/wB5/YTmOYDSDCG7dLs9mn2jgt60xsX3cfig8RYDlaAF++Yzu9iAWQp/byR8oCfyf3+bU6GEDKcYgrgo37w4alAuJyXxTX+eLMvk8D5LH/4mWtQfy1xX+u5wApnzDzTOk6krnKQBcHpwjfPB/XmIvs2cND/SX+TB7i94EZpYTKMpzF9JhNV3yiMBbYtul36Mf1fvOZN2r24dO+29JHgogYe2vhsCibxvUYIX2IITy2eQftw0WQ7cHc//GJPTwhz3o/agkahZcGi09qvTG6hWgWsmd93r+Vrd+r99sTdqWWsVpOvk4IUMOn5gtchlzCt3oLCvlFyTHXcD5BKyX87btYYNRl83Z6SLR4SNfr5Bmz4jjgjMUmy16D2zvcItn3LfX+egCRqzZo9ikdlREICiCUKfeoMlXd5xM0Oe9bMmb4Fi6RKCjy4h+i4DKeU1wVbr1l2PgnDghDK1FIsu+/qPeVAHn8q3yVqLc6ZqAJCB9QZCGzCvhWDc8DJmvPbNpB+3GJZcsO+ldR+CtANfouAzjRMigNMpEKVHrux3TAGvtJgORLcUu0Dr/DgIkZpQuW4IGw4FXKxb/84DJccjCi9BP+RZpfWKSrchMDg2wfRa5x6diW2IcH5OCXuE9qlNeJCflxlPICO0utzVriGIU83QZgyi52rd5AU7hMRPMKebDPWdYaYLF8KaYPNjr2S4o6JUb37eNh2AHw+7BWhgRNRDcpw8LGE3Ew59ejhTg8v+neizM1MBcR1/muPN/3ACsdGBCEWgmyVlhCqPuONKaxVa/3gMhI9lr/yuNAzFlEMWJ1NpplZ1YiFpIXeAqXqXQY/2A1XGfu48Hxab+5SnQbwKY9HD4WGnh+WBWjhrcMc426hSg4ekyuKOSiQxvuoeO4TOXOHXRInvO7QOUuqfIWw289sw377tBrnWR8V4rCw5K1cXILDtYQw6p3oVDsU/bgboZ5KfkvqBD+KQ0rKt6IIKSFqrR/xM8gDBZYqmCw1SiKWNOoRRk95vOSYCGntmybn8HaQkonxyGhgfFUxKaewrdKqElzGo5oGePj6lcfKBDCqrqJM44ImW1KytIi+1/BIpA776STGeGQoxRJXJz84hiFqKr2W9nxBscZVvjMNCocCJRjQqYRRYbwCSS5wStYJCI5xH4DoZoPcjW3ibMCNnEmfz6gg7uWD6Nh0KNIqJVoihpNiqvqivfJw1gkIrq8QYEnVHrL3YzKcSzRkvNuzMnyD5AVhENqi54ap0gRR8BdXDaJ2LmE2vihaBfnlnuKHTb7x1xxii9v5LJjiLiqigMpQyW2ekjsX0HrtnACi0dOoJow65EKA6TJaGmv8amWRg8fQZAAUeRK58Ixzy0FCm2FrKaxSGTTKJ0QbTKuzxVTb9hFzFZtycnGLFo09nUP6ywVgaxVxikYi1FcMg6u/lLaNBsK8ZlcTMS0oKaEmtmi+yhkqClj1fV9X+AWFokcOMBLrdSpUhXB0TOW8SE5Vu+dVLFPaiKmi1bKCkvIdLuwVjNVH3rFjYY/4kl4UYhUda+xgpB+TeDDK89wESsAxCmN13LPExwmEpyV6aNnmLeEzp3PQzDxC7xPmjEsAukWoIxsqqSaayYboIb5wtLsBl7vk8ohR2TnEr0gFof0T60PD0xcz1oYwiKRBuO4pAuhyEyWbpQ+OQtZF8VxPaLCrys6Jzw/ZDZ4s3S9gE1MczUKFrsrZPsaLBLZ+Bl6VTR6Fkg11vjdSiwYxfJAnE75htYd39WxjPKHzdZztJY49C/MpfSYrC/ftYsXDY9IlNQ6q06tBh6JwHAAiap5pdc230NfdYOMN30ByEa79QoZB1/j2hhHo1E+nGE5Fols2U5flmf+e+pJ1BG/IPF/hTtPSui8V09wfn6TJB23ukfBNUuxCpmNZ8pYF5E5mJuwiGTTdnpQXuZfygt/DbUkTSfDhVO+QznW37adXgCQ8vyfUwy3rhryJyAoZbLwLeP9+nUALnPhnVL9FNvfKe3m7fiCTKTpNMunRJ8/Ft3+JGtijbjJxo13CdeYeEN65hv8IQlRv506Umgya+2jKRdrqkWqyr+9eRs9gctQFISvfQ35sWPgD38YfOQI+NAh8Oc/D37wQZC2RHTGvNtbyPJJvCquMu1T9zIoHsc3HJKzsE+Pm+UI76x4UsqPuMxEreHph9FcsgS0bBlIwHACjJO3rSC566+PFTKmM13vAblhlNpSB3iJXS9vsLlQt84r8PtKG/fc8vzz3MBlIqqkKNxqDYJGxuFWTMApMDffLEP6q0ArVoTl6acDOGfqI+2kBl5NBFqGUmKWpQJRmr5MEYd9qj9w7E3cgMtEHn4YrRWSO45NwTX7xBKuldm8w6B33oF72azlpZcCTSgwZ7KSnh3+a8MCV7o4AuaUxUfrQEz1Y2lArUrA+9HtWvq/hKKzj5MNNIeHwJ1pcHtpeN6hEyjfkFashSfHwOMrw37lF3GpcnSUino/PWYzPY3/r1uAKq3uQWTFZ629qvVY1PG80vUEu+7A13kdLpEcPMh9+Qr0N64EnWyIsUtRtHkivOyxpXB9x8Q61I1WVm6k/KJWMrOvHkDuGqW3EWqmoUjEacZfamtmDXWXMdDQ9WCt1Z+I4CKL/gihOIbBiRwkL9T1yxJBmVLXUWCuAvr6gvIKTH8/SEH55BGcFmlOI5Z2A/8Xc5GodBlyD3YxF7HJcFfLaHWRUsLaxx/h3+CDnGOBRf3/2T08NJJjMBMw8lNhmZClMQ6aFGAaYwGYIQGmJa1yy5o+zyWk3IL7ZlaOgbN9dHejKHhDuLGQq6s4xM/oGTAwl0ngZXK4EBfLcUpqrz/YupWOYgFEi1TZ1VjabMEV3TBN0hQL1vWuLh3hkQHwEm2XgIc7NV4R+18+Ah4bQnvDBupiNoDo4O2KFj4lqyPoDbkwEg2zeDEKCc9klqPoOWpRui1s9UZzGX62YZ4+mdDnWppjRHKmZktA6MgIvdUn9zFQpgWUAQVEwBiU9t2OgdKWZSg8v7gVX301iltvpckz3YPOdvP9X+FBGsRmUbbBbkaUMQvxRSO5oaTA/q0oUK6BUrJeLT+VMckT3A5POry1bRu9izmKJlqaW4wUWFb0oZlnvl8PQEvu25D7HTuKUjiC+2U5LkAMmKXo9RJ5SuELxjGZ3hRg+psoP3kfJs6WqdJ7PczBR/naDuOjCoKf7qSgbGZuoy6SBWvx7pKItjYW0ijV6aRstyM8dKw1gOPjJSbkobtCfNMx9IkFZGvWwL3zE/RPDaAxJPyg1qDHJCcq804Ao2x4XvOg5GIVZTe07Wlf6kI3gmKWciK8SH+P8XFMyf3aZ9P5PQFReXI3X69hFTW3cdyrvAfDLMWHZRfekLYpTGeBlMsaULq/KENRWyfTi8J/0+YfXIv8ZS4WwN76Sg+ILKfUVWRbrSNaibz5HteJXDLQF9rBgWDBQgBT53Lfc/4awidcXRyCpS+Oa9aQWdhSasoDn9TDMYdsl+uWpKf7tyxLR65zXZDWPnV/s+HfJDVyz0t+n58EkmJFR7bbbf/rBxrMwrHMWif7p6ekfprbfo06edjWViMPjp8bjFkBoqJf+0rHh3wIdlVuoq7jt7PqSyMl2qKoslx5QxCHoJT1ynZ98KNWoK28dbQ7YZ8AFRQVEFoBjyB91XUCon/2aQEDAzrDZKBK5FGgsrxahoVKNvzR7Ih91r+o2qDfhGTw34Uk6+iGT6GzWmhmc5XMQKqHbA9iVq0rMFrpF1dQcvQSp067CkrbA0VqHU5aAdqpNSgYfQaYKi/nBnCmwrUTE8CUrcv0wKlbR88cUS4IEBX9UEaK0T8U0+9EXlBv6RpIRVA4WQdHd6mBEAO/KqMGodyRXKZ+s2aYePfnKjitXktpx8kDU1XCKamVKCiShLllI8JP/Rib6zf3cwJERf9TguGVeEbYbzKSqquIsspXai4SxVuMRqQ8cMjMvrvVz8zIf5Kg5xhKaiG+jbzRCXziJBUX6wpuYqC0Gui8PY6j55P/nDPKvJc88Qh/SCzgg+4MA0KO4bhGwg2dHi7Ted7C7FOtsB1CaSl8pa4W8g0XIlCj8JbWE3ZLDbu2rynraizDOU58fBvGz5ZnLCggKs/t4v7xBtaKkiuihaToUloFLguWEZX2uQk8KXtlJY8oMwNB+xTeKDTSSFSBJFs6jVqq8qp4w8DQUNyMwEjbyjE58DqOr/9z6uAC5IIBieJ/ktbBGulwJOUnXIXctG1vXa+JgOS2L1lKGFB618q6ZhUKRt5rJU1tp4RFJnB8tlHkXDJvgEQ5uIuXdHOsktXlolDmwSmCktFq6i6lYTfui27iATEw4jnat253BRCaRiEWdTJbhokN8/xp+bwDEuXgTs6Lm7BcRpkjOh8s4bmlirZFwZarrEctJGaqXnmu+EO3s76wLsl2MdzAyaNjmPzezzC+cyeVWABZMEBmiv4EVQYVLWHW4ZzRX4afo2USKRreLcxShAqndV3C3ykhzPbxdzC16kZMrF9/YdwwW/kVde7c2j1PF5EAAAAASUVORK5CYII=";
2
- export default _default;
@@ -1 +0,0 @@
1
- export default "iVBORw0KGgoAAAANSUhEUgAAAEQAAABECAYAAAA4E5OyAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABGvSURBVHgB1Vx9jB3Vdf+dO/Pe2w/veo3jYFQcsJvEmIJUgiMaEtE4xh9AsE0Dq6pVK/VDLeGvqpUqRVUbo/bfqlWiVrRqFZKoquSgYDvEwRhiSClSUqQ0KHECiQifAWPir9317r73Zk7OuffcO/PWNt61d23vsWbvfN6Z85tzfufcc+eZcJHkO7t4xVQfrkeB1bL5fiKsZoCkXQmWVtZl2zHjCAgTujjCy50uXsibOLzp0/QyLoIQFkj27uWBFmN9k7GuIHxUFF0idyNpnSrvQbBtPZ/J73cepNCFrrt4niyHyxIvSPuDY2387+gojWMBZN4B2b+Xr8sYN4syt4kyS1gVUpU5KOfvSZWiHJ7BA+EMILZjtl9XHOw8Ck89UZR4rl3gkbvvpZ9iHmXeAPn2Hl7bZeyQHtchWIFXRN+8PyEqqq5BoY0WoZbgosvMAEYOJCuSE/w5iH3ofsL3ZfnSpu30fcyDXDAg+3fzKlHgd0XhdWT9xYdOLkHeRTxIHqCyOq5tGc+PytbcyQCJylMNQPi+7bj0/6y41D9v/Qy9hQuQ8wbEc0SJjfJgd5v/e17wHEH2kDWlVQlVioPLeAWpV8FkITUX8W6CyrL8erSwxEkc1uFPxn9u3EH/gfOU8wLkucf5iolpPCAXr/IKGBAIWrmy4oDTrMS7zgxATGkXlRLJgArcWj96fuatI4KDKkKZeepzvFV0cf/5WMucATmwl3+LC9wnTzFANV8uecZbCwAkAo2mTWRvPwJQBrMnA4pLZIlQqwjjosWZ4lSLWC7qkl6OWhxhTMj83zduo/+eg3pzA+Tbu/lO8fe72MxWlCHKzFUiGZamdHyjtbfslQnKeTNPitJprhI5xtVcMIRncz1QZRkRDFPIRWAQXPmh23fQv81WRzfbE596lO/oAgoI+xsLDKTvnhUWsD0thwYsBId43mmdsQVg04BrD8K1I7GP2NZAACPxVDjEyTqCu7pwTCz3s/sf5c9iljIrQJ7cw1sLxla5Q6kKstoG27/wMGFfeFA2hZnZLwkUD6IASJXy9esDKUYbCedTLSfxSiPkNeQMIK4RdeSghCj5sK1mcv+BPbMD5ZyAHNjNW0TVrY5MffnrFQsM4RePRDAddjWL8KGj2mYO53hWYdQsJ7hfJVy9fbs+ckbVmpu4zICiiEFwQy4rbkHgrAee3M0P4Bzynhyyfw/f5jTZihzhvAkm301sX1rqHR+YLMRaYiUmH7gDmJRLXpfl+bKNdynHKxjHxJY/pAl/v/086Dq4kgosket/Xc7/Tbn3TdLfUCJTa0ukUF9FsKCRM2QSt9X0VPL/my330O45A/I/j/GyU238lXTcT3VzVMbIAnlaPpFC52lRx0hRQHlRItPuyRyvbttGpzBHOfB1/oSQ1B3S32365l3gHWcg1Um0J/exF4EYmhEsbXxqGvfcPUpvYi6ACG98TpS5Qjsvy4rByd5BGbPH+jjF9SZS0v60KLB3y730E8yDHPwmr+x28afS712YaR0z8hUghd9I1GTn6vO+2O/wB5/YTmOYDSDCG7dLs9mn2jgt60xsX3cfig8RYDlaAF++Yzu9iAWQp/byR8oCfyf3+bU6GEDKcYgrgo37w4alAuJyXxTX+eLMvk8D5LH/4mWtQfy1xX+u5wApnzDzTOk6krnKQBcHpwjfPB/XmIvs2cND/SX+TB7i94EZpYTKMpzF9JhNV3yiMBbYtul36Mf1fvOZN2r24dO+29JHgogYe2vhsCibxvUYIX2IITy2eQftw0WQ7cHc//GJPTwhz3o/agkahZcGi09qvTG6hWgWsmd93r+Vrd+r99sTdqWWsVpOvk4IUMOn5gtchlzCt3oLCvlFyTHXcD5BKyX87btYYNRl83Z6SLR4SNfr5Bmz4jjgjMUmy16D2zvcItn3LfX+egCRqzZo9ikdlREICiCUKfeoMlXd5xM0Oe9bMmb4Fi6RKCjy4h+i4DKeU1wVbr1l2PgnDghDK1FIsu+/qPeVAHn8q3yVqLc6ZqAJCB9QZCGzCvhWDc8DJmvPbNpB+3GJZcsO+ldR+CtANfouAzjRMigNMpEKVHrux3TAGvtJgORLcUu0Dr/DgIkZpQuW4IGw4FXKxb/84DJccjCi9BP+RZpfWKSrchMDg2wfRa5x6diW2IcH5OCXuE9qlNeJCflxlPICO0utzVriGIU83QZgyi52rd5AU7hMRPMKebDPWdYaYLF8KaYPNjr2S4o6JUb37eNh2AHw+7BWhgRNRDcpw8LGE3Ew59ejhTg8v+neizM1MBcR1/muPN/3ACsdGBCEWgmyVlhCqPuONKaxVa/3gMhI9lr/yuNAzFlEMWJ1NpplZ1YiFpIXeAqXqXQY/2A1XGfu48Hxab+5SnQbwKY9HD4WGnh+WBWjhrcMc426hSg4ekyuKOSiQxvuoeO4TOXOHXRInvO7QOUuqfIWw289sw377tBrnWR8V4rCw5K1cXILDtYQw6p3oVDsU/bgboZ5KfkvqBD+KQ0rKt6IIKSFqrR/xM8gDBZYqmCw1SiKWNOoRRk95vOSYCGntmybn8HaQkonxyGhgfFUxKaewrdKqElzGo5oGePj6lcfKBDCqrqJM44ImW1KytIi+1/BIpA776STGeGQoxRJXJz84hiFqKr2W9nxBscZVvjMNCocCJRjQqYRRYbwCSS5wStYJCI5xH4DoZoPcjW3ibMCNnEmfz6gg7uWD6Nh0KNIqJVoihpNiqvqivfJw1gkIrq8QYEnVHrL3YzKcSzRkvNuzMnyD5AVhENqi54ap0gRR8BdXDaJ2LmE2vihaBfnlnuKHTb7x1xxii9v5LJjiLiqigMpQyW2ekjsX0HrtnACi0dOoJow65EKA6TJaGmv8amWRg8fQZAAUeRK58Ixzy0FCm2FrKaxSGTTKJ0QbTKuzxVTb9hFzFZtycnGLFo09nUP6ywVgaxVxikYi1FcMg6u/lLaNBsK8ZlcTMS0oKaEmtmi+yhkqClj1fV9X+AWFokcOMBLrdSpUhXB0TOW8SE5Vu+dVLFPaiKmi1bKCkvIdLuwVjNVH3rFjYY/4kl4UYhUda+xgpB+TeDDK89wESsAxCmN13LPExwmEpyV6aNnmLeEzp3PQzDxC7xPmjEsAukWoIxsqqSaayYboIb5wtLsBl7vk8ohR2TnEr0gFof0T60PD0xcz1oYwiKRBuO4pAuhyEyWbpQ+OQtZF8VxPaLCrys6Jzw/ZDZ4s3S9gE1MczUKFrsrZPsaLBLZ+Bl6VTR6Fkg11vjdSiwYxfJAnE75htYd39WxjPKHzdZztJY49C/MpfSYrC/ftYsXDY9IlNQ6q06tBh6JwHAAiap5pdc230NfdYOMN30ByEa79QoZB1/j2hhHo1E+nGE5Fols2U5flmf+e+pJ1BG/IPF/hTtPSui8V09wfn6TJB23ukfBNUuxCpmNZ8pYF5E5mJuwiGTTdnpQXuZfygt/DbUkTSfDhVO+QznW37adXgCQ8vyfUwy3rhryJyAoZbLwLeP9+nUALnPhnVL9FNvfKe3m7fiCTKTpNMunRJ8/Ft3+JGtijbjJxo13CdeYeEN65hv8IQlRv506Umgya+2jKRdrqkWqyr+9eRs9gctQFISvfQ35sWPgD38YfOQI+NAh8Oc/D37wQZC2RHTGvNtbyPJJvCquMu1T9zIoHsc3HJKzsE+Pm+UI76x4UsqPuMxEreHph9FcsgS0bBlIwHACjJO3rSC566+PFTKmM13vAblhlNpSB3iJXS9vsLlQt84r8PtKG/fc8vzz3MBlIqqkKNxqDYJGxuFWTMApMDffLEP6q0ArVoTl6acDOGfqI+2kBl5NBFqGUmKWpQJRmr5MEYd9qj9w7E3cgMtEHn4YrRWSO45NwTX7xBKuldm8w6B33oF72azlpZcCTSgwZ7KSnh3+a8MCV7o4AuaUxUfrQEz1Y2lArUrA+9HtWvq/hKKzj5MNNIeHwJ1pcHtpeN6hEyjfkFashSfHwOMrw37lF3GpcnSUino/PWYzPY3/r1uAKq3uQWTFZ629qvVY1PG80vUEu+7A13kdLpEcPMh9+Qr0N64EnWyIsUtRtHkivOyxpXB9x8Q61I1WVm6k/KJWMrOvHkDuGqW3EWqmoUjEacZfamtmDXWXMdDQ9WCt1Z+I4CKL/gihOIbBiRwkL9T1yxJBmVLXUWCuAvr6gvIKTH8/SEH55BGcFmlOI5Z2A/8Xc5GodBlyD3YxF7HJcFfLaHWRUsLaxx/h3+CDnGOBRf3/2T08NJJjMBMw8lNhmZClMQ6aFGAaYwGYIQGmJa1yy5o+zyWk3IL7ZlaOgbN9dHejKHhDuLGQq6s4xM/oGTAwl0ngZXK4EBfLcUpqrz/YupWOYgFEi1TZ1VjabMEV3TBN0hQL1vWuLh3hkQHwEm2XgIc7NV4R+18+Ah4bQnvDBupiNoDo4O2KFj4lqyPoDbkwEg2zeDEKCc9klqPoOWpRui1s9UZzGX62YZ4+mdDnWppjRHKmZktA6MgIvdUn9zFQpgWUAQVEwBiU9t2OgdKWZSg8v7gVX301iltvpckz3YPOdvP9X+FBGsRmUbbBbkaUMQvxRSO5oaTA/q0oUK6BUrJeLT+VMckT3A5POry1bRu9izmKJlqaW4wUWFb0oZlnvl8PQEvu25D7HTuKUjiC+2U5LkAMmKXo9RJ5SuELxjGZ3hRg+psoP3kfJs6WqdJ7PczBR/naDuOjCoKf7qSgbGZuoy6SBWvx7pKItjYW0ijV6aRstyM8dKw1gOPjJSbkobtCfNMx9IkFZGvWwL3zE/RPDaAxJPyg1qDHJCcq804Ao2x4XvOg5GIVZTe07Wlf6kI3gmKWciK8SH+P8XFMyf3aZ9P5PQFReXI3X69hFTW3cdyrvAfDLMWHZRfekLYpTGeBlMsaULq/KENRWyfTi8J/0+YfXIv8ZS4WwN76Sg+ILKfUVWRbrSNaibz5HteJXDLQF9rBgWDBQgBT53Lfc/4awidcXRyCpS+Oa9aQWdhSasoDn9TDMYdsl+uWpKf7tyxLR65zXZDWPnV/s+HfJDVyz0t+n58EkmJFR7bbbf/rBxrMwrHMWif7p6ekfprbfo06edjWViMPjp8bjFkBoqJf+0rHh3wIdlVuoq7jt7PqSyMl2qKoslx5QxCHoJT1ynZ98KNWoK28dbQ7YZ8AFRQVEFoBjyB91XUCon/2aQEDAzrDZKBK5FGgsrxahoVKNvzR7Ih91r+o2qDfhGTw34Uk6+iGT6GzWmhmc5XMQKqHbA9iVq0rMFrpF1dQcvQSp067CkrbA0VqHU5aAdqpNSgYfQaYKi/nBnCmwrUTE8CUrcv0wKlbR88cUS4IEBX9UEaK0T8U0+9EXlBv6RpIRVA4WQdHd6mBEAO/KqMGodyRXKZ+s2aYePfnKjitXktpx8kDU1XCKamVKCiShLllI8JP/Rib6zf3cwJERf9TguGVeEbYbzKSqquIsspXai4SxVuMRqQ8cMjMvrvVz8zIf5Kg5xhKaiG+jbzRCXziJBUX6wpuYqC0Gui8PY6j55P/nDPKvJc88Qh/SCzgg+4MA0KO4bhGwg2dHi7Ted7C7FOtsB1CaSl8pa4W8g0XIlCj8JbWE3ZLDbu2rynraizDOU58fBvGz5ZnLCggKs/t4v7xBtaKkiuihaToUloFLguWEZX2uQk8KXtlJY8oMwNB+xTeKDTSSFSBJFs6jVqq8qp4w8DQUNyMwEjbyjE58DqOr/9z6uAC5IIBieJ/ktbBGulwJOUnXIXctG1vXa+JgOS2L1lKGFB618q6ZhUKRt5rJU1tp4RFJnB8tlHkXDJvgEQ5uIuXdHOsktXlolDmwSmCktFq6i6lYTfui27iATEw4jnat253BRCaRiEWdTJbhokN8/xp+bwDEuXgTs6Lm7BcRpkjOh8s4bmlirZFwZarrEctJGaqXnmu+EO3s76wLsl2MdzAyaNjmPzezzC+cyeVWABZMEBmiv4EVQYVLWHW4ZzRX4afo2USKRreLcxShAqndV3C3ykhzPbxdzC16kZMrF9/YdwwW/kVde7c2j1PF5EAAAAASUVORK5CYII=";