4pragma ComponentBehavior: Bound
7import QtQuick.Templates as T
9import Fluid.Private as Private
10import "../core/BadgeContent.js" as BadgeContent
11import "../core/UiMetrics.js" as UiMetrics
92 enum Variant { Auto, Small, Large }
95 property int variant: MD.Badge.Auto
98 property real count: -1
101 property string text:
""
104 property MD.typescale typescale: MD.Tokens.typescale.labelSmall
107 property color containerColor: control.MD.Style.errorColor
110 property color contentColor: control.MD.Style.onErrorColor
113 property string accessibleDescription: _defaultAccessibleDescription
116 readonly
property string _defaultAccessibleDescription: text.length > 0 ? text
117 : BadgeContent.isValidCount(count) ? count.toLocaleString(locale,
"f", 0)
118 : qsTr(
"New notification")
121 readonly property
int effectiveVariant: variant === MD.
Badge.Auto
122 ? (text.length > 0 || BadgeContent.isValidCount(count) ? MD.
Badge.Large : MD.
Badge.Small)
126 readonly property
string displayText: {
127 if (effectiveVariant === MD.Badge.Small)
130 return Private.BadgeText.elide(text, MD.Tokens.badge.maximumCharacters);
131 if (!BadgeContent.isValidCount(count))
134 return Math.min(count, maximum).toLocaleString(locale,
"f", 0)
135 + (count > maximum ?
"+" :
"");
138 readonly
property MD.shapeValue _containerShape: effectiveVariant === MD.Badge.Small
139 ? MD.Tokens.badge.shape : MD.Tokens.badge.largeShape
141 font.family: typescale.face === MD.Style.TypeFace.Brand
142 ? control.MD.Style.brandFontFamily : control.MD.Style.plainFontFamily
143 font.pixelSize: typescale.fontSize
144 font.weight: typescale.fontWeight
145 font.letterSpacing: typescale.tracking
147 implicitWidth: Math.max(implicitHeight,
148 implicitBackgroundWidth + leftInset + rightInset,
149 (effectiveVariant === MD.Badge.Small ? 0 : implicitContentWidth)
150 + leftPadding + rightPadding)
151 implicitHeight: Math.max(effectiveVariant === MD.
Badge.Small
153 implicitBackgroundHeight + topInset + bottomInset,
154 (effectiveVariant === MD.
Badge.Small ? 0 : implicitContentHeight)
155 + topPadding + bottomPadding)
156 leftPadding: effectiveVariant === MD.
Badge.Small ? 0 : MD.
Tokens.badge.horizontalPadding
157 rightPadding: leftPadding
165 focusPolicy: Qt.NoFocus
166 Accessible.ignored: true
174 objectName:
"badgeLabel"
175 text: control.displayText
177 color: control.contentColor
178 textFormat: Text.PlainText
179 horizontalAlignment: Text.AlignHCenter
180 verticalAlignment: Text.AlignVCenter
181 wrapMode: Text.NoWrap
182 lineHeight: Math.max(control.typescale.lineHeight, fontMetrics.height)
183 lineHeightMode: Text.FixedHeight
184 Accessible.ignored: true
187 background: Rectangle {
188 objectName:
"badgeBackground"
189 color: control.containerColor
190 topLeftRadius: UiMetrics.resolveShapeRadius(control._containerShape.topLeft, width, height)
191 topRightRadius: UiMetrics.resolveShapeRadius(control._containerShape.topRight, width, height)
192 bottomLeftRadius: UiMetrics.resolveShapeRadius(control._containerShape.bottomLeft, width, height)
193 bottomRightRadius: UiMetrics.resolveShapeRadius(control._containerShape.bottomRight, width, height)
194 Accessible.ignored: true
Material Design 3 design tokens.
Immutable Material Design 3 badge metrics.