diff --git a/src/components/button/button.css b/src/components/button/button.css index 9ce746c52140b73be1ba889fae9c028ab7cfe2bb..9ba2fbd93b4b48dd489f6249e2cafd8abcfc2eec 100644 --- a/src/components/button/button.css +++ b/src/components/button/button.css @@ -11,10 +11,17 @@ } .icon { - margin-right: .5rem; height: 1.5rem; } +[dir="ltr"] .icon { + margin-right: .5rem; +} + +[dir="rtl"] .icon { + margin-left: .5rem; +} + .content { white-space: nowrap; } diff --git a/src/components/camera-modal/camera-modal.css b/src/components/camera-modal/camera-modal.css index 4ea962fbafd68bc7ecdf3736d96930070a46f0de..7522fbb2ec286f0491d62d1fd6a67a7ebb5b2ed4 100644 --- a/src/components/camera-modal/camera-modal.css +++ b/src/components/camera-modal/camera-modal.css @@ -135,6 +135,10 @@ $main-button-size: 2.75rem; color: $ui-white; } +[dir="rtl"] .retake-button img { + transform: scaleX(-1); +} + @keyframes flash { 0% { opacity: 1; } 100% { opacity: 0; } diff --git a/src/components/camera-modal/camera-modal.jsx b/src/components/camera-modal/camera-modal.jsx index 5e18661b7009e9e125689d4f1a1e38bf0f58351a..8c499c3624922e7d84ac1b00e75cf8f9205c29c0 100644 --- a/src/components/camera-modal/camera-modal.jsx +++ b/src/components/camera-modal/camera-modal.jsx @@ -79,7 +79,7 @@ const CameraModal = ({intl, ...props}) => ( {props.capture ? <Box className={styles.buttonRow}> <button - className={styles.cancelButton} + className={styles.retakeButton} key="retake-button" onClick={props.onBack} > diff --git a/src/components/filter/filter.css b/src/components/filter/filter.css index b67e60795c29a100c7e67982b8dafeb8bb46c28b..fffef4812eca008d8d3e3dc30c9a540e75192eef 100644 --- a/src/components/filter/filter.css +++ b/src/components/filter/filter.css @@ -18,13 +18,22 @@ .filter-icon { position: absolute; top: 0; - left: 0; height: 1rem; width: 1rem; +} + +[dir="ltr"] .filter-icon { + left: 0; margin: 0.75rem 0.75rem 0.75rem 1rem; } +[dir="rtl"] .filter-icon { + right: 0; + margin: 0.75rem 1rem 0.75rem 0.75rem; + transform: scaleX(-1); +} + .filter:focus-within { box-shadow: 0 0 0 .25rem $motion-transparent; } @@ -36,7 +45,6 @@ opacity: 0; position: absolute; top: 0; - right: 0; display: flex; justify-content: center; @@ -53,6 +61,14 @@ transition: opacity 0.05s linear; } +[dir="ltr"] .x-icon-wrapper { + right: 0; +} + +[dir="rtl"] .x-icon-wrapper { + left: 0; +} + /* Shown state */ @@ -96,13 +112,27 @@ font-size: 0.75rem; letter-spacing: 0.15px; cursor: text; +} + +[dir="ltr"] .filter-input { padding: .625rem 2rem .625rem 3rem; } +[dir="rtl"] .filter-input { + padding: .625rem 3rem .625rem 2rem; +} + .filter-input::placeholder { opacity: .5; - padding: 0 0 0 0.25rem; color: $text-primary; font-size: 0.875rem; letter-spacing: 0.15px; } + +[dir="ltr"] .filter-input::placeholder { + padding: 0 0 0 0.25rem; +} + +[dir="rtl"] .filter-input::placeholder { + padding: 0 0.25rem 0 0; +} diff --git a/src/components/modal/modal.css b/src/components/modal/modal.css index be410bd85aa610d92d2b9bb1b81a86006a2a1b8f..e36e472ede5c9117e25520f2119dcb96b4a164bf 100644 --- a/src/components/modal/modal.css +++ b/src/components/modal/modal.css @@ -110,11 +110,11 @@ $sides: 20rem; margin: 0 0 0 -$sides; } -[dir="ltr"] .full-screen .header-item-title { +.full-screen [dir="ltr"] .header-item-title { margin: 0 0 0 -$sides; } -[dir="rtl"] .full-screen .header-item-title { +.full-screen [dir="rtl"] .header-item-title { margin: 0 -$sides 0 0; } diff --git a/src/components/record-modal/playback-step.jsx b/src/components/record-modal/playback-step.jsx index 40167172deac8f7167c88d2046b89a92d5162886..8f76b506f33e8e38c00869c0a2d06bf6f6fcc471 100644 --- a/src/components/record-modal/playback-step.jsx +++ b/src/components/record-modal/playback-step.jsx @@ -87,7 +87,7 @@ const PlaybackStep = props => ( </Box> <Box className={styles.buttonRow}> <button - className={styles.cancelButton} + className={styles.rerecordButton} onClick={props.onBack} > <img diff --git a/src/components/record-modal/record-modal.css b/src/components/record-modal/record-modal.css index 79ce9c606a995d69642eabc76b064ba06cc50aa1..ae9d8afcc0d0b2d8b5235b7c86b30c5fa3bb15b6 100644 --- a/src/components/record-modal/record-modal.css +++ b/src/components/record-modal/record-modal.css @@ -118,3 +118,7 @@ opacity: 0.2; transition: 0.1s; } + +[dir="rtl"] .rerecord-button img { + transform: scaleX(-1); +} diff --git a/src/containers/custom-procedures.jsx b/src/containers/custom-procedures.jsx index 879800aae880313299ab53601e6a1f9f0f667d54..525422720a8324b69d47ccad362943f7f8a6e988 100644 --- a/src/containers/custom-procedures.jsx +++ b/src/containers/custom-procedures.jsx @@ -32,7 +32,8 @@ class CustomProcedures extends React.Component { this.blocks = blocksRef; const workspaceConfig = defaultsDeep({}, CustomProcedures.defaultOptions, - this.props.options + this.props.options, + {rtl: this.props.isRtl} ); // @todo This is a hack to make there be no toolbox. @@ -117,6 +118,7 @@ class CustomProcedures extends React.Component { } CustomProcedures.propTypes = { + isRtl: PropTypes.bool, mutator: PropTypes.instanceOf(Element), onRequestClose: PropTypes.func.isRequired, options: PropTypes.shape({ @@ -147,6 +149,7 @@ CustomProcedures.defaultProps = { }; const mapStateToProps = state => ({ + isRtl: state.locales.isRtl, mutator: state.scratchGui.customProcedures.mutator });