@okjavis/nodebb-theme-javis 2.2.0 → 2.4.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.
package/scss/_feed.scss CHANGED
@@ -4,22 +4,193 @@
4
4
  // ===========================================================
5
5
 
6
6
  // ===========================================================
7
- // HIDE NEW TOPIC BUTTON AND ALL CATEGORIES ROW
7
+ // HIDE CATEGORIES WIDGET ON FEED PAGE
8
+ // The categories list widget is not relevant on the feed page
8
9
  // ===========================================================
9
- // Hide New Topic button
10
- // #new_topic,
11
- // .btn[href*="/compose"],
12
- // button[data-action="newTopic"],
13
- // a[href*="/compose"] {
14
- // display: none !important;
15
- // }
10
+ .feed {
11
+ // Hide categories list directly - simple and reliable
12
+ ul.categories-list {
13
+ display: none !important;
14
+ }
15
+
16
+ // Also hide any widget title that precedes a categories list
17
+ // This targets the "All Categories" header
18
+ [data-widget-area="left"],
19
+ [data-widget-area="right"] {
20
+ // Hide the entire widget container that has categories
21
+ // Using adjacent sibling and general sibling selectors
22
+ .categories-list,
23
+ [component="categories/category"] {
24
+ display: none !important;
25
+ }
26
+ }
27
+ }
28
+
29
+ // ===========================================================
30
+ // LINKEDIN-STYLE COMPOSER PROMPT CARD
31
+ // ===========================================================
32
+ .composer-prompt-card {
33
+ background: $jv-surface;
34
+ border: 1px solid $jv-border-subtle;
35
+ border-radius: $jv-radius-lg;
36
+ padding: $jv-space-4;
37
+ margin-bottom: $jv-space-4;
38
+ box-shadow: $jv-shadow-sm;
39
+ transition: box-shadow $jv-transition-fast, border-color $jv-transition-fast;
40
+
41
+ &:hover {
42
+ box-shadow: $jv-shadow-md;
43
+ border-color: $jv-border-strong;
44
+ }
45
+
46
+ // Guest variant
47
+ &.composer-prompt-guest {
48
+ .composer-prompt-input {
49
+ cursor: pointer;
50
+ }
51
+ }
52
+ }
53
+
54
+ .composer-prompt-inner {
55
+ display: flex;
56
+ align-items: center;
57
+ gap: $jv-space-3;
58
+ }
59
+
60
+ .composer-prompt-avatar {
61
+ flex-shrink: 0;
62
+
63
+ .avatar {
64
+ width: 48px !important;
65
+ height: 48px !important;
66
+ border-radius: 50% !important;
67
+ object-fit: cover;
68
+ border: 2px solid rgba(0, 0, 0, 0.05);
69
+ }
70
+
71
+ .avatar-placeholder {
72
+ width: 48px;
73
+ height: 48px;
74
+ border-radius: 50%;
75
+ background: linear-gradient(135deg, $jv-primary-soft 0%, rgba(0, 81, 255, 0.2) 100%);
76
+ display: flex;
77
+ align-items: center;
78
+ justify-content: center;
79
+ color: $jv-primary;
80
+ font-size: 18px;
81
+ }
82
+ }
83
+
84
+ .composer-prompt-input {
85
+ flex: 1;
86
+ display: flex;
87
+ align-items: center;
88
+ padding: $jv-space-3 $jv-space-4;
89
+ background: $jv-bg;
90
+ border: 1px solid $jv-border-subtle;
91
+ border-radius: $jv-radius-pill;
92
+ cursor: pointer;
93
+ transition: all $jv-transition-fast;
94
+ text-decoration: none;
95
+ min-height: 48px;
96
+
97
+ &:hover {
98
+ background: rgba(0, 0, 0, 0.04);
99
+ border-color: $jv-border-strong;
100
+ }
101
+
102
+ &:focus {
103
+ outline: none;
104
+ border-color: $jv-primary;
105
+ box-shadow: $jv-focus-ring;
106
+ }
107
+
108
+ // Reset button styles
109
+ &.composer-prompt-input {
110
+ text-align: left;
111
+ font-family: inherit;
112
+ font-size: inherit;
113
+ }
114
+ }
115
+
116
+ .composer-prompt-placeholder {
117
+ color: $jv-text-muted;
118
+ font-size: $jv-font-size-base;
119
+ font-weight: 500;
120
+ }
121
+
122
+ .composer-prompt-actions {
123
+ display: flex;
124
+ gap: $jv-space-1;
125
+ flex-shrink: 0;
126
+ }
127
+
128
+ .composer-prompt-action {
129
+ display: flex;
130
+ align-items: center;
131
+ justify-content: center;
132
+ width: 40px;
133
+ height: 40px;
134
+ border: none;
135
+ background: transparent;
136
+ border-radius: 50%;
137
+ color: $jv-text-muted;
138
+ cursor: pointer;
139
+ transition: all $jv-transition-fast;
140
+
141
+ &:hover {
142
+ background: $jv-hover-bg;
143
+ color: $jv-primary;
144
+ }
145
+
146
+ &:focus {
147
+ outline: none;
148
+ box-shadow: $jv-focus-ring;
149
+ }
150
+
151
+ i {
152
+ font-size: 18px;
153
+ }
154
+ }
16
155
 
17
- // // Hide All categories row
18
- // .category-selector-container,
19
- // [component="category/dropdown"],
20
- // .d-flex.justify-content-between.py-2.mb-2 {
21
- // display: none !important;
22
- // }
156
+ // Feed options row (settings dropdown only)
157
+ .feed-options-row {
158
+ margin-bottom: $jv-space-2 !important;
159
+ padding: $jv-space-2 0 !important;
160
+ }
161
+
162
+ // Mobile responsive
163
+ @media (max-width: 576px) {
164
+ .composer-prompt-card {
165
+ padding: $jv-space-3;
166
+ border-radius: $jv-radius-md;
167
+ }
168
+
169
+ .composer-prompt-avatar {
170
+ .avatar,
171
+ .avatar-placeholder {
172
+ width: 40px !important;
173
+ height: 40px !important;
174
+ }
175
+
176
+ .avatar-placeholder {
177
+ font-size: 16px;
178
+ }
179
+ }
180
+
181
+ .composer-prompt-input {
182
+ padding: $jv-space-2 $jv-space-3;
183
+ min-height: 40px;
184
+ }
185
+
186
+ .composer-prompt-placeholder {
187
+ font-size: $jv-font-size-sm;
188
+ }
189
+
190
+ .composer-prompt-actions {
191
+ display: none; // Hide action buttons on mobile for cleaner UI
192
+ }
193
+ }
23
194
 
24
195
  // ===========================================================
25
196
  // FEED CONTAINER
@@ -131,22 +302,18 @@
131
302
  .overflow-hidden {
132
303
  border-radius: $jv-radius-md $jv-radius-md 0 0 !important; // Match card radius
133
304
  max-height: 280px !important; // Reduced from 350px - more balanced ratio
305
+ background: rgba(0, 0, 0, 0.02); // Subtle background for letterboxing
134
306
 
135
307
  img {
136
308
  width: 100%;
137
309
  height: 280px; // Fixed height for consistency
138
- object-fit: cover;
310
+ object-fit: contain; // Prevent stretching, maintain aspect ratio
139
311
  }
140
312
  }
141
313
 
142
- // Additional thumbnails
314
+ // Hide additional thumbnails - only show main image in feed
143
315
  .position-absolute {
144
- padding: $jv-space-4 !important;
145
-
146
- img {
147
- border: 2px solid $jv-surface;
148
- box-shadow: $jv-shadow-soft;
149
- }
316
+ display: none !important;
150
317
  }
151
318
  }
152
319
  }
@@ -314,6 +481,95 @@
314
481
  border-color: $jv-primary !important;
315
482
  }
316
483
  }
484
+
485
+ // ===========================================================
486
+ // FEED IMAGE CAROUSEL (matching topic page design)
487
+ // ===========================================================
488
+ .post-image-carousel {
489
+ border-radius: $jv-radius-md;
490
+ overflow: hidden;
491
+ margin: $jv-space-4 0;
492
+ background: rgba(0, 0, 0, 0.03);
493
+
494
+ .carousel-inner {
495
+ border-radius: $jv-radius-md;
496
+ }
497
+
498
+ .carousel-item {
499
+ // Fixed height container to prevent jumping
500
+ height: 400px;
501
+
502
+ img {
503
+ width: 100%;
504
+ height: 100%;
505
+ object-fit: contain;
506
+ background: rgba(0, 0, 0, 0.02);
507
+ }
508
+ }
509
+
510
+ // Navigation arrows - matching topic page
511
+ .carousel-control-prev,
512
+ .carousel-control-next {
513
+ width: 48px;
514
+ height: 48px;
515
+ top: 50%;
516
+ transform: translateY(-50%);
517
+ background: rgba(0, 0, 0, 0.5);
518
+ border-radius: 50%;
519
+ opacity: 0;
520
+ transition: opacity $jv-transition-fast;
521
+
522
+ &:hover {
523
+ background: rgba(0, 0, 0, 0.7);
524
+ }
525
+
526
+ .carousel-control-prev-icon,
527
+ .carousel-control-next-icon {
528
+ width: 20px;
529
+ height: 20px;
530
+ }
531
+ }
532
+
533
+ .carousel-control-prev {
534
+ left: $jv-space-3;
535
+ }
536
+
537
+ .carousel-control-next {
538
+ right: $jv-space-3;
539
+ }
540
+
541
+ &:hover {
542
+ .carousel-control-prev,
543
+ .carousel-control-next {
544
+ opacity: 1;
545
+ }
546
+ }
547
+
548
+ // Indicator dots - matching topic page
549
+ .carousel-indicators {
550
+ margin-bottom: $jv-space-3;
551
+ gap: $jv-space-2;
552
+
553
+ button {
554
+ width: 8px;
555
+ height: 8px;
556
+ border-radius: 50%;
557
+ background: rgba(255, 255, 255, 0.5);
558
+ border: none;
559
+ opacity: 1;
560
+ transition: background-color $jv-transition-fast, transform $jv-transition-fast;
561
+
562
+ &.active {
563
+ background: #fff;
564
+ transform: scale(1.2);
565
+ }
566
+
567
+ &:hover {
568
+ background: rgba(255, 255, 255, 0.8);
569
+ }
570
+ }
571
+ }
572
+ }
317
573
  }
318
574
 
319
575
  // ===========================================================
@@ -504,7 +504,7 @@ div[data-widget-area="right"],
504
504
 
505
505
  // Sticky positioning - stays visible when scrolling
506
506
  position: sticky;
507
- top: 48px; // Adjust based on your header height
507
+ top: 72px; // Adjust based on your header height
508
508
  align-self: flex-start;
509
509
  max-height: calc(100vh - 100px); // Account for header + padding
510
510
  overflow-y: auto; // Allow scrolling if content is too tall