|
7 | 7 | import { calculateMargin } from "../../common/styling"; |
8 | 8 | import { typeValidator, toBoolean } from "../../common/utils"; |
9 | 9 | import type { GoAIconType } from "../icon/Icon.svelte"; |
| 10 | + import type { Version } from "../../common/types"; |
10 | 11 |
|
11 | | - // Validator |
| 12 | + // Validators |
12 | 13 | const [Types, validateType] = typeValidator( |
13 | 14 | "Badge type", |
14 | 15 | [ |
|
39 | 40 | "red-light", |
40 | 41 | "violet-light", |
41 | 42 | "yellow-light", |
| 43 | + "sky", |
| 44 | + "prairie", |
| 45 | + "lilac", |
| 46 | + "pasture", |
| 47 | + "sunset", |
| 48 | + "dawn", |
| 49 | + "default", |
42 | 50 | ], |
43 | 51 | true, |
44 | 52 | ); |
45 | 53 |
|
| 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 | +
|
46 | 69 | //Type |
47 | 70 | type BadgeType = (typeof Types)[number]; |
| 71 | + type BadgeSize = (typeof badgeSizes)[number]; |
48 | 72 |
|
49 | 73 | export let type: BadgeType; |
50 | 74 |
|
|
54 | 78 | export let icon: string = ""; |
55 | 79 | export let icontype: GoAIconType | null = null; |
56 | 80 | export let arialabel: string = ""; |
| 81 | + export let size: BadgeSize = "medium"; |
| 82 | + export let emphasis: (typeof emphasisLevels)[number] = "strong"; |
| 83 | + export let version: Version = "1"; |
57 | 84 |
|
58 | 85 | // margin |
59 | 86 | export let mt: Spacing = null; |
|
94 | 121 | "red-light": "information-circle", |
95 | 122 | "violet-light": "information-circle", |
96 | 123 | "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", |
97 | 131 | }[type]; |
98 | 132 |
|
99 | 133 | onMount(() => { |
100 | | - setTimeout(() => validateType(type), 1); |
| 134 | + setTimeout(() => { |
| 135 | + validateType(type); |
| 136 | + validateBadgeSize(size); |
| 137 | + validateEmphasisLevel(emphasis); |
| 138 | + validateVersion(version); |
| 139 | + }, 1); |
101 | 140 |
|
102 | 141 | //wait for property initialization |
103 | 142 | setTimeout(() => { |
|
118 | 157 | style={calculateMargin(mt, mr, mb, ml)} |
119 | 158 | data-testid={testid} |
120 | 159 | data-type="goa-badge" |
121 | | - class="goa-badge badge-{type}" |
| 160 | + class="goa-badge badge-{type} badge-{size} badge-{emphasis}" |
122 | 161 | class:icon-only={showIconOnly} |
| 162 | + class:v2={version === "2"} |
123 | 163 | > |
124 | 164 | {#if showIcon} |
125 | 165 | <goa-icon |
126 | 166 | arialabel={showIconOnly && arialabel ? arialabel : null} |
127 | 167 | role={showIconOnly && arialabel ? "presentation" : null} |
128 | 168 | type={icontype || _defaultIconType} |
129 | | - size="1" |
| 169 | + size={size === "large" ? "3" : "1"} |
130 | 170 | /> |
131 | 171 | {:else} |
132 | 172 | <div class="goa-badge-no-icon"></div> |
|
210 | 250 | } |
211 | 251 |
|
212 | 252 | .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 | + ); |
215 | 261 | } |
216 | 262 |
|
217 | 263 | .goa-badge.badge-aqua { |
|
308 | 354 | background-color: var(--goa-color-extended-light-yellow); |
309 | 355 | color: var(--goa-badge-light-color-content); |
310 | 356 | } |
| 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 | + } |
311 | 486 | </style> |
0 commit comments