Merge branch 'develop' of https://github.com/vector-im/riot-web into rxl881/appTileStyling
|  | @ -1,6 +1,10 @@ | |||
| { | ||||
|     "default_hs_url": "https://matrix.org", | ||||
|     "default_is_url": "https://vector.im", | ||||
|     "disable_custom_urls": false, | ||||
|     "disable_guests": false, | ||||
|     "disable_login_language_selector": false, | ||||
|     "disable_3pid_login": false, | ||||
|     "brand": "Riot", | ||||
|     "integrations_ui_url": "https://scalar.vector.im/", | ||||
|     "integrations_rest_url": "https://scalar.vector.im/api", | ||||
|  | @ -10,6 +14,8 @@ | |||
|         "feature_pinning": "labs" | ||||
|     }, | ||||
|     "default_federate": true, | ||||
|     "welcomePageUrl": "home.html", | ||||
|     "default_theme": "light", | ||||
|     "roomDirectory": { | ||||
|         "servers": [ | ||||
|             "matrix.org" | ||||
|  |  | |||
|  | @ -0,0 +1,68 @@ | |||
| == Skinning refactor == | ||||
| 
 | ||||
| matrix-react-sdk | ||||
|   - base images | ||||
|   - base CSS | ||||
|   - all the components needed to build a workable app (including the top layer) | ||||
| 
 | ||||
| riot-web: the riot skin | ||||
|   - riot-specific classes (e.g. login header/footer) | ||||
|   - riot-specific themes | ||||
|     - light | ||||
|     - dark | ||||
| 
 | ||||
| i.e. the only things which should go into riot-web are bits which apply vector-specific skinning | ||||
| specifically "Stuff that any other brand would not want to use. (e.g. riot logos, links, T&Cs)" | ||||
|  - Questions: | ||||
|    - Electron app?  (should probably be a separate repo in its own right?  but might as well go here for now) | ||||
|    - index.html & index.js?  (should be in matrix-react-sdk, given the SDK is useless without them?) | ||||
| 
 | ||||
| ideally matrix-react-sdk itself should ship with a default skin which actually works built in. | ||||
| 
 | ||||
| status skin (can go in the same app for now) | ||||
|   - has status theme | ||||
|     - which inherits from riot light theme | ||||
|     - how do we share graphics between skins? | ||||
|       - shove them into react-sdk, or... | ||||
|       - guess we do ../../vector/img  | ||||
|       - this means keeping the skin name in the images (unless /img is a shortcut to the right skin's images) | ||||
| 
 | ||||
| out of scope: | ||||
|   - making the components more independent, so they can be used in isolation. | ||||
|   - that said, the bits which should probably be used by being embeded into a different app: | ||||
|     - login/reg | ||||
|     - RoomView + RoomSettings | ||||
|     - MessageComposer | ||||
|     - RoomList | ||||
|     - MemberList | ||||
|     - MemberInfo | ||||
|     - Voip UI | ||||
|     - UserSettings | ||||
|   - sharing different js-sdks between the different isolated modules | ||||
| 
 | ||||
| other changes: | ||||
|   - how do we handle i18n? | ||||
|     - each skin should really be its own i18n project.  As long as all the commonality stuff is in matrix-react-sdk this shouldn't be too bad. | ||||
|   - ability to associate components with a given skin | ||||
|     - skins/vector/src <-- components | ||||
|     - skins/vector/css | ||||
|     - skins/vector/img | ||||
|     - skins/vector/fonts | ||||
|   - gather together themes (per skin) into a single place too | ||||
|     - skins/vector/themes/foo/css | ||||
|     - skins/vector/themes/foo/img | ||||
|     - skins/vector/themes/foo/fonts | ||||
|   - ideally riot-web would contain almost nothing but skins/vector directory.  | ||||
|   - ability to entirely replace CSS rather than override it for a given theme | ||||
|     - e.g. if we replace `Login.js` with `StatusLogin.js`, then we should similarly be able to replace `_Login.scss` with `_StatusLogin.scss`. | ||||
| 
 | ||||
| random thoughts; | ||||
|    - should we be able to change the entire skin at runtime (more like wordpress) - to the extent of replacing entire components? | ||||
|      - might pose security issues if a theme can be swapped out to replace MatrixChat or other fundamental functionality at runtime | ||||
|    - if so, perhaps skins & themes should converge... | ||||
| 
 | ||||
| ----------------- | ||||
| 
 | ||||
| Immediate plan for Status: | ||||
|  * Implement it as a theme for the riot skin | ||||
|  * Ideally move skins to a sensible level (possibly even including src?) | ||||
|  | @ -0,0 +1,192 @@ | |||
| <style type="text/css"> | ||||
| 
 | ||||
| /* we deliberately inline style here to avoid flash-of-CSS problems, and to avoid | ||||
|  * voodoo where we have to set display: none by default | ||||
|  */ | ||||
| 
 | ||||
| .mx_HomePage_container { | ||||
|     text-align: center; | ||||
|     display: block ! important; | ||||
|     width: 690px; | ||||
|     margin: 20px; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_header { | ||||
|     margin-top: 37px; | ||||
|     margin-left: 10px; | ||||
|     width: 670px; | ||||
|     box-sizing: border-box; | ||||
|     font-size: 18px; | ||||
|     background-color: #fff; | ||||
|     box-shadow: 0px 2px 10px 0px rgba(48,55,81,0.05); | ||||
|     border-radius: 5px; | ||||
|     padding: 20px 80px 20px 80px; | ||||
|     align-items: center; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_header h1 { | ||||
|     font-size: 29px; | ||||
|     margin-bottom: 10px; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_intro h2 { | ||||
|     margin-top: 32px; | ||||
|     font-size: 25px; | ||||
|     color: #49555F; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_intro { | ||||
|     margin: auto; | ||||
|     width: 600px; | ||||
|     margin-top: 40px; | ||||
|     margin-bottom: 40px; | ||||
|     font-size: 18px; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_coc { | ||||
|     font-size: 16px; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_coc a { | ||||
|     color: #4360DF; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_room, .mx_HomePage_telegram { | ||||
|     float: left; | ||||
|     background-color: #fff; | ||||
|     box-shadow: 0px 2px 10px 0px rgba(48,55,81,0.05); | ||||
|     border-radius: 5px; | ||||
|     margin: 10px; | ||||
|     width: 210px; | ||||
|     height: 250px; | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     align-items: center; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_telegram { | ||||
|     background-color: transparent; | ||||
|     border: 1px solid rgba(113, 129, 142, 0.2); | ||||
|     box-shadow: none; | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
|     flex-direction: column; | ||||
|     font-size: 16px; | ||||
|     line-height: 25px; | ||||
|     box-sizing: border-box; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_telegram a { | ||||
|     text-transform: uppercase; | ||||
|     color: #4360DF; | ||||
|     font-size: 13px; | ||||
|     font-family: PostGrotesk-Medium, Arial, Helvetica, Sans-Serif; | ||||
|     font-weight: 600; | ||||
|     opacity: 1.0; | ||||
|     transition: opacity .2s ease; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_telegram a:hover { | ||||
|     opacity: 0.5; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_room .mx_HomePage_icon { | ||||
|     margin-top: 24px; | ||||
|     margin-bottom: 16px; | ||||
|     width: 50px; | ||||
|     height: 50px; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_room .mx_HomePage_name { | ||||
|     display: block; | ||||
|     font-family: PostGrotesk-Medium, Arial, Helvetica, Sans-Serif; | ||||
|     font-weight: 600; | ||||
|     font-size: 15px; | ||||
|     color: #49555F; | ||||
|     line-height: 25px; | ||||
|     margin: 0px 12px 0px 12px; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_room .mx_HomePage_desc { | ||||
|     flex: 1; | ||||
|     display: block; | ||||
|     margin: 0px 12px 0px 12px; | ||||
|     font-size: 14px; | ||||
|     line-height: 20px; | ||||
| } | ||||
| 
 | ||||
| .mx_HomePage_button { | ||||
|     align-self: normal; | ||||
|     margin: 12px; | ||||
|     border-radius: 8px; | ||||
|     border: 1px solid rgba(199, 206, 209, 0.12); | ||||
|     background-color: #6CC1F6; | ||||
|     font-size: 13px; | ||||
|     font-family: PostGrotesk-Medium, Arial, Helvetica, Sans-Serif; | ||||
|     font-weight: 600; | ||||
|     text-transform: uppercase; | ||||
|     letter-spacing: 1px; | ||||
|     color: #fff ! important; | ||||
|     cursor: pointer; | ||||
|     outline: none; | ||||
|     padding: 14px; | ||||
|     box-sizing: border-box; | ||||
|     padding-left: 1.5em; | ||||
|     padding-right: 1.5em; | ||||
| } | ||||
| 
 | ||||
| </style> | ||||
| 
 | ||||
| <div class="mx_HomePage_container"> | ||||
|     <div class="mx_HomePage_header"> | ||||
|         <div> | ||||
|             <h1>Welcome to Status Community Chat, powered by Riot.</h1> | ||||
|             <p>For contributors, developers and Ethereum-enthusiasts who care about the movement for decentralization.</p> | ||||
|         </div> | ||||
|     </div> | ||||
| 
 | ||||
|     <div class="mx_HomePage_intro"> | ||||
|         <h2>Our rooms</h2> | ||||
|         <p>Please abide by the channels discussion categories and remain on topic to the specific category details listed.</p> | ||||
|         <p class="mx_HomePage_coc">Before posting please refer to our <a href="https://wiki.status.im/Code_of_conduct">Code of Conduct</a></p> | ||||
|     </div> | ||||
| 
 | ||||
| 
 | ||||
|     <div class="mx_HomePage_room"> | ||||
|         <img class="mx_HomePage_icon" src="themes/status/img/a.png"> | ||||
|         <span class="mx_HomePage_name">#announcements</span> | ||||
|         <span class="mx_HomePage_desc">Company wide announcements.</span> | ||||
|         <a class="mx_HomePage_button" href="#/room/#announcements:status.im">Join</a> | ||||
|     </div> | ||||
|     <div class="mx_HomePage_room"> | ||||
|         <img class="mx_HomePage_icon" src="themes/status/img/i.png"> | ||||
|         <span class="mx_HomePage_name">#introductions</span> | ||||
|         <span class="mx_HomePage_desc">Newcomer introductions.</span> | ||||
|         <a class="mx_HomePage_button" href="#/room/#introductions:status.im">Join</a> | ||||
|     </div> | ||||
|     <div class="mx_HomePage_room"> | ||||
|         <img class="mx_HomePage_icon" src="themes/status/img/g.png"> | ||||
|         <span class="mx_HomePage_name">#general</span> | ||||
|         <span class="mx_HomePage_desc">General discussions of Status.</span> | ||||
|         <a class="mx_HomePage_button" href="#/room/#general:status.im">Join</a> | ||||
|     </div> | ||||
|     <div class="mx_HomePage_room"> | ||||
|         <img class="mx_HomePage_icon" src="themes/status/img/d.png"> | ||||
|         <span class="mx_HomePage_name">#dev-status</span> | ||||
|         <span class="mx_HomePage_desc">Contributing to our codebase? Building a DApp or a chatbot? We're here to help.</span> | ||||
|         <a class="mx_HomePage_button" href="#/room/#dev-status:status.im">Join</a> | ||||
|     </div> | ||||
|     <div class="mx_HomePage_room"> | ||||
|         <img class="mx_HomePage_icon" src="themes/status/img/n.png"> | ||||
|         <span class="mx_HomePage_name">#news-articles</span> | ||||
|         <span class="mx_HomePage_desc">Share news, articles related to Ethereum or projects you're excited about</span> | ||||
|         <a class="mx_HomePage_button" href="#/room/#news-articles:status.im">Join</a> | ||||
|     </div> | ||||
|     <div class="mx_HomePage_telegram"> | ||||
|         <p> | ||||
|             Interested in market and cryptocurrency type discussions? | ||||
|         </p> | ||||
|         <a href="https://t.me/StatusNetworkChat">Join Telegram</a> | ||||
|     </div> | ||||
| </div> | ||||
|  | @ -42,10 +42,11 @@ const INCLUDE_LANGS = [ | |||
| const COPY_LIST = [ | ||||
|     ["res/manifest.json", "webapp"], | ||||
|     ["res/home.html", "webapp"], | ||||
|     ["res/home-status.html", "webapp"], | ||||
|     ["res/home/**", "webapp/home"], | ||||
|     ["res/{media,vector-icons}/**", "webapp"], | ||||
|     ["res/flags/*", "webapp/flags/"], | ||||
|     ["src/skins/vector/{fonts,img}/**", "webapp"], | ||||
|     ["src/skins/vector/{fonts,img,themes}/**", "webapp"], | ||||
|     ["node_modules/emojione/assets/svg/*", "webapp/emojione/svg/"], | ||||
|     ["node_modules/emojione/assets/png/*", "webapp/emojione/png/"], | ||||
|     ["./config.json", "webapp", { directwatch: 1 }], | ||||
|  |  | |||
|  | @ -42,7 +42,7 @@ export default React.createClass({ | |||
|         const QuestionDialog = sdk.getComponent('dialogs.QuestionDialog'); | ||||
|         Modal.createTrackedDialog('Display release notes', '', QuestionDialog, { | ||||
|             title: _t("What's New"), | ||||
|             description: <pre className="changelog_text">{releaseNotes}</pre>, | ||||
|             description: <div className="mx_MatrixToolbar_changelog">{releaseNotes}</div>, | ||||
|             button: _t("Update"), | ||||
|             onFinished: (update) => { | ||||
|                 if(update && PlatformPeg.get()) { | ||||
|  |  | |||
|  | @ -18,6 +18,7 @@ limitations under the License. | |||
| 
 | ||||
| var React = require('react'); | ||||
| import { _t } from 'matrix-react-sdk/lib/languageHandler'; | ||||
| import UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore'; | ||||
| 
 | ||||
| module.exports = React.createClass({ | ||||
|     displayName: 'VectorLoginFooter', | ||||
|  | @ -26,6 +27,9 @@ module.exports = React.createClass({ | |||
|     }, | ||||
| 
 | ||||
|     render: function() { | ||||
|         // FIXME: replace this with a proper Status skin
 | ||||
|         if (UserSettingsStore.getTheme() === 'status') return <div/>; | ||||
|          | ||||
|         return ( | ||||
|             <div className="mx_Login_links"> | ||||
|                 <a href="https://medium.com/@RiotChat">blog</a>  ·   | ||||
|  |  | |||
|  | @ -33,8 +33,10 @@ module.exports = React.createClass({ | |||
| 
 | ||||
|     render: function() { | ||||
|         return ( | ||||
|             <div className="mx_Login_logo"> | ||||
|                 <img src={this.props.icon || DEFAULT_LOGO_URI} alt="Riot"/> | ||||
|             <div className="mx_Login_header"> | ||||
|                 <div className="mx_Login_logo"> | ||||
|                     <img src={this.props.icon || DEFAULT_LOGO_URI} alt="Riot"/> | ||||
|                 </div> | ||||
|             </div> | ||||
|         ); | ||||
|     } | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /* | ||||
| Copyright 2015, 2016 OpenMarket Ltd | ||||
| Copyright 2017 New Vector Ltd | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| /* | ||||
| Copyright 2015, 2016 OpenMarket Ltd | ||||
| Copyright 2017 Vector Creations Ltd | ||||
| Copyright 2017 New Vector Ltd | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
|  | @ -23,12 +24,7 @@ html { | |||
| } | ||||
| 
 | ||||
| body { | ||||
|     /* Open Sans lacks combining diacritics, so these will fall through | ||||
|        to the next font.  Helevetica's diacritics however do not combine | ||||
|        nicely with Open Sans (on OSX, at least) and result in a huge | ||||
|        horizontal mess.  Arial empirically gets it right, hence prioritising | ||||
|        Arial here. */ | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     font-family: $font-family; | ||||
|     font-size: 15px; | ||||
|     background-color: $primary-bg-color; | ||||
|     color: $primary-fg-color; | ||||
|  | @ -73,7 +69,7 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus { | |||
| 
 | ||||
| /* Required by Firefox */ | ||||
| textarea { | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     font-family: $font-family; | ||||
| } | ||||
| 
 | ||||
| /* Prevent ugly dotted highlight around selected elements in Firefox */ | ||||
|  | @ -123,6 +119,19 @@ textarea { | |||
|     transition: height 120ms ease-out ! important; | ||||
| } | ||||
| 
 | ||||
| // These are magic constants which are excluded from tinting, to let themes | ||||
| // (which only have CSS, unlike skins) tell the app what their non-tinted | ||||
| // colourscheme is by inspecting the stylesheet DOM. | ||||
| // | ||||
| // They are not used for layout!! | ||||
| #mx_theme_accentColor { | ||||
|     color: $accent-color; | ||||
| } | ||||
| 
 | ||||
| #mx_theme_secondaryAccentColor { | ||||
|     color: $secondary-accent-color; | ||||
| } | ||||
| 
 | ||||
| .mx_Dialog_wrapper { | ||||
|     position: fixed; | ||||
|     z-index: 4000; | ||||
|  | @ -210,24 +219,19 @@ textarea { | |||
| } | ||||
| 
 | ||||
| .mx_Dialog button, .mx_Dialog input[type="submit"] { | ||||
|     border: 0px; | ||||
|     height: 36px; | ||||
|     border-radius: 40px; | ||||
|     border: solid 1px $accent-color; | ||||
|     font-weight: 600; | ||||
|     font-size: 14px; | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     @mixin mx_DialogButton; | ||||
|     margin-left: 0px; | ||||
|     margin-right: 8px; | ||||
|     padding-left: 1.5em; | ||||
|     padding-right: 1.5em; | ||||
|     outline: none; | ||||
|     cursor: pointer; | ||||
|     color: $accent-color; | ||||
|     background-color: $primary-bg-color; | ||||
| 
 | ||||
|     /* align images in buttons (eg spinners) */ | ||||
|     vertical-align: middle; | ||||
|     // flip colours for the secondary ones | ||||
|     font-weight: 600; | ||||
|     border: 1px solid $accent-color ! important; | ||||
|     color: $accent-color; | ||||
|     background-color: $accent-fg-color; | ||||
| } | ||||
| 
 | ||||
| .mx_Dialog button:hover, .mx_Dialog input[type="submit"]:hover { | ||||
|     @mixin mx_DialogButton_hover; | ||||
| } | ||||
| 
 | ||||
| .mx_Dialog button:focus, .mx_Dialog input[type="submit"]:focus { | ||||
|  | @ -292,26 +296,18 @@ textarea { | |||
|     color: $selection-fg-color; | ||||
| } | ||||
| 
 | ||||
| /** green button with rounded corners */ | ||||
| .mx_textButton { | ||||
|     color: $accent-fg-color; | ||||
|     background-color: $accent-color; | ||||
|     border-radius: 17px; | ||||
|     text-align: center; | ||||
|     padding-left: 1em; | ||||
|     padding-right: 1em; | ||||
|     cursor: pointer; | ||||
|     display: inline; | ||||
|     @mixin mx_DialogButton_small;     | ||||
| } | ||||
| 
 | ||||
| .mx_textButton:hover { | ||||
|     @mixin mx_DialogButton_hover; | ||||
| } | ||||
| 
 | ||||
| .mx_button_row { | ||||
|     margin-top: 69px; | ||||
| } | ||||
| 
 | ||||
| .changelog_text { | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
| } | ||||
| 
 | ||||
| .mx_Beta { | ||||
|     color: red; | ||||
|     margin-right: 10px; | ||||
|  |  | |||
|  | @ -38,7 +38,7 @@ limitations under the License. | |||
| .mx_SearchBox_search { | ||||
|     flex: 1 1 auto; | ||||
|     width: 0px; | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     font-family: $font-family; | ||||
|     font-size: 12px; | ||||
|     margin-top: -2px; | ||||
|     height: 24px; | ||||
|  |  | |||
|  | @ -64,30 +64,13 @@ limitations under the License. | |||
| } | ||||
| 
 | ||||
| .mx_UserSettings_button { | ||||
|     @mixin mx_DialogButton; | ||||
|     display: inline; | ||||
|     vertical-align: middle; | ||||
|     border: 0px; | ||||
|     border-radius: 36px; | ||||
|     font-weight: 400; | ||||
|     font-size: 16px; | ||||
|     color: $accent-fg-color; | ||||
|     background-color: $accent-color; | ||||
|     width: auto; | ||||
|     margin: auto; | ||||
|     padding: 7px; | ||||
|     padding-left: 1.5em; | ||||
|     padding-right: 1.5em; | ||||
|     cursor: pointer; | ||||
| } | ||||
| 
 | ||||
| .mx_UserSettings_button.mx_UserSettings_buttonSmall { | ||||
|     height: 36px; | ||||
|     padding: 4px; | ||||
|     padding-left: 7px; | ||||
|     padding-right: 7px; | ||||
|     font-size: 12px; | ||||
|     margin-right: 5px; | ||||
|     line-height: 12px; | ||||
| .mx_UserSettings_button:hover { | ||||
|     @mixin mx_DialogButton_hover; | ||||
| } | ||||
| 
 | ||||
| .mx_UserSettings_button.danger { | ||||
|  |  | |||
|  | @ -26,7 +26,6 @@ limitations under the License. | |||
| } | ||||
| 
 | ||||
| .mx_Login h2 { | ||||
|     color: $primary-fg-color; | ||||
|     font-weight: 300; | ||||
|     margin-top: 32px; | ||||
|     margin-bottom: 20px; | ||||
|  | @ -80,15 +79,14 @@ limitations under the License. | |||
| } | ||||
| 
 | ||||
| .mx_Login_submit { | ||||
|     @mixin mx_DialogButton; | ||||
|     width: 100%; | ||||
|     margin-top: 35px; | ||||
|     margin-bottom: 24px; | ||||
|     width: 100%; | ||||
|     border-radius: 40px; | ||||
|     height: 40px; | ||||
|     border: 0px; | ||||
|     background-color: $accent-color; | ||||
|     font-size: 15px; | ||||
|     color: $accent-fg-color; | ||||
| } | ||||
| 
 | ||||
| .mx_Login_submit:hover { | ||||
|     @mixin mx_DialogButton_hover; | ||||
| } | ||||
| 
 | ||||
| .mx_Login_submit:disabled { | ||||
|  | @ -137,8 +135,7 @@ limitations under the License. | |||
| } | ||||
| 
 | ||||
| .mx_Login_forgot { | ||||
|     font-size: 13px; | ||||
|     opacity: 0.8; | ||||
|     font-size: 15px; | ||||
| } | ||||
| 
 | ||||
| .mx_Login_forgot:link { | ||||
|  | @ -224,7 +221,6 @@ limitations under the License. | |||
|     height: 16px; | ||||
|     flex-shrink: 1; | ||||
|     min-width: 0px; | ||||
|     border-radius: 3px; | ||||
| } | ||||
| 
 | ||||
| .mx_Login_phoneNumberField { | ||||
|  |  | |||
|  | @ -31,5 +31,5 @@ limitations under the License. | |||
| .mx_BaseAvatar_image { | ||||
|     border-radius: 40px; | ||||
|     vertical-align: top; | ||||
|     background-color: #fff; | ||||
|     background-color: $avatar-bg-color; | ||||
| } | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ limitations under the License. | |||
| { | ||||
|     height: 26px; | ||||
|     font-size: 14px; | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     font-family: $font-family; | ||||
|     padding-left: 12px; | ||||
|     padding-right: 12px; | ||||
|     margin: 0 !important; | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ limitations under the License. | |||
| } | ||||
| 
 | ||||
| .mx_ConfirmUserActionDialog_reasonField { | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     font-family: $font-family; | ||||
|     font-size: 14px; | ||||
|     color: $primary-fg-color; | ||||
|     background-color: $primary-bg-color; | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ limitations under the License. | |||
|     border: solid 1px $accent-color; | ||||
|     font-weight: 600; | ||||
|     font-size: 14px; | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     font-family: $font-family; | ||||
|     margin-left: 0px; | ||||
|     margin-right: 8px; | ||||
|     padding-left: 1.5em; | ||||
|  |  | |||
|  | @ -49,7 +49,7 @@ limitations under the License. | |||
|     border: solid 1px $accent-color; | ||||
|     font-weight: 600; | ||||
|     font-size: 13px; | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     font-family: $font-family; | ||||
|     margin-left: 0px; | ||||
|     margin-right: 8px; | ||||
|     padding-left: 0.5em; | ||||
|  |  | |||
|  | @ -14,8 +14,9 @@ See the License for the specific language governing permissions and | |||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| // .mx_AppsDrawer { | ||||
| // } | ||||
| .mx_AppsDrawer { | ||||
|     margin: 5px; | ||||
| } | ||||
| 
 | ||||
| .mx_AppsContainer { | ||||
|     display: flex; | ||||
|  | @ -75,17 +76,22 @@ limitations under the License. | |||
| } | ||||
| 
 | ||||
| .mx_AppTileMenuBar { | ||||
|     // height: 15px; | ||||
|     margin: 0; | ||||
|     padding: 2px 10px; | ||||
|     // background-color: $e2e-verified-color; | ||||
|     border-bottom: 1px solid $primary-hairline-color; | ||||
|     font-size: 10px; | ||||
|     background-color: $widget-menu-bar-bg-color; | ||||
|     display: flex; | ||||
|     flex-direction: row; | ||||
|     align-items: center; | ||||
|     justify-content: space-between; | ||||
| } | ||||
| 
 | ||||
| .mx_AppTileMenuBarWidgets { | ||||
|     float: right; | ||||
|     display: flex; | ||||
|     flex-direction: row; | ||||
|     align-items: center; | ||||
| } | ||||
| .mx_AppTileMenuBarWidget { | ||||
|     // pointer-events: none; | ||||
|  | @ -102,7 +108,7 @@ limitations under the License. | |||
| } | ||||
| 
 | ||||
| .mx_AppTileMenuBarWidget:hover { | ||||
|     border: 1px solid $primary-hairline-color; | ||||
|     border: 1px solid $primary-fg-color; | ||||
|     border-radius: 2px; | ||||
| } | ||||
| 
 | ||||
|  | @ -194,8 +200,12 @@ form.mx_Custom_Widget_Form div { | |||
| 
 | ||||
| .mx_AppPermissionWarning { | ||||
|     text-align: center; | ||||
|     padding: 30px 0; | ||||
|     background-color: $primary-bg-color; | ||||
|     display: flex; | ||||
|     height: 100%; | ||||
|     flex-direction: column; | ||||
|     justify-content: center; | ||||
|     align-items: center; | ||||
| } | ||||
| 
 | ||||
| .mx_AppPermissionWarningImage { | ||||
|  |  | |||
|  | @ -156,18 +156,17 @@ limitations under the License. | |||
| .mx_EventTile_redacted .mx_EventTile_line .mx_UnknownBody { | ||||
|     display: block; | ||||
|     width: 100%; | ||||
|     height: 36px; | ||||
|     background-image: $event-redacted-img; | ||||
|     background-repeat: no-repeat; | ||||
|     background-size: contain; | ||||
| } | ||||
| 
 | ||||
| .mx_EventTile.mx_EventTile_redacted .mx_EventTile_line { | ||||
|     /* | ||||
|        Prevent changing colour of the background because | ||||
|        $event-redacted-img matches $primary-bg-color | ||||
|     */ | ||||
|     background-color: initial !important; | ||||
|     height: 22px; | ||||
|     width: 250px; | ||||
|     border-radius: 11px; | ||||
|     background: repeating-linear-gradient( | ||||
|         -45deg, | ||||
|         $event-redacted-fg-color, | ||||
|         $event-redacted-fg-color 3px, | ||||
|         transparent 3px, | ||||
|         transparent 6px | ||||
|     ); | ||||
|     box-shadow: 0px 0px 3px $event-redacted-border-color inset; | ||||
| } | ||||
| 
 | ||||
| .mx_EventTile_highlight, | ||||
|  |  | |||
|  | @ -26,19 +26,15 @@ limitations under the License. | |||
| } | ||||
| 
 | ||||
| .mx_MemberDeviceInfo_textButton { | ||||
|     color: $accent-fg-color; | ||||
|     background-color: $accent-color; | ||||
|     border-radius: 17px; | ||||
|     text-align: center; | ||||
|     padding-left: 1em; | ||||
|     padding-right: 1em; | ||||
|     border: 0px; | ||||
|     font-size: 14px; | ||||
|     cursor: pointer; | ||||
|     @mixin mx_DialogButton_small; | ||||
|     margin: 2px; | ||||
|     flex: 1; | ||||
| } | ||||
| 
 | ||||
| .mx_MemberDeviceInfo_textButton:hover { | ||||
|     @mixin mx_DialogButton_hover; | ||||
| } | ||||
| 
 | ||||
| .mx_MemberDeviceInfo_deviceId { | ||||
|     font-size: 13px; | ||||
| } | ||||
|  |  | |||
|  | @ -49,7 +49,7 @@ limitations under the License. | |||
| .mx_MemberList_query, | ||||
| .mx_GroupMemberList_query, | ||||
| .mx_GroupRoomList_query { | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     font-family: $font-family; | ||||
|     border-radius: 3px; | ||||
|     border: 1px solid $input-border-color; | ||||
|     padding: 9px; | ||||
|  |  | |||
|  | @ -55,9 +55,11 @@ limitations under the License. | |||
| .mx_MessageComposer_noperm_error { | ||||
|     width: 100%; | ||||
|     height: 60px; | ||||
|     text-align: center; | ||||
|     font-style: italic; | ||||
|     color: $greyed-fg-color; | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
| } | ||||
| 
 | ||||
| .mx_MessageComposer_input_wrapper { | ||||
|  | @ -138,7 +140,7 @@ limitations under the License. | |||
|     max-height: 120px; | ||||
|     overflow: auto; | ||||
|     /* needed for FF */ | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     font-family: $font-family; | ||||
| } | ||||
| 
 | ||||
| /* hack for FF as vertical alignment of custom placeholder text is broken */ | ||||
|  | @ -175,6 +177,8 @@ limitations under the License. | |||
| .mx_MessageComposer_formatting { | ||||
|     cursor: pointer; | ||||
|     margin: 0 11px; | ||||
|     width: 24px; | ||||
|     height: 18px; | ||||
| } | ||||
| 
 | ||||
| .mx_MessageComposer_formatbar_wrapper { | ||||
|  |  | |||
|  | @ -42,22 +42,14 @@ limitations under the License. | |||
| } | ||||
| 
 | ||||
| .mx_RoomHeader_textButton { | ||||
|     height: 36px; | ||||
|     background-color: $accent-color; | ||||
|     border-radius: 36px; | ||||
|     @mixin mx_DialogButton; | ||||
|     margin-right: 8px; | ||||
|     color: $accent-fg-color; | ||||
|     line-height: 34px; | ||||
|     margin-top: -2px; | ||||
|     text-align: center; | ||||
|     margin-top: -5px; | ||||
|     order: 2; | ||||
|     cursor: pointer; | ||||
| } | ||||
| 
 | ||||
| /* | ||||
|     flex: 0 0 90px; | ||||
| */ | ||||
|     padding-left: 12px; | ||||
|     padding-right: 12px; | ||||
| .mx_RoomHeader_textButton:hover { | ||||
|     @mixin mx_DialogButton_hover; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomHeader_textButton_danger { | ||||
|  |  | |||
|  | @ -50,10 +50,11 @@ limitations under the License. | |||
|     color: $primary-fg-color; | ||||
|     background-color: $droptarget-bg-color; | ||||
|     border-radius: 4px; | ||||
|     line-height: 16px; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomList_emptySubListTip .mx_RoleButton { | ||||
|     vertical-align: -3px; | ||||
|     vertical-align: -2px; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomList_headerButtons { | ||||
|  |  | |||
|  | @ -22,18 +22,16 @@ limitations under the License. | |||
| 
 | ||||
| .mx_RoomSettings_leaveButton, | ||||
| .mx_RoomSettings_unbanButton { | ||||
|     @mixin mx_DialogButton; | ||||
|     position: relative; | ||||
|     height: 36px; | ||||
|     background-color: $accent-color; | ||||
|     border-radius: 36px; | ||||
|     margin-right: 8px; | ||||
|     color: $accent-fg-color; | ||||
|     line-height: 34px; | ||||
|     text-align: center; | ||||
|     cursor: pointer; | ||||
|     padding-left: 12px; | ||||
|     padding-right: 12px; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomSettings_leaveButton:hover, | ||||
| .mx_RoomSettings_unbanButton:hover { | ||||
|     @mixin mx_DialogButton_hover; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomSettings_integrationsButton_error { | ||||
|     position: relative; | ||||
|     cursor: not-allowed; | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ limitations under the License. | |||
| } | ||||
| 
 | ||||
| .mx_SearchableEntityList_query { | ||||
|     font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
|     font-family: $font-family; | ||||
|     border-radius: 3px; | ||||
|     border: 1px solid $input-border-color; | ||||
|     padding: 9px; | ||||
|  |  | |||
|  | @ -1,3 +1,9 @@ | |||
| /* Open Sans lacks combining diacritics, so these will fall through | ||||
|    to the next font.  Helevetica's diacritics however do not combine | ||||
|    nicely with Open Sans (on OSX, at least) and result in a huge | ||||
|    horizontal mess.  Arial empirically gets it right, hence prioritising | ||||
|    Arial here. */ | ||||
| $font-family: 'Open Sans', Arial, Helvetica, Sans-Serif; | ||||
| 
 | ||||
| // typical text (dark-on-white in light skin) | ||||
| $primary-fg-color: #454545; | ||||
|  | @ -65,6 +71,7 @@ $menu-border-color: rgba(187, 187, 187, 0.5); | |||
| $menu-bg-color: #f6f6f6; | ||||
| 
 | ||||
| $avatar-initial-color: #ffffff; | ||||
| $avatar-bg-color: #ffffff; | ||||
| 
 | ||||
| $h3-color: #3d3b39; | ||||
| 
 | ||||
|  | @ -98,6 +105,9 @@ $roomtile-focused-bg-color: rgba(255, 255, 255, 0.9); | |||
| 
 | ||||
| $roomsublist-label-fg-color: $h3-color; | ||||
| $roomsublist-label-bg-color: #d3efe1; | ||||
| $roomsublist-chevron-color: $accent-color; | ||||
| 
 | ||||
| $panel-divider-color: rgba(118, 207, 166, 0.2); | ||||
| 
 | ||||
| // ******************** | ||||
| 
 | ||||
|  | @ -111,7 +121,8 @@ $event-sending-color: #ddd; | |||
| $event-notsent-color: #f44; | ||||
| 
 | ||||
| // event redaction | ||||
| $event-redacted-img: url('../../img/redacted.jpg'); | ||||
| $event-redacted-fg-color: #e2e2e2; | ||||
| $event-redacted-border-color: #cccccc; | ||||
| 
 | ||||
| // event timestamp | ||||
| $event-timestamp-color: #acacac; | ||||
|  | @ -131,3 +142,31 @@ $lightbox-border-color: #ffffff; | |||
| 
 | ||||
| // unused? | ||||
| $progressbar-color: #000; | ||||
| 
 | ||||
| // ***** Mixins! ***** | ||||
| 
 | ||||
| @define-mixin mx_DialogButton { | ||||
|     /* align images in buttons (eg spinners) */ | ||||
|     vertical-align: middle; | ||||
|     border: 0px; | ||||
|     border-radius: 36px; | ||||
|     font-family: $font-family; | ||||
|     font-size: 14px; | ||||
|     color: $accent-fg-color; | ||||
|     background-color: $accent-color; | ||||
|     width: auto; | ||||
|     padding: 7px; | ||||
|     padding-left: 1.5em; | ||||
|     padding-right: 1.5em; | ||||
|     cursor: pointer; | ||||
|     display: inline-block; | ||||
| } | ||||
| 
 | ||||
| @define-mixin mx_DialogButton_hover { | ||||
| } | ||||
| 
 | ||||
| @define-mixin mx_DialogButton_small { | ||||
|     @mixin mx_DialogButton; | ||||
|     font-size: 15px; | ||||
|     padding: 0px 1.5em 0px 1.5em; | ||||
| } | ||||
|  |  | |||
|  | @ -30,6 +30,13 @@ $preview-bar-bg-color: #333; | |||
| // left-panel style muted accent color | ||||
| $secondary-accent-color: $primary-bg-color; | ||||
| 
 | ||||
| // stop the tinter trying to change the secondary accent color | ||||
| // by overriding the key to something untintable | ||||
| // XXX: this is a bit of a hack. | ||||
| #mx_theme_secondaryAccentColor { | ||||
|     color: #2d2d2e ! important; // deliberately off by one | ||||
| } | ||||
| 
 | ||||
| // used by RoomDirectory permissions | ||||
| $plinth-bg-color: #474747; | ||||
| 
 | ||||
|  | @ -60,6 +67,7 @@ $menu-border-color: rgba(187, 187, 187, 0.5); | |||
| $menu-bg-color: #373737; | ||||
| 
 | ||||
| $avatar-initial-color: #2d2d2d; | ||||
| $avatar-bg-color: #ffffff; | ||||
| 
 | ||||
| $h3-color: $primary-fg-color; | ||||
| 
 | ||||
|  | @ -92,6 +100,9 @@ $roomtile-focused-bg-color: rgba(255, 255, 255, 0.2); | |||
| 
 | ||||
| $roomsublist-label-fg-color: $h3-color; | ||||
| $roomsublist-label-bg-color: #454545; | ||||
| $roomsublist-chevron-color: $accent-color; | ||||
| 
 | ||||
| $panel-divider-color: rgba(118, 207, 166, 0.2); | ||||
| 
 | ||||
| // ******************** | ||||
| 
 | ||||
|  | @ -105,7 +116,8 @@ $event-sending-color: #888; | |||
| $event-notsent-color: #f44; | ||||
| 
 | ||||
| // event redaction | ||||
| $event-redacted-img: url('../../img/redacted-dark.jpg'); | ||||
| $event-redacted-fg-color: #606060; | ||||
| $event-redacted-border-color: #000000; | ||||
| 
 | ||||
| // event timestamp | ||||
| $event-timestamp-color: #acacac; | ||||
|  |  | |||
|  | @ -49,7 +49,7 @@ limitations under the License. | |||
| .mx_LeftPanel .mx_BottomLeftMenu { | ||||
|     order: 3; | ||||
| 
 | ||||
|     border-top: 1px solid rgba(118, 207, 166, 0.2); | ||||
|     border-top: 1px solid $panel-divider-color; | ||||
|     margin-left: 16px; /* gutter */ | ||||
|     margin-right: 16px; /* gutter */ | ||||
|     flex: 0 0 60px; | ||||
|  |  | |||
|  | @ -129,7 +129,7 @@ limitations under the License. | |||
|     height: 0; | ||||
|     border-left: 5px solid transparent; | ||||
|     border-right: 5px solid transparent; | ||||
|     border-top: 6px solid $accent-color; | ||||
|     border-top: 6px solid $roomsublist-chevron-color; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomSubList_chevronUp { | ||||
|  | @ -137,14 +137,14 @@ limitations under the License. | |||
|     height: 0; | ||||
|     border-left: 5px solid transparent; | ||||
|     border-right: 5px solid transparent; | ||||
|     border-bottom: 6px solid $accent-color; | ||||
|     border-bottom: 6px solid $roomsublist-chevron-color; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomSubList_chevronRight { | ||||
|     width: 0; | ||||
|     height: 0; | ||||
|     border-top: 5px solid transparent; | ||||
|     border-left: 6px solid $accent-color; | ||||
|     border-left: 6px solid $roomsublist-chevron-color; | ||||
|     border-bottom: 5px solid transparent; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -56,3 +56,7 @@ limitations under the License. | |||
| .mx_MatrixToolbar_action { | ||||
|     margin-right: 16px; | ||||
| } | ||||
| 
 | ||||
| .mx_MatrixToolbar_changelog { | ||||
|     white-space: pre; | ||||
| } | ||||
|  | @ -1,18 +1,21 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <svg width="24px" height="18px" viewBox="0 0 24 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | ||||
|     <!-- Generator: sketchtool 39 (31667) - http://www.bohemiancoding.com/sketch --> | ||||
|     <title>F69CBF5F-0BEC-47E8-B1DF-125D6376C0C9</title> | ||||
|     <desc>Created with sketchtool.</desc> | ||||
|     <defs></defs> | ||||
|     <g id="Screens-revised" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | ||||
|         <g id="02_x-Chat-text-input-" transform="translate(-829.000000, -729.000000)"> | ||||
|             <g id="button_text_formatting" transform="translate(829.000000, 729.000000)"> | ||||
|                 <rect id="Rectangle-111" fill="#F6F6F6" x="0" y="0" width="24" height="18" rx="9"></rect> | ||||
|                 <text id="Aa" font-family="OpenSans-Bold, Open Sans" font-size="12" font-weight="bold" letter-spacing="-1.20000005" fill="#4A4A4A"> | ||||
|                     <tspan x="5" y="13">A</tspan> | ||||
|                     <tspan x="12.0792968" y="13" font-family="OpenSans-Italic, Open Sans" font-style="italic" font-weight="normal">a</tspan> | ||||
|                 </text> | ||||
|             </g> | ||||
|         </g> | ||||
|     </g> | ||||
| </svg> | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --> | ||||
| <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | ||||
| 	 viewBox="0 0 24 18" style="enable-background:new 0 0 24 18;" xml:space="preserve"> | ||||
| <style type="text/css"> | ||||
| 	.st0{fill:#F6F6F6;} | ||||
| 	.st1{enable-background:new    ;} | ||||
| 	.st2{fill:#4A4A4A;} | ||||
| </style> | ||||
| <path id="Rectangle-111" class="st0" d="M9,0h6c5,0,9,4,9,9l0,0c0,5-4,9-9,9H9c-5,0-9-4-9-9l0,0C0,4,4,0,9,0z"/> | ||||
| <g class="st1"> | ||||
| 	<path class="st2" d="M11.3,13l-0.6-2H7.6L7,13H5l3-8.6h2.2l3,8.6H11.3z M10.3,9.4c-0.6-1.8-0.9-2.9-1-3.1S9.2,5.9,9.1,5.7 | ||||
| 		C9,6.2,8.6,7.5,8,9.4H10.3z"/> | ||||
| </g> | ||||
| <g class="st1"> | ||||
| 	<path class="st2" d="M15.8,6.5c0.4,0,0.7,0.1,1,0.3s0.5,0.5,0.7,0.8h0.1l0.4-1h0.7L17.3,13h-0.8l0.2-1.2h0 | ||||
| 		c-0.7,0.9-1.4,1.3-2.2,1.3c-0.5,0-1-0.2-1.3-0.6s-0.5-0.9-0.5-1.6c0-0.8,0.1-1.6,0.4-2.3s0.7-1.2,1.1-1.6S15.2,6.5,15.8,6.5z | ||||
| 		 M14.7,12.3c0.4,0,0.8-0.2,1.1-0.5s0.7-0.8,0.9-1.4s0.4-1.2,0.4-1.7c0-0.4-0.1-0.7-0.3-1s-0.5-0.4-0.9-0.4c-0.4,0-0.8,0.2-1.1,0.5 | ||||
| 		S14.2,8.6,14,9.2s-0.3,1.2-0.3,1.8c0,0.4,0.1,0.8,0.3,1S14.4,12.3,14.7,12.3z"/> | ||||
| </g> | ||||
| </svg> | ||||
|  |  | |||
| Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB | 
|  | @ -1,13 +1,11 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --> | ||||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | ||||
| <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | ||||
| 	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve"> | ||||
| <g> | ||||
| 	 | ||||
| 		<rect x="178.846" y="92.087" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 224.3476 631.1498)" width="128.085" height="354.049"/> | ||||
| 	<path d="M471.723,88.393l-48.115-48.114c-11.723-11.724-31.558-10.896-44.304,1.85l-45.202,45.203l90.569,90.568l45.202-45.202 | ||||
| 		C482.616,119.952,483.445,100.116,471.723,88.393z"/> | ||||
| 	<polygon points="64.021,363.252 32,480 148.737,447.979 	"/> | ||||
| </g> | ||||
| 	width="512px" height="512px" viewBox="0 0 512 512" xml:space="preserve"> | ||||
| 	<g> | ||||
| 		<rect fill="#000000" x="167.664" y="69.108" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 219.262 633.2606)" width="146.238" height="404.224"/> | ||||
| 		<path fill="#000000" d="M502.05,64.887L447.116,9.952c-13.386-13.385-36.032-12.44-50.585,2.113l-51.609,51.61L448.328,167.08l51.609-51.608 | ||||
| 		C514.486,100.918,515.434,78.271,502.05,64.887z"/> | ||||
| 		<polygon fill="#000000" points="36.56,378.704 0,512 133.283,475.439"/> | ||||
| 	</g> | ||||
| </svg> | ||||
|  |  | |||
| Before Width: | Height: | Size: 876 B After Width: | Height: | Size: 780 B | 
|  | @ -0,0 +1,11 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | ||||
| <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | ||||
| 	width="512px" height="512px" viewBox="0 0 512 512" xml:space="preserve"> | ||||
| 	<g> | ||||
| 		<rect fill="#76CFA6" x="167.664" y="69.108" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 219.262 633.2606)" width="146.238" height="404.224"/> | ||||
| 		<path fill="#76CFA6" d="M502.05,64.887L447.116,9.952c-13.386-13.385-36.032-12.44-50.585,2.113l-51.609,51.61L448.328,167.08l51.609-51.608 | ||||
| 		C514.486,100.918,515.434,78.271,502.05,64.887z"/> | ||||
| 		<polygon fill="#76CFA6" points="36.56,378.704 0,512 133.283,475.439"/> | ||||
| 	</g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 780 B | 
| After Width: | Height: | Size: 14 KiB | 
|  | @ -0,0 +1,34 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --> | ||||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | ||||
| <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | ||||
| 	 width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve"> | ||||
| <g> | ||||
| 	<g> | ||||
| 		<g> | ||||
| 			<defs> | ||||
| 				<path id="SVGID_1_" d="M191.667,56.25c33.333-60.417,85.417-60.417,118.75,0l172.916,320.834 | ||||
| 					C516.667,437.5,487.5,487.5,416.667,487.5H83.333c-68.75,0-97.917-50-66.667-110.416L191.667,56.25L191.667,56.25z"/> | ||||
| 			</defs> | ||||
| 			<use xlink:href="#SVGID_1_"  overflow="visible" fill="#E8BF37"/> | ||||
| 			<clipPath id="SVGID_2_"> | ||||
| 				<use xlink:href="#SVGID_1_"  overflow="visible"/> | ||||
| 			</clipPath> | ||||
| 			<rect x="-100" y="-93.75" clip-path="url(#SVGID_2_)" fill="#E8BF37" width="700" height="685.417"/> | ||||
| 		</g> | ||||
| 	</g> | ||||
| 	<g> | ||||
| 		<g> | ||||
| 			<defs> | ||||
| 				<path id="SVGID_3_" d="M264.584,322.916l6.25-200h-41.667l6.25,200H264.584L264.584,322.916z M250,408.334 | ||||
| 					c14.584,0,25-10.418,25-25c0-14.584-10.416-25-25-25c-14.583,0-25,10.416-25,25C225,397.916,235.417,408.334,250,408.334 | ||||
| 					L250,408.334L250,408.334z"/> | ||||
| 			</defs> | ||||
| 			<clipPath id="SVGID_4_"> | ||||
| 				<use xlink:href="#SVGID_3_"  overflow="visible"/> | ||||
| 			</clipPath> | ||||
| 			<rect x="120.833" y="18.75" clip-path="url(#SVGID_4_)" fill="#FFFFFF" width="258.333" height="493.75"/> | ||||
| 		</g> | ||||
| 	</g> | ||||
| </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 1.5 KiB | 
|  | @ -0,0 +1,232 @@ | |||
| /* | ||||
| Copyright 2017 New Vector Ltd | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| // overrides for mx_Login* specific to Status. | ||||
| // Ideally this would be all Status prefixes for a Status specific version of the component | ||||
| // but given we're not doing Status as a dedicated 'skin' yet... | ||||
| 
 | ||||
| .mx_StatusLogin { | ||||
| 
 | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
| 
 | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
| 
 | ||||
|     overflow: auto; | ||||
| 
 | ||||
|     .mx_StatusLogin_brand { | ||||
|         position: absolute; | ||||
|         top: 30px; | ||||
|         left: 30px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_StatusLogin_content { | ||||
|         margin: auto; | ||||
|     } | ||||
| 
 | ||||
|     .mx_StatusLogin_header { | ||||
|         text-align: center; | ||||
|         margin-top: 70px; | ||||
|         margin-bottom: 50px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_StatusLogin_header h1 { | ||||
|         font-size: 29px; | ||||
|         margin-bottom: 3px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_StatusLogin_subtitle { | ||||
|         font-size: 18px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_StatusLogin_subtitle a { | ||||
|         color: $riot-link-color; | ||||
|     } | ||||
| 
 | ||||
|     .mx_StatusLogin_footer { | ||||
|         margin-top: 30px; | ||||
|         margin-bottom: 30px; | ||||
|         text-align: center; | ||||
|         font-size: 16px; | ||||
|         color: $footer-color; | ||||
|     } | ||||
| 
 | ||||
|     .mx_StatusLogin_footer p { | ||||
|         margin-top: 0.5em; | ||||
|         margin-bottom: 0.5em; | ||||
|     } | ||||
| 
 | ||||
|     .mx_StatusLogin_footer_cta { | ||||
|         color: $callout-color; | ||||
|         font-family: $header-font-family; | ||||
|         letter-spacing: 1px; | ||||
|         font-size: 13px; | ||||
|         text-transform: uppercase; | ||||
|         opacity: 1.0; | ||||
|         transition: opacity .2s ease;         | ||||
|     } | ||||
| 
 | ||||
|     .mx_StatusLogin_footer_cta:hover { | ||||
|         opacity: 0.5; | ||||
|         text-decoration: none; | ||||
|     } | ||||
| 
 | ||||
|     // overrides of .mx_Login | ||||
| 
 | ||||
|     .mx_Login_box { | ||||
|         width: 330px; | ||||
|         min-height: initial; | ||||
|         padding-top: 40px; | ||||
|         padding-bottom: 20px; | ||||
|         padding-left: 10px; | ||||
|         padding-right: 10px; | ||||
|         border-radius: 8px; | ||||
|         color: $form-fg-color; | ||||
|         font-size: 16px; | ||||
|         line-height: 25px; | ||||
|         background-color: $form-bg-color; | ||||
|         background-image: url(../../themes/status/img/dot.svg); | ||||
|         box-shadow: 0px 5px 16px 0px rgba(25,12,46,0.16);     | ||||
|         position: relative; | ||||
|         text-align: center; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_logo { | ||||
|         background-color: #fff; | ||||
|         width: 74px; | ||||
|         height: 74px; | ||||
|         border-radius: 37px; | ||||
|         box-shadow: 0px 5px 16px 0px rgba(0,0,0,0.2); | ||||
|         position: absolute; | ||||
|         top: -36px; | ||||
|         left: 50%; | ||||
|         margin-left: -36px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_logo img { | ||||
|         width: 36px; | ||||
|         height: 36px; | ||||
|         padding: 19px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_box h2 { | ||||
|         text-align: center; | ||||
|         color: $form-fg-color; | ||||
|         font-size: 25px; | ||||
|         margin-bottom: 24px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_field { | ||||
|         width: 260px; | ||||
|         height: 27px; | ||||
|         padding: 8px 20px 10px 20px; | ||||
|         border-radius: 10px; | ||||
|         text-align: left; | ||||
|         border: 1px solid transparent; | ||||
|         background-color: $form-field-bg-color; | ||||
|         color: $form-field-fg-color; | ||||
|         font-weight: 300; | ||||
|         font-size: 15px; | ||||
|         margin-bottom: 14px; | ||||
|         transition: background-color .2s ease; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_field:focus { | ||||
|         border: 1px solid transparent; | ||||
|         background-color: $form-field-bg-hover-color; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_field::-webkit-input-placeholder { | ||||
|         font-family: $font-family; | ||||
|         color: $form-field-fg-color; | ||||
|         opacity: 0.6; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_field::-moz-placeholder { | ||||
|         font-family: $font-family; | ||||
|         color: $form-field-fg-color; | ||||
|         opacity: 0.6;         | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_field_disabled { | ||||
|         opacity: 0.3; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_prompt { | ||||
|         font-size: 16px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_submit { | ||||
|         min-width: 200px; | ||||
|         width: auto; | ||||
|         margin-top: 13px; | ||||
|         margin-bottom: 10px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_submit:disabled { | ||||
|         opacity: 0.3; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_create { | ||||
|         margin-top: 10px; | ||||
|         display: block; | ||||
|         text-align: center; | ||||
|         width: 100%; | ||||
|         font-size: 15px; | ||||
|         opacity: 1.0; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_create:link, | ||||
|     .mx_Login_create:hover, | ||||
|     .mx_Login_create:visited | ||||
|     { | ||||
|         color: $form-fg-color; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_forgot { | ||||
|         display: block; | ||||
|         font-size: 15px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_forgot:link, | ||||
|     .mx_Login_forgot:hover, | ||||
|     .mx_Login_forgot:visited | ||||
|     { | ||||
|         color: $form-fg-color; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_error { | ||||
|         color: $warning-color; | ||||
|         font-size: 18px; | ||||
|         width: 300px; | ||||
|         height: 44px; | ||||
|         display: flex; | ||||
|         justify-content: center; | ||||
|         align-items: center; | ||||
|         margin: auto; | ||||
|         text-align: center; | ||||
|         margin-top: 12px; | ||||
|         margin-bottom: 16px; | ||||
|     } | ||||
| 
 | ||||
|     .mx_Login_smallError { | ||||
|         font-size: 13px; | ||||
|         line-height: initial; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,276 @@ | |||
| @font-face { | ||||
|     font-family:PostGrotesk-Medium; | ||||
|     src:url('https://status.im/fonts/PostGrotesk-Medium.eot'); | ||||
|     src:url('https://status.im/fonts/PostGrotesk-Medium.eot?#iefix') format("embedded-opentype"),url('https://status.im/fonts/PostGrotesk-Medium.woff') format("woff"),url('https://status.im/fonts/PostGrotesk-Medium.svg#PostGrotesk-Medium') format("svg"); | ||||
|     font-weight: 400; | ||||
|     font-style: normal; | ||||
| } | ||||
| 
 | ||||
| @font-face { | ||||
|     font-family:PostGrotesk-Book; | ||||
|     src:url('https://status.im/fonts/PostGrotesk-Book.eot'); | ||||
|     src:url('https://status.im/fonts/PostGrotesk-Book.eot?#iefix') format("embedded-opentype"),url('https://status.im/fonts/PostGrotesk-Book.woff') format("woff"),url('https://status.im/fonts/PostGrotesk-Book.svg#PostGrotesk-Book') format("svg"); | ||||
|     font-weight: 400; | ||||
|     font-style: normal; | ||||
| } | ||||
| 
 | ||||
| // We deliberately prioritise Arial over Helvetica here due to diacritic problems (see _base.scss) | ||||
| // N.B. that the status.im website uses: | ||||
| // font-family:PostGrotesk-Book,-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif; | ||||
| // ...but can't be bothered to work out how the apple fonts & segoe interact, so keepingn it simple for now. | ||||
| 
 | ||||
| $font-family: PostGrotesk-Book, Arial, Helvetica, Sans-Serif; | ||||
| 
 | ||||
| // typical text (dark-on-white in light skin) | ||||
| $primary-fg-color: #70808D; | ||||
| $primary-bg-color: #EEF2F5; | ||||
| 
 | ||||
| // ***** Start of Status theme specifics ****** | ||||
| $header-color: #49555F; | ||||
| $header-font-family: PostGrotesk-Medium, Arial, Helvetica, Sans-Serif; | ||||
| 
 | ||||
| $footer-color: #8D99A4; | ||||
| 
 | ||||
| $riot-link-color: #A26988; | ||||
| 
 | ||||
| a { | ||||
|     text-decoration: none; | ||||
| } | ||||
| 
 | ||||
| a:hover { | ||||
|     text-decoration: underline; | ||||
| } | ||||
| 
 | ||||
| h1,h2,h3,h4,h5 { | ||||
|     color: $header-color; | ||||
|     font-family: $header-font-family; | ||||
|     font-weight: 400 ! important; | ||||
| } | ||||
| 
 | ||||
| $callout-color: #4360DF; // or #4957b8 from status.im homepage | ||||
| 
 | ||||
| $form-bg-color: $callout-color; | ||||
| $form-fg-color: #ffffff; | ||||
| 
 | ||||
| $form-field-bg-color: rgba(244, 242, 247, 0.12); | ||||
| $form-field-bg-hover-color: rgba(255, 255, 255, 0.2); | ||||
| $form-field-fg-color: #ffffff; | ||||
| 
 | ||||
| // ***** End of Status theme specifics ****** | ||||
| 
 | ||||
| 
 | ||||
| // used for dialog box text | ||||
| $light-fg-color: #747474; | ||||
| 
 | ||||
| // used for focusing form controls | ||||
| $focus-bg-color: #dddddd; | ||||
| 
 | ||||
| // button UI (white-on-green in light skin) | ||||
| $accent-fg-color: #ffffff; | ||||
| $accent-color: #6CC1F6; | ||||
| $accent-hover-color: #84cfff; | ||||
| 
 | ||||
| $selection-fg-color: $primary-bg-color; | ||||
| 
 | ||||
| $focus-brightness: 125%; | ||||
| 
 | ||||
| // red warning colour | ||||
| $warning-color: #F69E98; | ||||
| $mention-user-pill-bg-color: #ff0064; | ||||
| $other-user-pill-bg-color: rgba(0, 0, 0, 0.1); | ||||
| 
 | ||||
| $group-alert-color: #774f7e; | ||||
| 
 | ||||
| $preview-bar-bg-color: #f7f7f7; | ||||
| 
 | ||||
| // left-panel style muted accent color | ||||
| $secondary-accent-color: #586C7B; | ||||
| 
 | ||||
| // stop the tinter trying to change the secondary accent color | ||||
| // by overriding the key to something untintable | ||||
| // XXX: this is a bit of a hack. | ||||
| #mx_theme_secondaryAccentColor { | ||||
|     color: #586C7C ! important; // deliberately off by one | ||||
| } | ||||
| 
 | ||||
| // used by RoomDirectory permissions | ||||
| $plinth-bg-color: $secondary-accent-color; | ||||
| 
 | ||||
| // used by RoomDropTarget | ||||
| $droptarget-bg-color: rgba(255,255,255,0.5); | ||||
| 
 | ||||
| // used by AddressSelector | ||||
| $selected-color: #eaf5f0; | ||||
| 
 | ||||
| // selected for hoverover & selected event tiles | ||||
| $event-selected-color: #f7f7f7; | ||||
| 
 | ||||
| // used for the hairline dividers in RoomView | ||||
| $primary-hairline-color: #e5e5e5; | ||||
| 
 | ||||
| // used for the border of input text fields | ||||
| $input-border-color: #c9cfd4; | ||||
| 
 | ||||
| // apart from login forms, which have stronger border | ||||
| $strong-input-border-color: #c7c7c7; | ||||
| 
 | ||||
| // used for UserSettings EditableText | ||||
| $input-underline-color: rgba(151, 151, 151, 0.5); | ||||
| $input-fg-color: rgba(74, 74, 74, 0.9); | ||||
| 
 | ||||
| // context menus | ||||
| $menu-border-color: rgba(187, 187, 187, 0.5); | ||||
| $menu-bg-color: #f6f6f6; | ||||
| 
 | ||||
| $avatar-initial-color: #ffffff; | ||||
| $avatar-bg-color: transparent; | ||||
| 
 | ||||
| $h3-color: #3d3b39; | ||||
| 
 | ||||
| $dialog-background-bg-color: #e9e9e9; | ||||
| $lightbox-background-bg-color: #000; | ||||
| 
 | ||||
| $greyed-fg-color: #888; | ||||
| 
 | ||||
| $neutral-badge-color: #dbdbdb; | ||||
| 
 | ||||
| $preview-widget-bar-color: #ddd; | ||||
| $preview-widget-fg-color: $greyed-fg-color; | ||||
| 
 | ||||
| $blockquote-bar-color: #ddd; | ||||
| $blockquote-fg-color: #777; | ||||
| 
 | ||||
| $settings-grey-fg-color: #a2a2a2; | ||||
| 
 | ||||
| $voip-decline-color: #f48080; | ||||
| $voip-accept-color: #80f480; | ||||
| 
 | ||||
| $rte-bg-color: #e9e9e9; | ||||
| $rte-code-bg-color: rgba(0, 0, 0, 0.04); | ||||
| $rte-room-pill-color: #aaa; | ||||
| 
 | ||||
| // ******************** | ||||
| 
 | ||||
| $roomtile-name-color: #ffffff; | ||||
| $roomtile-selected-bg-color: #465561; | ||||
| $roomtile-focused-bg-color: #6d8597; | ||||
| 
 | ||||
| $roomsublist-label-fg-color: #ffffff; | ||||
| $roomsublist-label-bg-color: $secondary-accent-color; | ||||
| $roomsublist-chevron-color: #ffffff; | ||||
| 
 | ||||
| $panel-divider-color: rgba(0, 0, 0, 0.2); | ||||
| 
 | ||||
| // ******************** | ||||
| 
 | ||||
| // event tile lifecycle | ||||
| $event-encrypting-color: #abddbc; | ||||
| $event-sending-color: #ddd; | ||||
| $event-notsent-color: #f44; | ||||
| 
 | ||||
| // event redaction | ||||
| $event-redacted-fg-color: #e2e2e2; | ||||
| $event-redacted-border-color: #cccccc; | ||||
| 
 | ||||
| // event timestamp | ||||
| $event-timestamp-color: #acacac; | ||||
| 
 | ||||
| $edit-button-url: "../../img/icon_context_message.svg"; | ||||
| $copy-button-url: "../../img/icon_copy_message.svg"; | ||||
| 
 | ||||
| // e2e | ||||
| $e2e-verified-color: #76cfa5; // N.B. *NOT* the same as $accent-color | ||||
| $e2e-unverified-color: #e8bf37; | ||||
| $e2e-warning-color: #ba6363; | ||||
| 
 | ||||
| /*** ImageView ***/ | ||||
| $lightbox-bg-color: #454545; | ||||
| $lightbox-fg-color: #ffffff; | ||||
| $lightbox-border-color: #ffffff; | ||||
| 
 | ||||
| // unused? | ||||
| $progressbar-color: #000; | ||||
| 
 | ||||
| @define-mixin mx_DialogButton { | ||||
|     /* align images in buttons (eg spinners) */ | ||||
|     vertical-align: middle; | ||||
|     border-radius: 8px; | ||||
|     border: 1px solid rgba(199, 206, 209, 0.12); | ||||
|     background-color: $accent-color; | ||||
|     font-size: 13px; | ||||
|     font-family: $header-font-family; | ||||
|     text-transform: uppercase; | ||||
|     letter-spacing: 1px; | ||||
|     color: $accent-fg-color; | ||||
|     cursor: pointer; | ||||
|     outline: none; | ||||
|     padding: 14px; | ||||
|     box-sizing: border-box; | ||||
|     padding-left: 1.5em; | ||||
|     padding-right: 1.5em; | ||||
|     display: inline-block; | ||||
|     transition: background-color .2s ease; | ||||
| } | ||||
| 
 | ||||
| @define-mixin mx_DialogButton_hover { | ||||
|     background-color: $accent-hover-color; | ||||
| } | ||||
| 
 | ||||
| @define-mixin mx_DialogButton_small { | ||||
|     @mixin mx_DialogButton; | ||||
|     height: auto; | ||||
|     padding-top: 7px; | ||||
|     padding-bottom: 7px; | ||||
|     padding-left: 1em; | ||||
|     padding-right: 1em; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomSubList_label { | ||||
|     font-size: 13px; | ||||
|     font-family: $header-font-family; | ||||
|     letter-spacing: 1px;     | ||||
| } | ||||
| 
 | ||||
| // FIXME: all these ! importants are horrid - we should instead go and define | ||||
| // variables or something. | ||||
| .mx_SearchBox_search { | ||||
|     color: #fff ! important; | ||||
| } | ||||
| 
 | ||||
| .mx_SearchBox_search::-webkit-input-placeholder  { | ||||
|     color: rgba(255, 255, 255, 0.6) ! important; | ||||
| } | ||||
| 
 | ||||
| .mx_SearchBox_search::-moz-placeholder  { | ||||
|     color: rgba(255, 255, 255, 0.6) ! important; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomList_emptySubListTip, | ||||
| .mx_RoomDropTarget { | ||||
|     font-size: 14px ! important; | ||||
|     border: 1.5px dashed rgba(0,0,0,0.2) ! important; | ||||
|     color: #fff ! important; | ||||
|     background-color: transparent ! important; | ||||
|     border-radius: 6px ! important; | ||||
|     margin-left: 6px ! important; | ||||
|     margin-right: 6px ! important; | ||||
|     margin-top: 8px ! important; | ||||
|     margin-bottom: 7px ! important; | ||||
|     padding: 8px ! important; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomDirectory_perm { | ||||
|     font-family: $header-font-family ! important; | ||||
|     background-color: #fff ! important; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile_badge, | ||||
| .mx_RoomSubList_badge { | ||||
|     height: 12px ! important; | ||||
|     padding-top: 1px ! important; | ||||
|     padding-bottom: 1px ! important; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomSubList_chevron { | ||||
|     top: 8px ! important; | ||||
| } | ||||
|  | @ -0,0 +1,4 @@ | |||
| @import "../../../css/themes/_base.scss"; | ||||
| @import "_status.scss"; | ||||
| @import "../../../css/_components.scss"; | ||||
| @import "_StatusLogin.scss"; | ||||
|  | @ -0,0 +1 @@ | |||
| We link out to status.im for fonts, although ideally we'd put them here. | ||||
| After Width: | Height: | Size: 3.7 KiB | 
| After Width: | Height: | Size: 3.5 KiB | 
|  | @ -0,0 +1 @@ | |||
| <svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><title>Artboard</title><circle cx="10" cy="10" r="1" fill="#FFF" fill-rule="evenodd" opacity=".11"/></svg> | ||||
| After Width: | Height: | Size: 189 B | 
| After Width: | Height: | Size: 3.8 KiB | 
| After Width: | Height: | Size: 3.1 KiB | 
| After Width: | Height: | Size: 18 KiB | 
| After Width: | Height: | Size: 3.6 KiB | 
|  | @ -20,15 +20,14 @@ | |||
|     <meta name="msapplication-TileImage" content="vector-icons/mstile-144x144.png"> | ||||
|     <meta name="msapplication-config" content="vector-icons/browserconfig.xml"> | ||||
|     <meta name="theme-color" content="#ffffff"> | ||||
|     <meta property="og:image" content="https://chat.status.im/img/logos/riot-im-logo-1.png" /> | ||||
|     <% for (var i=0; i < htmlWebpackPlugin.files.css.length; i++) { | ||||
|         var file = htmlWebpackPlugin.files.css[i]; | ||||
|         var match = file.match(/^bundles\/.*?\/theme-(.*)\.css$/); | ||||
|         if (match) { | ||||
|             var title = match[1].charAt(0).toUpperCase() + match[1].slice(1); | ||||
|             var light = match[1] == 'light'; | ||||
|         %> | ||||
|            <link rel="<%= light ? '' : 'alternate ' %>stylesheet" title="<%= title %>" | ||||
|                href="<%= file %>"> | ||||
|            <link rel="stylesheet" disabled title="<%= title %>" href="<%= file %>"> | ||||
|         <% } else { %> | ||||
|            <link rel="stylesheet" href="<%= file %>"> | ||||
|         <% } | ||||
|  | @ -73,5 +72,7 @@ | |||
|         <source src="media/busy.mp3" type="audio/mpeg" /> | ||||
|     </audio> | ||||
|     <audio id="remoteAudio"/> | ||||
|     <!-- let CSS themes pass constants to the app --> | ||||
|     <div id="mx_theme_accentColor"></div><div id="mx_theme_secondaryAccentColor"/></div> | ||||
|   </body> | ||||
| </html> | ||||
|  |  | |||
|  | @ -78,6 +78,7 @@ import {parseQs, parseQsFromFragment} from './url_utils'; | |||
| import Platform from './platform'; | ||||
| 
 | ||||
| import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg'; | ||||
| import Tinter from 'matrix-react-sdk/lib/Tinter'; | ||||
| 
 | ||||
| var lastLocationHashSet = null; | ||||
| 
 | ||||
|  | @ -250,16 +251,30 @@ async function loadApp() { | |||
| 
 | ||||
|     if (!preventRedirect) { | ||||
|         if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) { | ||||
|             if (confirm(_t("Riot is not supported on mobile web. Install the app?"))) { | ||||
|                 window.location = "https://itunes.apple.com/us/app/vector.im/id1083446067"; | ||||
|             // FIXME: ugly status hardcoding
 | ||||
|             if (UserSettingsStore.getTheme() === 'status') { | ||||
|                 window.location = "https://status.im/join-riot.html"; | ||||
|                 return; | ||||
|             } | ||||
|             else { | ||||
|                 if (confirm(_t("Riot is not supported on mobile web. Install the app?"))) { | ||||
|                     window.location = "https://itunes.apple.com/us/app/vector.im/id1083446067"; | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         else if (/Android/.test(navigator.userAgent)) { | ||||
|             if (confirm(_t("Riot is not supported on mobile web. Install the app?"))) { | ||||
|                 window.location = "https://play.google.com/store/apps/details?id=im.vector.alpha"; | ||||
|             // FIXME: ugly status hardcoding
 | ||||
|             if (UserSettingsStore.getTheme() === 'status') { | ||||
|                 window.location = "https://status.im/join-riot.html"; | ||||
|                 return; | ||||
|             } | ||||
|             else { | ||||
|                 if (confirm(_t("Riot is not supported on mobile web. Install the app?"))) { | ||||
|                     window.location = "https://play.google.com/store/apps/details?id=im.vector.alpha"; | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | @ -281,6 +296,33 @@ async function loadApp() { | |||
|         configError = e; | ||||
|     } | ||||
| 
 | ||||
|     // as quickly as we possibly can, set a default theme...
 | ||||
|     const styleElements = Object.create(null); | ||||
|     let a; | ||||
|     const theme = configJson.default_theme || 'light'; | ||||
|     for (let i = 0; (a = document.getElementsByTagName("link")[i]); i++) { | ||||
|         const href = a.getAttribute("href"); | ||||
|         // shouldn't we be using the 'title' tag rather than the href?
 | ||||
|         const match = href.match(/^bundles\/.*\/theme-(.*)\.css$/); | ||||
|         if (match) { | ||||
|             if (match[1] === theme) { | ||||
|                 // remove the disabled flag off the stylesheet
 | ||||
|                 a.removeAttribute("disabled"); | ||||
| 
 | ||||
|                 // in case the Tinter.tint() in MatrixChat fires before the
 | ||||
|                 // CSS has actually loaded (which in practice happens)...
 | ||||
| 
 | ||||
|                 // FIXME: we should probably block loading the app or even
 | ||||
|                 // showing a spinner until the theme is loaded, to avoid
 | ||||
|                 // flashes of unstyled content.
 | ||||
|                 a.onload = () => {  | ||||
|                     Tinter.setTheme(theme); | ||||
|                     Tinter.tint(); | ||||
|                 }; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (window.localStorage && window.localStorage.getItem('mx_accepts_unsupported_browser')) { | ||||
|         console.log('User has previously accepted risks in using an unsupported browser'); | ||||
|         validBrowser = true; | ||||
|  | @ -304,7 +346,7 @@ async function loadApp() { | |||
|                 config={configJson} | ||||
|                 realQueryParams={params} | ||||
|                 startingFragmentQueryParams={fragparts.params} | ||||
|                 enableGuest={true} | ||||
|                 enableGuest={!configJson.disable_guests} | ||||
|                 onTokenLoginCompleted={onTokenLoginCompleted} | ||||
|                 initialScreenAfterLogin={getScreenFromLocation(window.location)} | ||||
|                 defaultDeviceDisplayName={platform.getDefaultDeviceDisplayName()} | ||||
|  |  | |||
|  | @ -546,6 +546,8 @@ describe('loading:', function () { | |||
|                 ); | ||||
|             }); | ||||
| 
 | ||||
|             /* | ||||
|             // ILAG renders this obsolete. I think.
 | ||||
|             it('should allow us to return to the app', function() { | ||||
|                 const login = ReactTestUtils.findRenderedComponentWithType( | ||||
|                     matrixChat, sdk.getComponent('structures.login.Login') | ||||
|  | @ -568,6 +570,7 @@ describe('loading:', function () { | |||
|                         matrixChat, sdk.getComponent('structures.HomePage')); | ||||
|                 }); | ||||
|             }); | ||||
|             */ | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ module.exports = { | |||
|         // CSS themes
 | ||||
|         "theme-light": "./src/skins/vector/css/themes/light.scss", | ||||
|         "theme-dark": "./src/skins/vector/css/themes/dark.scss", | ||||
|         "theme-status": "./src/skins/vector/themes/status/css/status.scss", | ||||
|     }, | ||||
|     module: { | ||||
|         preLoaders: [ | ||||
|  |  | |||
 Richard Lewis
						Richard Lewis