nodebb-theme-harmony 0.0.1 → 0.0.3

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 (139) hide show
  1. package/languages/en-GB/harmony.json +5 -0
  2. package/library.js +101 -26
  3. package/package.json +5 -2
  4. package/plugin.json +14 -2
  5. package/public/harmony.js +101 -0
  6. package/scss/account.scss +38 -0
  7. package/scss/chats.scss +72 -0
  8. package/scss/common.scss +65 -0
  9. package/scss/fonts.scss +17 -0
  10. package/scss/groups.scss +30 -0
  11. package/scss/harmony.scss +23 -3
  12. package/scss/header.scss +16 -0
  13. package/scss/mixins.scss +183 -0
  14. package/scss/modals.scss +4 -0
  15. package/scss/modules/bottom-sheet.scss +52 -0
  16. package/scss/modules/breadcrumbs.scss +16 -0
  17. package/scss/modules/composer.scss +21 -0
  18. package/scss/modules/cover.scss +115 -0
  19. package/scss/modules/tags.scss +6 -0
  20. package/scss/modules/topic-navigator.scss +61 -0
  21. package/scss/modules/topics-list.scss +20 -0
  22. package/scss/modules/user-menu.scss +5 -0
  23. package/scss/overrides.scss +65 -0
  24. package/scss/sidebar.scss +125 -0
  25. package/scss/skins.scss +13 -0
  26. package/scss/status.scss +25 -0
  27. package/scss/topic.scss +128 -0
  28. package/templates/account/best.tpl +0 -2
  29. package/templates/account/blocks.tpl +31 -26
  30. package/templates/account/bookmarks.tpl +0 -2
  31. package/templates/account/categories.tpl +1 -3
  32. package/templates/account/controversial.tpl +0 -2
  33. package/templates/account/downvoted.tpl +0 -2
  34. package/templates/account/followers.tpl +14 -10
  35. package/templates/account/following.tpl +14 -10
  36. package/templates/account/groups.tpl +13 -11
  37. package/templates/account/ignored.tpl +0 -2
  38. package/templates/account/posts.tpl +29 -10
  39. package/templates/account/profile.tpl +76 -159
  40. package/templates/account/topics.tpl +32 -21
  41. package/templates/account/uploads.tpl +38 -35
  42. package/templates/account/upvoted.tpl +0 -2
  43. package/templates/account/watched.tpl +0 -2
  44. package/templates/admin/plugins/harmony.tpl +17 -0
  45. package/templates/categories.tpl +5 -5
  46. package/templates/category.tpl +26 -26
  47. package/templates/chat.tpl +9 -9
  48. package/templates/chats.tpl +5 -7
  49. package/templates/footer.tpl +11 -7
  50. package/templates/groups/details.tpl +74 -64
  51. package/templates/groups/list.tpl +19 -14
  52. package/templates/header.tpl +34 -21
  53. package/templates/login.tpl +51 -45
  54. package/templates/partials/account/admin-menu.tpl +36 -0
  55. package/templates/partials/account/category-item.tpl +17 -17
  56. package/templates/partials/account/header.tpl +77 -35
  57. package/templates/partials/account/sidebar-left.tpl +82 -0
  58. package/templates/partials/breadcrumbs.tpl +4 -12
  59. package/templates/partials/categories/item.tpl +48 -44
  60. package/templates/partials/categories/lastpost.tpl +17 -19
  61. package/templates/partials/categories/link.tpl +5 -13
  62. package/templates/partials/category/sort.tpl +4 -7
  63. package/templates/partials/category/subcategory.tpl +4 -4
  64. package/templates/partials/category/tools.tpl +6 -9
  65. package/templates/partials/category/watch.tpl +7 -11
  66. package/templates/partials/category-filter-content.tpl +5 -6
  67. package/templates/partials/category-filter.tpl +0 -2
  68. package/templates/partials/category-selector-content.tpl +4 -5
  69. package/templates/partials/category-selector.tpl +0 -2
  70. package/templates/partials/chats/dropdown.tpl +24 -32
  71. package/templates/partials/chats/message-window.tpl +7 -7
  72. package/templates/partials/chats/message.tpl +34 -34
  73. package/templates/partials/chats/recent_room.tpl +16 -29
  74. package/templates/partials/chats/system-message.tpl +4 -4
  75. package/templates/partials/chats/user.tpl +1 -3
  76. package/templates/partials/groups/admin.tpl +82 -183
  77. package/templates/partials/groups/badge.tpl +1 -3
  78. package/templates/partials/groups/invited.tpl +33 -0
  79. package/templates/partials/groups/list.tpl +14 -21
  80. package/templates/partials/groups/memberlist.tpl +28 -24
  81. package/templates/partials/groups/pending.tpl +30 -0
  82. package/templates/partials/groups/sidebar-left.tpl +27 -0
  83. package/templates/partials/mobile-footer.tpl +70 -0
  84. package/templates/partials/notifications_list.tpl +19 -27
  85. package/templates/partials/paginator.tpl +22 -24
  86. package/templates/partials/post_bar.tpl +23 -18
  87. package/templates/partials/posts_list.tpl +0 -2
  88. package/templates/partials/posts_list_item.tpl +14 -29
  89. package/templates/partials/quick-search-results.tpl +36 -25
  90. package/templates/partials/search-results.tpl +4 -1
  91. package/templates/partials/sidebar/chats.tpl +53 -0
  92. package/templates/partials/sidebar/drafts.tpl +41 -0
  93. package/templates/partials/sidebar/logged-out-menu.tpl +38 -0
  94. package/templates/partials/sidebar/notifications.tpl +28 -0
  95. package/templates/partials/sidebar/search-mobile.tpl +29 -0
  96. package/templates/partials/sidebar/search.tpl +30 -0
  97. package/templates/partials/sidebar/user-menu.tpl +87 -0
  98. package/templates/partials/sidebar-left.tpl +40 -0
  99. package/templates/partials/sidebar-right.tpl +41 -0
  100. package/templates/partials/skin-switcher.tpl +35 -0
  101. package/templates/partials/tags_list.tpl +0 -2
  102. package/templates/partials/toast.tpl +6 -8
  103. package/templates/partials/topic/event.tpl +4 -20
  104. package/templates/partials/topic/navigator.tpl +20 -41
  105. package/templates/partials/topic/necro-post.tpl +5 -4
  106. package/templates/partials/topic/post-menu.tpl +23 -2
  107. package/templates/partials/topic/post-placeholder.tpl +15 -0
  108. package/templates/partials/topic/post.tpl +67 -64
  109. package/templates/partials/topic/quickreply.tpl +12 -14
  110. package/templates/partials/topic/reactions.tpl +0 -2
  111. package/templates/partials/topic/reply-button.tpl +16 -20
  112. package/templates/partials/topic/selection-tooltip.tpl +0 -2
  113. package/templates/partials/topic/sort.tpl +8 -6
  114. package/templates/partials/topic/stats.tpl +15 -14
  115. package/templates/partials/topic/tag.tpl +1 -3
  116. package/templates/partials/topic/tags.tpl +1 -5
  117. package/templates/partials/topic/tools.tpl +13 -0
  118. package/templates/partials/topic/watch.tpl +15 -13
  119. package/templates/partials/topic-filters.tpl +4 -5
  120. package/templates/partials/topic-list-bar.tpl +54 -0
  121. package/templates/partials/topic-terms.tpl +4 -5
  122. package/templates/partials/topics_list.tpl +109 -100
  123. package/templates/partials/users/item.tpl +7 -0
  124. package/templates/partials/users_list.tpl +11 -60
  125. package/templates/partials/users_list_menu.tpl +10 -18
  126. package/templates/popular.tpl +1 -18
  127. package/templates/recent.tpl +8 -24
  128. package/templates/register.tpl +74 -60
  129. package/templates/tag.tpl +3 -15
  130. package/templates/tags.tpl +3 -4
  131. package/templates/top.tpl +1 -18
  132. package/templates/topic.tpl +39 -43
  133. package/templates/unread.tpl +1 -22
  134. package/templates/users.tpl +17 -17
  135. package/templates/admin/plugins/persona.tpl +0 -29
  136. package/templates/partials/account/menu.tpl +0 -103
  137. package/templates/partials/header/user-menu.tpl +0 -87
  138. package/templates/partials/menu.tpl +0 -188
  139. package/templates/partials/thread_tools.tpl +0 -10
@@ -0,0 +1,5 @@
1
+ {
2
+ "skins": "Skins",
3
+ "collapse": "Collapse",
4
+ "login-register-to-search": "Login or register to search."
5
+ }
package/library.js CHANGED
@@ -1,5 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ const meta = require.main.require('./src/meta');
4
+ const _ = require.main.require('lodash');
5
+ const user = require.main.require('./src/user');
6
+
3
7
  const controllers = require('./lib/controllers');
4
8
 
5
9
  const library = module.exports;
@@ -21,31 +25,102 @@ library.addAdminNavigation = async function (header) {
21
25
  };
22
26
 
23
27
  library.defineWidgetAreas = async function (areas) {
24
- // const locations = ['header', 'sidebar', 'footer'];
25
- // const templates = [
26
- // 'categories.tpl', 'category.tpl', 'topic.tpl', 'users.tpl',
27
- // 'unread.tpl', 'recent.tpl', 'popular.tpl', 'top.tpl', 'tags.tpl', 'tag.tpl',
28
- // 'login.tpl', 'register.tpl',
29
- // ];
30
- // function capitalizeFirst(str) {
31
- // return str.charAt(0).toUpperCase() + str.slice(1);
32
- // }
33
- // templates.forEach((template) => {
34
- // locations.forEach((location) => {
35
- // areas.push({
36
- // name: `${capitalizeFirst(template.split('.')[0])} ${capitalizeFirst(location)}`,
37
- // template: template,
38
- // location: location,
39
- // });
40
- // });
41
- // });
42
-
43
- // areas = areas.concat([
44
- // {
45
- // name: 'Account Header',
46
- // template: 'account/profile.tpl',
47
- // location: 'header',
48
- // },
49
- // ]);
28
+ const locations = ['header', 'sidebar', 'footer'];
29
+ const templates = [
30
+ 'categories.tpl', 'category.tpl', 'topic.tpl', 'users.tpl',
31
+ 'unread.tpl', 'recent.tpl', 'popular.tpl', 'top.tpl', 'tags.tpl', 'tag.tpl',
32
+ 'login.tpl', 'register.tpl',
33
+ ];
34
+ function capitalizeFirst(str) {
35
+ return str.charAt(0).toUpperCase() + str.slice(1);
36
+ }
37
+ templates.forEach((template) => {
38
+ locations.forEach((location) => {
39
+ areas.push({
40
+ name: `${capitalizeFirst(template.split('.')[0])} ${capitalizeFirst(location)}`,
41
+ template: template,
42
+ location: location,
43
+ });
44
+ });
45
+ });
46
+
47
+ areas = areas.concat([
48
+ {
49
+ name: 'Sidebar Footer',
50
+ template: 'global',
51
+ location: 'sidebar-footer',
52
+ },
53
+ ]);
54
+
50
55
  return areas;
51
56
  };
57
+
58
+ library.getThemeConfig = async function (config) {
59
+ const { enableQuickReply, centerHeaderElements } = await meta.settings.get('harmony');
60
+ config.enableQuickReply = enableQuickReply === 'on';
61
+ config.centerHeaderElements = centerHeaderElements === 'on';
62
+ return config;
63
+ };
64
+
65
+ library.addUserToTopic = async function (hookData) {
66
+ const { enableQuickReply } = await meta.settings.get('harmony');
67
+ if (enableQuickReply === 'on') {
68
+ if (hookData.req.user) {
69
+ const userData = await user.getUserData(hookData.req.user.uid);
70
+ hookData.templateData.loggedInUser = userData;
71
+ } else {
72
+ hookData.templateData.loggedInUser = {
73
+ uid: 0,
74
+ username: '[[global:guest]]',
75
+ picture: user.getDefaultAvatar(),
76
+ 'icon:text': '?',
77
+ 'icon:bgColor': '#aaa',
78
+ };
79
+ }
80
+ }
81
+ return hookData;
82
+ };
83
+
84
+ library.filterMiddlewareRenderHeader = async function (hookData) {
85
+ const userSettings = await user.getSettings(hookData.req.uid);
86
+
87
+ const lightSkins = [
88
+ 'default', 'cerulean', 'cosmo', 'flatly', 'journal', 'litera',
89
+ 'lumen', 'lux', 'materia', 'minty', 'morph', 'pulse', 'quartz', 'sandstone',
90
+ 'simplex', 'sketchy', 'spacelab', 'united', 'yeti', 'zephyr',
91
+ ];
92
+ const darkSkins = [
93
+ 'cyborg', 'darkly', 'slate', 'solar', 'superhero', 'vapor',
94
+ ];
95
+ function parseSkins(skins) {
96
+ skins = skins.map(skin => ({
97
+ name: _.capitalize(skin),
98
+ value: skin === 'default' ? '' : skin,
99
+ }));
100
+ skins.forEach((skin) => {
101
+ skin.selected = skin.value === userSettings.bootswatchSkin;
102
+ });
103
+ return skins;
104
+ }
105
+
106
+ hookData.templateData.bootswatchSkinOptions = {
107
+ light: parseSkins(lightSkins),
108
+ dark: parseSkins(darkSkins),
109
+ };
110
+ hookData.templateData.currentBSSkin = _.capitalize(hookData.templateData.bootswatchSkin);
111
+ return hookData;
112
+ };
113
+
114
+ library.removeFinalBreadcrumb = async (hookData) => {
115
+ const { templateData } = hookData;
116
+ const { breadcrumbs } = templateData;
117
+
118
+ const applyTo = ['category', 'topic'];
119
+
120
+ // Remove the last breadcrumb (the current page) as it is not part of Harmony's design
121
+ if (applyTo.includes(hookData.templateData.template.name) && breadcrumbs && breadcrumbs.length) {
122
+ breadcrumbs.pop();
123
+ }
124
+
125
+ return hookData;
126
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-theme-harmony",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "nbbpm": {
5
5
  "compatibility": "^3.0.0"
6
6
  },
@@ -36,7 +36,10 @@
36
36
  "bugs": {
37
37
  "url": "https://github.com/NodeBB/nodebb-theme-harmony/issues"
38
38
  },
39
- "dependencies": {},
39
+ "dependencies": {
40
+ "@fontsource/inter": "^4.5.14",
41
+ "@fontsource/poppins": "^4.5.10"
42
+ },
40
43
  "devDependencies": {
41
44
  "eslint": "^8.0.0",
42
45
  "eslint-config-nodebb": "^0.2.0",
package/plugin.json CHANGED
@@ -3,9 +3,21 @@
3
3
  "hooks": [
4
4
  { "hook": "static:app.load", "method": "init" },
5
5
  { "hook": "filter:admin.header.build", "method": "addAdminNavigation" },
6
- { "hook": "filter:widgets.getAreas", "method": "defineWidgetAreas" }
6
+ { "hook": "filter:widgets.getAreas", "method": "defineWidgetAreas" },
7
+ { "hook": "filter:config.get", "method": "getThemeConfig" },
8
+ { "hook": "filter:topic.build", "method": "addUserToTopic" },
9
+ { "hook": "filter:middleware.renderHeader", "method": "filterMiddlewareRenderHeader" },
10
+ { "hook": "filter:middleware.render", "method": "removeFinalBreadcrumb" }
11
+ ],
12
+ "scripts": [
13
+ "public/harmony.js"
7
14
  ],
8
15
  "modules": {
9
16
  "../admin/plugins/harmony.js": "public/admin.js"
10
- }
17
+ },
18
+ "staticDirs": {
19
+ "inter": "node_modules/@fontsource/inter/files",
20
+ "poppins": "node_modules/@fontsource/poppins/files"
21
+ },
22
+ "languages": "languages"
11
23
  }
@@ -0,0 +1,101 @@
1
+ 'use strict';
2
+
3
+ $(document).ready(function () {
4
+ setupMobileMenu();
5
+ setupSearch();
6
+ setupDrafts();
7
+
8
+ $('[component="skinSwitcher"]').on('click', '.dropdown-item', function () {
9
+ const skin = $(this).attr('data-value');
10
+ $('[component="skinSwitcher"] .dropdown-item .fa-check').addClass('invisible');
11
+ $(this).find('.fa-check').removeClass('invisible');
12
+ require(['forum/account/settings'], function (accountSettings) {
13
+ $('[component="skinSwitcher"] [component="skinSwitcher/icon"]').addClass('fa-fade');
14
+ accountSettings.changeSkin(skin);
15
+ });
16
+ });
17
+
18
+ require(['hooks'], function (hooks) {
19
+ hooks.on('action:skin.change', function () {
20
+ $('[component="skinSwitcher"] [component="skinSwitcher/icon"]').removeClass('fa-fade');
21
+ });
22
+
23
+ $(window).on('action:composer.resize action:sidebar.toggle', function () {
24
+ $('[component="composer"]').css({
25
+ left: $('.sidebar-left').outerWidth(true),
26
+ width: $('#panel').width(),
27
+ });
28
+ });
29
+ });
30
+
31
+ function setupMobileMenu() {
32
+ $('[component="sidebar/toggle"]').on('click', function () {
33
+ $('.sidebar').toggleClass('open');
34
+ $(window).trigger('action:sidebar.toggle');
35
+ });
36
+ }
37
+
38
+ function setupSearch() {
39
+ $('[component="sidebar/search"]').on('shown.bs.dropdown', function () {
40
+ $(this).find('[component="search/fields"] input[name="query"]').trigger('focus');
41
+ });
42
+
43
+ function resizeResults(hookData) {
44
+ if (hookData && hookData.data && !hookData.data.posts.length) {
45
+ $('.bottombar .quick-search-results').css({ height: 'initial' });
46
+ return;
47
+ }
48
+ const dropdown = $('.bottombar .search-dropdown');
49
+ const padY = dropdown.innerHeight() - dropdown.height();
50
+ const input = dropdown.find('.input-container').outerHeight(true);
51
+ const showMore = dropdown.find('.show-more-container').outerHeight(true);
52
+ const newHeight = Math.max(
53
+ 150,
54
+ $(window).height() - (input + (showMore || 0) + (padY * 2) + 30)
55
+ );
56
+ $('.bottombar .quick-search-results').height(newHeight);
57
+ }
58
+ require(['hooks'], function (hooks) {
59
+ $(window).on('resize', resizeResults);
60
+ hooks.on('action:search.quick.complete', resizeResults);
61
+ });
62
+ }
63
+
64
+ function setupDrafts() {
65
+ require(['composer/drafts'], function (drafts) {
66
+ function updateBadgeCount() {
67
+ const count = drafts.getAvailableCount();
68
+ $('[component="drafts/count"]').toggleClass('hidden', count <= 0).text(count);
69
+ }
70
+
71
+ async function renderDraftList() {
72
+ const draftListEl = $('[component="drafts/list"]');
73
+ draftListEl.find('[data-save-id]').remove();
74
+
75
+ const draftItems = drafts.listAvailable();
76
+ if (!draftItems.length) {
77
+ draftListEl.find('.no-drafts').removeClass('hidden');
78
+ return;
79
+ }
80
+ const html = await app.parseAndTranslate('partials/sidebar/drafts', 'drafts', { drafts: draftItems });
81
+ draftListEl.find('.no-drafts').addClass('hidden');
82
+ draftListEl.append(html).find('.timeago').timeago();
83
+ }
84
+
85
+ const draftsEl = $('[component="sidebar/drafts"]');
86
+ draftsEl.on('shown.bs.dropdown', renderDraftList);
87
+
88
+ draftsEl.on('click', '[component="drafts/open"]', function () {
89
+ drafts.open($(this).attr('data-save-id'));
90
+ });
91
+
92
+ draftsEl.on('click', '[component="drafts/delete"]', function () {
93
+ drafts.removeDraft($(this).attr('data-save-id'));
94
+ });
95
+
96
+ $(window).on('action:composer.drafts.save', updateBadgeCount);
97
+ $(window).on('action:composer.drafts.remove', updateBadgeCount);
98
+ updateBadgeCount();
99
+ });
100
+ }
101
+ });
@@ -0,0 +1,38 @@
1
+ .page-user #panel {
2
+ margin-top: 0px!important;
3
+ }
4
+ .account {
5
+ margin-top: 200px;
6
+ width: 100%;
7
+ margin-left: auto;
8
+ margin-right: auto;
9
+ .breadcrumb {
10
+ justify-content: start!important;
11
+ }
12
+
13
+ .avatar-wrapper {
14
+ border: 4px solid white;
15
+ border-radius: 50%;
16
+ }
17
+
18
+ @include media-breakpoint-up(md) {
19
+ margin-top: 300px;
20
+ }
21
+
22
+ .categories {
23
+ [component="categories/category"] {
24
+ .depth-1 {
25
+ padding-left: 50px;
26
+ }
27
+ .depth-2 {
28
+ padding-left: 100px;
29
+ }
30
+ .depth-3 {
31
+ padding-left: 150px;
32
+ }
33
+ .depth-4 {
34
+ padding-left: 150px;
35
+ }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,72 @@
1
+ // chats need a bit of css
2
+
3
+ .page-user-chats #content {
4
+ max-width: 100%;
5
+ }
6
+ body.page-user-chats {
7
+ overflow: hidden;
8
+ }
9
+
10
+ /* Styles common to both full chat and chat modal */
11
+ .chats-full, .chat-modal {
12
+ height: calc(100vh - var(--panel-offset) - $spacer)!important;
13
+ }
14
+
15
+ .expanded-chat, .chat-modal {
16
+ // no taskbar so hide minimize button
17
+ [data-action="minimize"] {
18
+ display: none!important;
19
+ }
20
+ .chat-content .chat-message {
21
+ .message-body-wrapper .controls {
22
+ [data-action="restore"] {
23
+ display: none;
24
+ }
25
+ }
26
+ }
27
+ .chat-content .chat-message.deleted {
28
+ .message-body-wrapper .controls {
29
+ [data-action] {
30
+ display: none;
31
+ }
32
+
33
+ [data-action="restore"] {
34
+ display: inline;
35
+ }
36
+ }
37
+
38
+ .message-body {
39
+ opacity: 0.3;
40
+ }
41
+ }
42
+ }
43
+
44
+ /* Mobile handling of chat page */
45
+ @include media-breakpoint-down(sm) {
46
+ .page-user-chats {
47
+ padding-bottom: 0;
48
+
49
+ [component="chat/nav-wrapper"][data-loaded="1"] {
50
+ display: none!important;
51
+ }
52
+
53
+ [component="chat/nav-wrapper"][data-loaded="0"] + [component="chat/main-wrapper"] {
54
+ display: none!important;
55
+ }
56
+
57
+ [component="chat/messages"] {
58
+ width: calc(100vw - $grid-gutter-width);
59
+ }
60
+ }
61
+
62
+ [data-action="pop-out"] {
63
+ display: none!important;
64
+ }
65
+ }
66
+
67
+ /* Mobile handling of chat modal */
68
+ @include media-breakpoint-down(sm) {
69
+ .chat-modal {
70
+ z-index: $zindex-popover + 10;
71
+ }
72
+ }
@@ -0,0 +1,65 @@
1
+
2
+ body {
3
+ overflow-y: scroll;
4
+ }
5
+ .ff-secondary {
6
+ font-family: $font-family-secondary;
7
+ }
8
+ .tracking-tight { letter-spacing: -0.025em; }
9
+
10
+ .text-md { font-size: 1.125rem!important; } // 18px
11
+ .text-sm { font-size: 0.875rem!important; } // 14px
12
+ .text-xs { font-size: 0.75rem!important; } // 12px
13
+
14
+ .btn-link:hover {
15
+ text-decoration: none;
16
+ }
17
+
18
+ .sticky-tools {
19
+ position: sticky;
20
+ z-index: 3;
21
+ top: calc($spacer * 0.5);
22
+ background-color: $body-bg;
23
+ }
24
+ // quartz doesn't need body-bg for tool background
25
+ .skin-quartz .sticky-tools {
26
+ background-color: initial;
27
+ }
28
+
29
+ .skin-noskin {
30
+ .sticky-tools .btn-link {
31
+ color: $dark;
32
+ }
33
+ }
34
+
35
+ @mixin btn-ghost-base {
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ gap: ($spacer * 0.5);
40
+ border-radius: $border-radius-sm;
41
+ border-width: 1px;
42
+ border-color: transparent;
43
+ background-color: transparent;
44
+ padding: ($spacer * 0.25) ($spacer * 0.5);
45
+ text-align: left;
46
+ --bs-text-opacity: 1;
47
+ color: inherit !important;
48
+ $hover-color: mix($light, $dark, 90);
49
+ cursor: pointer;
50
+ &:hover, &.active {
51
+ background-color: $hover-color;
52
+ text-decoration: none;
53
+ }
54
+ }
55
+
56
+ .btn-ghost {
57
+ @include btn-ghost-base();
58
+ line-height: 1.5rem;
59
+ }
60
+
61
+ .btn-ghost-sm {
62
+ @include btn-ghost-base();
63
+ font-size: 0.875rem;
64
+ line-height: 1.25rem;
65
+ }
@@ -0,0 +1,17 @@
1
+ @use "@fontsource/inter/scss/mixins" as Inter;
2
+ @use "@fontsource/poppins/scss/mixins" as Poppins;
3
+
4
+ $weights: $font-weight-light, $font-weight-normal, $font-weight-semibold, $font-weight-bold;
5
+
6
+ @each $weight in $weights {
7
+ @include Inter.fontFace(
8
+ $weight: $weight,
9
+ $display: fallback,
10
+ $fontDir: "./plugins/nodebb-theme-harmony/inter"
11
+ );
12
+ @include Poppins.fontFace(
13
+ $weight: $weight,
14
+ $display: fallback,
15
+ $fontDir: "./plugins/nodebb-theme-harmony/poppins"
16
+ );
17
+ }
@@ -0,0 +1,30 @@
1
+ .template-groups-details #panel {
2
+ margin-top: 0px!important;
3
+ }
4
+
5
+ .group-hover-bg {
6
+ $hover-color: mix($light, $dark, 97);
7
+ $border-color: mix($light, $dark, 90);
8
+ .card-body {
9
+ border-color: $border-color!important;
10
+ }
11
+ &:hover {
12
+ background-color: $hover-color;
13
+ }
14
+ }
15
+
16
+ .groups.details {
17
+ margin-top: 200px;
18
+
19
+ [component="groups/members"] {
20
+ tbody {
21
+ max-height: 500px;
22
+ display: block;
23
+ overflow-y: auto;
24
+ }
25
+ }
26
+
27
+ @include media-breakpoint-up(md) {
28
+ margin-top: 300px;
29
+ }
30
+ }
package/scss/harmony.scss CHANGED
@@ -1,3 +1,23 @@
1
- // @import "variables";
2
- // @import "style";
3
- // @import "mixins";
1
+ @import "fonts";
2
+ @import "mixins";
3
+ @import "common";
4
+
5
+ @import "header";
6
+ @import "topic";
7
+ @import "chats";
8
+ @import "sidebar";
9
+ @import "status";
10
+ @import "account";
11
+ @import "groups";
12
+ @import "modals";
13
+
14
+ @import "modules/breadcrumbs";
15
+ @import "modules/tags";
16
+ @import "modules/user-menu";
17
+ @import "modules/bottom-sheet";
18
+ @import "modules/topic-navigator";
19
+ @import "modules/composer";
20
+ @import "modules/topics-list";
21
+ @import "modules/cover";
22
+
23
+ @import "skins";
@@ -0,0 +1,16 @@
1
+ // hide brand/title on user and group details pages so it doesnt break covers
2
+ .page-user, .template-groups-details {
3
+ .brand-container {
4
+ display: none;
5
+ }
6
+ }
7
+ [component="brand/wrapper"] {
8
+ &:hover {
9
+ background-color: $card-cap-bg;
10
+ }
11
+ }
12
+
13
+ [component="brand/logo"] {
14
+ max-height: 48px;
15
+ width: auto;
16
+ }