-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathbadge.api.ts
More file actions
77 lines (71 loc) · 2.3 KB
/
Copy pathbadge.api.ts
File metadata and controls
77 lines (71 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
// SPDX-License-Identifier: BSD-3-Clause-Clear
import {booleanDataAttr} from "@qualcomm-ui/utils/attributes"
import type {PropNormalizer} from "@qualcomm-ui/utils/machine"
import {badgeClasses} from "./badge.classes"
import type {
QdsBadgeApi,
QdsBadgeApiProps,
QdsBadgeCountProps,
QdsBadgeIconBindings,
QdsBadgeIconProps,
QdsBadgeRootBindings,
QdsBadgeStatusProps,
QdsBadgeTextProps,
} from "./badge.types"
export function createQdsBadgeApi(
props: QdsBadgeApiProps,
normalize: PropNormalizer,
): QdsBadgeApi {
const type = props.type || "text"
const size = props.size || "md"
let emphasis: string | undefined
let variant: string | undefined
let overflow = false
let displayCount: number | string | null = null
if (type === "count") {
const countProps = props as QdsBadgeCountProps
variant = countProps.variant || "neutral"
if (countProps.count != null) {
const max = countProps.max ?? 99
overflow = countProps.count > max
displayCount = overflow ? `${max}+` : countProps.count
}
} else if (type === "status") {
emphasis = (props as QdsBadgeStatusProps).emphasis || "neutral"
variant = (props as QdsBadgeStatusProps).variant || "filled"
} else if (type === "icon") {
emphasis = (props as QdsBadgeIconProps).emphasis || "neutral"
variant = (props as QdsBadgeIconProps).variant || "default"
} else {
emphasis = (props as QdsBadgeTextProps).emphasis || "neutral"
variant = (props as QdsBadgeTextProps).variant || "default"
}
return {
getDisplayCount(): number | string | null {
return displayCount
},
getIconBindings(): QdsBadgeIconBindings {
return normalize.element({
className: badgeClasses.icon,
"data-part": "icon",
"data-scope": "badge",
"data-size": size,
})
},
getRootBindings(): QdsBadgeRootBindings {
return normalize.element({
className: badgeClasses.root,
"data-disabled": booleanDataAttr(props.disabled),
"data-emphasis": emphasis,
"data-overflow": booleanDataAttr(overflow),
"data-part": "root",
"data-scope": "badge",
"data-size": size,
"data-type": type,
"data-variant": variant,
})
},
type,
}
}