Compare commits

..

1 Commits

Author SHA1 Message Date
Ty Correll 6c4f6de211 UI: fix overlap composer 2025-03-03 12:15:03 -06:00
24 changed files with 115 additions and 779 deletions
+8 -25
View File
@@ -8,36 +8,19 @@
"minimum_discourse_version": null, "minimum_discourse_version": null,
"maximum_discourse_version": null, "maximum_discourse_version": null,
"assets": {}, "assets": {},
"modifiers": { "modifiers": {},
"svg_icons": ["fa-fire"]
},
"components": [
"https://github.com/discourse/discourse-sidebar-new-topic-button.git",
"https://github.com/discourse/discourse-search-banner.git",
"https://github.com/discourse/discourse-full-width-component.git"
],
"color_schemes": { "color_schemes": {
"next_gen": { "next_gen": {
"primary": "1A1A1A", "primary": "1A1A1A",
"primary-low": "ebecf9", "secondary": "F5F8FF",
"primary-500": "8591ad", "header_background": "F5F8FF",
"secondary": "ffffff", "tertiary": "595bca"
"header_background": "f5f8ff",
"tertiary": "313270",
"tertiary-low": "d8d9f3",
"tertiary-50": "f5f8ff",
"selected": "d8d9f3",
"hover": "ebebf9"
}, },
"next_gen_dark": { "next_gen_dark": {
"primary": "F1EFF9", "primary": "F5F8FF",
"secondary": "1e1a36", "secondary": "1A1A1A",
"header_background": "00091d", "header_background": "1A1A1A",
"header_primary": "F5F8FF", "tertiary": "595bca"
"tertiary": "6465ab",
"tertiary-50": "131124",
"selected": "1e1a36",
"hover": "131124"
} }
} }
} }
-6
View File
@@ -1,6 +0,0 @@
$accent-color: dark-light-choose(#3c41c3, #6e4bbc);
:root {
--accent-color: #{$accent-color};
--background-color: #f5f8ff;
}
+1
View File
@@ -1,4 +1,5 @@
@import "buttons"; @import "buttons";
@import "compose";
@import "header"; @import "header";
@import "hiddenstuff"; @import "hiddenstuff";
@import "main"; @import "main";
@@ -1,6 +1,19 @@
import Component from "@glimmer/component";
import { apiInitializer } from "discourse/lib/api"; import { apiInitializer } from "discourse/lib/api";
import ExperimentalScreen from "../components/experimental-screen";
export default apiInitializer("1.8.0", (api) => { export default apiInitializer("1.8.0", (api) => {
api.renderInOutlet("above-main-container", ExperimentalScreen); api.renderInOutlet(
"above-main-container",
class ExperimentalScreen extends Component {
<template>
<ul class="experimental-screen">
<li class="experimental-screen__top-left"></li>
<li class="experimental-screen__top-right"></li>
<li class="experimental-screen__bottom-left"></li>
<li class="experimental-screen__bottom-right"></li>
<li class="experimental-screen__bottom-bar"></li>
</ul>
</template>
}
);
}); });
@@ -1,14 +0,0 @@
import Component from "@glimmer/component";
import avatar from "discourse/helpers/avatar";
export default class TopicAuthorColumn extends Component {
constructor() {
super(...arguments);
}
<template>
<span class="topic-author-avatar">
{{avatar @topic.creator imageSize="large"}}
</span>
</template>
}
@@ -1,11 +0,0 @@
import Component from "@glimmer/component";
export default class TopicAuthorColumn extends Component {
constructor() {
super(...arguments);
}
<template>
<span class="topic-author">@{{@topic.creator.username}}</span>
</template>
}
@@ -1,12 +0,0 @@
import Component from "@glimmer/component";
import { categoryLinkHTML } from "discourse/helpers/category-link";
export default class TopicAuthorColumn extends Component {
constructor() {
super(...arguments);
}
<template>
{{categoryLinkHTML @topic.category}}
</template>
}
@@ -1,14 +0,0 @@
import Component from "@glimmer/component";
import icon from "discourse/helpers/d-icon";
export default class TopicLikesColumn extends Component {
constructor() {
super(...arguments);
}
<template>
{{#if @topic.like_count}}
<span class="topic-likes">{{icon "heart"}}{{@topic.like_count}}</span>
{{/if}}
</template>
}
@@ -1,14 +0,0 @@
import Component from "@glimmer/component";
import icon from "discourse/helpers/d-icon";
export default class TopicRepliesColumn extends Component {
constructor() {
super(...arguments);
}
<template>
{{#if @topic.posts_count}}
<span class="topic-replies">{{icon "reply"}}{{@topic.posts_count}}</span>
{{/if}}
</template>
}
@@ -1,96 +0,0 @@
import Component from "@glimmer/component";
import { on } from "@ember/modifier";
import { action } from "@ember/object";
import { service } from "@ember/service";
import { and } from "truth-helpers";
import icon from "discourse/helpers/d-icon";
export default class TopicStatusColumn extends Component {
@service currentUser;
@service siteSettings;
get canAct() {
return this.currentUser && !this.args.disableActions;
}
get statusClass() {
let classes = ["topic-status-card"];
if (this.args.topic.bookmarked) {
classes.push("--bookmark");
} else if (this.args.topic.closed && this.args.topic.archived) {
classes.push("--locked --archived");
} else if (this.args.topic.closed) {
classes.push("--locked");
} else if (this.args.topic.archived) {
classes.push("--archived");
} else if (this.args.topic.is_warning) {
classes.push("--warning");
} else if (
this.args.showPrivateMessageIcon &&
this.args.topic.isPrivateMessage
) {
classes.push("--private-message");
} else if (this.args.topic.pinned) {
classes.push("--pinned");
} else if (this.args.topic.unpinned) {
classes.push("--unpinned");
}
return classes.join(" ");
}
get heatMap() {
return this.args.topic.views > this.siteSettings.topic_views_heat_medium;
}
@action
togglePinned(e) {
e.preventDefault();
this.args.topic.togglePinnedForUser();
}
<template>
{{#if @topic.bookmarked}}
<span class={{this.statusClass}}>{{icon "bookmark"}}Bookmarked</span>
{{/if}}
{{#if (and @topic.closed @topic.archived)~}}
<span class={{this.statusClass}}>Locked and Archived</span>
{{else if @topic.closed}}
<span class={{this.statusClass}}>Locked</span>
{{else if @topic.archived}}
<span class={{this.statusClass}}>Archived</span>
{{/if}}
{{#if @topic.is_warning}}
<span class={{this.statusClass}}>Warning</span>
{{else if (and @showPrivateMessageIcon @topic.isPrivateMessage)}}
<span class={{this.statusClass}}>Private Message</span>
{{/if}}
{{#if @topic.pinned}}
{{#if this.canAct}}
<button
type="button"
{{on "click" this.togglePinned}}
class={{this.statusClass}}
>{{icon "thumbtack"}}Pinned</button>
{{else}}
<span class={{this.statusClass}}>{{icon "thumbtack"}}Pinned</span>
{{/if}}
{{else if @topic.unpinned}}
{{#if this.canAct}}
<button
type="button"
{{on "click" this.togglePinned}}
class={{this.statusClass}}
>{{icon "thumbtack" class="unpinned"}}Unpinned</button>
{{else}}
<span class={{this.statusClass}}>{{icon
"thumbtack"
class="unpinned"
}}Unpinned</span>
{{/if}}
{{/if}}
{{#if this.heatMap}}
<span class="topic-status-card --hot">{{icon "fa-fire"}}Hot</span>
{{/if}}
</template>
}
@@ -1,67 +0,0 @@
import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
import { action } from "@ember/object";
import didInsert from "@ember/render-modifiers/modifiers/did-insert";
import { cancel, throttle } from "@ember/runloop";
import { htmlSafe } from "@ember/template";
import { bind } from "discourse/lib/decorators";
export default class ExperimentalScreen extends Component {
@tracked left = 0;
@tracked right = 0;
willDestroy() {
super.willDestroy(...arguments);
cancel(this._throttledCalculateDistanceHandler);
}
getDistance(element) {
const rect = element.getBoundingClientRect();
return rect;
}
@bind
calculateDistance() {
this._throttledCalculateDistanceHandler = throttle(
this,
this._throttledCalculateDistance,
50
);
}
_throttledCalculateDistance() {
const element = document.getElementById("main-outlet");
if (element) {
const distance = this.getDistance(element);
this.left = distance.left;
this.right = distance.right;
}
}
get distanceStyles() {
return htmlSafe(
`--left-distance: ${this.left}px; --right-distance: ${this.right}px;`
);
}
@action
onInsert() {
this.calculateDistance();
window.addEventListener("resize", this.calculateDistance);
}
<template>
<ul
class="experimental-screen"
{{didInsert this.onInsert}}
style={{this.distanceStyles}}
>
<li class="experimental-screen__top-left"></li>
<li class="experimental-screen__top-right"></li>
<li class="experimental-screen__bottom-left"></li>
<li class="experimental-screen__bottom-right"></li>
<li class="experimental-screen__bottom-bar"></li>
</ul>
</template>
}
@@ -1,81 +0,0 @@
import { withPluginApi } from "discourse/lib/plugin-api";
import TopicAuthorAvatarColumn from "../components/card/topic-author-avatar-column";
import TopicAuthorColumn from "../components/card/topic-author-column";
import TopicCategoryColumn from "../components/card/topic-category-column";
import TopicLikesColumn from "../components/card/topic-likes-column";
import TopicRepliesColumn from "../components/card/topic-replies-column";
import TopicStatusColumn from "../components/card/topic-status-column";
const TopicAuthor = <template>
<td class="topic-author-data">
<TopicAuthorColumn @topic={{@topic}} />
</td>
</template>;
const TopicAuthorAvatar = <template>
<td class="topic-author-avatar-data">
<TopicAuthorAvatarColumn @topic={{@topic}} />
</td>
</template>;
const TopicCategoryStatus = <template>
<td class="topic-category-status-data">
<TopicCategoryColumn @topic={{@topic}} />
<TopicStatusColumn @topic={{@topic}} />
</td>
</template>;
const TopicLikesReplies = <template>
<td class="topic-likes-replies-data">
<TopicLikesColumn @topic={{@topic}} />
<TopicRepliesColumn @topic={{@topic}} />
</td>
</template>;
export default {
name: "topic-list-customizations",
initialize() {
withPluginApi("1.39.0", (api) => {
api.registerValueTransformer(
"topic-list-columns",
({ value: columns }) => {
columns.add("topic-author", {
item: TopicAuthor,
after: "activity",
});
columns.add("topic-category-status", {
item: TopicCategoryStatus,
after: "topic-author",
});
columns.add("topic-author-avatar", {
item: TopicAuthorAvatar,
after: "topic-category-status",
});
columns.add("topic-likes-replies", {
item: TopicLikesReplies,
after: "topic-author-avatar",
});
columns.delete("posters");
columns.delete("views");
columns.delete("replies");
return columns;
}
);
api.registerValueTransformer(
"topic-list-item-class",
({ value: classes, context }) => {
if (context.topic.pinned || context.topic.pinned_globally) {
classes.push("--pinned");
}
return classes;
}
);
api.registerValueTransformer("topic-list-item-mobile-layout", () => {
return false;
});
});
},
};
+1 -1
View File
@@ -1,5 +1,5 @@
en: en:
theme_metadata: theme_metadata:
description: "" description: ''
settings: settings:
example_setting: A description of a setting. example_setting: A description of a setting.
+31 -15
View File
@@ -4,11 +4,6 @@
border-top-left-radius: var(--d-border-radius-large); border-top-left-radius: var(--d-border-radius-large);
} }
} }
.has-full-page-chat .experimental-screen {
display: none;
}
.experimental-screen { .experimental-screen {
max-width: unset !important; max-width: unset !important;
.has-full-page-chat & { .has-full-page-chat & {
@@ -35,8 +30,8 @@
position: fixed; position: fixed;
width: var(--d-border-radius-large); width: var(--d-border-radius-large);
height: var(--d-border-radius-large); height: var(--d-border-radius-large);
background-color: var(--tertiary-50); background-color: var(--secondary);
z-index: 399; z-index: 999;
-webkit-mask: radial-gradient( -webkit-mask: radial-gradient(
circle at var(--d-border-radius-large) var(--d-border-radius-large), circle at var(--d-border-radius-large) var(--d-border-radius-large),
transparent var(--d-border-radius-large), transparent var(--d-border-radius-large),
@@ -46,18 +41,32 @@
} }
&__top-left { &__top-left {
top: var(--header-offset); top: var(--header-offset);
left: var(--left-distance); left: calc(var(--main-grid-gap) + var(--d-sidebar-width));
@media screen and (max-width: 768px) {
left: var(--main-grid-gap);
}
} }
&__top-right { &__top-right {
top: var(--header-offset); top: var(--header-offset);
transform: rotate(90deg); transform: rotate(90deg);
left: calc(var(--right-distance) - var(--d-border-radius-large)); @container content-width (width > 1px) {
left: calc(
var(--main-grid-gap) + var(--d-sidebar-width) + 100cqw -
var(--d-border-radius-large)
);
@media screen and (max-width: 768px) {
left: calc(
var(--main-grid-gap) + 100cqw - var(--d-border-radius-large)
);
}
}
} }
&__bottom-left { &__bottom-left {
transform: rotate(-90deg); transform: rotate(-90deg);
bottom: var(--d-border-radius-large); bottom: var(--d-border-radius-large);
left: var(--left-distance); left: calc(var(--main-grid-gap) + var(--d-sidebar-width));
@media screen and (max-width: 768px) { @media screen and (max-width: 768px) {
left: var(--main-grid-gap);
bottom: calc(var(--d-border-radius-large) * 2); bottom: calc(var(--d-border-radius-large) * 2);
} }
} }
@@ -65,8 +74,14 @@
transform: rotate(180deg); transform: rotate(180deg);
bottom: var(--d-border-radius-large); bottom: var(--d-border-radius-large);
@container content-width (width > 1px) { @container content-width (width > 1px) {
left: calc(var(--right-distance) - var(--d-border-radius-large)); left: calc(
var(--main-grid-gap) + var(--d-sidebar-width) + 100cqw -
var(--d-border-radius-large)
);
@media screen and (max-width: 768px) { @media screen and (max-width: 768px) {
left: calc(
var(--main-grid-gap) + 100cqw - var(--d-border-radius-large)
);
bottom: calc(var(--d-border-radius-large) * 2); bottom: calc(var(--d-border-radius-large) * 2);
} }
} }
@@ -74,14 +89,15 @@
&__bottom-bar { &__bottom-bar {
position: fixed; position: fixed;
width: 100%; width: 100%;
z-index: 399; z-index: 999;
background-color: var(--tertiary-50); background-color: var(--secondary);
bottom: 0; bottom: 0;
left: var(--left-distance); left: calc(var(--main-grid-gap) + var(--d-sidebar-width));
height: var(--d-border-radius-large);
@media screen and (max-width: 768px) { @media screen and (max-width: 768px) {
left: var(--main-grid-gap);
height: calc(var(--d-border-radius-large) * 2); height: calc(var(--d-border-radius-large) * 2);
} }
height: var(--d-border-radius-large);
@container content-width (width > 1px) { @container content-width (width > 1px) {
width: 100cqw; width: 100cqw;
} }
+5 -6
View File
@@ -1,16 +1,15 @@
.full-page-chat.full-page-chat-sidebar-enabled { .full-page-chat.full-page-chat-sidebar-enabled {
border-top-left-radius: var(--d-border-radius-large); border-top-left-radius: var(--d-border-radius-large);
box-shadow: 0px 0px 1px 2px var(--tertiary-100), box-shadow: 0px 0px 1px 2px #e2e8f8, 0px 0px 24px 4px #e2e8f8;
0px 0px 24px 4px var(--tertiary-100);
border: none; border: none;
} }
.has-full-page-chat .d-header {
background-color: transparent;
}
.c-navbar-container { .c-navbar-container {
border-top-left-radius: var(--d-border-radius-large); border-top-left-radius: var(--d-border-radius-large);
padding: 0 1.5rem; padding: 0 1.5rem;
background-color: var(--d-content-background); background-color: var(--d-content-background);
} }
body.has-full-page-chat {
background-color: var(--background-color);
}
+3
View File
@@ -0,0 +1,3 @@
#reply-control {
z-index: 999;
}
-27
View File
@@ -1,30 +1,3 @@
.d-header { .d-header {
box-shadow: none; box-shadow: none;
background: var(--background-color);
padding-bottom: 1.5em;
}
.has-full-page-chat .d-header {
background-color: transparent;
}
.user-menu .quick-access-panel,
.user-notifications-list {
li {
&.pending,
&.unread {
background: var(--d-hover);
.discourse-no-touch & {
&:hover,
&:focus {
background: var(--d-selected);
}
}
}
}
}
.user-menu.revamped .tabs-list .btn.active {
background: var(--d-hover);
} }
+19 -28
View File
@@ -1,5 +1,5 @@
html:not(:has(.has-full-page-chat)) { html:not(:has(.has-full-page-chat)) {
background-color: var(--background-color); background-color: #f5f8ff;
} }
:root { :root {
@@ -7,7 +7,7 @@ html:not(:has(.has-full-page-chat)) {
} }
body:not(.has-full-page-chat) { body:not(.has-full-page-chat) {
background-color: var(--background-color); background-color: #f5f8ff;
#main-outlet-wrapper { #main-outlet-wrapper {
// margin-top: 1.5rem; // margin-top: 1.5rem;
@media screen and (max-width: 485px) { @media screen and (max-width: 485px) {
@@ -22,7 +22,6 @@ body:not(.has-full-page-chat) {
// } // }
#main-outlet { #main-outlet {
width: 100%; width: 100%;
padding-bottom: var(--spacing-block-l);
// height: inherit; // height: inherit;
// overflow: scroll; // overflow: scroll;
// &:has(.list-controls) { // &:has(.list-controls) {
@@ -31,21 +30,7 @@ body:not(.has-full-page-chat) {
// &:has(#topic-title) { // &:has(#topic-title) {
// padding-top: 0; // padding-top: 0;
// } // }
//thanks to random container elements on the page, I can't do a direct child selector here because it targets all the randomness, so I see no other option than MANUALLY adding every possible element that can appear in the main outlet YAY > *:not(.full-page-chat) {
.list-controls,
.list-container,
#topic-title,
.container.posts,
#topic-footer-buttons,
.more-topics__container,
.search-banner,
.container.viewing-self,
.reviewable,
.admin-content,
.discourse-post-event-upcoming-events,
.container.groups-index,
.body-page,
.container.badges {
max-width: 1000px; max-width: 1000px;
margin-inline: auto; margin-inline: auto;
padding-inline: 1.5em; padding-inline: 1.5em;
@@ -53,8 +38,21 @@ body:not(.has-full-page-chat) {
padding-inline: 0.5em; padding-inline: 0.5em;
} }
} }
border-radius: var(--d-border-radius-large); // border-radius: var(--d-border-radius-large);
border-radius: 1.25rem; // border-radius: 1.25rem;
// .navigation-topics & {
// background: radial-gradient(
// 100.59% 70.87% at 41.19% 73.28%,
// rgba(188, 241, 238, 0.2) 0%,
// rgba(255, 255, 255, 0) 100%
// ),
// radial-gradient(
// 67.07% 61.36% at 66.47% 64.15%,
// rgba(162, 164, 225, 0.2) 0%,
// rgba(255, 255, 255, 0) 100%
// ),
// #fff;
// }
// box-shadow: 0px 0px 1px 2px #e2e8f8, 0px 0px 24px 4px #e2e8f8; // box-shadow: 0px 0px 1px 2px #e2e8f8, 0px 0px 24px 4px #e2e8f8;
background-color: var(--d-content-background); background-color: var(--d-content-background);
} }
@@ -65,19 +63,12 @@ body:not(.has-full-page-chat) {
// } // }
} }
.list-container {
.topic-list-body {
padding-top: var(--spacing-block-m);
}
}
aside.onebox { aside.onebox {
background-color: var(--d-content-background); background-color: var(--d-content-background);
} }
.d-editor-preview-wrapper { .d-editor-preview-wrapper {
box-shadow: 0px 0px 1px 2px var(--tertiary-50), box-shadow: 0px 0px 1px 2px #e2e8f8, 0px 0px 24px 4px #e2e8f8;
0px 0px 24px 4px var(--tertiary-50);
border-radius: var(--d-border-radius-large); border-radius: var(--d-border-radius-large);
padding: 1em; padding: 1em;
background-color: var(--d-content-background); background-color: var(--d-content-background);
+1
View File
@@ -28,6 +28,7 @@
.select-kit.is-expanded .select-kit-body { .select-kit.is-expanded .select-kit-body {
border-radius: var(--d-border-radius); border-radius: var(--d-border-radius);
border: 1px solid var(--accent-color);
background-color: var(--d-content-background); background-color: var(--d-content-background);
} }
+3 -3
View File
@@ -7,7 +7,7 @@
border-bottom: 1px solid var(--primary-300); border-bottom: 1px solid var(--primary-300);
padding: 1.5em 0 2.5em; padding: 1.5em 0 2.5em;
margin-bottom: 0; margin-bottom: 0;
--search-color: var(--tertiary-medium); --search-color: #595bca;
@media screen and (max-width: 900px) { @media screen and (max-width: 900px) {
padding-bottom: 1em; padding-bottom: 1em;
} }
@@ -19,7 +19,7 @@
align-self: center; align-self: center;
margin: 0; margin: 0;
font-weight: 400; font-weight: 400;
color: var(--tertiary); color: #350c73;
@media screen and (max-width: 1028px) { @media screen and (max-width: 1028px) {
font-size: var(--font-up-4); font-size: var(--font-up-4);
grid-column: 1/-1; grid-column: 1/-1;
@@ -63,7 +63,7 @@
} }
.search-input { .search-input {
background: var(--d-content-background); background: var(--d-content-background);
border: 1px solid var(--search-color); border: 1px solid oklch(from var(--search-color) 80% calc(c * 2.5) h);
box-shadow: 0 4px 10px rgba(52, 6, 121, 15%); box-shadow: 0 4px 10px rgba(52, 6, 121, 15%);
} }
.search-menu .search-input:focus-within, .search-menu .search-input:focus-within,
+6 -8
View File
@@ -1,6 +1,5 @@
.sidebar-wrapper { .sidebar-wrapper {
.has-full-page-chat &, .has-full-page-chat & {
.has-full-page-chat & .sidebar-footer-wrapper {
background: transparent; background: transparent;
} }
.sidebar-container { .sidebar-container {
@@ -11,18 +10,17 @@
padding: 0; padding: 0;
} }
.sidebar-section-link { .sidebar-section-link {
font-size: var(--font-up-1); // font-size: var(--font-up-1); // dont want to change fonts here just yet as font-size can be changed as a user pref.
// dont want to change fonts here just yet as font-size can be changed as a user pref. // font-family: "inter";
// charlie: sure but I want it to be bigger by default letter-spacing: 0.5px;
// letter-spacing: 0.5px; border-radius: 10px; //visually somewhat consistent with border on main outlet (?)
border-radius: 10px; // visually somewhat consistent with border on main outlet (?)
transition: none; transition: none;
} }
} }
.sidebar-section-wrapper { .sidebar-section-wrapper {
padding-block: 0.45em; padding-block: 0.45em;
.sidebar-section-header { .sidebar-section-header {
font-size: var(--font-down-1); // font-size: var(--font-down-1);
} }
.sidebar-section-content { .sidebar-section-content {
margin: 0; margin: 0;
+2 -329
View File
@@ -1,334 +1,7 @@
// 390x844 mobile/portrait (Figma iPhone 13 & 14)
// 744x1133 tablet/portrait (Figma iPad mini 8.3)
// 1280x832 desktop small (Figma MacBook Air)
:root {
--hot-color: oklch(63.79% 0.1823 34.77);
}
$extra-small: 435px;
$small: 576px;
$medium: 980px;
$extra-large: 1280px;
.topic-list .topic-list-item-separator {
display: none;
}
.topic-list > .topic-list-body > .topic-list-item.last-visit {
border-bottom: 1px solid var(--primary-300);
}
.topic-list-body {
border: none;
display: flex;
flex-direction: column;
gap: 1em;
@media screen and (max-width: $extra-small) {
gap: 0.5em;
}
}
body.user-messages-page .topic-list-item {
.topic-category-status-data {
display: none;
}
grid-template-areas:
"avatar author status status . . activity"
". topic-title topic-title topic-title likes-replies likes-replies likes-replies";
&.excerpt-expanded {
grid-template-columns: 44px repeat(6, 1fr) auto;
grid-template-rows: 22px auto auto 30px;
grid-template-areas:
"avatar author status status . . . activity"
"avatar topic-title topic-title topic-title topic-title . . ."
". excerpt excerpt excerpt excerpt excerpt . ."
". excerpt excerpt excerpt excerpt excerpt likes-replies likes-replies";
@media screen and (max-width: $extra-large) {
grid-template-areas:
"avatar author status status . . . activity"
"avatar topic-title topic-title topic-title topic-title . . ."
". excerpt excerpt excerpt excerpt excerpt . likes-replies"
". excerpt excerpt excerpt excerpt excerpt . likes-replies";
}
}
@media screen and (max-width: $small) {
grid-template-columns: 25px auto repeat(6, 1fr);
grid-template-rows: auto auto;
grid-template-areas:
"topic-title topic-title topic-title topic-title topic-title topic-title topic-title activity"
"avatar author . . . . . likes-replies";
.topic-excerpt {
display: none;
}
}
}
.topic-list-item { .topic-list-item {
-webkit-font-smoothing: antialiased;
text-overflow: ellipsis;
padding: 0.75em 1rem;
border: 1px solid var(--primary-300);
display: grid;
grid-template-columns: 44px min-content min-content auto min-content min-content min-content;
grid-template-rows: 22px minmax(22px, auto);
grid-template-areas:
"avatar author status status . . activity"
". topic-title topic-title topic-title likes-replies likes-replies category";
&.excerpt-expanded {
grid-template-columns: 44px repeat(6, 1fr) auto;
grid-template-rows: 22px auto auto 30px;
grid-template-areas:
"avatar author status status . . . activity"
"avatar topic-title topic-title topic-title topic-title . . ."
". excerpt excerpt excerpt excerpt excerpt . ."
". excerpt excerpt excerpt excerpt excerpt likes-replies category";
@media screen and (max-width: $extra-large) {
grid-template-areas:
"avatar author status status . . . activity"
"avatar topic-title topic-title topic-title topic-title . . ."
". excerpt excerpt excerpt excerpt excerpt . likes-replies"
". excerpt excerpt excerpt excerpt excerpt . category";
}
@media screen and (max-width: $small) {
grid-template-columns: 25px auto repeat(6, 1fr);
grid-template-rows: auto auto auto;
grid-template-areas:
"category-status category-status category-status . . . . activity"
"topic-title topic-title topic-title topic-title topic-title topic-title topic-title topic-title"
"avatar author . . . . . likes-replies";
.topic-excerpt {
display: none;
}
}
}
grid-column-gap: 12px;
grid-row-gap: 8px;
border-radius: var(--d-border-radius);
@media screen and (max-width: $medium) {
grid-template-columns: 44px min-content min-content auto min-content min-content min-content;
grid-template-rows: 22px minmax(22px, auto);
grid-template-areas:
"avatar author status status . . activity"
". topic-title topic-title topic-title . . likes-replies"
". topic-title topic-title topic-title . . category";
}
@media screen and (max-width: $small) {
grid-template-columns: 25px auto repeat(6, 1fr);
grid-template-rows: auto auto auto;
grid-template-areas:
"category-status category-status category-status . . . . activity"
"topic-title topic-title topic-title topic-title topic-title topic-title topic-title topic-title"
"avatar author . . . . . likes-replies";
}
@media screen and (max-width: $extra-small) {
border: none;
border-bottom: 1px solid var(--primary-200);
}
background: var(--d-content-background); background: var(--d-content-background);
box-shadow: 0px 0px 26px 1px
light-dark(hsl(224 61% 96% / 1), hsl(224 61% 96% / 0.1));
&:hover { &:hover {
border: 1px solid var(--accent-color); background: oklch(from var(--d-content-background) 97% c h);
background: var(--d-content-background);
}
// display contents
td.main-link,
td.posters,
td.posts,
td.views,
td.activity {
display: contents;
}
td.num.posts a {
padding: 0;
}
// avatar & author
.topic-author-avatar-data {
grid-area: avatar;
margin: 0;
}
.topic-author-avatar img.avatar {
width: 44px;
height: 44px;
border-radius: var(--d-border-radius);
@media screen and (max-width: $small) {
width: 25px;
height: 25px;
}
}
td.topic-author-data {
grid-area: author;
display: flex;
gap: 0.5em;
align-items: center;
}
.topic-author-data .topic-author {
color: var(--primary-500);
}
// status
.topic-status-card {
display: flex;
flex-direction: row;
gap: 4px;
align-items: center;
padding: 0 6px;
font-size: var(--font-down-2);
font-weight: 600;
border-radius: var(--d-border-radius);
border: 1px solid var(--status-color);
color: var(--status-color);
height: min-content;
grid-area: status;
width: min-content;
@media screen and (max-width: $small) {
height: calc(100% - 2px);
}
svg {
font-size: var(--font-down-1);
color: var(--status-color);
}
}
.topic-status-card.--bookmark {
display: none;
}
.topic-status-card.--pinned,
.topic-status-card.--unpinned {
--status-color: var(--primary-500);
cursor: pointer;
background-color: transparent;
line-height: unset;
}
.topic-status-card.--hot {
--status-color: var(--hot-color);
}
// title
td.main-link .link-top-line {
font-size: var(--font-0);
grid-area: topic-title;
font-weight: 500;
}
.link-top-line .event-date {
font-size: var(--font-down-3);
}
td.main-link a.topic-status {
display: none;
}
td.main-link .link-top-line a.raw-topic-link {
padding: 0;
}
.topic-post-badges .badge-notification.unread-posts {
background-color: var(--tertiary);
color: var(--tertiary);
overflow: hidden;
height: 8px;
width: 8px;
padding: 0;
top: -2px;
min-width: unset;
}
// excerpt
.topic-excerpt {
grid-area: excerpt;
margin: 0;
font-size: var(--font-down-2);
}
// timestamp
td.activity .post-activity {
grid-area: activity;
font-size: var(--font-down-1);
color: var(--primary-500);
margin-left: auto;
padding: 0;
}
// metadata
// metadata - category
td.main-link .link-bottom-line {
display: none;
}
td.topic-category-status-data {
display: contents;
@media screen and (max-width: $small) {
grid-area: category-status;
display: flex;
gap: 0.5em;
align-items: center;
}
}
td.topic-category-status-data .badge-category__wrapper {
grid-area: category;
}
td.topic-category-status-data .badge-category__wrapper {
overflow: unset;
border-radius: var(--d-border-radius);
padding: 6px;
align-self: flex-end;
background-color: light-dark(
oklch(from var(--category-badge-color) 97% calc(c * 0.3) h),
oklch(from var(--category-badge-color) 45% calc(c * 0.5) h)
);
@media screen and (max-width: $small) {
padding: 2px 6px;
}
.badge-category__name {
color: light-dark(
oklch(from var(--category-badge-color) 20% calc(c * 1) h),
oklch(from var(--category-badge-color) 100% calc(c * 0.9) h)
);
}
}
td.main-link .discourse-tags {
display: none;
}
// metadata - likes and replies
td.posts .badge-posts {
grid-area: replies;
align-self: center;
font-weight: normal;
}
td.topic-likes-replies-data {
grid-area: likes-replies;
display: flex;
flex-direction: row;
gap: 0.5em;
justify-content: flex-end;
height: min-content;
align-self: flex-end;
padding-bottom: 4px;
}
.topic-likes-replies-data .topic-likes,
.topic-likes-replies-data .topic-replies {
display: flex;
flex-direction: row;
gap: 0.5em;
align-items: center;
color: var(--primary-500);
svg {
color: var(--primary-600);
}
} }
} border: 1px solid #cedde3;
.topic-list-header {
display: none;
} }
+9 -13
View File
@@ -1,19 +1,16 @@
.post-stream { .post-stream {
.contents { .contents p {
font-size: var(--font-up-1); // font-size: var(--font-up-1);
line-height: 1.25; line-height: 1.25;
} }
} }
.container.posts .topic-navigation { .container.posts .topic-navigation {
// super fragile because new sticky topic title doesnt have a calculated value (= 53px with this font and size but…) top: calc(var(--header-offset, 60px) + 6em);
top: calc(
var(--header-offset, 60px) + 53px + calc(var(--spacing-block-l) * 2)
);
} }
.timeline-container .topic-timeline { .timeline-container .topic-timeline {
min-width: unset; // why we have this? min-width: unset; //why we have this?
.timeline-scrollarea { .timeline-scrollarea {
border-left: 1px solid var(--accent-color); border-left: 1px solid var(--accent-color);
} }
@@ -24,7 +21,7 @@
padding-left: 0.5em; padding-left: 0.5em;
margin-left: calc(-0.5em - 2.5px); margin-left: calc(-0.5em - 2.5px);
background: var(--secondary); background: var(--secondary);
height: 40px !important; // height is coming from element style have no other choice height: 40px !important; //height is coming from element style have no other choice
} }
.timelime-scroller-content { .timelime-scroller-content {
display: flex; display: flex;
@@ -47,13 +44,12 @@
} }
#topic-title { #topic-title {
z-index: z("composer", "content") - 1; z-index: 999;
padding: var(--spacing-block-l) var(--spacing-inline-xl); margin-bottom: 1em;
padding: 1.5rem 2rem 0.5em;
position: sticky; position: sticky;
margin-bottom: 0;
top: var(--header-offset); top: var(--header-offset);
background: var(--d-content-background); background: var(--d-content-background);
border-radius: var(--d-border-radius-large);
} }
.container.posts, .container.posts,
@@ -66,7 +62,7 @@
.more-topics__list .more-topics__list
.topic-list-body .topic-list-body
.topic-list-item:last-of-type { .topic-list-item:last-of-type {
border-bottom: 1px solid var(--primary-300); border-bottom: 1px solid #cedde3;
} }
.discourse-post-event .discourse-post-event-widget { .discourse-post-event .discourse-post-event-widget {
+10 -6
View File
@@ -1,17 +1,21 @@
:root { :root {
color-scheme: light dark;
--d-border-radius-large: 20px; --d-border-radius-large: 20px;
--d-border-radius: 8px; --d-border-radius: 8px;
--d-input-border-radius: 6px; --d-input-border-radius: 6px;
--accent-text-color: var(--secondary); --accent-color: #3c41c3;
--d-content-background: var(--secondary); --accent-text-color: #ffffff;
--d-content-background: #fff;
--d-nav-color--active: var(--accent-color); --d-nav-color--active: var(--accent-color);
--d-sidebar-background: var(--tertiary-50); --primary: #14171f;
--d-sidebar-footer-fade: rgba(var(--tertiary-50-rgb), 1); --header-background: #f5f8ff;
--d-post-control-background--hover: #ebecf9;
--d-post-control-text-color--hover: #242775;
--d-sidebar-link-color: var(--primary); --d-sidebar-link-color: var(--primary);
--d-sidebar-highlight-color: var(--primary); --d-sidebar-highlight-color: var(--primary);
--d-sidebar-highlight-background: var(--d-selected); --d-sidebar-link-icon-color: #8591ad;
--d-sidebar-section-link-icon-size: 1em; --d-sidebar-section-link-icon-size: 1em;
--d-sidebar-highlight-background: #ebecf9;
--d-sidebar-active-background: #d8d9f3;
--d-input-bg-color: var(--d-content-background); --d-input-bg-color: var(--d-content-background);
// --d-sidebar-row-height: 2.8em; // --d-sidebar-row-height: 2.8em;
//the idea is: block spacing can grow with font-size, but inline spacing should not to maintain horizontal (text) alignment //the idea is: block spacing can grow with font-size, but inline spacing should not to maintain horizontal (text) alignment