diff --git a/packages/ui/package.json b/packages/ui/package.json index bb6a607fc3f0a84555219b47a7758d471c7e749f..a9719ebd1984a174ad8a14bca94ac6579fbb716d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -25,7 +25,7 @@ "recompose": "^0.26.0", "redux": "^3.6.0", "redux-form": "^7.0.3", - "styled-components": "^3.1.4" + "styled-components": "^2.4.0" }, "devDependencies": { "@pubsweet/styleguide": "^1.0.0", @@ -39,6 +39,7 @@ "file-loader": "^1.1.5", "identity-obj-proxy": "^3.0.0", "jest": "^22.1.4", + "jest-styled-components": "^4.10.0", "node-sass": "^4.5.3", "react-styleguidist": "^6.0.8", "react-test-renderer": "^16.2.0", diff --git a/packages/ui/src/atoms/ValidatedField.js b/packages/ui/src/atoms/ValidatedField.js index 379accfcf98dbe0dbf5613f9bf08deadcdb4b875..b44af74a8d1e9a882cf0152c30ecc4e6d42fb79b 100644 --- a/packages/ui/src/atoms/ValidatedField.js +++ b/packages/ui/src/atoms/ValidatedField.js @@ -1,30 +1,44 @@ import React from 'react' import { compose, withHandlers } from 'recompose' -import classnames from 'classnames' import { Field } from 'redux-form' -import classes from './ValidatedField.local.scss' +import styled from 'styled-components' // TODO: pass ...props.input to children automatically? +const MessageWrapper = styled.div` + font-family: var(--font-author); + display: inline-block; + font-style: italic; + margin-left: 1em; + margin-top: 10px; +` + +const Message = styled.div` + &:not(:last-child) { + margin-bottom: 10px; + } + font-size: 0.9em; + letter-spacing: 0.01em; +` + +const ErrorMessage = Message.extend` + color: var(--color-danger); +` + +const WarningMessage = Message.extend` + color: var(--color-warning); +` + const ValidatedFieldComponent = ({ component }) => ({ meta, input }) => ( <div> {component(input)} {meta.touched && (meta.error || meta.warning) && ( - <div className={classes.messages}> - {meta.error && ( - <div className={classnames(classes.message, classes.error)}> - {meta.error} - </div> - )} - - {meta.warning && ( - <div className={classnames(classes.message, classes.warning)}> - {meta.warning} - </div> - )} - </div> + <MessageWrapper> + {meta.error && <ErrorMessage>{meta.error}</ErrorMessage>} + {meta.warning && <WarningMessage>{meta.warning}</WarningMessage>} + </MessageWrapper> )} </div> ) diff --git a/packages/ui/src/atoms/ValidatedField.local.scss b/packages/ui/src/atoms/ValidatedField.local.scss deleted file mode 100644 index 3ba44df3b8f9ad4dc2fabec0743c8b7040960b3b..0000000000000000000000000000000000000000 --- a/packages/ui/src/atoms/ValidatedField.local.scss +++ /dev/null @@ -1,28 +0,0 @@ -.root { - font-family: var(--font-author); -} - -.messages { - display: inline-block; - font-style: italic; - margin-left: 1em; - margin-top: 10px; -} - -.message:not(:last-child) { - margin-bottom: 10px; -} - -.error, -.warning { - font-size: 0.9em; - letter-spacing: 0.01em; -} - -.error { - color: var(--color-danger); -} - -.warning { - color: var(--color-warning); -} diff --git a/yarn.lock b/yarn.lock index aa68f82daf2dbe3c82162fe4d82e5e0f1d70e93d..57f4f6b44dcaff30cf9dbda428ca7fc850c67526 100644 --- a/yarn.lock +++ b/yarn.lock @@ -720,6 +720,10 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +atob@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" + attempt-x@^1.1.0, attempt-x@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/attempt-x/-/attempt-x-1.1.1.tgz#fba64e96ce03c3e0bd92c92622061c4df387cb76" @@ -2763,6 +2767,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-react-class@^15.6.0: + version "15.6.3" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -2862,6 +2874,15 @@ css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" +css@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" + dependencies: + inherits "^2.0.1" + source-map "^0.1.38" + source-map-resolve "^0.3.0" + urix "^0.1.0" + cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" @@ -6329,6 +6350,12 @@ jest-snapshot@^22.1.2: natural-compare "^1.4.0" pretty-format "^22.1.0" +jest-styled-components@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-4.10.0.tgz#6fcd83208fefc4ceb87b79b55d44697a05d226a8" + dependencies: + css "^2.2.1" + jest-util@^22.1.4: version "22.1.4" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.1.4.tgz#ac8cbd43ee654102f1941f3f0e9d1d789a8b6a9b" @@ -9188,6 +9215,42 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" +pubsweet-client@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/pubsweet-client/-/pubsweet-client-1.1.4.tgz#9b4ea16bd25d305d7e3392aa45c0db8865471611" + dependencies: + authsome "0.0.9" + config "^1.21.0" + event-source-polyfill "^0.0.10" + global "^4.3.1" + isomorphic-fetch "^2.1.1" + lint-staged "^6.0.0" + lodash "^4.0.0" + prop-types "^15.5.8" + pubsweet-component-login "^0.6.0" + react "^15.4.4" + react-css-themr "^2.1.2" + react-redux "^5.0.2" + react-router-dom "^4.2.2" + react-router-redux next + redux "^3.6.0" + redux-form "^7.0.3" + redux-logger "^3.0.1" + redux-thunk "^2.2.0" + reselect "^3.0.1" + +pubsweet-component-blog@^0.3.1: + version "0.3.5" + resolved "https://registry.yarnpkg.com/pubsweet-component-blog/-/pubsweet-component-blog-0.3.5.tgz#3af228868a9bf255414711e0f18e6dd12d455d0e" + dependencies: + prop-types "^15.5.10" + pubsweet-component-manage "^0.2.2" + react-bootstrap "^0.31.3" + react-redux "^5.0.6" + react-router-bootstrap "^0.24.4" + react-router-dom "^4.2.2" + redux "^3.7.2" + pubsweet-component-form-group@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/pubsweet-component-form-group/-/pubsweet-component-form-group-0.1.6.tgz#020fcb45967abafeb113bed3deefc39cb34e7f60" @@ -9197,6 +9260,15 @@ pubsweet-component-form-group@0.1.6: pubsweet-server "^1.0.4" react-bootstrap "^0.31.3" +pubsweet-component-form-group@^0.1.5: + version "0.1.10" + resolved "https://registry.yarnpkg.com/pubsweet-component-form-group/-/pubsweet-component-form-group-0.1.10.tgz#5639d1c427b51da0c34772f202f2090ad38eedac" + dependencies: + joi-browser "^13.0.1" + prop-types "^15.5.10" + pubsweet-server "^1.1.0" + react-bootstrap "^0.31.3" + pubsweet-component-login@^0.5.2: version "0.5.7" resolved "https://registry.yarnpkg.com/pubsweet-component-login/-/pubsweet-component-login-0.5.7.tgz#10cac6a2d907bc9eda5be355d29b38499c87422f" @@ -9208,6 +9280,36 @@ pubsweet-component-login@^0.5.2: react-router-redux "^4.0.8" redux "^3.7.2" +pubsweet-component-login@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pubsweet-component-login/-/pubsweet-component-login-0.6.0.tgz#4f5ee6ca096b8b8651d50c9798957a694e42c6d2" + dependencies: + prop-types "^15.5.10" + react-bootstrap "^0.31.3" + react-redux "^5.0.6" + react-router-dom "^4.2.2" + react-router-redux "^4.0.8" + redux "^3.7.2" + redux-form "^7.0.3" + +pubsweet-component-navigation@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/pubsweet-component-navigation/-/pubsweet-component-navigation-0.3.2.tgz#c4f3d2d61ce61ce116215c4fc700afa665285a72" + dependencies: + prop-types "^15.5.10" + react-bootstrap "^0.31.3" + react-router-bootstrap "^0.24.4" + react-router-dom "^4.2.2" + +pubsweet-component-password-reset-frontend@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/pubsweet-component-password-reset-frontend/-/pubsweet-component-password-reset-frontend-0.2.3.tgz#801e0a49a45fb04890ef993d3f372009f5c472e6" + dependencies: + prop-types "^15.5.10" + query-string "^5.0.0" + react-bootstrap "^0.31.3" + react-router "^4.2.0" + pubsweet-component-posts-manager@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/pubsweet-component-posts-manager/-/pubsweet-component-posts-manager-0.6.5.tgz#d35ac7f74bf198d652ff81e9a790ea006ec3719c" @@ -9231,6 +9333,26 @@ pubsweet-component-signup@^0.4.0: react-router "^4.2.0" redux "^3.7.2" +pubsweet-component-teams-manager@^0.3.0: + version "0.3.2" + resolved "https://registry.yarnpkg.com/pubsweet-component-teams-manager/-/pubsweet-component-teams-manager-0.3.2.tgz#78d3b1d79c8daed31033361e06d0844d1f1abbe7" + dependencies: + prop-types "^15.5.10" + react-bootstrap "^0.31.3" + react-dom "^15.6.1" + react-redux "^5.0.6" + react-select "^1.0.0-rc.10" + redux "^3.7.2" + +pubsweet-component-users-manager@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/pubsweet-component-users-manager/-/pubsweet-component-users-manager-0.2.3.tgz#8cad081f405f5428a3e4d27a4d0ad77763ce0a2f" + dependencies: + prop-types "^15.5.10" + react-bootstrap "^0.31.3" + react-redux "^5.0.6" + redux "^3.7.2" + pump@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" @@ -9416,6 +9538,13 @@ react-codemirror2@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/react-codemirror2/-/react-codemirror2-2.0.2.tgz#68b2ae8923174a2b3d8b6fe905d0fd3c91d97d97" +react-css-themr@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/react-css-themr/-/react-css-themr-2.1.2.tgz#e017514e471c232f43a754a55b49d81faf5dafb8" + dependencies: + hoist-non-react-statics "^1.2.0" + invariant "^2.2.1" + react-dev-utils@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-3.1.1.tgz#09ae7209a81384248db56547e718e65bd3b20eb5" @@ -9697,6 +9826,16 @@ react-transition-group@^2.0.0, react-transition-group@^2.2.0: prop-types "^15.5.8" warning "^3.0.0" +react@^15.4.4: + version "15.6.2" + resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" + dependencies: + create-react-class "^15.6.0" + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.10" + react@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" @@ -10330,6 +10469,10 @@ resolve-pathname@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" +resolve-url@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -10720,6 +10863,15 @@ source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" +source-map-resolve@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761" + dependencies: + atob "~1.1.0" + resolve-url "~0.2.1" + source-map-url "~0.3.0" + urix "~0.1.0" + source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" @@ -10738,10 +10890,20 @@ source-map-support@^0.5.1: dependencies: source-map "^0.6.0" +source-map-url@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" + source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" +source-map@^0.1.38: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + source-map@^0.4.2, source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -11068,6 +11230,19 @@ style-search@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" +styled-components@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-2.4.0.tgz#086d0fd483d54638837fca3ea546a030b94adf75" + dependencies: + buffer "^5.0.3" + css-to-react-native "^2.0.3" + fbjs "^0.8.9" + hoist-non-react-statics "^1.2.0" + is-plain-object "^2.0.1" + prop-types "^15.5.4" + stylis "^3.4.0" + supports-color "^3.2.3" + styled-components@^3.1.4: version "3.1.4" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-3.1.4.tgz#1bdc1409c9bacafee3510c573d23b73039b0d875" @@ -11882,6 +12057,10 @@ upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" +urix@^0.1.0, urix@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + url-loader@^0.5.9: version "0.5.9" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.9.tgz#cc8fea82c7b906e7777019250869e569e995c295"