summaryrefslogtreecommitdiffstats
path: root/src/objects/_tabbar.scss
diff options
context:
space:
mode:
Diffstat (limited to 'src/objects/_tabbar.scss')
-rw-r--r--src/objects/_tabbar.scss121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/objects/_tabbar.scss b/src/objects/_tabbar.scss
new file mode 100644
index 0000000..80aeb53
--- /dev/null
+++ b/src/objects/_tabbar.scss
@@ -0,0 +1,121 @@
1@use 'sass:map';
2@use 'sass:meta';
3@use 'sass:string';
4@use 'iro-sass/src/bem';
5@use 'iro-sass/src/props';
6@use '../props' as *;
7
8@forward 'tabbar.vars';
9@use 'tabbar.vars' as vars;
10
11@mixin styles {
12 @include materialize-at-root(meta.module-variables('vars'));
13
14 @include bem.object('tabbar') {
15 min-inline-size: 0;
16 block-size: props.get(vars.$block-size);
17 overflow: hidden;
18
19 &::after {
20 display: block;
21 block-size: props.get(vars.$border--width);
22 margin-block-start: calc(-1 * props.get(vars.$border--width));
23 content: '';
24 background-color: props.get(vars.$railing--bg-color);
25 }
26
27 @include bem.elem('tabs') {
28 display: flex;
29 block-size: 100%;
30 overflow-inline: auto;
31 }
32
33 @include bem.modifier('quiet') {
34 box-shadow: none;
35 }
36
37 @include bem.modifier('adapt') {
38 block-size: 100%;
39 }
40
41 @include bem.modifier('snap') {
42 scroll-snap-align: start;
43 }
44
45 @include bem.elem('tab') {
46 position: relative;
47 display: flex;
48 align-items: center;
49 padding-inline: calc(.5 * props.get(vars.$spacing));
50 margin-inline: calc(-.5 * props.get(vars.$spacing));
51 color: props.get(vars.$tab--text-color);
52 white-space: nowrap;
53
54 &::before {
55 position: absolute;
56 inset-block-start: 50%;
57 inset-inline: calc(-1 * props.get(vars.$tab--pad-i) + .5 * props.get(vars.$spacing));
58 z-index: -10;
59 block-size: 1.5em;
60 content: '';
61 border-radius: props.get(vars.$rounding);
62 transform: translateY(-50%);
63 }
64
65 &::after {
66 position: absolute;
67 inset-block-end: 0;
68 inset-inline: calc(.5 * props.get(vars.$spacing));
69 z-index: 10;
70 display: none;
71 block-size: props.get(vars.$indicator--width);
72 content: '';
73 background-color: props.get(vars.$tab--selected--text-color);
74 }
75
76 &:link,
77 &:visited {
78 &:hover,
79 &:active,
80 &:focus-visible {
81 color: props.get(vars.$tab--selected--text-color);
82 }
83
84 &:focus-visible {
85 &::before {
86 color: props.get(vars.$key-focus--text-color);
87 text-decoration: none;
88 outline: props.get(vars.$key-focus--border-color) solid props.get(vars.$key-focus--border-width);
89 box-shadow: 0 0 0
90 calc(props.get(vars.$key-focus--border-width) + props.get(vars.$key-focus--outline-width))
91 props.get(vars.$key-focus--outline-color);
92 }
93 }
94 }
95
96 @include bem.next-twin-elem {
97 margin-inline-start: calc(.5 * props.get(vars.$spacing));
98 }
99
100 @include bem.is('selected') {
101 color: props.get(vars.$tab--selected--text-color);
102
103 &::after {
104 display: block;
105 }
106 }
107 }
108
109 @include bem.modifier('accent') {
110 @include bem.elem('tab') {
111 &::after {
112 background-color: props.get(vars.$tab--accent--text-color);
113 }
114
115 @include bem.is('selected') {
116 color: props.get(vars.$tab--accent--text-color);
117 }
118 }
119 }
120 }
121}