Skip to content

Commit b71f24f

Browse files
committed
feat(#3070): v2 badge with emphasis and size
1 parent f4cc4b4 commit b71f24f

File tree

2 files changed

+182
-6
lines changed

2 files changed

+182
-6
lines changed

libs/web-components/src/common/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
export type DrawerPosition = "bottom" | "left" | "right" | undefined;
33
export type DrawerSizeUnit = "px" | "rem" | "ch" | "vh" | "vw";
44
export type DrawerSize = `${number}${DrawerSizeUnit}` | undefined;
5+
export type Version = "1" | "2";

libs/web-components/src/components/badge/Badge.svelte

Lines changed: 181 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
import { calculateMargin } from "../../common/styling";
88
import { typeValidator, toBoolean } from "../../common/utils";
99
import type { GoAIconType } from "../icon/Icon.svelte";
10+
import type { Version } from "../../common/types";
1011
11-
// Validator
12+
// Validators
1213
const [Types, validateType] = typeValidator(
1314
"Badge type",
1415
[
@@ -39,12 +40,35 @@
3940
"red-light",
4041
"violet-light",
4142
"yellow-light",
43+
"sky",
44+
"prairie",
45+
"lilac",
46+
"pasture",
47+
"sunset",
48+
"dawn",
49+
"default",
4250
],
4351
true,
4452
);
4553
54+
const [badgeSizes, validateBadgeSize] = typeValidator("Badge size", [
55+
"medium",
56+
"large",
57+
]);
58+
59+
const [versions, validateVersion] = typeValidator("Badge version", [
60+
"1",
61+
"2",
62+
]);
63+
64+
const [emphasisLevels, validateEmphasisLevel] = typeValidator(
65+
"Badge emphasis level",
66+
["subtle", "strong"],
67+
);
68+
4669
//Type
4770
type BadgeType = (typeof Types)[number];
71+
type BadgeSize = (typeof badgeSizes)[number];
4872
4973
export let type: BadgeType;
5074
@@ -54,6 +78,9 @@
5478
export let icon: string = "";
5579
export let icontype: GoAIconType | null = null;
5680
export let arialabel: string = "";
81+
export let size: BadgeSize = "medium";
82+
export let emphasis: (typeof emphasisLevels)[number] = "strong";
83+
export let version: Version = "1";
5784
5885
// margin
5986
export let mt: Spacing = null;
@@ -94,10 +121,22 @@
94121
"red-light": "information-circle",
95122
"violet-light": "information-circle",
96123
"yellow-light": "information-circle",
124+
sky: "information-circle",
125+
prairie: "information-circle",
126+
lilac: "information-circle",
127+
pasture: "information-circle",
128+
sunset: "information-circle",
129+
dawn: "information-circle",
130+
default: "information-circle",
97131
}[type];
98132
99133
onMount(() => {
100-
setTimeout(() => validateType(type), 1);
134+
setTimeout(() => {
135+
validateType(type);
136+
validateBadgeSize(size);
137+
validateEmphasisLevel(emphasis);
138+
validateVersion(version);
139+
}, 1);
101140
102141
//wait for property initialization
103142
setTimeout(() => {
@@ -118,15 +157,16 @@
118157
style={calculateMargin(mt, mr, mb, ml)}
119158
data-testid={testid}
120159
data-type="goa-badge"
121-
class="goa-badge badge-{type}"
160+
class="goa-badge badge-{type} badge-{size} badge-{emphasis}"
122161
class:icon-only={showIconOnly}
162+
class:v2={version === "2"}
123163
>
124164
{#if showIcon}
125165
<goa-icon
126166
arialabel={showIconOnly && arialabel ? arialabel : null}
127167
role={showIconOnly && arialabel ? "presentation" : null}
128168
type={icontype || _defaultIconType}
129-
size="1"
169+
size={size === "large" ? "3" : "1"}
130170
/>
131171
{:else}
132172
<div class="goa-badge-no-icon"></div>
@@ -210,8 +250,14 @@
210250
}
211251
212252
.goa-badge.badge-archived {
213-
background-color: var(--goa-color-greyscale-700);
214-
color: var(--goa-badge-dark-color-content);
253+
background-color: var(
254+
--goa-badge-archived-color-bg,
255+
var(--goa-color-greyscale-700)
256+
);
257+
color: var(
258+
--goa-badge-archived-color-content,
259+
var(--goa-badge-dark-color-content)
260+
);
215261
}
216262
217263
.goa-badge.badge-aqua {
@@ -308,4 +354,133 @@
308354
background-color: var(--goa-color-extended-light-yellow);
309355
color: var(--goa-badge-light-color-content);
310356
}
357+
358+
.v2 .goa-badge-content {
359+
padding-bottom: 0;
360+
}
361+
362+
/* Version 2: Default Colours */
363+
.v2.badge-default {
364+
background-color: var(--goa-badge-default-color-bg);
365+
color: var(--goa-badge-default-color-content);
366+
}
367+
368+
.v2.badge-default.badge-subtle {
369+
background-color: var(--goa-badge-default-subtle-color-bg);
370+
box-shadow: var(--goa-badge-default-subtle-border);
371+
color: var(--goa-badge-default-subtle-color-content);
372+
}
373+
374+
.v2.goa-badge.badge-archived.badge-subtle {
375+
background-color: var(--goa-badge-archived-subtle-color-bg);
376+
box-shadow: var(--goa-badge-archived-subtle-border);
377+
color: var(--goa-badge-archived-subtle-color-content);
378+
}
379+
380+
/* Version 2: Extended Colours */
381+
382+
.v2.badge-sky {
383+
background-color: var(--goa-color-extended-sky-default);
384+
color: var(--goa-color-extended-sky-text);
385+
}
386+
387+
.v2.badge-prairie {
388+
background-color: var(--goa-color-extended-prairie-default);
389+
color: var(--goa-color-extended-prairie-text);
390+
}
391+
392+
.v2.badge-lilac {
393+
background-color: var(--goa-color-extended-lilac-default);
394+
color: var(--goa-color-extended-lilac-text);
395+
}
396+
397+
.v2.badge-pasture {
398+
background-color: var(--goa-color-extended-pasture-default);
399+
color: var(--goa-color-extended-pasture-text);
400+
}
401+
402+
.v2.badge-sunset {
403+
background-color: var(--goa-color-extended-sunset-default);
404+
color: var(--goa-color-extended-sunset-text);
405+
}
406+
407+
.v2.badge-dawn {
408+
background-color: var(--goa-color-extended-dawn-default);
409+
color: var(--goa-color-extended-dawn-text);
410+
}
411+
412+
.v2.badge-subtle.badge-sky {
413+
background-color: var(--goa-color-extended-sky-light);
414+
box-shadow: var(--goa-color-extended-sky-subtle-border);
415+
color: var(--goa-color-extended-sky-text);
416+
}
417+
418+
.v2.badge-subtle.badge-prairie {
419+
background-color: var(--goa-color-extended-prairie-light);
420+
box-shadow: var(--goa-color-extended-prairie-subtle-border);
421+
color: var(--goa-color-extended-prairie-text);
422+
}
423+
424+
.v2.badge-subtle.badge-lilac {
425+
background-color: var(--goa-color-extended-lilac-light);
426+
box-shadow: var(--goa-color-extended-lilac-subtle-border);
427+
color: var(--goa-color-extended-lilac-text);
428+
}
429+
430+
.v2.badge-subtle.badge-pasture {
431+
background-color: var(--goa-color-extended-pasture-light);
432+
box-shadow: var(--goa-color-extended-pasture-subtle-border);
433+
color: var(--goa-color-extended-pasture-text);
434+
}
435+
436+
.v2.badge-subtle.badge-sunset {
437+
background-color: var(--goa-color-extended-sunset-light);
438+
box-shadow: var(--goa-color-extended-sunset-subtle-border);
439+
color: var(--goa-color-extended-sunset-text);
440+
}
441+
442+
.v2.badge-subtle.badge-dawn {
443+
background-color: var(--goa-color-extended-dawn-light);
444+
box-shadow: var(--goa-color-extended-dawn-subtle-border);
445+
color: var(--goa-color-extended-dawn-text);
446+
}
447+
448+
/* Version 2: Subtle emphasis for standard colours */
449+
450+
.v2.goa-badge.badge-subtle.badge-information {
451+
background-color: var(--goa-badge-info-subtle-color-bg);
452+
color: var(--goa-badge-info-subtle-color-content);
453+
box-shadow: var(--goa-badge-info-subtle-border);
454+
}
455+
456+
.v2.goa-badge.badge-subtle.badge-success {
457+
background-color: var(--goa-badge-success-subtle-color-bg);
458+
color: var(--goa-badge-success-subtle-color-content);
459+
box-shadow: var(--goa-badge-success-subtle-border);
460+
}
461+
462+
.v2.goa-badge.badge-subtle.badge-important {
463+
background-color: var(--goa-badge-important-subtle-color-bg);
464+
color: var(--goa-badge-important-subtle-color-content);
465+
box-shadow: var(--goa-badge-important-subtle-border);
466+
}
467+
468+
.v2.goa-badge.badge-subtle.badge-emergency {
469+
background-color: var(--goa-badge-emergency-subtle-color-bg);
470+
color: var(--goa-badge-emergency-subtle-color-content);
471+
box-shadow: var(--goa-badge-emergency-subtle-border);
472+
}
473+
474+
/* Version 2: Large size */
475+
476+
.v2.goa-badge.badge-large {
477+
height: var(--goa-badge-height-large);
478+
padding: var(--goa-badge-padding-large);
479+
--goa-icon-size: var(--goa-badge-icon-size-large);
480+
}
481+
482+
.v2.goa-badge.badge-large .goa-badge-content {
483+
font-size: var(--goa-badge-font-size-large);
484+
line-height: var(--goa-badge-line-height-large);
485+
}
311486
</style>

0 commit comments

Comments
 (0)