nodebb-theme-harmony 1.1.108 → 1.2.0

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 (56) hide show
  1. package/package.json +1 -1
  2. package/scss/chats.scss +2 -126
  3. package/scss/common.scss +3 -59
  4. package/scss/overrides.scss +0 -14
  5. package/templates/account/categories.tpl +1 -1
  6. package/templates/account/posts.tpl +6 -6
  7. package/templates/account/topics.tpl +3 -3
  8. package/templates/flags/detail.tpl +4 -4
  9. package/templates/groups/list.tpl +3 -3
  10. package/templates/notifications.tpl +1 -1
  11. package/templates/partials/account/sidebar-left.tpl +16 -16
  12. package/templates/partials/category/filter-dropdown-content.tpl +1 -1
  13. package/templates/partials/category/selector-dropdown-content.tpl +1 -1
  14. package/templates/partials/category/sort.tpl +1 -1
  15. package/templates/partials/category/subcategory.tpl +1 -1
  16. package/templates/partials/category/tools.tpl +1 -1
  17. package/templates/partials/category/watch.tpl +1 -1
  18. package/templates/partials/groups/filter-dropdown-content.tpl +1 -1
  19. package/templates/partials/groups/sidebar-left.tpl +5 -5
  20. package/templates/partials/post_bar.tpl +1 -1
  21. package/templates/partials/quick-search-results.tpl +1 -1
  22. package/templates/partials/search-filters.tpl +1 -1
  23. package/templates/partials/tags/filter-dropdown-content.tpl +1 -1
  24. package/templates/partials/tags/watch.tpl +1 -1
  25. package/templates/partials/tags_list.tpl +1 -1
  26. package/templates/partials/topic/navigator.tpl +2 -2
  27. package/templates/partials/topic/post-menu.tpl +1 -1
  28. package/templates/partials/topic/post.tpl +2 -2
  29. package/templates/partials/topic/quickreply.tpl +1 -1
  30. package/templates/partials/topic/sort.tpl +1 -1
  31. package/templates/partials/topic/tools.tpl +1 -1
  32. package/templates/partials/topic/watch.tpl +1 -1
  33. package/templates/partials/topic-filters.tpl +1 -1
  34. package/templates/partials/topic-terms.tpl +1 -1
  35. package/templates/partials/users/filter-dropdown-content.tpl +1 -1
  36. package/templates/partials/users/item.tpl +1 -1
  37. package/templates/partials/users_list_menu.tpl +5 -5
  38. package/templates/post-queue.tpl +2 -2
  39. package/templates/chat.tpl +0 -37
  40. package/templates/chats.tpl +0 -54
  41. package/templates/partials/chats/add-reaction.tpl +0 -1
  42. package/templates/partials/chats/composer.tpl +0 -27
  43. package/templates/partials/chats/dropdown.tpl +0 -10
  44. package/templates/partials/chats/message-window.tpl +0 -43
  45. package/templates/partials/chats/message.tpl +0 -73
  46. package/templates/partials/chats/messages.tpl +0 -7
  47. package/templates/partials/chats/options.tpl +0 -100
  48. package/templates/partials/chats/parent.tpl +0 -13
  49. package/templates/partials/chats/pinned-messages-list.tpl +0 -32
  50. package/templates/partials/chats/pinned-messages.tpl +0 -12
  51. package/templates/partials/chats/reactions.tpl +0 -1
  52. package/templates/partials/chats/recent_room.tpl +0 -55
  53. package/templates/partials/chats/scroll-up-alert.tpl +0 -3
  54. package/templates/partials/chats/system-message.tpl +0 -7
  55. package/templates/partials/chats/user-list.tpl +0 -11
  56. package/templates/partials/chats/user.tpl +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-harmony",
3
- "version": "1.1.108",
3
+ "version": "1.2.0",
4
4
  "nbbpm": {
5
5
  "compatibility": "^3.5.0"
6
6
  },
package/scss/chats.scss CHANGED
@@ -1,28 +1,5 @@
1
- // chats need a bit of css
2
-
3
- .stacked-avatars {
4
- width: 32px;
5
- height: 32px;
6
- span:first-child {
7
- top: 0;
8
- left: 8px;
9
- }
10
- span:last-child {
11
- left: 0;
12
- top: 8px;
13
- }
14
- }
15
-
1
+ // themes have a different layout so each one needs this block to set height to 100%
16
2
  body.page-user-chats {
17
- #content {
18
- max-width: 100%;
19
- margin-bottom: 0!important;
20
- }
21
- overflow: hidden;
22
- [data-widget-area="footer"] {
23
- display: none;
24
- }
25
- height: 100%;
26
3
  > .layout-container {
27
4
  height: 100%;
28
5
  > #panel {
@@ -32,105 +9,4 @@ body.page-user-chats {
32
9
  }
33
10
  }
34
11
  }
35
- }
36
-
37
- [component="chat/recent"] {
38
- .active .chat-room-btn {
39
- background-color: var(--btn-ghost-hover-color);
40
- }
41
- }
42
-
43
- [component="chat/nav-wrapper"] {
44
- width: 300px;
45
- [component="chat/public/room"].unread {
46
- font-weight: $font-weight-bold;
47
- }
48
- }
49
-
50
- [component="chat/user/list"] [data-uid] {
51
- [component="chat/user/list/username"] {
52
- color: $text-muted;
53
- }
54
- &.online {
55
- [component="chat/user/list/username"] {
56
- color: initial;
57
- font-weight: $font-weight-semibold;
58
- }
59
- }
60
- }
61
-
62
- .expanded-chat {
63
- .chat-content {
64
- .message-body {
65
- @include fix-lists;
66
- }
67
-
68
- .chat-message {
69
- .message-body-wrapper {
70
- .controls {
71
- opacity: 0;
72
- transition: $transition-fade;
73
- &:has([aria-expanded="true"]) { opacity: 1; }
74
- [data-action="restore"], [data-action="unpin"] { display: none; }
75
- }
76
- &:hover {
77
- .controls { opacity: 1; }
78
- }
79
- }
80
- &.deleted {
81
- .message-body { opacity: 0.3; }
82
- .message-body-wrapper .controls {
83
- [data-action] { display: none; }
84
- [data-action="restore"] { display: block; }
85
- }
86
- }
87
- &.pinned {
88
- .message-body-wrapper .controls {
89
- [data-action="pin"] { display: none; }
90
- [data-action="unpin"] { display: block;}
91
- }
92
- }
93
- }
94
- }
95
- }
96
-
97
- /* Mobile handling of chat page */
98
- @include media-breakpoint-down(lg) {
99
- .page-user-chats.chat-loaded {
100
- padding-bottom: 4.75rem;
101
- }
102
- }
103
-
104
- @include media-breakpoint-down(md) {
105
- .page-user-chats.chat-loaded {
106
- padding-bottom: initial;
107
- }
108
- [component="chat/nav-wrapper"] {
109
- width: 100%;
110
- }
111
-
112
-
113
- .page-user-chats.chat-loaded .bottombar {
114
- display: none!important;
115
- }
116
-
117
- [component="chat/nav-wrapper"][data-loaded="1"] {
118
- display: none!important;
119
- }
120
-
121
- [component="chat/nav-wrapper"][data-loaded="0"] + [component="chat/main-wrapper"] {
122
- display: none!important;
123
- }
124
- }
125
-
126
- .chat-modal {
127
- left: auto;
128
- top: auto;
129
- bottom: 0px;
130
- right: 2rem;
131
- width: auto!important;
132
- height: auto!important;
133
- [component="chat/user/list/btn"], [component="chat/pinned/messages/btn"] {
134
- display: none!important;
135
- }
136
- }
12
+ }
package/scss/common.scss CHANGED
@@ -23,15 +23,9 @@ hr {
23
23
  opacity: 1;
24
24
  }
25
25
 
26
- .ff-base {
27
- font-family: $font-family-base !important;
28
- }
29
- .ff-sans {
30
- font-family: $font-family-sans-serif !important;
31
- }
32
- .ff-secondary {
33
- font-family: $font-family-secondary;
34
- }
26
+ .ff-base { font-family: $font-family-base !important; }
27
+ .ff-sans { font-family: $font-family-sans-serif !important; }
28
+ .ff-secondary { font-family: $font-family-secondary; }
35
29
  .tracking-tight { letter-spacing: -0.02em; }
36
30
 
37
31
  .caret {
@@ -104,56 +98,6 @@ body:not(.page-user) {
104
98
  }
105
99
  }
106
100
 
107
- @mixin btn-ghost-base {
108
- display: flex;
109
- align-items: center;
110
- justify-content: center;
111
- gap: ($spacer * 0.5);
112
- border-radius: $border-radius-sm;
113
- border-width: 1px;
114
- border-color: transparent;
115
- background-color: transparent;
116
- padding: ($spacer * 0.25) ($spacer * 0.5);
117
- text-align: left;
118
- --bs-text-opacity: 1;
119
- color: inherit !important;
120
- font-family: $font-family-secondary;
121
- cursor: pointer;
122
- &:hover, &.active {
123
- background-color: var(--btn-ghost-hover-color);
124
- text-decoration: none;
125
- }
126
- }
127
-
128
- .btn-ghost {
129
- @include btn-ghost-base();
130
- line-height: 1.5rem;
131
- > i {
132
- line-height: 1.5rem;
133
- }
134
- }
135
-
136
- .btn-ghost-sm {
137
- @include btn-ghost-base();
138
- font-size: 0.875rem;
139
- line-height: 1.25rem;
140
- > i {
141
- line-height: 1.25rem;
142
- }
143
- }
144
-
145
- .btn-outline {
146
- @include btn-ghost-base();
147
- border-color: $border-color;
148
- }
149
-
150
- .btn-outline-sm {
151
- @include btn-ghost-base();
152
- border-color: $border-color;
153
- font-size: 0.875rem;
154
- line-height: 1.25rem;
155
- }
156
-
157
101
  .flex-basis-md-200 {
158
102
  @include media-breakpoint-up(md) {
159
103
  flex-basis: 200px!important;
@@ -35,20 +35,6 @@ $text-muted: $gray-600 !default;
35
35
  $border-color: $gray-200 !default;
36
36
  $link-color: shade-color($blue, 20%) !default;
37
37
 
38
- $btn-ghost-hover-color: mix($light, $dark, 90%);
39
- $btn-ghost-active-color: lighten($btn-ghost-hover-color, 5%);
40
- $btn-ghost-hover-color-dark: mix($dark, $light, 90%);
41
- $btn-ghost-active-color-dark: lighten($btn-ghost-hover-color-dark, 5%);
42
-
43
- :root {
44
- --btn-ghost-hover-color: #{$btn-ghost-hover-color};
45
- --btn-ghost-active-color: #{$btn-ghost-active-color};
46
- }
47
- [data-bs-theme="dark"] {
48
- --btn-ghost-hover-color: #{$btn-ghost-hover-color-dark};
49
- --btn-ghost-active-color: #{$btn-ghost-active-color-dark};
50
- }
51
-
52
38
  // no caret on dropdown-toggle
53
39
  $enable-caret: false;
54
40
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div class="d-flex gap-1">
9
9
  <div class="btn-group bottom-sheet" component="category/watch/all">
10
- <button class="btn-ghost-sm fw-semibold dropdown-toggle" data-bs-toggle="dropdown" type="button">
10
+ <button class="btn-ghost-sm ff-secondary fw-semibold dropdown-toggle" data-bs-toggle="dropdown" type="button">
11
11
  <span>[[user:change-all]]</span>
12
12
  </button>
13
13
  <ul class="dropdown-menu p-1 text-sm dropdown-menu-end">
@@ -3,19 +3,19 @@
3
3
  <div class="d-flex flex-wrap justify-content-between align-items-center gap-2 mb-3">
4
4
  <h3 class="fw-semibold fs-5 mb-0">[[global:posts]]</h3>
5
5
  <div class="d-flex flex-wrap gap-1">
6
- <a href="{config.relative_path}/user/{userslug}/posts" class="btn-ghost-sm fw-semibold {{{ if template.account/posts }}}active{{{ end }}}">[[global:header.recent]]</a>
6
+ <a href="{config.relative_path}/user/{userslug}/posts" class="btn-ghost-sm ff-secondary fw-semibold {{{ if template.account/posts }}}active{{{ end }}}">[[global:header.recent]]</a>
7
7
  {{{ if !reputation:disabled }}}
8
- <a href="{config.relative_path}/user/{userslug}/best"class="btn-ghost-sm fw-semibold {{{ if template.account/best }}}active{{{ end }}}">[[global:best]]</a>
9
- <a href="{config.relative_path}/user/{userslug}/controversial" class="btn-ghost-sm fw-semibold {{{ if template.account/controversial }}}active{{{ end }}}">[[global:controversial]]</a>
8
+ <a href="{config.relative_path}/user/{userslug}/best"class="btn-ghost-sm ff-secondary fw-semibold {{{ if template.account/best }}}active{{{ end }}}">[[global:best]]</a>
9
+ <a href="{config.relative_path}/user/{userslug}/controversial" class="btn-ghost-sm ff-secondary fw-semibold {{{ if template.account/controversial }}}active{{{ end }}}">[[global:controversial]]</a>
10
10
  {{{ if canEdit }}}
11
- <a href="{config.relative_path}/user/{userslug}/upvoted" class="btn-ghost-sm fw-semibold {{{ if template.account/upvoted }}}active{{{ end }}}">[[global:upvoted]]</a>
11
+ <a href="{config.relative_path}/user/{userslug}/upvoted" class="btn-ghost-sm ff-secondary fw-semibold {{{ if template.account/upvoted }}}active{{{ end }}}">[[global:upvoted]]</a>
12
12
  {{{ if !downvote:disabled }}}
13
- <a href="{config.relative_path}/user/{userslug}/downvoted" class="btn-ghost-sm fw-semibold {{{ if template.account/downvoted }}}active{{{ end }}}">[[global:downvoted]]</a>
13
+ <a href="{config.relative_path}/user/{userslug}/downvoted" class="btn-ghost-sm ff-secondary fw-semibold {{{ if template.account/downvoted }}}active{{{ end }}}">[[global:downvoted]]</a>
14
14
  {{{ end }}}
15
15
  {{{ end }}}
16
16
  {{{ end }}}
17
17
  {{{ if canEdit }}}
18
- <a href="{config.relative_path}/user/{userslug}/bookmarks" class="btn-ghost-sm fw-semibold {{{ if template.account/bookmarks }}}active{{{ end }}}">[[user:bookmarks]]</a>
18
+ <a href="{config.relative_path}/user/{userslug}/bookmarks" class="btn-ghost-sm ff-secondary fw-semibold {{{ if template.account/bookmarks }}}active{{{ end }}}">[[user:bookmarks]]</a>
19
19
  {{{ end }}}
20
20
  </div>
21
21
  </div>
@@ -22,9 +22,9 @@
22
22
 
23
23
  <div class="d-flex gap-1">
24
24
  {{{ if canEdit }}}
25
- <a href="{config.relative_path}/user/{userslug}/topics" class="btn-ghost-sm fw-semibold {{{ if template.account/topics }}}active{{{ end }}}">[[global:header.recent]]</a>
26
- <a href="{config.relative_path}/user/{userslug}/watched"class="btn-ghost-sm fw-semibold {{{ if template.account/watched }}}active{{{ end }}}">[[user:watched]]</a>
27
- <a href="{config.relative_path}/user/{userslug}/ignored" class="btn-ghost-sm fw-semibold {{{ if template.account/ignored }}}active{{{ end }}}">[[user:ignored]]</a>
25
+ <a href="{config.relative_path}/user/{userslug}/topics" class="btn-ghost-sm ff-secondary fw-semibold {{{ if template.account/topics }}}active{{{ end }}}">[[global:header.recent]]</a>
26
+ <a href="{config.relative_path}/user/{userslug}/watched"class="btn-ghost-sm ff-secondary fw-semibold {{{ if template.account/watched }}}active{{{ end }}}">[[user:watched]]</a>
27
+ <a href="{config.relative_path}/user/{userslug}/ignored" class="btn-ghost-sm ff-secondary fw-semibold {{{ if template.account/ignored }}}active{{{ end }}}">[[user:ignored]]</a>
28
28
  {{{ end }}}
29
29
  </div>
30
30
  </div>
@@ -3,14 +3,14 @@
3
3
  <div class="d-flex flex-column flex-md-row">
4
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
- <a class="btn btn-ghost border btn-sm justify-content-start" href="{config.relative_path}/{type_path}/{targetId}">
6
+ <a class="btn btn-ghost ff-secondary 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>
8
8
  [[flags:go-to-target]]
9
9
  </a>
10
10
 
11
11
  {{{ if target.uid }}}
12
12
  <div class="btn-group dropend" data-uid="{target.uid}">
13
- <button type="button" class="btn btn-ghost border btn-sm justify-content-start dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
13
+ <button type="button" class="btn btn-ghost ff-secondary border btn-sm justify-content-start dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
14
14
  <i class="fa fa-fw fa-street-view text-primary"></i>
15
15
  [[flags:flagged-user]]
16
16
  <i class="fa fa-chevron-right ms-auto text-secondary"></i>
@@ -38,7 +38,7 @@
38
38
  </div>
39
39
  {{{ end }}}
40
40
 
41
- <a class="btn btn-ghost border btn-sm justify-content-start" href="#" data-action="assign">
41
+ <a class="btn btn-ghost ff-secondary border btn-sm justify-content-start" href="#" data-action="assign">
42
42
  <i class="fa fa-fw fa-id-card-o text-primary"></i>
43
43
  [[flags:assign-to-me]]
44
44
  </a>
@@ -152,7 +152,7 @@
152
152
  <div class="pb-4 border-bottom">
153
153
  <div class="d-flex align-items-center">
154
154
  <h2 class="h6 fw-bold me-auto mb-0">[[flags:notes]]</h2>
155
- <button class="btn btn-ghost border" data-action="addEditNote">[[flags:add-note]]</button>
155
+ <button class="btn btn-ghost ff-secondary border" data-action="addEditNote">[[flags:add-note]]</button>
156
156
  </div>
157
157
  <ul component="flag/notes" class="list-unstyled mt-4">
158
158
  {{{ if !notes.length }}}
@@ -10,9 +10,9 @@
10
10
  <div class="text-sm d-flex flex-wrap align-items-center gap-2">
11
11
  [[topic:sort-by]]
12
12
  <div class="d-flex gap-2">
13
- <a href="?sort=alpha" class="btn-ghost fw-semibold {{{ if (sort == "alpha") }}}active{{{ end }}}">[[groups:details.group-name]]</a>
14
- <a href="?sort=count" class="btn-ghost fw-semibold {{{ if (sort == "count") }}}active{{{ end }}}">[[groups:details.member-count]]</a>
15
- <a href="?sort=date" class="btn-ghost fw-semibold {{{ if (sort == "date") }}}active{{{ end }}}">[[groups:details.creation-date]]</a>
13
+ <a href="?sort=alpha" class="btn-ghost ff-secondary fw-semibold {{{ if (sort == "alpha") }}}active{{{ end }}}">[[groups:details.group-name]]</a>
14
+ <a href="?sort=count" class="btn-ghost ff-secondary fw-semibold {{{ if (sort == "count") }}}active{{{ end }}}">[[groups:details.member-count]]</a>
15
+ <a href="?sort=date" class="btn-ghost ff-secondary fw-semibold {{{ if (sort == "date") }}}active{{{ end }}}">[[groups:details.creation-date]]</a>
16
16
  </div>
17
17
  </div>
18
18
  </div>
@@ -12,7 +12,7 @@
12
12
  {{{ if ./separator }}}
13
13
  <hr/>
14
14
  {{{ else }}}
15
- <a class="btn-ghost fw-semibold {{{ if ./selected }}}active{{{ end }}}" href="{config.relative_path}/notifications?filter={./filter}">
15
+ <a class="btn-ghost ff-secondary fw-semibold {{{ if ./selected }}}active{{{ end }}}" href="{config.relative_path}/notifications?filter={./filter}">
16
16
  <div class="flex-grow-1">{filters.name}</div>
17
17
  <span class="flex-shrink-0 text-xs" title="{./count}">{humanReadableNumber(./count)}</span>
18
18
  </a>
@@ -1,9 +1,9 @@
1
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
- <a href="{config.relative_path}/user/{userslug}" class="btn-ghost fw-semibold {{{ if template.account/profile }}}active{{{ end }}}">
3
+ <a href="{config.relative_path}/user/{userslug}" class="btn-ghost ff-secondary fw-semibold {{{ if template.account/profile }}}active{{{ end }}}">
4
4
  <div class="flex-grow-1">[[global:about]]</div>
5
5
  </a>
6
- <a href="{config.relative_path}/user/{userslug}/posts"class="btn-ghost fw-semibold
6
+ <a href="{config.relative_path}/user/{userslug}/posts"class="btn-ghost ff-secondary fw-semibold
7
7
  {{{ if template.account/posts }}}active{{{ end }}}
8
8
  {{{ if template.account/best }}}active{{{ end }}}
9
9
  {{{ if template.account/controversial }}}active{{{ end }}}
@@ -13,52 +13,52 @@
13
13
  <div class="flex-grow-1">[[global:posts]]</div>
14
14
  <span class="flex-shrink-0 text-xs" title="{counts.posts}">{humanReadableNumber(counts.posts)}</span>
15
15
  </a>
16
- <a href="{config.relative_path}/user/{userslug}/topics" class="btn-ghost fw-semibold
16
+ <a href="{config.relative_path}/user/{userslug}/topics" class="btn-ghost ff-secondary 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
20
  <div class="flex-grow-1">[[global:topics]]</div>
21
21
  <span class="flex-shrink-0 text-xs" title="{counts.topics}">{humanReadableNumber(counts.topics)}</span>
22
22
  </a>
23
- <a href="{config.relative_path}/user/{userslug}/groups" class="btn-ghost fw-semibold
23
+ <a href="{config.relative_path}/user/{userslug}/groups" class="btn-ghost ff-secondary fw-semibold
24
24
  {{{ if template.account/groups }}}active{{{ end }}}">
25
25
  <div class="flex-grow-1">[[global:header.groups]]</div>
26
26
  <span class="flex-shrink-0 text-xs" title="{counts.groups}">{humanReadableNumber(counts.groups)}</span>
27
27
  </a>
28
28
 
29
- <a href="{config.relative_path}/user/{userslug}/followers" class="btn-ghost fw-semibold
29
+ <a href="{config.relative_path}/user/{userslug}/followers" class="btn-ghost ff-secondary fw-semibold
30
30
  {{{ if template.account/followers }}}active{{{ end }}}">
31
31
  <div class="flex-grow-1">[[user:followers]]</div>
32
32
  <span class="flex-shrink-0 text-xs" title="{counts.followers}">{humanReadableNumber(counts.followers)}</span>
33
33
  </a>
34
34
 
35
- <a href="{config.relative_path}/user/{userslug}/following" class="btn-ghost fw-semibold
35
+ <a href="{config.relative_path}/user/{userslug}/following" class="btn-ghost ff-secondary fw-semibold
36
36
  {{{ if template.account/following }}}active{{{ end }}}">
37
37
  <div class="flex-grow-1">[[user:following]]</div>
38
38
  <span class="flex-shrink-0 text-xs" title="{counts.following}">{humanReadableNumber(counts.following)}</span>
39
39
  </a>
40
40
 
41
41
  {{{ if canEdit }}}
42
- <a href="{config.relative_path}/user/{userslug}/categories" class="btn-ghost fw-semibold
42
+ <a href="{config.relative_path}/user/{userslug}/categories" class="btn-ghost ff-secondary fw-semibold
43
43
  {{{ if template.account/categories }}}active{{{ end }}}">
44
44
  <div class="flex-grow-1">[[user:watched-categories]]</div>
45
45
  <span class="flex-shrink-0 text-xs" title="{counts.categoriesWatched}">{counts.categoriesWatched}</span>
46
46
  </a>
47
47
  {{{ if isSelf }}}
48
- <a href="{config.relative_path}/user/{userslug}/tags" class="btn-ghost fw-semibold
48
+ <a href="{config.relative_path}/user/{userslug}/tags" class="btn-ghost ff-secondary fw-semibold
49
49
  {{{ if template.account/tags }}}active{{{ end }}}">
50
50
  <div class="flex-grow-1">[[user:watched-tags]]</div>
51
51
  <span class="flex-shrink-0 text-xs" title="{counts.tagsWatched}">{counts.tagsWatched}</span>
52
52
  </a>
53
53
  {{{ end }}}
54
54
 
55
- <a href="{config.relative_path}/user/{userslug}/blocks" class="btn-ghost fw-semibold
55
+ <a href="{config.relative_path}/user/{userslug}/blocks" class="btn-ghost ff-secondary fw-semibold
56
56
  {{{ if template.account/blocks }}}active{{{ end }}}">
57
57
  <div class="flex-grow-1">[[user:blocked-users]]</div>
58
58
  <span class="flex-shrink-0 text-xs" title="{counts.blocks}">{humanReadableNumber(counts.blocks)}</span>
59
59
  </a>
60
60
 
61
- <a href="{config.relative_path}/user/{userslug}/uploads" class="btn-ghost fw-semibold
61
+ <a href="{config.relative_path}/user/{userslug}/uploads" class="btn-ghost ff-secondary fw-semibold
62
62
  {{{ if template.account/uploads }}}active{{{ end }}}">
63
63
  <div class="flex-grow-1">[[global:uploads]]</div>
64
64
  <span class="flex-shrink-0 text-xs" title="{counts.uploaded}">{humanReadableNumber(counts.uploaded)}</span>
@@ -67,15 +67,15 @@
67
67
 
68
68
  {{{ if (loggedIn && (!isSelf && !banned)) }}}
69
69
  <hr class="w-100 my-2"/>
70
- <a href="#" component="account/flag" class="btn-ghost-sm">
70
+ <a href="#" component="account/flag" class="btn-ghost-sm ff-secondary">
71
71
  <i class="flex-shrink-0 fa-solid fa-flag text-danger"></i>
72
72
  <div class="flex-grow-1 text-nowrap">[[user:flag-profile]]</div>
73
73
  </a>
74
- <a href="#" component="account/block" class="btn-ghost-sm {{{ if isBlocked }}}hidden{{{ end }}}">
74
+ <a href="#" component="account/block" class="btn-ghost-sm ff-secondary {{{ if isBlocked }}}hidden{{{ end }}}">
75
75
  <i class="flex-shrink-0 fa-solid fa-ban text-danger"></i>
76
76
  <div class="flex-grow-1 text-nowrap">[[user:block-user]]</div>
77
77
  </a>
78
- <a href="#" component="account/unblock" class="btn-ghost-sm {{{ if !isBlocked }}}hidden{{{ end }}}">
78
+ <a href="#" component="account/unblock" class="btn-ghost-sm ff-secondary {{{ if !isBlocked }}}hidden{{{ end }}}">
79
79
  <i class="flex-shrink-0 fa-solid fa-ban text-danger"></i>
80
80
  <div class="flex-grow-1 text-nowrap">[[user:unblock-user]]</div>
81
81
  </a>
@@ -83,18 +83,18 @@
83
83
 
84
84
  {{{ if canEdit }}}
85
85
  <hr class="w-100 my-2"/>
86
- <a href="{config.relative_path}/user/{userslug}/edit" class="btn-ghost-sm text-xs
86
+ <a href="{config.relative_path}/user/{userslug}/edit" class="btn-ghost-sm ff-secondary text-xs
87
87
  {{{ if template.account/edit }}}active{{{ end }}}">
88
88
  <div class="flex-grow-1">[[user:edit-profile]]</div>
89
89
  </a>
90
- <a href="{config.relative_path}/user/{userslug}/settings" class="btn-ghost-sm text-xs
90
+ <a href="{config.relative_path}/user/{userslug}/settings" class="btn-ghost-sm ff-secondary text-xs
91
91
  {{{ if template.account/settings }}}active{{{ end }}}">
92
92
  <div class="flex-grow-1">[[user:settings]]</div>
93
93
  </a>
94
94
  {{{ end }}}
95
95
 
96
96
  {{{ each profile_links }}}
97
- <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}">
97
+ <a href="{config.relative_path}/user/{userslug}/{./route}" class="btn-ghost-sm ff-secondary text-xs plugin-link {{{ if ./public }}}public{{{ else }}}private{{{ end }}} {{{ if (url == ./url) }}}active{{{ end }}}" id="{./id}">
98
98
  <div class="flex-grow-1">{./name}</div>
99
99
  </a>
100
100
  {{{end}}}
@@ -1,4 +1,4 @@
1
- <button type="button" class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
1
+ <button type="button" class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
2
2
  {{{ if selectedCategory }}}
3
3
  <span class="category-item d-inline-flex align-items-center gap-1">
4
4
  {buildCategoryIcon(selectedCategory, "18px", "rounded-circle")}
@@ -1,4 +1,4 @@
1
- <button type="button" class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
1
+ <button type="button" class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
2
2
  <span component="category-selector-selected">
3
3
  {{{ if (selectedCategory && !showCategorySelectLabel) }}}
4
4
  <span class="category-item d-inline-flex align-items-center gap-1">
@@ -1,5 +1,5 @@
1
1
  <div class="btn-group bottom-sheet" component="thread/sort">
2
- <button class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
2
+ <button class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
3
3
  <i class="fa fa-fw fa-arrow-down-wide-short text-primary"></i>
4
4
  <span class="visible-md-inline visible-lg-inline fw-semibold">[[topic:sort-by]]</span>
5
5
  </button>
@@ -13,7 +13,7 @@
13
13
  {{{end}}}
14
14
  </ul>
15
15
  {{{ if hasMoreSubCategories}}}
16
- <button class="btn-ghost-sm mb-2" component="category/load-more-subcategories">[[category:x-more-categories, {subCategoriesLeft}]]</button>
16
+ <button class="btn-ghost-sm ff-secondary mb-2" component="category/load-more-subcategories">[[category:x-more-categories, {subCategoriesLeft}]]</button>
17
17
  {{{ end }}}
18
18
  </div>
19
19
  {{{ end }}}
@@ -1,6 +1,6 @@
1
1
  {{{ if showTopicTools }}}
2
2
  <div class="btn-group thread-tools bottom-sheet">
3
- <button class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
3
+ <button class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
4
4
  <i class="fa fa-fw fa-gear text-primary"></i>
5
5
  <span class="visible-md-inline visible-lg-inline fw-semibold">[[topic:thread-tools.title]]</span>
6
6
  <span component="topic/selected/badge" class="badge rounded-pill bg-secondary"></span>
@@ -1,6 +1,6 @@
1
1
  {{{ if config.loggedIn }}}
2
2
  <div class="btn-group bottom-sheet" component="topic/watch">
3
- <button class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
3
+ <button class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
4
4
  <span component="category/watching/menu" {{{ if !./isWatched }}}class="hidden"{{{ end }}}><i class="fa fa-fw fa-bell-o text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold"> [[category:watching]]</span></span>
5
5
 
6
6
  <span component="category/tracking/menu" {{{ if !./isTracked }}}class="hidden"{{{ end }}}><i class="fa fa-fw fa-inbox text-primary"></i><span class="visible-md-inline visible-lg-inline fw-semibold"> [[category:tracking]]</span></span>
@@ -1,5 +1,5 @@
1
1
  <div class="dropdown bottom-sheet">
2
- <button type="button" class="btn-ghost-sm dropdown-toggle" data-bs-toggle="dropdown">
2
+ <button type="button" class="btn-ghost-sm ff-secondary dropdown-toggle" data-bs-toggle="dropdown">
3
3
  {{{ if selectedGroup }}}
4
4
  <span class="fw-semibold">{selectedGroup.displayName}</span>
5
5
  {{{ else }}}
@@ -1,25 +1,25 @@
1
1
  <div class="flex-shrink-0 pe-2 border-end-md text-sm mb-3 flex-basis-md-200">
2
2
  <div class="nav sticky-md-top d-flex flex-row flex-md-column flex-wrap gap-1" style="top: 1rem; z-index: 1;">
3
- <button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn-ghost fw-semibold {{{ if template.groups/details }}}active{{{ end }}}">
3
+ <button data-bs-toggle="tab" data-bs-target="#groups-posts" class="btn-ghost ff-secondary fw-semibold {{{ if template.groups/details }}}active{{{ end }}}">
4
4
  <div class="flex-grow-1">[[global:posts]]</div>
5
5
  </button>
6
- <button data-bs-toggle="tab" data-bs-target="#groups-members" class="btn-ghost fw-semibold">
6
+ <button data-bs-toggle="tab" data-bs-target="#groups-members" class="btn-ghost ff-secondary fw-semibold">
7
7
  <div class="flex-grow-1">[[groups:members]]</div>
8
8
  <span class="flex-shrink-0 text-xs" title="{group.memberCount}">{humanReadableNumber(group.memberCount)}</span>
9
9
  </button>
10
10
 
11
11
  {{{ if group.isOwner }}}
12
- <button data-bs-toggle="tab" data-bs-target="#groups-pending" class="btn-ghost fw-semibold">
12
+ <button data-bs-toggle="tab" data-bs-target="#groups-pending" class="btn-ghost ff-secondary fw-semibold">
13
13
  <div class="flex-grow-1">[[groups:details.pending]]</div>
14
14
  <span class="flex-shrink-0 text-xs" title="{group.pending.length}">{humanReadableNumber(group.group.pending.length)}</span>
15
15
  </button>
16
16
 
17
- <button data-bs-toggle="tab" data-bs-target="#groups-invited" class="btn-ghost fw-semibold">
17
+ <button data-bs-toggle="tab" data-bs-target="#groups-invited" class="btn-ghost ff-secondary fw-semibold">
18
18
  <div class="flex-grow-1">[[groups:details.invited]]</div>
19
19
  <span class="flex-shrink-0 text-xs" title="{group.invited.length}">{humanReadableNumber(group.group.invited.length)}</span>
20
20
  </button>
21
21
 
22
- <button data-bs-toggle="tab" data-bs-target="#groups-admin" class="btn-ghost fw-semibold">
22
+ <button data-bs-toggle="tab" data-bs-target="#groups-admin" class="btn-ghost ff-secondary fw-semibold">
23
23
  <div class="flex-grow-1">[[global:header.admin]]</div>
24
24
  </button>
25
25
  {{{ end }}}
@@ -3,7 +3,7 @@
3
3
  <div class="d-flex flex-row p-2 text-bg-light border rounded w-100 align-items-center">
4
4
  <ul class="d-flex list-unstyled me-auto mb-0 gap-2 align-items-center flex-wrap">
5
5
  {{{ if loggedIn }}}
6
- <button component="topic/mark-unread" class="btn-ghost-sm d-flex gap-2 align-items-center">
6
+ <button component="topic/mark-unread" class="btn-ghost-sm ff-secondary d-flex gap-2 align-items-center">
7
7
  <i class="fa fa-fw fa-inbox text-primary"></i>
8
8
  <span class="d-none d-md-inline fw-semibold">[[topic:mark-unread]]</span>
9
9
  </button>
@@ -14,7 +14,7 @@
14
14
  {{{ each posts }}}
15
15
  <li data-tid="{posts.topic.tid}" data-pid="{posts.pid}" class="d-flex flex-column gap-1">
16
16
  <a href="{config.relative_path}/post/{posts.pid}"
17
- class="btn-ghost-sm rounded-1 text-reset d-block text-truncate px-2 py-1">
17
+ class="btn-ghost-sm ff-secondary rounded-1 text-reset d-block text-truncate px-2 py-1">
18
18
  <span class="quick-search-title fw-semibold text-sm">{posts.topic.title}</span>
19
19
  <br/>
20
20
  <p class="snippet text-xs text-break text-wrap mb-0">
@@ -176,7 +176,7 @@
176
176
  <ul class="dropdown-menu p-1 text-sm" style="width: 300px;">
177
177
  <li class="px-3 py-1 d-flex flex-column gap-2">
178
178
  <button id="save-preferences" class="btn btn-primary">[[search:save-preferences]]</button>
179
- <button id="clear-preferences" class="btn-outline border">[[search:clear-preferences]]</button>
179
+ <button id="clear-preferences" class="btn-ghost border">[[search:clear-preferences]]</button>
180
180
  </li>
181
181
  </ul>
182
182
  </div>
@@ -1,4 +1,4 @@
1
- <button type="button" class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
1
+ <button type="button" class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown">
2
2
  {{{ if selectedTag }}}
3
3
  <span class="d-inline-flex align-items-center gap-1">
4
4
  <i class="fa fa-fw fa-tags text-primary"></i>
@@ -1,6 +1,6 @@
1
1
  {{{ if config.loggedIn }}}
2
2
  <div class="btn-group bottom-sheet" component="tag/watch">
3
- <button class="btn-ghost-sm d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
3
+ <button class="btn-ghost-sm ff-secondary d-flex gap-2 dropdown-toggle" data-bs-toggle="dropdown" type="button">
4
4
  <span component="tag/following/menu" class="d-flex gap-2 align-items-center{{{ if !isFollowing }}} hidden{{{ end }}}">
5
5
  <i class="flex-shrink-0 fa fa-fw fa-bell-o text-primary"></i>
6
6
  <span class="d-none d-md-inline fw-semibold">[[tags:watching]]</span>
@@ -1,5 +1,5 @@
1
1
  {{{each tags}}}
2
- <a href="{config.relative_path}/tags/{./valueEncoded}" data-tag="{./valueEscaped}" class="btn-ghost flex-column gap-0 align-items-start justify-content-start text-truncate p-2 ff-base">
2
+ <a href="{config.relative_path}/tags/{./valueEncoded}" data-tag="{./valueEscaped}" class="btn-ghost ff-secondary flex-column gap-0 align-items-start justify-content-start text-truncate p-2 ff-base">
3
3
  <div class="fw-semibold text-nowrap tag-item w-100 text-truncate">{./valueEscaped}</div>
4
4
  <div class="text-xs text-muted text-nowrap tag-topic-count">[[global:x-topics, {formattedNumber(./score)}]]</div>
5
5
  </a>