diff --git a/components/ThemeList.jsx b/components/ThemeList.jsx
index 5d3c0fded..480060d7f 100644
--- a/components/ThemeList.jsx
+++ b/components/ThemeList.jsx
@@ -24,7 +24,8 @@ import LocaleUtils from '../utils/LocaleUtils';
import ThemeUtils from '../utils/ThemeUtils';
import Icon from './Icon';
-import './style/ThemeList.css';
+import './style/ThemeListPortal.css';
+import './style/ThemeListSidebar.css';
class ThemeList extends React.Component {
static propTypes = {
@@ -45,7 +46,8 @@ class ThemeList extends React.Component {
setUserInfoFields: PropTypes.func,
showDefaultThemeSelector: PropTypes.bool,
showLayerAfterChangeTheme: PropTypes.bool,
- themes: PropTypes.object
+ themes: PropTypes.object,
+ className: PropTypes.string
};
state = {
expandedGroups: [],
@@ -130,22 +132,6 @@ class ThemeList extends React.Component {
onClick={() => this.setTheme(item)}
title={title}
>
-
- {item.title}
-
-
- {!isEmpty(infoLinks) ? ( this.toggleThemeInfoMenu(ev, item.id)}>
-
- {item.themeInfoLinks.title ? (
{item.themeInfoLinks.title}) : LocaleUtils.tr(item.themeInfoLinks.titleMsgId)}
-
- {this.state.visibleThemeInfoMenu === item.id ? (
-
ev.stopPropagation()}>
- {infoLinks.map(link => (
-
{link.title}
- ))}
-
- ) : null}
-
) : null}
{item.description ? (
) : null}
@@ -162,13 +148,22 @@ class ThemeList extends React.Component {
)}
- {isEmpty(matches) ? null : (
-
- {matches.map(match => (
-
{LocaleUtils.tr(match[0])}:
{match[1][0]}{match[1][1]}{match[1][2]}
- ))}
-
- )}
+
+ {item.title}
+
+
+ {!isEmpty(infoLinks) ? ( this.toggleThemeInfoMenu(ev, item.id)}>
+
+ {item.themeInfoLinks.title ? (
{item.themeInfoLinks.title}) : LocaleUtils.tr(item.themeInfoLinks.titleMsgId)}
+
+ {this.state.visibleThemeInfoMenu === item.id ? (
+
ev.stopPropagation()}>
+ {infoLinks.map(link => (
+
{link.title}
+ ))}
+
+ ) : null}
+
) : null}
);
})}
@@ -190,9 +185,10 @@ class ThemeList extends React.Component {
return false;
};
render() {
+ const { className } = this.props;
const filter = this.props.filter ? new RegExp(removeDiacritics(this.props.filter).replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&"), "i") : null;
return (
-
+
{this.renderThemeGroup(this.props.themes, filter)}
);
diff --git a/components/style/ThemeListPortal.css b/components/style/ThemeListPortal.css
new file mode 100644
index 000000000..bdbaff693
--- /dev/null
+++ b/components/style/ThemeListPortal.css
@@ -0,0 +1,197 @@
+div.ThemeListPortal ul {
+ padding: 0;
+ list-style-type: none;
+}
+
+div.ThemeListPortal li.theme-group-header > span {
+ font-weight: bold;
+ display: flex;
+ align-items: center;
+ border-bottom: 1px solid var(--border-color);
+ padding: 0.25em;
+ margin: 0 0.5em 0.5em 0.5em;
+}
+
+div.ThemeListPortal li.theme-group-header > span > span.icon {
+ margin-right: 0.25em;
+}
+
+div.ThemeListPortal ul.theme-group-body {
+ padding: 0.25em;
+ display: flex;
+ justify-content: center;
+ flex-direction: column;
+ align-items: center;
+ gap: 2.25em;
+}
+
+@media screen and (min-width: 426px) {
+ div.ThemeListPortal ul.theme-group-body {
+ display: flex;
+ justify-content: center;
+ flex-direction: row;
+ flex-wrap: wrap;
+ }
+}
+
+div.ThemeListPortal li.theme-group-header ul.theme-group-body {
+ margin-left: 0.25em;
+}
+
+div.ThemeListPortal li.theme-item {
+ font-weight: bold;
+ font-size: large;
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ width: 15em;
+ border-radius: 1.55em;
+ transition: all 0.3s cubic-bezier(0.4, 0, 1, 1);
+ position: relative;
+ overflow: hidden;
+ background-color: white;
+ border: none;
+}
+
+div.ThemeListPortal div.theme-item-title {
+ display: flex;
+ align-items: center;
+ padding: 0.3em 0;
+ order: 2;
+ background-color: white;
+}
+
+div.ThemeListPortal div.theme-item-title > span:first-child {
+ flex: 1 1 auto;
+ padding: 0.125em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+div.ThemeListPortal div.theme-item-title > span.icon {
+ flex: 0 0 auto;
+ padding: 0.125em;
+ font-size: large;
+}
+
+div.ThemeListPortal li.theme-item-active div.theme-item-title > span:first-child {
+ color: var(--color-active);
+}
+
+div.ThemeListPortal img.theme-item-thumbnail {
+ width: calc(15em - 2px);
+ height: auto;
+ border-radius: 1.55em;
+ order: 1;
+}
+
+div.ThemeListPortal div.theme-item-body {
+ order: 1;
+}
+
+div.ThemeListPortal div.theme-item-icons {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ display: flex;
+ flex-direction: column;
+}
+
+div.ThemeListPortal div.theme-item-icons > span.icon {
+ flex: 0 0 auto;
+ font-size: large;
+ padding: 0.25em;
+ background-color: var(--button-bg-color);
+ color: var(--text-color);
+ z-index: 2;
+ display: none;
+}
+
+div.ThemeListPortal div.theme-item-icons > span.icon:hover {
+ color: var(--color-active);
+}
+
+div.ThemeListPortal li.theme-item:hover div.theme-item-body {
+ background-color: transparent;
+}
+div.ThemeListPortal li.theme-item:hover {
+ background-color: lightgray !important;
+ border: none !important;
+}
+div.ThemeListPortal div.theme-item-icons > span.icon-active {
+ color: var(--color-active);
+}
+div.ThemeListPortal li.theme-item:hover div.theme-item-title {
+ background-color: transparent;
+}
+div.ThemeListPortal div.theme-item-keywords {
+ position: relative;
+ display: inline-block;
+ color: gray;
+ font-size: x-small;
+ font-weight: normal;
+ max-width: 80%;
+ overflow-x: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+div.ThemeListPortal li.theme-item-active {
+ border: none;
+}
+
+div.ThemeListPortal div.theme-item-info-menu {
+ text-align: left;
+ display: flex;
+ align-items: center;
+ position: relative;
+ color: var(--color-active);
+ padding: 0.25em;
+}
+
+div.ThemeListPortal div.theme-item-info-menu-active {
+ background-color: var(--color-active);
+ color: white;
+}
+
+div.ThemeListPortal div.theme-item-info-menu > span.icon-info {
+ margin-right: 0.25em;
+}
+
+div.ThemeListPortal div.theme-item-info-menu > span.icon-triangle-down {
+ margin-left: 0.25em;
+ font-size: 80%;
+}
+
+div.ThemeListPortal div.theme-item-info-links {
+ position: absolute;
+ top: 100%;
+ max-width: calc(15em + 2px);
+ left: -1px;
+ right: -1px;
+ background-color: rgba(255, 255, 255, 0.85);
+ border: 1px solid var(--color-active);
+}
+
+div.ThemeListPortal div.theme-item-info-links > a {
+ display: block;
+ text-align: left;
+ padding: 0.25em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+div.ThemeListPortal div.theme-item-restricted-overlay {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ background-color: rgba(127, 127, 127, 0.5);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 400%;
+}
diff --git a/components/style/ThemeList.css b/components/style/ThemeListSidebar.css
similarity index 82%
rename from components/style/ThemeList.css
rename to components/style/ThemeListSidebar.css
index e6fd67691..06b632669 100644
--- a/components/style/ThemeList.css
+++ b/components/style/ThemeListSidebar.css
@@ -1,194 +1,168 @@
-div.ThemeList ul {
- padding: 0;
- list-style-type: none;
-}
-
-div.ThemeList li.theme-group-header > span {
- font-weight: bold;
- display: flex;
- align-items: center;
- border-bottom: 1px solid var(--border-color);
- padding: 0.25em;
- margin: 0 0.5em 0.5em 0.5em;
-}
-
-div.ThemeList li.theme-group-header > span > span.icon {
- margin-right: 0.25em;
-}
-
-div.ThemeList ul.theme-group-body {
- padding: 0.25em;
-}
-
-div.ThemeList li.theme-group-header ul.theme-group-body {
- margin-left: 0.25em;
-}
-
-div.ThemeList li.theme-item {
- background-color: var(--list-bg-color);
- font-weight: bold;
- font-size: small;
- border: 1px solid var(--border-color);
- margin: 0.5em;
- text-align: center;
- display: inline-block;
- width: 15em;
- position: relative;
-}
-div.ThemeList div.theme-item-title {
- display: flex;
- align-items: center;
-}
-
-div.ThemeList div.theme-item-title > span:first-child {
- flex: 1 1 auto;
- padding: 0.125em;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-div.ThemeList div.theme-item-title > span.icon {
- flex: 0 0 auto;
- padding: 0.125em;
- font-size: large;
-}
-
-div.ThemeList div.theme-item-body {
- background-color: white;
-}
-
-div.ThemeList li.theme-item-active div.theme-item-title > span:first-child {
- color: var(--color-active);
-}
-
-div.ThemeList img.theme-item-thumbnail {
- width: calc(15em - 2px);
- height: auto;
-}
-
-div.ThemeList div.theme-item-icons {
- position: absolute;
- bottom: 0;
- right: 0;
- display: flex;
- flex-direction: column;
-}
-
-div.ThemeList div.theme-item-icons > span.icon {
- flex: 0 0 auto;
- font-size: large;
- padding: 0.25em;
- background-color: var(--button-bg-color);
- color: var(--text-color);
- z-index: 2;
-}
-
-div.ThemeList div.theme-item-icons > span.icon:hover {
- color: var(--color-active);
-}
-
-div.ThemeList li.theme-item:hover {
- border: 1px solid var(--color-active);
-}
-
-div.ThemeList div.theme-item-icons > span.icon-active {
- color: var(--color-active);
-}
-
-div.ThemeList div.theme-item-keywords {
- position: relative;
- display: inline-block;
- color: gray;
- font-size: x-small;
- font-weight: normal;
- max-width: 80%;
- overflow-x: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-
-div.ThemeList li.theme-item-active {
- border: 1px solid var(--color-active);
-}
-
-div.ThemeList div.theme-item-info-menu {
- text-align: left;
- display: flex;
- align-items: center;
- position: relative;
- color: var(--color-active);
- padding: 0.25em;
-}
-
-div.ThemeList div.theme-item-info-menu-active {
- background-color: var(--color-active);
- color: white;
-}
-
-div.ThemeList div.theme-item-info-menu > span.icon-info {
- margin-right: 0.25em;
-}
-
-div.ThemeList div.theme-item-info-menu > span.icon-triangle-down {
- margin-left: 0.25em;
- font-size: 80%;
-}
-
-div.ThemeList div.theme-item-info-links {
- position: absolute;
- top: 100%;
- max-width: calc(15em + 2px);
- left: -1px;
- right: -1px;
- background-color: rgba(255, 255, 255, 0.85);
- border: 1px solid var(--color-active);
-}
-
-div.ThemeList div.theme-item-info-links > a {
- display: block;
- text-align: left;
- padding: 0.25em;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-div.ThemeList div.theme-item-filterinfo-overlay {
- position: absolute;
- bottom: 0;
- left: 0;
- right: 2.29em;
- font-size: 90%;
- background-color: rgba(255, 255, 255, 0.85);
- color: black;
- font-weight: normal;
- text-align: left;
- padding: 0.25em;
- border-top: 1px solid var(--border-color);
- border-right: 1px solid var(--border-color);
- z-index: 1;
-}
-
-div.ThemeList div.theme-item-filterinfo-overlay > div {
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-
-div.ThemeList div.theme-item-filterinfo-overlay > div:not(:last-child) {
- padding-bottom: 0.25em;
-}
-
-div.ThemeList div.theme-item-restricted-overlay {
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- background-color: rgba(127, 127, 127, 0.5);
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 400%;
-}
+div.ThemeList ul {
+ padding: 0;
+ list-style-type: none;
+}
+
+div.ThemeList li.theme-group-header > span {
+ font-weight: bold;
+ display: flex;
+ align-items: center;
+ border-bottom: 1px solid var(--border-color);
+ padding: 0.25em;
+ margin: 0 0.5em 0.5em 0.5em;
+}
+
+div.ThemeList li.theme-group-header > span > span.icon {
+ margin-right: 0.25em;
+}
+
+div.ThemeList ul.theme-group-body {
+ padding: 0.25em;
+}
+
+div.ThemeList li.theme-group-header ul.theme-group-body {
+ margin-left: 0.25em;
+}
+
+div.ThemeList li.theme-item {
+ background-color: var(--list-bg-color);
+ font-weight: bold;
+ margin: 0.5em;
+ text-align: center;
+ display: inline-block;
+ width: 15em;
+ position: relative;
+}
+
+div.ThemeList div.theme-item-title {
+ display: flex;
+ align-items: center;
+}
+
+div.ThemeList div.theme-item-title > span:first-child {
+ flex: 1 1 auto;
+ padding: 0.125em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+div.ThemeList div.theme-item-title > span.icon {
+ flex: 0 0 auto;
+ padding: 0.125em;
+ font-size: large;
+}
+
+div.ThemeList div.theme-item-body {
+ background-color: white;
+}
+
+div.ThemeList li.theme-item-active div.theme-item-title > span:first-child {
+ color: var(--color-active);
+}
+
+div.ThemeList img.theme-item-thumbnail {
+ width: calc(15em - 2px);
+ height: auto;
+}
+
+div.ThemeList div.theme-item-icons {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ display: flex;
+ flex-direction: column;
+}
+
+div.ThemeList div.theme-item-icons > span.icon {
+ flex: 0 0 auto;
+ font-size: large;
+ padding: 0.25em;
+ background-color: var(--button-bg-color);
+ color: var(--text-color);
+ z-index: 2;
+ transition: color 0.3s; /* AƱadir transiciĆ³n para un efecto suave */
+}
+
+div.ThemeList div.theme-item-icons > span.icon:hover {
+ color: var(--color-active); /* Cambia el color del icono a azul en el hover */
+}
+
+div.ThemeList li.theme-item:hover {
+ border: 1px solid var(--color-active);
+}
+
+div.ThemeList div.theme-item-icons > span.icon-active {
+ color: var(--color-active);
+}
+
+div.ThemeList div.theme-item-keywords {
+ position: relative;
+ display: inline-block;
+ color: gray;
+ font-size: x-small;
+ font-weight: normal;
+ max-width: 80%;
+ overflow-x: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+div.ThemeList li.theme-item-active {
+ border: 1px solid var(--color-active);
+}
+
+div.ThemeList div.theme-item-info-menu {
+ text-align: left;
+ display: flex;
+ align-items: center;
+ position: relative;
+ color: var(--color-active);
+ padding: 0.25em;
+}
+
+div.ThemeList div.theme-item-info-menu-active {
+ background-color: var(--color-active);
+ color: white;
+}
+
+div.ThemeList div.theme-item-info-menu > span.icon-info {
+ margin-right: 0.25em;
+}
+
+div.ThemeList div.theme-item-info-menu > span.icon-triangle-down {
+ margin-left: 0.25em;
+ font-size: 80%;
+}
+
+div.ThemeList div.theme-item-info-links {
+ position: absolute;
+ top: 100%;
+ max-width: calc(15em + 2px);
+ left: -1px;
+ right: -1px;
+ background-color: rgba(255, 255, 255, 0.85);
+ border: 1px solid var(--color-active);
+}
+
+div.ThemeList div.theme-item-info-links > a {
+ display: block;
+ text-align: left;
+ padding: 0.25em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+div.ThemeList div.theme-item-restricted-overlay {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ background-color: rgba(127, 127, 127, 0.5);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 400%;
+}
diff --git a/plugins/Portal.jsx b/plugins/Portal.jsx
index 058e6b1bd..d5802b1ae 100644
--- a/plugins/Portal.jsx
+++ b/plugins/Portal.jsx
@@ -104,7 +104,7 @@ class Portal extends React.Component {
showOnStartup={this.props.showMenuOnStartup} />
-
+
{this.props.userName ? (
diff --git a/plugins/ThemeSwitcher.jsx b/plugins/ThemeSwitcher.jsx
index d6efbfe6c..51f5a148f 100644
--- a/plugins/ThemeSwitcher.jsx
+++ b/plugins/ThemeSwitcher.jsx
@@ -89,7 +89,8 @@ class ThemeSwitcher extends React.Component {
collapsibleGroups={this.props.collapsibleGroups}
filter={this.state.filter}
showDefaultThemeSelector={this.props.showDefaultThemeSelector}
- showLayerAfterChangeTheme={this.props.showLayerAfterChangeTheme}/>
+ showLayerAfterChangeTheme={this.props.showLayerAfterChangeTheme}
+ className="ThemeListSidebar" />
)
})}
diff --git a/plugins/style/Portal.css b/plugins/style/Portal.css
index c44ccd907..ea20ad9ac 100644
--- a/plugins/style/Portal.css
+++ b/plugins/style/Portal.css
@@ -1,33 +1,42 @@
div.portal-topbar {
- background-color: var(--titlebar-bg-color);
+ background-color: lightgray;
position: fixed;
left: 0;
right: 0;
top: 0;
- height: 3.5em;
+ height: 4em;
z-index: 201;
display: flex;
align-items: center;
}
span.portal-topbar-text {
- color: var(--titlebar-text-color);
+ color: #595959;
padding: 0 1.5em 0 0.5em;
font-weight: bold;
+ margin-left: 1.5em;
}
img.portal-logo {
width: auto;
height: 3.5em;
flex: 0 0 auto;
+ margin-left: 1em;
}
input.portal-search-field {
- flex: 1 0 auto;
height: 2em;
- max-width: 70ch;
- background-color: var(--input-bg-color);
- border: 1px solid var(--border-color);
+ background-color: white;
+ border: 1px solid #bbb;
+ display: none;
+}
+
+@media screen and (min-width: 426px) {
+ input.portal-search-field {
+ display: block;
+ max-width: 70ch;
+ flex: 1 1 auto;
+ }
}
span.portal-topbar-spacer {
@@ -40,35 +49,34 @@ div.portal-topbar div.AppMenu {
}
div.portal-topbar div.AppMenu div.appmenu-menu-container {
- height: calc(100vh - 5.75em);
- background-color: var(--app-menu-bg-color);
+ height: calc(100vh - 6.75em);
+ background-color: white;
}
div.portal-topbar div.AppMenu ul.appmenu-menu li:last-child {
- border-bottom: 1px solid var(--app-menu-text-color);
+ border-bottom: 1px solid #595959;
}
span.portal-menu-button {
margin-right: 1em;
- width: 19em;
display: inline-block;
}
span.portal-menu-label {
font-weight: bold;
- color: var(--titlebar-text-color);
+ color: #595959;
+ display: none;
}
.portal-menu-icon {
- color: var(--titlebar-text-color);
+ color: #595959;
padding: 0.25em;
margin: 0 1em;
- border: 2px solid var(--titlebar-text-color);
+ border: 2px solid #595959;
}
-
div.portal-body {
- background-color: var(--container-bg-color);
+ background-color: white;
position: fixed;
left: 0;
right: 0;
@@ -86,11 +94,12 @@ div.portal-body-menuvisible div.ThemeList {
div.portal-body div.ThemeList {
flex: 1 1 auto;
+ margin: 2em 0 2em 2em;
}
div.portal-bottombar {
- background-color: var(--titlebar-bg-color);
- color: var(--titlebar-text-color);
+ background-color: lightgray;
+ color: #000000;
position: fixed;
left: 0;
right: 0;
@@ -105,6 +114,7 @@ div.portal-bottombar {
div.portal-bottombar-user {
flex: 0 0 auto;
padding: 0 0.5em;
+ margin-left: 1em;
}
div.portal-bottombar-user > span.icon {
@@ -120,10 +130,11 @@ div.portal-bottombar-links {
}
div.portal-bottombar-links > a {
- color: var(--titlebar-text-color);
+ color: #595959;
padding: 0 0.5em;
+ margin-right: 1em;
}
div.portal-bottombar-links > a:not(:last-child) {
- border-right: 1px solid var(--titlebar-text-color);
+ border-right: 1px solid #595959;
}