diff --git a/.eslintrc b/.eslintrc index e5559d1a..e6c6a2ae 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,11 +1,22 @@ { "parser": "@typescript-eslint/parser", "extends": [ - "react-app", - "prettier", - "prettier/react", - "plugin:import/errors", - "plugin:@typescript-eslint/recommended" + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended", + "prettier/@typescript-eslint", + "plugin:prettier/recommended" ], - "plugins": ["prettier", "import"] + "plugins": ["react-hooks"], + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true + } + }, + "rules": { + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "warn", + "react/prop-types": "off" + } } diff --git a/.prettierrc b/.prettierrc index eccaf745..7f0a1dfc 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,7 +3,7 @@ "jsxBracketSameLine": true, "printWidth": 80, "singleQuote": true, - "trailingComma": "none", + "trailingComma": "es5", "tabWidth": 2, "useTabs": false } \ No newline at end of file diff --git a/package.json b/package.json index 62792a57..f7f0fa87 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "build": "rimraf dist && webpack --mode production", "build-storybook": "build-storybook -s public --docs", "storybook": "start-storybook -p 9009 -s public --docs", + "lint:check": "eslint './src/**/*.{js,jsx,ts,tsx}'", "prepare": "yarn build" }, "author": "Gnosis (https://gnosis.pm)", @@ -40,34 +41,31 @@ "@testing-library/user-event": "10.3.1", "@types/big.js": "^4.0.5", "@types/classnames": "^2.2.10", - "@types/jest": "26.0.3", + "@types/jest": "26.0.5", "@types/material-ui": "^0.21.7", - "@types/node": "14.0.14", - "@types/react": "16.9.41", + "@types/node": "14.0.24", + "@types/react": "16.9.43", "@types/react-dom": "16.9.8", - "@types/styled-components": "5.1.0", + "@types/styled-components": "5.1.1", "@types/yup": "0.29.3", - "@typescript-eslint/eslint-plugin": "^3.5.0", - "@typescript-eslint/parser": "^3.5.0", + "@typescript-eslint/eslint-plugin": "^3.7.0", + "@typescript-eslint/parser": "^3.7.0", "awesome-typescript-loader": "^5.2.1", "babel-eslint": "^10.0.3", "babel-loader": "8.1.0", "copy-webpack-plugin": "^5.1.1", - "eslint": "7.3.1", + "eslint": "7.5.0", "eslint-config-prettier": "6.11.0", - "eslint-config-react-app": "5.2.1", - "eslint-plugin-import": "2.22.0", - "eslint-plugin-jsx-a11y": "^6.2.3", "eslint-plugin-prettier": "3.1.4", - "eslint-plugin-react": "7.20.2", - "eslint-plugin-react-hooks": "4.0.4", + "eslint-plugin-react": "7.20.3", + "eslint-plugin-react-hooks": "4.0.8", "ethereum-blockies-base64": "^1.0.2", "prettier": "2.0.5", "react": "16.13.1", "react-dom": "16.13.1", "rimraf": "^3.0.2", "styled-components": "5.1.1", - "typescript": "3.9.5", + "typescript": "3.9.7", "webpack": "4.43.0", "webpack-cli": "^3.3.10", "webpack-node-externals": "^1.7.2" diff --git a/src/dataDisplay/Card/card.stories.tsx b/src/dataDisplay/Card/card.stories.tsx index b77d8b6e..7fcb6c88 100644 --- a/src/dataDisplay/Card/card.stories.tsx +++ b/src/dataDisplay/Card/card.stories.tsx @@ -7,11 +7,11 @@ export default { title: 'Data Display/Card', component: Card, parameters: { - componentSubtitle: 'Useful to wrap content inside a styled container.' - } + componentSubtitle: 'Useful to wrap content inside a styled container.', + }, }; -export const card = () => ( +export const SimpleCard = (): React.ReactElement => ( Some text diff --git a/src/dataDisplay/Card/index.tsx b/src/dataDisplay/Card/index.tsx index be470af1..7640ad2c 100644 --- a/src/dataDisplay/Card/index.tsx +++ b/src/dataDisplay/Card/index.tsx @@ -2,7 +2,7 @@ import React from 'react'; import styled from 'styled-components'; import { rgba } from 'polished'; -const Card = styled.div` +const StyledCard = styled.div` box-shadow: 1px 2px 10px 0 ${({ theme }) => rgba(theme.colors.shadow.color, 0.08)}; border-radius: 8px; @@ -10,4 +10,13 @@ const Card = styled.div` background-color: ${({ theme }) => theme.colors.white}; `; -export default ({ ...args }) => ; +type Props = { + className?: string; + children: React.ReactNode; +}; + +const Card = ({ className, children }: Props): React.ReactElement => ( + {children} +); + +export default Card; diff --git a/src/dataDisplay/Divider/divider.stories.tsx b/src/dataDisplay/Divider/divider.stories.tsx index aac78fd4..3fe6d54c 100644 --- a/src/dataDisplay/Divider/divider.stories.tsx +++ b/src/dataDisplay/Divider/divider.stories.tsx @@ -6,11 +6,11 @@ export default { title: 'Data Display/Divider', component: Divider, parameters: { - componentSubtitle: 'Used to separate content.' - } + componentSubtitle: 'Used to separate content.', + }, }; -export const section = () => ( +export const Section = (): React.ReactElement => ( <>
Some content
diff --git a/src/dataDisplay/Divider/index.tsx b/src/dataDisplay/Divider/index.tsx index d2bb56fe..84ee31c8 100644 --- a/src/dataDisplay/Divider/index.tsx +++ b/src/dataDisplay/Divider/index.tsx @@ -1,9 +1,17 @@ import React from 'react'; import styled from 'styled-components'; -const Divider = styled.div` +const StyledDivider = styled.div` border-top: 2px solid ${({ theme }) => theme.colors.separator}; margin: 16px 0; `; -export default ({ ...args }) => ; +type Props = { + className?: string; +}; + +const Divider = ({ className }: Props): React.ReactElement => ( + +); + +export default Divider; diff --git a/src/dataDisplay/FixedDialog/FixedDialog.stories.tsx b/src/dataDisplay/FixedDialog/FixedDialog.stories.tsx index fe96227d..591daae4 100644 --- a/src/dataDisplay/FixedDialog/FixedDialog.stories.tsx +++ b/src/dataDisplay/FixedDialog/FixedDialog.stories.tsx @@ -8,15 +8,15 @@ export default { parameters: { componentSubtitle: `It shows a Dialog, with a modal look and feels, but only being rendered inside a container instead of taking position absolute. - ` - } + `, + }, }; -export const fixedDialog = () => ( +export const SimpleFixedDialog = (): React.ReactElement => ( Some Body} - onCancel={() => {}} - onConfirm={() => {}} + onCancel={() => undefined} + onConfirm={() => undefined} /> ); diff --git a/src/dataDisplay/FixedDialog/index.tsx b/src/dataDisplay/FixedDialog/index.tsx index a8e883b9..37be1fd7 100644 --- a/src/dataDisplay/FixedDialog/index.tsx +++ b/src/dataDisplay/FixedDialog/index.tsx @@ -51,7 +51,12 @@ type Props = { onConfirm: () => void; }; -const FixedDialog = ({ body, title, onConfirm, onCancel }: Props) => { +const FixedDialog = ({ + body, + title, + onConfirm, + onCancel, +}: Props): React.ReactElement => { return ( diff --git a/src/dataDisplay/FixedIcon/fixedIcon.stories.tsx b/src/dataDisplay/FixedIcon/fixedIcon.stories.tsx index 86dad44e..eb5b9cf8 100644 --- a/src/dataDisplay/FixedIcon/fixedIcon.stories.tsx +++ b/src/dataDisplay/FixedIcon/fixedIcon.stories.tsx @@ -1,18 +1,18 @@ import React from 'react'; import styled from 'styled-components'; -import FixedIcon from './index'; +import FixedIcon, { IconTypes } from './index'; export default { title: 'Data Display/FixedIcon', component: FixedIcon, parameters: { componentSubtitle: `Components that renders an icon customized for Safe Multisig app, this icon is not - customizable by props. If you need generic purposes Icons, try Icon component.` - } + customizable by props. If you need generic purposes Icons, try Icon component.`, + }, }; -export const icons = () => { +export const Icons = (): React.ReactElement => { const Wrapper = styled.div` display: flex; flex-wrap: wrap; @@ -32,29 +32,29 @@ export const icons = () => { font-size: 14px; `; + const icons: IconTypes[] = [ + 'arrowSort', + 'connectedRinkeby', + 'connectedWallet', + 'bullit', + 'dropdownArrowSmall', + 'arrowReceived', + 'arrowSent', + 'threeDots', + 'options', + 'plus', + 'chevronRight', + 'chevronLeft', + 'chevronUp', + 'chevronDown', + 'settingsChange', + 'creatingInProgress', + 'notOwner', + ]; + return ( - {[ - 'arrowSort', - 'connectedRinkeby', - 'connectedWallet', - 'bullit', - 'dropdownArrowSmall', - 'arrowReceived', - 'arrowSent', - 'threeDots', - 'options', - 'plus', - 'chevronRight', - 'chevronLeft', - 'chevronUp', - 'chevronDown', - 'settingsChange', - 'creatingInProgress', - 'notOwner' - - - ].map((type: any, index) => ( + {icons.map((type, index) => ( {type} @@ -63,4 +63,3 @@ export const icons = () => { ); }; - diff --git a/src/dataDisplay/FixedIcon/images/arrowReceived.tsx b/src/dataDisplay/FixedIcon/images/arrowReceived.tsx index 426c7ea0..19e5ee26 100644 --- a/src/dataDisplay/FixedIcon/images/arrowReceived.tsx +++ b/src/dataDisplay/FixedIcon/images/arrowReceived.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/arrowSent.tsx b/src/dataDisplay/FixedIcon/images/arrowSent.tsx index 35652e8e..bfdf83ba 100644 --- a/src/dataDisplay/FixedIcon/images/arrowSent.tsx +++ b/src/dataDisplay/FixedIcon/images/arrowSent.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/arrowSort.tsx b/src/dataDisplay/FixedIcon/images/arrowSort.tsx index 1f8bc114..52a5e371 100644 --- a/src/dataDisplay/FixedIcon/images/arrowSort.tsx +++ b/src/dataDisplay/FixedIcon/images/arrowSort.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/bullit.tsx b/src/dataDisplay/FixedIcon/images/bullit.tsx index 7f487dc0..fa50f3f7 100644 --- a/src/dataDisplay/FixedIcon/images/bullit.tsx +++ b/src/dataDisplay/FixedIcon/images/bullit.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/chevronDown.tsx b/src/dataDisplay/FixedIcon/images/chevronDown.tsx index 8c0aa4f3..4ad8f8d1 100644 --- a/src/dataDisplay/FixedIcon/images/chevronDown.tsx +++ b/src/dataDisplay/FixedIcon/images/chevronDown.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/chevronLeft.tsx b/src/dataDisplay/FixedIcon/images/chevronLeft.tsx index 51d9e418..5dd9168b 100644 --- a/src/dataDisplay/FixedIcon/images/chevronLeft.tsx +++ b/src/dataDisplay/FixedIcon/images/chevronLeft.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/chevronRight.tsx b/src/dataDisplay/FixedIcon/images/chevronRight.tsx index 98731a23..5d2f868a 100644 --- a/src/dataDisplay/FixedIcon/images/chevronRight.tsx +++ b/src/dataDisplay/FixedIcon/images/chevronRight.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/chevronUp.tsx b/src/dataDisplay/FixedIcon/images/chevronUp.tsx index 3235d893..6122d200 100644 --- a/src/dataDisplay/FixedIcon/images/chevronUp.tsx +++ b/src/dataDisplay/FixedIcon/images/chevronUp.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - - ) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/connectedRinkeby.tsx b/src/dataDisplay/FixedIcon/images/connectedRinkeby.tsx index d62b726f..32471f9b 100644 --- a/src/dataDisplay/FixedIcon/images/connectedRinkeby.tsx +++ b/src/dataDisplay/FixedIcon/images/connectedRinkeby.tsx @@ -1,16 +1,16 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/connectedWallet.tsx b/src/dataDisplay/FixedIcon/images/connectedWallet.tsx index bec90f84..6c8c1ca3 100644 --- a/src/dataDisplay/FixedIcon/images/connectedWallet.tsx +++ b/src/dataDisplay/FixedIcon/images/connectedWallet.tsx @@ -1,16 +1,16 @@ import React from 'react'; const icon = ( - - - - ) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/creatingInProgress.tsx b/src/dataDisplay/FixedIcon/images/creatingInProgress.tsx index 7f656d40..19ff2035 100644 --- a/src/dataDisplay/FixedIcon/images/creatingInProgress.tsx +++ b/src/dataDisplay/FixedIcon/images/creatingInProgress.tsx @@ -1,20 +1,20 @@ import React from 'react'; const icon = ( - - - - - - -) + + + + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/dropdownArrowSmall.tsx b/src/dataDisplay/FixedIcon/images/dropdownArrowSmall.tsx index 6f9be316..19bde4e6 100644 --- a/src/dataDisplay/FixedIcon/images/dropdownArrowSmall.tsx +++ b/src/dataDisplay/FixedIcon/images/dropdownArrowSmall.tsx @@ -1,16 +1,16 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/options.tsx b/src/dataDisplay/FixedIcon/images/options.tsx index 1332e21d..532c6412 100644 --- a/src/dataDisplay/FixedIcon/images/options.tsx +++ b/src/dataDisplay/FixedIcon/images/options.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - - - - - -) + + + + + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/plus.tsx b/src/dataDisplay/FixedIcon/images/plus.tsx index e3477b92..4a7a73cf 100644 --- a/src/dataDisplay/FixedIcon/images/plus.tsx +++ b/src/dataDisplay/FixedIcon/images/plus.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/settingsChange.tsx b/src/dataDisplay/FixedIcon/images/settingsChange.tsx index 1cc3a811..24a5bece 100644 --- a/src/dataDisplay/FixedIcon/images/settingsChange.tsx +++ b/src/dataDisplay/FixedIcon/images/settingsChange.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - -) + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/images/threeDots.tsx b/src/dataDisplay/FixedIcon/images/threeDots.tsx index a907c0dc..fdfd26dc 100644 --- a/src/dataDisplay/FixedIcon/images/threeDots.tsx +++ b/src/dataDisplay/FixedIcon/images/threeDots.tsx @@ -1,17 +1,17 @@ import React from 'react'; const icon = ( - - - - - - - -) + + + + + + + +); export default icon; diff --git a/src/dataDisplay/FixedIcon/index.tsx b/src/dataDisplay/FixedIcon/index.tsx index 17cb521d..d523cfaf 100644 --- a/src/dataDisplay/FixedIcon/index.tsx +++ b/src/dataDisplay/FixedIcon/index.tsx @@ -18,7 +18,6 @@ import settingsChange from './images/settingsChange'; import creatingInProgress from './images/creatingInProgress'; import notOwner from './images/notOwner'; - const icons = { arrowSort, connectedRinkeby, @@ -40,16 +39,17 @@ const icons = { }; export type IconType = typeof icons; +export type IconTypes = keyof IconType; type Props = { - type: keyof IconType; + type: IconTypes; }; /** * The `FixedIcon` renders an icon */ -function FixedIcon({ type }: Props) { +function FixedIcon({ type }: Props): React.ReactElement { return {icons[type]}; } -export default FixedIcon; \ No newline at end of file +export default FixedIcon; diff --git a/src/dataDisplay/Icon/icon.stories.tsx b/src/dataDisplay/Icon/icon.stories.tsx index c4992229..0755dda9 100644 --- a/src/dataDisplay/Icon/icon.stories.tsx +++ b/src/dataDisplay/Icon/icon.stories.tsx @@ -1,18 +1,18 @@ import React from 'react'; import styled from 'styled-components'; -import Icon from './index'; +import Icon, { IconTypes } from './index'; export default { title: 'Data Display/Icon', component: Icon, parameters: { componentSubtitle: - 'Icon component, you can select one of the set of icons we already have configured.' - } + 'Icon component, you can select one of the set of icons we already have configured.', + }, }; -export const icons = () => { +export const Icons = (): React.ReactElement => { const Wrapper = styled.div` display: flex; flex-wrap: wrap; @@ -32,84 +32,79 @@ export const icons = () => { font-size: 14px; `; - const IconDisplay = styled.div` - display: flex; - align-items: center; - flex-direction: column; - justify-content: space-evenly; - `; + const icons: IconTypes[] = [ + 'add', + 'addressBook', + 'addressBookAdd', + 'alert', + 'allowances', + 'apps', + 'arrowDown', + 'assets', + 'awaitingConfirmations', + 'camera', + 'chain', + 'check', + 'circleCheck', + 'circleCross', + 'circleDropdown', + 'code', + 'collectibles', + 'copy', + 'cross', + 'currency', + 'delete', + 'devicePassword', + 'edit', + 'error', + 'eth', + 'externalLink', + 'eye', + 'eyeOff', + 'filledCross', + 'fingerPrint', + 'getInTouch', + 'home', + 'info', + 'knowledge', + 'licenses', + 'loadSafe', + 'locked', + 'mobileConfirm', + 'noInternet', + 'owners', + 'paste', + 'paymentToken', + 'privacyPolicy', + 'qrCode', + 'question', + 'rateApp', + 'received', + 'recover', + 'replaceOwner', + 'requiredConfirmations', + 'restricted', + 'resync', + 'rocket', + 'scan', + 'search', + 'sendAgain', + 'sent', + 'serverError', + 'settings', + 'settingsChange', + 'settingsTool', + 'share', + 'termsOfUse', + 'transactionsInactive', + 'unlocked', + 'userEdit', + 'wallet', + ]; return ( - {[ - 'add', - 'addressBook', - 'addressBookAdd', - 'alert', - 'allowances', - 'apps', - 'arrowDown', - 'assets', - 'awaitingConfirmations', - 'camera', - 'chain', - 'check', - 'circleCheck', - 'circleCross', - 'circleDropdown', - 'code', - 'collectibles', - 'copy', - 'cross', - 'currency', - 'delete', - 'devicePassword', - 'edit', - 'error', - 'eth', - 'externalLink', - 'eye', - 'eyeOff', - 'filledCross', - 'fingerPrint', - 'getInTouch', - 'home', - 'info', - 'knowledge', - 'licenses', - 'loadSafe', - 'locked', - 'mobileConfirm', - 'noInternet', - 'owners', - 'paste', - 'paymentToken', - 'privacyPolicy', - 'qrCode', - 'question', - 'rateApp', - 'received', - 'recover', - 'replaceOwner', - 'requiredConfirmations', - 'restricted', - 'resync', - 'rocket', - 'scan', - 'search', - 'sendAgain', - 'sent', - 'serverError', - 'settings', - 'settingsChange', - 'settingsTool', - 'share', - 'termsOfUse', - 'transactionsInactive', - 'unlocked', - 'userEdit', - 'wallet' - ].map((type: any, index) => ( + {icons.map((type, index) => ( {type} @@ -119,17 +114,21 @@ export const icons = () => { ); }; -export const customSize = () => ( +export const CustomSize = (): React.ReactElement => ( <> ); -export const customColor = () => ( +export const CustomColor = (): React.ReactElement => ( <> ); + +export const WithTooltip = (): React.ReactElement => ( + +); diff --git a/src/dataDisplay/Icon/images/add.tsx b/src/dataDisplay/Icon/images/add.tsx index adce7474..7f4c07cf 100644 --- a/src/dataDisplay/Icon/images/add.tsx +++ b/src/dataDisplay/Icon/images/add.tsx @@ -40,5 +40,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/addressBook.tsx b/src/dataDisplay/Icon/images/addressBook.tsx index f1e90ebb..a8ca04a2 100644 --- a/src/dataDisplay/Icon/images/addressBook.tsx +++ b/src/dataDisplay/Icon/images/addressBook.tsx @@ -32,5 +32,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/addressBookAdd.tsx b/src/dataDisplay/Icon/images/addressBookAdd.tsx index e0a8f7e6..1806a32e 100644 --- a/src/dataDisplay/Icon/images/addressBookAdd.tsx +++ b/src/dataDisplay/Icon/images/addressBookAdd.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/alert.tsx b/src/dataDisplay/Icon/images/alert.tsx index e26f9bda..ecd0ca98 100644 --- a/src/dataDisplay/Icon/images/alert.tsx +++ b/src/dataDisplay/Icon/images/alert.tsx @@ -38,5 +38,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/allowances.tsx b/src/dataDisplay/Icon/images/allowances.tsx index 299f4825..2d5812fb 100644 --- a/src/dataDisplay/Icon/images/allowances.tsx +++ b/src/dataDisplay/Icon/images/allowances.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/apps.tsx b/src/dataDisplay/Icon/images/apps.tsx index 28a851f4..c3d5d9c5 100644 --- a/src/dataDisplay/Icon/images/apps.tsx +++ b/src/dataDisplay/Icon/images/apps.tsx @@ -44,5 +44,5 @@ export default { - ) + ), }; diff --git a/src/dataDisplay/Icon/images/arrowDown.tsx b/src/dataDisplay/Icon/images/arrowDown.tsx index b25f3051..d5720705 100644 --- a/src/dataDisplay/Icon/images/arrowDown.tsx +++ b/src/dataDisplay/Icon/images/arrowDown.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/assets.tsx b/src/dataDisplay/Icon/images/assets.tsx index 982be10e..749e96ba 100644 --- a/src/dataDisplay/Icon/images/assets.tsx +++ b/src/dataDisplay/Icon/images/assets.tsx @@ -40,5 +40,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/awaitingConfirmations.tsx b/src/dataDisplay/Icon/images/awaitingConfirmations.tsx index fc9bb7ef..b70ecdd2 100644 --- a/src/dataDisplay/Icon/images/awaitingConfirmations.tsx +++ b/src/dataDisplay/Icon/images/awaitingConfirmations.tsx @@ -38,5 +38,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/camera.tsx b/src/dataDisplay/Icon/images/camera.tsx index f73114a0..a1c5766e 100644 --- a/src/dataDisplay/Icon/images/camera.tsx +++ b/src/dataDisplay/Icon/images/camera.tsx @@ -41,5 +41,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/chain.tsx b/src/dataDisplay/Icon/images/chain.tsx index cd2119ce..a058610e 100644 --- a/src/dataDisplay/Icon/images/chain.tsx +++ b/src/dataDisplay/Icon/images/chain.tsx @@ -42,5 +42,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/check.tsx b/src/dataDisplay/Icon/images/check.tsx index 495cf105..a8151a14 100644 --- a/src/dataDisplay/Icon/images/check.tsx +++ b/src/dataDisplay/Icon/images/check.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/circleCheck.tsx b/src/dataDisplay/Icon/images/circleCheck.tsx index 5f33a2e9..83eb9ba1 100644 --- a/src/dataDisplay/Icon/images/circleCheck.tsx +++ b/src/dataDisplay/Icon/images/circleCheck.tsx @@ -42,5 +42,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/circleCross.tsx b/src/dataDisplay/Icon/images/circleCross.tsx index b0a58f5e..4b6442ce 100644 --- a/src/dataDisplay/Icon/images/circleCross.tsx +++ b/src/dataDisplay/Icon/images/circleCross.tsx @@ -40,5 +40,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/circleDropdown.tsx b/src/dataDisplay/Icon/images/circleDropdown.tsx index e32174b5..ac362730 100644 --- a/src/dataDisplay/Icon/images/circleDropdown.tsx +++ b/src/dataDisplay/Icon/images/circleDropdown.tsx @@ -40,5 +40,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/code.tsx b/src/dataDisplay/Icon/images/code.tsx index 63c99a12..2c20439e 100644 --- a/src/dataDisplay/Icon/images/code.tsx +++ b/src/dataDisplay/Icon/images/code.tsx @@ -31,5 +31,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/collectibles.tsx b/src/dataDisplay/Icon/images/collectibles.tsx index bf362eb4..26072e69 100644 --- a/src/dataDisplay/Icon/images/collectibles.tsx +++ b/src/dataDisplay/Icon/images/collectibles.tsx @@ -42,5 +42,5 @@ export default { - ) + ), }; diff --git a/src/dataDisplay/Icon/images/copy.tsx b/src/dataDisplay/Icon/images/copy.tsx index 3563173d..7fcfb458 100644 --- a/src/dataDisplay/Icon/images/copy.tsx +++ b/src/dataDisplay/Icon/images/copy.tsx @@ -32,5 +32,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/cross.tsx b/src/dataDisplay/Icon/images/cross.tsx index 64295c27..49a04252 100644 --- a/src/dataDisplay/Icon/images/cross.tsx +++ b/src/dataDisplay/Icon/images/cross.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/currency.tsx b/src/dataDisplay/Icon/images/currency.tsx index 06ea0cd9..56d2a830 100644 --- a/src/dataDisplay/Icon/images/currency.tsx +++ b/src/dataDisplay/Icon/images/currency.tsx @@ -34,5 +34,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/delete.tsx b/src/dataDisplay/Icon/images/delete.tsx index 37c6b79b..d13a6da9 100644 --- a/src/dataDisplay/Icon/images/delete.tsx +++ b/src/dataDisplay/Icon/images/delete.tsx @@ -34,5 +34,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/devicePassword.tsx b/src/dataDisplay/Icon/images/devicePassword.tsx index 36f5c4de..7e37242c 100644 --- a/src/dataDisplay/Icon/images/devicePassword.tsx +++ b/src/dataDisplay/Icon/images/devicePassword.tsx @@ -42,5 +42,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/edit.tsx b/src/dataDisplay/Icon/images/edit.tsx index 3d57be0b..47f3f94a 100644 --- a/src/dataDisplay/Icon/images/edit.tsx +++ b/src/dataDisplay/Icon/images/edit.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/error.tsx b/src/dataDisplay/Icon/images/error.tsx index c02ff88d..0dd76846 100644 --- a/src/dataDisplay/Icon/images/error.tsx +++ b/src/dataDisplay/Icon/images/error.tsx @@ -44,5 +44,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/eth.tsx b/src/dataDisplay/Icon/images/eth.tsx index bfccdb65..9512f4e8 100644 --- a/src/dataDisplay/Icon/images/eth.tsx +++ b/src/dataDisplay/Icon/images/eth.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/externalLink.tsx b/src/dataDisplay/Icon/images/externalLink.tsx index 5ccbd07b..d1f2492a 100644 --- a/src/dataDisplay/Icon/images/externalLink.tsx +++ b/src/dataDisplay/Icon/images/externalLink.tsx @@ -40,5 +40,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/eye.tsx b/src/dataDisplay/Icon/images/eye.tsx index 07c96c91..58a7c741 100644 --- a/src/dataDisplay/Icon/images/eye.tsx +++ b/src/dataDisplay/Icon/images/eye.tsx @@ -38,5 +38,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/eyeOff.tsx b/src/dataDisplay/Icon/images/eyeOff.tsx index 2435366d..bc8ab58a 100644 --- a/src/dataDisplay/Icon/images/eyeOff.tsx +++ b/src/dataDisplay/Icon/images/eyeOff.tsx @@ -34,5 +34,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/filledCross.tsx b/src/dataDisplay/Icon/images/filledCross.tsx index 3aa38aaf..f361f603 100644 --- a/src/dataDisplay/Icon/images/filledCross.tsx +++ b/src/dataDisplay/Icon/images/filledCross.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/fingerPrint.tsx b/src/dataDisplay/Icon/images/fingerPrint.tsx index cfca49d7..7195239e 100644 --- a/src/dataDisplay/Icon/images/fingerPrint.tsx +++ b/src/dataDisplay/Icon/images/fingerPrint.tsx @@ -50,5 +50,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/getInTouch.tsx b/src/dataDisplay/Icon/images/getInTouch.tsx index 0ad18fe9..468ead6f 100644 --- a/src/dataDisplay/Icon/images/getInTouch.tsx +++ b/src/dataDisplay/Icon/images/getInTouch.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/home.tsx b/src/dataDisplay/Icon/images/home.tsx index 26413300..029e2cfb 100644 --- a/src/dataDisplay/Icon/images/home.tsx +++ b/src/dataDisplay/Icon/images/home.tsx @@ -32,5 +32,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/info.tsx b/src/dataDisplay/Icon/images/info.tsx index ef1d6c8e..62180e49 100644 --- a/src/dataDisplay/Icon/images/info.tsx +++ b/src/dataDisplay/Icon/images/info.tsx @@ -31,7 +31,14 @@ export default { viewBox="0 0 24 24"> - + - ) + ), }; diff --git a/src/dataDisplay/Icon/images/knowledge.tsx b/src/dataDisplay/Icon/images/knowledge.tsx index c92930bf..676a9b89 100644 --- a/src/dataDisplay/Icon/images/knowledge.tsx +++ b/src/dataDisplay/Icon/images/knowledge.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/licenses.tsx b/src/dataDisplay/Icon/images/licenses.tsx index 676a0dd4..d0c78931 100644 --- a/src/dataDisplay/Icon/images/licenses.tsx +++ b/src/dataDisplay/Icon/images/licenses.tsx @@ -38,5 +38,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/loadSafe.tsx b/src/dataDisplay/Icon/images/loadSafe.tsx index af8fb4bc..54e9d904 100644 --- a/src/dataDisplay/Icon/images/loadSafe.tsx +++ b/src/dataDisplay/Icon/images/loadSafe.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/locked.tsx b/src/dataDisplay/Icon/images/locked.tsx index e65bd8bb..6b593150 100644 --- a/src/dataDisplay/Icon/images/locked.tsx +++ b/src/dataDisplay/Icon/images/locked.tsx @@ -38,5 +38,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/mobileConfirm.tsx b/src/dataDisplay/Icon/images/mobileConfirm.tsx index 3517fad9..c8e48317 100644 --- a/src/dataDisplay/Icon/images/mobileConfirm.tsx +++ b/src/dataDisplay/Icon/images/mobileConfirm.tsx @@ -38,5 +38,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/noInternet.tsx b/src/dataDisplay/Icon/images/noInternet.tsx index d574cc07..ab165541 100644 --- a/src/dataDisplay/Icon/images/noInternet.tsx +++ b/src/dataDisplay/Icon/images/noInternet.tsx @@ -38,5 +38,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/owners.tsx b/src/dataDisplay/Icon/images/owners.tsx index 4c034a49..96ac09fc 100644 --- a/src/dataDisplay/Icon/images/owners.tsx +++ b/src/dataDisplay/Icon/images/owners.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/paste.tsx b/src/dataDisplay/Icon/images/paste.tsx index 8b193430..5ad469a0 100644 --- a/src/dataDisplay/Icon/images/paste.tsx +++ b/src/dataDisplay/Icon/images/paste.tsx @@ -32,5 +32,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/paymentToken.tsx b/src/dataDisplay/Icon/images/paymentToken.tsx index 5c827b2f..d5c5882a 100644 --- a/src/dataDisplay/Icon/images/paymentToken.tsx +++ b/src/dataDisplay/Icon/images/paymentToken.tsx @@ -32,5 +32,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/privacyPolicy.tsx b/src/dataDisplay/Icon/images/privacyPolicy.tsx index c75cd60b..f5f93fbd 100644 --- a/src/dataDisplay/Icon/images/privacyPolicy.tsx +++ b/src/dataDisplay/Icon/images/privacyPolicy.tsx @@ -32,5 +32,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/qrCode.tsx b/src/dataDisplay/Icon/images/qrCode.tsx index 88a4379f..2948087d 100644 --- a/src/dataDisplay/Icon/images/qrCode.tsx +++ b/src/dataDisplay/Icon/images/qrCode.tsx @@ -82,5 +82,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/question.tsx b/src/dataDisplay/Icon/images/question.tsx index 92d9f51d..5f8e2f09 100644 --- a/src/dataDisplay/Icon/images/question.tsx +++ b/src/dataDisplay/Icon/images/question.tsx @@ -43,5 +43,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/rateApp.tsx b/src/dataDisplay/Icon/images/rateApp.tsx index 082410c2..3469ead3 100644 --- a/src/dataDisplay/Icon/images/rateApp.tsx +++ b/src/dataDisplay/Icon/images/rateApp.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/received.tsx b/src/dataDisplay/Icon/images/received.tsx index cc02dff3..a1e4783a 100644 --- a/src/dataDisplay/Icon/images/received.tsx +++ b/src/dataDisplay/Icon/images/received.tsx @@ -40,5 +40,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/recover.tsx b/src/dataDisplay/Icon/images/recover.tsx index 888d24c4..52ff33da 100644 --- a/src/dataDisplay/Icon/images/recover.tsx +++ b/src/dataDisplay/Icon/images/recover.tsx @@ -42,5 +42,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/replaceOwner.tsx b/src/dataDisplay/Icon/images/replaceOwner.tsx index 7cd19560..6a8ac1c1 100644 --- a/src/dataDisplay/Icon/images/replaceOwner.tsx +++ b/src/dataDisplay/Icon/images/replaceOwner.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/requiredConfirmations.tsx b/src/dataDisplay/Icon/images/requiredConfirmations.tsx index 0b2164c1..c4cef5a0 100644 --- a/src/dataDisplay/Icon/images/requiredConfirmations.tsx +++ b/src/dataDisplay/Icon/images/requiredConfirmations.tsx @@ -34,5 +34,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/restricted.tsx b/src/dataDisplay/Icon/images/restricted.tsx index b31f4cb5..96049bdf 100644 --- a/src/dataDisplay/Icon/images/restricted.tsx +++ b/src/dataDisplay/Icon/images/restricted.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/resync.tsx b/src/dataDisplay/Icon/images/resync.tsx index 13fdde23..61f4c598 100644 --- a/src/dataDisplay/Icon/images/resync.tsx +++ b/src/dataDisplay/Icon/images/resync.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/rocket.tsx b/src/dataDisplay/Icon/images/rocket.tsx index cc14cd89..8ce25758 100644 --- a/src/dataDisplay/Icon/images/rocket.tsx +++ b/src/dataDisplay/Icon/images/rocket.tsx @@ -32,5 +32,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/scan.tsx b/src/dataDisplay/Icon/images/scan.tsx index 655d10c2..5ed956e1 100644 --- a/src/dataDisplay/Icon/images/scan.tsx +++ b/src/dataDisplay/Icon/images/scan.tsx @@ -31,8 +31,15 @@ export default { fillRule="nonzero" d="M22 4v4c0 .552-.448 1-1 1s-1-.448-1-1V4h-4c-.552 0-1-.448-1-1s.448-1 1-1h4c1.105 0 2 .895 2 2zM4 4v4c0 .552-.448 1-1 1s-1-.448-1-1V4c0-1.105.895-2 2-2h4c.552 0 1 .448 1 1s-.448 1-1 1H4zM20 20v-4c0-.552.448-1 1-1s1 .448 1 1v4c0 1.105-.895 2-2 2h-4c-.552 0-1-.448-1-1s.448-1 1-1h4zM4 20h4c.552 0 1 .448 1 1s-.448 1-1 1H4c-1.105 0-2-.895-2-2v-4c0-.552.448-1 1-1s1 .448 1 1v4z" /> - + - ) + ), }; diff --git a/src/dataDisplay/Icon/images/search.tsx b/src/dataDisplay/Icon/images/search.tsx index 3b28d871..635edd84 100644 --- a/src/dataDisplay/Icon/images/search.tsx +++ b/src/dataDisplay/Icon/images/search.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/sendAgain.tsx b/src/dataDisplay/Icon/images/sendAgain.tsx index f5074f75..28830885 100644 --- a/src/dataDisplay/Icon/images/sendAgain.tsx +++ b/src/dataDisplay/Icon/images/sendAgain.tsx @@ -42,5 +42,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/sent.tsx b/src/dataDisplay/Icon/images/sent.tsx index 41f8c3e7..af16196d 100644 --- a/src/dataDisplay/Icon/images/sent.tsx +++ b/src/dataDisplay/Icon/images/sent.tsx @@ -40,5 +40,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/serverError.tsx b/src/dataDisplay/Icon/images/serverError.tsx index 365d6538..3593c258 100644 --- a/src/dataDisplay/Icon/images/serverError.tsx +++ b/src/dataDisplay/Icon/images/serverError.tsx @@ -11,10 +11,12 @@ export default { + d="M2 13h10v-2H2v2zm0-5.997h3.213c.21.74.567 1.418 1.043 1.996H2V7.003zm0-4h3.604c-.312.61-.515 1.282-.579 1.997H2V3.003zM14 5.5C14 7.43 12.43 9 10.5 9S7 7.43 7 5.5 8.57 2 10.5 2 14 3.57 14 5.5zm2 0C16 2.462 13.538 0 10.5 0 9.323 0 8.235.373 7.34 1.003H2c-1.105 0-2 .894-2 2v2c0 .365.106.703.277.998-.171.295-.277.633-.277 1v2c0 .365.106.703.277.998-.171.296-.277.634-.277 1v2c0 1.104.895 2 2 2h10c1.104 0 2-.896 2-2v-2c0-.366-.105-.704-.277-1 .013-.022.019-.049.031-.072C15.114 8.927 16 7.318 16 5.5z" + /> + d="M10.5 4.482l1.018-1.02c.281-.28.737-.28 1.018 0 .283.283.283.739 0 1.02L11.52 5.5l1.017 1.018c.281.28.281.737 0 1.019-.282.28-.738.28-1.019 0L10.5 6.518l-1.018 1.02c-.281.28-.738.28-1.018 0-.281-.282-.281-.738 0-1.02L9.48 5.502 8.462 4.48c-.281-.28-.281-.736 0-1.018.28-.281.737-.281 1.019 0L10.5 4.482z" + /> ), @@ -28,11 +30,13 @@ export default { + d="M17.99 18.996c0 .551-.448 1-1 1H4c-.552 0-1-.449-1-1v-2c0-.546.44-.988.983-.997l.017.002h12.99l.017-.002c.543.01.983.451.983.997v2zM3 11.001c0-.552.448-1 1-1h4.151c.318 1.565 1.13 2.948 2.258 3.995H4l-.017.001c-.543-.009-.983-.45-.983-.996v-2zm0-5.995c0-.552.448-1 1-1h5.506C8.66 5.134 8.124 6.506 8.026 8H4c-.552 0-1-.449-1-1V5.006zM21 8.5c0 3.032-2.467 5.5-5.5 5.5-3.032 0-5.5-2.468-5.5-5.5C10 5.467 12.468 3 15.5 3 18.533 3 21 5.467 21 8.5zm2 0C23 4.357 19.642 1 15.5 1c-1.364 0-2.639.37-3.74 1.006H4c-1.657 0-3 1.343-3 3V7c0 .772.3 1.47.78 2.001-.48.531-.78 1.228-.78 2.001v2c0 .77.3 1.466.776 1.997C1.3 15.53 1 16.225 1 16.996v2c0 1.656 1.343 3 3 3h12.99c1.657 0 3-1.344 3-3v-2c0-.768-.296-1.459-.77-1.989C21.475 13.714 23 11.287 23 8.5z" + /> + d="M15.5 7.086l1.414-1.414c.391-.391 1.024-.391 1.414 0 .391.391.391 1.023 0 1.414L16.914 8.5l1.414 1.414c.391.39.391 1.024 0 1.414-.39.391-1.023.391-1.414 0L15.5 9.914l-1.413 1.414c-.391.391-1.025.391-1.415 0-.391-.39-.391-1.024 0-1.414L14.086 8.5l-1.414-1.414c-.391-.391-.391-1.023 0-1.414.39-.391 1.024-.391 1.415 0L15.5 7.086z" + /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/settings.tsx b/src/dataDisplay/Icon/images/settings.tsx index 2a5ecf35..c128e880 100644 --- a/src/dataDisplay/Icon/images/settings.tsx +++ b/src/dataDisplay/Icon/images/settings.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/settingsChange.tsx b/src/dataDisplay/Icon/images/settingsChange.tsx index 22058335..892a79a3 100644 --- a/src/dataDisplay/Icon/images/settingsChange.tsx +++ b/src/dataDisplay/Icon/images/settingsChange.tsx @@ -40,5 +40,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/settingsTool.tsx b/src/dataDisplay/Icon/images/settingsTool.tsx index e124f17f..4acb8284 100644 --- a/src/dataDisplay/Icon/images/settingsTool.tsx +++ b/src/dataDisplay/Icon/images/settingsTool.tsx @@ -32,5 +32,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/share.tsx b/src/dataDisplay/Icon/images/share.tsx index abe3454d..1a25a687 100644 --- a/src/dataDisplay/Icon/images/share.tsx +++ b/src/dataDisplay/Icon/images/share.tsx @@ -31,5 +31,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/termsOfUse.tsx b/src/dataDisplay/Icon/images/termsOfUse.tsx index 4ce60f15..a6e15dd3 100644 --- a/src/dataDisplay/Icon/images/termsOfUse.tsx +++ b/src/dataDisplay/Icon/images/termsOfUse.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/transactionsInactive.tsx b/src/dataDisplay/Icon/images/transactionsInactive.tsx index 9544eb3e..0841ad81 100644 --- a/src/dataDisplay/Icon/images/transactionsInactive.tsx +++ b/src/dataDisplay/Icon/images/transactionsInactive.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/unlocked.tsx b/src/dataDisplay/Icon/images/unlocked.tsx index 50247af4..7a4b853a 100644 --- a/src/dataDisplay/Icon/images/unlocked.tsx +++ b/src/dataDisplay/Icon/images/unlocked.tsx @@ -38,5 +38,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/userEdit.tsx b/src/dataDisplay/Icon/images/userEdit.tsx index 655a2a2d..2de38503 100644 --- a/src/dataDisplay/Icon/images/userEdit.tsx +++ b/src/dataDisplay/Icon/images/userEdit.tsx @@ -30,5 +30,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/images/wallet.tsx b/src/dataDisplay/Icon/images/wallet.tsx index 990ac946..b2f82f78 100644 --- a/src/dataDisplay/Icon/images/wallet.tsx +++ b/src/dataDisplay/Icon/images/wallet.tsx @@ -32,5 +32,5 @@ export default { /> - ) + ), }; diff --git a/src/dataDisplay/Icon/index.tsx b/src/dataDisplay/Icon/index.tsx index 17f8b1e8..b4fddea0 100644 --- a/src/dataDisplay/Icon/index.tsx +++ b/src/dataDisplay/Icon/index.tsx @@ -1,5 +1,7 @@ import React from 'react'; import styled from 'styled-components'; +import Tooltip from '@material-ui/core/Tooltip'; +import { withStyles } from '@material-ui/core/styles'; import add from './images/add'; import addressBook from './images/addressBook'; @@ -68,16 +70,26 @@ import transactionsInactive from './images/transactionsInactive'; import unlocked from './images/unlocked'; import userEdit from './images/userEdit'; import wallet from './images/wallet'; +import { rgba } from 'polished'; -import { Theme } from '../../theme'; +import theme, { Theme, ThemeColors, ThemeIconSize } from '../../theme'; -const StyledIcon = styled.span` +const StyledIcon = styled.span<{ color?: ThemeColors }>` .icon-color { fill: ${({ theme, color }) => color ? theme.colors[color] : theme.colors.icon}; } `; +const StyledTooltip = withStyles(() => ({ + tooltip: { + backgroundColor: theme.colors.overlay.color, + border: `1px solid ${theme.colors.icon}`, + boxShadow: `1px 2px 4px ${rgba(theme.colors.shadow.color, 0.08)}`, + color: theme.colors.text, + }, +}))(Tooltip); + const icons = { add, addressBook, @@ -149,19 +161,39 @@ const icons = { }; export type IconType = typeof icons; +export type IconTypes = keyof IconType; type Props = { - type: keyof IconType; - color?: keyof Theme['colors']; - size: keyof Theme['icons']['size']; + type: IconTypes; + size: ThemeIconSize; + color?: ThemeColors; + tooltip?: string; + className?: string; }; /** * The `Icon` renders an icon, it can be one already defined specified by * the type props or custom one using the customUrl. */ -function Icon({ type, size, color }: Props) { - return {icons[type][size]}; -} +const Icon = ({ + type, + size, + color, + tooltip, + className, +}: Props): React.ReactElement => { + const IconElement = ( + + {icons[type][size]} + + ); + return tooltip === undefined ? ( + IconElement + ) : ( + + {IconElement} + + ); +}; export default Icon; diff --git a/src/dataDisplay/IconText/index.stories.tsx b/src/dataDisplay/IconText/index.stories.tsx index 5e0860af..a162f722 100644 --- a/src/dataDisplay/IconText/index.stories.tsx +++ b/src/dataDisplay/IconText/index.stories.tsx @@ -6,13 +6,11 @@ export default { title: 'Data Display/Icon Text', component: IconText, parameters: { - componentSubtitle: 'IconText, It combines both Icon and Text component.' - } + componentSubtitle: 'IconText, It combines both Icon and Text component.', + }, }; -//export const title = () => Title LG; - -export const sizes = () => { +export const Sizes = (): React.ReactElement => { return ( <> diff --git a/src/dataDisplay/IconText/index.tsx b/src/dataDisplay/IconText/index.tsx index 26cb76b2..7aee7b5e 100644 --- a/src/dataDisplay/IconText/index.tsx +++ b/src/dataDisplay/IconText/index.tsx @@ -1,15 +1,15 @@ import React from 'react'; import styled from 'styled-components'; -import { Theme } from '../../theme'; +import { ThemeColors, ThemeIconSize, ThemeTextSize } from '../../theme'; import Icon, { IconType } from '../Icon'; import Text from '../Text'; type Props = { iconType: keyof IconType; - iconSize: keyof Theme['icons']['size']; - textSize: keyof Theme['text']['size']; - color?: keyof Theme['colors']; + iconSize: ThemeIconSize; + textSize: ThemeTextSize; + color?: ThemeColors; text: string; className?: string; }; @@ -32,7 +32,7 @@ const IconText = ({ iconType, text, color, - className + className, }: Props): React.ReactElement => ( diff --git a/src/dataDisplay/Layout/index.tsx b/src/dataDisplay/Layout/index.tsx index b6be356d..3c8b5078 100644 --- a/src/dataDisplay/Layout/index.tsx +++ b/src/dataDisplay/Layout/index.tsx @@ -11,45 +11,44 @@ const Container = styled.div` grid-template-rows: 50px auto 60px; grid-gap: 10px; grid-template-areas: - "title title" - "navbar body" - "footer footer"; + 'title title' + 'navbar body' + 'footer footer'; - @media(max-width: 400px) { + @media (max-width: 400px) { grid-template-columns: 1fr; grid-template-rows: 50px auto 1fr; grid-template-areas: - "title" - "navbar" - "body" - "footer"; + 'title' + 'navbar' + 'body' + 'footer'; } `; const Title = styled.div` - background: rgb(137, 180, 206); - grid-area: title; + background: rgb(137, 180, 206); + grid-area: title; `; const Navbar = styled.div` - background: rgb(139, 131, 127); - grid-area: navbar; + background: rgb(139, 131, 127); + grid-area: navbar; `; const Body = styled.div` - background: rgb(193, 197, 197); - grid-area: body; + background: rgb(193, 197, 197); + grid-area: body; `; const Footer = styled.div` - background: rgb(158, 158, 158); - grid-area: footer; + background: rgb(158, 158, 158); + grid-area: footer; `; - -const Layout = () => ( +const Layout = (): React.ReactElement => ( - Title - Navbar - Body -
footer
+ Title + Navbar + Body +
footer
); diff --git a/src/dataDisplay/Layout/layout.stories.tsx b/src/dataDisplay/Layout/layout.stories.tsx index 899c6bff..0318e062 100644 --- a/src/dataDisplay/Layout/layout.stories.tsx +++ b/src/dataDisplay/Layout/layout.stories.tsx @@ -1,13 +1,13 @@ -import React from "react"; +import React from 'react'; -import Layout from "./index"; +import Layout from './index'; export default { - title: "Data Display/Layout", + title: 'Data Display/Layout', component: Layout, parameters: { - componentSubtitle: "It provides a custom layout used in Safe Multisig" - } + componentSubtitle: 'It provides a custom layout used in Safe Multisig', + }, }; -export const layout = () => ; +export const SimpleLayout = (): React.ReactElement => ; diff --git a/src/dataDisplay/Section/index.tsx b/src/dataDisplay/Section/index.tsx index 915e7639..949152b3 100644 --- a/src/dataDisplay/Section/index.tsx +++ b/src/dataDisplay/Section/index.tsx @@ -1,5 +1,5 @@ -import React from "react"; -import styled from "styled-components"; +import React from 'react'; +import styled from 'styled-components'; const StyledSection = styled.div` /* border: 1px solid #e8e7e6; @@ -10,13 +10,13 @@ const StyledSection = styled.div` `; type Props = { - children: any; + children: React.ReactNode; }; /** * Use `Section` to highlight/group content. */ -const Section = ({ children }: Props) => ( +const Section = ({ children }: Props): React.ReactElement => ( {children} ); diff --git a/src/dataDisplay/Table/index.tsx b/src/dataDisplay/Table/index.tsx new file mode 100644 index 00000000..015a847f --- /dev/null +++ b/src/dataDisplay/Table/index.tsx @@ -0,0 +1,186 @@ +import React from 'react'; +import TableMui from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableSortLabel from '@material-ui/core/TableSortLabel'; +import TableCell from '@material-ui/core/TableCell'; +import TableContainer from '@material-ui/core/TableContainer'; +import TableHead from '@material-ui/core/TableHead'; +import TableRow from '@material-ui/core/TableRow'; +import Paper from '@material-ui/core/Paper'; +import Box from '@material-ui/core/Box'; +import Collapse from '@material-ui/core/Collapse'; + +//import styled from 'styled-components'; + +import { FixedIcon } from '../..'; + +// const TextTHead = styled(Text)` +// text-transform: uppercase; +// `; + +// const StyledTableCell = styled(TableCell)` +// border-bottom: 2px solid ${({ theme }) => theme.colors.separator} !important; +// `; + +export enum TableAlignment { + left = 'left', + right = 'right', + center = 'center', +} + +export enum TableSortDirection { + asc = 'asc', + desc = 'desc', +} + +export type TableHeader = { + id: string; + alignment?: TableAlignment; + label: string; +}; + +type RowCells = { + id?: string; + alignment?: TableAlignment; + content: React.ReactNode; +}; + +export type TableRow = { + id: string; + collapsibleContent?: React.ReactNode; + cells: RowCells[]; +}; + +type Props = { + rows: TableRow[]; + headers?: TableHeader[]; + isCollapsible?: boolean; + className?: string; + selectedRowIds?: Set; + sortedByHeaderId?: string; + sortDirection?: TableSortDirection; + onHeaderClick?: (id: string) => void; + onRowClick?: (id: string) => void; +}; + +const getHeaders = ( + headers: TableHeader[], + isCollapsible: boolean +): TableHeader[] => { + if (!isCollapsible) { + return headers; + } + + return [ + ...headers, + { + id: 'chevron', + label: '', + }, + ]; +}; + +const getRowCells = ( + cells: RowCells[], + isSelected: boolean, + isCollapsible: boolean +): RowCells[] => { + if (!isCollapsible) { + return cells; + } + + return [ + ...cells, + { + alignment: TableAlignment.center, + content: isSelected ? ( + + ) : ( + + ), + }, + ]; +}; + +export const Table = ({ + rows, + headers, + isCollapsible = false, + className, + selectedRowIds = new Set(), + sortedByHeaderId, + sortDirection, + onRowClick = () => undefined, + onHeaderClick = () => undefined, +}: Props): React.ReactElement => ( + + + {/* HEADER CELLS */} + {headers && ( + + + {getHeaders(headers || [], isCollapsible).map((header) => ( + + onHeaderClick(header.id)}> + {header.label} + + + ))} + + + )} + + {/* TABLE BODY */} + + {rows.map((row) => { + const rowCells = getRowCells( + row.cells, + selectedRowIds.has(row.id), + isCollapsible + ); + + return ( + <> + onRowClick(row.id)}> + {rowCells.map((c, index) => { + return ( + + {c.content} + + ); + })} + + + {/* Collapsible content */} + {isCollapsible && ( + + + + {row.collapsibleContent} + + + + )} + + ); + })} + + + +); diff --git a/src/dataDisplay/Table/table.stories.tsx b/src/dataDisplay/Table/table.stories.tsx new file mode 100644 index 00000000..4991180b --- /dev/null +++ b/src/dataDisplay/Table/table.stories.tsx @@ -0,0 +1,140 @@ +import React, { useState } from 'react'; + +import { Table, TableAlignment, TableSortDirection } from './index'; +import { Icon } from '../../'; + +export default { + title: 'Data Display/Table', + component: Table, + parameters: { + componentSubtitle: + 'Used for tabular information. It allows sorting by a single column.', + }, +}; + +const headerCells = [ + { + id: 'col1', + label: 'col1', + }, + { + id: 'col2', + alignment: TableAlignment.right, + label: 'col2', + }, + { + id: 'col3', + alignment: TableAlignment.right, + label: 'col3', + }, +]; + +const rows = [ + { + id: '1', + collapsibleContent:
content 1
, + cells: [ + { + content: , + }, + { + content: 1, + alignment: TableAlignment.right, + }, + { + content: 'safe', + alignment: TableAlignment.right, + }, + ], + }, + { + id: '2', + collapsibleContent:
content 2
, + cells: [ + { + content: , + }, + { + content: 2, + alignment: TableAlignment.right, + }, + { + content: 'gnosis', + alignment: TableAlignment.right, + }, + ], + }, +]; + +export const SimpleTable = (): React.ReactElement => ( + +); + +export const WithoutHeader = (): React.ReactElement =>
; + +export const Sortable = (): React.ReactElement => { + const [sortedByHeaderId, setSortedByHeaderId] = useState( + 'col2' + ); + const [sortDirection, setSortDirection] = useState( + TableSortDirection.asc + ); + + const onHeaderClick = (headerId: string) => { + if (!['col2'].includes(headerId)) { + return; + } + + const newDirection = + sortedByHeaderId === headerId && sortDirection === TableSortDirection.asc + ? TableSortDirection.desc + : TableSortDirection.asc; + + setSortDirection(newDirection); + setSortedByHeaderId(headerId); + }; + + const getSortedRows = () => { + const cp = [...rows]; + return cp.sort((a, b) => { + return sortDirection === TableSortDirection.asc + ? Number(a.cells[1].content) - Number(b.cells[1].content) + : Number(b.cells[1].content) - Number(a.cells[1].content); + }); + }; + + return ( +
+ ); +}; + +export const Collapsible = (): React.ReactElement => { + const [selectedRowIds, setSelectedRowIds] = useState>(new Set()); + + const onRowClick = (rowId: string) => { + const cp = new Set(selectedRowIds); + if (cp.has(rowId)) { + cp.delete(rowId); + } else { + cp.add(rowId); + } + setSelectedRowIds(cp); + }; + + return ( +
+ ); +}; diff --git a/src/dataDisplay/Text/index.tsx b/src/dataDisplay/Text/index.tsx index 24e94273..bebaaf82 100644 --- a/src/dataDisplay/Text/index.tsx +++ b/src/dataDisplay/Text/index.tsx @@ -1,18 +1,25 @@ import React from 'react'; import styled from 'styled-components'; +import Tooltip from '@material-ui/core/Tooltip'; +import { withStyles } from '@material-ui/core/styles'; +import { rgba } from 'polished'; -import { Theme } from '../../theme'; +import theme, { ThemeTextSize, ThemeColors } from '../../theme'; type Props = { - children: any; - size: keyof Theme['text']['size']; - color?: keyof Theme['colors']; + children: React.ReactNode; + size: ThemeTextSize; + color?: ThemeColors; strong?: boolean; center?: boolean; + tooltip?: string; + className?: string; }; const StyledText = styled.p` font-family: 'Averta'; + display: ${({ tooltip }) => + tooltip === undefined ? 'inline-block' : 'block'}; color: ${({ color, theme }) => color ? theme.colors[color] : theme.colors.text}; margin: 0; @@ -22,8 +29,28 @@ const StyledText = styled.p` text-align: ${({ center }) => (center ? 'center' : 'start')}; `; -const Text = ({ children, ...rest }: Props) => ( - {children} -); +const StyledTooltip = withStyles(() => ({ + tooltip: { + backgroundColor: theme.colors.white, + color: theme.colors.text, + boxShadow: `0px 0px 10px ${rgba(theme.colors.shadow.color, 0.2)}`, + }, + arrow: { + color: theme.colors.white, + boxShadow: `0px 0px 10px ${rgba(theme.colors.shadow.color, 0.2)}`, + }, +}))(Tooltip); + +const Text = ({ children, tooltip, ...rest }: Props): React.ReactElement => { + const TextElement = {children}; + + return tooltip === undefined ? ( + TextElement + ) : ( + + {TextElement} + + ); +}; export default Text; diff --git a/src/dataDisplay/Text/text.stories.tsx b/src/dataDisplay/Text/text.stories.tsx index dcf5f711..77b654e9 100644 --- a/src/dataDisplay/Text/text.stories.tsx +++ b/src/dataDisplay/Text/text.stories.tsx @@ -1,31 +1,33 @@ -import React from "react"; +import React from 'react'; -import Text from "./index"; +import Text from './index'; export default { - title: "Data Display/Text", + title: 'Data Display/Text', component: Text, parameters: { - componentSubtitle: "Text component, it allows several configurations" - } + componentSubtitle: 'Text component, it allows several configurations', + }, }; -export const text = () => Some Text...; +export const SimpleTexttext = (): React.ReactElement => ( + Some Text... +); -export const bold = () => ( +export const Bold = (): React.ReactElement => ( Some Text... ); -export const centered = () => ( +export const Centered = (): React.ReactElement => ( Some Text... ); -export const customSize = () => ( - <> +export const CustomSize = (): React.ReactElement => ( + <> Some Text... Some Text... Some Text... @@ -33,8 +35,14 @@ export const customSize = () => ( ); -export const color = () => ( - <> - Some Text... - +export const CustomColor = (): React.ReactElement => ( + + Some Text... + +); + +export const WithTooltip = (): React.ReactElement => ( + + Some Text... + ); diff --git a/src/dataDisplay/Title/index.tsx b/src/dataDisplay/Title/index.tsx index f75e12d3..fe776c18 100644 --- a/src/dataDisplay/Title/index.tsx +++ b/src/dataDisplay/Title/index.tsx @@ -1,11 +1,11 @@ import React from 'react'; import styled from 'styled-components'; -import { Theme } from '../../theme'; +import { ThemeTitleSize } from '../../theme'; type Props = { children: string; - size: keyof Theme['title']['size']; + size: ThemeTitleSize; withoutMargin?: boolean; }; @@ -49,7 +49,12 @@ const StyledH5 = styled.h5<{ withoutMargin?: boolean }>` margin: ${({ withoutMargin }) => (withoutMargin ? 0 : '18px')} 0; `; -const Title = ({ children, size, withoutMargin, ...rest }: Props) => { +const Title = ({ + children, + size, + withoutMargin, + ...rest +}: Props): React.ReactElement => { switch (size) { case 'xl': { return ( diff --git a/src/dataDisplay/Title/title.stories.tsx b/src/dataDisplay/Title/title.stories.tsx index 959edf1e..aabd4b3e 100644 --- a/src/dataDisplay/Title/title.stories.tsx +++ b/src/dataDisplay/Title/title.stories.tsx @@ -6,13 +6,15 @@ export default { title: 'Data Display/Title', component: Title, parameters: { - componentSubtitle: 'Title Component.' - } + componentSubtitle: 'Title Component.', + }, }; -export const title = () => Title LG; +export const SimpleTitle = (): React.ReactElement => ( + Title LG +); -export const sizes = () => { +export const WithSizes = (): React.ReactElement => { return ( <> Title XL diff --git a/src/dataDisplay/index.ts b/src/dataDisplay/index.ts index 2f27a0f3..42c2b3cd 100644 --- a/src/dataDisplay/index.ts +++ b/src/dataDisplay/index.ts @@ -5,6 +5,7 @@ export { default as FixedDialog } from './FixedDialog'; export { default as Icon } from './Icon'; export { default as IconText } from './IconText'; export { default as Layout } from './Layout'; +export * from './Table'; export { default as Text } from './Text'; export { default as Title } from './Title'; export { default as Section } from './Section'; diff --git a/src/feedback/Loader/index.tsx b/src/feedback/Loader/index.tsx index cf6249e2..ab130391 100644 --- a/src/feedback/Loader/index.tsx +++ b/src/feedback/Loader/index.tsx @@ -2,24 +2,26 @@ import React from 'react'; import styled from 'styled-components'; import CircularProgress from '@material-ui/core/CircularProgress'; -import theme, { Theme } from '../../theme'; - -const Wrapper = styled.div` - display: flex; - height: 100%; - width: 100%; - justify-content: center; - align-items: center; -`; +import theme, { ThemeLoaderSize, ThemeColors } from '../../theme'; type Props = { - size: keyof Theme['loader']['size']; + size: ThemeLoaderSize; + color?: ThemeColors; + className?: string; }; -const Loader = ({ size }: Props) => ( - - - +const StyledCircularProgress = styled( + ({ size, className }: Props): React.ReactElement => ( + + ) +)` + &.MuiCircularProgress-colorPrimary { + color: ${({ theme, color = 'primary' }) => theme.colors[color]}; + } +`; + +const Loader = ({ className, size, color }: Props): React.ReactElement => ( + ); export default Loader; diff --git a/src/feedback/Loader/loader.stories.tsx b/src/feedback/Loader/loader.stories.tsx index 0f5f98d1..d2e7fe41 100644 --- a/src/feedback/Loader/loader.stories.tsx +++ b/src/feedback/Loader/loader.stories.tsx @@ -1,16 +1,16 @@ -import React from "react"; +import React from 'react'; -import Loader from "./index"; +import Loader from './index'; export default { - title: "Feedback/Loader", + title: 'Feedback/Loader', component: Loader, parameters: { - componentSubtitle: "Loader component" - } + componentSubtitle: 'Loader component', + }, }; -export const loader = () => ( +export const loader = (): React.ReactElement => ( <> @@ -18,3 +18,7 @@ export const loader = () => ( ); + +export const withColor = (): React.ReactElement => ( + +); diff --git a/src/feedback/StatusDot/index.stories.tsx b/src/feedback/StatusDot/index.stories.tsx new file mode 100644 index 00000000..df7fdf52 --- /dev/null +++ b/src/feedback/StatusDot/index.stories.tsx @@ -0,0 +1,17 @@ +import React from 'react'; + +import StatusDot from './index'; + +export default { + title: 'Feedback/StatusDot', + component: StatusDot, + parameters: {}, +}; + +export const SimpleStatusDot = (): React.ReactElement => ( + <> + +
+ + +); diff --git a/src/feedback/StatusDot/index.tsx b/src/feedback/StatusDot/index.tsx new file mode 100644 index 00000000..89df6b8a --- /dev/null +++ b/src/feedback/StatusDot/index.tsx @@ -0,0 +1,23 @@ +import * as React from 'react'; + +import styled from 'styled-components'; +import { ThemeColors, ThemeStatusDotSize } from '../../theme'; + +type Props = { + color: ThemeColors; + size: ThemeStatusDotSize; + className?: string; +}; + +const StyledDot = styled.div` + border-radius: 50%; + background-color: ${({ theme, color }) => theme.colors[color]}; + height: ${({ theme, size }) => theme.statusDot.size[size]}; + width: ${({ theme, size }) => theme.statusDot.size[size]}; +`; + +const StatusDot = (props: Props): React.ReactElement => ( + +); + +export default StatusDot; diff --git a/src/feedback/index.ts b/src/feedback/index.ts index 84c801d8..1fa0f34e 100644 --- a/src/feedback/index.ts +++ b/src/feedback/index.ts @@ -1 +1 @@ -export { default as Loader } from './Loader' +export { default as Loader } from './Loader'; diff --git a/src/inputs/Button/button.stories.tsx b/src/inputs/Button/button.stories.tsx index 6b638748..1a157c83 100644 --- a/src/inputs/Button/button.stories.tsx +++ b/src/inputs/Button/button.stories.tsx @@ -6,11 +6,11 @@ export default { title: 'Inputs/Button', component: Button, parameters: { - componentSubtitle: 'Button component with several variants' - } + componentSubtitle: 'Button component with several variants', + }, }; -export const button = () => ( +export const SimpleButton = (): React.ReactElement => ( <>