nodebb-theme-harmony 1.0.0-beta.90 → 1.0.0-beta.92

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/package.json +1 -1
  2. package/scss/common.scss +6 -1
  3. package/scss/modules/topics-list.scss +13 -146
  4. package/templates/account/categories.tpl +6 -6
  5. package/templates/account/topics.tpl +2 -2
  6. package/templates/categories.tpl +1 -4
  7. package/templates/chats.tpl +3 -3
  8. package/templates/flags/detail.tpl +2 -2
  9. package/templates/groups/details.tpl +1 -1
  10. package/templates/login.tpl +2 -2
  11. package/templates/notifications.tpl +4 -4
  12. package/templates/partials/account/category-item.tpl +4 -4
  13. package/templates/partials/account/header.tpl +3 -3
  14. package/templates/partials/account/sidebar-left.tpl +27 -27
  15. package/templates/partials/categories/item.tpl +25 -28
  16. package/templates/partials/categories/lastpost.tpl +7 -7
  17. package/templates/partials/category/filter-dropdown-content.tpl +4 -4
  18. package/templates/partials/category/sort.tpl +20 -5
  19. package/templates/partials/category/subcategory.tpl +1 -2
  20. package/templates/partials/category/watch.tpl +18 -9
  21. package/templates/partials/chats/message-window.tpl +2 -2
  22. package/templates/partials/chats/recent_room.tpl +1 -1
  23. package/templates/partials/flags/filters.tpl +2 -2
  24. package/templates/partials/groups/list.tpl +2 -2
  25. package/templates/partials/groups/sidebar-left.tpl +9 -9
  26. package/templates/partials/search-results.tpl +0 -3
  27. package/templates/partials/sidebar/user-menu.tpl +13 -13
  28. package/templates/partials/tags/filter-dropdown-content.tpl +6 -3
  29. package/templates/partials/topic/navigator.tpl +1 -1
  30. package/templates/partials/topic/sort.tpl +6 -6
  31. package/templates/partials/topic/watch.tpl +21 -12
  32. package/templates/partials/topic-filters.tpl +2 -2
  33. package/templates/partials/topic-terms.tpl +2 -2
  34. package/templates/partials/topics_list.tpl +78 -82
  35. package/templates/partials/users/filter-dropdown-content.tpl +4 -4
  36. package/templates/register.tpl +2 -2
  37. package/templates/search.tpl +2 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-harmony",
3
- "version": "1.0.0-beta.90",
3
+ "version": "1.0.0-beta.92",
4
4
  "nbbpm": {
5
5
  "compatibility": "^3.0.0"
6
6
  },
package/scss/common.scss CHANGED
@@ -14,6 +14,11 @@ body * {
14
14
  -moz-text-size-adjust: none;
15
15
  }
16
16
 
17
+ hr {
18
+ border-top-color: $border-color;
19
+ opacity: 1;
20
+ }
21
+
17
22
  .ff-base {
18
23
  font-family: $font-family-base !important;
19
24
  }
@@ -23,7 +28,7 @@ body * {
23
28
  .ff-secondary {
24
29
  font-family: $font-family-secondary;
25
30
  }
26
- .tracking-tight { letter-spacing: -0.025em; }
31
+ .tracking-tight { letter-spacing: -0.02em; }
27
32
 
28
33
  .caret {
29
34
  &::after {
@@ -1,168 +1,35 @@
1
- ul.topics-list {
2
- position: relative;
3
-
1
+ ul.topics-list, ul.categories-list {
4
2
  li {
5
- display: flex;
6
- gap: 1rem;
7
- border-bottom: 1px solid $border-color;
8
- padding: 0.75rem 0;
9
-
10
- @include media-breakpoint-up(sm) { padding: 1.5rem 0; }
11
-
12
3
  &.deleted {
13
4
  opacity: 0.6;
14
5
  .meta { display: none!important; }
15
6
  }
16
7
 
17
8
  &.selected {
18
- border-color: $primary;
19
-
9
+ outline: 1px solid $primary;
20
10
  [component="topic/select"] {
21
11
  color: $primary!important;
22
12
  }
23
13
  }
24
-
25
- > .thumb-avatar-box {
26
- flex: none;
27
- display: none;
28
- @include media-breakpoint-up(sm) { display: flex; }
29
- }
30
-
31
- > .wrapper {
32
- flex: 1 1 auto;
33
- display: grid;
34
- align-items: start;
35
- gap: 0.5rem;
36
-
37
- @include media-breakpoint-up(sm) { gap: 1rem; }
38
- @include media-breakpoint-up(xl) { display: flex; }
39
- // @container (min-width: 799px) { display: flex; }
40
-
41
- > .wrapper2 {
42
- flex: 1 1 auto;
43
- display: flex;
44
- gap: 0.5rem;
45
-
46
- @include media-breakpoint-up(sm) { gap: 1rem; }
47
-
48
- > .title_badges {
49
- flex: 1 1 auto;
50
- display: flex;
51
- flex-direction: column;
52
- gap: 0.25rem;
53
-
54
- @include media-breakpoint-up(sm) { gap: 0.5rem; }
55
-
56
- > h2 {
57
- font-size: 1rem !important;
58
- @include media-breakpoint-up(sm) {
59
- font-size: 1.125rem !important;
60
- }
61
- }
62
-
63
- > .info {
64
- display: flex;
65
- flex-wrap: wrap;
66
- gap: 0.25rem;
67
- align-items: center;
68
- }
69
- }
70
-
71
- > .stats {
72
- flex: none;
73
- display: none;
74
- gap: 0.25rem;
75
- align-items: start;
76
- grid-auto-rows: min-content;
77
- @include media-breakpoint-up(md) { display: grid; }
78
- @include media-breakpoint-up(xl) {
79
- grid-auto-columns: minmax(0, 1fr);
80
- grid-auto-flow: column;
81
- }
82
-
83
- > .card {
84
- display: flex;
85
- flex-direction: row;
86
- gap: 0.5rem;
87
- flex-wrap: nowrap;
88
- align-items: center;
89
- padding: 0.25rem 0.5rem;
90
- border: none;
91
- border-radius: 4px;
92
- color: $text-muted;
93
- @include media-breakpoint-up(xl) {
94
- flex-direction: column;
95
- padding: 0.5rem;
96
- gap: 0;
97
- min-width: 4.4rem;
98
- min-height:3.4rem;
99
- }
100
-
101
- > i.fa {
102
- display: flex;
103
- font-size: 0.75rem;
104
- @include media-breakpoint-up(xl) { display: none; }
105
- }
106
- > .human-readable-number {
107
- line-height: 1;
108
- font-size: 0.875rem;
109
- @include media-breakpoint-up(xl) { font-size: 1.25rem; }
110
- }
111
- > .text-lowercase {
112
- display: none;
113
- @include media-breakpoint-up(xl) { display: flex; }
114
- }
115
- }
116
- }
117
- }
118
-
119
- > .teaser {
120
- flex: none;
121
- overflow: hidden;
122
-
123
- @include media-breakpoint-up(xl) {
124
- width:12rem;
125
- }
126
-
127
- > .lastpost {
128
- @include media-breakpoint-up(xl) {
129
- min-height: 3.4rem;
130
- }
131
- }
132
-
133
- .post-content {
134
- @include line-clamp(1);
135
- @include media-breakpoint-up(xl) {
136
- @include line-clamp(2);
137
- }
138
- }
139
- }
14
+ p {
15
+ margin: 0 !important;
140
16
  }
141
17
 
142
- > .checkbox {
143
- flex: none;
18
+ // all other skins use link-color for unread titles
19
+ &.unread .title {
20
+ color: $link-color;
144
21
  }
145
22
 
146
23
  .ui-sortable-handle {
147
24
  cursor: move;
148
25
  }
149
- }
150
-
151
- &.narrow {
152
- li {
153
- .wrapper {
154
- display: grid !important;
155
26
 
156
- .teaser {
157
- width: auto !important;
158
-
159
- .post-content {
160
- -webkit-line-clamp: 1 !important;
161
- }
162
- }
163
- }
164
- }
27
+ // if only one thumb don't display
28
+ [data-numthumbs="1"] { display: none; }
165
29
  }
30
+ }
166
31
 
167
-
32
+ // on default skin use primary color for unread titles
33
+ .skin-noskin ul.topics-list li.unread .title {
34
+ color: $primary;
168
35
  }
@@ -13,24 +13,24 @@
13
13
  <ul class="dropdown-menu p-1 text-sm dropdown-menu-end">
14
14
  <li><a class="dropdown-item rounded-1 d-flex flex-column p-2" href="#" component="category/watching" data-state="watching">
15
15
  <div class="d-flex align-items-center gap-2">
16
- <i class="fa fa-fw fa-inbox"></i>
17
- <span class="flex-1 fw-semibold">[[category:watching]]</span>
16
+ <i class="flex-shrink-0 fa fa-fw fa-inbox"></i>
17
+ <span class="flex-grow-1 fw-semibold">[[category:watching]]</span>
18
18
  </div>
19
19
  <div class="help-text text-muted text-xs">[[category:watching.description]]</div>
20
20
  </a>
21
21
  </li>
22
22
  <li><a class="dropdown-item rounded-1 d-flex flex-column p-2" href="#" component="category/notwatching" data-state="notwatching">
23
23
  <div class="d-flex align-items-center gap-2">
24
- <i class="fa fa-fw fa-clock-o"></i>
25
- <span class="flex-1 fw-semibold">[[category:not-watching]]</span>
24
+ <i class="flex-shrink-0 fa fa-fw fa-clock-o"></i>
25
+ <span class="flex-grow-1 fw-semibold">[[category:not-watching]]</span>
26
26
  </div>
27
27
  <div class="help-text text-muted text-xs">[[category:not-watching.description]]</div>
28
28
  </a>
29
29
  </li>
30
30
  <li><a class="dropdown-item rounded-1 d-flex flex-column p-2" href="#" component="category/ignoring" data-state="ignoring">
31
31
  <div class="d-flex align-items-center gap-2">
32
- <i class="fa fa-fw fa-eye-slash"></i>
33
- <span class="flex-1 fw-semibold">[[category:ignoring]]</span>
32
+ <i class="flex-shrink-0 fa fa-fw fa-eye-slash"></i>
33
+ <span class="flex-grow-1 fw-semibold">[[category:ignoring]]</span>
34
34
  </div>
35
35
  <div class="help-text text-muted text-xs">[[category:ignoring.description]]</div>
36
36
  </a>
@@ -9,8 +9,8 @@
9
9
  <ul class="dropdown-menu p-1 text-sm">
10
10
  {{{each sortOptions }}}
11
11
  <li><a class="dropdown-item rounded-1 d-flex align-items-center gap-2" href="{config.relative_path}{./url}">
12
- <div class="flex-1">{./name}</div>
13
- <i class="fa fa-fw {{{if ./selected}}}fa-check{{{end}}}"></i>
12
+ <div class="flex-grow-1">{./name}</div>
13
+ <i class="flex-shrink-0 fa fa-fw {{{if ./selected}}}fa-check{{{end}}}"></i>
14
14
  </a></li>
15
15
  {{{end}}}
16
16
  </ul>
@@ -8,11 +8,8 @@
8
8
  {{{ if pagination.pages.length }}}
9
9
  <div><!-- IMPORT partials/category/selector-dropdown-left.tpl --></div>
10
10
  {{{ end }}}
11
- <ul class="categories list-unstyled" itemscope itemtype="http://www.schema.org/ItemList">
11
+ <ul class="categories-list list-unstyled" itemscope itemtype="http://www.schema.org/ItemList">
12
12
  {{{ each categories }}}
13
- {{{ if !@first }}}
14
- <hr class="text-muted opacity-25"/>
15
- {{{ end }}}
16
13
  <!-- IMPORT partials/categories/item.tpl -->
17
14
  {{{ end }}}
18
15
  </ul>
@@ -1,5 +1,5 @@
1
1
  <div class="chats-full d-flex gap-1 h-100 mt-3 mt-md-0 py-md-3">
2
- <div class="d-flex flex-column h-100" component="chat/nav-wrapper" data-loaded="{{{ if roomId }}}1{{{ else }}}0{{{ end }}}">
2
+ <div class="flex-shrink-0 d-flex flex-column h-100" component="chat/nav-wrapper" data-loaded="{{{ if roomId }}}1{{{ else }}}0{{{ end }}}">
3
3
  <div class="chat-search dropdown mb-2">
4
4
  <label class="text-xs text-muted">[[users:search-user-for-chat]]</label>
5
5
 
@@ -13,14 +13,14 @@
13
13
  </button>
14
14
  </div>
15
15
  </div>
16
- <hr class="text-muted opacity-25 my-1">
16
+ <hr class="my-1">
17
17
  <div component="chat/recent" class="chats-list overflow-auto mb-0 pe-1" data-nextstart="{nextStart}">
18
18
  {{{each rooms}}}
19
19
  <!-- IMPORT partials/chats/recent_room.tpl -->
20
20
  {{{end}}}
21
21
  </div>
22
22
  </div>
23
- <div class="flex-1 ms-md-2 ps-md-2 border-1 border-start-md h-100" component="chat/main-wrapper">
23
+ <div class="flex-grow-1 ms-md-2 ps-md-2 border-1 border-start-md h-100" component="chat/main-wrapper">
24
24
  <!-- IMPORT partials/chats/message-window.tpl -->
25
25
  </div>
26
26
  <div class="imagedrop"><div>[[topic:composer.drag_and_drop_images]]</div></div>
@@ -1,7 +1,7 @@
1
1
  <!-- IMPORT partials/breadcrumbs.tpl -->
2
2
 
3
3
  <div class="d-flex flex-column flex-md-row">
4
- <div class="d-flex flex-column gap-3 flex-0 border-end-md text-sm mb-3 pe-4" style="flex-basis: 240px !important;">
4
+ <div class="flex-shrink-0 d-flex flex-column gap-3 border-end-md text-sm mb-3 pe-4" style="flex-basis: 240px !important;">
5
5
  <div class="d-grid gap-1">
6
6
  <a class="btn btn-ghost border btn-sm justify-content-start" href="{config.relative_path}/{type_path}/{targetId}">
7
7
  <i class="fa fa-fw fa-external-link text-primary"></i>
@@ -106,7 +106,7 @@
106
106
  {{{ end }}}
107
107
  </div>
108
108
  </div>
109
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width:0;">
109
+ <div class="flex-grow-1 ps-md-2 ps-lg-5" style="min-width:0;">
110
110
  <div class="d-flex flex-column gap-4">
111
111
  <h2 class="h6 fw-bold">
112
112
  {target_readable}
@@ -44,7 +44,7 @@
44
44
  </div>
45
45
  <!-- IMPORT partials/groups/sidebar-left.tpl -->
46
46
 
47
- <div class="flex-1 ps-md-2 ps-lg-5" style="min-width:0;">
47
+ <div class="flex-grow-1 ps-md-2 ps-lg-5" style="min-width:0;">
48
48
  <div class="tab-content">
49
49
  <div class="tab-pane fade show active" id="groups-posts" role="tabpanel">
50
50
  <h3 class="fw-semibold fs-5 mb-0">[[global:posts]]</h3>
@@ -78,10 +78,10 @@
78
78
  {{{ if ./icons.svg }}}
79
79
  {./icons.svg}
80
80
  {{{ else }}}
81
- <i class="{./icons.normal}" style="color:{./color};"></i>
81
+ <i class="flex-shrink-0 {./icons.normal}" style="color:{./color};"></i>
82
82
  {{{ end }}}
83
83
  {{{ if ./labels.login }}}
84
- <div class="flex-1 text-body text-sm">{./labels.login}</div>
84
+ <div class="flex-grow-1 text-body text-sm">{./labels.login}</div>
85
85
  {{{ end }}}
86
86
  </a></li>
87
87
  {{{ end }}}
@@ -6,21 +6,21 @@
6
6
  <hr class="text-muted opacity-25"/>
7
7
 
8
8
  <div class="d-flex flex-column flex-md-row">
9
- <div class="flex-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
9
+ <div class="flex-shrink-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
10
10
  <div class="nav sticky-top d-flex flex-row flex-md-column flex-wrap gap-1" style="z-index: 1;">
11
11
  {{{ each filters }}}
12
12
  {{{ if ./separator }}}
13
13
  <hr/>
14
14
  {{{ else }}}
15
15
  <a class="btn-ghost fw-semibold {{{ if ./selected }}}active{{{ end }}}" href="{config.relative_path}/notifications?filter={./filter}">
16
- <div class="flex-1">{filters.name}</div>
17
- <span class="text-xs human-readable-number" title="{./count}">{./count}</span>
16
+ <div class="flex-grow-1">{filters.name}</div>
17
+ <span class="flex-shrink-0 text-xs human-readable-number" title="{./count}">{./count}</span>
18
18
  </a>
19
19
  {{{ end }}}
20
20
  {{{ end }}}
21
21
  </div>
22
22
  </div>
23
- <div class="flex-1 ps-md-2 ps-lg-5">
23
+ <div class="flex-grow-1 ps-md-2 ps-lg-5">
24
24
  <ul component="notifications/list" class="notifications-list list-unstyled" data-nextstart="{nextStart}">
25
25
  <!-- IMPORT partials/notifications_list.tpl -->
26
26
  </ul>
@@ -1,7 +1,7 @@
1
1
  <li component="categories/category" data-cid="{./cid}" data-parent-cid="{../parentCid}" class="category-{./cid}">
2
2
  <meta itemprop="name" content="{./name}">
3
3
  <div class="content depth-{./depth} d-flex gap-2">
4
- <div class="flex-1 align-items-start d-flex gap-2">
4
+ <div class="flex-grow-1 align-items-start d-flex gap-2">
5
5
  <div>
6
6
  {buildCategoryIcon(@value, "24px", "rounded-1")}
7
7
  </div>
@@ -10,13 +10,13 @@
10
10
  <!-- IMPORT partials/categories/link.tpl -->
11
11
  </div>
12
12
  {{{ if ./descriptionParsed }}}
13
- <div class="description text-muted text-xs">{./descriptionParsed}</div>
13
+ <div class="description text-muted text-xs w-100">{./descriptionParsed}</div>
14
14
  {{{ end }}}
15
15
  </div>
16
16
  </div>
17
- <div class="flex-grow-0 flex-shrink-0">
17
+ <div class="flex-shrink-0">
18
18
  <!-- IMPORT partials/category/watch.tpl -->
19
19
  </div>
20
20
  </div>
21
- <hr class="text-muted opacity-25"/>
21
+ <hr />
22
22
  </li>
@@ -32,7 +32,7 @@
32
32
  </div>
33
33
 
34
34
  <div class="d-flex flex-column flex-md-row mt-1 justify-content-between w-100 gap-2">
35
- <div class="d-flex flex-1 flex-row gap-2">
35
+ <div class="d-flex flex-grow-1 flex-row gap-2">
36
36
  <div class="d-flex flex-column">
37
37
  <h2 class="fullname fw-semibold fs-2 tracking-tight mb-0">{{{ if fullname }}}{fullname}{{{ else }}}{username}{{{ end }}}</h2>
38
38
  <div class="d-flex flex-wrap gap-1 text-sm align-items-center">
@@ -62,7 +62,7 @@
62
62
  </div>
63
63
  </div>
64
64
 
65
- <div class="d-flex gap-1 align-self-stretch align-self-md-start justify-content-end">
65
+ <div class="flex-shrink-0 d-flex gap-1 align-self-stretch align-self-md-start justify-content-end">
66
66
  {{{ if loggedIn }}}
67
67
  {{{ if !isSelf }}}
68
68
  <a component="account/unfollow" href="#" class="btn btn-info flex-fill{{{ if !isFollowing }}} hide{{{ end }}}">[[user:unfollow]]</a>
@@ -94,5 +94,5 @@
94
94
 
95
95
  <div class="d-flex flex-column flex-md-row">
96
96
  <!-- IMPORT partials/account/sidebar-left.tpl -->
97
- <div class="account-content flex-1 ps-md-2 ps-lg-3 ps-xl-4" style="min-width: 0;">
97
+ <div class="account-content flex-grow-1 ps-md-2 ps-lg-3 ps-xl-4" style="min-width: 0;">
98
98
 
@@ -1,7 +1,7 @@
1
- <div class="flex-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
1
+ <div class="flex-shrink-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
2
2
  <div class="sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-1" style="top: 1rem;z-index: 1;">
3
3
  <a href="{config.relative_path}/user/{userslug}" class="btn-ghost fw-semibold {{{ if template.account/profile }}}active{{{ end }}}">
4
- <div class="flex-1">[[global:about]]</div>
4
+ <div class="flex-grow-1">[[global:about]]</div>
5
5
  </a>
6
6
  <a href="{config.relative_path}/user/{userslug}/posts"class="btn-ghost fw-semibold
7
7
  {{{ if template.account/posts }}}active{{{ end }}}
@@ -10,67 +10,67 @@
10
10
  {{{ if template.account/upvoted }}}active{{{ end }}}
11
11
  {{{ if template.account/downvoted }}}active{{{ end }}}
12
12
  {{{ if template.account/bookmarks }}}active{{{ end }}}">
13
- <div class="flex-1">[[global:posts]]</div>
14
- <span class="text-xs human-readable-number" title="{counts.posts}">{counts.posts}</span>
13
+ <div class="flex-grow-1">[[global:posts]]</div>
14
+ <span class="flex-shrink-0 text-xs human-readable-number" title="{counts.posts}">{counts.posts}</span>
15
15
  </a>
16
16
  <a href="{config.relative_path}/user/{userslug}/topics" class="btn-ghost fw-semibold
17
17
  {{{ if template.account/topics }}}active{{{ end }}}
18
18
  {{{ if template.account/watched }}}active{{{ end }}}
19
19
  {{{ if template.account/ignored }}}active{{{ end }}}">
20
- <div class="flex-1">[[global:topics]]</div>
21
- <span class="text-xs human-readable-number" title="{counts.topics}">{counts.topics}</span>
20
+ <div class="flex-grow-1">[[global:topics]]</div>
21
+ <span class="flex-shrink-0 text-xs human-readable-number" title="{counts.topics}">{counts.topics}</span>
22
22
  </a>
23
23
  <a href="{config.relative_path}/user/{userslug}/groups" class="btn-ghost fw-semibold
24
24
  {{{ if template.account/groups }}}active{{{ end }}}">
25
- <div class="flex-1">[[global:header.groups]]</div>
26
- <span class="text-xs human-readable-number" title="{counts.groups}">{counts.groups}</span>
25
+ <div class="flex-grow-1">[[global:header.groups]]</div>
26
+ <span class="flex-shrink-0 text-xs human-readable-number" title="{counts.groups}">{counts.groups}</span>
27
27
  </a>
28
28
 
29
29
  <a href="{config.relative_path}/user/{userslug}/followers" class="btn-ghost fw-semibold
30
30
  {{{ if template.account/followers }}}active{{{ end }}}">
31
- <div class="flex-1">[[user:followers]]</div>
32
- <span class="text-xs human-readable-number" title="{counts.followers}">{counts.followers}</span>
31
+ <div class="flex-grow-1">[[user:followers]]</div>
32
+ <span class="flex-shrink-0 text-xs human-readable-number" title="{counts.followers}">{counts.followers}</span>
33
33
  </a>
34
34
 
35
35
  <a href="{config.relative_path}/user/{userslug}/following" class="btn-ghost fw-semibold
36
36
  {{{ if template.account/following }}}active{{{ end }}}">
37
- <div class="flex-1">[[user:following]]</div>
38
- <span class="text-xs human-readable-number" title="{counts.following}">{counts.following}</span>
37
+ <div class="flex-grow-1">[[user:following]]</div>
38
+ <span class="flex-shrink-0 text-xs human-readable-number" title="{counts.following}">{counts.following}</span>
39
39
  </a>
40
40
 
41
41
  {{{ if canEdit }}}
42
42
  <a href="{config.relative_path}/user/{userslug}/categories" class="btn-ghost fw-semibold
43
43
  {{{ if template.account/categories }}}active{{{ end }}}">
44
- <div class="flex-1">[[user:watched_categories]]</div>
45
- <span class="text-xs human-readable-number" title="{counts.categoriesWatched}">{counts.categoriesWatched}</span>
44
+ <div class="flex-grow-1">[[user:watched_categories]]</div>
45
+ <span class="flex-shrink-0 text-xs human-readable-number" title="{counts.categoriesWatched}">{counts.categoriesWatched}</span>
46
46
  </a>
47
47
 
48
48
  <a href="{config.relative_path}/user/{userslug}/blocks" class="btn-ghost fw-semibold
49
49
  {{{ if template.account/blocks }}}active{{{ end }}}">
50
- <div class="flex-1">[[user:blocked-users]]</div>
51
- <span class="text-xs human-readable-number" title="{counts.blocks}">{counts.blocks}</span>
50
+ <div class="flex-grow-1">[[user:blocked-users]]</div>
51
+ <span class="flex-shrink-0 text-xs human-readable-number" title="{counts.blocks}">{counts.blocks}</span>
52
52
  </a>
53
53
 
54
54
  <a href="{config.relative_path}/user/{userslug}/uploads" class="btn-ghost fw-semibold
55
55
  {{{ if template.account/uploads }}}active{{{ end }}}">
56
- <div class="flex-1">[[global:uploads]]</div>
57
- <span class="text-xs human-readable-number" title="{counts.uploaded}">{counts.uploaded}</span>
56
+ <div class="flex-grow-1">[[global:uploads]]</div>
57
+ <span class="flex-shrink-0 text-xs human-readable-number" title="{counts.uploaded}">{counts.uploaded}</span>
58
58
  </a>
59
59
  {{{ end }}}
60
60
 
61
61
  <hr class="w-100 my-2"/>
62
62
  {{{ if (loggedIn && (!isSelf && !banned)) }}}
63
63
  <a href="#" component="account/flag" class="btn-ghost-sm">
64
- <i class="fa-solid fa-flag text-danger"></i>
65
- <div class="flex-1 text-nowrap">[[user:flag-profile]]</div>
64
+ <i class="flex-shrink-0 fa-solid fa-flag text-danger"></i>
65
+ <div class="flex-grow-1 text-nowrap">[[user:flag-profile]]</div>
66
66
  </a>
67
67
  <a href="#" component="account/block" class="btn-ghost-sm {{{ if isBlocked }}}hidden{{{ end }}}">
68
- <i class="fa-solid fa-ban text-danger"></i>
69
- <div class="flex-1 text-nowrap">[[user:block_user]]</div>
68
+ <i class="flex-shrink-0 fa-solid fa-ban text-danger"></i>
69
+ <div class="flex-grow-1 text-nowrap">[[user:block_user]]</div>
70
70
  </a>
71
71
  <a href="#" component="account/unblock" class="btn-ghost-sm {{{ if !isBlocked }}}hidden{{{ end }}}">
72
- <i class="fa-solid fa-ban text-danger"></i>
73
- <div class="flex-1 text-nowrap">[[user:unblock_user]]</div>
72
+ <i class="flex-shrink-0 fa-solid fa-ban text-danger"></i>
73
+ <div class="flex-grow-1 text-nowrap">[[user:unblock_user]]</div>
74
74
  </a>
75
75
  <hr class="w-100 my-2"/>
76
76
  {{{ end }}}
@@ -78,17 +78,17 @@
78
78
  {{{ if canEdit }}}
79
79
  <a href="{config.relative_path}/user/{userslug}/edit" class="btn-ghost-sm text-xs
80
80
  {{{ if template.account/edit }}}active{{{ end }}}">
81
- <div class="flex-1">[[user:edit-profile]]</div>
81
+ <div class="flex-grow-1">[[user:edit-profile]]</div>
82
82
  </a>
83
83
  <a href="{config.relative_path}/user/{userslug}/settings" class="btn-ghost-sm text-xs
84
84
  {{{ if template.account/settings }}}active{{{ end }}}">
85
- <div class="flex-1">[[user:settings]]</div>
85
+ <div class="flex-grow-1">[[user:settings]]</div>
86
86
  </a>
87
87
  {{{ end }}}
88
88
 
89
89
  {{{ each profile_links }}}
90
90
  <a href="{config.relative_path}/user/{userslug}/{./route}" class="btn-ghost-sm text-xs plugin-link {{{ if ./public }}}public{{{ else }}}private{{{ end }}} {{{ if (url == ./url) }}}active{{{ end }}}" id="{./id}">
91
- <div class="flex-1">{./name}</div>
91
+ <div class="flex-grow-1">{./name}</div>
92
92
  </a>
93
93
  {{{end}}}
94
94
  </div>
@@ -1,22 +1,22 @@
1
- <li component="categories/category" data-cid="{./cid}" class="row clearfix category-{./cid}">
1
+ <li component="categories/category" data-cid="{./cid}" class="w-100 border-bottom py-3 py-lg-4 gap-1 d-flex flex-column flex-lg-row align-items-start category-{./cid}">
2
2
  <meta itemprop="name" content="{./name}">
3
-
4
- <div class="d-flex gap-3 col-12 {{{ if config.hideCategoryLastPost }}}col-md-10 col-sm-12{{{ else }}}col-md-7 col-sm-9{{{ end }}}">
5
- <div class="">
3
+
4
+ <div class="d-flex col-lg-7 gap-2 gap-lg-3">
5
+ <div class="flex-shrink-0">
6
6
  {buildCategoryIcon(@value, "40px", "rounded-1")}
7
7
  </div>
8
- <div class="d-flex flex-column gap-1 flex-1">
9
- <h2 class="title fw-semibold fs-4 m-0 tracking-tight">
8
+ <div class="flex-grow-1 d-flex flex-wrap gap-1">
9
+ <h2 class="title text-break fs-4 fw-semibold m-0 tracking-tight w-100">
10
10
  <!-- IMPORT partials/categories/link.tpl -->
11
11
  </h2>
12
12
  {{{ if ./descriptionParsed }}}
13
- <div class="description text-muted text-xs">
13
+ <div class="description text-muted text-xs w-100">
14
14
  {./descriptionParsed}
15
15
  </div>
16
16
  {{{ end }}}
17
17
  {{{ if !config.hideSubCategories }}}
18
18
  {{{ if ./children.length }}}
19
- <div class="category-children row row-cols-2 g-2">
19
+ <div class="category-children row row-cols-2 g-2 my-1 w-100">
20
20
  {{{ each ./children }}}
21
21
  {{{ if !./isSection }}}
22
22
  <span class="category-children-item small">
@@ -39,28 +39,25 @@
39
39
  {{{ end }}}
40
40
  </div>
41
41
  </div>
42
- <div class="row col-md-5 col-sm-3 d-none d-md-flex align-self-start">
43
- {{{ if !./link }}}
44
- <div class="col-md-5 d-none d-lg-flex stats text-muted gap-2 px-0">
45
- <div class="w-50">
46
- <div class="card card-header align-items-center px-0 py-2 border-0 rounded-1">
47
- <span class="{./unread-class} human-readable-number fs-5 ff-secondary" title="{./totalTopicCount}">{./totalTopicCount}</span>
48
- <span class="text-lowercase text-xs">[[global:topics]]</span>
42
+ {{{ if !./link }}}
43
+ <div class="d-flex col-lg-5 align-content-stretch">
44
+ <div class="meta stats d-none d-lg-grid col-6 gap-1 pe-2 text-muted" style="grid-template-columns: 1fr 1fr;">
45
+ <div class="card card-header border-0 p-1 overflow-hidden rounded-1 d-flex flex-column gap-1 align-items-center">
46
+ <span class="{./unread-class} human-readable-number fs-5 ff-secondary lh-1" title="{./totalTopicCount}" data-toFixed="0">{./totalTopicCount}</span>
47
+ <span class="d-none d-xl-flex text-lowercase text-xs">[[global:topics]]</span>
48
+ <i class="d-xl-none fa fa-fw text-xs text-muted opacity-75 fa-list"></i>
49
49
  </div>
50
- </div>
51
- <div class="w-50">
52
- <div class="card card-header align-items-center px-0 py-2 border-0 rounded-1">
53
- <span class="{./unread-class} human-readable-number fs-5 ff-secondary" title="{./totalPostCount}">{./totalPostCount}</span>
54
- <span class="text-lowercase text-xs">[[global:posts]]</span>
50
+ <div class="card card-header border-0 p-1 overflow-hidden rounded-1 d-flex flex-column gap-1 align-items-center">
51
+ <span class="{./unread-class} human-readable-number fs-5 ff-secondary lh-1" title="{./totalPostCount}" data-toFixed="0">{./totalPostCount}</span>
52
+ <span class="d-none d-xl-flex text-lowercase text-xs">[[global:posts]]</span>
53
+ <i class="d-xl-none fa fa-fw text-xs text-muted opacity-75 fa-message"></i>
55
54
  </div>
56
55
  </div>
56
+ {{{ if !config.hideCategoryLastPost }}}
57
+ <div component="topic/teaser" class="teaser col-lg-6">
58
+ <!-- IMPORT partials/categories/lastpost.tpl -->
59
+ </div>
60
+ {{{ end }}}
57
61
  </div>
58
-
59
- {{{ if !config.hideCategoryLastPost }}}
60
- <div class="col-md-7 col-sm-3 teaser d-none d-sm-block" component="topic/teaser">
61
- <!-- IMPORT partials/categories/lastpost.tpl -->
62
- </div>
63
- {{{ end }}}
64
- {{{ end }}}
65
- </div>
62
+ {{{ end }}}
66
63
  </li>
@@ -1,15 +1,15 @@
1
- <div class="lastpost background-link-container border-start border-2 h-100" style="border-color: {./bgColor}!important;">
1
+ <div class="lastpost background-link-container border-start border-2 lh-sm h-100" style="border-color: {./bgColor}!important;">
2
2
  {{{ each ./posts }}}
3
3
  {{{ if @first }}}
4
- <div component="category/posts" class="ps-3">
4
+ <div component="category/posts" class="ps-2 text-xs">
5
5
  <a class="background-link" href="{config.relative_path}/topic/{./topic.slug}{{{ if ./index }}}/{./index}{{{ end }}}"></a>
6
- <p class="mb-0">
7
- <a class="text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(posts.user, "20px", true, "avatar-tooltip")}</a>
6
+ <div>
7
+ <a class="text-decoration-none" href="{config.relative_path}/user/{./user.userslug}">{buildAvatar(posts.user, "18px", true, "avatar-tooltip")}</a>
8
8
  <a class="permalink text-muted" href="{config.relative_path}/topic/{./topic.slug}{{{ if ./index }}}/{./index}{{{ end }}}">
9
9
  <span class="timeago text-xs" title="{../timestampISO}"></span>
10
10
  </a>
11
- </p>
12
- <div class="post-content overflow-hidden text-xs line-clamp-2">
11
+ </div>
12
+ <div class="post-content text-xs line-clamp-2 lh-sm">
13
13
  {./content}
14
14
  </div>
15
15
  </div>
@@ -17,7 +17,7 @@
17
17
  {{{ end }}}
18
18
 
19
19
  {{{ if !./posts.length }}}
20
- <div component="category/posts" class="ps-3">
20
+ <div component="category/posts" class="ps-2">
21
21
  <div class="post-content overflow-hidden text-xs">
22
22
  [[category:no_new_posts]]
23
23
  </div>