diff --git a/app/internal_packages_disabled/plugins/lib/main.tsx b/app/internal_packages_disabled/plugins/lib/main.tsx
deleted file mode 100644
index 221e50733..000000000
--- a/app/internal_packages_disabled/plugins/lib/main.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { PreferencesUIStore } from 'mailspring-exports';
-import PluginsView from './preferences-plugins';
-
-export function activate() {
- this.preferencesTab = new PreferencesUIStore.TabItem({
- tabId: 'Plugins',
- displayName: 'Plugins',
- componentClassFn: () => PluginsView,
- });
-
- PreferencesUIStore.registerPreferencesTab(this.preferencesTab);
-}
-
-export function deactivate() {
- PreferencesUIStore.unregisterPreferencesTab(this.preferencesTab.sectionId);
-}
diff --git a/app/internal_packages_disabled/plugins/lib/package-set.tsx b/app/internal_packages_disabled/plugins/lib/package-set.tsx
deleted file mode 100644
index 3455c2c5c..000000000
--- a/app/internal_packages_disabled/plugins/lib/package-set.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-
-import Package from './package';
-
-class PackageSet extends React.Component {
- static propTypes = {
- title: PropTypes.string.isRequired,
- packages: PropTypes.array,
- emptyText: PropTypes.element,
- showVersions: PropTypes.bool,
- };
-
- render() {
- if (!this.props.packages) return false;
-
- const packages = this.props.packages.map(pkg => (
-
- ));
- let count = ({this.props.packages.length}) ;
-
- if (packages.length === 0) {
- count = [];
- packages.push(
-
- {this.props.emptyText || 'No plugins to display.'}
-
- );
- }
-
- return (
-
-
- {this.props.title} {count}
-
- {packages}
-
- );
- }
-}
-
-export default PackageSet;
diff --git a/app/internal_packages_disabled/plugins/lib/package.tsx b/app/internal_packages_disabled/plugins/lib/package.tsx
deleted file mode 100644
index e0bb9d790..000000000
--- a/app/internal_packages_disabled/plugins/lib/package.tsx
+++ /dev/null
@@ -1,140 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-
-import { Flexbox, RetinaImg, Switch } from 'mailspring-component-kit';
-import PluginsActions from './plugins-actions';
-
-class Package extends React.Component {
- static displayName = 'Package';
-
- static propTypes = {
- package: PropTypes.object.isRequired,
- showVersions: PropTypes.bool,
- };
-
- _onDisablePackage = () => {
- PluginsActions.disablePackage(this.props.package);
- };
-
- _onEnablePackage = () => {
- PluginsActions.enablePackage(this.props.package);
- };
-
- _onUninstallPackage = () => {
- PluginsActions.uninstallPackage(this.props.package);
- };
-
- _onUpdatePackage = () => {
- PluginsActions.updatePackage(this.props.package);
- };
-
- _onInstallPackage = () => {
- PluginsActions.installPackage(this.props.package);
- };
-
- _onShowPackage = () => {
- PluginsActions.showPackage(this.props.package);
- };
-
- render() {
- const actions = [];
- const extras = [];
- let icon = ;
- let uninstallButton = null;
-
- if (this.props.package.icon) {
- icon = (
-
- );
- } else if (this.props.package.theme) {
- icon = ;
- }
-
- if (this.props.package.installed) {
- if (
- ['user', 'dev', 'example'].indexOf(this.props.package.category) !== -1 &&
- !this.props.package.theme
- ) {
- if (this.props.package.enabled) {
- actions.push(
-
- Disable
-
- );
- } else {
- actions.push(
-
- Enable
-
- );
- }
- }
- if (this.props.package.category === 'user') {
- uninstallButton = (
-
- Uninstall
-
- );
- }
- if (this.props.package.category === 'dev') {
- actions.push(
-
- Show...
-
- );
- }
- } else if (this.props.package.installing) {
- actions.push(
-
- Installing...
-
- );
- } else {
- actions.push(
-
- Install
-
- );
- }
-
- const { name, description, title, version } = this.props.package;
-
- if (this.props.package.newerVersionAvailable) {
- extras.push(
-
- A newer version is available: {this.props.package.newerVersion}
-
- Update
-
-
- );
- }
-
- const versionLabel = this.props.showVersions ? `v${version}` : null;
-
- return (
-
-
-
-
-
- {title || name} {versionLabel}
-
- {uninstallButton}
-
-
{description}
-
- {actions}
- {extras}
-
- );
- }
-}
-
-export default Package;
diff --git a/app/internal_packages_disabled/plugins/lib/packages-store.tsx b/app/internal_packages_disabled/plugins/lib/packages-store.tsx
deleted file mode 100644
index 7aa59a400..000000000
--- a/app/internal_packages_disabled/plugins/lib/packages-store.tsx
+++ /dev/null
@@ -1,240 +0,0 @@
-import _ from 'underscore';
-import Reflux from 'reflux';
-import path from 'path';
-import fs from 'fs-plus';
-import { ipcRenderer, shell, remote } from 'electron';
-
-import PluginsActions from './plugins-actions';
-
-const dialog = remote.dialog;
-
-const PackagesStore = Reflux.createStore({
- init: function init() {
- // this._globalSearch = "";
- // this._installedSearch = "";
- // this._installing = {};
- // this._featured = {
- // themes: [],
- // packages: [],
- // };
- // this._newerVersions = [];
- // this._searchResults = null;
- // this._refreshFeatured();
- // this.listenTo(PluginsActions.refreshFeaturedPackages, this._refreshFeatured);
- // this.listenTo(PluginsActions.refreshInstalledPackages, this._refreshInstalled);
- // this.listenTo(PluginsActions.installNewPackage, this._onInstallPackage);
- // this.listenTo(PluginsActions.createPackage, this._onCreatePackage);
- // this.listenTo(PluginsActions.updatePackage, this._onUpdatePackage);
- // this.listenTo(PluginsActions.setGlobalSearchValue, this._onGlobalSearchChange);
- // this.listenTo(PluginsActions.setInstalledSearchValue, this._onInstalledSearchChange);
- // this.listenTo(PluginsActions.showPackage, (pkg) => {
- // const dir = AppEnv.packages.resolvePackagePath(pkg.name);
- // if (dir) shell.showItemInFolder(dir);
- // });
- // this.listenTo(PluginsActions.installPackage, (pkg) => {
- // this._installing[pkg.name] = true;
- // this.trigger(this);
- // this._apm.install(pkg, (err) => {
- // if (err) {
- // delete this._installing[pkg.name];
- // this._displayMessage("Sorry, an error occurred", err.toString());
- // } else {
- // if (AppEnv.packages.isPackageDisabled(pkg.name)) {
- // AppEnv.packages.enablePackage(pkg.name);
- // }
- // }
- // this._onPackagesChanged();
- // });
- // });
- // this.listenTo(PluginsActions.uninstallPackage, (pkg) => {
- // if (AppEnv.packages.isPackageLoaded(pkg.name)) {
- // AppEnv.packages.disablePackage(pkg.name);
- // AppEnv.packages.unloadPackage(pkg.name);
- // }
- // this._apm.uninstall(pkg, (err) => {
- // if (err) this._displayMessage("Sorry, an error occurred", err.toString())
- // this._onPackagesChanged();
- // })
- // });
- // this.listenTo(PluginsActions.enablePackage, (pkg) => {
- // if (AppEnv.packages.isPackageDisabled(pkg.name)) {
- // AppEnv.packages.enablePackage(pkg.name);
- // this._onPackagesChanged();
- // }
- // });
- // this.listenTo(PluginsActions.disablePackage, (pkg) => {
- // if (!AppEnv.packages.isPackageDisabled(pkg.name)) {
- // AppEnv.packages.disablePackage(pkg.name);
- // this._onPackagesChanged();
- // }
- // });
- // this._hasPrepared = false;
- },
-
- // Getters
-
- installed: function installed() {
- this._prepareIfFresh();
- return this._addPackageStates(this._filter(this._installed, this._installedSearch));
- },
-
- installedSearchValue: function installedSearchValue() {
- return this._installedSearch;
- },
-
- featured: function featured() {
- this._prepareIfFresh();
- return this._addPackageStates(this._featured);
- },
-
- searchResults: function searchResults() {
- return this._addPackageStates(this._searchResults);
- },
-
- globalSearchValue: function globalSearchValue() {
- return this._globalSearch;
- },
-
- // Action Handlers
-
- _prepareIfFresh: function _prepareIfFresh() {
- if (this._hasPrepared) return;
- AppEnv.packages.onDidActivatePackage(() => this._onPackagesChangedDebounced());
- AppEnv.packages.onDidDeactivatePackage(() => this._onPackagesChangedDebounced());
- AppEnv.packages.onDidLoadPackage(() => this._onPackagesChangedDebounced());
- AppEnv.packages.onDidUnloadPackage(() => this._onPackagesChangedDebounced());
- this._onPackagesChanged();
- this._hasPrepared = true;
- },
-
- _filter: function _filter(hash, search) {
- const result = {};
- const query = search.toLowerCase();
- if (hash) {
- Object.keys(hash).forEach(key => {
- result[key] = _.filter(
- hash[key],
- p => query.length === 0 || p.name.toLowerCase().indexOf(query) !== -1
- );
- });
- }
- return result;
- },
-
- _refreshFeatured: function _refreshFeatured() {
- this._apm
- .getFeatured({ themes: false })
- .then(results => {
- this._featured.packages = results;
- this.trigger();
- })
- .catch(() => {
- // We may be offline
- });
- this._apm
- .getFeatured({ themes: true })
- .then(results => {
- this._featured.themes = results;
- this.trigger();
- })
- .catch(() => {
- // We may be offline
- });
- },
-
- _refreshInstalled: function _refreshInstalled() {
- this._onPackagesChanged();
- },
-
- _refreshSearch: function _refreshSearch() {
- if (!this._globalSearch || this._globalSearch.length <= 0) return;
-
- this._apm
- .search(this._globalSearch)
- .then(results => {
- this._searchResults = {
- packages: results.filter(({ theme }) => !theme),
- themes: results.filter(({ theme }) => theme),
- };
- this.trigger();
- })
- .catch(() => {
- // We may be offline
- });
- },
-
- _refreshSearchThrottled: function _refreshSearchThrottled() {
- _.debounce(this._refreshSearch, 400);
- },
-
- _onPackagesChanged: function _onPackagesChanged() {
- this._apm.getInstalled().then(packages => {
- for (const category of ['dev', 'user']) {
- packages[category].forEach(pkg => {
- pkg.category = category;
- delete this._installing[pkg.name];
- });
- }
-
- const available = AppEnv.packages.getAvailablePackageMetadata();
- const examples = available.filter(
- ({ isOptional, isHiddenOnPluginsPage }) => isOptional && !isHiddenOnPluginsPage
- );
- packages.example = examples.map(pkg =>
- Object.assign({}, pkg, { installed: true, category: 'example' })
- );
- this._installed = packages;
- this.trigger();
- });
- },
-
- _onPackagesChangedDebounced: function _onPackagesChangedDebounced() {
- _.debounce(this._onPackagesChanged, 200);
- },
-
- _onInstalledSearchChange: function _onInstalledSearchChange(val) {
- this._installedSearch = val;
- this.trigger();
- },
-
- _onUpdatePackage: function _onUpdatePackage(pkg) {
- this._apm.update(pkg, pkg.newerVersion);
- },
-
- _onGlobalSearchChange: function _onGlobalSearchChange(val) {
- // Clear previous search results data if this is a new
- // search beginning from "".
- if (this._globalSearch.length === 0 && val.length > 0) {
- this._searchResults = null;
- }
-
- this._globalSearch = val;
- this._refreshSearchThrottled();
- this.trigger();
- },
-
- _addPackageStates: function _addPackageStates(pkgs) {
- const installedNames = _.flatten(Object.values(this._installed)).map(pkg => pkg.name);
-
- _.flatten(Object.values(pkgs)).forEach(pkg => {
- pkg.enabled = !AppEnv.packages.isPackageDisabled(pkg.name);
- pkg.installed = installedNames.indexOf(pkg.name) !== -1;
- pkg.installing = this._installing[pkg.name];
- pkg.newerVersionAvailable = this._newerVersions[pkg.name];
- pkg.newerVersion = this._newerVersions[pkg.name];
- });
-
- return pkgs;
- },
-
- _displayMessage: function _displayMessage(title, message) {
- dialog.showMessageBox({
- type: 'warning',
- message: title,
- detail: message,
- buttons: ['OK'],
- });
- },
-});
-
-export default PackagesStore;
diff --git a/app/internal_packages_disabled/plugins/lib/plugins-actions.tsx b/app/internal_packages_disabled/plugins/lib/plugins-actions.tsx
deleted file mode 100644
index 35e0d4485..000000000
--- a/app/internal_packages_disabled/plugins/lib/plugins-actions.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import Reflux from 'reflux';
-
-const Actions = Reflux.createActions([
- 'selectTabIndex',
- 'setInstalledSearchValue',
- 'setGlobalSearchValue',
-
- 'disablePackage',
- 'enablePackage',
- 'installPackage',
- 'installNewPackage',
- 'uninstallPackage',
- 'createPackage',
- 'reloadPackage',
- 'showPackage',
- 'updatePackage',
-
- 'refreshFeaturedPackages',
- 'refreshInstalledPackages',
-]);
-
-for (const key of Object.keys(Actions)) {
- Actions[key].sync = true;
-}
-
-export default Actions;
diff --git a/app/internal_packages_disabled/plugins/lib/plugins-tabs-view.tsx b/app/internal_packages_disabled/plugins/lib/plugins-tabs-view.tsx
deleted file mode 100644
index 5ab5c9d2c..000000000
--- a/app/internal_packages_disabled/plugins/lib/plugins-tabs-view.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import React from 'react';
-import classNames from 'classnames';
-import PropTypes from 'prop-types';
-
-import Tabs from './tabs';
-import TabsStore from './tabs-store';
-import PluginsActions from './plugins-actions';
-
-class PluginsTabs extends React.Component {
- static displayName = 'PluginsTabs';
-
- static propTypes = {
- onChange: PropTypes.Func,
- };
-
- static containerRequired = false;
-
- static containerStyles = {
- minWidth: 200,
- maxWidth: 290,
- };
-
- constructor() {
- super();
- this.state = this._getStateFromStores();
- }
-
- componentDidMount() {
- this._unsubscribers = [];
- this._unsubscribers.push(TabsStore.listen(this._onChange));
- }
-
- componentWillUnmount() {
- this._unsubscribers.forEach(unsubscribe => unsubscribe());
- }
-
- _getStateFromStores() {
- return {
- tabIndex: TabsStore.tabIndex(),
- };
- }
-
- _onChange = () => {
- this.setState(this._getStateFromStores());
- };
-
- _renderItems() {
- return Tabs.map(({ name, key, icon }, idx) => {
- const classes = classNames({
- tab: true,
- active: idx === this.state.tabIndex,
- });
- return (
- PluginsActions.selectTabIndex(idx)}>
- {name}
-
- );
- });
- }
-
- render() {
- return ;
- }
-}
-
-export default PluginsTabs;
diff --git a/app/internal_packages_disabled/plugins/lib/preferences-plugins.tsx b/app/internal_packages_disabled/plugins/lib/preferences-plugins.tsx
deleted file mode 100644
index 5a3bfceda..000000000
--- a/app/internal_packages_disabled/plugins/lib/preferences-plugins.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import React from 'react';
-
-import TabsStore from './tabs-store';
-import Tabs from './tabs';
-
-class PluginsView extends React.Component {
- static displayName = 'PluginsView';
-
- static containerStyles = {
- minWidth: 500,
- maxWidth: 99999,
- };
-
- constructor() {
- super();
- this.state = this._getStateFromStores();
- }
-
- componentDidMount() {
- this._unsubscribers = [];
- this._unsubscribers.push(TabsStore.listen(this._onChange));
- }
-
- componentWillUnmount() {
- this._unsubscribers.forEach(unsubscribe => unsubscribe());
- }
-
- _getStateFromStores() {
- return { tabIndex: TabsStore.tabIndex() };
- }
-
- _onChange = () => {
- this.setState(this._getStateFromStores());
- };
-
- render() {
- const PluginsTabComponent = Tabs[this.state.tabIndex].component;
- return (
-
- );
- }
-}
-
-export default PluginsView;
diff --git a/app/internal_packages_disabled/plugins/lib/tab-explore.tsx b/app/internal_packages_disabled/plugins/lib/tab-explore.tsx
deleted file mode 100644
index 43935d01c..000000000
--- a/app/internal_packages_disabled/plugins/lib/tab-explore.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-import React from 'react';
-
-import PackageSet from './package-set';
-import PackagesStore from './packages-store';
-import PluginsActions from './plugins-actions';
-
-class TabExplore extends React.Component {
- static displayName = 'TabExplore';
-
- constructor() {
- super();
- this.state = this._getStateFromStores();
- }
-
- componentDidMount() {
- this._unsubscribers = [];
- this._unsubscribers.push(PackagesStore.listen(this._onChange));
-
- // Trigger a refresh of the featured packages
- PluginsActions.refreshFeaturedPackages();
- }
-
- componentWillUnmount() {
- this._unsubscribers.forEach(unsubscribe => unsubscribe());
- }
-
- _getStateFromStores() {
- return {
- featured: PackagesStore.featured(),
- search: PackagesStore.globalSearchValue(),
- searchResults: PackagesStore.searchResults(),
- };
- }
-
- _onChange = () => {
- this.setState(this._getStateFromStores());
- };
-
- _onSearchChange = event => {
- PluginsActions.setGlobalSearchValue(event.target.value);
- };
-
- render() {
- let collection = this.state.featured;
- let collectionPrefix = 'Featured ';
- let emptyText = null;
- if (this.state.search.length > 0) {
- collectionPrefix = 'Matching ';
- if (this.state.searchResults) {
- collection = this.state.searchResults;
- emptyText = 'No results found.';
- } else {
- collection = {
- packages: [],
- themes: [],
- };
- emptyText = 'Loading results...';
- }
- }
-
- return (
-
- );
- }
-}
-
-export default TabExplore;
diff --git a/app/internal_packages_disabled/plugins/lib/tab-installed.tsx b/app/internal_packages_disabled/plugins/lib/tab-installed.tsx
deleted file mode 100644
index 938278512..000000000
--- a/app/internal_packages_disabled/plugins/lib/tab-installed.tsx
+++ /dev/null
@@ -1,129 +0,0 @@
-import React from 'react';
-import { ipcRenderer } from 'electron';
-import { Flexbox } from 'mailspring-component-kit';
-
-import PackageSet from './package-set';
-import PackagesStore from './packages-store';
-import PluginsActions from './plugins-actions';
-
-class TabInstalled extends React.Component {
- static displayName = 'TabInstalled';
-
- constructor() {
- super();
- this.state = this._getStateFromStores();
- }
-
- componentDidMount() {
- this._unsubscribers = [];
- this._unsubscribers.push(PackagesStore.listen(this._onChange));
-
- PluginsActions.refreshInstalledPackages();
- }
-
- componentWillUnmount() {
- this._unsubscribers.forEach(unsubscribe => unsubscribe());
- }
-
- _getStateFromStores() {
- return {
- packages: PackagesStore.installed(),
- search: PackagesStore.installedSearchValue(),
- };
- }
-
- _onChange = () => {
- this.setState(this._getStateFromStores());
- };
-
- _onInstallPackage() {
- PluginsActions.installNewPackage();
- }
-
- _onCreatePackage() {
- PluginsActions.createPackage();
- }
-
- _onSearchChange = event => {
- PluginsActions.setInstalledSearchValue(event.target.value);
- };
-
- _onEnableDevMode() {
- ipcRenderer.send('command', 'application:toggle-dev');
- }
-
- render() {
- let searchEmpty = null;
- if (this.state.search.length > 0) {
- searchEmpty = 'No matching packages.';
- }
-
- let devPackages = [];
- let devEmpty = (
- {`Run with debug flags enabled to load ${AppEnv.getConfigDirPath()}/dev/packages.`}
- );
- let devCTA = (
-
- Enable Debug Flags
-
- );
-
- if (AppEnv.inDevMode()) {
- devPackages = this.state.packages.dev || [];
- devEmpty = (
-
- {`You don't have any packages installed in ${AppEnv.getConfigDirPath()}/dev/packages. `}
- These plugins are only loaded when you run the app with debug flags enabled (via the
- Developer menu).
- Learn more about building plugins with{' '}
- our docs .
-
- );
- devCTA = (
-
- Create New Plugin...
-
- );
- }
-
- return (
-
-
-
-
- Install Plugin...
-
-
-
-
{`You don't have any plugins installed in ${AppEnv.getConfigDirPath()}/packages.`}
- )
- }
- />
-
-
- {devCTA}
-
-
- );
- }
-}
-
-export default TabInstalled;
diff --git a/app/internal_packages_disabled/plugins/lib/tabs-store.tsx b/app/internal_packages_disabled/plugins/lib/tabs-store.tsx
deleted file mode 100644
index 0bc6aa7a6..000000000
--- a/app/internal_packages_disabled/plugins/lib/tabs-store.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import Reflux from 'reflux';
-
-import PluginsActions from './plugins-actions';
-
-const TabsStore = Reflux.createStore({
- init: function init() {
- this._tabIndex = 0;
- this.listenTo(PluginsActions.selectTabIndex, this._onTabIndexChanged);
- },
-
- // Getters
-
- tabIndex: function tabIndex() {
- return this._tabIndex;
- },
-
- // Action Handlers
-
- _onTabIndexChanged: function _onTabIndexChanged(idx) {
- this._tabIndex = idx;
- this.trigger(this);
- },
-});
-
-export default TabsStore;
diff --git a/app/internal_packages_disabled/plugins/lib/tabs.tsx b/app/internal_packages_disabled/plugins/lib/tabs.tsx
deleted file mode 100644
index d07ac8805..000000000
--- a/app/internal_packages_disabled/plugins/lib/tabs.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import TabInstalled from './tab-installed';
-
-const Tabs = [
- {
- key: 'installed',
- name: 'Installed',
- icon: 'tbd',
- component: TabInstalled,
- },
-];
-
-export default Tabs;
diff --git a/app/internal_packages_disabled/plugins/package.json b/app/internal_packages_disabled/plugins/package.json
deleted file mode 100755
index 619997c0b..000000000
--- a/app/internal_packages_disabled/plugins/package.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "name": "plugins",
- "version": "0.1.0",
- "main": "./lib/main",
- "description": "Plugins",
- "license": "GPL-3.0",
- "private": true,
- "engines": {
- "mailspring": "*"
- }
-}
diff --git a/app/internal_packages_disabled/plugins/styles/plugins.less b/app/internal_packages_disabled/plugins/styles/plugins.less
deleted file mode 100644
index 5e2d341fa..000000000
--- a/app/internal_packages_disabled/plugins/styles/plugins.less
+++ /dev/null
@@ -1,132 +0,0 @@
-@import 'ui-variables';
-@import 'ui-mixins';
-
-.plugins-view-tabs {
- color: @text-color-subtle;
- list-style-type: none;
- padding-left: 0;
- cursor: default;
-
- li {
- padding: @padding-large-vertical @padding-large-horizontal;
- border-bottom: 1px solid @border-color-divider;
-
- &.active {
- background: @source-list-active-bg;
- color: @source-list-active-color;
- img.colorfill {
- background: @source-list-active-color;
- }
- }
- }
-}
-
-.plugins-view {
- max-width: 800px;
- margin: 0 auto;
- .new-package {
- margin-bottom: 50px;
- }
-
- .installed,
- .explore {
- overflow-y: scroll;
- padding-left: @padding-large-horizontal;
- height: 100%;
-
- .inner {
- max-width: 800px;
- .search-container {
- margin: @padding-large-vertical 2px;
- justify-content: space-between;
- }
- }
-
- input {
- box-sizing: border-box;
- width: 30%;
- }
- .search {
- padding-left: 0;
- background-repeat: no-repeat;
- background-image: url('../static/images/search/searchloupe@2x.png');
- background-size: 15px 15px;
- background-position: 7px 4px;
- text-indent: 31px;
- }
- .empty {
- color: @text-color-very-subtle;
- margin-bottom: @padding-large-vertical * 2;
- }
- }
-
- .package-set {
- margin-top: 35px;
- }
- .package {
- align-items: center;
- background: @background-primary;
- border: 1px solid @border-color-divider;
- border-radius: @border-radius-large;
- margin-top: @padding-large-vertical;
- margin-bottom: @padding-large-vertical;
- padding: @padding-large-vertical @padding-large-horizontal;
-
- .icon-container {
- width: 52px;
- height: 52px;
- border-radius: 6px;
- background: linear-gradient(to bottom, @background-primary 0%, @background-secondary 100%);
- box-shadow: 0 0.5px 0 rgba(0, 0, 0, 0.15), 0 -0.5px 0 rgba(0, 0, 0, 0.15),
- 0.5px 0 0 rgba(0, 0, 0, 0.15), -0.5px 0 0 rgba(0, 0, 0, 0.15),
- 0 0.5px 1px rgba(0, 0, 0, 0.15);
- flex-shrink: 0;
- margin-right: @padding-large-horizontal;
- text-align: center;
- line-height: 50px;
- }
- .info {
- max-width: 380px;
- cursor: default;
-
- .title {
- color: @text-color-heading;
- font-size: @font-size-h4;
- font-weight: @font-weight-normal;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- .version {
- font-size: @font-size-small;
- font-weight: @font-weight-normal;
- margin-left: 10px;
- margin-top: 4px;
- }
- .uninstall-plugin {
- color: @text-color-link;
- margin-left: 10px;
- margin-top: 4px;
- }
- .description {
- padding-top: @padding-base-vertical;
- color: @text-color-very-subtle;
- font-size: @font-size-small;
- }
- }
- .actions {
- flex: 1;
- text-align: right;
- .btn {
- margin-left: @padding-small-horizontal;
- }
- }
- .update-info {
- background: fade(@accent-primary, 10%);
- line-height: @line-height-computed * 1.1;
- .btn {
- float: right;
- }
- }
- }
-}