96 lines
1.9 KiB
QML
96 lines
1.9 KiB
QML
import QtQuick
|
|
import ZShell.Config
|
|
import qs.Services
|
|
|
|
TextFieldBase {
|
|
id: root
|
|
|
|
readonly property alias bg: bg
|
|
readonly property alias clearIcon: clearIcon
|
|
readonly property alias searchIcon: searchIcon
|
|
|
|
bottomPadding: Tokens.padding.large
|
|
leftPadding: searchIcon.width + searchIcon.anchors.leftMargin + Tokens.spacing.small
|
|
rightPadding: clearIcon.width + clearIcon.anchors.rightMargin + Tokens.spacing.small
|
|
topPadding: Tokens.padding.large
|
|
|
|
background: CustomRect {
|
|
id: bg
|
|
|
|
anchors.fill: parent
|
|
color: Colors.tPalette.m3surfaceContainer
|
|
radius: Tokens.rounding.full
|
|
|
|
StateLayer {
|
|
id: stateLayer
|
|
|
|
cursorShape: Qt.IBeamCursor
|
|
enabled: !root.activeFocus
|
|
manualPressOverride: tapHandler.pressed
|
|
|
|
onClicked: root.focus = true
|
|
}
|
|
}
|
|
|
|
onPressed: {
|
|
if (stateLayer.enabled)
|
|
stateLayer.press(stateLayer.mouseX, stateLayer.mouseY);
|
|
}
|
|
|
|
CustomText {
|
|
id: placeholder
|
|
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: root.leftPadding
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
color: root.placeholderTextColor
|
|
font: root.font
|
|
opacity: root.text ? 0 : 1
|
|
text: root.placeholderText
|
|
|
|
Behavior on opacity {
|
|
Anim {
|
|
type: Anim.DefaultEffects
|
|
}
|
|
}
|
|
}
|
|
|
|
MaterialIcon {
|
|
id: searchIcon
|
|
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: Tokens.padding.large
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
color: Colors.palette.m3onSurfaceVariant
|
|
font.pointSize: Tokens.font.size.large
|
|
text: "search"
|
|
}
|
|
|
|
IconButton {
|
|
id: clearIcon
|
|
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: Tokens.padding.larger
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
enabled: root.text
|
|
icon: "clear"
|
|
opacity: root.text ? 1 : 0
|
|
radius: Tokens.rounding.full
|
|
radiusMorph: false
|
|
stateLayer.hoverEnabled: enabled
|
|
type: IconButton.Text
|
|
|
|
Behavior on opacity {
|
|
Anim {
|
|
type: Anim.DefaultEffects
|
|
}
|
|
}
|
|
|
|
onClicked: root.clear()
|
|
}
|
|
|
|
TapHandler {
|
|
id: tapHandler
|
|
}
|
|
}
|