Fix my account settings responsive
[oweals/peertube.git] / client / src / sass / include / _mixins.scss
1 @import '_variables';
2
3 @mixin disable-default-a-behaviour {
4   &:hover, &:focus, &:active {
5     text-decoration: none !important;
6     outline: none !important;
7   }
8 }
9
10 @mixin disable-outline {
11   &:focus:not(.focus-visible) {
12     outline: none;
13   }
14
15   &::-moz-focus-inner {
16     border: 0;
17     padding: 0
18   }
19 }
20
21
22 @mixin ellipsis {
23   white-space: nowrap;
24   overflow: hidden;
25   text-overflow: ellipsis;
26 }
27
28 @mixin ellipsis-multiline($font-size: 16px, $number-of-lines: 2) {
29   display: block;
30   /* Fallback for non-webkit */
31   display: -webkit-box;
32   max-height: $font-size * $number-of-lines;
33   /* Fallback for non-webkit */
34   font-size: $font-size;
35   line-height: $font-size;
36   overflow: hidden;
37   text-overflow: ellipsis;
38 }
39
40 @mixin prefix($property, $parameters...) {
41   @each $prefix in -webkit-, -moz-, -ms-, -o-, "" {
42     #{$prefix}#{$property}: $parameters;
43   }
44 }
45
46 @mixin peertube-word-wrap {
47   word-break: normal;
48   word-wrap: break-word;
49   overflow-wrap: break-word;
50   -webkit-hyphens: auto;
51   -ms-hyphens: auto;
52   -moz-hyphens: auto;
53   hyphens: auto;
54 }
55
56 @mixin apply-svg-color ($color) {
57   /deep/ svg {
58     path[fill="#000000"],
59     g[fill="#000000"],
60     rect[fill="#000000"],
61     circle[fill="#000000"],
62     polygon[fill="#000000"] {
63       fill: $color;
64     }
65
66     path[stroke="#000000"],
67     g[stroke="#000000"],
68     rect[stroke="#000000"],
69     circle[stroke="#000000"],
70     polygon[stroke="#000000"] {
71       stroke: $color;
72     }
73
74     stop[stop-color="#000000"] {
75       stop-color: $color;
76     }
77   }
78 }
79
80 @mixin peertube-input-text($width) {
81   display: inline-block;
82   height: $button-height;
83   width: $width;
84   background: var(--inputColor);
85   border: 1px solid #C6C6C6;
86   border-radius: 3px;
87   padding-left: 15px;
88   padding-right: 15px;
89   font-size: 15px;
90
91   &::placeholder {
92     color: var(--inputPlaceholderColor);
93   }
94
95   @media screen and (max-width: $width) {
96     width: 100%;
97   }
98 }
99
100 @mixin peertube-input-group($width) {
101   width: $width;
102   height: $button-height;
103   padding-top: 0;
104   padding-bottom: 0;
105
106   .input-group-text{
107     font-size: 14px;
108     color: gray;
109   }
110 }
111
112 @mixin peertube-textarea ($width, $height) {
113   @include peertube-input-text($width);
114
115   height: $height;
116   padding: 5px 15px;
117   font-size: 15px;
118 }
119
120 @mixin orange-button {
121   &, &:active, &:focus {
122     color: #fff;
123     background-color: var(--mainColor);
124   }
125
126   &:hover {
127     color: #fff;
128     background-color: var(--mainHoverColor);
129   }
130
131   &[disabled], &.disabled {
132     cursor: default;
133     color: #fff;
134     background-color: #C6C6C6;
135   }
136
137   my-global-icon {
138     @include apply-svg-color(#fff)
139   }
140 }
141
142 @mixin grey-button {
143   &, &:active, &:focus {
144     background-color: $grey-background-color;
145     color: $grey-foreground-color;
146   }
147
148   &:hover, &:active, &:focus, &[disabled], &.disabled {
149     color: $grey-foreground-color;
150     background-color: $grey-background-hover-color;
151   }
152
153   &[disabled], &.disabled {
154     cursor: default;
155   }
156
157   my-global-icon {
158     @include apply-svg-color($grey-foreground-color)
159   }
160 }
161
162 @mixin peertube-button {
163   border: none;
164   font-weight: $font-semibold;
165   font-size: 15px;
166   height: $button-height;
167   line-height: $button-height;
168   border-radius: 3px;
169   text-align: center;
170   padding: 0 17px 0 13px;
171   cursor: pointer;
172   outline: 0;
173 }
174
175 @mixin peertube-button-link {
176   display: inline-block;
177
178   @include disable-default-a-behaviour;
179   @include peertube-button;
180 }
181
182 @mixin button-with-icon($width: 20px, $margin-right: 3px, $top: -1px) {
183   my-global-icon {
184     position: relative;
185     width: $width;
186     margin-right: $margin-right;
187     top: $top;
188   }
189 }
190
191 @mixin peertube-button-file ($width) {
192   position: relative;
193   overflow: hidden;
194   display: inline-block;
195   width: $width;
196
197   @include peertube-button;
198   @include orange-button;
199
200   input[type=file] {
201     position: absolute;
202     top: 0;
203     right: 0;
204     min-width: 100%;
205     min-height: 100%;
206     font-size: 100px;
207     text-align: right;
208     filter: alpha(opacity=0);
209     opacity: 0;
210     outline: none;
211     background: white;
212     cursor: inherit;
213     display: block;
214   }
215 }
216
217 @mixin icon ($size) {
218   display: inline-block;
219   background-repeat: no-repeat;
220   background-size: contain;
221   width: $size;
222   height: $size;
223   vertical-align: middle;
224   cursor: pointer;
225 }
226
227 @mixin peertube-select-container ($width) {
228   padding: 0;
229   margin: 0;
230   border: 1px solid #C6C6C6;
231   width: $width;
232   border-radius: 3px;
233   overflow: hidden;
234   background: var(--inputColor);
235   position: relative;
236   font-size: 15px;
237
238   @media screen and (max-width: $width) {
239     width: 100%;
240   }
241
242   &:after {
243     top: 50%;
244     right: calc(0% + 15px);
245     content: " ";
246     height: 0;
247     width: 0;
248     position: absolute;
249     pointer-events: none;
250     border: 5px solid rgba(0, 0, 0, 0);
251     border-top-color: #000;
252     margin-top: -2px;
253     z-index: 100;
254   }
255
256   select {
257     padding: 0 35px 0 12px;
258     width: calc(100% + 2px);
259     position: relative;
260     left: 1px;
261     border: none;
262     box-shadow: none;
263     background: transparent none;
264     appearance: none;
265     cursor: pointer;
266     height: $button-height;
267     text-overflow: ellipsis;
268     color: var(--mainForegroundColor);
269
270     &:focus {
271       outline: none;
272     }
273
274     &:-moz-focusring {
275       color: transparent;
276       text-shadow: 0 0 0 #000;
277     }
278
279     option {
280       color: #000;
281     }
282   }
283 }
284
285 @mixin peertube-select-disabled-container ($width) {
286   @include peertube-select-container($width);
287
288   background-color: #E5E5E5;
289
290   select {
291     cursor: default;
292   }
293 }
294
295 // Thanks: https://codepen.io/triss90/pen/XNEdRe/
296 @mixin peertube-radio-container {
297   input[type="radio"] {
298     display: none;
299
300     & + label {
301       font-weight: $font-regular;
302       cursor: pointer;
303
304       &:before {
305         position: relative;
306         top: -2px;
307         content: '';
308         background: #fff;
309         border-radius: 100%;
310         border: 1px solid #000;
311         display: inline-block;
312         width: 15px;
313         height: 15px;
314         vertical-align: middle;
315         cursor: pointer;
316         text-align: center;
317         margin-right: 10px;
318       }
319     }
320
321     &:checked + label:before {
322       background-color: #000;
323       box-shadow: inset 0 0 0 4px #fff;
324     }
325
326     &:focus + label:before {
327       outline: none;
328       border-color: #000;
329     }
330   }
331 }
332
333 @mixin peertube-checkbox ($border-width) {
334   display: none;
335
336   & + span {
337     position: relative;
338     width: 18px;
339     height: 18px;
340     border: $border-width solid var(--mainForegroundColor);
341     border-radius: 3px;
342     vertical-align: middle;
343     cursor: pointer;
344
345     &:after {
346       content: '';
347       position: absolute;
348       top: calc(2px - #{$border-width});
349       left: 5px;
350       width: 5px;
351       height: 12px;
352       opacity: 0;
353       transform: rotate(45deg) scale(0);
354       border-right: 2px solid var(--mainBackgroundColor);
355       border-bottom: 2px solid var(--mainBackgroundColor);
356     }
357   }
358
359   &:checked + span {
360     border-color: transparent;
361     background: var(--mainColor);
362     animation: jelly 0.6s ease;
363
364     &:after {
365       opacity: 1;
366       transform: rotate(45deg) scale(1);
367     }
368   }
369
370   & + span + span {
371     font-size: 15px;
372     font-weight: $font-regular;
373     margin-left: 5px;
374     cursor: pointer;
375     display: inline;
376   }
377
378   &[disabled] + span,
379   &[disabled] + span + span{
380     opacity: 0.5;
381     cursor: default;
382   }
383 }
384
385
386 @mixin avatar ($size) {
387   object-fit: cover;
388   border-radius: 50%;
389   width: $size;
390   height: $size;
391 }
392
393 @mixin chevron ($size, $border-width) {
394   border-style: solid;
395   border-width: $border-width $border-width 0 0;
396   content: '';
397   display: inline-block;
398   transform: rotate(-45deg);
399   height: $size;
400   width: $size;
401 }
402
403 @mixin chevron-right ($size, $border-width) {
404   @include chevron($size, $border-width);
405
406   left: 0;
407   transform: rotate(45deg);
408 }
409
410 @mixin chevron-left ($size, $border-width) {
411   @include chevron($size, $border-width);
412
413   left: 0.25em;
414   transform: rotate(-135deg);
415 }
416
417 @mixin in-content-small-title {
418   text-transform: uppercase;
419   color: var(--mainColor);
420   font-weight: $font-bold;
421   font-size: 13px;
422 }
423
424 @mixin actor-owner {
425   @include disable-default-a-behaviour;
426
427   display: inline-table;
428   font-size: 13px;
429   margin-top: 4px;
430   color: var(--mainForegroundColor);
431
432   span:hover {
433     opacity: 0.8;
434   }
435
436   img {
437     @include avatar(18px);
438
439     margin-left: 7px;
440     position: relative;
441     top: -2px;
442   }
443 }
444
445 @mixin sub-menu-with-actor {
446   height: 160px;
447   display: flex;
448   flex-direction: column;
449   align-items: flex-start;
450
451   .actor {
452     display: flex;
453     margin-top: 20px;
454     margin-bottom: 20px;
455
456     img {
457       @include avatar(80px);
458
459       margin-right: 20px;
460     }
461
462     .actor-info {
463       display: flex;
464       flex-direction: column;
465       justify-content: center;
466
467       .actor-names {
468         display: flex;
469         align-items: center;
470
471         .actor-display-name {
472           font-size: 23px;
473           font-weight: $font-bold;
474         }
475
476         .actor-name {
477           margin-left: 7px;
478           position: relative;
479           top: 3px;
480           font-size: 14px;
481           color: $grey-actor-name;
482         }
483       }
484
485       .actor-followers {
486         font-size: 15px;
487       }
488
489       .actor-owner {
490         @include actor-owner;
491       }
492     }
493   }
494
495   .links {
496     margin-top: 0;
497     margin-bottom: 10px;
498
499     a {
500       margin-top: 0;
501       margin-bottom: 0;
502     }
503   }
504 }
505
506 @mixin create-button {
507   @include peertube-button-link;
508   @include orange-button;
509   @include button-with-icon(20px, 5px, -1px);
510 }
511
512 @mixin row-blocks {
513   display: flex;
514   min-height: 130px;
515   padding-bottom: 20px;
516   margin-bottom: 20px;
517   border-bottom: 1px solid #C6C6C6;
518
519   @media screen and (max-width: 800px) {
520     flex-direction: column;
521     height: auto;
522     align-items: center;
523   }
524 }
525
526 @mixin dropdown-with-icon-item {
527   padding: 6px 24px;
528
529   my-global-icon {
530     width: 24px;
531
532     margin-right: 10px;
533     position: relative;
534     top: -2px;
535   }
536 }