pragma ComponentBehavior: Bound import ".." import qs.services import qs.config import QtQuick import QtQuick.Controls TextField { id: root color: Colours.palette.m3onSurface placeholderTextColor: Colours.palette.m3outline font.family: Appearance.font.family.sans font.pointSize: Appearance.font.size.smaller renderType: echoMode === TextField.Password ? TextField.QtRendering : TextField.NativeRendering cursorVisible: !readOnly background: null cursorDelegate: StyledRect { id: cursor property bool disableBlink implicitWidth: 2 color: Colours.palette.m3primary radius: Appearance.rounding.normal Connections { target: root function onCursorPositionChanged(): void { if (root.activeFocus && root.cursorVisible) { cursor.opacity = 1; cursor.disableBlink = true; enableBlink.restart(); } } } Timer { id: enableBlink interval: 100 onTriggered: cursor.disableBlink = false } Timer { running: root.activeFocus && root.cursorVisible && !cursor.disableBlink repeat: true triggeredOnStart: true interval: 500 onTriggered: parent.opacity = parent.opacity === 1 ? 0 : 1 } Binding { when: !root.activeFocus || !root.cursorVisible cursor.opacity: 0 } Behavior on opacity { Anim { duration: Appearance.anim.durations.small } } } Behavior on color { CAnim {} } Behavior on placeholderTextColor { CAnim {} } }