This is a crude example, uses expression and change script.
{
"custom": {},
"params": {},
"props": {},
"root": {
"children": [
{
"events": {
"component": {
"onActionPerformed": {
"config": {
"script": "\tself.getSibling(\"Label\").custom.textTime \u003d system.date.now()"
},
"scope": "G",
"type": "script"
}
}
},
"meta": {
"name": "Button"
},
"position": {
"height": 34,
"width": 80,
"x": 133,
"y": 140
},
"type": "ia.input.button"
},
{
"custom": {
"textTime": {
"$": [
"ts",
192,
1662040678099
],
"$ts": 1662040678098
}
},
"meta": {
"name": "Label"
},
"position": {
"height": 32,
"width": 234,
"x": 262,
"y": 142
},
"propConfig": {
"custom.testReset": {
"binding": {
"config": {
"expression": "(secondsBetween({this.custom.textTime}, now()) \u003e\u003d 5)"
},
"type": "expr"
},
"onChange": {
"enabled": null,
"script": "\tif currentValue.value:\n\t\tself.props.text \u003d \u0027Text reset\u0027\n\telse:\n\t\tself.props.text \u003d \u0027Button was pushed\u0027"
}
}
},
"props": {
"text": "Text reset"
},
"type": "ia.display.label"
}
],
"meta": {
"name": "root"
},
"type": "ia.container.coord"
}
}