Merge branch 'develop' into matthew/retina
This commit is contained in:
commit
f1b00dff35
622 changed files with 40536 additions and 16475 deletions
21
.babelrc
21
.babelrc
|
@ -1,4 +1,21 @@
|
||||||
{
|
{
|
||||||
"presets": ["react", "es2015", "es2016"],
|
"presets": [
|
||||||
"plugins": ["transform-class-properties", "transform-object-rest-spread", "transform-async-to-bluebird", "transform-runtime", "add-module-exports", "syntax-dynamic-import"]
|
"react",
|
||||||
|
"es2015",
|
||||||
|
"es2016"
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
[
|
||||||
|
"transform-builtin-extend",
|
||||||
|
{
|
||||||
|
"globals": ["Error"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transform-class-properties",
|
||||||
|
"transform-object-rest-spread",
|
||||||
|
"transform-async-to-bluebird",
|
||||||
|
"transform-runtime",
|
||||||
|
"add-module-exports",
|
||||||
|
"syntax-dynamic-import"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
74
.buildkite/pipeline.yaml
Normal file
74
.buildkite/pipeline.yaml
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
steps:
|
||||||
|
- label: ":eslint: Lint"
|
||||||
|
command:
|
||||||
|
- "yarn install"
|
||||||
|
- "yarn lintwithexclusions"
|
||||||
|
plugins:
|
||||||
|
- docker#v3.0.1:
|
||||||
|
image: "node:10"
|
||||||
|
|
||||||
|
# - label: ":chains: End-to-End Tests"
|
||||||
|
# command:
|
||||||
|
# # TODO: Remove hacky chmod for BuildKite
|
||||||
|
# - "chmod +x ./scripts/ci/*.sh"
|
||||||
|
# - "chmod +x ./scripts/*"
|
||||||
|
# - "sudo apt-get install build-essential python2.7-dev libffi-dev python-pip python-setuptools sqlite3 libssl-dev python-virtualenv libjpeg-dev libxslt1-dev"
|
||||||
|
# - "./scripts/ci/install-deps.sh"
|
||||||
|
# - "./scripts/ci/end-to-end-tests.sh"
|
||||||
|
# plugins:
|
||||||
|
# - docker#v3.0.1:
|
||||||
|
# image: "node:10"
|
||||||
|
|
||||||
|
- label: ":karma: Tests"
|
||||||
|
agents:
|
||||||
|
# We use a medium sized instance instead of the normal small ones because
|
||||||
|
# webpack loves to gorge itself on resources.
|
||||||
|
queue: "medium"
|
||||||
|
command:
|
||||||
|
# Install chrome
|
||||||
|
- "echo '--- Installing Chrome'"
|
||||||
|
- "wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -"
|
||||||
|
- "sh -c 'echo \"deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main\" >> /etc/apt/sources.list.d/google.list'"
|
||||||
|
- "apt-get update"
|
||||||
|
- "apt-get install -y google-chrome-stable"
|
||||||
|
# Run tests
|
||||||
|
# TODO: Remove hacky chmod for BuildKite
|
||||||
|
- "chmod +x ./scripts/ci/*.sh"
|
||||||
|
- "chmod +x ./scripts/*"
|
||||||
|
- "echo '--- Installing Dependencies'"
|
||||||
|
- "./scripts/ci/install-deps.sh"
|
||||||
|
- "echo '+++ Running Tests'"
|
||||||
|
- "./scripts/ci/unit-tests.sh"
|
||||||
|
env:
|
||||||
|
CHROME_BIN: "/usr/bin/google-chrome-stable"
|
||||||
|
plugins:
|
||||||
|
- docker#v3.0.1:
|
||||||
|
image: "node:10"
|
||||||
|
propagate-environment: true
|
||||||
|
|
||||||
|
- label: "🔧 Riot Tests"
|
||||||
|
agents:
|
||||||
|
# We use a medium sized instance instead of the normal small ones because
|
||||||
|
# webpack loves to gorge itself on resources.
|
||||||
|
queue: "medium"
|
||||||
|
command:
|
||||||
|
# Install chrome
|
||||||
|
- "echo '--- Installing Chrome'"
|
||||||
|
- "wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -"
|
||||||
|
- "sh -c 'echo \"deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main\" >> /etc/apt/sources.list.d/google.list'"
|
||||||
|
- "apt-get update"
|
||||||
|
- "apt-get install -y google-chrome-stable"
|
||||||
|
# Run tests
|
||||||
|
# TODO: Remove hacky chmod for BuildKite
|
||||||
|
- "chmod +x ./scripts/ci/*.sh"
|
||||||
|
- "chmod +x ./scripts/*"
|
||||||
|
- "echo '--- Installing Dependencies'"
|
||||||
|
- "./scripts/ci/install-deps.sh"
|
||||||
|
- "echo '+++ Running Tests'"
|
||||||
|
- "./scripts/ci/riot-unit-tests.sh"
|
||||||
|
env:
|
||||||
|
CHROME_BIN: "/usr/bin/google-chrome-stable"
|
||||||
|
plugins:
|
||||||
|
- docker#v3.0.1:
|
||||||
|
image: "node:10"
|
||||||
|
propagate-environment: true
|
|
@ -2,10 +2,7 @@
|
||||||
|
|
||||||
src/component-index.js
|
src/component-index.js
|
||||||
src/components/structures/BottomLeftMenu.js
|
src/components/structures/BottomLeftMenu.js
|
||||||
src/components/structures/CompatibilityPage.js
|
|
||||||
src/components/structures/CreateRoom.js
|
src/components/structures/CreateRoom.js
|
||||||
src/components/structures/LoggedInView.js
|
|
||||||
src/components/structures/login/ForgotPassword.js
|
|
||||||
src/components/structures/MessagePanel.js
|
src/components/structures/MessagePanel.js
|
||||||
src/components/structures/NotificationPanel.js
|
src/components/structures/NotificationPanel.js
|
||||||
src/components/structures/RoomDirectory.js
|
src/components/structures/RoomDirectory.js
|
||||||
|
@ -21,7 +18,6 @@ src/components/views/create_room/RoomAlias.js
|
||||||
src/components/views/dialogs/DeactivateAccountDialog.js
|
src/components/views/dialogs/DeactivateAccountDialog.js
|
||||||
src/components/views/dialogs/SetPasswordDialog.js
|
src/components/views/dialogs/SetPasswordDialog.js
|
||||||
src/components/views/dialogs/UnknownDeviceDialog.js
|
src/components/views/dialogs/UnknownDeviceDialog.js
|
||||||
src/components/views/directory/NetworkDropdown.js
|
|
||||||
src/components/views/elements/AddressSelector.js
|
src/components/views/elements/AddressSelector.js
|
||||||
src/components/views/elements/DirectorySearchBox.js
|
src/components/views/elements/DirectorySearchBox.js
|
||||||
src/components/views/elements/ImageView.js
|
src/components/views/elements/ImageView.js
|
||||||
|
@ -31,15 +27,9 @@ src/components/views/elements/UserSelector.js
|
||||||
src/components/views/globals/MatrixToolbar.js
|
src/components/views/globals/MatrixToolbar.js
|
||||||
src/components/views/globals/NewVersionBar.js
|
src/components/views/globals/NewVersionBar.js
|
||||||
src/components/views/globals/UpdateCheckBar.js
|
src/components/views/globals/UpdateCheckBar.js
|
||||||
src/components/views/login/CountryDropdown.js
|
|
||||||
src/components/views/login/InteractiveAuthEntryComponents.js
|
|
||||||
src/components/views/login/PasswordLogin.js
|
|
||||||
src/components/views/login/RegistrationForm.js
|
|
||||||
src/components/views/login/ServerConfig.js
|
|
||||||
src/components/views/messages/MFileBody.js
|
src/components/views/messages/MFileBody.js
|
||||||
src/components/views/messages/RoomAvatarEvent.js
|
src/components/views/messages/RoomAvatarEvent.js
|
||||||
src/components/views/messages/TextualBody.js
|
src/components/views/messages/TextualBody.js
|
||||||
src/components/views/room_settings/AliasSettings.js
|
|
||||||
src/components/views/room_settings/ColorSettings.js
|
src/components/views/room_settings/ColorSettings.js
|
||||||
src/components/views/rooms/Autocomplete.js
|
src/components/views/rooms/Autocomplete.js
|
||||||
src/components/views/rooms/AuxPanel.js
|
src/components/views/rooms/AuxPanel.js
|
||||||
|
@ -48,30 +38,25 @@ src/components/views/rooms/LinkPreviewWidget.js
|
||||||
src/components/views/rooms/MemberDeviceInfo.js
|
src/components/views/rooms/MemberDeviceInfo.js
|
||||||
src/components/views/rooms/MemberInfo.js
|
src/components/views/rooms/MemberInfo.js
|
||||||
src/components/views/rooms/MemberList.js
|
src/components/views/rooms/MemberList.js
|
||||||
src/components/views/rooms/MemberTile.js
|
|
||||||
src/components/views/rooms/MessageComposer.js
|
src/components/views/rooms/MessageComposer.js
|
||||||
src/components/views/rooms/PinnedEventTile.js
|
src/components/views/rooms/PinnedEventTile.js
|
||||||
src/components/views/rooms/RoomList.js
|
src/components/views/rooms/RoomList.js
|
||||||
src/components/views/rooms/RoomPreviewBar.js
|
src/components/views/rooms/RoomPreviewBar.js
|
||||||
src/components/views/rooms/RoomSettings.js
|
|
||||||
src/components/views/rooms/SearchableEntityList.js
|
src/components/views/rooms/SearchableEntityList.js
|
||||||
src/components/views/rooms/SearchBar.js
|
src/components/views/rooms/SearchBar.js
|
||||||
src/components/views/rooms/SearchResultTile.js
|
src/components/views/rooms/SearchResultTile.js
|
||||||
src/components/views/rooms/TopUnreadMessagesBar.js
|
src/components/views/rooms/TopUnreadMessagesBar.js
|
||||||
src/components/views/rooms/UserTile.js
|
src/components/views/rooms/UserTile.js
|
||||||
src/components/views/settings/AddPhoneNumber.js
|
|
||||||
src/components/views/settings/ChangeAvatar.js
|
src/components/views/settings/ChangeAvatar.js
|
||||||
src/components/views/settings/ChangePassword.js
|
src/components/views/settings/ChangePassword.js
|
||||||
src/components/views/settings/DevicesPanel.js
|
src/components/views/settings/DevicesPanel.js
|
||||||
src/components/views/settings/IntegrationsManager.js
|
src/components/views/settings/IntegrationsManager.js
|
||||||
src/components/views/settings/Notifications.js
|
src/components/views/settings/Notifications.js
|
||||||
src/ContentMessages.js
|
|
||||||
src/GroupAddressPicker.js
|
src/GroupAddressPicker.js
|
||||||
src/HtmlUtils.js
|
src/HtmlUtils.js
|
||||||
src/ImageUtils.js
|
src/ImageUtils.js
|
||||||
src/languageHandler.js
|
src/languageHandler.js
|
||||||
src/linkify-matrix.js
|
src/linkify-matrix.js
|
||||||
src/Login.js
|
|
||||||
src/Markdown.js
|
src/Markdown.js
|
||||||
src/MatrixClientPeg.js
|
src/MatrixClientPeg.js
|
||||||
src/Modal.js
|
src/Modal.js
|
||||||
|
@ -99,12 +84,10 @@ src/VectorConferenceHandler.js
|
||||||
src/Velociraptor.js
|
src/Velociraptor.js
|
||||||
src/WhoIsTyping.js
|
src/WhoIsTyping.js
|
||||||
src/wrappers/withMatrixClient.js
|
src/wrappers/withMatrixClient.js
|
||||||
test/components/structures/login/Registration-test.js
|
|
||||||
test/components/structures/MessagePanel-test.js
|
test/components/structures/MessagePanel-test.js
|
||||||
test/components/structures/ScrollPanel-test.js
|
test/components/structures/ScrollPanel-test.js
|
||||||
test/components/structures/TimelinePanel-test.js
|
test/components/structures/TimelinePanel-test.js
|
||||||
test/components/views/dialogs/InteractiveAuthDialog-test.js
|
test/components/views/dialogs/InteractiveAuthDialog-test.js
|
||||||
test/components/views/login/RegistrationForm-test.js
|
|
||||||
test/components/views/rooms/MessageComposerInput-test.js
|
test/components/views/rooms/MessageComposerInput-test.js
|
||||||
test/components/views/rooms/RoomSettings-test.js
|
test/components/views/rooms/RoomSettings-test.js
|
||||||
test/mock-clock.js
|
test/mock-clock.js
|
||||||
|
|
10
.eslintrc.js
10
.eslintrc.js
|
@ -15,6 +15,9 @@ module.exports = {
|
||||||
"flowtype",
|
"flowtype",
|
||||||
"babel"
|
"babel"
|
||||||
],
|
],
|
||||||
|
globals: {
|
||||||
|
LANGUAGES_FILE: "readonly",
|
||||||
|
},
|
||||||
env: {
|
env: {
|
||||||
es6: true,
|
es6: true,
|
||||||
},
|
},
|
||||||
|
@ -42,9 +45,8 @@ module.exports = {
|
||||||
|
|
||||||
// bind or arrow function in props causes performance issues
|
// bind or arrow function in props causes performance issues
|
||||||
// (but we currently use them in some places)
|
// (but we currently use them in some places)
|
||||||
"react/jsx-no-bind": ["warn", {
|
// It's disabled here, but we should using it sparingly.
|
||||||
"ignoreRefs": true,
|
"react/jsx-no-bind": "off",
|
||||||
}],
|
|
||||||
"react/jsx-key": ["error"],
|
"react/jsx-key": ["error"],
|
||||||
|
|
||||||
// Components in JSX should always be defined.
|
// Components in JSX should always be defined.
|
||||||
|
@ -92,13 +94,13 @@ module.exports = {
|
||||||
// to JSX.
|
// to JSX.
|
||||||
ignorePattern: '^\\s*<',
|
ignorePattern: '^\\s*<',
|
||||||
ignoreComments: true,
|
ignoreComments: true,
|
||||||
|
ignoreRegExpLiterals: true,
|
||||||
code: 120,
|
code: 120,
|
||||||
}],
|
}],
|
||||||
"valid-jsdoc": ["warn"],
|
"valid-jsdoc": ["warn"],
|
||||||
"new-cap": ["warn"],
|
"new-cap": ["warn"],
|
||||||
"key-spacing": ["warn"],
|
"key-spacing": ["warn"],
|
||||||
"prefer-const": ["warn"],
|
"prefer-const": ["warn"],
|
||||||
"arrow-parens": "off",
|
|
||||||
|
|
||||||
// crashes currently: https://github.com/eslint/eslint/issues/6274
|
// crashes currently: https://github.com/eslint/eslint/issues/6274
|
||||||
"generator-star-spacing": "off",
|
"generator-star-spacing": "off",
|
||||||
|
|
9
.gitignore
vendored
9
.gitignore
vendored
|
@ -1,9 +1,11 @@
|
||||||
npm-debug.log
|
/.npmrc
|
||||||
|
/*.log
|
||||||
|
package-lock.json
|
||||||
|
|
||||||
/node_modules
|
/node_modules
|
||||||
/lib
|
/lib
|
||||||
|
|
||||||
# version file and tarball created by 'npm pack'
|
# version file and tarball created by `npm pack` / `yarn pack`
|
||||||
/git-revision.txt
|
/git-revision.txt
|
||||||
/matrix-react-sdk-*.tgz
|
/matrix-react-sdk-*.tgz
|
||||||
|
|
||||||
|
@ -14,6 +16,3 @@ npm-debug.log
|
||||||
/src/component-index.js
|
/src/component-index.js
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
# https://github.com/vector-im/riot-web/issues/7083
|
|
||||||
package-lock.json
|
|
||||||
|
|
35
.travis.yml
35
.travis.yml
|
@ -1,35 +0,0 @@
|
||||||
# we need trusty for the chrome addon
|
|
||||||
dist: trusty
|
|
||||||
|
|
||||||
# we don't need sudo, so can run in a container, which makes startup much
|
|
||||||
# quicker.
|
|
||||||
#
|
|
||||||
# unfortunately we do temporarily require sudo as a workaround for
|
|
||||||
# https://github.com/travis-ci/travis-ci/issues/8836
|
|
||||||
sudo: required
|
|
||||||
|
|
||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
- node # Latest stable version of nodejs.
|
|
||||||
addons:
|
|
||||||
chrome: stable
|
|
||||||
install:
|
|
||||||
- ./scripts/travis/install-deps.sh
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- name: Linting Checks
|
|
||||||
script:
|
|
||||||
# run the linter, but exclude any files known to have errors or warnings.
|
|
||||||
- npm run lintwithexclusions
|
|
||||||
- name: End-to-End Tests
|
|
||||||
if: branch = develop
|
|
||||||
install:
|
|
||||||
- sudo apt-get install build-essential python2.7-dev libffi-dev python-pip python-setuptools sqlite3 libssl-dev python-virtualenv libjpeg-dev libxslt1-dev
|
|
||||||
script:
|
|
||||||
- ./scripts/travis/end-to-end-tests.sh
|
|
||||||
- name: Unit Tests
|
|
||||||
script:
|
|
||||||
- ./scripts/travis/unit-tests.sh
|
|
||||||
- name: Riot-web Unit Tests
|
|
||||||
script:
|
|
||||||
- ./scripts/travis/riot-unit-tests.sh
|
|
1034
CHANGELOG.md
1034
CHANGELOG.md
File diff suppressed because it is too large
Load diff
38
README.md
38
README.md
|
@ -25,7 +25,6 @@ Developer Guide
|
||||||
|
|
||||||
Platform Targets:
|
Platform Targets:
|
||||||
* Chrome, Firefox and Safari.
|
* Chrome, Firefox and Safari.
|
||||||
* Edge should also work, but we're not testing it proactively.
|
|
||||||
* WebRTC features (VoIP and Video calling) are only available in Chrome & Firefox.
|
* WebRTC features (VoIP and Video calling) are only available in Chrome & Firefox.
|
||||||
* Mobile Web is not currently a target platform - instead please use the native
|
* Mobile Web is not currently a target platform - instead please use the native
|
||||||
iOS (https://github.com/matrix-org/matrix-ios-kit) and Android
|
iOS (https://github.com/matrix-org/matrix-ios-kit) and Android
|
||||||
|
@ -66,7 +65,7 @@ practices that anyone working with the SDK needs to be be aware of and uphold:
|
||||||
component is a view or a structure, and then a broad functional grouping
|
component is a view or a structure, and then a broad functional grouping
|
||||||
(e.g. 'rooms' here)
|
(e.g. 'rooms' here)
|
||||||
|
|
||||||
* After creating a new component you must run `npm run reskindex` to regenerate
|
* After creating a new component you must run `yarn reskindex` to regenerate
|
||||||
the `component-index.js` for the SDK (used in future for skinning)
|
the `component-index.js` for the SDK (used in future for skinning)
|
||||||
|
|
||||||
* The view's CSS file MUST have the same name (e.g. view/rooms/MessageTile.css).
|
* The view's CSS file MUST have the same name (e.g. view/rooms/MessageTile.css).
|
||||||
|
@ -131,26 +130,35 @@ for now.
|
||||||
Development
|
Development
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Ensure you have the latest stable Node JS runtime installed (v8.x is the best choice). Then check out
|
Ensure you have the latest LTS version of Node.js installed.
|
||||||
the code and pull in dependencies:
|
|
||||||
|
|
||||||
```bash
|
Using `yarn` instead of `npm` is recommended. Please see the Yarn [install
|
||||||
git clone https://github.com/matrix-org/matrix-react-sdk.git
|
guide](https://yarnpkg.com/docs/install/) if you do not have it already.
|
||||||
cd matrix-react-sdk
|
|
||||||
git checkout develop
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
`matrix-react-sdk` depends on `matrix-js-sdk`. To make use of changes in the
|
`matrix-react-sdk` depends on `matrix-js-sdk`. To make use of changes in the
|
||||||
latter and to ensure tests run against the develop branch of `matrix-js-sdk`,
|
latter and to ensure tests run against the develop branch of `matrix-js-sdk`,
|
||||||
you should run the following which will sync changes from the JS sdk here.
|
you should set up `matrix-js-sdk`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm link ../matrix-js-sdk
|
git clone https://github.com/matrix-org/matrix-js-sdk
|
||||||
|
cd matrix-js-sdk
|
||||||
|
git checkout develop
|
||||||
|
yarn link
|
||||||
|
yarn install
|
||||||
```
|
```
|
||||||
|
|
||||||
Command assumes a checked out and installed `matrix-js-sdk` folder in parent
|
Then check out `matrix-react-sdk` and pull in dependencies:
|
||||||
folder.
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/matrix-org/matrix-react-sdk
|
||||||
|
cd matrix-react-sdk
|
||||||
|
git checkout develop
|
||||||
|
yarn link matrix-js-sdk
|
||||||
|
yarn install
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [help for `yarn link`](https://yarnpkg.com/docs/cli/link) for more
|
||||||
|
details about this.
|
||||||
|
|
||||||
Running tests
|
Running tests
|
||||||
=============
|
=============
|
||||||
|
@ -158,5 +166,5 @@ Running tests
|
||||||
Ensure you've followed the above development instructions and then:
|
Ensure you've followed the above development instructions and then:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run test
|
yarn test
|
||||||
```
|
```
|
||||||
|
|
150
docs/settings.md
150
docs/settings.md
|
@ -1,11 +1,15 @@
|
||||||
# Settings Reference
|
# Settings Reference
|
||||||
|
|
||||||
This document serves as developer documentation for using "Granular Settings". Granular Settings allow users to specify different values for a setting at particular levels of interest. For example, a user may say that in a particular room they want URL previews off, but in all other rooms they want them enabled. The `SettingsStore` helps mask the complexity of dealing with the different levels and exposes easy to use getters and setters.
|
This document serves as developer documentation for using "Granular Settings". Granular Settings allow users to specify
|
||||||
|
different values for a setting at particular levels of interest. For example, a user may say that in a particular room
|
||||||
|
they want URL previews off, but in all other rooms they want them enabled. The `SettingsStore` helps mask the complexity
|
||||||
|
of dealing with the different levels and exposes easy to use getters and setters.
|
||||||
|
|
||||||
|
|
||||||
## Levels
|
## Levels
|
||||||
|
|
||||||
Granular Settings rely on a series of known levels in order to use the correct value for the scenario. These levels, in order of prioirty, are:
|
Granular Settings rely on a series of known levels in order to use the correct value for the scenario. These levels, in
|
||||||
|
order of prioirty, are:
|
||||||
* `device` - The current user's device
|
* `device` - The current user's device
|
||||||
* `room-device` - The current user's device, but only when in a specific room
|
* `room-device` - The current user's device, but only when in a specific room
|
||||||
* `room-account` - The current user's account, but only when in a specific room
|
* `room-account` - The current user's account, but only when in a specific room
|
||||||
|
@ -14,12 +18,14 @@ Granular Settings rely on a series of known levels in order to use the correct v
|
||||||
* `config` - Values are defined by `config.json`
|
* `config` - Values are defined by `config.json`
|
||||||
* `default` - The hardcoded default for the settings
|
* `default` - The hardcoded default for the settings
|
||||||
|
|
||||||
Individual settings may control which levels are appropriate for them as part of the defaults. This is often to ensure that room administrators cannot force account-only settings upon participants.
|
Individual settings may control which levels are appropriate for them as part of the defaults. This is often to ensure
|
||||||
|
that room administrators cannot force account-only settings upon participants.
|
||||||
|
|
||||||
|
|
||||||
## Settings
|
## Settings
|
||||||
|
|
||||||
Settings are the different options a user may set or experience in the application. These are pre-defined in `src/settings/Settings.js` under the `SETTINGS` constant and have the following minimum requirements:
|
Settings are the different options a user may set or experience in the application. These are pre-defined in
|
||||||
|
`src/settings/Settings.js` under the `SETTINGS` constant and have the following minimum requirements:
|
||||||
```
|
```
|
||||||
// The ID is used to reference the setting throughout the application. This must be unique.
|
// The ID is used to reference the setting throughout the application. This must be unique.
|
||||||
"theSettingId": {
|
"theSettingId": {
|
||||||
|
@ -47,13 +53,21 @@ Settings are the different options a user may set or experience in the applicati
|
||||||
|
|
||||||
### Getting values for a setting
|
### Getting values for a setting
|
||||||
|
|
||||||
After importing `SettingsStore`, simply make a call to `SettingsStore.getValue`. The `roomId` parameter should always be supplied where possible, even if the setting does not have a per-room level value. This is to ensure that the value returned is best represented in the room, particularly if the setting ever gets a per-room level in the future.
|
After importing `SettingsStore`, simply make a call to `SettingsStore.getValue`. The `roomId` parameter should always
|
||||||
|
be supplied where possible, even if the setting does not have a per-room level value. This is to ensure that the value
|
||||||
|
returned is best represented in the room, particularly if the setting ever gets a per-room level in the future.
|
||||||
|
|
||||||
In settings pages it is often desired to have the value at a particular level instead of getting the calculated value. Call `SettingsStore.getValueAt` to get the value of a setting at a particular level, and optionally make it explicitly at that level. By default `getValueAt` will traverse the tree starting at the provided level; making it explicit means it will not go beyond the provided level. When using `getValueAt`, please be sure to use `SettingLevel` to represent the target level.
|
In settings pages it is often desired to have the value at a particular level instead of getting the calculated value.
|
||||||
|
Call `SettingsStore.getValueAt` to get the value of a setting at a particular level, and optionally make it explicitly
|
||||||
|
at that level. By default `getValueAt` will traverse the tree starting at the provided level; making it explicit means
|
||||||
|
it will not go beyond the provided level. When using `getValueAt`, please be sure to use `SettingLevel` to represent the
|
||||||
|
target level.
|
||||||
|
|
||||||
### Setting values for a setting
|
### Setting values for a setting
|
||||||
|
|
||||||
Values are defined at particular levels and should be done in a safe manner. There are two checks to perform to ensure a clean save: is the level supported and can the user actually set the value. In most cases, neither should be an issue although there are circumstances where this changes. An example of a safe call is:
|
Values are defined at particular levels and should be done in a safe manner. There are two checks to perform to ensure a
|
||||||
|
clean save: is the level supported and can the user actually set the value. In most cases, neither should be an issue
|
||||||
|
although there are circumstances where this changes. An example of a safe call is:
|
||||||
```javascript
|
```javascript
|
||||||
const isSupported = SettingsStore.isLevelSupported(SettingLevel.ROOM);
|
const isSupported = SettingsStore.isLevelSupported(SettingLevel.ROOM);
|
||||||
if (isSupported) {
|
if (isSupported) {
|
||||||
|
@ -64,11 +78,13 @@ if (isSupported) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
These checks may also be performed in different areas of the application to avoid the verbose example above. For instance, the component which allows changing the setting may be hidden conditionally on the above conditions.
|
These checks may also be performed in different areas of the application to avoid the verbose example above. For
|
||||||
|
instance, the component which allows changing the setting may be hidden conditionally on the above conditions.
|
||||||
|
|
||||||
##### `SettingsFlag` component
|
##### `SettingsFlag` component
|
||||||
|
|
||||||
Where possible, the `SettingsFlag` component should be used to set simple "flip-a-bit" (true/false) settings. The `SettingsFlag` also supports simple radio button options, such as the theme the user would like to use.
|
Where possible, the `SettingsFlag` component should be used to set simple "flip-a-bit" (true/false) settings. The
|
||||||
|
`SettingsFlag` also supports simple radio button options, such as the theme the user would like to use.
|
||||||
```html
|
```html
|
||||||
<SettingsFlag name="theSettingId"
|
<SettingsFlag name="theSettingId"
|
||||||
level={SettingsLevel.ROOM}
|
level={SettingsLevel.ROOM}
|
||||||
|
@ -86,42 +102,65 @@ Where possible, the `SettingsFlag` component should be used to set simple "flip-
|
||||||
|
|
||||||
### Getting the display name for a setting
|
### Getting the display name for a setting
|
||||||
|
|
||||||
Simply call `SettingsStore.getDisplayName`. The appropriate display name will be returned and automatically translated for you. If a display name cannot be found, it will return `null`.
|
Simply call `SettingsStore.getDisplayName`. The appropriate display name will be returned and automatically translated
|
||||||
|
for you. If a display name cannot be found, it will return `null`.
|
||||||
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
Occasionally some parts of the application may be undergoing testing and are not quite production ready. These are commonly known to be behind a "labs flag". Features behind lab flags must go through the granular settings system, and look and act very much normal settings. The exception is that they must supply `isFeature: true` as part of the setting definition and should go through the helper functions on `SettingsStore`.
|
Occasionally some parts of the application may be undergoing testing and are not quite production ready. These are
|
||||||
|
commonly known to be behind a "labs flag". Features behind lab flags must go through the granular settings system, and
|
||||||
|
look and act very much normal settings. The exception is that they must supply `isFeature: true` as part of the setting
|
||||||
|
definition and should go through the helper functions on `SettingsStore`.
|
||||||
|
|
||||||
Although features have levels and a default value, the calculation of those options is blocked by the feature's state. A feature's state is determined from the `SdkConfig` and is a little complex. If `enableLabs` (a legacy flag) is `true` then the feature's state is `labs`, if it is `false`, the state is `disable`. If `enableLabs` is not set then the state is determined from the `features` config, such as in the following:
|
Although features have levels and a default value, the calculation of those options is blocked by the feature's state.
|
||||||
|
A feature's state is determined from the `SdkConfig` and is a little complex. If `enableLabs` (a legacy flag) is `true`
|
||||||
|
then the feature's state is `labs`, if it is `false`, the state is `disable`. If `enableLabs` is not set then the state
|
||||||
|
is determined from the `features` config, such as in the following:
|
||||||
```json
|
```json
|
||||||
"features": {
|
"features": {
|
||||||
"feature_lazyloading": "labs"
|
"feature_lazyloading": "labs"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
In this example, `feature_lazyloading` is in the `labs` state. It may also be in the `enable` or `disable` state with a similar approach. If the state is invalid, the feature is in the `disable` state. A feature's levels are only calculated if it is in the `labs` state, therefore the default only applies in that scenario. If the state is `enable`, the feature is always-on.
|
In this example, `feature_lazyloading` is in the `labs` state. It may also be in the `enable` or `disable` state with a
|
||||||
|
similar approach. If the state is invalid, the feature is in the `disable` state. A feature's levels are only calculated
|
||||||
|
if it is in the `labs` state, therefore the default only applies in that scenario. If the state is `enable`, the feature
|
||||||
|
is always-on.
|
||||||
|
|
||||||
Once a feature flag has served its purpose, it is generally recommended to remove it and the associated feature flag checks. This would enable the feature implicitly as it is part of the application now.
|
Once a feature flag has served its purpose, it is generally recommended to remove it and the associated feature flag
|
||||||
|
checks. This would enable the feature implicitly as it is part of the application now.
|
||||||
|
|
||||||
### Determining if a feature is enabled
|
### Determining if a feature is enabled
|
||||||
|
|
||||||
A simple call to `SettingsStore.isFeatureEnabled` will tell you if the feature is enabled. This will perform all the required calculations to determine if the feature is enabled based upon the configuration and user selection.
|
A simple call to `SettingsStore.isFeatureEnabled` will tell you if the feature is enabled. This will perform all the
|
||||||
|
required calculations to determine if the feature is enabled based upon the configuration and user selection.
|
||||||
|
|
||||||
### Enabling a feature
|
### Enabling a feature
|
||||||
|
|
||||||
Features can only be enabled if the feature is in the `labs` state, otherwise this is a no-op. To find the current set of features in the `labs` state, call `SettingsStore.getLabsFeatures`. To set the value, call `SettingsStore.setFeatureEnabled`.
|
Features can only be enabled if the feature is in the `labs` state, otherwise this is a no-op. To find the current set
|
||||||
|
of features in the `labs` state, call `SettingsStore.getLabsFeatures`. To set the value, call
|
||||||
|
`SettingsStore.setFeatureEnabled`.
|
||||||
|
|
||||||
|
|
||||||
## Setting controllers
|
## Setting controllers
|
||||||
|
|
||||||
Settings may have environmental factors that affect their value or need additional code to be called when they are modified. A setting controller is able to override the calculated value for a setting and react to changes in that setting. Controllers are not a replacement for the level handlers and should only be used to ensure the environment is kept up to date with the setting where it is otherwise not possible. An example of this is the notification settings: they can only be considered enabled if the platform supports notifications, and enabling notifications requires additional steps to actually enable notifications.
|
Settings may have environmental factors that affect their value or need additional code to be called when they are
|
||||||
|
modified. A setting controller is able to override the calculated value for a setting and react to changes in that
|
||||||
|
setting. Controllers are not a replacement for the level handlers and should only be used to ensure the environment is
|
||||||
|
kept up to date with the setting where it is otherwise not possible. An example of this is the notification settings:
|
||||||
|
they can only be considered enabled if the platform supports notifications, and enabling notifications requires
|
||||||
|
additional steps to actually enable notifications.
|
||||||
|
|
||||||
For more information, see `src/settings/controllers/SettingController.js`.
|
For more information, see `src/settings/controllers/SettingController.js`.
|
||||||
|
|
||||||
|
|
||||||
## Local echo
|
## Local echo
|
||||||
|
|
||||||
`SettingsStore` will perform local echo on all settings to ensure that immediately getting values does not cause a split-brain scenario. As mentioned in the "Setting values for a setting" section, the appropriate checks should be done to ensure that the user is allowed to set the value. The local echo system assumes that the user has permission and that the request will go through successfully. The local echo only takes effect until the request to save a setting has completed (either successfully or otherwise).
|
`SettingsStore` will perform local echo on all settings to ensure that immediately getting values does not cause a
|
||||||
|
split-brain scenario. As mentioned in the "Setting values for a setting" section, the appropriate checks should be done
|
||||||
|
to ensure that the user is allowed to set the value. The local echo system assumes that the user has permission and that
|
||||||
|
the request will go through successfully. The local echo only takes effect until the request to save a setting has
|
||||||
|
completed (either successfully or otherwise).
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
SettingsStore.setValue(...).then(() => {
|
SettingsStore.setValue(...).then(() => {
|
||||||
|
@ -131,24 +170,69 @@ SettingsStore.getValue(...); // this will return the value set in `setValue` abo
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Watching for changes
|
||||||
|
|
||||||
|
Most use cases do not need to set up a watcher because they are able to react to changes as they are made, or the
|
||||||
|
changes which are made are not significant enough for it to matter. Watchers are intended to be used in scenarios where
|
||||||
|
it is important to react to changes made by other logged in devices. Typically, this would be done within the component
|
||||||
|
itself, however the component should not be aware of the intricacies of setting inversion or remapping to particular
|
||||||
|
data structures. Instead, a generic watcher interface is provided on `SettingsStore` to watch (and subsequently unwatch)
|
||||||
|
for changes in a setting.
|
||||||
|
|
||||||
|
An example of a watcher in action would be:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
class MyComponent extends React.Component {
|
||||||
|
|
||||||
|
settingWatcherRef = null;
|
||||||
|
|
||||||
|
componentWillMount() {
|
||||||
|
const callback = (settingName, roomId, level, newValAtLevel, newVal) => {
|
||||||
|
this.setState({color: newVal});
|
||||||
|
};
|
||||||
|
this.settingWatcherRef = SettingsStore.watchSetting("roomColor", "!example:matrix.org", callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUnmount() {
|
||||||
|
SettingsStore.unwatchSetting(this.settingWatcherRef);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
# Maintainers Reference
|
# Maintainers Reference
|
||||||
|
|
||||||
The granular settings system has a few complex parts to power it. This section is to document how the `SettingsStore` is supposed to work.
|
The granular settings system has a few complex parts to power it. This section is to document how the `SettingsStore` is
|
||||||
|
supposed to work.
|
||||||
|
|
||||||
### General information
|
### General information
|
||||||
|
|
||||||
The `SettingsStore` uses the hardcoded `LEVEL_ORDER` constant to ensure that it is using the correct override procedure. The array is checked from left to right, simulating the behaviour of overriding values from the higher levels. Each level should be defined in this array, including `default`.
|
The `SettingsStore` uses the hardcoded `LEVEL_ORDER` constant to ensure that it is using the correct override procedure.
|
||||||
|
The array is checked from left to right, simulating the behaviour of overriding values from the higher levels. Each
|
||||||
|
level should be defined in this array, including `default`.
|
||||||
|
|
||||||
Handlers (`src/settings/handlers/SettingsHandler.js`) represent a single level and are responsible for getting and setting values at that level. Handlers also provide additional information to the `SettingsStore` such as if the level is supported or if the current user may set values at the level. The `SettingsStore` will use the handler to enforce checks and manipulate settings. Handlers are also responsible for dealing with migration patterns or legacy settings for their level (for example, a setting being renamed or using a different key from other settings in the underlying store). Handlers are provided to the `SettingsStore` via the `LEVEL_HANDLERS` constant. `SettingsStore` will optimize lookups by only considering handlers that are supported on the platform.
|
Handlers (`src/settings/handlers/SettingsHandler.js`) represent a single level and are responsible for getting and
|
||||||
|
setting values at that level. Handlers also provide additional information to the `SettingsStore` such as if the level
|
||||||
|
is supported or if the current user may set values at the level. The `SettingsStore` will use the handler to enforce
|
||||||
|
checks and manipulate settings. Handlers are also responsible for dealing with migration patterns or legacy settings for
|
||||||
|
their level (for example, a setting being renamed or using a different key from other settings in the underlying store).
|
||||||
|
Handlers are provided to the `SettingsStore` via the `LEVEL_HANDLERS` constant. `SettingsStore` will optimize lookups by
|
||||||
|
only considering handlers that are supported on the platform.
|
||||||
|
|
||||||
Local echo is achieved through `src/settings/handlers/LocalEchoWrapper.js` which acts as a wrapper around a given handler. This is automatically applied to all defined `LEVEL_HANDLERS` and proxies the calls to the wrapped handler where possible. The echo is achieved by a simple object cache stored within the class itself. The cache is invalidated immediately upon the proxied save call succeeding or failing.
|
Local echo is achieved through `src/settings/handlers/LocalEchoWrapper.js` which acts as a wrapper around a given
|
||||||
|
handler. This is automatically applied to all defined `LEVEL_HANDLERS` and proxies the calls to the wrapped handler
|
||||||
|
where possible. The echo is achieved by a simple object cache stored within the class itself. The cache is invalidated
|
||||||
|
immediately upon the proxied save call succeeding or failing.
|
||||||
|
|
||||||
Controllers are notified of changes by the `SettingsStore`, and are given the opportunity to override values after the `SettingsStore` has deemed the value calculated. Controllers are invoked as the last possible step in the code.
|
Controllers are notified of changes by the `SettingsStore`, and are given the opportunity to override values after the
|
||||||
|
`SettingsStore` has deemed the value calculated. Controllers are invoked as the last possible step in the code.
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
Features automatically get considered as `disabled` if they are not listed in the `SdkConfig` or `enable_labs` is false/not set. Features are always checked against the configuration before going through the level order as they have the option of being forced-on or forced-off for the application. This is done by the `features` section and looks something like this:
|
Features automatically get considered as `disabled` if they are not listed in the `SdkConfig` or `enable_labs` is
|
||||||
|
false/not set. Features are always checked against the configuration before going through the level order as they have
|
||||||
|
the option of being forced-on or forced-off for the application. This is done by the `features` section and looks
|
||||||
|
something like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
"features": {
|
"features": {
|
||||||
|
@ -159,3 +243,21 @@ Features automatically get considered as `disabled` if they are not listed in th
|
||||||
```
|
```
|
||||||
|
|
||||||
If `enableLabs` is true in the configuration, the default for features becomes `"labs"`.
|
If `enableLabs` is true in the configuration, the default for features becomes `"labs"`.
|
||||||
|
|
||||||
|
### Watchers
|
||||||
|
|
||||||
|
Watchers can appear complicated under the hood: there is a central `WatchManager` which handles the actual invocation
|
||||||
|
of callbacks, and callbacks are managed by the SettingsStore by redirecting the caller's callback to a dedicated
|
||||||
|
callback. This is done so that the caller can reuse the same function as their callback without worrying about whether
|
||||||
|
or not it'll unsubscribe all watchers.
|
||||||
|
|
||||||
|
Setting changes are emitted into the default `WatchManager`, which calculates the new value for the setting. Ideally,
|
||||||
|
we'd also try and suppress updates which don't have a consequence on this value, however there's not an easy way to do
|
||||||
|
this. Instead, we just dispatch an update for all changes and leave it up to the consumer to deduplicate.
|
||||||
|
|
||||||
|
In practice, handlers which rely on remote changes (account data, room events, etc) will always attach a listener to the
|
||||||
|
`MatrixClient`. They then watch for changes to events they care about and send off appropriate updates to the
|
||||||
|
generalized `WatchManager` - a class specifically designed to deduplicate the logic of managing watchers. The handlers
|
||||||
|
which are localized to the local client (device) generally just trigger the `WatchManager` when they manipulate the
|
||||||
|
setting themselves as there's nothing to really 'watch'.
|
||||||
|
|
24
jenkins.sh
24
jenkins.sh
|
@ -8,25 +8,29 @@ nvm use 10
|
||||||
|
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
# install the other dependencies
|
|
||||||
npm install
|
|
||||||
|
|
||||||
scripts/fetchdep.sh matrix-org matrix-js-sdk
|
scripts/fetchdep.sh matrix-org matrix-js-sdk
|
||||||
rm -r node_modules/matrix-js-sdk || true
|
|
||||||
ln -s ../matrix-js-sdk node_modules/matrix-js-sdk
|
pushd matrix-js-sdk
|
||||||
(cd matrix-js-sdk && npm install)
|
yarn link
|
||||||
|
yarn install
|
||||||
|
popd
|
||||||
|
|
||||||
|
yarn link matrix-js-sdk
|
||||||
|
|
||||||
|
# install the other dependencies
|
||||||
|
yarn install
|
||||||
|
|
||||||
# run the mocha tests
|
# run the mocha tests
|
||||||
npm run test -- --no-colors
|
yarn test --no-colors
|
||||||
|
|
||||||
# run eslint
|
# run eslint
|
||||||
npm run lintall -- -f checkstyle -o eslint.xml || true
|
yarn lintall -f checkstyle -o eslint.xml || true
|
||||||
|
|
||||||
# re-run the linter, excluding any files known to have errors or warnings.
|
# re-run the linter, excluding any files known to have errors or warnings.
|
||||||
npm run lintwithexclusions
|
yarn lintwithexclusions
|
||||||
|
|
||||||
# delete the old tarball, if it exists
|
# delete the old tarball, if it exists
|
||||||
rm -f matrix-react-sdk-*.tgz
|
rm -f matrix-react-sdk-*.tgz
|
||||||
|
|
||||||
# build our tarball
|
# build our tarball
|
||||||
npm pack
|
yarn pack
|
||||||
|
|
|
@ -8,7 +8,7 @@ var fs = require('fs');
|
||||||
* to build everything; however it's the easiest way to load our dependencies
|
* to build everything; however it's the easiest way to load our dependencies
|
||||||
* from node_modules.
|
* from node_modules.
|
||||||
*
|
*
|
||||||
* If you run karma in multi-run mode (with `npm run test-multi`), it will watch
|
* If you run karma in multi-run mode (with `yarn test-multi`), it will watch
|
||||||
* the tests for changes, and webpack will rebuild using a cache. This is much quicker
|
* the tests for changes, and webpack will rebuild using a cache. This is much quicker
|
||||||
* than a clean rebuild.
|
* than a clean rebuild.
|
||||||
*/
|
*/
|
||||||
|
@ -35,7 +35,7 @@ function fileExists(name) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// try find the gemini-scrollbar css in an npm-version-agnostic way
|
// try find the gemini-scrollbar css in an version-agnostic way
|
||||||
var gsCss = 'node_modules/gemini-scrollbar/gemini-scrollbar.css';
|
var gsCss = 'node_modules/gemini-scrollbar/gemini-scrollbar.css';
|
||||||
if (!fileExists(gsCss)) {
|
if (!fileExists(gsCss)) {
|
||||||
gsCss = 'node_modules/react-gemini-scrollbar/'+gsCss;
|
gsCss = 'node_modules/react-gemini-scrollbar/'+gsCss;
|
||||||
|
@ -135,9 +135,10 @@ module.exports = function (config) {
|
||||||
],
|
],
|
||||||
|
|
||||||
customLaunchers: {
|
customLaunchers: {
|
||||||
'ChromeHeadless': {
|
'VectorChromeHeadless': {
|
||||||
base: 'Chrome',
|
base: 'Chrome',
|
||||||
flags: [
|
flags: [
|
||||||
|
'--no-sandbox',
|
||||||
// See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
|
// See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
|
||||||
'--headless',
|
'--headless',
|
||||||
'--disable-gpu',
|
'--disable-gpu',
|
||||||
|
@ -168,6 +169,10 @@ module.exports = function (config) {
|
||||||
path.resolve('./test'),
|
path.resolve('./test'),
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
test: /\.(gif|png|svg|ttf)$/,
|
||||||
|
loader: 'file-loader',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
noParse: [
|
noParse: [
|
||||||
// for cross platform compatibility use [\\\/] as the path separator
|
// for cross platform compatibility use [\\\/] as the path separator
|
||||||
|
@ -194,7 +199,7 @@ module.exports = function (config) {
|
||||||
alias: {
|
alias: {
|
||||||
// alias any requires to the react module to the one in our
|
// alias any requires to the react module to the one in our
|
||||||
// path, otherwise we tend to get the react source included
|
// path, otherwise we tend to get the react source included
|
||||||
// twice when using npm link.
|
// twice when using `npm link` / `yarn link`.
|
||||||
react: path.resolve('./node_modules/react'),
|
react: path.resolve('./node_modules/react'),
|
||||||
|
|
||||||
'matrix-react-sdk': path.resolve('test/skinned-sdk.js'),
|
'matrix-react-sdk': path.resolve('test/skinned-sdk.js'),
|
||||||
|
|
36
package.json
36
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "matrix-react-sdk",
|
"name": "matrix-react-sdk",
|
||||||
"version": "0.14.7",
|
"version": "1.0.6",
|
||||||
"description": "SDK for matrix.org using React",
|
"description": "SDK for matrix.org using React",
|
||||||
"author": "matrix.org",
|
"author": "matrix.org",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -37,20 +37,21 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"reskindex": "node scripts/reskindex.js -h header",
|
"reskindex": "node scripts/reskindex.js -h header",
|
||||||
"reskindex:watch": "node scripts/reskindex.js -h header -w",
|
"reskindex:watch": "node scripts/reskindex.js -h header -w",
|
||||||
|
"rethemendex": "res/css/rethemendex.sh",
|
||||||
"i18n": "matrix-gen-i18n",
|
"i18n": "matrix-gen-i18n",
|
||||||
"prunei18n": "matrix-prune-i18n",
|
"prunei18n": "matrix-prune-i18n",
|
||||||
"build": "npm run reskindex && npm run start:init",
|
"build": "yarn reskindex && yarn start:init",
|
||||||
"build:watch": "babel src -w --skip-initial-build -d lib --source-maps --copy-files",
|
"build:watch": "babel src -w --skip-initial-build -d lib --source-maps --copy-files",
|
||||||
"emoji-data-strip": "node scripts/emoji-data-strip.js",
|
"emoji-data-strip": "node scripts/emoji-data-strip.js",
|
||||||
"start": "npm run start:init && npm run start:all",
|
"start": "yarn start:init && yarn start:all",
|
||||||
"start:all": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n build,reskindex \"npm run build:watch\" \"npm run reskindex:watch\"",
|
"start:all": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n build,reskindex \"yarn build:watch\" \"yarn reskindex:watch\"",
|
||||||
"start:init": "babel src -d lib --source-maps --copy-files",
|
"start:init": "babel src -d lib --source-maps --copy-files",
|
||||||
"lint": "eslint src/",
|
"lint": "eslint src/",
|
||||||
"lintall": "eslint src/ test/",
|
"lintall": "eslint src/ test/",
|
||||||
"lintwithexclusions": "eslint --max-warnings 18 --ignore-path .eslintignore.errorfiles src test",
|
"lintwithexclusions": "eslint --max-warnings 0 --ignore-path .eslintignore.errorfiles src test",
|
||||||
"clean": "rimraf lib",
|
"clean": "rimraf lib",
|
||||||
"prepublish": "npm run clean && npm run build && git rev-parse HEAD > git-revision.txt",
|
"prepare": "yarn clean && yarn build && git rev-parse HEAD > git-revision.txt",
|
||||||
"test": "karma start --single-run=true --browsers ChromeHeadless",
|
"test": "karma start --single-run=true --browsers VectorChromeHeadless",
|
||||||
"test-multi": "karma start"
|
"test-multi": "karma start"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -72,18 +73,19 @@
|
||||||
"gemini-scrollbar": "github:matrix-org/gemini-scrollbar#b302279",
|
"gemini-scrollbar": "github:matrix-org/gemini-scrollbar#b302279",
|
||||||
"gfm.css": "^1.1.1",
|
"gfm.css": "^1.1.1",
|
||||||
"glob": "^5.0.14",
|
"glob": "^5.0.14",
|
||||||
"highlight.js": "^9.13.0",
|
"highlight.js": "9.14.2",
|
||||||
"is-ip": "^2.0.0",
|
"is-ip": "^2.0.0",
|
||||||
"isomorphic-fetch": "^2.2.1",
|
"isomorphic-fetch": "^2.2.1",
|
||||||
"linkifyjs": "^2.1.6",
|
"linkifyjs": "^2.1.6",
|
||||||
"lodash": "^4.13.1",
|
"lodash": "^4.13.1",
|
||||||
"lolex": "2.3.2",
|
"lolex": "2.3.2",
|
||||||
"matrix-js-sdk": "0.14.2",
|
"matrix-js-sdk": "1.0.3",
|
||||||
"optimist": "^0.6.1",
|
"optimist": "^0.6.1",
|
||||||
"pako": "^1.0.5",
|
"pako": "^1.0.5",
|
||||||
"png-chunks-extract": "^1.0.0",
|
"png-chunks-extract": "^1.0.0",
|
||||||
"prop-types": "^15.5.8",
|
"prop-types": "^15.5.8",
|
||||||
"qrcode-react": "^0.1.16",
|
"qrcode-react": "^0.1.16",
|
||||||
|
"qs": "^6.6.0",
|
||||||
"querystring": "^0.2.0",
|
"querystring": "^0.2.0",
|
||||||
"react": "^15.6.0",
|
"react": "^15.6.0",
|
||||||
"react-addons-css-transition-group": "15.3.2",
|
"react-addons-css-transition-group": "15.3.2",
|
||||||
|
@ -98,7 +100,7 @@
|
||||||
"slate-react": "^0.18.10",
|
"slate-react": "^0.18.10",
|
||||||
"text-encoding-utf-8": "^1.0.1",
|
"text-encoding-utf-8": "^1.0.1",
|
||||||
"url": "^0.11.0",
|
"url": "^0.11.0",
|
||||||
"velocity-vector": "github:vector-im/velocity#059e3b2",
|
"velocity-animate": "^1.5.2",
|
||||||
"whatwg-fetch": "^1.1.1",
|
"whatwg-fetch": "^1.1.1",
|
||||||
"zxcvbn": "^4.4.2"
|
"zxcvbn": "^4.4.2"
|
||||||
},
|
},
|
||||||
|
@ -109,6 +111,7 @@
|
||||||
"babel-loader": "^7.1.5",
|
"babel-loader": "^7.1.5",
|
||||||
"babel-plugin-add-module-exports": "^0.2.1",
|
"babel-plugin-add-module-exports": "^0.2.1",
|
||||||
"babel-plugin-transform-async-to-bluebird": "^1.1.1",
|
"babel-plugin-transform-async-to-bluebird": "^1.1.1",
|
||||||
|
"babel-plugin-transform-builtin-extend": "^1.1.2",
|
||||||
"babel-plugin-transform-class-properties": "^6.24.1",
|
"babel-plugin-transform-class-properties": "^6.24.1",
|
||||||
"babel-plugin-transform-object-rest-spread": "^6.26.0",
|
"babel-plugin-transform-object-rest-spread": "^6.26.0",
|
||||||
"babel-plugin-transform-runtime": "^6.23.0",
|
"babel-plugin-transform-runtime": "^6.23.0",
|
||||||
|
@ -117,7 +120,7 @@
|
||||||
"babel-preset-es2016": "^6.24.1",
|
"babel-preset-es2016": "^6.24.1",
|
||||||
"babel-preset-es2017": "^6.24.1",
|
"babel-preset-es2017": "^6.24.1",
|
||||||
"babel-preset-react": "^6.24.1",
|
"babel-preset-react": "^6.24.1",
|
||||||
"chokidar": "^1.6.1",
|
"chokidar": "^2.1.2",
|
||||||
"concurrently": "^4.0.1",
|
"concurrently": "^4.0.1",
|
||||||
"eslint": "^5.12.0",
|
"eslint": "^5.12.0",
|
||||||
"eslint-config-google": "^0.7.1",
|
"eslint-config-google": "^0.7.1",
|
||||||
|
@ -125,20 +128,21 @@
|
||||||
"eslint-plugin-flowtype": "^2.30.0",
|
"eslint-plugin-flowtype": "^2.30.0",
|
||||||
"eslint-plugin-react": "^7.7.0",
|
"eslint-plugin-react": "^7.7.0",
|
||||||
"estree-walker": "^0.5.0",
|
"estree-walker": "^0.5.0",
|
||||||
"expect": "^23.6.0",
|
"expect": "^24.1.0",
|
||||||
|
"file-loader": "^3.0.1",
|
||||||
"flow-parser": "^0.57.3",
|
"flow-parser": "^0.57.3",
|
||||||
"jest-mock": "^23.2.0",
|
"jest-mock": "^23.2.0",
|
||||||
"karma": "^3.0.0",
|
"karma": "^4.0.1",
|
||||||
"karma-chrome-launcher": "^0.2.3",
|
"karma-chrome-launcher": "^2.2.0",
|
||||||
"karma-cli": "^1.0.1",
|
"karma-cli": "^1.0.1",
|
||||||
"karma-junit-reporter": "^0.4.2",
|
"karma-junit-reporter": "^2.0.0",
|
||||||
"karma-logcapture-reporter": "0.0.1",
|
"karma-logcapture-reporter": "0.0.1",
|
||||||
"karma-mocha": "^1.3.0",
|
"karma-mocha": "^1.3.0",
|
||||||
"karma-sourcemap-loader": "^0.3.7",
|
"karma-sourcemap-loader": "^0.3.7",
|
||||||
"karma-spec-reporter": "^0.0.31",
|
"karma-spec-reporter": "^0.0.31",
|
||||||
"karma-summary-reporter": "^1.5.1",
|
"karma-summary-reporter": "^1.5.1",
|
||||||
"karma-webpack": "^4.0.0-beta.0",
|
"karma-webpack": "^4.0.0-beta.0",
|
||||||
"matrix-mock-request": "^1.2.1",
|
"matrix-mock-request": "^1.2.3",
|
||||||
"matrix-react-test-utils": "^0.1.1",
|
"matrix-react-test-utils": "^0.1.1",
|
||||||
"mocha": "^5.0.5",
|
"mocha": "^5.0.5",
|
||||||
"react-addons-test-utils": "^15.4.0",
|
"react-addons-test-utils": "^15.4.0",
|
||||||
|
|
|
@ -50,8 +50,47 @@ a:visited {
|
||||||
color: $accent-color-alt;
|
color: $accent-color-alt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input[type=text],
|
||||||
|
input[type=search],
|
||||||
|
input[type=password] {
|
||||||
|
padding: 9px;
|
||||||
|
font-family: $font-family;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=text].mx_textinput_icon,
|
||||||
|
input[type=search].mx_textinput_icon {
|
||||||
|
padding-left: 36px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 10px center;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME THEME - Tint by CSS rather than referencing a duplicate asset
|
||||||
|
input[type=text].mx_textinput_icon.mx_textinput_search,
|
||||||
|
input[type=search].mx_textinput_icon.mx_textinput_search {
|
||||||
|
background-image: url('$(res)/img/feather-customised/search-input.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
// dont search UI as not all browsers support it,
|
||||||
|
// we implement it ourselves where needed instead
|
||||||
|
input[type=search]::-webkit-search-decoration,
|
||||||
|
input[type=search]::-webkit-search-cancel-button,
|
||||||
|
input[type=search]::-webkit-search-results-button,
|
||||||
|
input[type=search]::-webkit-search-results-decoration {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override Firefox's UA style so we get a consistent look across browsers
|
||||||
|
input::placeholder,
|
||||||
|
textarea::placeholder {
|
||||||
|
opacity: initial;
|
||||||
|
}
|
||||||
|
|
||||||
input[type=text], input[type=password], textarea {
|
input[type=text], input[type=password], textarea {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
|
color: $primary-fg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=text]:focus, input[type=password]:focus, textarea:focus {
|
input[type=text]:focus, input[type=password]:focus, textarea:focus {
|
||||||
|
@ -62,6 +101,72 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus {
|
||||||
/* Required by Firefox */
|
/* Required by Firefox */
|
||||||
textarea {
|
textarea {
|
||||||
font-family: $font-family;
|
font-family: $font-family;
|
||||||
|
color: $primary-fg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// .mx_textinput is a container for a text input
|
||||||
|
// + some other controls like buttons, ...
|
||||||
|
// it has the appearance of a text box so the controls
|
||||||
|
// appear to be part of the input
|
||||||
|
|
||||||
|
.mx_Dialog, .mx_MatrixChat {
|
||||||
|
:not(.mx_textinput):not(.mx_Field):not(.mx_no_textinput) > input[type=text],
|
||||||
|
:not(.mx_textinput):not(.mx_Field):not(.mx_no_textinput) > input[type=search],
|
||||||
|
.mx_textinput {
|
||||||
|
display: block;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background-color: transparent;
|
||||||
|
color: $input-darker-fg-color;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: 1px solid #c1c1c1;
|
||||||
|
// these things should probably not be defined
|
||||||
|
// globally
|
||||||
|
margin: 9px;
|
||||||
|
flex: 0 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_textinput {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
> input[type=text],
|
||||||
|
> input[type=search] {
|
||||||
|
border: none;
|
||||||
|
flex: 1;
|
||||||
|
color: $primary-fg-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(.mx_textinput):not(.mx_Field):not(.mx_no_textinput) > input[type=text]::placeholder,
|
||||||
|
:not(.mx_textinput):not(.mx_Field):not(.mx_no_textinput) > input[type=search]::placeholder,
|
||||||
|
.mx_textinput input::placeholder {
|
||||||
|
color: $roomsublist-label-fg-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** panels ***/
|
||||||
|
.dark-panel {
|
||||||
|
background-color: $dark-panel-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark-panel {
|
||||||
|
:not(.mx_textinput):not(.mx_Field):not(.mx_no_textinput) > input[type=text],
|
||||||
|
:not(.mx_textinput):not(.mx_Field):not(.mx_no_textinput) > input[type=search],
|
||||||
|
.mx_textinput {
|
||||||
|
color: $input-darker-fg-color;
|
||||||
|
background-color: $input-darker-bg-color;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.light-panel {
|
||||||
|
:not(.mx_textinput):not(.mx_Field):not(.mx_no_textinput) > input[type=text],
|
||||||
|
:not(.mx_textinput):not(.mx_Field):not(.mx_no_textinput) > input[type=search],
|
||||||
|
.mx_textinput {
|
||||||
|
color: $input-lighter-fg-color;
|
||||||
|
background-color: $input-lighter-bg-color;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prevent ugly dotted highlight around selected elements in Firefox */
|
/* Prevent ugly dotted highlight around selected elements in Firefox */
|
||||||
|
@ -123,6 +228,17 @@ textarea {
|
||||||
color: $roomsublist-label-bg-color;
|
color: $roomsublist-label-bg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Expected z-indexes for dialogs:
|
||||||
|
4000 - Default wrapper index
|
||||||
|
4009 - Static dialog background
|
||||||
|
4010 - Static dialog itself
|
||||||
|
4011 - Standard dialog background
|
||||||
|
4012 - Standard dialog itself
|
||||||
|
|
||||||
|
These are set up such that the static dialog always appears
|
||||||
|
underneath the standard dialogs.
|
||||||
|
*/
|
||||||
|
|
||||||
.mx_Dialog_wrapper {
|
.mx_Dialog_wrapper {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 4000;
|
z-index: 4000;
|
||||||
|
@ -144,35 +260,44 @@ textarea {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* View Source Dialog overide */
|
|
||||||
.mx_Dialog_wrapper.mx_Dialog_viewsource .mx_Dialog {
|
|
||||||
padding-left: 10px;
|
|
||||||
padding-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Dialog {
|
.mx_Dialog {
|
||||||
background-color: $primary-bg-color;
|
background-color: $primary-bg-color;
|
||||||
color: $light-fg-color;
|
color: $light-fg-color;
|
||||||
z-index: 4010;
|
z-index: 4012;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 0 58px 36px;
|
padding: 40px 58px 36px 58px;
|
||||||
width: 60%;
|
width: 60%;
|
||||||
max-width: 704px;
|
max-width: 704px;
|
||||||
box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2);
|
box-shadow: 2px 15px 30px 0 $dialog-shadow-color;
|
||||||
max-height: 80%;
|
max-height: 80%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_Dialog_staticWrapper .mx_Dialog {
|
||||||
|
z-index: 4010;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_Dialog_background {
|
.mx_Dialog_background {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-color: $dialog-background-bg-color;
|
background-color: $dialog-backdrop-color;
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
|
z-index: 4011;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Dialog_background.mx_Dialog_staticBackground {
|
||||||
|
z-index: 4009;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Dialog_wrapperWithStaticUnder .mx_Dialog_background {
|
||||||
|
// Roughly half of what it would normally be - we don't want to black out
|
||||||
|
// the app, just make it clear that the dialogs are stacked.
|
||||||
|
opacity: 0.4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dialog_lightbox .mx_Dialog_background {
|
.mx_Dialog_lightbox .mx_Dialog_background {
|
||||||
|
@ -190,15 +315,36 @@ textarea {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dialog_cancelButton {
|
.mx_Dialog_header {
|
||||||
position: absolute;
|
position: relative;
|
||||||
right: 11px;
|
|
||||||
top: 13px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dialog_cancelButton object {
|
.mx_Dialog_title {
|
||||||
pointer-events: none;
|
font-weight: bold;
|
||||||
|
font-size: 22px;
|
||||||
|
line-height: 36px;
|
||||||
|
color: $primary-fg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Dialog_header.mx_Dialog_headerWithButton > .mx_Dialog_title {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Dialog_title.danger {
|
||||||
|
color: $warning-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Dialog_cancelButton {
|
||||||
|
mask: url('$(res)/img/feather-customised/cancel.svg');
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center;
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
background-color: $primary-fg-color;
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
right: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dialog_content {
|
.mx_Dialog_content {
|
||||||
|
@ -221,7 +367,7 @@ textarea {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
border: 1px solid $accent-color ! important;
|
border: 1px solid $accent-color ! important;
|
||||||
color: $accent-color;
|
color: $accent-color;
|
||||||
background-color: $accent-fg-color;
|
background-color: $button-secondary-bg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dialog button:hover, .mx_Dialog input[type="submit"]:hover {
|
.mx_Dialog button:hover, .mx_Dialog input[type="submit"]:hover {
|
||||||
|
@ -249,24 +395,25 @@ textarea {
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Review mx_GeneralButton usage to see if it can use a different class
|
||||||
|
// These classes were brought in from the old UserSettings and are included here to avoid
|
||||||
|
// breaking the app.
|
||||||
|
// Ref: https://github.com/vector-im/riot-web/issues/8420
|
||||||
|
.mx_GeneralButton {
|
||||||
|
@mixin mx_DialogButton;
|
||||||
|
display: inline;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GeneralButton:hover {
|
||||||
|
@mixin mx_DialogButton_hover;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_linkButton {
|
.mx_linkButton {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: $accent-color;
|
color: $accent-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dialog_title {
|
|
||||||
min-height: 16px;
|
|
||||||
padding-top: 40px;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 22px;
|
|
||||||
line-height: 1.4;
|
|
||||||
color: $primary-fg-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Dialog_title.danger {
|
|
||||||
color: $warning-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_TextInputDialog_label {
|
.mx_TextInputDialog_label {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
padding-bottom: 12px;
|
padding-bottom: 12px;
|
||||||
|
|
|
@ -4,12 +4,13 @@
|
||||||
@import "./structures/_CompatibilityPage.scss";
|
@import "./structures/_CompatibilityPage.scss";
|
||||||
@import "./structures/_ContextualMenu.scss";
|
@import "./structures/_ContextualMenu.scss";
|
||||||
@import "./structures/_CreateRoom.scss";
|
@import "./structures/_CreateRoom.scss";
|
||||||
|
@import "./structures/_CustomRoomTagPanel.scss";
|
||||||
@import "./structures/_FilePanel.scss";
|
@import "./structures/_FilePanel.scss";
|
||||||
@import "./structures/_GroupGridView.scss";
|
|
||||||
@import "./structures/_GroupView.scss";
|
@import "./structures/_GroupView.scss";
|
||||||
|
@import "./structures/_HeaderButtons.scss";
|
||||||
@import "./structures/_HomePage.scss";
|
@import "./structures/_HomePage.scss";
|
||||||
@import "./structures/_LeftPanel.scss";
|
@import "./structures/_LeftPanel.scss";
|
||||||
@import "./structures/_LoginBox.scss";
|
@import "./structures/_MainSplit.scss";
|
||||||
@import "./structures/_MatrixChat.scss";
|
@import "./structures/_MatrixChat.scss";
|
||||||
@import "./structures/_MyGroups.scss";
|
@import "./structures/_MyGroups.scss";
|
||||||
@import "./structures/_NotificationPanel.scss";
|
@import "./structures/_NotificationPanel.scss";
|
||||||
|
@ -18,13 +19,27 @@
|
||||||
@import "./structures/_RoomStatusBar.scss";
|
@import "./structures/_RoomStatusBar.scss";
|
||||||
@import "./structures/_RoomSubList.scss";
|
@import "./structures/_RoomSubList.scss";
|
||||||
@import "./structures/_RoomView.scss";
|
@import "./structures/_RoomView.scss";
|
||||||
|
@import "./structures/_ScrollPanel.scss";
|
||||||
@import "./structures/_SearchBox.scss";
|
@import "./structures/_SearchBox.scss";
|
||||||
|
@import "./structures/_TabbedView.scss";
|
||||||
@import "./structures/_TagPanel.scss";
|
@import "./structures/_TagPanel.scss";
|
||||||
|
@import "./structures/_TagPanelButtons.scss";
|
||||||
@import "./structures/_TopLeftMenuButton.scss";
|
@import "./structures/_TopLeftMenuButton.scss";
|
||||||
@import "./structures/_UploadBar.scss";
|
@import "./structures/_UploadBar.scss";
|
||||||
@import "./structures/_UserSettings.scss";
|
|
||||||
@import "./structures/_ViewSource.scss";
|
@import "./structures/_ViewSource.scss";
|
||||||
@import "./structures/login/_Login.scss";
|
@import "./structures/auth/_Login.scss";
|
||||||
|
@import "./views/auth/_AuthBody.scss";
|
||||||
|
@import "./views/auth/_AuthButtons.scss";
|
||||||
|
@import "./views/auth/_AuthFooter.scss";
|
||||||
|
@import "./views/auth/_AuthHeader.scss";
|
||||||
|
@import "./views/auth/_AuthHeaderLogo.scss";
|
||||||
|
@import "./views/auth/_AuthPage.scss";
|
||||||
|
@import "./views/auth/_CountryDropdown.scss";
|
||||||
|
@import "./views/auth/_InteractiveAuthEntryComponents.scss";
|
||||||
|
@import "./views/auth/_LanguageSelector.scss";
|
||||||
|
@import "./views/auth/_ServerConfig.scss";
|
||||||
|
@import "./views/auth/_ServerTypeSelector.scss";
|
||||||
|
@import "./views/auth/_Welcome.scss";
|
||||||
@import "./views/avatars/_BaseAvatar.scss";
|
@import "./views/avatars/_BaseAvatar.scss";
|
||||||
@import "./views/avatars/_MemberStatusMessageAvatar.scss";
|
@import "./views/avatars/_MemberStatusMessageAvatar.scss";
|
||||||
@import "./views/context_menus/_MessageContextMenu.scss";
|
@import "./views/context_menus/_MessageContextMenu.scss";
|
||||||
|
@ -32,6 +47,7 @@
|
||||||
@import "./views/context_menus/_StatusMessageContextMenu.scss";
|
@import "./views/context_menus/_StatusMessageContextMenu.scss";
|
||||||
@import "./views/context_menus/_TagTileContextMenu.scss";
|
@import "./views/context_menus/_TagTileContextMenu.scss";
|
||||||
@import "./views/context_menus/_TopLeftMenu.scss";
|
@import "./views/context_menus/_TopLeftMenu.scss";
|
||||||
|
@import "./views/dialogs/_Analytics.scss";
|
||||||
@import "./views/dialogs/_BugReportDialog.scss";
|
@import "./views/dialogs/_BugReportDialog.scss";
|
||||||
@import "./views/dialogs/_ChangelogDialog.scss";
|
@import "./views/dialogs/_ChangelogDialog.scss";
|
||||||
@import "./views/dialogs/_ChatCreateOrReuseChatDialog.scss";
|
@import "./views/dialogs/_ChatCreateOrReuseChatDialog.scss";
|
||||||
|
@ -40,16 +56,23 @@
|
||||||
@import "./views/dialogs/_CreateGroupDialog.scss";
|
@import "./views/dialogs/_CreateGroupDialog.scss";
|
||||||
@import "./views/dialogs/_CreateRoomDialog.scss";
|
@import "./views/dialogs/_CreateRoomDialog.scss";
|
||||||
@import "./views/dialogs/_DeactivateAccountDialog.scss";
|
@import "./views/dialogs/_DeactivateAccountDialog.scss";
|
||||||
|
@import "./views/dialogs/_DeviceVerifyDialog.scss";
|
||||||
@import "./views/dialogs/_DevtoolsDialog.scss";
|
@import "./views/dialogs/_DevtoolsDialog.scss";
|
||||||
@import "./views/dialogs/_EncryptedEventDialog.scss";
|
@import "./views/dialogs/_EncryptedEventDialog.scss";
|
||||||
@import "./views/dialogs/_GroupAddressPicker.scss";
|
@import "./views/dialogs/_GroupAddressPicker.scss";
|
||||||
|
@import "./views/dialogs/_IncomingSasDialog.scss";
|
||||||
@import "./views/dialogs/_RestoreKeyBackupDialog.scss";
|
@import "./views/dialogs/_RestoreKeyBackupDialog.scss";
|
||||||
|
@import "./views/dialogs/_RoomSettingsDialog.scss";
|
||||||
@import "./views/dialogs/_RoomUpgradeDialog.scss";
|
@import "./views/dialogs/_RoomUpgradeDialog.scss";
|
||||||
@import "./views/dialogs/_SetEmailDialog.scss";
|
@import "./views/dialogs/_SetEmailDialog.scss";
|
||||||
@import "./views/dialogs/_SetMxIdDialog.scss";
|
@import "./views/dialogs/_SetMxIdDialog.scss";
|
||||||
@import "./views/dialogs/_SetPasswordDialog.scss";
|
@import "./views/dialogs/_SetPasswordDialog.scss";
|
||||||
|
@import "./views/dialogs/_SettingsDialog.scss";
|
||||||
@import "./views/dialogs/_ShareDialog.scss";
|
@import "./views/dialogs/_ShareDialog.scss";
|
||||||
@import "./views/dialogs/_UnknownDeviceDialog.scss";
|
@import "./views/dialogs/_UnknownDeviceDialog.scss";
|
||||||
|
@import "./views/dialogs/_UploadConfirmDialog.scss";
|
||||||
|
@import "./views/dialogs/_UserSettingsDialog.scss";
|
||||||
|
@import "./views/dialogs/_WidgetOpenIDPermissionsDialog.scss";
|
||||||
@import "./views/dialogs/keybackup/_CreateKeyBackupDialog.scss";
|
@import "./views/dialogs/keybackup/_CreateKeyBackupDialog.scss";
|
||||||
@import "./views/dialogs/keybackup/_KeyBackupFailedDialog.scss";
|
@import "./views/dialogs/keybackup/_KeyBackupFailedDialog.scss";
|
||||||
@import "./views/dialogs/keybackup/_RestoreKeyBackupDialog.scss";
|
@import "./views/dialogs/keybackup/_RestoreKeyBackupDialog.scss";
|
||||||
|
@ -60,9 +83,12 @@
|
||||||
@import "./views/elements/_DirectorySearchBox.scss";
|
@import "./views/elements/_DirectorySearchBox.scss";
|
||||||
@import "./views/elements/_Dropdown.scss";
|
@import "./views/elements/_Dropdown.scss";
|
||||||
@import "./views/elements/_EditableItemList.scss";
|
@import "./views/elements/_EditableItemList.scss";
|
||||||
|
@import "./views/elements/_Field.scss";
|
||||||
@import "./views/elements/_ImageView.scss";
|
@import "./views/elements/_ImageView.scss";
|
||||||
@import "./views/elements/_InlineSpinner.scss";
|
@import "./views/elements/_InlineSpinner.scss";
|
||||||
|
@import "./views/elements/_ManageIntegsButton.scss";
|
||||||
@import "./views/elements/_MemberEventListSummary.scss";
|
@import "./views/elements/_MemberEventListSummary.scss";
|
||||||
|
@import "./views/elements/_PowerSelector.scss";
|
||||||
@import "./views/elements/_ProgressBar.scss";
|
@import "./views/elements/_ProgressBar.scss";
|
||||||
@import "./views/elements/_ReplyThread.scss";
|
@import "./views/elements/_ReplyThread.scss";
|
||||||
@import "./views/elements/_ResizeHandle.scss";
|
@import "./views/elements/_ResizeHandle.scss";
|
||||||
|
@ -70,13 +96,13 @@
|
||||||
@import "./views/elements/_RoleButton.scss";
|
@import "./views/elements/_RoleButton.scss";
|
||||||
@import "./views/elements/_Spinner.scss";
|
@import "./views/elements/_Spinner.scss";
|
||||||
@import "./views/elements/_SyntaxHighlight.scss";
|
@import "./views/elements/_SyntaxHighlight.scss";
|
||||||
|
@import "./views/elements/_ToggleSwitch.scss";
|
||||||
@import "./views/elements/_ToolTipButton.scss";
|
@import "./views/elements/_ToolTipButton.scss";
|
||||||
|
@import "./views/elements/_Tooltip.scss";
|
||||||
@import "./views/globals/_MatrixToolbar.scss";
|
@import "./views/globals/_MatrixToolbar.scss";
|
||||||
@import "./views/groups/_GroupPublicityToggle.scss";
|
@import "./views/groups/_GroupPublicityToggle.scss";
|
||||||
@import "./views/groups/_GroupRoomList.scss";
|
@import "./views/groups/_GroupRoomList.scss";
|
||||||
@import "./views/groups/_GroupUserSettings.scss";
|
@import "./views/groups/_GroupUserSettings.scss";
|
||||||
@import "./views/login/_InteractiveAuthEntryComponents.scss";
|
|
||||||
@import "./views/login/_ServerConfig.scss";
|
|
||||||
@import "./views/messages/_CreateEvent.scss";
|
@import "./views/messages/_CreateEvent.scss";
|
||||||
@import "./views/messages/_DateSeparator.scss";
|
@import "./views/messages/_DateSeparator.scss";
|
||||||
@import "./views/messages/_MEmoteBody.scss";
|
@import "./views/messages/_MEmoteBody.scss";
|
||||||
|
@ -90,11 +116,15 @@
|
||||||
@import "./views/messages/_SenderProfile.scss";
|
@import "./views/messages/_SenderProfile.scss";
|
||||||
@import "./views/messages/_TextualEvent.scss";
|
@import "./views/messages/_TextualEvent.scss";
|
||||||
@import "./views/messages/_UnknownBody.scss";
|
@import "./views/messages/_UnknownBody.scss";
|
||||||
|
@import "./views/room_settings/_AliasSettings.scss";
|
||||||
|
@import "./views/room_settings/_ColorSettings.scss";
|
||||||
@import "./views/rooms/_AppsDrawer.scss";
|
@import "./views/rooms/_AppsDrawer.scss";
|
||||||
@import "./views/rooms/_Autocomplete.scss";
|
@import "./views/rooms/_Autocomplete.scss";
|
||||||
@import "./views/rooms/_AuxPanel.scss";
|
@import "./views/rooms/_AuxPanel.scss";
|
||||||
|
@import "./views/rooms/_E2EIcon.scss";
|
||||||
@import "./views/rooms/_EntityTile.scss";
|
@import "./views/rooms/_EntityTile.scss";
|
||||||
@import "./views/rooms/_EventTile.scss";
|
@import "./views/rooms/_EventTile.scss";
|
||||||
|
@import "./views/rooms/_JumpToBottomButton.scss";
|
||||||
@import "./views/rooms/_LinkPreviewWidget.scss";
|
@import "./views/rooms/_LinkPreviewWidget.scss";
|
||||||
@import "./views/rooms/_MemberDeviceInfo.scss";
|
@import "./views/rooms/_MemberDeviceInfo.scss";
|
||||||
@import "./views/rooms/_MemberInfo.scss";
|
@import "./views/rooms/_MemberInfo.scss";
|
||||||
|
@ -104,14 +134,13 @@
|
||||||
@import "./views/rooms/_PinnedEventsPanel.scss";
|
@import "./views/rooms/_PinnedEventsPanel.scss";
|
||||||
@import "./views/rooms/_PresenceLabel.scss";
|
@import "./views/rooms/_PresenceLabel.scss";
|
||||||
@import "./views/rooms/_ReplyPreview.scss";
|
@import "./views/rooms/_ReplyPreview.scss";
|
||||||
|
@import "./views/rooms/_RoomBreadcrumbs.scss";
|
||||||
@import "./views/rooms/_RoomDropTarget.scss";
|
@import "./views/rooms/_RoomDropTarget.scss";
|
||||||
@import "./views/rooms/_RoomHeader.scss";
|
@import "./views/rooms/_RoomHeader.scss";
|
||||||
@import "./views/rooms/_RoomList.scss";
|
@import "./views/rooms/_RoomList.scss";
|
||||||
@import "./views/rooms/_RoomPreviewBar.scss";
|
@import "./views/rooms/_RoomPreviewBar.scss";
|
||||||
@import "./views/rooms/_RoomRecoveryReminder.scss";
|
@import "./views/rooms/_RoomRecoveryReminder.scss";
|
||||||
@import "./views/rooms/_RoomSettings.scss";
|
|
||||||
@import "./views/rooms/_RoomTile.scss";
|
@import "./views/rooms/_RoomTile.scss";
|
||||||
@import "./views/rooms/_RoomTooltip.scss";
|
|
||||||
@import "./views/rooms/_RoomUpgradeWarningBar.scss";
|
@import "./views/rooms/_RoomUpgradeWarningBar.scss";
|
||||||
@import "./views/rooms/_SearchBar.scss";
|
@import "./views/rooms/_SearchBar.scss";
|
||||||
@import "./views/rooms/_SearchableEntityList.scss";
|
@import "./views/rooms/_SearchableEntityList.scss";
|
||||||
|
@ -119,9 +148,23 @@
|
||||||
@import "./views/rooms/_TopUnreadMessagesBar.scss";
|
@import "./views/rooms/_TopUnreadMessagesBar.scss";
|
||||||
@import "./views/rooms/_WhoIsTypingTile.scss";
|
@import "./views/rooms/_WhoIsTypingTile.scss";
|
||||||
@import "./views/settings/_DevicesPanel.scss";
|
@import "./views/settings/_DevicesPanel.scss";
|
||||||
|
@import "./views/settings/_EmailAddresses.scss";
|
||||||
@import "./views/settings/_IntegrationsManager.scss";
|
@import "./views/settings/_IntegrationsManager.scss";
|
||||||
@import "./views/settings/_KeyBackupPanel.scss";
|
@import "./views/settings/_KeyBackupPanel.scss";
|
||||||
@import "./views/settings/_Notifications.scss";
|
@import "./views/settings/_Notifications.scss";
|
||||||
|
@import "./views/settings/_PhoneNumbers.scss";
|
||||||
|
@import "./views/settings/_ProfileSettings.scss";
|
||||||
|
@import "./views/settings/tabs/_SettingsTab.scss";
|
||||||
|
@import "./views/settings/tabs/room/_GeneralRoomSettingsTab.scss";
|
||||||
|
@import "./views/settings/tabs/room/_RolesRoomSettingsTab.scss";
|
||||||
|
@import "./views/settings/tabs/room/_SecurityRoomSettingsTab.scss";
|
||||||
|
@import "./views/settings/tabs/user/_GeneralUserSettingsTab.scss";
|
||||||
|
@import "./views/settings/tabs/user/_HelpUserSettingsTab.scss";
|
||||||
|
@import "./views/settings/tabs/user/_NotificationUserSettingsTab.scss";
|
||||||
|
@import "./views/settings/tabs/user/_PreferencesUserSettingsTab.scss";
|
||||||
|
@import "./views/settings/tabs/user/_SecurityUserSettingsTab.scss";
|
||||||
|
@import "./views/settings/tabs/user/_VoiceUserSettingsTab.scss";
|
||||||
|
@import "./views/verification/_VerificationShowSas.scss";
|
||||||
@import "./views/voip/_CallView.scss";
|
@import "./views/voip/_CallView.scss";
|
||||||
@import "./views/voip/_IncomingCallbox.scss";
|
@import "./views/voip/_IncomingCallbox.scss";
|
||||||
@import "./views/voip/_VideoView.scss";
|
@import "./views/voip/_VideoView.scss";
|
||||||
|
|
|
@ -64,3 +64,21 @@ body.mx_scrollbar_nooverlay {
|
||||||
margin-right: calc(-1 * var(--scrollbar-width));
|
margin-right: calc(-1 * var(--scrollbar-width));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// style the native scrollbars ...
|
||||||
|
// ... standard css scrollbars (firefox at time of writing)
|
||||||
|
.mx_AutoHideScrollbar {
|
||||||
|
scrollbar-color: $scrollbar-thumb-color $scrollbar-track-color;
|
||||||
|
scrollbar-width: thin;
|
||||||
|
}
|
||||||
|
// or fallback for webkit browsers
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 6px;
|
||||||
|
height: 6px;
|
||||||
|
background-color: $scrollbar-track-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background-color: $scrollbar-thumb-color;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
|
@ -30,8 +30,8 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_ContextualMenu {
|
.mx_ContextualMenu {
|
||||||
border-radius: 2px;
|
border-radius: 4px;
|
||||||
box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.21);
|
box-shadow: 4px 4px 12px 0 $menu-box-shadow-color;
|
||||||
background-color: $menu-bg-color;
|
background-color: $menu-bg-color;
|
||||||
color: $primary-fg-color;
|
color: $primary-fg-color;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -43,10 +43,6 @@ limitations under the License.
|
||||||
right: 8px;
|
right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_ContextualMenu_noChevron {
|
|
||||||
border-radius: unset !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_ContextualMenu_chevron_right {
|
.mx_ContextualMenu_chevron_right {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: -8px;
|
right: -8px;
|
||||||
|
|
45
res/css/structures/_CustomRoomTagPanel.scss
Normal file
45
res/css/structures/_CustomRoomTagPanel.scss
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_LeftPanel_tagPanelContainer {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_CustomRoomTagPanel {
|
||||||
|
background-color: $tagpanel-bg-color;
|
||||||
|
max-height: 40vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_CustomRoomTagPanel_scroller {
|
||||||
|
max-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_CustomRoomTagPanel .mx_AccessibleButton {
|
||||||
|
margin: 9px auto;
|
||||||
|
width: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_CustomRoomTagPanel .mx_BaseAvatar_image {
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_CustomRoomTagPanel .mx_AccessibleButton.CustomRoomTagPanel_tileSelected .mx_BaseAvatar_image {
|
||||||
|
border: 3px solid $warning-color;
|
||||||
|
border-radius: 40px;
|
||||||
|
}
|
|
@ -1,130 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2017 Vector Creations 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.mx_GroupGridView {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_rooms {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(3, calc(100% / 3));
|
|
||||||
grid-template-rows: repeat(2, calc(100% / 2));
|
|
||||||
flex: 1 1 0;
|
|
||||||
min-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_rightPanel {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
|
|
||||||
.mx_GroupGridView_tabs {
|
|
||||||
flex: 0 0 52px;
|
|
||||||
border-bottom: 1px solid $primary-hairline-color;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
> div {
|
|
||||||
justify-content: flex-end;
|
|
||||||
width: 100%;
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RightPanel {
|
|
||||||
flex: 1 0 auto !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.mx_GroupGridView > .mx_MainSplit {
|
|
||||||
flex: 1 1 0;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_emptyTile {
|
|
||||||
display: block;
|
|
||||||
margin-top: 100px;
|
|
||||||
text-align: center;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_tile {
|
|
||||||
border-right: 1px solid $panel-divider-color;
|
|
||||||
border-bottom: 1px solid $panel-divider-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_activeTile {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_activeTile:before,
|
|
||||||
.mx_GroupGridView_activeTile:after {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
content: "";
|
|
||||||
pointer-events: none;
|
|
||||||
z-index: 3500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_activeTile:before {
|
|
||||||
border-radius: 14px;
|
|
||||||
border: 8px solid $gridview-focus-border-glow-color;
|
|
||||||
margin: -8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_activeTile:after {
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 2px solid $gridview-focus-border-color;
|
|
||||||
margin: -2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_tile > .mx_RoomView {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_rooms > *:nth-child(1) {
|
|
||||||
grid-column: 1;
|
|
||||||
grid-row: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_rooms > *:nth-child(2) {
|
|
||||||
grid-column: 2;
|
|
||||||
grid-row: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_rooms > *:nth-child(3) {
|
|
||||||
grid-column: 3;
|
|
||||||
grid-row: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_rooms > *:nth-child(4) {
|
|
||||||
grid-column: 1;
|
|
||||||
grid-row: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_rooms > *:nth-child(5) {
|
|
||||||
grid-column: 2;
|
|
||||||
grid-row: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupGridView_rooms > *:nth-child(6) {
|
|
||||||
grid-column: 3;
|
|
||||||
grid-row: 2;
|
|
||||||
}
|
|
|
@ -25,7 +25,7 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_header {
|
.mx_GroupView_header {
|
||||||
min-height: 70px;
|
min-height: 52px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
display: flex;
|
display: flex;
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
|
@ -34,7 +34,7 @@ limitations under the License.
|
||||||
.mx_GroupView_header_view {
|
.mx_GroupView_header_view {
|
||||||
border-bottom: 1px solid $primary-hairline-color;
|
border-bottom: 1px solid $primary-hairline-color;
|
||||||
padding-bottom: 0px;
|
padding-bottom: 0px;
|
||||||
padding-left: 8px;
|
padding-left: 19px;
|
||||||
padding-right: 8px;
|
padding-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,13 +44,26 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupHeader_button {
|
.mx_GroupHeader_button {
|
||||||
margin-left: 12px;
|
margin-left: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
height: 20px;
|
||||||
|
width: 20px;
|
||||||
|
background-color: $groupheader-button-color;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-size: contain;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupHeader_button object {
|
.mx_GroupHeader_editButton {
|
||||||
// prevents clicks from being swallowed by svg in 'object' tag
|
mask-image: url('$(res)/img/icons-settings-room.svg');
|
||||||
pointer-events: none;
|
}
|
||||||
|
|
||||||
|
.mx_GroupHeader_shareButton {
|
||||||
|
mask-image: url('$(res)/img/icons-share.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_hostingSignup img {
|
||||||
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_editable {
|
.mx_GroupView_editable {
|
||||||
|
@ -161,7 +174,6 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_GroupView > .mx_MainSplit {
|
.mx_GroupView > .mx_MainSplit {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_body {
|
.mx_GroupView_body {
|
||||||
|
@ -349,3 +361,8 @@ limitations under the License.
|
||||||
.mx_GroupView_changeDelayWarning {
|
.mx_GroupView_changeDelayWarning {
|
||||||
padding: 40px 20px;
|
padding: 40px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_GroupView .mx_MemberInfo .gm-scroll-view > :not(.mx_MemberInfo_avatar) {
|
||||||
|
padding-left: 16px;
|
||||||
|
padding-right: 16px;
|
||||||
|
}
|
||||||
|
|
28
res/css/structures/_HeaderButtons.scss
Normal file
28
res/css/structures/_HeaderButtons.scss
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_HeaderButtons {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_HeaderButtons::before {
|
||||||
|
content: "";
|
||||||
|
background-color: $header-divider-color;
|
||||||
|
opacity: 0.5;
|
||||||
|
margin: 0 15px;
|
||||||
|
border-radius: 1px;
|
||||||
|
width: 1px;
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2016 OpenMarket Ltd
|
Copyright 2016 OpenMarket Ltd
|
||||||
Copyright 2017 Vector Creations Ltd
|
Copyright 2017 Vector Creations Ltd
|
||||||
|
Copyright 2019 New Vector Ltd
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -22,27 +23,3 @@ limitations under the License.
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_HomePage iframe {
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
border: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_HomePage_body {
|
|
||||||
// margin-left: 63px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_HomePage_guest_warning {
|
|
||||||
display: flex;
|
|
||||||
background-color: $secondary-accent-color;
|
|
||||||
border: 1px solid $accent-color;
|
|
||||||
margin: 20px;
|
|
||||||
padding: 20px 40px;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_HomePage_guest_warning img {
|
|
||||||
padding-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
|
@ -33,6 +33,11 @@ limitations under the License.
|
||||||
flex: 0 0 140px;
|
flex: 0 0 140px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_LeftPanel_tagPanelContainer {
|
||||||
|
flex: 0 0 70px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_LeftPanel_hideButton {
|
.mx_LeftPanel_hideButton {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 10px;
|
top: 10px;
|
||||||
|
|
27
res/css/structures/_MainSplit.scss
Normal file
27
res/css/structures/_MainSplit.scss
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_MainSplit {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// move hit area 5px to the right so it doesn't overlap with the timeline scrollbar
|
||||||
|
.mx_MainSplit > .mx_ResizeHandle.mx_ResizeHandle_horizontal {
|
||||||
|
margin: 0 -10px 0 0;
|
||||||
|
padding: 0 10px 0 0;
|
||||||
|
}
|
|
@ -81,8 +81,7 @@ limitations under the License.
|
||||||
Empirically this stops the MessagePanel's width exploding outwards when
|
Empirically this stops the MessagePanel's width exploding outwards when
|
||||||
gemini is in 'prevented' mode
|
gemini is in 'prevented' mode
|
||||||
*/
|
*/
|
||||||
// disabling this for now as it clips the active room rect on the grid view
|
overflow-x: auto;
|
||||||
// overflow-x: auto;
|
|
||||||
|
|
||||||
/* To fix https://github.com/vector-im/riot-web/issues/3298 where Safari
|
/* To fix https://github.com/vector-im/riot-web/issues/3298 where Safari
|
||||||
needed height 100% all the way down to the HomePage. Height does not
|
needed height 100% all the way down to the HomePage. Height does not
|
||||||
|
|
|
@ -49,12 +49,12 @@ limitations under the License.
|
||||||
height: 40px;
|
height: 40px;
|
||||||
width: 40px;
|
width: 40px;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
background-color: $roomheader-addroom-color;
|
background-color: $roomheader-addroom-bg-color;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
background-color: $accent-fg-color;
|
background-color: $roomheader-addroom-fg-color;
|
||||||
mask: url('../../img/icons-create-room.svg');
|
mask: url('$(res)/img/icons-create-room.svg');
|
||||||
mask-repeat: no-repeat;
|
mask-repeat: no-repeat;
|
||||||
mask-position: center;
|
mask-position: center;
|
||||||
mask-size: 80%;
|
mask-size: 80%;
|
||||||
|
|
|
@ -25,9 +25,7 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_RightPanel_header {
|
.mx_RightPanel_header {
|
||||||
order: 1;
|
order: 1;
|
||||||
|
|
||||||
border-bottom: 1px solid $primary-hairline-color;
|
border-bottom: 1px solid $primary-hairline-color;
|
||||||
|
|
||||||
flex: 0 0 52px;
|
flex: 0 0 52px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,20 +43,55 @@ limitations under the License.
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
margin-top: 4px;
|
margin-left: 5px;
|
||||||
padding-left: 5px;
|
margin-right: 5px;
|
||||||
padding-right: 5px;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
position: relative;
|
|
||||||
border-bottom: 2px solid transparent;
|
border-bottom: 2px solid transparent;
|
||||||
|
height: 20px;
|
||||||
|
width: 20px;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RightPanel_headerButton object {
|
.mx_RightPanel_headerButton::before {
|
||||||
pointer-events: none;
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 20px;
|
||||||
|
width: 20px;
|
||||||
|
background-color: $rightpanel-button-color;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-size: contain;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RightPanel_headerButton_highlight {
|
.mx_RightPanel_membersButton::before {
|
||||||
border-color: $button-bg-color;
|
mask-image: url('$(res)/img/feather-customised/user.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RightPanel_filesButton::before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/files.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RightPanel_notifsButton::before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/notifications.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RightPanel_groupMembersButton::before {
|
||||||
|
mask-image: url('$(res)/img/icons-people.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RightPanel_roomsButton::before {
|
||||||
|
mask-image: url('$(res)/img/icons-room-nobg.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RightPanel_headerButton_highlight::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: -6px;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 2px;
|
||||||
|
background-color: $button-bg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RightPanel_headerButton_badge {
|
.mx_RightPanel_headerButton_badge {
|
||||||
|
|
|
@ -14,29 +14,48 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_RoomDirectory {
|
.mx_RoomDirectory_dialogWrapper > .mx_Dialog {
|
||||||
max-width: 960px;
|
max-width: 960px;
|
||||||
width: 100%;
|
height: 100%;
|
||||||
margin-left: auto;
|
padding: 20px;
|
||||||
margin-right: auto;
|
}
|
||||||
margin-bottom: 12px;
|
|
||||||
color: $primary-fg-color;
|
|
||||||
word-break: break-word;
|
|
||||||
|
|
||||||
|
.mx_RoomDirectory_dialog {
|
||||||
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomDirectory .mx_RoomHeader_simpleHeader {
|
.mx_RoomDirectory {
|
||||||
margin-left: 0px;
|
margin-bottom: 12px;
|
||||||
|
color: $primary-fg-color;
|
||||||
|
word-break: break-word;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomDirectory .gm-scroll-view {
|
||||||
|
// little hack because gemini doesn't seem to detect
|
||||||
|
// the scrollbar width well in this instance
|
||||||
|
// when using css scrollbars
|
||||||
|
scrollbar-width: thin;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomDirectory_createRoom {
|
||||||
|
background-color: $button-bg-color;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 8px;
|
||||||
|
color: $button-fg-color;
|
||||||
|
font-weight: 600;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomDirectory_list {
|
.mx_RoomDirectory_list {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,22 +64,17 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomDirectory_listheader {
|
.mx_RoomDirectory_listheader {
|
||||||
display: table;
|
display: flex;
|
||||||
table-layout: fixed;
|
|
||||||
width: 100%;
|
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
border-spacing: 5px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomDirectory_searchbox {
|
.mx_RoomDirectory_searchbox {
|
||||||
display: table-cell;
|
flex: 1 !important;
|
||||||
vertical-align: middle;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomDirectory_listheader .mx_NetworkDropdown {
|
.mx_RoomDirectory_listheader .mx_NetworkDropdown {
|
||||||
display: table-cell;
|
flex: 0 0 200px;
|
||||||
width: 200px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomDirectory_tableWrapper {
|
.mx_RoomDirectory_tableWrapper {
|
||||||
|
|
|
@ -121,7 +121,7 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_RoomStatusBar_connectionLostBar img {
|
.mx_RoomStatusBar_connectionLostBar img {
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
padding-right: 22px;
|
padding-right: 10px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,33 +32,13 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_RoomSubList {
|
.mx_RoomSubList {
|
||||||
min-height: 31px;
|
|
||||||
flex: 0 100000000 auto;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomSubList_nonEmpty {
|
|
||||||
min-height: 70px;
|
|
||||||
|
|
||||||
.mx_AutoHideScrollbar_offset {
|
.mx_RoomSubList_nonEmpty .mx_AutoHideScrollbar_offset {
|
||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSubList_hidden {
|
|
||||||
flex: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSubList.resized-all {
|
|
||||||
flex: 0 1 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSubList.resized-sized {
|
|
||||||
/* resizer set max-height on resized-sized,
|
|
||||||
so that limits the height and hence
|
|
||||||
needs a very small flex-shrink */
|
|
||||||
flex: 0 10000 auto;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomSubList_labelContainer {
|
.mx_RoomSubList_labelContainer {
|
||||||
|
@ -95,6 +75,7 @@ limitations under the License.
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
padding: 0 5px;
|
padding: 0 5px;
|
||||||
background-color: $roomtile-name-color;
|
background-color: $roomtile-name-color;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomSubList_addRoom, .mx_RoomSubList_badge {
|
.mx_RoomSubList_addRoom, .mx_RoomSubList_badge {
|
||||||
|
@ -102,15 +83,24 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomSubList_addRoom {
|
.mx_RoomSubList_addRoom {
|
||||||
background-color: $roomheader-addroom-color;
|
background-color: $roomheader-addroom-bg-color;
|
||||||
color: $roomsublist-background;
|
|
||||||
background-image: url('../../img/icons-room-add.svg');
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: center;
|
|
||||||
border-radius: 10px; // 16/2 + 2 padding
|
border-radius: 10px; // 16/2 + 2 padding
|
||||||
height: 16px;
|
height: 16px;
|
||||||
flex: 0 0 16px;
|
flex: 0 0 16px;
|
||||||
background-clip: content-box;
|
position: relative;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
background-color: $roomheader-addroom-fg-color;
|
||||||
|
mask: url('$(res)/img/icons-room-add.svg');
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center;
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomSubList_badgeHighlight {
|
.mx_RoomSubList_badgeHighlight {
|
||||||
|
@ -119,13 +109,13 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_RoomSubList_chevron {
|
.mx_RoomSubList_chevron {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
background-image: url('../../img/topleft-chevron.svg');
|
mask: url('$(res)/img/feather-customised/dropdown-arrow.svg');
|
||||||
background-repeat: no-repeat;
|
mask-repeat: no-repeat;
|
||||||
transition: transform 0.2s ease-in;
|
transition: transform 0.2s ease-in;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 10px;
|
height: 6px;
|
||||||
background-position: center;
|
|
||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
|
background-color: $roomsublist-label-fg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomSubList_chevronDown {
|
.mx_RoomSubList_chevronDown {
|
||||||
|
@ -154,7 +144,7 @@ limitations under the License.
|
||||||
position: sticky;
|
position: sticky;
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
height: 30px;
|
height: 8px;
|
||||||
content: "";
|
content: "";
|
||||||
display: block;
|
display: block;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
|
@ -162,21 +152,30 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
&.mx_IndicatorScrollbar_topOverflow > .mx_AutoHideScrollbar_offset {
|
&.mx_IndicatorScrollbar_topOverflow > .mx_AutoHideScrollbar_offset {
|
||||||
margin-top: -30px;
|
margin-top: -8px;
|
||||||
}
|
}
|
||||||
&.mx_IndicatorScrollbar_bottomOverflow > .mx_AutoHideScrollbar_offset {
|
&.mx_IndicatorScrollbar_bottomOverflow > .mx_AutoHideScrollbar_offset {
|
||||||
margin-bottom: -30px;
|
margin-bottom: -8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.mx_IndicatorScrollbar_topOverflow::before {
|
&.mx_IndicatorScrollbar_topOverflow::before {
|
||||||
top: 0;
|
top: 0;
|
||||||
background: linear-gradient(to top, rgba(242,245,248,0), rgba(242,245,248,1));
|
transition: background-image 0.1s ease-in;
|
||||||
|
background: linear-gradient(to top, $panel-gradient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// for now, we remove the bottomOverflow entirely as we don't want to
|
||||||
|
// lose the screen real-estate due to a bg-colored gradient, but we also
|
||||||
|
// don't want to use drop shadows and risk a confusing hierarchy of cards.
|
||||||
|
// so, instead, we hard-clip at the bottom but soft-clip at the top.
|
||||||
&.mx_IndicatorScrollbar_bottomOverflow::after {
|
&.mx_IndicatorScrollbar_bottomOverflow::after {
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background: linear-gradient(to bottom, rgba(242,245,248,0), rgba(242,245,248,1));
|
transition: background-image 0.1s ease-in;
|
||||||
|
margin: 0px -8px;
|
||||||
|
background: linear-gradient(to bottom, rgba(0,0,0,0.1), rgba(0,0,0,0.0));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
.collapsed {
|
.collapsed {
|
||||||
|
|
|
@ -70,6 +70,13 @@ limitations under the License.
|
||||||
background-color: $primary-bg-color;
|
background-color: $primary-bg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_RoomView_auxPanel_hiddenHighlights {
|
||||||
|
border-bottom: 1px solid $primary-hairline-color;
|
||||||
|
padding: 10px 26px;
|
||||||
|
color: $warning-color;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_RoomView_auxPanel_apps {
|
.mx_RoomView_auxPanel_apps {
|
||||||
max-width: 1920px ! important;
|
max-width: 1920px ! important;
|
||||||
}
|
}
|
||||||
|
@ -77,7 +84,6 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_RoomView .mx_MainSplit {
|
.mx_RoomView .mx_MainSplit {
|
||||||
flex: 1 1 0;
|
flex: 1 1 0;
|
||||||
display: flex;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView_body {
|
.mx_RoomView_body {
|
||||||
|
@ -85,6 +91,7 @@ limitations under the License.
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView_body .mx_RoomView_timeline {
|
.mx_RoomView_body .mx_RoomView_timeline {
|
||||||
|
@ -95,12 +102,10 @@ limitations under the License.
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView_body .mx_RoomView_messagePanel {
|
.mx_RoomView_body {
|
||||||
order: 2;
|
.mx_RoomView_messagePanel, .mx_RoomView_messagePanelSpinner, .mx_RoomView_messagePanelSearchSpinner{
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomView_body .mx_RoomView_messagePanelSpinner {
|
|
||||||
order: 2;
|
order: 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView_body .mx_RoomView_statusArea {
|
.mx_RoomView_body .mx_RoomView_statusArea {
|
||||||
|
@ -114,6 +119,31 @@ limitations under the License.
|
||||||
.mx_RoomView_messagePanel {
|
.mx_RoomView_messagePanel {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
flex: 1 1 0;
|
||||||
|
overflow-anchor: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomView_messagePanelSearchSpinner {
|
||||||
|
flex: 1;
|
||||||
|
background-image: url('$(res)/img/typing-indicator-2x.gif');
|
||||||
|
background-position: center 367px;
|
||||||
|
background-size: 25px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomView_messagePanelSearchSpinner:before {
|
||||||
|
background-color: $greyed-fg-color;
|
||||||
|
mask: url('$(res)/img/feather-customised/search-input.svg');
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center;
|
||||||
|
mask-size: 50px;
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 286px;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView_messageListWrapper {
|
.mx_RoomView_messageListWrapper {
|
||||||
|
@ -126,8 +156,15 @@ limitations under the License.
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView_searchResultsPanel .mx_RoomView_messageListWrapper {
|
.mx_RoomView_searchResultsPanel {
|
||||||
|
.mx_RoomView_messageListWrapper {
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView_empty {
|
.mx_RoomView_empty {
|
||||||
|
@ -143,6 +180,10 @@ limitations under the License.
|
||||||
.mx_RoomView_MessageList {
|
.mx_RoomView_MessageList {
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
padding: 18px;
|
padding: 18px;
|
||||||
|
margin: 0;
|
||||||
|
/* needed as min-height is set to clientHeight in ScrollPanel
|
||||||
|
to prevent shrinking when WhoIsTypingTile is hidden */
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomView_MessageList li {
|
.mx_RoomView_MessageList li {
|
||||||
|
|
26
res/css/structures/_ScrollPanel.scss
Normal file
26
res/css/structures/_ScrollPanel.scss
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_ScrollPanel {
|
||||||
|
|
||||||
|
.mx_RoomView_MessageList {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-end;
|
||||||
|
overflow-y: hidden;
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,7 +16,7 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_SearchBox_closeButton {
|
.mx_SearchBox_closeButton {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
background-image: url('../../img/icons-close.svg');
|
background-image: url('$(res)/img/icons-close.svg');
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
width: 16px;
|
width: 16px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
|
|
94
res/css/structures/_TabbedView.scss
Normal file
94
res/css/structures/_TabbedView.scss
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
/*
|
||||||
|
Copyright 2017 Travis Ralston
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_TabbedView {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 0 0 58px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TabbedView_tabLabels {
|
||||||
|
width: 170px;
|
||||||
|
max-width: 170px;
|
||||||
|
color: $tab-label-fg-color;
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TabbedView_tabLabel {
|
||||||
|
vertical-align: text-top;
|
||||||
|
cursor: pointer;
|
||||||
|
display: block;
|
||||||
|
border-radius: 3px;
|
||||||
|
font-size: 14px;
|
||||||
|
min-height: 24px; // use min-height instead of height to allow the label to overflow a bit
|
||||||
|
margin-bottom: 6px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TabbedView_tabLabel_active {
|
||||||
|
background-color: $tab-label-active-bg-color;
|
||||||
|
color: $tab-label-active-fg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TabbedView_maskedIcon {;
|
||||||
|
margin-left: 6px;
|
||||||
|
margin-right: 9px;
|
||||||
|
margin-top: 1px;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TabbedView_maskedIcon:before {
|
||||||
|
display: inline-block;
|
||||||
|
background-color: $tab-label-icon-bg-color;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-size: 16px;
|
||||||
|
width: 16px;
|
||||||
|
height: 22px;
|
||||||
|
mask-position: center;
|
||||||
|
content: '';
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TabbedView_tabLabel_active .mx_TabbedView_maskedIcon:before {
|
||||||
|
background-color: $tab-label-active-icon-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TabbedView_tabLabel_text {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TabbedView_tabPanel {
|
||||||
|
margin-left: 240px; // 170px sidebar + 70px padding
|
||||||
|
flex-grow: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 0; // firefox
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TabbedView_tabPanelContent {
|
||||||
|
flex-grow: 1;
|
||||||
|
overflow: auto;
|
||||||
|
min-height: 0; // firefox
|
||||||
|
}
|
|
@ -15,7 +15,7 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_TagPanel {
|
.mx_TagPanel {
|
||||||
flex: 0 0 70px;
|
flex: 1;
|
||||||
background-color: $tagpanel-bg-color;
|
background-color: $tagpanel-bg-color;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
|
@ -68,10 +68,13 @@ limitations under the License.
|
||||||
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
.mx_TagPanel .mx_TagPanel_tagTileContainer > div {
|
||||||
|
height: 40px;
|
||||||
|
padding: 5px 0 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_TagPanel .mx_TagTile {
|
.mx_TagPanel .mx_TagTile {
|
||||||
padding-top: 9px;
|
margin: 9px 0;
|
||||||
padding-bottom: 9px;
|
|
||||||
// opacity: 0.5;
|
// opacity: 0.5;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
@ -81,13 +84,7 @@ limitations under the License.
|
||||||
// opacity: 1;
|
// opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_TagPanel .mx_TagTile.mx_TagTile_selected {
|
|
||||||
/* To offset border of mx_TagTile_avatar */
|
|
||||||
padding: 3px 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_TagPanel .mx_TagTile.mx_TagTile_selected .mx_TagTile_avatar .mx_BaseAvatar {
|
.mx_TagPanel .mx_TagTile.mx_TagTile_selected .mx_TagTile_avatar .mx_BaseAvatar {
|
||||||
border: 3px solid $accent-color;
|
|
||||||
background-color: $accent-color;
|
background-color: $accent-color;
|
||||||
border-radius: 40px;
|
border-radius: 40px;
|
||||||
|
|
||||||
|
@ -97,6 +94,13 @@ limitations under the License.
|
||||||
width: 40px;
|
width: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_TagPanel .mx_TagTile_selected .mx_BaseAvatar_image {
|
||||||
|
border: 3px solid $accent-color;
|
||||||
|
height: 40px;
|
||||||
|
width: 40px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_TagPanel .mx_TagTile.mx_AccessibleButton:focus {
|
.mx_TagPanel .mx_TagTile.mx_AccessibleButton:focus {
|
||||||
filter: none;
|
filter: none;
|
||||||
}
|
}
|
||||||
|
@ -112,7 +116,7 @@ limitations under the License.
|
||||||
height: 15px;
|
height: 15px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: -5px;
|
right: -5px;
|
||||||
top: 1px;
|
top: -8px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
background-color: $neutral-badge-color;
|
background-color: $neutral-badge-color;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
|
@ -124,39 +128,22 @@ limitations under the License.
|
||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_TagPanel_groupsButton {
|
.mx_TagTile_avatar {
|
||||||
flex: 0;
|
|
||||||
margin: 17px 0 3px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_TagPanel_groupsButton > .mx_GroupsButton:before {
|
|
||||||
mask: url('../../img/feather-icons/users.svg');
|
|
||||||
mask-position: center 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_TagPanel_groupsButton > .mx_TagPanel_report:before {
|
|
||||||
mask: url('../../img/feather-icons/life-buoy.svg');
|
|
||||||
mask-position: center 9px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_TagPanel_groupsButton > .mx_AccessibleButton {
|
|
||||||
margin-bottom: 12px;
|
|
||||||
height: 40px;
|
|
||||||
width: 40px;
|
|
||||||
border-radius: 20px;
|
|
||||||
background-color: $roomheader-addroom-color;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
/* overwrite mx_RoleButton inline-block */
|
}
|
||||||
display: block !important;
|
|
||||||
|
.mx_TagTile_badge {
|
||||||
&:before {
|
position: absolute;
|
||||||
background-color: $tagpanel-bg-color;
|
right: -4px;
|
||||||
mask-repeat: no-repeat;
|
top: -2px;
|
||||||
content: '';
|
border-radius: 8px;
|
||||||
position: absolute;
|
color: $accent-fg-color;
|
||||||
top: 0;
|
font-weight: 600;
|
||||||
bottom: 0;
|
font-size: 14px;
|
||||||
left: 0;
|
padding: 0 5px;
|
||||||
right: 0;
|
background-color: $roomtile-name-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_TagTile_badgeHighlight {
|
||||||
|
background-color: $warning-color;
|
||||||
}
|
}
|
||||||
|
|
56
res/css/structures/_TagPanelButtons.scss
Normal file
56
res/css/structures/_TagPanelButtons.scss
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_TagPanelButtons {
|
||||||
|
background-color: $tagpanel-bg-color;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 17px 0 3px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TagPanelButtons > .mx_GroupsButton:before {
|
||||||
|
mask: url('$(res)/img/feather-customised/users.svg');
|
||||||
|
mask-position: center 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TagPanelButtons > .mx_TagPanelButtons_report:before {
|
||||||
|
mask: url('$(res)/img/feather-customised/life-buoy.svg');
|
||||||
|
mask-position: center 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TagPanelButtons > .mx_AccessibleButton {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
height: 40px;
|
||||||
|
width: 40px;
|
||||||
|
border-radius: 20px;
|
||||||
|
background-color: $tagpanel-button-color;
|
||||||
|
position: relative;
|
||||||
|
/* overwrite mx_RoleButton inline-block */
|
||||||
|
display: block !important;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
background-color: $tagpanel-bg-color;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -41,4 +41,9 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_TopLeftMenuButton_chevron {
|
.mx_TopLeftMenuButton_chevron {
|
||||||
margin: 0 7px;
|
margin: 0 7px;
|
||||||
|
mask: url('$(res)/img/feather-customised/dropdown-arrow.svg');
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
width: 10px;
|
||||||
|
height: 6px;
|
||||||
|
background-color: $roomsublist-label-fg-color;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,257 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2015, 2016 OpenMarket Ltd
|
|
||||||
Copyright 2017 Vector Creations 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.mx_UserSettings {
|
|
||||||
max-width: 960px;
|
|
||||||
width: 100%;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings .mx_RoomHeader {
|
|
||||||
order: 1;
|
|
||||||
|
|
||||||
flex: 0 0 70px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_body {
|
|
||||||
order: 2;
|
|
||||||
|
|
||||||
flex: 1 1 0;
|
|
||||||
|
|
||||||
margin-top: -20px;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings h3 {
|
|
||||||
clear: both;
|
|
||||||
margin-left: 63px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
color: $h3-color;
|
|
||||||
font-weight: 600;
|
|
||||||
font-size: 13px;
|
|
||||||
margin-top: 26px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_section h3 {
|
|
||||||
margin-left: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_spinner {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
|
||||||
margin-right: 12px;
|
|
||||||
width: 32px;
|
|
||||||
height: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_button {
|
|
||||||
@mixin mx_DialogButton;
|
|
||||||
display: inline;
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_button:hover {
|
|
||||||
@mixin mx_DialogButton_hover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_button.danger {
|
|
||||||
background-color: $warning-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_section {
|
|
||||||
margin-left: 63px;
|
|
||||||
margin-top: 28px;
|
|
||||||
margin-bottom: 28px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_cryptoSection ul {
|
|
||||||
display: table;
|
|
||||||
}
|
|
||||||
.mx_UserSettings_cryptoSection li {
|
|
||||||
display: table-row;
|
|
||||||
}
|
|
||||||
.mx_UserSettings_cryptoSection label,
|
|
||||||
.mx_UserSettings_cryptoSection span {
|
|
||||||
display: table-cell;
|
|
||||||
padding-right: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_passwordWarning {
|
|
||||||
/* To move the "Sign out" button out of the way */
|
|
||||||
clear: both;
|
|
||||||
color: $warning-color;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_importExportButtons {
|
|
||||||
padding-top: 10px;
|
|
||||||
padding-left: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_importExportButtons .mx_UserSettings_button {
|
|
||||||
margin-right: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_toggle input {
|
|
||||||
width: 16px;
|
|
||||||
margin-right: 8px;
|
|
||||||
margin-bottom: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_toggle label {
|
|
||||||
padding-bottom: 21px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_accountTable
|
|
||||||
.mx_UserSettings_notifTable
|
|
||||||
{
|
|
||||||
display: table;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_notifTable .mx_Spinner {
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_language {
|
|
||||||
width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_webRtcDevices_dropdown {
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_profileTable
|
|
||||||
{
|
|
||||||
display: table;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_profileTableRow
|
|
||||||
{
|
|
||||||
display: table-row;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_profileLabelCell
|
|
||||||
{
|
|
||||||
padding-bottom: 21px;
|
|
||||||
display: table-cell;
|
|
||||||
font-weight: bold;
|
|
||||||
padding-right: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_profileInputCell {
|
|
||||||
display: table-cell;
|
|
||||||
padding-bottom: 21px;
|
|
||||||
width: 240px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_profileInputCell input,
|
|
||||||
.mx_UserSettings_profileInputCell .mx_EditableText
|
|
||||||
{
|
|
||||||
display: inline-block;
|
|
||||||
border: 0px;
|
|
||||||
border-bottom: 1px solid $input-underline-color;
|
|
||||||
padding: 0px;
|
|
||||||
width: 240px;
|
|
||||||
color: $input-fg-color;
|
|
||||||
font-family: 'Open Sans', Helvetica, Arial, Sans-Serif;
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_threepidButton {
|
|
||||||
display: table-cell;
|
|
||||||
padding-left: 0.5em;
|
|
||||||
position: relative;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_phoneSection {
|
|
||||||
display:table;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_phoneCountry {
|
|
||||||
width: 70px;
|
|
||||||
display: table-cell;
|
|
||||||
}
|
|
||||||
|
|
||||||
input.mx_UserSettings_phoneNumberField {
|
|
||||||
margin-left: 3px;
|
|
||||||
width: 172px;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_changePasswordButton {
|
|
||||||
float: right;
|
|
||||||
margin-right: 32px;
|
|
||||||
margin-left: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_logout {
|
|
||||||
float: right;
|
|
||||||
margin-right: 32px;
|
|
||||||
margin-left: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker {
|
|
||||||
margin-left: 32px;
|
|
||||||
margin-right: 32px;
|
|
||||||
float: right;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_img .mx_BaseAvatar_image {
|
|
||||||
object-fit: cover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_edit {
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_edit img {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_edit > input {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_imgContainer {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_remove {
|
|
||||||
display: inline-block;
|
|
||||||
float: right;
|
|
||||||
margin-right: -15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_advanced_spoiler,
|
|
||||||
.mx_UserSettings_link {
|
|
||||||
cursor: pointer;
|
|
||||||
color: $accent-color;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_analyticsModal table {
|
|
||||||
margin: 10px 0px;
|
|
||||||
}
|
|
|
@ -14,6 +14,19 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
.mx_ViewSource_label_left {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ViewSource_label_right {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ViewSource_label_bottom {
|
||||||
|
clear: both;
|
||||||
|
border-bottom: 1px solid #e5e5e5;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_ViewSource pre {
|
.mx_ViewSource pre {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
|
|
81
res/css/structures/auth/_Login.scss
Normal file
81
res/css/structures/auth/_Login.scss
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015, 2016 OpenMarket Ltd
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_Login_submit {
|
||||||
|
@mixin mx_DialogButton;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 35px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Login_submit:hover {
|
||||||
|
@mixin mx_DialogButton_hover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Login_submit:disabled {
|
||||||
|
opacity: 0.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthBody a.mx_Login_sso_link:link,
|
||||||
|
.mx_AuthBody a.mx_Login_sso_link:hover,
|
||||||
|
.mx_AuthBody a.mx_Login_sso_link:visited {
|
||||||
|
color: $button-primary-fg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Login_loader {
|
||||||
|
display: inline;
|
||||||
|
position: relative;
|
||||||
|
top: 2px;
|
||||||
|
left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Login_loader .mx_Spinner {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Login_loader .mx_Spinner img {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Login_error {
|
||||||
|
color: $warning-color;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 12px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Login_type_container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: $authpage-primary-color;
|
||||||
|
|
||||||
|
.mx_Field {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Login_type_label {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Login_type_dropdown {
|
||||||
|
min-width: 200px;
|
||||||
|
}
|
|
@ -1,295 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2015, 2016 OpenMarket 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.mx_Login {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login h2 {
|
|
||||||
font-weight: 300;
|
|
||||||
margin-top: 32px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_box {
|
|
||||||
width: 300px;
|
|
||||||
min-height: 450px;
|
|
||||||
padding-top: 50px;
|
|
||||||
padding-bottom: 50px;
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_logo {
|
|
||||||
text-align: center;
|
|
||||||
height: 150px;
|
|
||||||
margin-bottom: 45px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_logo img {
|
|
||||||
max-height: 100%
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_support {
|
|
||||||
text-align: center;
|
|
||||||
font-size: 13px;
|
|
||||||
margin-top: 0px;
|
|
||||||
opacity: 0.7;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_field {
|
|
||||||
width: 280px;
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid $strong-input-border-color;
|
|
||||||
font-weight: 300;
|
|
||||||
font-size: 13px;
|
|
||||||
padding: 9px;
|
|
||||||
margin-bottom: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_field_disabled {
|
|
||||||
opacity: 0.3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_fieldLabel {
|
|
||||||
margin-top: -10px;
|
|
||||||
margin-left: 8px;
|
|
||||||
margin-bottom: 14px;
|
|
||||||
font-size: 13px;
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_submit {
|
|
||||||
@mixin mx_DialogButton;
|
|
||||||
width: 100%;
|
|
||||||
margin-top: 35px;
|
|
||||||
margin-bottom: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_submit:hover {
|
|
||||||
@mixin mx_DialogButton_hover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_submit:disabled {
|
|
||||||
opacity: 0.3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_label {
|
|
||||||
font-size: 13px;
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_checkbox,
|
|
||||||
.mx_Login_radio {
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_create {
|
|
||||||
display: block;
|
|
||||||
text-align: center;
|
|
||||||
width: 100%;
|
|
||||||
font-size: 13px;
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_create:link {
|
|
||||||
color: $primary-fg-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_links {
|
|
||||||
display: block;
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 15px;
|
|
||||||
width: 100%;
|
|
||||||
font-size: 13px;
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_links a:link {
|
|
||||||
color: $primary-fg-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_prompt {
|
|
||||||
padding-top: 15px;
|
|
||||||
padding-bottom: 15px;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_forgot {
|
|
||||||
font-size: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_forgot:link {
|
|
||||||
color: $primary-fg-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_sso_link {
|
|
||||||
display: block;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 15px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_sso_link:link {
|
|
||||||
color: $primary-fg-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_loader {
|
|
||||||
display: inline;
|
|
||||||
position: relative;
|
|
||||||
top: 2px;
|
|
||||||
left: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_loader .mx_Spinner {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_loader .mx_Spinner img {
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_error {
|
|
||||||
color: $warning-color;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: center;
|
|
||||||
/*
|
|
||||||
height: 24px;
|
|
||||||
*/
|
|
||||||
margin-top: 12px;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_type_container {
|
|
||||||
display: flex;
|
|
||||||
margin-bottom: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_type_label {
|
|
||||||
flex-grow: 1;
|
|
||||||
line-height: 35px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_type_dropdown {
|
|
||||||
display: inline-block;
|
|
||||||
min-width: 170px;
|
|
||||||
align-self: flex-end;
|
|
||||||
flex: 1 1 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_field_group {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_field_prefix {
|
|
||||||
height: 34px;
|
|
||||||
padding: 0px 5px;
|
|
||||||
line-height: 33px;
|
|
||||||
|
|
||||||
background-color: #eee;
|
|
||||||
border: 1px solid #c7c7c7;
|
|
||||||
border-right: 0px;
|
|
||||||
border-radius: 3px 0px 0px 3px;
|
|
||||||
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_field_suffix {
|
|
||||||
height: 34px;
|
|
||||||
padding: 0px 5px;
|
|
||||||
line-height: 33px;
|
|
||||||
|
|
||||||
background-color: #eee;
|
|
||||||
border: 1px solid #c7c7c7;
|
|
||||||
border-left: 0px;
|
|
||||||
border-radius: 0px 3px 3px 0px;
|
|
||||||
|
|
||||||
text-align: center;
|
|
||||||
flex-grow: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_username {
|
|
||||||
height: 16px;
|
|
||||||
flex-shrink: 1;
|
|
||||||
min-width: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_phoneNumberField {
|
|
||||||
height: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_field_has_prefix {
|
|
||||||
border-top-left-radius: 0px;
|
|
||||||
border-bottom-left-radius: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_field_has_suffix {
|
|
||||||
border-top-right-radius: 0px;
|
|
||||||
border-bottom-right-radius: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_phoneSection {
|
|
||||||
display:flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_phoneCountry {
|
|
||||||
margin-bottom: 14px;
|
|
||||||
width: 150px;
|
|
||||||
|
|
||||||
/* To override mx_Login_field_prefix */
|
|
||||||
text-align: left;
|
|
||||||
padding: 0px;
|
|
||||||
background-color: $primary-bg-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_field_prefix .mx_Dropdown_input {
|
|
||||||
/* To use prefix border instead of dropdown border */
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_phoneCountry .mx_Dropdown_option {
|
|
||||||
/*
|
|
||||||
To match height of mx_Login_field
|
|
||||||
33px + 2px border from mx_Dropdown_option = 35px
|
|
||||||
*/
|
|
||||||
height: 33px;
|
|
||||||
line-height: 33px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_phoneCountry .mx_Dropdown_option img {
|
|
||||||
margin: 3px;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_language {
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
min-width: 60%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Login_language_div {
|
|
||||||
display: flex;
|
|
||||||
margin-top: 12px;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
|
|
132
res/css/views/auth/_AuthBody.scss
Normal file
132
res/css/views/auth/_AuthBody.scss
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_AuthBody {
|
||||||
|
width: 500px;
|
||||||
|
background-color: $authpage-body-bg-color;
|
||||||
|
border-radius: 0 4px 4px 0;
|
||||||
|
padding: 25px 60px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-size: 12px;
|
||||||
|
color: $authpage-secondary-color;
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-top: 8px;
|
||||||
|
color: $authpage-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: $authpage-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link,
|
||||||
|
a:hover,
|
||||||
|
a:visited {
|
||||||
|
color: $accent-color;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=text],
|
||||||
|
input[type=password] {
|
||||||
|
color: $authpage-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field input,
|
||||||
|
.mx_Field select {
|
||||||
|
color: $authpage-primary-color;
|
||||||
|
background-color: $authpage-body-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field label {
|
||||||
|
color: $authpage-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field input:focus + label,
|
||||||
|
.mx_Field input:not(:placeholder-shown) + label,
|
||||||
|
.mx_Field textarea:focus + label,
|
||||||
|
.mx_Field textarea:not(:placeholder-shown) + label,
|
||||||
|
.mx_Field select + label /* Always show a select's label on top to not collide with the value */,
|
||||||
|
.mx_Field_labelAlwaysTopLeft label {
|
||||||
|
background-color: $authpage-body-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.error {
|
||||||
|
color: $warning-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field input {
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field_select::before {
|
||||||
|
background-color: $authpage-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Dropdown {
|
||||||
|
color: $authpage-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Dropdown_arrow {
|
||||||
|
background: $authpage-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Dropdown_menu {
|
||||||
|
background-color: $authpage-body-bg-color;
|
||||||
|
|
||||||
|
.mx_Dropdown_option_highlight {
|
||||||
|
background-color: $authpage-focus-bg-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthBody_editServerDetails {
|
||||||
|
padding-left: 1em;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthBody_fieldRow {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthBody_fieldRow > .mx_Field {
|
||||||
|
margin: 0 5px;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthBody_fieldRow > .mx_Field:first-child {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthBody_fieldRow > .mx_Field:last-child {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthBody_changeFlow {
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthBody_spinner {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2017 OpenMarket Ltd
|
Copyright 2017 OpenMarket Ltd
|
||||||
|
Copyright 2019 New Vector Ltd
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -14,7 +15,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_LoginBox {
|
.mx_AuthButtons {
|
||||||
min-height: 24px;
|
min-height: 24px;
|
||||||
height: unset !important;
|
height: unset !important;
|
||||||
padding-top: 13px !important;
|
padding-top: 13px !important;
|
||||||
|
@ -22,13 +23,13 @@ limitations under the License.
|
||||||
order: 4;
|
order: 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_LoginBox_loginButton_wrapper {
|
.mx_AuthButtons_loginButton_wrapper {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_LoginBox_loginButton,
|
.mx_AuthButtons_loginButton,
|
||||||
.mx_LoginBox_registerButton {
|
.mx_AuthButtons_registerButton {
|
||||||
margin-top: 3px;
|
margin-top: 3px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
border: 0px;
|
border: 0px;
|
31
res/css/views/auth/_AuthFooter.scss
Normal file
31
res/css/views/auth/_AuthFooter.scss
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_AuthFooter {
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 14px;
|
||||||
|
opacity: 0.72;
|
||||||
|
padding: 20px 0;
|
||||||
|
background: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.8));
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthFooter a:link,
|
||||||
|
.mx_AuthFooter a:hover,
|
||||||
|
.mx_AuthFooter a:visited {
|
||||||
|
color: $accent-fg-color;
|
||||||
|
margin: 0 22px;
|
||||||
|
}
|
23
res/css/views/auth/_AuthHeader.scss
Normal file
23
res/css/views/auth/_AuthHeader.scss
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_AuthHeader {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 206px;
|
||||||
|
padding: 25px 40px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
25
res/css/views/auth/_AuthHeaderLogo.scss
Normal file
25
res/css/views/auth/_AuthHeaderLogo.scss
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_AuthHeaderLogo {
|
||||||
|
margin-top: 15px;
|
||||||
|
flex: 1;
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthHeaderLogo img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
31
res/css/views/auth/_AuthPage.scss
Normal file
31
res/css/views/auth/_AuthPage.scss
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_AuthPage {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background-color: $authpage-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AuthPage_modal {
|
||||||
|
display: flex;
|
||||||
|
margin: 100px auto auto;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.33);
|
||||||
|
background-color: $authpage-modal-bg-color;
|
||||||
|
}
|
34
res/css/views/auth/_CountryDropdown.scss
Normal file
34
res/css/views/auth/_CountryDropdown.scss
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_CountryDropdown .mx_Dropdown_input .mx_Dropdown_option {
|
||||||
|
padding: 0 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_CountryDropdown .mx_Dropdown_arrow {
|
||||||
|
padding-right: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_CountryDropdown_shortOption {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_CountryDropdown_option {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2016 OpenMarket Ltd
|
Copyright 2019 New Vector Ltd
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -14,14 +14,17 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
.mx_AuthBody_language {
|
||||||
* Functions for applying common thematic effects to UI elements.
|
width: 100%;
|
||||||
* Ideally this would be themeable.
|
}
|
||||||
*/
|
|
||||||
|
.mx_AuthBody_language .mx_Dropdown_input {
|
||||||
import Velocity from 'velocity-vector';
|
border: none;
|
||||||
import 'velocity-vector/velocity.ui';
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
export function field_input_incorrect(element) {
|
color: $authpage-lang-color;
|
||||||
Velocity(element, "callout.shake", 300);
|
}
|
||||||
|
|
||||||
|
.mx_AuthBody_language .mx_Dropdown_arrow {
|
||||||
|
background: $authpage-lang-color;
|
||||||
}
|
}
|
|
@ -14,23 +14,24 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_ServerConfig {
|
.mx_ServerConfig_fields {
|
||||||
margin-top: 7px;
|
display: flex;
|
||||||
|
margin: 1em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_ServerConfig .mx_Login_field {
|
.mx_ServerConfig_fields .mx_Field {
|
||||||
margin-top: 4px;
|
flex: 1;
|
||||||
margin-bottom: 5px;
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerConfig_fields .mx_Field:first-child {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerConfig_fields .mx_Field:last-child {
|
||||||
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_ServerConfig_help:link {
|
.mx_ServerConfig_help:link {
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
font-size: 13px;
|
|
||||||
font-weight: 300;
|
|
||||||
color: $primary-fg-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_ServerConfig_selector {
|
|
||||||
text-align: center;
|
|
||||||
width: 302px; // for fr i18n
|
|
||||||
}
|
}
|
69
res/css/views/auth/_ServerTypeSelector.scss
Normal file
69
res/css/views/auth/_ServerTypeSelector.scss
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_ServerTypeSelector {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerTypeSelector_type {
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerTypeSelector_type:first-child {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerTypeSelector_type:last-child {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerTypeSelector_label {
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 600;
|
||||||
|
color: $authpage-primary-color;
|
||||||
|
margin: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerTypeSelector_type .mx_AccessibleButton {
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid $input-border-color;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerTypeSelector_type.mx_ServerTypeSelector_type_selected .mx_AccessibleButton {
|
||||||
|
border-color: $input-valid-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerTypeSelector_logo {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
height: 18px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: $authpage-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerTypeSelector_logo > div {
|
||||||
|
display: flex;
|
||||||
|
width: 70%;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ServerTypeSelector_description {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
26
res/css/views/auth/_Welcome.scss
Normal file
26
res/css/views/auth/_Welcome.scss
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_Welcome {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Welcome .mx_AuthBody_language {
|
||||||
|
width: 120px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
|
@ -16,6 +16,16 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_BaseAvatar {
|
.mx_BaseAvatar {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
// In at least Firefox, the case of relative positioned inline elements
|
||||||
|
// (such as mx_BaseAvatar) with absolute positioned children (such as
|
||||||
|
// mx_BaseAvatar_initial) is a dark corner full of spider webs. It will give
|
||||||
|
// different results during full reflow of the page vs. incremental reflow
|
||||||
|
// of small portions. While that's surely a browser bug, we can avoid it by
|
||||||
|
// using `inline-block` instead of the default `inline`.
|
||||||
|
// https://github.com/vector-im/riot-web/issues/5594
|
||||||
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=1535053
|
||||||
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=255139
|
||||||
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_BaseAvatar_initial {
|
.mx_BaseAvatar_initial {
|
||||||
|
|
|
@ -14,8 +14,16 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_MemberStatusMessageAvatar_hasStatus {
|
.mx_MessageComposer_avatar .mx_BaseAvatar {
|
||||||
border: 2px solid $accent-color;
|
padding: 2px;
|
||||||
border-radius: 40px;
|
border: 1px solid transparent;
|
||||||
padding-right: 0 !important; /* Override AccessibleButton styling */
|
border-radius: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_MessageComposer_avatar .mx_BaseAvatar_initial {
|
||||||
|
left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_MemberStatusMessageAvatar_hasStatus .mx_BaseAvatar {
|
||||||
|
border-color: $accent-color;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,42 +14,52 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_StatusMessageContextMenu_message {
|
.mx_StatusMessageContextMenu {
|
||||||
display: inline-block;
|
padding: 10px;
|
||||||
border-radius: 3px 0 0 3px;
|
}
|
||||||
|
|
||||||
|
.mx_StatusMessageContextMenu_form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.mx_StatusMessageContextMenu_message {
|
||||||
|
border-radius: 4px;
|
||||||
border: 1px solid $input-border-color;
|
border: 1px solid $input-border-color;
|
||||||
font-size: 13px;
|
padding: 6.5px 11px;
|
||||||
padding: 7px 7px 7px 9px;
|
background-color: $primary-bg-color;
|
||||||
width: 135px;
|
font-weight: normal;
|
||||||
background-color: $primary-bg-color !important;
|
margin: 0 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_StatusMessageContextMenu_submit {
|
.mx_StatusMessageContextMenu_message::placeholder {
|
||||||
display: inline-block;
|
color: $memberstatus-placeholder-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_StatusMessageContextMenu_submitFaded {
|
.mx_StatusMessageContextMenu_actionContainer {
|
||||||
opacity: 0.5;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_StatusMessageContextMenu_submit img {
|
.mx_StatusMessageContextMenu_submit,
|
||||||
vertical-align: middle;
|
.mx_StatusMessageContextMenu_clear {
|
||||||
margin-left: 8px;
|
@mixin mx_DialogButton;
|
||||||
|
align-self: start;
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 6px 1em;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_StatusMessageContextMenu hr {
|
.mx_StatusMessageContextMenu_submit[disabled] {
|
||||||
border: 0.5px solid $menu-border-color;
|
opacity: 0.49;
|
||||||
}
|
|
||||||
|
|
||||||
.mx_StatusMessageContextMenu_clearIcon {
|
|
||||||
margin: 5px 15px 5px 5px;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_StatusMessageContextMenu_clear {
|
.mx_StatusMessageContextMenu_clear {
|
||||||
padding: 2px;
|
color: $warning-color;
|
||||||
|
background-color: transparent;
|
||||||
|
border: 1px solid $warning-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_StatusMessageContextMenu_hasStatus .mx_StatusMessageContextMenu_clear {
|
.mx_StatusMessageContextMenu_actionContainer .mx_Spinner {
|
||||||
color: $warning-color;
|
justify-content: start;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,20 +15,74 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_TopLeftMenu {
|
.mx_TopLeftMenu {
|
||||||
min-width: 180px;
|
min-width: 210px;
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
.mx_TopLeftMenu_greyedText {
|
||||||
|
font-size: 12px;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TopLeftMenu_upgradeLink {
|
||||||
|
font-size: 12px;
|
||||||
|
|
||||||
|
img {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.mx_TopLeftMenu_section:not(:last-child) {
|
.mx_TopLeftMenu_section:not(:last-child) {
|
||||||
border-bottom: 1px solid $menu-border-color;
|
border-bottom: 1px solid $menu-border-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_TopLeftMenu_section {
|
.mx_TopLeftMenu_section_noIcon {
|
||||||
list-style: none;
|
margin: 5px 0;
|
||||||
|
padding: 5px 20px 5px 15px;
|
||||||
|
|
||||||
|
div:not(:first-child) {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TopLeftMenu_section_withIcon {
|
||||||
margin: 5px 0;
|
margin: 5px 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
|
||||||
|
li.mx_TopLeftMenu_icon_home::after {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/home.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
li.mx_TopLeftMenu_icon_settings::after {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/settings.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
li.mx_TopLeftMenu_icon_signin::after {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/sign-in.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
li.mx_TopLeftMenu_icon_signout::after {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/sign-out.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
li::after {
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: 0 center;
|
||||||
|
mask-size: 16px;
|
||||||
|
position: absolute;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
content: "";
|
||||||
|
top: 5px;
|
||||||
|
left: 14px;
|
||||||
|
background-color: $primary-fg-color;
|
||||||
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
padding: 5px 20px;
|
padding: 5px 20px 5px 43px;
|
||||||
}
|
}
|
||||||
|
|
||||||
li:hover {
|
li:hover {
|
||||||
|
|
19
res/css/views/dialogs/_Analytics.scss
Normal file
19
res/css/views/dialogs/_Analytics.scss
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_AnalyticsModal table {
|
||||||
|
margin: 10px 0px;
|
||||||
|
}
|
|
@ -14,39 +14,12 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_BugReportDialog_field_container {
|
.mx_BugReportDialog .mx_Field {
|
||||||
display: flex;
|
flex: 1;
|
||||||
}
|
|
||||||
|
|
||||||
.mx_BugReportDialog_field_label {
|
|
||||||
flex-basis: 150px;
|
|
||||||
|
|
||||||
text-align: right;
|
|
||||||
|
|
||||||
padding-top: 9px;
|
|
||||||
padding-right: 4px;
|
|
||||||
|
|
||||||
line-height: 18px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_BugReportDialog_field_input {
|
.mx_BugReportDialog_field_input {
|
||||||
flex-grow: 1;
|
// TODO: We should really apply this to all .mx_Field inputs.
|
||||||
|
// See https://github.com/vector-im/riot-web/issues/9344.
|
||||||
/* taken from mx_ChatInviteDialog_inputContainer */
|
flex: 1;
|
||||||
border-radius: 3px;
|
|
||||||
border: solid 1px $input-border-color;
|
|
||||||
|
|
||||||
font-size: 14px;
|
|
||||||
|
|
||||||
padding-left: 4px;
|
|
||||||
padding-right: 4px;
|
|
||||||
padding-top: 7px;
|
|
||||||
padding-bottom: 7px;
|
|
||||||
|
|
||||||
margin-bottom: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_BugReportDialog_field_input[type="text" i] {
|
|
||||||
padding-top: 9px;
|
|
||||||
padding-bottom: 9px;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,10 +43,9 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_CreateGroupDialog_prefix,
|
.mx_CreateGroupDialog_prefix,
|
||||||
.mx_CreateGroupDialog_suffix {
|
.mx_CreateGroupDialog_suffix {
|
||||||
height: 35px;
|
|
||||||
padding: 0px 5px;
|
padding: 0px 5px;
|
||||||
line-height: 37px;
|
line-height: 37px;
|
||||||
background-color: $input-border-color;
|
background-color: $input-darker-bg-color;
|
||||||
border: 1px solid $input-border-color;
|
border: 1px solid $input-border-color;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
29
res/css/views/dialogs/_DeviceVerifyDialog.scss
Normal file
29
res/css/views/dialogs/_DeviceVerifyDialog.scss
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_DeviceVerifyDialog_cryptoSection ul {
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_DeviceVerifyDialog_cryptoSection li {
|
||||||
|
display: table-row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_DeviceVerifyDialog_cryptoSection label,
|
||||||
|
.mx_DeviceVerifyDialog_cryptoSection span {
|
||||||
|
display: table-cell;
|
||||||
|
padding-right: 1em;
|
||||||
|
}
|
|
@ -61,18 +61,26 @@ limitations under the License.
|
||||||
padding: 0;
|
padding: 0;
|
||||||
width: 240px;
|
width: 240px;
|
||||||
color: $input-fg-color;
|
color: $input-fg-color;
|
||||||
font-family: 'Open Sans', Helvetica, Arial, Sans-Serif;
|
font-family: $font-family;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_DevTools_textarea {
|
.mx_DevTools_textarea {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
max-width: 624px;
|
max-width: 684px;
|
||||||
min-height: 250px;
|
min-height: 250px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_DevTools_content .mx_Field_input {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_DevTools_content .mx_Field_input + .mx_Field_input {
|
||||||
|
margin-left: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_DevTools_tgl {
|
.mx_DevTools_tgl {
|
||||||
display: none;
|
display: none;
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,13 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_EncryptedEventDialog .mx_MemberDeviceInfo {
|
.mx_EncryptedEventDialog .mx_DeviceVerifyButtons {
|
||||||
float: right;
|
float: right;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
margin-right: 42px;
|
margin-right: 42px;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EncryptedEventDialog .mx_MemberDeviceInfo_textButton {
|
.mx_EncryptedEventDialog .mx_MemberDeviceInfo_textButton {
|
||||||
|
|
24
res/css/views/dialogs/_IncomingSasDialog.scss
Normal file
24
res/css/views/dialogs/_IncomingSasDialog.scss
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_IncomingSasDialog_opponentProfile_image {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_IncomingSasDialog_opponentProfile h2 {
|
||||||
|
display: inline-block;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
44
res/css/views/dialogs/_RoomSettingsDialog.scss
Normal file
44
res/css/views/dialogs/_RoomSettingsDialog.scss
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ICONS
|
||||||
|
// ==========================================================
|
||||||
|
|
||||||
|
.mx_RoomSettingsDialog_settingsIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/settings.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomSettingsDialog_securityIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/lock.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomSettingsDialog_rolesIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/users-sm.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomSettingsDialog_warningIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/warning-triangle.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomSettingsDialog .mx_Dialog_title {
|
||||||
|
-ms-text-overflow: ellipsis;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding-left: 40px;
|
||||||
|
padding-right: 80px;
|
||||||
|
}
|
47
res/css/views/dialogs/_SettingsDialog.scss
Normal file
47
res/css/views/dialogs/_SettingsDialog.scss
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_SettingsDialog {
|
||||||
|
.mx_Dialog {
|
||||||
|
max-width: 1000px;
|
||||||
|
width: 90%;
|
||||||
|
height: 80%;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
|
||||||
|
.mx_TabbedView {
|
||||||
|
top: 65px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_TabbedView .mx_SettingsTab {
|
||||||
|
box-sizing: border-box;
|
||||||
|
min-width: 580px;
|
||||||
|
padding-right: 130px;
|
||||||
|
|
||||||
|
// Put some padding on the bottom to avoid the settings tab from
|
||||||
|
// colliding harshly with the dialog when scrolled down.
|
||||||
|
padding-bottom: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Dialog_title {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 16px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,24 +28,28 @@ limitations under the License.
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_UnknownDeviceDialog ul {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
// userid
|
||||||
|
.mx_UnknownDeviceDialog p {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UnknownDeviceDialog .mx_DeviceVerifyButtons {
|
||||||
|
flex-direction: row !important;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_UnknownDeviceDialog .mx_Dialog_content {
|
.mx_UnknownDeviceDialog .mx_Dialog_content {
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_UnknownDeviceDialog .mx_MemberDeviceInfo {
|
.mx_UnknownDeviceDialog_deviceList > li {
|
||||||
float: right;
|
padding: 4px;
|
||||||
clear: both;
|
|
||||||
padding: 0px;
|
|
||||||
padding-top: 8px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_UnknownDeviceDialog .mx_MemberDeviceInfo_textButton {
|
.mx_UnknownDeviceDialog_deviceList > li > * {
|
||||||
@mixin mx_DialogButton_small;
|
padding-bottom: 0;
|
||||||
background-color: $primary-bg-color;
|
|
||||||
color: $accent-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UnknownDeviceDialog .mx_UnknownDeviceDialog_deviceList li {
|
|
||||||
height: 40px;
|
|
||||||
border-bottom: 1px solid $primary-hairline-color;
|
|
||||||
}
|
}
|
||||||
|
|
33
res/css/views/dialogs/_UploadConfirmDialog.scss
Normal file
33
res/css/views/dialogs/_UploadConfirmDialog.scss
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_UploadConfirmDialog_fileIcon {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UploadConfirmDialog_previewOuter {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UploadConfirmDialog_previewInner {
|
||||||
|
display: inline-block;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UploadConfirmDialog_imagePreview {
|
||||||
|
max-height: 300px;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
50
res/css/views/dialogs/_UserSettingsDialog.scss
Normal file
50
res/css/views/dialogs/_UserSettingsDialog.scss
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ICONS
|
||||||
|
// ==========================================================
|
||||||
|
|
||||||
|
.mx_UserSettingsDialog_settingsIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/settings.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UserSettingsDialog_voiceIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/phone.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UserSettingsDialog_bellIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/notifications.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UserSettingsDialog_preferencesIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/sliders.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UserSettingsDialog_securityIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/lock.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UserSettingsDialog_helpIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/help-circle.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UserSettingsDialog_labsIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/flag.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UserSettingsDialog_flairIcon:before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/flair.svg');
|
||||||
|
}
|
28
res/css/views/dialogs/_WidgetOpenIDPermissionsDialog.scss
Normal file
28
res/css/views/dialogs/_WidgetOpenIDPermissionsDialog.scss
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 Travis Ralston
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_WidgetOpenIDPermissionsDialog .mx_SettingsFlag {
|
||||||
|
.mx_ToggleSwitch {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_SettingsFlag_label {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,7 +24,7 @@ limitations under the License.
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
mask: url("../../img/e2e/lock-warning.svg");
|
mask: url("$(res)/img/e2e/lock-warning-filled.svg");
|
||||||
mask-repeat: no-repeat;
|
mask-repeat: no-repeat;
|
||||||
background-color: $primary-fg-color;
|
background-color: $primary-fg-color;
|
||||||
content: "";
|
content: "";
|
||||||
|
|
|
@ -35,13 +35,13 @@ limitations under the License.
|
||||||
height: 0;
|
height: 0;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
top: 14px;
|
top: 16px;
|
||||||
width: 0
|
width: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_NetworkDropdown_networkoption {
|
.mx_NetworkDropdown_networkoption {
|
||||||
height: 35px;
|
height: 37px;
|
||||||
line-height: 35px;
|
line-height: 37px;
|
||||||
padding-left: 8px;
|
padding-left: 8px;
|
||||||
padding-right: 8px;
|
padding-right: 8px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
|
@ -21,3 +21,55 @@ limitations under the License.
|
||||||
.mx_AccessibleButton {
|
.mx_AccessibleButton {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_AccessibleButton_disabled {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AccessibleButton_hasKind {
|
||||||
|
padding: 7px 18px;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 4px;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AccessibleButton_kind_primary {
|
||||||
|
color: $button-primary-fg-color;
|
||||||
|
background-color: $button-primary-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AccessibleButton_kind_primary.mx_AccessibleButton_disabled {
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AccessibleButton_hasKind.mx_AccessibleButton_kind_primary_sm {
|
||||||
|
padding: 5px 12px;
|
||||||
|
color: $button-primary-fg-color;
|
||||||
|
background-color: $button-primary-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AccessibleButton_kind_primary_sm.mx_AccessibleButton_disabled {
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AccessibleButton_kind_danger {
|
||||||
|
color: $button-danger-fg-color;
|
||||||
|
background-color: $button-danger-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AccessibleButton_kind_danger.mx_AccessibleButton_disabled {
|
||||||
|
color: $button-danger-disabled-fg-color;
|
||||||
|
background-color: $button-danger-disabled-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AccessibleButton_hasKind.mx_AccessibleButton_kind_danger_sm {
|
||||||
|
padding: 5px 12px;
|
||||||
|
color: $button-danger-fg-color;
|
||||||
|
background-color: $button-danger-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AccessibleButton_kind_danger_sm.mx_AccessibleButton_disabled {
|
||||||
|
color: $button-danger-disabled-fg-color;
|
||||||
|
background-color: $button-danger-disabled-bg-color;
|
||||||
|
}
|
||||||
|
|
|
@ -15,26 +15,10 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_DirectorySearchBox {
|
.mx_DirectorySearchBox {
|
||||||
position: relative;
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid $strong-input-border-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_DirectorySearchBox_container {
|
|
||||||
display: flex;
|
display: flex;
|
||||||
padding-left: 9px;
|
padding-left: 9px;
|
||||||
padding-right: 9px;
|
padding-right: 9px;
|
||||||
}
|
margin: 0 5px 0 0 !important;
|
||||||
|
|
||||||
.mx_DirectorySearchBox_input {
|
|
||||||
flex-grow: 1;
|
|
||||||
border: 0;
|
|
||||||
padding: 0;
|
|
||||||
font-weight: 300;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
input[type=text].mx_DirectorySearchBox_input:focus {
|
|
||||||
border: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_DirectorySearchBox_joinButton {
|
.mx_DirectorySearchBox_joinButton {
|
||||||
|
@ -44,7 +28,7 @@ input[type=text].mx_DirectorySearchBox_input:focus {
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
background-color: $plinth-bg-color;
|
background-color: $plinth-bg-color;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
background-image: url('../../img/icon-return.svg');
|
background-image: url('$(res)/img/icon-return.svg');
|
||||||
background-position: 8px 70%;
|
background-position: 8px 70%;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
text-indent: 18px;
|
text-indent: 18px;
|
||||||
|
@ -54,16 +38,12 @@ input[type=text].mx_DirectorySearchBox_input:focus {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_DirectorySearchBox_clear_wrapper {
|
|
||||||
display: table-cell;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_DirectorySearchBox_clear {
|
.mx_DirectorySearchBox_clear {
|
||||||
display: inline-block;
|
background-color: $warning-color;
|
||||||
vertical-align: middle;
|
mask: url('$(res)/img/cancel.svg');
|
||||||
background: url('../../img/icon_context_delete.svg');
|
mask-repeat: no-repeat;
|
||||||
background-position: 0 50%;
|
mask-position: center;
|
||||||
background-repeat: no-repeat;
|
mask-size: 10px;
|
||||||
width: 15px;
|
width: 15px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_Dropdown {
|
.mx_Dropdown {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
color: $primary-fg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dropdown_disabled {
|
.mx_Dropdown_disabled {
|
||||||
|
@ -23,16 +24,17 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dropdown_input {
|
.mx_Dropdown_input {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
border: 1px solid $strong-input-border-color;
|
border: 1px solid $strong-input-border-color;
|
||||||
font-weight: 300;
|
font-size: 12px;
|
||||||
font-size: 13px;
|
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dropdown_input:focus {
|
.mx_Dropdown_input:focus {
|
||||||
border-color: $accent-color;
|
border-color: $input-focused-border-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disable dropdown highlight on focus */
|
/* Disable dropdown highlight on focus */
|
||||||
|
@ -41,29 +43,19 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dropdown_arrow {
|
.mx_Dropdown_arrow {
|
||||||
border-color: $primary-fg-color transparent transparent;
|
width: 10px;
|
||||||
border-style: solid;
|
height: 6px;
|
||||||
border-width: 5px 5px 0;
|
padding-right: 9px;
|
||||||
display: block;
|
mask: url('$(res)/img/feather-customised/dropdown-arrow.svg');
|
||||||
height: 0;
|
mask-repeat: no-repeat;
|
||||||
position: absolute;
|
background: $primary-fg-color;
|
||||||
right: 10px;
|
|
||||||
top: 14px;
|
|
||||||
width: 0
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Dropdown.left_aligned .mx_Dropdown_arrow {
|
|
||||||
left: 10px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dropdown_input > .mx_Dropdown_option {
|
.mx_Dropdown_input > .mx_Dropdown_option {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
flex: 1;
|
||||||
|
|
||||||
.mx_Dropdown.left_aligned .mx_Dropdown_input > .mx_Dropdown_option {
|
|
||||||
padding-left: 25px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dropdown_option {
|
.mx_Dropdown_option {
|
||||||
|
@ -81,11 +73,13 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_Dropdown_option img {
|
.mx_Dropdown_option img {
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
width: 27px;
|
width: 16px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
input.mx_Dropdown_option, input.mx_Dropdown_option:focus {
|
input.mx_Dropdown_option,
|
||||||
|
input.mx_Dropdown_option:focus {
|
||||||
|
font-weight: normal;
|
||||||
border: 0;
|
border: 0;
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
|
@ -104,7 +98,7 @@ input.mx_Dropdown_option, input.mx_Dropdown_option:focus {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
border: 1px solid $accent-color;
|
border: 1px solid $input-focused-border-color;
|
||||||
background-color: $primary-bg-color;
|
background-color: $primary-bg-color;
|
||||||
max-height: 200px;
|
max-height: 200px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
@ -119,10 +113,6 @@ input.mx_Dropdown_option, input.mx_Dropdown_option:focus {
|
||||||
background-color: $focus-bg-color;
|
background-color: $focus-bg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Dropdown_menu {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_Dropdown_searchPrompt {
|
.mx_Dropdown_searchPrompt {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2017 New Vector Ltd.
|
Copyright 2017, 2019 New Vector Ltd.
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -16,47 +16,38 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_EditableItemList {
|
.mx_EditableItemList {
|
||||||
margin-top: 12px;
|
margin-top: 12px;
|
||||||
margin-bottom: 0px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EditableItem {
|
.mx_EditableItem {
|
||||||
display: flex;
|
margin-bottom: 5px;
|
||||||
margin-left: 56px;
|
margin-left: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EditableItem .mx_EditableItem_editable {
|
.mx_EditableItem_delete {
|
||||||
border: 0px;
|
margin-right: 5px;
|
||||||
border-bottom: 1px solid $strong-input-border-color;
|
|
||||||
padding: 0px;
|
|
||||||
min-width: 240px;
|
|
||||||
max-width: 400px;
|
|
||||||
margin-bottom: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_EditableItem .mx_EditableItem_editable:focus {
|
|
||||||
border-bottom: 1px solid $accent-color;
|
|
||||||
outline: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_EditableItem .mx_EditableItem_editablePlaceholder {
|
|
||||||
color: $settings-grey-fg-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_EditableItem .mx_EditableItem_addButton,
|
|
||||||
.mx_EditableItem .mx_EditableItem_removeButton {
|
|
||||||
padding-left: 0.5em;
|
|
||||||
position: relative;
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
vertical-align: middle;
|
||||||
visibility: hidden;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EditableItem:hover .mx_EditableItem_addButton,
|
.mx_EditableItem_email {
|
||||||
.mx_EditableItem:hover .mx_EditableItem_removeButton {
|
vertical-align: middle;
|
||||||
visibility: visible;
|
}
|
||||||
|
|
||||||
|
.mx_EditableItem_promptText {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_EditableItem_confirmBtn {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_EditableItemList_newItem .mx_Field input {
|
||||||
|
// Use 100% of the space available for the input, but don't let the 10px
|
||||||
|
// padding on either side of the input to push it out of alignment.
|
||||||
|
width: calc(100% - 20px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EditableItemList_label {
|
.mx_EditableItemList_label {
|
||||||
margin-bottom: 8px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
186
res/css/views/elements/_Field.scss
Normal file
186
res/css/views/elements/_Field.scss
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* TODO: Consider unifying with general input styles in _light.scss */
|
||||||
|
|
||||||
|
.mx_Field {
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
margin: 1em 0;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: border-color 0.25s;
|
||||||
|
border: 1px solid $input-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field_prefix {
|
||||||
|
border-right: 1px solid $input-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field input,
|
||||||
|
.mx_Field select,
|
||||||
|
.mx_Field textarea {
|
||||||
|
font-weight: normal;
|
||||||
|
font-family: $font-family;
|
||||||
|
font-size: 14px;
|
||||||
|
border: none;
|
||||||
|
// Even without a border here, we still need this avoid overlapping the rounded
|
||||||
|
// corners on the field above.
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 8px 9px;
|
||||||
|
color: $primary-fg-color;
|
||||||
|
background-color: $primary-bg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field select {
|
||||||
|
-moz-appearance: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can't add pseudo-elements to a select directly, so we use its parent.
|
||||||
|
.mx_Field_select::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 15px;
|
||||||
|
right: 10px;
|
||||||
|
width: 10px;
|
||||||
|
height: 6px;
|
||||||
|
mask: url('$(res)/img/feather-customised/dropdown-arrow.svg');
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
background-color: $primary-fg-color;
|
||||||
|
z-index: 1;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field:focus-within {
|
||||||
|
border-color: $input-focused-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field input:focus,
|
||||||
|
.mx_Field select:focus,
|
||||||
|
.mx_Field textarea:focus {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field input::placeholder,
|
||||||
|
.mx_Field textarea::placeholder {
|
||||||
|
transition: color 0.25s ease-in 0s;
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field input:placeholder-shown:focus::placeholder,
|
||||||
|
.mx_Field textarea:placeholder-shown:focus::placeholder {
|
||||||
|
transition: color 0.25s ease-in 0.1s;
|
||||||
|
color: $greyed-fg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field label {
|
||||||
|
transition:
|
||||||
|
font-size 0.25s ease-out 0.1s,
|
||||||
|
color 0.25s ease-out 0.1s,
|
||||||
|
top 0.25s ease-out 0.1s,
|
||||||
|
background-color 0.25s ease-out 0.1s;
|
||||||
|
color: $primary-fg-color;
|
||||||
|
background-color: transparent;
|
||||||
|
font-size: 14px;
|
||||||
|
position: absolute;
|
||||||
|
left: 0px;
|
||||||
|
top: 0px;
|
||||||
|
margin: 7px 8px;
|
||||||
|
padding: 2px;
|
||||||
|
pointer-events: none; // Allow clicks to fall through to the input
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
max-width: calc(100% - 20px); // 100% of parent minus margin and padding
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field input:focus + label,
|
||||||
|
.mx_Field input:not(:placeholder-shown) + label,
|
||||||
|
.mx_Field textarea:focus + label,
|
||||||
|
.mx_Field textarea:not(:placeholder-shown) + label,
|
||||||
|
.mx_Field select + label /* Always show a select's label on top to not collide with the value */,
|
||||||
|
.mx_Field_labelAlwaysTopLeft label {
|
||||||
|
transition:
|
||||||
|
font-size 0.25s ease-out 0s,
|
||||||
|
color 0.25s ease-out 0s,
|
||||||
|
top 0.25s ease-out 0s,
|
||||||
|
background-color 0.25s ease-out 0s;
|
||||||
|
font-size: 10px;
|
||||||
|
top: -13px;
|
||||||
|
padding: 0 2px;
|
||||||
|
background-color: $field-focused-label-bg-color;
|
||||||
|
pointer-events: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field input:focus + label,
|
||||||
|
.mx_Field select:focus + label,
|
||||||
|
.mx_Field textarea:focus + label {
|
||||||
|
color: $input-focused-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field select:disabled,
|
||||||
|
.mx_Field select:disabled + label,
|
||||||
|
.mx_Field input:disabled,
|
||||||
|
.mx_Field input:disabled + label,
|
||||||
|
.mx_Field textarea:disabled,
|
||||||
|
.mx_Field textarea:disabled + label {
|
||||||
|
background-color: $field-focused-label-bg-color;
|
||||||
|
color: $greyed-fg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field_valid {
|
||||||
|
&.mx_Field,
|
||||||
|
&.mx_Field:focus-within {
|
||||||
|
border-color: $input-valid-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.mx_Field label,
|
||||||
|
&.mx_Field:focus-within label {
|
||||||
|
color: $input-valid-border-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field_invalid {
|
||||||
|
&.mx_Field,
|
||||||
|
&.mx_Field:focus-within {
|
||||||
|
border-color: $input-invalid-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.mx_Field label,
|
||||||
|
&.mx_Field:focus-within label {
|
||||||
|
color: $input-invalid-border-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field_tooltip {
|
||||||
|
margin-top: -12px;
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field_tooltip.mx_Field_valid {
|
||||||
|
animation: mx_fadeout 1s 2s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Customise other components when placed inside a Field
|
||||||
|
|
||||||
|
.mx_Field .mx_Dropdown_input {
|
||||||
|
border: initial;
|
||||||
|
border-radius: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Field .mx_CountryDropdown {
|
||||||
|
width: 67px;
|
||||||
|
}
|
|
@ -50,7 +50,7 @@ limitations under the License.
|
||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
/* object-fit hack needed for Chrome due to Chrome not re-laying-out until you refresh */
|
/* object-fit hack needed for Chrome due to Chrome not re-laying-out until you refresh */
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
/* background-image: url('../../img/trans.png'); */
|
/* background-image: url('$(res)/img/trans.png'); */
|
||||||
pointer-events: all;
|
pointer-events: all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,8 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_ImageView_cancel {
|
.mx_ImageView_cancel {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0px;
|
// hack for mx_Dialog having a top padding of 40px
|
||||||
|
top: 40px;
|
||||||
right: 0px;
|
right: 0px;
|
||||||
padding: 35px;
|
padding: 35px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
53
res/css/views/elements/_ManageIntegsButton.scss
Normal file
53
res/css/views/elements/_ManageIntegsButton.scss
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_error {
|
||||||
|
position: relative;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_error img {
|
||||||
|
position: absolute;
|
||||||
|
right: -5px;
|
||||||
|
top: -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_error {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_error .mx_ManageIntegsButton_errorPopup {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_error:hover .mx_ManageIntegsButton_errorPopup {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_errorPopup {
|
||||||
|
position: absolute;
|
||||||
|
top: 110%;
|
||||||
|
left: -275%;
|
||||||
|
width: 550%;
|
||||||
|
padding: 30%;
|
||||||
|
font-size: 10pt;
|
||||||
|
line-height: 1.5em;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: $accent-color;
|
||||||
|
color: $accent-fg-color;
|
||||||
|
text-align: center;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
25
res/css/views/elements/_PowerSelector.scss
Normal file
25
res/css/views/elements/_PowerSelector.scss
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_PowerSelector {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_PowerSelector .mx_Field select,
|
||||||
|
.mx_PowerSelector .mx_Field input {
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
|
@ -32,6 +32,11 @@ limitations under the License.
|
||||||
cursor: row-resize;
|
cursor: row-resize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_MatrixChat > .mx_ResizeHandle.mx_ResizeHandle_horizontal {
|
||||||
|
margin: 0 -10px 0 0;
|
||||||
|
padding: 0 10px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_ResizeHandle > div {
|
.mx_ResizeHandle > div {
|
||||||
background: $panel-divider-color;
|
background: $panel-divider-color;
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,15 @@
|
||||||
|
|
||||||
.mx_Markdown_ITALIC {
|
.mx_Markdown_ITALIC {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
|
/*
|
||||||
|
// interestingly, *not* using the explicit italic font
|
||||||
|
// variant seems yield better results.
|
||||||
|
|
||||||
|
// compensate for Nunito italics being terrible
|
||||||
|
// https://github.com/google/fonts/issues/1726
|
||||||
|
transform: skewX(-14deg);
|
||||||
|
display: inline-block;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_Markdown_CODE {
|
.mx_Markdown_CODE {
|
||||||
|
|
53
res/css/views/elements/_ToggleSwitch.scss
Normal file
53
res/css/views/elements/_ToggleSwitch.scss
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_ToggleSwitch {
|
||||||
|
transition: background-color 0.20s ease-out 0.1s;
|
||||||
|
width: 48px;
|
||||||
|
height: 24px;
|
||||||
|
border-radius: 14px;
|
||||||
|
background-color: $togglesw-off-color;
|
||||||
|
position: relative;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ToggleSwitch_enabled {
|
||||||
|
cursor: pointer;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ToggleSwitch.mx_ToggleSwitch_on {
|
||||||
|
background-color: $togglesw-on-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ToggleSwitch_ball {
|
||||||
|
transition: left 0.15s ease-out 0.1s;
|
||||||
|
margin: 2px;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
border-radius: 20px;
|
||||||
|
background-color: $togglesw-ball-color;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ToggleSwitch:not(.mx_ToggleSwitch_on) > .mx_ToggleSwitch_ball {
|
||||||
|
left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ToggleSwitch_on > .mx_ToggleSwitch_ball {
|
||||||
|
left: 23px; // 48px switch - 20px ball - 5px padding = 23px
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2015, 2016 OpenMarket Ltd
|
Copyright 2015, 2016 OpenMarket Ltd
|
||||||
|
Copyright 2019 New Vector Ltd
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -14,41 +15,55 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_RoomTooltip_chevron {
|
@keyframes mx_fadein {
|
||||||
position: absolute;
|
from { opacity: 0; }
|
||||||
left: -8px;
|
to { opacity: 1; }
|
||||||
top: 4px;
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
border-top: 8px solid transparent;
|
|
||||||
border-right: 8px solid $menu-bg-color;
|
|
||||||
border-bottom: 8px solid transparent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomTooltip_chevron:after {
|
@keyframes mx_fadeout {
|
||||||
content:'';
|
from { opacity: 1; }
|
||||||
|
to { opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_Tooltip_chevron {
|
||||||
|
position: absolute;
|
||||||
|
left: -7px;
|
||||||
|
top: 10px;
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 0;
|
height: 0;
|
||||||
border-top: 7px solid transparent;
|
border-top: 7px solid transparent;
|
||||||
border-right: 7px solid $primary-bg-color;
|
border-right: 7px solid $menu-border-color;
|
||||||
border-bottom: 7px solid transparent;
|
border-bottom: 7px solid transparent;
|
||||||
position:absolute;
|
}
|
||||||
top: -7px;
|
|
||||||
|
.mx_Tooltip_chevron:after {
|
||||||
|
content:'';
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-top: 6px solid transparent;
|
||||||
|
border-right: 6px solid $menu-bg-color;
|
||||||
|
border-bottom: 6px solid transparent;
|
||||||
|
position: absolute;
|
||||||
|
top: -6px;
|
||||||
left: 1px;
|
left: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomTooltip {
|
.mx_Tooltip {
|
||||||
display: none;
|
display: none;
|
||||||
|
animation: mx_fadein 0.2s;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
border-radius: 5px;
|
border: 1px solid $menu-border-color;
|
||||||
box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.21);
|
border-radius: 4px;
|
||||||
background-color: $primary-bg-color;
|
box-shadow: 4px 4px 12px 0 $menu-box-shadow-color;
|
||||||
|
background-color: $menu-bg-color;
|
||||||
z-index: 2000;
|
z-index: 2000;
|
||||||
padding: 5px;
|
padding: 10px;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
line-height: 14px;
|
line-height: 14px;
|
||||||
font-size: 13px;
|
font-size: 12px;
|
||||||
|
font-weight: 600;
|
||||||
color: $primary-fg-color;
|
color: $primary-fg-color;
|
||||||
max-width: 600px;
|
max-width: 200px;
|
||||||
|
word-break: break-word;
|
||||||
margin-right: 50px;
|
margin-right: 50px;
|
||||||
}
|
}
|
|
@ -20,23 +20,14 @@ limitations under the License.
|
||||||
margin: 8px;
|
margin: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupPublicity_toggle > label {
|
|
||||||
display: flex;
|
|
||||||
align-items: flex-start;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupPublicity_toggle > label,
|
|
||||||
.mx_GroupPublicity_toggle .mx_GroupTile {
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupPublicity_toggle input {
|
|
||||||
margin-right: 8px;
|
|
||||||
vertical-align: -4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_GroupPublicity_toggle .mx_GroupTile {
|
.mx_GroupPublicity_toggle .mx_GroupTile {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupPublicity_toggle .mx_ToggleSwitch {
|
||||||
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,5 @@ limitations under the License.
|
||||||
height: 200px;
|
height: 200px;
|
||||||
border: 1px solid $primary-hairline-color;
|
border: 1px solid $primary-hairline-color;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
margin-right: 32px;
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,9 +24,14 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_CreateEvent_image {
|
.mx_CreateEvent_image {
|
||||||
float: left;
|
float: left;
|
||||||
padding-right: 20px;
|
margin-right: 20px;
|
||||||
width: 72px;
|
width: 72px;
|
||||||
height: 34px;
|
height: 34px;
|
||||||
|
|
||||||
|
background-color: $primary-fg-color;
|
||||||
|
mask: url('$(res)/img/room-continuation.svg');
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_CreateEvent_header {
|
.mx_CreateEvent_header {
|
||||||
|
|
28
res/css/views/room_settings/_AliasSettings.scss
Normal file
28
res/css/views/room_settings/_AliasSettings.scss
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_AliasSettings_editable {
|
||||||
|
border: 0px;
|
||||||
|
border-bottom: 1px solid $strong-input-border-color;
|
||||||
|
padding: 0px;
|
||||||
|
min-width: 240px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AliasSettings_editable:focus {
|
||||||
|
border-bottom: 1px solid $accent-color;
|
||||||
|
outline: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
39
res/css/views/room_settings/_ColorSettings.scss
Normal file
39
res/css/views/room_settings/_ColorSettings.scss
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_ColorSettings_roomColor {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: 37px;
|
||||||
|
height: 37px;
|
||||||
|
border: 1px solid #979797;
|
||||||
|
margin-right: 13px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ColorSettings_roomColor_selected {
|
||||||
|
position: absolute;
|
||||||
|
left: 10px;
|
||||||
|
top: 4px;
|
||||||
|
cursor: default ! important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ColorSettings_roomColorPrimary {
|
||||||
|
height: 10px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
|
@ -14,6 +14,16 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
the tile title bar is 5 (top border) + 12 (title, buttons) + 5 (bottom padding) px = 22px
|
||||||
|
the body is assumed to be 300px (assumed by at least the sticker pickerm, perhaps elsewhere),
|
||||||
|
so the body height would be 300px - 22px (room for title bar) = 278px
|
||||||
|
BUT! the sticker picker also assumes it's a little less high than that because the iframe
|
||||||
|
for the sticker picker doesn't have any padding or margin on it's bottom.
|
||||||
|
so subtracking another 5px, which brings us at 273px.
|
||||||
|
*/
|
||||||
|
$AppsDrawerBodyHeight: 273px;
|
||||||
|
|
||||||
.mx_AppsDrawer {
|
.mx_AppsDrawer {
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
}
|
}
|
||||||
|
@ -56,9 +66,8 @@ limitations under the License.
|
||||||
max-width: 960px;
|
max-width: 960px;
|
||||||
width: 50%;
|
width: 50%;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
border: 1px solid $primary-hairline-color;
|
border: 5px solid $widget-menu-bar-bg-color;
|
||||||
border-radius: 2px;
|
border-radius: 4px;
|
||||||
background-color: $dialog-background-bg-color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_AppTile:last-child {
|
.mx_AppTile:last-child {
|
||||||
|
@ -71,8 +80,8 @@ limitations under the License.
|
||||||
height: 100%;
|
height: 100%;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 1px solid $primary-hairline-color;
|
border: 5px solid $widget-menu-bar-bg-color;
|
||||||
border-radius: 2px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_AppTile_mini {
|
.mx_AppTile_mini {
|
||||||
|
@ -84,7 +93,7 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_AppTile_persistedWrapper {
|
.mx_AppTile_persistedWrapper {
|
||||||
height: 280px;
|
height: $AppsDrawerBodyHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_AppTile_mini .mx_AppTile_persistedWrapper {
|
.mx_AppTile_mini .mx_AppTile_persistedWrapper {
|
||||||
|
@ -93,9 +102,7 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_AppTileMenuBar {
|
.mx_AppTileMenuBar {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 2px 10px;
|
font-size: 12px;
|
||||||
border-bottom: 1px solid $primary-hairline-color;
|
|
||||||
font-size: 10px;
|
|
||||||
background-color: $widget-menu-bar-bg-color;
|
background-color: $widget-menu-bar-bg-color;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
|
@ -104,6 +111,10 @@ limitations under the License.
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBar_expanded {
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_AppTileMenuBarTitle {
|
.mx_AppTileMenuBarTitle {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
|
@ -111,6 +122,10 @@ limitations under the License.
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBarTitle > :last-child {
|
||||||
|
margin-left: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_AppTileMenuBarWidgets {
|
.mx_AppTileMenuBarWidgets {
|
||||||
float: right;
|
float: right;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -118,6 +133,53 @@ limitations under the License.
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBar_iconButton {
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: 0 center;
|
||||||
|
mask-size: auto 12px;
|
||||||
|
background-color: $topleftmenu-color;
|
||||||
|
margin: 0 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBar_iconButton.mx_AppTileMenuBar_iconButton_minimise {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/widget/minimise.svg');
|
||||||
|
background-color: $accent-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBar_iconButton.mx_AppTileMenuBar_iconButton_maximise {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/widget/maximise.svg');
|
||||||
|
background-color: $accent-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBar_iconButton.mx_AppTileMenuBar_iconButton_reload {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/widget/refresh.svg');
|
||||||
|
mask-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBar_iconButton.mx_AppTileMenuBar_iconButton_popout {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/widget/external-link.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBar_iconButton.mx_AppTileMenuBar_iconButton_snapshot {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/widget/camera.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBar_iconButton.mx_AppTileMenuBar_iconButton_edit {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/widget/edit.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBar_iconButton.mx_AppTileMenuBar_iconButton_delete {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/widget/bin.svg');
|
||||||
|
background-color: $warning-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AppTileMenuBar_iconButton.mx_AppTileMenuBar_iconButton_cancel {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/widget/x-circle.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* delete ? */
|
||||||
.mx_AppTileMenuBarWidget {
|
.mx_AppTileMenuBarWidget {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
|
@ -137,7 +199,7 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_AppTileBody{
|
.mx_AppTileBody{
|
||||||
height: 280px;
|
height: $AppsDrawerBodyHeight;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
@ -156,7 +218,7 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_AppTileBody iframe {
|
.mx_AppTileBody iframe {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 280px;
|
height: $AppsDrawerBodyHeight;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border: none;
|
border: none;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -265,14 +327,11 @@ form.mx_Custom_Widget_Form div {
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_AppPermissionButton {
|
.mx_AppPermissionButton {
|
||||||
padding: 5px;
|
border: none;
|
||||||
|
padding: 5px 20px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
color: $warning-color;
|
background-color: $button-bg-color;
|
||||||
background-color: $primary-bg-color;
|
color: $button-fg-color;
|
||||||
}
|
|
||||||
|
|
||||||
.mx_AppPermissionButton:hover {
|
|
||||||
background-color: $primary-fg-color;
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,7 +342,7 @@ form.mx_Custom_Widget_Form div {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 280px;
|
height: $AppsDrawerBodyHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_AppLoading .mx_Spinner {
|
.mx_AppLoading .mx_Spinner {
|
||||||
|
|
|
@ -71,7 +71,7 @@
|
||||||
|
|
||||||
.mx_Autocomplete_Completion.selected,
|
.mx_Autocomplete_Completion.selected,
|
||||||
.mx_Autocomplete_Completion:hover {
|
.mx_Autocomplete_Completion:hover {
|
||||||
background: $menu-bg-color;
|
background: $selected-color;
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
33
res/css/views/rooms/_E2EIcon.scss
Normal file
33
res/css/views/rooms/_E2EIcon.scss
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_E2EIcon {
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center 0;
|
||||||
|
margin: 0 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_E2EIcon_verified {
|
||||||
|
mask-image: url('$(res)/img/e2e/lock-verified.svg');
|
||||||
|
background-color: $accent-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_E2EIcon_warning {
|
||||||
|
mask-image: url('$(res)/img/e2e/lock-warning.svg');
|
||||||
|
background-color: $warning-color;
|
||||||
|
}
|
|
@ -22,10 +22,28 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EntityTile:hover {
|
.mx_EntityTile:hover {
|
||||||
background-image: url('../../img/member_chevron.png');
|
|
||||||
background-position: center right 10px;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
padding-right: 30px;
|
padding-right: 30px;
|
||||||
|
position: relative; // to keep the chevron aligned
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_EntityTile:hover::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: calc(50% - 8px); // center
|
||||||
|
right: 10px;
|
||||||
|
mask: url('$(res)/img/member_chevron.png');
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
background-color: $rightpanel-button-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_EntityTile .mx_PresenceLabel {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_EntityTile:not(.mx_EntityTile_noHover):hover .mx_PresenceLabel {
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EntityTile_invite {
|
.mx_EntityTile_invite {
|
||||||
|
@ -67,7 +85,7 @@ limitations under the License.
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EntityTile_name_hover {
|
.mx_EntityTile:not(.mx_EntityTile_noHover):hover .mx_EntityTile_name {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,31 +99,25 @@ limitations under the License.
|
||||||
color: $primary-fg-color;
|
color: $primary-fg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
.mx_EntityTile_unavailable .mx_EntityTile_avatar,
|
.mx_EntityTile_unavailable .mx_EntityTile_avatar,
|
||||||
.mx_EntityTile_unavailable .mx_EntityTile_name,
|
.mx_EntityTile_unavailable .mx_EntityTile_name,
|
||||||
.mx_EntityTile_unavailable .mx_EntityTile_name_hover,
|
|
||||||
.mx_EntityTile_offline_beenactive .mx_EntityTile_avatar,
|
.mx_EntityTile_offline_beenactive .mx_EntityTile_avatar,
|
||||||
.mx_EntityTile_offline_beenactive .mx_EntityTile_name,
|
.mx_EntityTile_offline_beenactive .mx_EntityTile_name
|
||||||
.mx_EntityTile_offline_beenactive .mx_EntityTile_name_hover
|
|
||||||
{
|
{
|
||||||
opacity: 0.66;
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EntityTile_offline_neveractive .mx_EntityTile_avatar,
|
.mx_EntityTile_offline_neveractive .mx_EntityTile_avatar,
|
||||||
.mx_EntityTile_offline_neveractive .mx_EntityTile_name,
|
.mx_EntityTile_offline_neveractive .mx_EntityTile_name
|
||||||
.mx_EntityTile_offline_neveractive .mx_EntityTile_name_hover
|
|
||||||
{
|
{
|
||||||
opacity: 0.25;
|
opacity: 0.25;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EntityTile_unknown .mx_EntityTile_avatar,
|
.mx_EntityTile_unknown .mx_EntityTile_avatar,
|
||||||
.mx_EntityTile_unknown .mx_EntityTile_name,
|
.mx_EntityTile_unknown .mx_EntityTile_name
|
||||||
.mx_EntityTile_unknown .mx_EntityTile_name_hover
|
|
||||||
{
|
{
|
||||||
opacity: 0.25;
|
opacity: 0.25;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
.mx_EntityTile_subtext {
|
.mx_EntityTile_subtext {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
|
|
|
@ -45,25 +45,29 @@ limitations under the License.
|
||||||
.mx_EventTile .mx_SenderProfile {
|
.mx_EventTile .mx_SenderProfile {
|
||||||
color: $primary-fg-color;
|
color: $primary-fg-color;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
display: block; /* anti-zalgo, with overflow hidden */
|
display: inline-block; /* anti-zalgo, with overflow hidden */
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding-left: 65px; /* left gutter */
|
padding-left: 65px; /* left gutter */
|
||||||
padding-bottom: 0px;
|
padding-bottom: 0px;
|
||||||
padding-top: 0px;
|
padding-top: 0px;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
line-height: 22px;
|
line-height: 17px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EventTile .mx_SenderProfile .mx_Flair {
|
.mx_EventTile .mx_SenderProfile .mx_Flair {
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
height: 16px;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
.mx_EventTile .mx_SenderProfile .mx_Flair img {
|
img {
|
||||||
vertical-align: -2px;
|
vertical-align: -2px;
|
||||||
margin-right: 2px;
|
margin-right: 2px;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EventTile .mx_MessageTimestamp {
|
.mx_EventTile .mx_MessageTimestamp {
|
||||||
|
@ -277,13 +281,32 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
/* End to end encryption stuff */
|
/* End to end encryption stuff */
|
||||||
|
.mx_EventTile:hover .mx_EventTile_e2eIcon {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_EventTile_e2eIcon {
|
.mx_EventTile_e2eIcon {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 9px;
|
top: 8px;
|
||||||
left: 46px;
|
left: 46px;
|
||||||
|
width: 15px;
|
||||||
|
height: 15px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
mask-size: 14px;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: 0;
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_EventTile_e2eIcon_undecryptable, .mx_EventTile_e2eIcon_unverified {
|
||||||
|
mask-image: url('$(res)/img/e2e/warning.svg');
|
||||||
|
background-color: $warning-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_EventTile_e2eIcon_unencrypted {
|
||||||
|
mask-image: url('$(res)/img/e2e/warning.svg');
|
||||||
|
background-color: $composer-e2e-icon-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EventTile_e2eIcon_hidden {
|
.mx_EventTile_e2eIcon_hidden {
|
||||||
|
@ -291,8 +314,8 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
/* always override hidden attribute for blocked and warning */
|
/* always override hidden attribute for blocked and warning */
|
||||||
.mx_EventTile_e2eIcon_hidden[src="img/e2e-blocked.svg"],
|
.mx_EventTile_e2eIcon_hidden[src*="img/e2e-blocked.svg"],
|
||||||
.mx_EventTile_e2eIcon_hidden[src="img/e2e-warning.svg"] {
|
.mx_EventTile_e2eIcon_hidden[src*="img/e2e-warning.svg"] {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -389,7 +412,13 @@ limitations under the License.
|
||||||
.mx_EventTile_content .markdown-body code {
|
.mx_EventTile_content .markdown-body code {
|
||||||
// deliberate constants as we're behind an invert filter
|
// deliberate constants as we're behind an invert filter
|
||||||
background-color: #f8f8f8;
|
background-color: #f8f8f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_EventTile_content .markdown-body {
|
||||||
|
pre, code {
|
||||||
|
// deliberate constants as we're behind an invert filter
|
||||||
color: #333;
|
color: #333;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EventTile_pre_container {
|
.mx_EventTile_pre_container {
|
||||||
|
@ -453,6 +482,18 @@ limitations under the License.
|
||||||
display: inline ! important;
|
display: inline ! important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// actually, removing the Italic TTF provides
|
||||||
|
// better results seemingly
|
||||||
|
|
||||||
|
// compensate for Nunito italics being terrible
|
||||||
|
// https://github.com/google/fonts/issues/1726
|
||||||
|
.mx_EventTile_content .markdown-body em {
|
||||||
|
transform: skewX(-14deg);
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/* end of overrides */
|
/* end of overrides */
|
||||||
|
|
||||||
.mx_MatrixChat_useCompactLayout {
|
.mx_MatrixChat_useCompactLayout {
|
||||||
|
@ -506,7 +547,7 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EventTile_e2eIcon {
|
.mx_EventTile_e2eIcon {
|
||||||
top: 7px;
|
top: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EventTile_editButton {
|
.mx_EventTile_editButton {
|
||||||
|
|
69
res/css/views/rooms/_JumpToBottomButton.scss
Normal file
69
res/css/views/rooms/_JumpToBottomButton.scss
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@charset "utf-8";
|
||||||
|
|
||||||
|
.mx_JumpToBottomButton {
|
||||||
|
z-index: 1000;
|
||||||
|
position: absolute;
|
||||||
|
// 12 because height is 50 but button is only 38 = 12+(50-38) = 24
|
||||||
|
bottom: 12px;
|
||||||
|
right: 24px;
|
||||||
|
width: 38px;
|
||||||
|
// give it a fixed height so the badge doesn't make
|
||||||
|
// it taller and pop upwards when visible
|
||||||
|
height: 50px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_JumpToBottomButton_badge {
|
||||||
|
position: relative;
|
||||||
|
top: -12px;
|
||||||
|
border-radius: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 14px;
|
||||||
|
text-align: center;
|
||||||
|
// to be able to get it centered
|
||||||
|
// with text-align in parent
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0 4px;
|
||||||
|
color: $secondary-accent-color;
|
||||||
|
background-color: $warning-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_JumpToBottomButton_scrollDown {
|
||||||
|
position: relative;
|
||||||
|
height: 38px;
|
||||||
|
border-radius: 19px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: $primary-bg-color;
|
||||||
|
border: 1.3px solid $roomtile-name-color;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_JumpToBottomButton_scrollDown:before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
mask: url('$(res)/img/icon-jump-to-bottom.svg');
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: 9px 14px;
|
||||||
|
background: $roomtile-name-color;
|
||||||
|
}
|
|
@ -15,13 +15,35 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.mx_MemberDeviceInfo {
|
.mx_MemberDeviceInfo {
|
||||||
padding: 10px 0px;
|
display: flex;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
align-items: start;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberDeviceInfo.mx_DeviceVerifyButtons {
|
.mx_MemberDeviceInfo_icon {
|
||||||
|
margin-top: 4px;
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
.mx_MemberDeviceInfo_icon_blacklisted {
|
||||||
|
mask-image: url('$(res)/img/e2e/blacklisted.svg');
|
||||||
|
background-color: $warning-color;
|
||||||
|
}
|
||||||
|
.mx_MemberDeviceInfo_icon_verified {
|
||||||
|
mask-image: url('$(res)/img/e2e/verified.svg');
|
||||||
|
background-color: $accent-color;
|
||||||
|
}
|
||||||
|
.mx_MemberDeviceInfo_icon_unverified {
|
||||||
|
mask-image: url('$(res)/img/e2e/warning.svg');
|
||||||
|
background-color: $warning-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_MemberDeviceInfo > .mx_DeviceVerifyButtons {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-direction: column;
|
||||||
justify-content: space-between;
|
flex: 0 1 auto;
|
||||||
|
align-items: stretch;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberDeviceInfo_textButton {
|
.mx_MemberDeviceInfo_textButton {
|
||||||
|
@ -39,16 +61,14 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberDeviceInfo_deviceInfo {
|
.mx_MemberDeviceInfo_deviceInfo {
|
||||||
margin-bottom: 10px;
|
margin: 0 5px 5px 8px;
|
||||||
padding-bottom: 10px;
|
flex: 1;
|
||||||
border-bottom: 1px solid rgba(0,0,0,0.1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* "Unblacklist" is too long for a regular button: make it wider and
|
/* "Unblacklist" is too long for a regular button: make it wider and
|
||||||
reduce the padding. */
|
reduce the padding. */
|
||||||
.mx_EncryptedEventDialog .mx_MemberDeviceInfo_blacklist,
|
.mx_EncryptedEventDialog .mx_MemberDeviceInfo_blacklist,
|
||||||
.mx_EncryptedEventDialog .mx_MemberDeviceInfo_unblacklist {
|
.mx_EncryptedEventDialog .mx_MemberDeviceInfo_unblacklist {
|
||||||
width: 8em;
|
|
||||||
padding-left: 1em;
|
padding-left: 1em;
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,19 @@ limitations under the License.
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_MemberInfo_name > .mx_E2EIcon {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_MemberInfo_cancel {
|
.mx_MemberInfo_cancel {
|
||||||
height: 16px;
|
height: 16px;
|
||||||
padding: 10px 15px;
|
width: 16px;
|
||||||
|
padding: 10px 0 10px 10px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
mask-image: url('$(res)/img/minimise.svg');
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: 16px center;
|
||||||
|
background-color: $rightpanel-button-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberInfo_name h2 {
|
.mx_MemberInfo_name h2 {
|
||||||
|
@ -39,11 +48,11 @@ limitations under the License.
|
||||||
.mx_MemberInfo h2 {
|
.mx_MemberInfo h2 {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
margin: 16px 0;
|
margin: 16px 0 16px 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberInfo_container {
|
.mx_MemberInfo_container {
|
||||||
padding: 8px;
|
margin: 0 16px 16px 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberInfo .mx_RoomTile_nameContainer {
|
.mx_MemberInfo .mx_RoomTile_nameContainer {
|
||||||
|
@ -60,6 +69,7 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_MemberInfo_avatar {
|
.mx_MemberInfo_avatar {
|
||||||
background: $tagpanel-bg-color;
|
background: $tagpanel-bg-color;
|
||||||
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberInfo_avatar > img {
|
.mx_MemberInfo_avatar > img {
|
||||||
|
@ -83,15 +93,14 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_MemberInfo h3 {
|
.mx_MemberInfo h3 {
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
color: $h3-color;
|
color: $input-darker-fg-color;
|
||||||
font-weight: 600;
|
font-weight: bold;
|
||||||
font-size: 13px;
|
font-size: 12px;
|
||||||
margin-top: 16px;
|
margin: 4px 0;
|
||||||
margin-bottom: 14px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberInfo_profileField {
|
.mx_MemberInfo_profileField {
|
||||||
font-size: 13px;
|
font-size: 15px;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,14 +110,17 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_MemberInfo_field {
|
.mx_MemberInfo_field {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size: 13px;
|
font-size: 15px;
|
||||||
color: $accent-color;
|
color: $primary-fg-color;
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
line-height: 23px;
|
line-height: 23px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberInfo_createRoom {
|
.mx_MemberInfo_createRoom {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberInfo_createRoom_label {
|
.mx_MemberInfo_createRoom_label {
|
||||||
|
|
|
@ -20,6 +20,7 @@ limitations under the License.
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
min-height: 0;
|
||||||
|
|
||||||
.mx_Spinner {
|
.mx_Spinner {
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
|
@ -35,6 +36,10 @@ limitations under the License.
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_AutoHideScrollbar {
|
||||||
|
flex: 1 1 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberList_chevron {
|
.mx_MemberList_chevron {
|
||||||
|
@ -53,10 +58,6 @@ limitations under the License.
|
||||||
.mx_MemberList_query,
|
.mx_MemberList_query,
|
||||||
.mx_GroupMemberList_query,
|
.mx_GroupMemberList_query,
|
||||||
.mx_GroupRoomList_query {
|
.mx_GroupRoomList_query {
|
||||||
flex: 0 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_MemberList .gm-scrollbar-container {
|
|
||||||
flex: 1 1 0;
|
flex: 1 1 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,6 +77,7 @@ limitations under the License.
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
margin: 9px;
|
margin: 9px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
color: $button-fg-color;
|
color: $button-fg-color;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
|
||||||
|
@ -86,8 +88,7 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MemberList_invite span {
|
.mx_MemberList_invite span {
|
||||||
margin: 0 auto;
|
background-image: url('$(res)/img/feather-customised/user-add.svg');
|
||||||
background-image: url('../../img/feather-icons/user-add.svg');
|
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: center left;
|
background-position: center left;
|
||||||
padding-left: 25px;
|
padding-left: 25px;
|
||||||
|
|
|
@ -20,6 +20,11 @@ limitations under the License.
|
||||||
margin: auto;
|
margin: auto;
|
||||||
border-top: 1px solid $primary-hairline-color;
|
border-top: 1px solid $primary-hairline-color;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
padding-left: 84px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_MessageComposer_wrapper.mx_MessageComposer_hasE2EIcon {
|
||||||
|
padding-left: 109px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer_replaced_wrapper {
|
.mx_MessageComposer_replaced_wrapper {
|
||||||
|
@ -58,24 +63,22 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer .mx_MessageComposer_avatar {
|
.mx_MessageComposer .mx_MessageComposer_avatar {
|
||||||
padding: 0 28px;
|
position: absolute;
|
||||||
|
left: 27px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer .mx_MessageComposer_avatar .mx_BaseAvatar {
|
.mx_MessageComposer .mx_MessageComposer_avatar .mx_BaseAvatar {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer .mx_AccessibleButton {
|
|
||||||
padding: 0 12px 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_MessageComposer_composecontrols {
|
.mx_MessageComposer_composecontrols {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer_e2eIcon {
|
.mx_MessageComposer_e2eIcon.mx_E2EIcon {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 60px;
|
left: 60px;
|
||||||
|
background-color: $composer-e2e-icon-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer_noperm_error {
|
.mx_MessageComposer_noperm_error {
|
||||||
|
@ -111,7 +114,8 @@ limitations under the License.
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-height: 120px;
|
max-height: 120px;
|
||||||
min-height: 19px;
|
min-height: 19px;
|
||||||
overflow: auto;
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,27 +180,36 @@ limitations under the License.
|
||||||
color: $accent-color;
|
color: $accent-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer_upload,
|
.mx_MessageComposer_button {
|
||||||
.mx_MessageComposer_hangup,
|
margin-right: 12px;
|
||||||
.mx_MessageComposer_voicecall,
|
|
||||||
.mx_MessageComposer_videocall,
|
|
||||||
.mx_MessageComposer_apps,
|
|
||||||
.mx_MessageComposer_stickers {
|
|
||||||
/*display: table-cell;*/
|
|
||||||
/*vertical-align: middle;*/
|
|
||||||
/*padding-left: 10px;*/
|
|
||||||
padding-right: 5px;
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding-top: 4px;
|
padding-top: 4px;
|
||||||
|
height: 20px;
|
||||||
|
width: 20px;
|
||||||
|
background-color: $composer-button-color;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-size: contain;
|
||||||
|
mask-position: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer_upload object,
|
.mx_MessageComposer_upload {
|
||||||
.mx_MessageComposer_hangup object,
|
mask-image: url('$(res)/img/feather-customised/paperclip.svg');
|
||||||
.mx_MessageComposer_voicecall object,
|
}
|
||||||
.mx_MessageComposer_videocall object,
|
|
||||||
.mx_MessageComposer_apps object,
|
.mx_MessageComposer_hangup {
|
||||||
.mx_MessageComposer_stickers object {
|
mask-image: url('$(res)/img/hangup.svg');
|
||||||
pointer-events: none;
|
}
|
||||||
|
|
||||||
|
.mx_MessageComposer_voicecall {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/phone.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_MessageComposer_videocall {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/video.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_MessageComposer_stickers {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/face.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer_formatting {
|
.mx_MessageComposer_formatting {
|
||||||
|
@ -242,14 +255,29 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer_formatbar_markdown {
|
.mx_MessageComposer_formatbar_markdown {
|
||||||
|
height: 17px;
|
||||||
|
width: 30px;
|
||||||
margin-right: 64px;
|
margin-right: 64px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MessageComposer_input_markdownIndicator {
|
.mx_MessageComposer_input_markdownIndicator {
|
||||||
cursor: pointer;
|
|
||||||
height: 10px;
|
height: 10px;
|
||||||
|
width: 12px;
|
||||||
padding: 4px 4px 4px 0;
|
padding: 4px 4px 4px 0;
|
||||||
opacity: 0.8;
|
}
|
||||||
|
|
||||||
|
.mx_MessageComposer_formatbar_markdown,
|
||||||
|
.mx_MessageComposer_input_markdownIndicator {
|
||||||
|
cursor: pointer;
|
||||||
|
mask-image: url('$(res)/img/markdown.svg');
|
||||||
|
mask-size: contain;
|
||||||
|
mask-position: center;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
background-color: $composer-button-color;
|
||||||
|
|
||||||
|
&.mx_MessageComposer_markdownDisabled {
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MatrixChat_useCompactLayout {
|
.mx_MatrixChat_useCompactLayout {
|
||||||
|
|
82
res/css/views/rooms/_RoomBreadcrumbs.scss
Normal file
82
res/css/views/rooms/_RoomBreadcrumbs.scss
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_RoomBreadcrumbs {
|
||||||
|
position: relative;
|
||||||
|
height: 42px;
|
||||||
|
margin: 8px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
overflow-x: visible;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
|
||||||
|
.mx_AutoHideScrollbar_offset {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomBreadcrumbs_crumb {
|
||||||
|
margin-left: 4px;
|
||||||
|
height: 32px;
|
||||||
|
display: inline-block;
|
||||||
|
transition: transform 0.3s, width 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomBreadcrumbs_animate {
|
||||||
|
margin-left: 0;
|
||||||
|
width: 32px;
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomBreadcrumbs_preAnimate {
|
||||||
|
width: 0;
|
||||||
|
transform: scale(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomBreadcrumbs_left {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: we have to manually control the gradient and stuff, but the IndicatorScrollbar
|
||||||
|
// will deal with left/right positioning for us. Normally we'd use position:sticky on
|
||||||
|
// a few key elements, however that doesn't work in horizontal scrolling scenarios.
|
||||||
|
|
||||||
|
.mx_IndicatorScrollbar_leftOverflowIndicator,
|
||||||
|
.mx_IndicatorScrollbar_rightOverflowIndicator {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.mx_IndicatorScrollbar_leftOverflow .mx_IndicatorScrollbar_leftOverflowIndicator,
|
||||||
|
&.mx_IndicatorScrollbar_rightOverflow .mx_IndicatorScrollbar_rightOverflowIndicator {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 15px;
|
||||||
|
display: block;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_IndicatorScrollbar_leftOverflowIndicator {
|
||||||
|
background: linear-gradient(to left, $panel-gradient);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_IndicatorScrollbar_rightOverflowIndicator {
|
||||||
|
background: linear-gradient(to right, $panel-gradient);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -58,7 +58,6 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_RoomHeader_buttons {
|
.mx_RoomHeader_buttons {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
|
||||||
background-color: $primary-bg-color;
|
background-color: $primary-bg-color;
|
||||||
padding-right: 5px;
|
padding-right: 5px;
|
||||||
}
|
}
|
||||||
|
@ -98,6 +97,7 @@ limitations under the License.
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
margin: 0 7px;
|
margin: 0 7px;
|
||||||
border-bottom: 1px solid transparent;
|
border-bottom: 1px solid transparent;
|
||||||
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomHeader_nametext {
|
.mx_RoomHeader_nametext {
|
||||||
|
@ -111,15 +111,10 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomHeader_searchStatus {
|
.mx_RoomHeader_searchStatus {
|
||||||
display: inline-block;
|
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomHeader_settingsButton object {
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomHeader_name,
|
.mx_RoomHeader_name,
|
||||||
.mx_RoomHeader_avatar,
|
.mx_RoomHeader_avatar,
|
||||||
.mx_RoomHeader_avatarPicker,
|
.mx_RoomHeader_avatarPicker,
|
||||||
|
@ -160,6 +155,7 @@ limitations under the License.
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
margin: 0 7px;
|
margin: 0 7px;
|
||||||
|
margin-top: 4px; // to align baseline of topic with room name
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
border-bottom: 1px solid transparent;
|
border-bottom: 1px solid transparent;
|
||||||
|
@ -199,10 +195,32 @@ limitations under the License.
|
||||||
.mx_RoomHeader_button {
|
.mx_RoomHeader_button {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
height: 20px;
|
||||||
|
width: 20px;
|
||||||
|
background-color: $roomheader-button-color;
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-size: contain;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomHeader_button object {
|
.mx_RoomHeader_settingsButton {
|
||||||
pointer-events: none;
|
mask-image: url('$(res)/img/feather-customised/settings.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomHeader_forgetButton {
|
||||||
|
mask-image: url('$(res)/img/leave.svg');
|
||||||
|
width: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomHeader_searchButton {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/search.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomHeader_shareButton {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/share.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_RoomHeader_manageIntegsButton {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/grid.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomHeader_showPanel {
|
.mx_RoomHeader_showPanel {
|
||||||
|
@ -219,6 +237,7 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_RoomHeader_pinnedButton {
|
.mx_RoomHeader_pinnedButton {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
mask-image: url('$(res)/img/icons-pin.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomHeader_pinsIndicator {
|
.mx_RoomHeader_pinsIndicator {
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue