Skip to content

Commit 9431254

Browse files
committed
feat: add middle alignments for badges
1 parent 90b5b54 commit 9431254

File tree

4 files changed

+89
-14
lines changed

4 files changed

+89
-14
lines changed

packages/badge/_mixins.scss

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ $padding: 4px;
4141
}
4242

4343
&.smui-badge--align-top-start,
44+
&.smui-badge--align-top-middle,
4445
&.smui-badge--align-top-end {
4546
&.smui-badge--position-inset,
4647
&.smui-badge--position-middle {
@@ -53,6 +54,7 @@ $padding: 4px;
5354
}
5455

5556
&.smui-badge--align-bottom-start,
57+
&.smui-badge--align-bottom-middle,
5658
&.smui-badge--align-bottom-end {
5759
&.smui-badge--position-inset,
5860
&.smui-badge--position-middle {
@@ -65,6 +67,7 @@ $padding: 4px;
6567
}
6668

6769
&.smui-badge--align-top-end,
70+
&.smui-badge--align-middle-end,
6871
&.smui-badge--align-bottom-end {
6972
&.smui-badge--position-inset {
7073
@include rtl.reflexive-position(right, 0);
@@ -80,6 +83,7 @@ $padding: 4px;
8083
}
8184

8285
&.smui-badge--align-top-start,
86+
&.smui-badge--align-middle-start,
8387
&.smui-badge--align-bottom-start {
8488
&.smui-badge--position-inset {
8589
@include rtl.reflexive-position(left, 0);
@@ -103,6 +107,15 @@ $padding: 4px;
103107
}
104108
}
105109

110+
&.smui-badge--align-top-middle.smui-badge--position-middle {
111+
transform-origin: center;
112+
transform: translateY(-50%);
113+
114+
@include rtl.rtl {
115+
transform: translateY(-50%);
116+
}
117+
}
118+
106119
&.smui-badge--align-top-end.smui-badge--position-middle {
107120
transform-origin: center;
108121
transform: translateX(50%) translateY(-50%);
@@ -112,6 +125,24 @@ $padding: 4px;
112125
}
113126
}
114127

128+
&.smui-badge--align-middle-start.smui-badge--position-middle {
129+
transform-origin: center;
130+
transform: translateX(-50%);
131+
132+
@include rtl.rtl {
133+
transform: translateX(50%);
134+
}
135+
}
136+
137+
&.smui-badge--align-middle-end.smui-badge--position-middle {
138+
transform-origin: center;
139+
transform: translateX(50%);
140+
141+
@include rtl.rtl {
142+
transform: translateX(-50%);
143+
}
144+
}
145+
115146
&.smui-badge--align-bottom-start.smui-badge--position-middle {
116147
transform-origin: center;
117148
transform: translateX(-50%) translateY(50%);
@@ -121,6 +152,15 @@ $padding: 4px;
121152
}
122153
}
123154

155+
&.smui-badge--align-bottom-middle.smui-badge--position-middle {
156+
transform-origin: center;
157+
transform: translateY(50%);
158+
159+
@include rtl.rtl {
160+
transform: translateY(50%);
161+
}
162+
}
163+
124164
&.smui-badge--align-bottom-end.smui-badge--position-middle {
125165
transform-origin: center;
126166
transform: translateX(50%) translateY(50%);

packages/badge/src/Badge.svelte

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,16 @@
3434
export let square = false;
3535
export let color: 'primary' | 'secondary' | string = 'primary';
3636
export let position: 'inset' | 'middle' | 'outset' = 'middle';
37-
export let align: 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' =
38-
'top-end';
37+
export let align:
38+
| 'top-start'
39+
| 'top-middle'
40+
| 'top-end'
41+
| 'middle-start'
42+
| 'middle-middle'
43+
| 'middle-end'
44+
| 'bottom-start'
45+
| 'bottom-middle'
46+
| 'bottom-end' = 'top-end';
3947
4048
let element: HTMLSpanElement;
4149
Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<div style="margin-top: 2em; text-align: center;">
2-
<IconButton style="position: relative;">
3-
<Icon class="material-icons">message</Icon>
2+
<Button style="position: relative;">
3+
<Label>Button</Label>
44
<Badge {position} {align} aria-label="unread count">8</Badge>
5-
</IconButton>
5+
</Button>
66
</div>
77

88
<div style="margin-top: 2em;">
@@ -18,10 +18,22 @@
1818
</div>
1919

2020
<div style="margin-top: 2em;">
21-
Alignment:
22-
{#each alignments as alignment}
21+
Y Alignment:
22+
{#each alignmentsY as alignment}
2323
<FormField>
24-
<Radio bind:group={align} value={alignment} />
24+
<Radio bind:group={alignY} value={alignment} />
25+
<span slot="label">
26+
{alignment}
27+
</span>
28+
</FormField>
29+
{/each}
30+
</div>
31+
32+
<div style="margin-top: 2em;">
33+
X Alignment:
34+
{#each alignmentsX as alignment}
35+
<FormField>
36+
<Radio bind:group={alignX} value={alignment} />
2537
<span slot="label">
2638
{alignment}
2739
</span>
@@ -31,14 +43,16 @@
3143

3244
<script lang="ts">
3345
import Badge from '@smui-extra/badge';
34-
import IconButton, { Icon } from '@smui/icon-button';
46+
import Button, { Label } from '@smui/button';
3547
import Radio from '@smui/radio';
3648
import FormField from '@smui/form-field';
3749
3850
let position: 'inset' | 'middle' | 'outset' = 'middle';
39-
let align: 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' =
40-
'top-end';
51+
let alignY: 'top' | 'middle' | 'bottom' = 'top';
52+
let alignX: 'start' | 'middle' | 'end' = 'end';
53+
$: align = `${alignY}-${alignX}`;
4154
4255
const positions = ['inset', 'middle', 'outset'];
43-
const alignments = ['top-start', 'top-end', 'bottom-start', 'bottom-end'];
56+
const alignmentsY = ['top', 'middle', 'bottom'];
57+
const alignmentsX = ['start', 'middle', 'end'];
4458
</script>

packages/site/src/routes/demo/badge/_Simple.svelte

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,20 @@
2121
</IconButton>
2222
</div>
2323

24+
<div style="margin-top: 1.5em;">
25+
FAB with a badge.
26+
27+
<Fab style="position: relative;">
28+
<Icon class="material-icons">message</Icon>
29+
<Badge aria-label="unread content count">2</Badge>
30+
</Fab>
31+
</div>
32+
2433
<div style="margin-top: 1.5em;">
2534
<!-- Adding some padding makes sure long badges don't cover the content. -->
26-
<span style="position: relative; display: inline-block; padding: .5em;">
35+
<span
36+
style="position: relative; display: inline-block; padding: .5em .5em 0 0;"
37+
>
2738
Long content in a badge.
2839
<Badge aria-label="notification count">1,000,000</Badge>
2940
</span>
@@ -42,5 +53,7 @@
4253
<script lang="ts">
4354
import Badge from '@smui-extra/badge';
4455
import Button, { Label } from '@smui/button';
45-
import IconButton, { Icon } from '@smui/icon-button';
56+
import IconButton from '@smui/icon-button';
57+
import Fab from '@smui/fab';
58+
import { Icon } from '@smui/common';
4659
</script>

0 commit comments

Comments
 (0)