mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-28 04:03:05 +00:00
6536 lines
163 KiB
JSON
6536 lines
163 KiB
JSON
{
|
||
"success": true,
|
||
"data": {
|
||
"nodes": [
|
||
{
|
||
"hittable": true,
|
||
"label": "Paseo Debug",
|
||
"rect": {
|
||
"y": 0,
|
||
"width": 402,
|
||
"height": 874,
|
||
"x": 0
|
||
},
|
||
"depth": 0,
|
||
"index": 0,
|
||
"enabled": true,
|
||
"type": "Application",
|
||
"ref": "e1"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"parentIndex": 0,
|
||
"type": "Window",
|
||
"index": 1,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"depth": 1,
|
||
"ref": "e2"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 2,
|
||
"parentIndex": 1,
|
||
"depth": 2,
|
||
"hittable": false,
|
||
"ref": "e3"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"parentIndex": 2,
|
||
"depth": 3,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"index": 3,
|
||
"type": "Other",
|
||
"ref": "e4"
|
||
},
|
||
{
|
||
"parentIndex": 3,
|
||
"index": 4,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"depth": 4,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e5"
|
||
},
|
||
{
|
||
"depth": 1,
|
||
"type": "Window",
|
||
"index": 5,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"parentIndex": 0,
|
||
"hittable": false,
|
||
"ref": "e6"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"depth": 2,
|
||
"index": 6,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"type": "Other",
|
||
"parentIndex": 5,
|
||
"hittable": false,
|
||
"ref": "e7"
|
||
},
|
||
{
|
||
"depth": 3,
|
||
"parentIndex": 6,
|
||
"enabled": true,
|
||
"index": 7,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"ref": "e8"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"parentIndex": 7,
|
||
"depth": 4,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"index": 8,
|
||
"ref": "e9"
|
||
},
|
||
{
|
||
"index": 9,
|
||
"parentIndex": 8,
|
||
"depth": 5,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e10"
|
||
},
|
||
{
|
||
"depth": 6,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 10,
|
||
"type": "Other",
|
||
"parentIndex": 9,
|
||
"ref": "e11"
|
||
},
|
||
{
|
||
"depth": 7,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 10,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"index": 11,
|
||
"hittable": false,
|
||
"ref": "e12"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"depth": 8,
|
||
"index": 12,
|
||
"parentIndex": 11,
|
||
"ref": "e13"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 12,
|
||
"depth": 9,
|
||
"index": 13,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"ref": "e14"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"index": 14,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 12,
|
||
"enabled": true,
|
||
"depth": 9,
|
||
"ref": "e15"
|
||
},
|
||
{
|
||
"parentIndex": 14,
|
||
"enabled": true,
|
||
"index": 15,
|
||
"type": "Other",
|
||
"depth": 10,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"ref": "e16"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"parentIndex": 14,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"depth": 10,
|
||
"index": 16,
|
||
"ref": "e17"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 17,
|
||
"type": "Other",
|
||
"parentIndex": 16,
|
||
"depth": 11,
|
||
"enabled": true,
|
||
"ref": "e18"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 16,
|
||
"enabled": true,
|
||
"depth": 11,
|
||
"index": 18,
|
||
"type": "Other",
|
||
"ref": "e19"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 19,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 12,
|
||
"type": "Other",
|
||
"parentIndex": 18,
|
||
"hittable": false,
|
||
"ref": "e20"
|
||
},
|
||
{
|
||
"parentIndex": 19,
|
||
"index": 20,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"depth": 13,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"ref": "e21"
|
||
},
|
||
{
|
||
"parentIndex": 20,
|
||
"index": 21,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"depth": 14,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"ref": "e22"
|
||
},
|
||
{
|
||
"parentIndex": 21,
|
||
"enabled": true,
|
||
"depth": 15,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 22,
|
||
"ref": "e23"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"index": 23,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 22,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"depth": 16,
|
||
"ref": "e24"
|
||
},
|
||
{
|
||
"depth": 17,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"index": 24,
|
||
"parentIndex": 23,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e25"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 25,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"depth": 18,
|
||
"parentIndex": 24,
|
||
"enabled": true,
|
||
"ref": "e26"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"parentIndex": 25,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 26,
|
||
"hittable": false,
|
||
"depth": 19,
|
||
"ref": "e27"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"type": "Other",
|
||
"parentIndex": 26,
|
||
"depth": 20,
|
||
"enabled": true,
|
||
"index": 27,
|
||
"hittable": false,
|
||
"ref": "e28"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"label": "Switch tabs (1 open)",
|
||
"parentIndex": 27,
|
||
"index": 28,
|
||
"hittable": false,
|
||
"depth": 21,
|
||
"ref": "e29"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"type": "Other",
|
||
"index": 29,
|
||
"label": "Open menu",
|
||
"depth": 22,
|
||
"parentIndex": 28,
|
||
"hittable": false,
|
||
"ref": "e30"
|
||
},
|
||
{
|
||
"depth": 23,
|
||
"index": 30,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"label": "Open menu",
|
||
"parentIndex": 29,
|
||
"type": "Other",
|
||
"ref": "e31"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"label": "Open menu",
|
||
"identifier": "workspace-deck-entry-srv_tk5MNmAhneJU:wks_3c1e2389120b500a",
|
||
"type": "Other",
|
||
"index": 31,
|
||
"hittable": false,
|
||
"depth": 24,
|
||
"parentIndex": 30,
|
||
"ref": "e32"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"parentIndex": 31,
|
||
"hittable": false,
|
||
"label": "Open menu",
|
||
"index": 32,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 126,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"type": "Other",
|
||
"identifier": "composer-dock-header",
|
||
"depth": 25,
|
||
"ref": "e33"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 70,
|
||
"height": 56,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 32,
|
||
"index": 33,
|
||
"depth": 26,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e34"
|
||
},
|
||
{
|
||
"type": "Button",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"depth": 26,
|
||
"parentIndex": 32,
|
||
"rect": {
|
||
"y": 81.6666669845581,
|
||
"height": 32,
|
||
"width": 32,
|
||
"x": 8
|
||
},
|
||
"label": "Open menu",
|
||
"identifier": "menu-button",
|
||
"index": 34,
|
||
"ref": "e35"
|
||
},
|
||
{
|
||
"index": 35,
|
||
"label": "main",
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"depth": 26,
|
||
"parentIndex": 32,
|
||
"rect": {
|
||
"y": 80.6666669845581,
|
||
"height": 34,
|
||
"width": 314,
|
||
"x": 48
|
||
},
|
||
"ref": "e36"
|
||
},
|
||
{
|
||
"depth": 27,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 80.6666669845581,
|
||
"height": 34,
|
||
"width": 278,
|
||
"x": 48
|
||
},
|
||
"hittable": false,
|
||
"index": 36,
|
||
"parentIndex": 35,
|
||
"label": "main",
|
||
"ref": "e37"
|
||
},
|
||
{
|
||
"index": 37,
|
||
"depth": 28,
|
||
"rect": {
|
||
"y": 80.6666669845581,
|
||
"height": 18,
|
||
"width": 278,
|
||
"x": 48
|
||
},
|
||
"parentIndex": 36,
|
||
"identifier": "workspace-header-title",
|
||
"enabled": true,
|
||
"type": "StaticText",
|
||
"label": "main",
|
||
"hittable": false,
|
||
"ref": "e38"
|
||
},
|
||
{
|
||
"parentIndex": 37,
|
||
"hittable": false,
|
||
"label": "main",
|
||
"index": 38,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 80.6666669845581,
|
||
"height": 18,
|
||
"width": 278,
|
||
"x": 48
|
||
},
|
||
"depth": 29,
|
||
"type": "StaticText",
|
||
"ref": "e39"
|
||
},
|
||
{
|
||
"depth": 28,
|
||
"rect": {
|
||
"y": 98.6666669845581,
|
||
"height": 15.666671752929688,
|
||
"width": 163.3333282470703,
|
||
"x": 48
|
||
},
|
||
"parentIndex": 36,
|
||
"index": 39,
|
||
"enabled": true,
|
||
"identifier": "workspace-header-subtitle",
|
||
"type": "StaticText",
|
||
"hittable": false,
|
||
"label": "composer-dock-ios-fixture",
|
||
"ref": "e40"
|
||
},
|
||
{
|
||
"depth": 29,
|
||
"index": 40,
|
||
"label": "composer-dock-ios-fixture",
|
||
"hittable": false,
|
||
"parentIndex": 39,
|
||
"type": "StaticText",
|
||
"rect": {
|
||
"y": 98.6666669845581,
|
||
"height": 15.666671752929688,
|
||
"width": 163.3333282470703,
|
||
"x": 48
|
||
},
|
||
"enabled": true,
|
||
"ref": "e41"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 41,
|
||
"label": "·",
|
||
"depth": 28,
|
||
"parentIndex": 36,
|
||
"rect": {
|
||
"y": 98.6666669845581,
|
||
"height": 15.666671752929688,
|
||
"width": 4,
|
||
"x": 217.3333282470703
|
||
},
|
||
"type": "StaticText",
|
||
"ref": "e42"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 98.6666669845581,
|
||
"height": 15.666671752929688,
|
||
"width": 4,
|
||
"x": 217.3333282470703
|
||
},
|
||
"index": 42,
|
||
"depth": 29,
|
||
"parentIndex": 41,
|
||
"label": "·",
|
||
"hittable": false,
|
||
"type": "StaticText",
|
||
"ref": "e43"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"identifier": "host-badge-srv_tk5MNmAhneJU",
|
||
"index": 43,
|
||
"rect": {
|
||
"y": 98.6666669845581,
|
||
"height": 16,
|
||
"width": 68.00001525878906,
|
||
"x": 227.3333282470703
|
||
},
|
||
"depth": 28,
|
||
"label": "dev-new",
|
||
"parentIndex": 36,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"ref": "e44"
|
||
},
|
||
{
|
||
"depth": 28,
|
||
"rect": {
|
||
"y": 100.6666669845581,
|
||
"height": 12,
|
||
"width": 12,
|
||
"x": 227.3333282470703
|
||
},
|
||
"index": 44,
|
||
"type": "Other",
|
||
"parentIndex": 36,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"ref": "e45"
|
||
},
|
||
{
|
||
"parentIndex": 44,
|
||
"index": 45,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 101.1666669845581,
|
||
"height": 11,
|
||
"width": 11,
|
||
"x": 227.8333282470703
|
||
},
|
||
"depth": 29,
|
||
"enabled": true,
|
||
"ref": "e46"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"depth": 30,
|
||
"index": 46,
|
||
"rect": {
|
||
"y": 101.1666669845581,
|
||
"height": 5,
|
||
"width": 11,
|
||
"x": 227.8333282470703
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 45,
|
||
"enabled": true,
|
||
"ref": "e47"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"parentIndex": 45,
|
||
"depth": 30,
|
||
"rect": {
|
||
"y": 107.1666669845581,
|
||
"height": 5,
|
||
"width": 11,
|
||
"x": 227.8333282470703
|
||
},
|
||
"index": 47,
|
||
"type": "Other",
|
||
"ref": "e48"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 103.1666669845581,
|
||
"height": 1,
|
||
"width": 1.0049999999999955,
|
||
"x": 229.8333282470703
|
||
},
|
||
"parentIndex": 45,
|
||
"depth": 30,
|
||
"index": 48,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e49"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 109.1666669845581,
|
||
"height": 1,
|
||
"width": 1.0049999999999955,
|
||
"x": 229.8333282470703
|
||
},
|
||
"parentIndex": 45,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"index": 49,
|
||
"depth": 30,
|
||
"type": "Other",
|
||
"ref": "e50"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 98.6666669845581,
|
||
"height": 16,
|
||
"width": 53.00001525878906,
|
||
"x": 242.3333282470703
|
||
},
|
||
"type": "StaticText",
|
||
"label": "dev-new",
|
||
"index": 50,
|
||
"depth": 28,
|
||
"parentIndex": 36,
|
||
"ref": "e51"
|
||
},
|
||
{
|
||
"parentIndex": 50,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 98.6666669845581,
|
||
"height": 16,
|
||
"width": 53.00001525878906,
|
||
"x": 242.3333282470703
|
||
},
|
||
"depth": 29,
|
||
"label": "dev-new",
|
||
"type": "StaticText",
|
||
"index": 51,
|
||
"enabled": true,
|
||
"ref": "e52"
|
||
},
|
||
{
|
||
"label": "Workspace actions",
|
||
"enabled": true,
|
||
"index": 52,
|
||
"identifier": "workspace-header-menu-trigger",
|
||
"type": "Button",
|
||
"hittable": false,
|
||
"depth": 27,
|
||
"rect": {
|
||
"y": 81.6666669845581,
|
||
"height": 32,
|
||
"width": 32,
|
||
"x": 330
|
||
},
|
||
"parentIndex": 35,
|
||
"ref": "e53"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 81.6666669845581,
|
||
"height": 32,
|
||
"width": 32,
|
||
"x": 362
|
||
},
|
||
"label": "Open Explorer sidebar",
|
||
"index": 53,
|
||
"enabled": true,
|
||
"type": "Button",
|
||
"depth": 26,
|
||
"parentIndex": 32,
|
||
"identifier": "workspace-explorer-toggle",
|
||
"hittable": false,
|
||
"ref": "e54"
|
||
},
|
||
{
|
||
"depth": 25,
|
||
"parentIndex": 31,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"index": 54,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e55"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"parentIndex": 31,
|
||
"index": 55,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"depth": 25,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e56"
|
||
},
|
||
{
|
||
"identifier": "workspace-tab-switcher-trigger",
|
||
"parentIndex": 31,
|
||
"depth": 25,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"index": 56,
|
||
"label": "Switch tabs (1 open)",
|
||
"rect": {
|
||
"y": 126,
|
||
"height": 34,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"type": "Button",
|
||
"ref": "e57"
|
||
},
|
||
{
|
||
"index": 57,
|
||
"identifier": "workspace-active-tab-icon",
|
||
"enabled": true,
|
||
"depth": 26,
|
||
"parentIndex": 56,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 136,
|
||
"height": 14,
|
||
"width": 14,
|
||
"x": 20
|
||
},
|
||
"ref": "e58"
|
||
},
|
||
{
|
||
"identifier": "workspace-tabs-row",
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 126,
|
||
"height": 35,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"index": 58,
|
||
"depth": 25,
|
||
"parentIndex": 31,
|
||
"ref": "e59"
|
||
},
|
||
{
|
||
"parentIndex": 31,
|
||
"depth": 25,
|
||
"index": 59,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 713,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e60"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 713,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"depth": 25,
|
||
"index": 60,
|
||
"hittable": false,
|
||
"parentIndex": 31,
|
||
"ref": "e61"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 61,
|
||
"label": "Add attachment",
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 713,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"type": "Other",
|
||
"parentIndex": 60,
|
||
"depth": 26,
|
||
"hittable": false,
|
||
"ref": "e62"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"depth": 27,
|
||
"index": 62,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 713,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 61,
|
||
"ref": "e63"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"index": 63,
|
||
"depth": 27,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 713,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 61,
|
||
"ref": "e64"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 713,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 61,
|
||
"depth": 27,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"identifier": "composer-viewport",
|
||
"type": "Other",
|
||
"label": "Message agent... Message, @files, /commands",
|
||
"index": 64,
|
||
"ref": "e65"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"parentIndex": 64,
|
||
"label": "Message agent... Message, @files, /commands",
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 713,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"depth": 28,
|
||
"index": 65,
|
||
"ref": "e66"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"depth": 29,
|
||
"type": "Other",
|
||
"identifier": "composer-dock-content",
|
||
"parentIndex": 65,
|
||
"enabled": true,
|
||
"index": 66,
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 575,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e67"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 575,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 66,
|
||
"index": 67,
|
||
"depth": 30,
|
||
"ref": "e68"
|
||
},
|
||
{
|
||
"parentIndex": 66,
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 575,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"depth": 30,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"index": 68,
|
||
"ref": "e69"
|
||
},
|
||
{
|
||
"depth": 31,
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 575,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"type": "Other",
|
||
"index": 69,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 68,
|
||
"ref": "e70"
|
||
},
|
||
{
|
||
"depth": 31,
|
||
"identifier": "agent-chat-scroll",
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 575,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 68,
|
||
"enabled": true,
|
||
"index": 70,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"type": "Other",
|
||
"ref": "e71"
|
||
},
|
||
{
|
||
"parentIndex": 70,
|
||
"label": "Thinking",
|
||
"enabled": true,
|
||
"depth": 32,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 161,
|
||
"height": 575,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 71,
|
||
"type": "ScrollView",
|
||
"ref": "e72"
|
||
},
|
||
{
|
||
"depth": 33,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"label": "Thinking",
|
||
"index": 72,
|
||
"parentIndex": 71,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -2643,
|
||
"height": 3379,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e73"
|
||
},
|
||
{
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"enabled": true,
|
||
"parentIndex": 72,
|
||
"type": "Other",
|
||
"depth": 34,
|
||
"index": 73,
|
||
"rect": {
|
||
"y": -2643,
|
||
"height": 3379,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"ref": "e74"
|
||
},
|
||
{
|
||
"depth": 35,
|
||
"rect": {
|
||
"y": -2643,
|
||
"height": 32,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"parentIndex": 73,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"index": 74,
|
||
"ref": "e75"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -2643,
|
||
"height": 32,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"depth": 36,
|
||
"hittable": false,
|
||
"index": 75,
|
||
"identifier": "older-history-slot",
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"parentIndex": 74,
|
||
"ref": "e76"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"parentIndex": 73,
|
||
"index": 76,
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"rect": {
|
||
"y": -2611,
|
||
"height": 570,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"enabled": true,
|
||
"depth": 35,
|
||
"type": "Other",
|
||
"ref": "e77"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"parentIndex": 76,
|
||
"depth": 36,
|
||
"index": 77,
|
||
"identifier": "assistant-message",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -2611,
|
||
"height": 566,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"ref": "e78"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -2599,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"depth": 36,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"parentIndex": 76,
|
||
"index": 78,
|
||
"ref": "e79"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -2599,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"depth": 37,
|
||
"enabled": true,
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"hittable": false,
|
||
"index": 79,
|
||
"type": "Other",
|
||
"parentIndex": 78,
|
||
"ref": "e80"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"index": 80,
|
||
"rect": {
|
||
"y": -2599,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"parentIndex": 79,
|
||
"depth": 38,
|
||
"hittable": false,
|
||
"ref": "e81"
|
||
},
|
||
{
|
||
"parentIndex": 79,
|
||
"depth": 38,
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"value": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"enabled": true,
|
||
"type": "TextView",
|
||
"index": 81,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"ref": "e82"
|
||
},
|
||
{
|
||
"type": "TextView",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"index": 82,
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle 2",
|
||
"depth": 39,
|
||
"rect": {
|
||
"y": -2599,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"parentIndex": 81,
|
||
"ref": "e83"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"value": "0%",
|
||
"type": "Other",
|
||
"parentIndex": 81,
|
||
"index": 83,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"rect": {
|
||
"y": -2599,
|
||
"height": 242,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"ref": "e84"
|
||
},
|
||
{
|
||
"index": 84,
|
||
"rect": {
|
||
"y": -2638,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"enabled": true,
|
||
"parentIndex": 83,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"depth": 40,
|
||
"ref": "e85"
|
||
},
|
||
{
|
||
"depth": 39,
|
||
"rect": {
|
||
"y": -2390,
|
||
"height": 30,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"index": 85,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"type": "Other",
|
||
"value": "0%",
|
||
"parentIndex": 81,
|
||
"ref": "e86"
|
||
},
|
||
{
|
||
"parentIndex": 85,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"index": 86,
|
||
"rect": {
|
||
"y": -2363,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"depth": 40,
|
||
"ref": "e87"
|
||
},
|
||
{
|
||
"depth": 36,
|
||
"index": 87,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -2333,
|
||
"height": 264,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so",
|
||
"parentIndex": 76,
|
||
"ref": "e88"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"depth": 37,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -2333,
|
||
"height": 264,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"index": 88,
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so",
|
||
"parentIndex": 87,
|
||
"type": "Other",
|
||
"ref": "e89"
|
||
},
|
||
{
|
||
"index": 89,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -2333,
|
||
"height": 264,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"depth": 38,
|
||
"parentIndex": 88,
|
||
"ref": "e90"
|
||
},
|
||
{
|
||
"index": 90,
|
||
"type": "TextView",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so",
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 88,
|
||
"value": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so",
|
||
"depth": 38,
|
||
"ref": "e91"
|
||
},
|
||
{
|
||
"index": 91,
|
||
"hittable": false,
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so the first useful step is to read the relevant files.",
|
||
"type": "TextView",
|
||
"enabled": true,
|
||
"depth": 39,
|
||
"rect": {
|
||
"y": -2333,
|
||
"height": 264,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"parentIndex": 90,
|
||
"ref": "e92"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"parentIndex": 90,
|
||
"value": "0%",
|
||
"index": 92,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"rect": {
|
||
"y": -2333,
|
||
"height": 264,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"ref": "e93"
|
||
},
|
||
{
|
||
"index": 93,
|
||
"rect": {
|
||
"y": -2372,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"enabled": true,
|
||
"parentIndex": 92,
|
||
"depth": 40,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"ref": "e94"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"value": "0%",
|
||
"depth": 39,
|
||
"index": 94,
|
||
"rect": {
|
||
"y": -2102,
|
||
"height": 30,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"parentIndex": 90,
|
||
"enabled": true,
|
||
"ref": "e95"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 95,
|
||
"rect": {
|
||
"y": -2075,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"parentIndex": 94,
|
||
"type": "Other",
|
||
"depth": 40,
|
||
"hittable": false,
|
||
"ref": "e96"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 96,
|
||
"hittable": false,
|
||
"label": "Thinking",
|
||
"type": "Other",
|
||
"parentIndex": 73,
|
||
"depth": 35,
|
||
"rect": {
|
||
"y": -2041,
|
||
"height": 32,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"ref": "e97"
|
||
},
|
||
{
|
||
"index": 97,
|
||
"hittable": false,
|
||
"identifier": "tool-call-badge",
|
||
"parentIndex": 96,
|
||
"depth": 36,
|
||
"rect": {
|
||
"y": -2041,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"ref": "e98"
|
||
},
|
||
{
|
||
"label": "Thinking",
|
||
"type": "Button",
|
||
"hittable": false,
|
||
"depth": 36,
|
||
"index": 98,
|
||
"parentIndex": 96,
|
||
"rect": {
|
||
"y": -2041,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"enabled": true,
|
||
"ref": "e99"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"label": "Read, packages/app/src/components/conversation-list.tsx",
|
||
"rect": {
|
||
"y": -2009,
|
||
"height": 32,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"parentIndex": 73,
|
||
"index": 99,
|
||
"enabled": true,
|
||
"depth": 35,
|
||
"type": "Other",
|
||
"ref": "e100"
|
||
},
|
||
{
|
||
"index": 100,
|
||
"parentIndex": 99,
|
||
"identifier": "tool-call-badge",
|
||
"rect": {
|
||
"y": -2009,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"depth": 36,
|
||
"ref": "e101"
|
||
},
|
||
{
|
||
"index": 101,
|
||
"parentIndex": 99,
|
||
"hittable": false,
|
||
"type": "Button",
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"label": "Read, packages/app/src/components/conversation-list.tsx",
|
||
"rect": {
|
||
"y": -2009,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"ref": "e102"
|
||
},
|
||
{
|
||
"parentIndex": 101,
|
||
"label": "Read",
|
||
"hittable": false,
|
||
"depth": 37,
|
||
"type": "Other",
|
||
"index": 102,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -2002,
|
||
"height": 18,
|
||
"width": 344,
|
||
"x": 42
|
||
},
|
||
"ref": "e103"
|
||
},
|
||
{
|
||
"depth": 38,
|
||
"index": 103,
|
||
"type": "StaticText",
|
||
"enabled": true,
|
||
"label": "Read",
|
||
"rect": {
|
||
"y": -2002,
|
||
"height": 18,
|
||
"width": 35,
|
||
"x": 42
|
||
},
|
||
"parentIndex": 102,
|
||
"hittable": false,
|
||
"ref": "e104"
|
||
},
|
||
{
|
||
"index": 104,
|
||
"depth": 39,
|
||
"type": "StaticText",
|
||
"label": "Read",
|
||
"rect": {
|
||
"y": -2002,
|
||
"height": 18,
|
||
"width": 35,
|
||
"x": 42
|
||
},
|
||
"parentIndex": 103,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"ref": "e105"
|
||
},
|
||
{
|
||
"index": 105,
|
||
"parentIndex": 102,
|
||
"label": "packages/app/src/components/conversation-list.tsx",
|
||
"hittable": false,
|
||
"type": "StaticText",
|
||
"enabled": true,
|
||
"depth": 38,
|
||
"rect": {
|
||
"y": -2002,
|
||
"height": 18,
|
||
"width": 301,
|
||
"x": 85
|
||
},
|
||
"ref": "e106"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"parentIndex": 105,
|
||
"enabled": true,
|
||
"type": "StaticText",
|
||
"index": 106,
|
||
"depth": 39,
|
||
"label": "packages/app/src/components/conversation-list.tsx",
|
||
"rect": {
|
||
"y": -2002,
|
||
"height": 18,
|
||
"width": 301,
|
||
"x": 85
|
||
},
|
||
"ref": "e107"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"index": 107,
|
||
"parentIndex": 73,
|
||
"label": "Search, scrollToEnd",
|
||
"rect": {
|
||
"y": -1977,
|
||
"height": 36,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"enabled": true,
|
||
"depth": 35,
|
||
"hittable": false,
|
||
"ref": "e108"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"parentIndex": 107,
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"index": 108,
|
||
"rect": {
|
||
"y": -1977,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"hittable": false,
|
||
"identifier": "tool-call-badge",
|
||
"ref": "e109"
|
||
},
|
||
{
|
||
"index": 109,
|
||
"hittable": false,
|
||
"type": "Button",
|
||
"enabled": true,
|
||
"label": "Search, scrollToEnd",
|
||
"rect": {
|
||
"y": -1977,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"depth": 36,
|
||
"parentIndex": 107,
|
||
"ref": "e110"
|
||
},
|
||
{
|
||
"depth": 35,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"label": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"rect": {
|
||
"y": -1941,
|
||
"height": 646,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"enabled": true,
|
||
"parentIndex": 73,
|
||
"index": 110,
|
||
"ref": "e111"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"index": 111,
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"identifier": "assistant-message",
|
||
"rect": {
|
||
"y": -1941,
|
||
"height": 642,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"type": "Other",
|
||
"parentIndex": 110,
|
||
"ref": "e112"
|
||
},
|
||
{
|
||
"label": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"rect": {
|
||
"y": -1929,
|
||
"height": 132,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"type": "Other",
|
||
"index": 112,
|
||
"enabled": true,
|
||
"parentIndex": 110,
|
||
"depth": 36,
|
||
"hittable": false,
|
||
"ref": "e113"
|
||
},
|
||
{
|
||
"label": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"parentIndex": 112,
|
||
"rect": {
|
||
"y": -1929,
|
||
"height": 132,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"depth": 37,
|
||
"index": 113,
|
||
"hittable": false,
|
||
"ref": "e114"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"parentIndex": 113,
|
||
"type": "Other",
|
||
"depth": 38,
|
||
"index": 114,
|
||
"rect": {
|
||
"y": -1929,
|
||
"height": 132,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"ref": "e115"
|
||
},
|
||
{
|
||
"depth": 38,
|
||
"type": "TextView",
|
||
"label": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"hittable": false,
|
||
"parentIndex": 113,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"index": 115,
|
||
"enabled": true,
|
||
"value": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"ref": "e116"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"label": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"rect": {
|
||
"y": -1929,
|
||
"height": 132,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"parentIndex": 115,
|
||
"depth": 39,
|
||
"hittable": false,
|
||
"index": 116,
|
||
"type": "TextView",
|
||
"ref": "e117"
|
||
},
|
||
{
|
||
"index": 117,
|
||
"type": "Other",
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"value": "0%",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"depth": 39,
|
||
"parentIndex": 115,
|
||
"rect": {
|
||
"y": -1929,
|
||
"height": 132,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"ref": "e118"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"index": 118,
|
||
"hittable": false,
|
||
"depth": 40,
|
||
"parentIndex": 117,
|
||
"rect": {
|
||
"y": -1968,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"enabled": true,
|
||
"ref": "e119"
|
||
},
|
||
{
|
||
"index": 119,
|
||
"depth": 39,
|
||
"enabled": true,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"parentIndex": 115,
|
||
"type": "Other",
|
||
"value": "0%",
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -1830,
|
||
"height": 30,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"ref": "e120"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 120,
|
||
"rect": {
|
||
"y": -1803,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"hittable": false,
|
||
"depth": 40,
|
||
"type": "Other",
|
||
"parentIndex": 119,
|
||
"ref": "e121"
|
||
},
|
||
{
|
||
"label": "•",
|
||
"index": 121,
|
||
"enabled": true,
|
||
"type": "StaticText",
|
||
"parentIndex": 110,
|
||
"hittable": false,
|
||
"depth": 36,
|
||
"rect": {
|
||
"y": -1769,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"ref": "e122"
|
||
},
|
||
{
|
||
"label": "•",
|
||
"rect": {
|
||
"y": -1769,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"depth": 37,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 121,
|
||
"index": 122,
|
||
"type": "StaticText",
|
||
"ref": "e123"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -1769,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"depth": 36,
|
||
"label": "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space.",
|
||
"index": 123,
|
||
"parentIndex": 110,
|
||
"enabled": true,
|
||
"ref": "e124"
|
||
},
|
||
{
|
||
"parentIndex": 123,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -1769,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"index": 124,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"depth": 37,
|
||
"label": "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space.",
|
||
"ref": "e125"
|
||
},
|
||
{
|
||
"depth": 38,
|
||
"rect": {
|
||
"y": -1769,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 125,
|
||
"parentIndex": 124,
|
||
"ref": "e126"
|
||
},
|
||
{
|
||
"type": "TextView",
|
||
"hittable": false,
|
||
"depth": 38,
|
||
"parentIndex": 124,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"label": "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space.",
|
||
"value": "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space.",
|
||
"index": 126,
|
||
"ref": "e127"
|
||
},
|
||
{
|
||
"label": "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space.",
|
||
"index": 127,
|
||
"type": "TextView",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1769,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"parentIndex": 126,
|
||
"ref": "e128"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"index": 128,
|
||
"enabled": true,
|
||
"value": "0%",
|
||
"rect": {
|
||
"y": -1769,
|
||
"height": 88,
|
||
"width": 30,
|
||
"x": 349.00000063578284
|
||
},
|
||
"depth": 39,
|
||
"parentIndex": 126,
|
||
"type": "Other",
|
||
"ref": "e129"
|
||
},
|
||
{
|
||
"index": 129,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 128,
|
||
"depth": 40,
|
||
"rect": {
|
||
"y": -1808,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376.00000063578284
|
||
},
|
||
"ref": "e130"
|
||
},
|
||
{
|
||
"depth": 39,
|
||
"value": "0%",
|
||
"parentIndex": 126,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1714,
|
||
"height": 30,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"index": 130,
|
||
"type": "Other",
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"hittable": false,
|
||
"ref": "e131"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"depth": 40,
|
||
"index": 131,
|
||
"enabled": true,
|
||
"parentIndex": 130,
|
||
"rect": {
|
||
"y": -1687,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": 2.333333969116211
|
||
},
|
||
"hittable": false,
|
||
"ref": "e132"
|
||
},
|
||
{
|
||
"parentIndex": 110,
|
||
"rect": {
|
||
"y": -1677,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"hittable": false,
|
||
"index": 132,
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"type": "StaticText",
|
||
"label": "•",
|
||
"ref": "e133"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1677,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"index": 133,
|
||
"depth": 37,
|
||
"parentIndex": 132,
|
||
"hittable": false,
|
||
"type": "StaticText",
|
||
"label": "•",
|
||
"ref": "e134"
|
||
},
|
||
{
|
||
"parentIndex": 110,
|
||
"rect": {
|
||
"y": -1677,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"label": "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams.",
|
||
"hittable": false,
|
||
"index": 134,
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"enabled": true,
|
||
"ref": "e135"
|
||
},
|
||
{
|
||
"index": 135,
|
||
"label": "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams.",
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1677,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"parentIndex": 134,
|
||
"depth": 37,
|
||
"ref": "e136"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"parentIndex": 135,
|
||
"index": 136,
|
||
"depth": 38,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1677,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"hittable": false,
|
||
"ref": "e137"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"label": "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams.",
|
||
"index": 137,
|
||
"value": "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams.",
|
||
"parentIndex": 135,
|
||
"type": "TextView",
|
||
"depth": 38,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"ref": "e138"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -1677,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"parentIndex": 137,
|
||
"index": 138,
|
||
"enabled": true,
|
||
"label": "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams.",
|
||
"type": "TextView",
|
||
"ref": "e139"
|
||
},
|
||
{
|
||
"value": "0%",
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"depth": 39,
|
||
"index": 139,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"parentIndex": 137,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1677,
|
||
"height": 88,
|
||
"width": 30,
|
||
"x": 349.00000063578284
|
||
},
|
||
"ref": "e140"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 140,
|
||
"rect": {
|
||
"y": -1716,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376.00000063578284
|
||
},
|
||
"depth": 40,
|
||
"type": "Other",
|
||
"parentIndex": 139,
|
||
"ref": "e141"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"rect": {
|
||
"y": -1622,
|
||
"height": 30,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"value": "0%",
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"depth": 39,
|
||
"parentIndex": 137,
|
||
"index": 141,
|
||
"ref": "e142"
|
||
},
|
||
{
|
||
"depth": 40,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"parentIndex": 141,
|
||
"hittable": false,
|
||
"index": 142,
|
||
"rect": {
|
||
"y": -1595,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": 2.333333969116211
|
||
},
|
||
"ref": "e143"
|
||
},
|
||
{
|
||
"depth": 36,
|
||
"rect": {
|
||
"y": -1585,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"label": "•",
|
||
"type": "StaticText",
|
||
"parentIndex": 110,
|
||
"index": 143,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"ref": "e144"
|
||
},
|
||
{
|
||
"depth": 37,
|
||
"hittable": false,
|
||
"index": 144,
|
||
"label": "•",
|
||
"enabled": true,
|
||
"parentIndex": 143,
|
||
"rect": {
|
||
"y": -1585,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"type": "StaticText",
|
||
"ref": "e145"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"label": "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame.",
|
||
"rect": {
|
||
"y": -1585,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"hittable": false,
|
||
"index": 145,
|
||
"parentIndex": 110,
|
||
"ref": "e146"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -1585,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"label": "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame.",
|
||
"hittable": false,
|
||
"index": 146,
|
||
"parentIndex": 145,
|
||
"enabled": true,
|
||
"depth": 37,
|
||
"type": "Other",
|
||
"ref": "e147"
|
||
},
|
||
{
|
||
"depth": 38,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"parentIndex": 146,
|
||
"rect": {
|
||
"y": -1585,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"index": 147,
|
||
"enabled": true,
|
||
"ref": "e148"
|
||
},
|
||
{
|
||
"index": 148,
|
||
"parentIndex": 146,
|
||
"type": "TextView",
|
||
"label": "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame.",
|
||
"depth": 38,
|
||
"value": "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame.",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"ref": "e149"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 149,
|
||
"label": "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame.",
|
||
"type": "TextView",
|
||
"parentIndex": 148,
|
||
"rect": {
|
||
"y": -1585,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"ref": "e150"
|
||
},
|
||
{
|
||
"index": 150,
|
||
"parentIndex": 148,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"type": "Other",
|
||
"value": "0%",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1585,
|
||
"height": 88,
|
||
"width": 30,
|
||
"x": 349.00000063578284
|
||
},
|
||
"ref": "e151"
|
||
},
|
||
{
|
||
"index": 151,
|
||
"type": "Other",
|
||
"depth": 40,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -1624,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376.00000063578284
|
||
},
|
||
"parentIndex": 150,
|
||
"ref": "e152"
|
||
},
|
||
{
|
||
"value": "0%",
|
||
"rect": {
|
||
"y": -1530,
|
||
"height": 30,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 148,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"depth": 39,
|
||
"index": 152,
|
||
"type": "Other",
|
||
"ref": "e153"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -1503,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": 2.333333969116211
|
||
},
|
||
"parentIndex": 152,
|
||
"depth": 40,
|
||
"index": 153,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"ref": "e154"
|
||
},
|
||
{
|
||
"index": 154,
|
||
"hittable": false,
|
||
"depth": 36,
|
||
"parentIndex": 110,
|
||
"label": "•",
|
||
"type": "StaticText",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1493,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"ref": "e155"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -1493,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"index": 155,
|
||
"label": "•",
|
||
"depth": 37,
|
||
"parentIndex": 154,
|
||
"type": "StaticText",
|
||
"enabled": true,
|
||
"ref": "e156"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -1493,
|
||
"height": 66,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"parentIndex": 110,
|
||
"index": 156,
|
||
"label": "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout.",
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"ref": "e157"
|
||
},
|
||
{
|
||
"parentIndex": 156,
|
||
"hittable": false,
|
||
"depth": 37,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -1493,
|
||
"height": 66,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"label": "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout.",
|
||
"enabled": true,
|
||
"index": 157,
|
||
"ref": "e158"
|
||
},
|
||
{
|
||
"index": 158,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -1493,
|
||
"height": 66,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"hittable": false,
|
||
"depth": 38,
|
||
"enabled": true,
|
||
"parentIndex": 157,
|
||
"ref": "e159"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"type": "TextView",
|
||
"parentIndex": 157,
|
||
"value": "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout.",
|
||
"label": "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout.",
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"depth": 38,
|
||
"index": 159,
|
||
"ref": "e160"
|
||
},
|
||
{
|
||
"type": "TextView",
|
||
"rect": {
|
||
"y": -1493,
|
||
"height": 66,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"depth": 39,
|
||
"index": 160,
|
||
"parentIndex": 159,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"label": "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout.",
|
||
"ref": "e161"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -1493,
|
||
"height": 66,
|
||
"width": 30,
|
||
"x": 349.00000063578284
|
||
},
|
||
"depth": 39,
|
||
"parentIndex": 159,
|
||
"index": 161,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"value": "0%",
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"ref": "e162"
|
||
},
|
||
{
|
||
"depth": 40,
|
||
"parentIndex": 161,
|
||
"index": 162,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -1532,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376.00000063578284
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e163"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"rect": {
|
||
"y": -1460,
|
||
"height": 30,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"parentIndex": 159,
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"index": 163,
|
||
"value": "0%",
|
||
"ref": "e164"
|
||
},
|
||
{
|
||
"depth": 40,
|
||
"index": 164,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -1433,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": 2.333333969116211
|
||
},
|
||
"parentIndex": 163,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e165"
|
||
},
|
||
{
|
||
"index": 165,
|
||
"rect": {
|
||
"y": -1411,
|
||
"height": 88,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"label": "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast.",
|
||
"depth": 36,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"parentIndex": 110,
|
||
"ref": "e166"
|
||
},
|
||
{
|
||
"index": 166,
|
||
"label": "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast.",
|
||
"rect": {
|
||
"y": -1411,
|
||
"height": 88,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"depth": 37,
|
||
"parentIndex": 165,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e167"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"index": 167,
|
||
"depth": 38,
|
||
"rect": {
|
||
"y": -1411,
|
||
"height": 88,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 166,
|
||
"ref": "e168"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"parentIndex": 166,
|
||
"value": "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast.",
|
||
"index": 168,
|
||
"depth": 38,
|
||
"label": "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast.",
|
||
"type": "TextView",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"ref": "e169"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 169,
|
||
"rect": {
|
||
"y": -1411,
|
||
"height": 88,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"label": "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast.",
|
||
"parentIndex": 168,
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"type": "TextView",
|
||
"ref": "e170"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"index": 170,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"hittable": false,
|
||
"parentIndex": 168,
|
||
"depth": 39,
|
||
"value": "0%",
|
||
"rect": {
|
||
"y": -1411,
|
||
"height": 88,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"ref": "e171"
|
||
},
|
||
{
|
||
"depth": 40,
|
||
"rect": {
|
||
"y": -1450,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"hittable": false,
|
||
"index": 171,
|
||
"type": "Other",
|
||
"parentIndex": 170,
|
||
"enabled": true,
|
||
"ref": "e172"
|
||
},
|
||
{
|
||
"value": "0%",
|
||
"rect": {
|
||
"y": -1356,
|
||
"height": 30,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"index": 172,
|
||
"parentIndex": 168,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"depth": 39,
|
||
"ref": "e173"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 173,
|
||
"parentIndex": 172,
|
||
"depth": 40,
|
||
"rect": {
|
||
"y": -1329,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"ref": "e174"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1295,
|
||
"height": 32,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"depth": 35,
|
||
"label": "Edit, packages/app/src/hooks/use-scroll-anchor.ts",
|
||
"index": 174,
|
||
"parentIndex": 73,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"ref": "e175"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"parentIndex": 174,
|
||
"identifier": "tool-call-badge",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1295,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"index": 175,
|
||
"hittable": false,
|
||
"ref": "e176"
|
||
},
|
||
{
|
||
"type": "Button",
|
||
"rect": {
|
||
"y": -1295,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"hittable": false,
|
||
"label": "Edit, packages/app/src/hooks/use-scroll-anchor.ts",
|
||
"index": 176,
|
||
"depth": 36,
|
||
"parentIndex": 174,
|
||
"enabled": true,
|
||
"ref": "e177"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"index": 177,
|
||
"depth": 35,
|
||
"rect": {
|
||
"y": -1263,
|
||
"height": 36,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"hittable": false,
|
||
"label": "Shell, node scripts/simulate-stream-burst.mjs",
|
||
"parentIndex": 73,
|
||
"ref": "e178"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"parentIndex": 177,
|
||
"index": 178,
|
||
"identifier": "tool-call-badge",
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -1263,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"depth": 36,
|
||
"ref": "e179"
|
||
},
|
||
{
|
||
"type": "Button",
|
||
"index": 179,
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"parentIndex": 177,
|
||
"hittable": false,
|
||
"label": "Shell, node scripts/simulate-stream-burst.mjs",
|
||
"rect": {
|
||
"y": -1263,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"ref": "e180"
|
||
},
|
||
{
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"parentIndex": 73,
|
||
"index": 180,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -1227,
|
||
"height": 570,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"depth": 35,
|
||
"enabled": true,
|
||
"ref": "e181"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"depth": 36,
|
||
"identifier": "assistant-message",
|
||
"parentIndex": 180,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1227,
|
||
"height": 566,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"index": 181,
|
||
"ref": "e182"
|
||
},
|
||
{
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"index": 182,
|
||
"rect": {
|
||
"y": -1215,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"parentIndex": 180,
|
||
"type": "Other",
|
||
"ref": "e183"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -1215,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"index": 183,
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"parentIndex": 182,
|
||
"depth": 37,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"ref": "e184"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -1215,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"index": 184,
|
||
"parentIndex": 183,
|
||
"hittable": false,
|
||
"depth": 38,
|
||
"ref": "e185"
|
||
},
|
||
{
|
||
"parentIndex": 183,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"type": "TextView",
|
||
"index": 185,
|
||
"hittable": false,
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"enabled": true,
|
||
"depth": 38,
|
||
"value": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"ref": "e186"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"type": "TextView",
|
||
"parentIndex": 185,
|
||
"depth": 39,
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle 3",
|
||
"index": 186,
|
||
"rect": {
|
||
"y": -1215,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"hittable": false,
|
||
"ref": "e187"
|
||
},
|
||
{
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"index": 187,
|
||
"depth": 39,
|
||
"parentIndex": 185,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"value": "0%",
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -1215,
|
||
"height": 242,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"ref": "e188"
|
||
},
|
||
{
|
||
"parentIndex": 187,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -1254,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"index": 188,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"depth": 40,
|
||
"ref": "e189"
|
||
},
|
||
{
|
||
"parentIndex": 185,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"depth": 39,
|
||
"index": 189,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"value": "0%",
|
||
"rect": {
|
||
"y": -1006,
|
||
"height": 30,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"ref": "e190"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -979,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"parentIndex": 189,
|
||
"index": 190,
|
||
"hittable": false,
|
||
"depth": 40,
|
||
"ref": "e191"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"parentIndex": 180,
|
||
"index": 191,
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -949,
|
||
"height": 264,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"depth": 36,
|
||
"type": "Other",
|
||
"ref": "e192"
|
||
},
|
||
{
|
||
"index": 192,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -949,
|
||
"height": 264,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"depth": 37,
|
||
"parentIndex": 191,
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so",
|
||
"type": "Other",
|
||
"ref": "e193"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -949,
|
||
"height": 264,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"index": 193,
|
||
"enabled": true,
|
||
"parentIndex": 192,
|
||
"depth": 38,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"ref": "e194"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so",
|
||
"value": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so",
|
||
"hittable": false,
|
||
"type": "TextView",
|
||
"enabled": true,
|
||
"depth": 38,
|
||
"parentIndex": 192,
|
||
"index": 194,
|
||
"ref": "e195"
|
||
},
|
||
{
|
||
"index": 195,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -949,
|
||
"height": 264,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"type": "TextView",
|
||
"depth": 39,
|
||
"parentIndex": 194,
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so the first useful step is to read the relevant files.",
|
||
"ref": "e196"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"index": 196,
|
||
"parentIndex": 194,
|
||
"value": "0%",
|
||
"rect": {
|
||
"y": -949,
|
||
"height": 264,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"enabled": true,
|
||
"depth": 39,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"ref": "e197"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 196,
|
||
"type": "Other",
|
||
"index": 197,
|
||
"rect": {
|
||
"y": -988,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"depth": 40,
|
||
"ref": "e198"
|
||
},
|
||
{
|
||
"value": "0%",
|
||
"hittable": false,
|
||
"parentIndex": 194,
|
||
"type": "Other",
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"depth": 39,
|
||
"rect": {
|
||
"y": -718,
|
||
"height": 30,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"index": 198,
|
||
"enabled": true,
|
||
"ref": "e199"
|
||
},
|
||
{
|
||
"depth": 40,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -691,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"parentIndex": 198,
|
||
"index": 199,
|
||
"ref": "e200"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -657,
|
||
"height": 32,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"index": 200,
|
||
"depth": 35,
|
||
"parentIndex": 73,
|
||
"enabled": true,
|
||
"label": "Thinking",
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"ref": "e201"
|
||
},
|
||
{
|
||
"parentIndex": 200,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"identifier": "tool-call-badge",
|
||
"rect": {
|
||
"y": -657,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"index": 201,
|
||
"hittable": false,
|
||
"ref": "e202"
|
||
},
|
||
{
|
||
"label": "Thinking",
|
||
"index": 202,
|
||
"rect": {
|
||
"y": -657,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"parentIndex": 200,
|
||
"hittable": false,
|
||
"type": "Button",
|
||
"ref": "e203"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"label": "Read, packages/app/src/components/conversation-list.tsx",
|
||
"depth": 35,
|
||
"hittable": false,
|
||
"index": 203,
|
||
"enabled": true,
|
||
"parentIndex": 73,
|
||
"rect": {
|
||
"y": -625,
|
||
"height": 32,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"ref": "e204"
|
||
},
|
||
{
|
||
"index": 204,
|
||
"hittable": false,
|
||
"identifier": "tool-call-badge",
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"rect": {
|
||
"y": -625,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"parentIndex": 203,
|
||
"ref": "e205"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -625,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"parentIndex": 203,
|
||
"label": "Read, packages/app/src/components/conversation-list.tsx",
|
||
"type": "Button",
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"index": 205,
|
||
"ref": "e206"
|
||
},
|
||
{
|
||
"index": 206,
|
||
"depth": 35,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -593,
|
||
"height": 36,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"label": "Search, scrollToEnd",
|
||
"parentIndex": 73,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"ref": "e207"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"identifier": "tool-call-badge",
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"parentIndex": 206,
|
||
"index": 207,
|
||
"rect": {
|
||
"y": -593,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"depth": 36,
|
||
"ref": "e208"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 208,
|
||
"label": "Search, scrollToEnd",
|
||
"parentIndex": 206,
|
||
"hittable": false,
|
||
"type": "Button",
|
||
"rect": {
|
||
"y": -593,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"depth": 36,
|
||
"ref": "e209"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"label": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"enabled": true,
|
||
"parentIndex": 73,
|
||
"index": 209,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -557,
|
||
"height": 646,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"depth": 35,
|
||
"ref": "e210"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -557,
|
||
"height": 642,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"type": "Other",
|
||
"index": 210,
|
||
"depth": 36,
|
||
"parentIndex": 209,
|
||
"identifier": "assistant-message",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"ref": "e211"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"depth": 36,
|
||
"label": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"rect": {
|
||
"y": -545,
|
||
"height": 132,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"index": 211,
|
||
"enabled": true,
|
||
"parentIndex": 209,
|
||
"type": "Other",
|
||
"ref": "e212"
|
||
},
|
||
{
|
||
"index": 212,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -545,
|
||
"height": 132,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"hittable": false,
|
||
"depth": 37,
|
||
"parentIndex": 211,
|
||
"label": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"ref": "e213"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"depth": 38,
|
||
"rect": {
|
||
"y": -545,
|
||
"height": 132,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 212,
|
||
"index": 213,
|
||
"type": "Other",
|
||
"ref": "e214"
|
||
},
|
||
{
|
||
"label": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"type": "TextView",
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"depth": 38,
|
||
"parentIndex": 212,
|
||
"hittable": false,
|
||
"value": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"enabled": true,
|
||
"index": 214,
|
||
"ref": "e215"
|
||
},
|
||
{
|
||
"depth": 39,
|
||
"parentIndex": 214,
|
||
"rect": {
|
||
"y": -545,
|
||
"height": 132,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"index": 215,
|
||
"label": "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:",
|
||
"hittable": false,
|
||
"type": "TextView",
|
||
"enabled": true,
|
||
"ref": "e216"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -545,
|
||
"height": 132,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"value": "0%",
|
||
"depth": 39,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"index": 216,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"parentIndex": 214,
|
||
"ref": "e217"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 217,
|
||
"depth": 40,
|
||
"type": "Other",
|
||
"parentIndex": 216,
|
||
"rect": {
|
||
"y": -584,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"ref": "e218"
|
||
},
|
||
{
|
||
"value": "0%",
|
||
"index": 218,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -446,
|
||
"height": 30,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 214,
|
||
"depth": 39,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"ref": "e219"
|
||
},
|
||
{
|
||
"index": 219,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -419,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 218,
|
||
"depth": 40,
|
||
"ref": "e220"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 220,
|
||
"rect": {
|
||
"y": -385,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"label": "•",
|
||
"hittable": false,
|
||
"type": "StaticText",
|
||
"parentIndex": 209,
|
||
"depth": 36,
|
||
"ref": "e221"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"type": "StaticText",
|
||
"rect": {
|
||
"y": -385,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"parentIndex": 220,
|
||
"index": 221,
|
||
"depth": 37,
|
||
"label": "•",
|
||
"ref": "e222"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -385,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"hittable": false,
|
||
"index": 222,
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"label": "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space.",
|
||
"enabled": true,
|
||
"parentIndex": 209,
|
||
"ref": "e223"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"label": "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space.",
|
||
"hittable": false,
|
||
"parentIndex": 222,
|
||
"index": 223,
|
||
"rect": {
|
||
"y": -385,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"depth": 37,
|
||
"ref": "e224"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -385,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"type": "Other",
|
||
"depth": 38,
|
||
"hittable": false,
|
||
"parentIndex": 223,
|
||
"index": 224,
|
||
"ref": "e225"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 225,
|
||
"type": "TextView",
|
||
"parentIndex": 223,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"label": "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space.",
|
||
"value": "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space.",
|
||
"depth": 38,
|
||
"ref": "e226"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -385,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"index": 226,
|
||
"enabled": true,
|
||
"type": "TextView",
|
||
"label": "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space.",
|
||
"parentIndex": 225,
|
||
"depth": 39,
|
||
"ref": "e227"
|
||
},
|
||
{
|
||
"depth": 39,
|
||
"parentIndex": 225,
|
||
"rect": {
|
||
"y": -385,
|
||
"height": 88,
|
||
"width": 30,
|
||
"x": 349.00000063578284
|
||
},
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"value": "0%",
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"hittable": false,
|
||
"index": 227,
|
||
"ref": "e228"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"depth": 40,
|
||
"rect": {
|
||
"y": -424,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376.00000063578284
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 227,
|
||
"enabled": true,
|
||
"index": 228,
|
||
"ref": "e229"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"depth": 39,
|
||
"index": 229,
|
||
"parentIndex": 225,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"rect": {
|
||
"y": -330,
|
||
"height": 30,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"value": "0%",
|
||
"ref": "e230"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -303,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": 2.333333969116211
|
||
},
|
||
"parentIndex": 229,
|
||
"index": 230,
|
||
"depth": 40,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e231"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"index": 231,
|
||
"depth": 36,
|
||
"parentIndex": 209,
|
||
"label": "•",
|
||
"rect": {
|
||
"y": -293,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"type": "StaticText",
|
||
"ref": "e232"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"index": 232,
|
||
"enabled": true,
|
||
"depth": 37,
|
||
"type": "StaticText",
|
||
"rect": {
|
||
"y": -293,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"label": "•",
|
||
"parentIndex": 231,
|
||
"ref": "e233"
|
||
},
|
||
{
|
||
"label": "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams.",
|
||
"index": 233,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"rect": {
|
||
"y": -293,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"parentIndex": 209,
|
||
"ref": "e234"
|
||
},
|
||
{
|
||
"index": 234,
|
||
"rect": {
|
||
"y": -293,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"enabled": true,
|
||
"depth": 37,
|
||
"parentIndex": 233,
|
||
"hittable": false,
|
||
"label": "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams.",
|
||
"type": "Other",
|
||
"ref": "e235"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -293,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"parentIndex": 234,
|
||
"depth": 38,
|
||
"type": "Other",
|
||
"index": 235,
|
||
"hittable": false,
|
||
"ref": "e236"
|
||
},
|
||
{
|
||
"depth": 38,
|
||
"value": "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams.",
|
||
"parentIndex": 234,
|
||
"enabled": true,
|
||
"type": "TextView",
|
||
"hittable": false,
|
||
"index": 236,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"label": "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams.",
|
||
"ref": "e237"
|
||
},
|
||
{
|
||
"type": "TextView",
|
||
"label": "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams.",
|
||
"rect": {
|
||
"y": -293,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"parentIndex": 236,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 237,
|
||
"depth": 39,
|
||
"ref": "e238"
|
||
},
|
||
{
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"parentIndex": 236,
|
||
"enabled": true,
|
||
"depth": 39,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"value": "0%",
|
||
"rect": {
|
||
"y": -293,
|
||
"height": 88,
|
||
"width": 30,
|
||
"x": 349.00000063578284
|
||
},
|
||
"index": 238,
|
||
"ref": "e239"
|
||
},
|
||
{
|
||
"parentIndex": 238,
|
||
"type": "Other",
|
||
"depth": 40,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"index": 239,
|
||
"rect": {
|
||
"y": -332,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376.00000063578284
|
||
},
|
||
"ref": "e240"
|
||
},
|
||
{
|
||
"index": 240,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"value": "0%",
|
||
"depth": 39,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -238,
|
||
"height": 30,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"type": "Other",
|
||
"parentIndex": 236,
|
||
"hittable": false,
|
||
"ref": "e241"
|
||
},
|
||
{
|
||
"parentIndex": 240,
|
||
"index": 241,
|
||
"rect": {
|
||
"y": -211,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": 2.333333969116211
|
||
},
|
||
"depth": 40,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e242"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "StaticText",
|
||
"parentIndex": 209,
|
||
"index": 242,
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"label": "•",
|
||
"rect": {
|
||
"y": -201,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"ref": "e243"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"parentIndex": 242,
|
||
"rect": {
|
||
"y": -201,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"type": "StaticText",
|
||
"depth": 37,
|
||
"index": 243,
|
||
"label": "•",
|
||
"ref": "e244"
|
||
},
|
||
{
|
||
"parentIndex": 209,
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"enabled": true,
|
||
"label": "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame.",
|
||
"rect": {
|
||
"y": -201,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"hittable": false,
|
||
"index": 244,
|
||
"ref": "e245"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"index": 245,
|
||
"rect": {
|
||
"y": -201,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"depth": 37,
|
||
"label": "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame.",
|
||
"parentIndex": 244,
|
||
"ref": "e246"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"index": 246,
|
||
"rect": {
|
||
"y": -201,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"enabled": true,
|
||
"parentIndex": 245,
|
||
"depth": 38,
|
||
"type": "Other",
|
||
"ref": "e247"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 247,
|
||
"label": "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame.",
|
||
"type": "TextView",
|
||
"value": "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame.",
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 245,
|
||
"depth": 38,
|
||
"ref": "e248"
|
||
},
|
||
{
|
||
"index": 248,
|
||
"type": "TextView",
|
||
"rect": {
|
||
"y": -201,
|
||
"height": 88,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"label": "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame.",
|
||
"parentIndex": 247,
|
||
"enabled": true,
|
||
"depth": 39,
|
||
"hittable": false,
|
||
"ref": "e249"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -201,
|
||
"height": 88,
|
||
"width": 30,
|
||
"x": 349.00000063578284
|
||
},
|
||
"index": 249,
|
||
"type": "Other",
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"depth": 39,
|
||
"parentIndex": 247,
|
||
"value": "0%",
|
||
"ref": "e250"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -240,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376.00000063578284
|
||
},
|
||
"enabled": true,
|
||
"parentIndex": 249,
|
||
"depth": 40,
|
||
"index": 250,
|
||
"ref": "e251"
|
||
},
|
||
{
|
||
"parentIndex": 247,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"value": "0%",
|
||
"depth": 39,
|
||
"index": 251,
|
||
"rect": {
|
||
"y": -146,
|
||
"height": 30,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"ref": "e252"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"index": 252,
|
||
"hittable": false,
|
||
"depth": 40,
|
||
"rect": {
|
||
"y": -119,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": 2.333333969116211
|
||
},
|
||
"parentIndex": 251,
|
||
"ref": "e253"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -109,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 209,
|
||
"label": "•",
|
||
"depth": 36,
|
||
"enabled": true,
|
||
"type": "StaticText",
|
||
"index": 253,
|
||
"ref": "e254"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"depth": 37,
|
||
"index": 254,
|
||
"label": "•",
|
||
"type": "StaticText",
|
||
"parentIndex": 253,
|
||
"rect": {
|
||
"y": -109,
|
||
"height": 22,
|
||
"width": 7.333332061767578,
|
||
"x": 30
|
||
},
|
||
"ref": "e255"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": -109,
|
||
"height": 66,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"parentIndex": 209,
|
||
"label": "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout.",
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"index": 255,
|
||
"ref": "e256"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -109,
|
||
"height": 66,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"depth": 37,
|
||
"hittable": false,
|
||
"label": "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout.",
|
||
"index": 256,
|
||
"type": "Other",
|
||
"parentIndex": 255,
|
||
"ref": "e257"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 257,
|
||
"parentIndex": 256,
|
||
"depth": 38,
|
||
"rect": {
|
||
"y": -109,
|
||
"height": 66,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"type": "Other",
|
||
"ref": "e258"
|
||
},
|
||
{
|
||
"type": "TextView",
|
||
"label": "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout.",
|
||
"value": "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout.",
|
||
"hittable": false,
|
||
"index": 258,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 0
|
||
},
|
||
"depth": 38,
|
||
"parentIndex": 256,
|
||
"ref": "e259"
|
||
},
|
||
{
|
||
"depth": 39,
|
||
"parentIndex": 258,
|
||
"label": "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout.",
|
||
"index": 259,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -109,
|
||
"height": 66,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"type": "TextView",
|
||
"hittable": false,
|
||
"ref": "e260"
|
||
},
|
||
{
|
||
"value": "0%",
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": -109,
|
||
"height": 66,
|
||
"width": 30,
|
||
"x": 349.00000063578284
|
||
},
|
||
"depth": 39,
|
||
"hittable": false,
|
||
"index": 260,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"parentIndex": 258,
|
||
"enabled": true,
|
||
"ref": "e261"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 261,
|
||
"type": "Other",
|
||
"parentIndex": 260,
|
||
"rect": {
|
||
"y": -148,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376.00000063578284
|
||
},
|
||
"hittable": false,
|
||
"depth": 40,
|
||
"ref": "e262"
|
||
},
|
||
{
|
||
"value": "0%",
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 262,
|
||
"rect": {
|
||
"y": -76,
|
||
"height": 30,
|
||
"width": 340.6666564941406,
|
||
"x": 41.33333396911621
|
||
},
|
||
"depth": 39,
|
||
"parentIndex": 258,
|
||
"type": "Other",
|
||
"ref": "e263"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"index": 263,
|
||
"rect": {
|
||
"y": -49,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": 2.333333969116211
|
||
},
|
||
"parentIndex": 262,
|
||
"depth": 40,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"ref": "e264"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"index": 264,
|
||
"rect": {
|
||
"y": -27,
|
||
"height": 88,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"label": "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast.",
|
||
"hittable": false,
|
||
"parentIndex": 209,
|
||
"ref": "e265"
|
||
},
|
||
{
|
||
"index": 265,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"label": "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast.",
|
||
"enabled": true,
|
||
"depth": 37,
|
||
"parentIndex": 264,
|
||
"rect": {
|
||
"y": -27,
|
||
"height": 88,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"ref": "e266"
|
||
},
|
||
{
|
||
"parentIndex": 265,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"index": 266,
|
||
"depth": 38,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": -27,
|
||
"height": 88,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"ref": "e267"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "TextView",
|
||
"value": "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast.",
|
||
"depth": 38,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 61,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"label": "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast.",
|
||
"enabled": true,
|
||
"index": 267,
|
||
"parentIndex": 265,
|
||
"ref": "e268"
|
||
},
|
||
{
|
||
"type": "TextView",
|
||
"enabled": true,
|
||
"label": "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast.",
|
||
"rect": {
|
||
"y": -27,
|
||
"height": 88,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"index": 268,
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"parentIndex": 267,
|
||
"ref": "e269"
|
||
},
|
||
{
|
||
"index": 269,
|
||
"depth": 39,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -27,
|
||
"height": 88,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"value": "0%",
|
||
"enabled": true,
|
||
"parentIndex": 267,
|
||
"type": "Other",
|
||
"ref": "e270"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": -66,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"parentIndex": 269,
|
||
"depth": 40,
|
||
"index": 270,
|
||
"ref": "e271"
|
||
},
|
||
{
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"rect": {
|
||
"y": 28,
|
||
"height": 30,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"value": "0%",
|
||
"index": 271,
|
||
"parentIndex": 267,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"ref": "e272"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 272,
|
||
"rect": {
|
||
"y": 55,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"parentIndex": 271,
|
||
"depth": 40,
|
||
"ref": "e273"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 89,
|
||
"height": 32,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"depth": 35,
|
||
"label": "Edit, packages/app/src/hooks/use-scroll-anchor.ts",
|
||
"parentIndex": 73,
|
||
"index": 273,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"ref": "e274"
|
||
},
|
||
{
|
||
"identifier": "tool-call-badge",
|
||
"parentIndex": 273,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"index": 274,
|
||
"rect": {
|
||
"y": 89,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"ref": "e275"
|
||
},
|
||
{
|
||
"depth": 36,
|
||
"index": 275,
|
||
"rect": {
|
||
"y": 89,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"label": "Edit, packages/app/src/hooks/use-scroll-anchor.ts",
|
||
"enabled": true,
|
||
"type": "Button",
|
||
"parentIndex": 273,
|
||
"hittable": false,
|
||
"ref": "e276"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 121,
|
||
"height": 36,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"enabled": true,
|
||
"label": "Shell, node scripts/simulate-stream-burst.mjs",
|
||
"index": 276,
|
||
"depth": 35,
|
||
"parentIndex": 73,
|
||
"hittable": false,
|
||
"ref": "e277"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 121,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"parentIndex": 276,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"identifier": "tool-call-badge",
|
||
"index": 277,
|
||
"depth": 36,
|
||
"ref": "e278"
|
||
},
|
||
{
|
||
"label": "Shell, node scripts/simulate-stream-burst.mjs",
|
||
"parentIndex": 276,
|
||
"hittable": false,
|
||
"type": "Button",
|
||
"enabled": true,
|
||
"depth": 36,
|
||
"rect": {
|
||
"y": 121,
|
||
"height": 32,
|
||
"width": 388,
|
||
"x": 7
|
||
},
|
||
"index": 278,
|
||
"ref": "e279"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 157,
|
||
"height": 512,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"hittable": false,
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"type": "Other",
|
||
"index": 279,
|
||
"enabled": true,
|
||
"depth": 35,
|
||
"parentIndex": 73,
|
||
"ref": "e280"
|
||
},
|
||
{
|
||
"index": 280,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 157,
|
||
"height": 512,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"parentIndex": 279,
|
||
"type": "Other",
|
||
"identifier": "assistant-message",
|
||
"hittable": false,
|
||
"depth": 36,
|
||
"ref": "e281"
|
||
},
|
||
{
|
||
"depth": 36,
|
||
"type": "Other",
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"rect": {
|
||
"y": 169,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"parentIndex": 279,
|
||
"index": 281,
|
||
"ref": "e282"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 169,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"depth": 37,
|
||
"index": 282,
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"enabled": true,
|
||
"parentIndex": 281,
|
||
"ref": "e283"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"parentIndex": 282,
|
||
"index": 283,
|
||
"depth": 38,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 169,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"ref": "e284"
|
||
},
|
||
{
|
||
"value": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"parentIndex": 282,
|
||
"enabled": true,
|
||
"type": "TextView",
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle",
|
||
"rect": {
|
||
"y": 169,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"hittable": false,
|
||
"depth": 38,
|
||
"index": 284,
|
||
"ref": "e285"
|
||
},
|
||
{
|
||
"index": 285,
|
||
"enabled": true,
|
||
"parentIndex": 284,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 169,
|
||
"height": 242,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"depth": 39,
|
||
"type": "TextView",
|
||
"label": "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle 4",
|
||
"ref": "e286"
|
||
},
|
||
{
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"parentIndex": 284,
|
||
"index": 286,
|
||
"value": "0%",
|
||
"rect": {
|
||
"y": 169,
|
||
"height": 242,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"depth": 39,
|
||
"hittable": false,
|
||
"ref": "e287"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"depth": 40,
|
||
"parentIndex": 286,
|
||
"enabled": true,
|
||
"index": 287,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 130,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"ref": "e288"
|
||
},
|
||
{
|
||
"index": 288,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"value": "0%",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 378,
|
||
"height": 30,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"parentIndex": 284,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"depth": 39,
|
||
"ref": "e289"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 405,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"enabled": true,
|
||
"index": 289,
|
||
"hittable": false,
|
||
"parentIndex": 288,
|
||
"depth": 40,
|
||
"ref": "e290"
|
||
},
|
||
{
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rath",
|
||
"rect": {
|
||
"y": 435,
|
||
"height": 176,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"hittable": false,
|
||
"index": 290,
|
||
"enabled": true,
|
||
"parentIndex": 279,
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"ref": "e291"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"index": 291,
|
||
"rect": {
|
||
"y": 435,
|
||
"height": 176,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"parentIndex": 290,
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rath",
|
||
"depth": 37,
|
||
"hittable": false,
|
||
"ref": "e292"
|
||
},
|
||
{
|
||
"index": 292,
|
||
"parentIndex": 291,
|
||
"depth": 38,
|
||
"rect": {
|
||
"y": 435,
|
||
"height": 176,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"ref": "e293"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 293,
|
||
"rect": {
|
||
"y": 435,
|
||
"height": 176,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"depth": 38,
|
||
"parentIndex": 291,
|
||
"type": "TextView",
|
||
"value": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rath",
|
||
"hittable": false,
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rath",
|
||
"ref": "e294"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 435,
|
||
"height": 176,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"index": 294,
|
||
"type": "TextView",
|
||
"label": "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rath",
|
||
"parentIndex": 293,
|
||
"hittable": false,
|
||
"depth": 39,
|
||
"ref": "e295"
|
||
},
|
||
{
|
||
"value": "0%",
|
||
"depth": 39,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 435,
|
||
"height": 176,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"parentIndex": 293,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"index": 295,
|
||
"ref": "e296"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 396,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"index": 296,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"parentIndex": 295,
|
||
"depth": 40,
|
||
"enabled": true,
|
||
"ref": "e297"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"value": "0%",
|
||
"parentIndex": 293,
|
||
"enabled": true,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"depth": 39,
|
||
"rect": {
|
||
"y": 578,
|
||
"height": 30,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"index": 297,
|
||
"ref": "e298"
|
||
},
|
||
{
|
||
"index": 298,
|
||
"hittable": false,
|
||
"depth": 40,
|
||
"rect": {
|
||
"y": 605,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"parentIndex": 297,
|
||
"ref": "e299"
|
||
},
|
||
{
|
||
"index": 299,
|
||
"rect": {
|
||
"y": 635,
|
||
"height": 22,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"parentIndex": 279,
|
||
"label": "(end of synthetic stream)",
|
||
"type": "Other",
|
||
"depth": 36,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e300"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"label": "(end of synthetic stream)",
|
||
"enabled": true,
|
||
"depth": 37,
|
||
"rect": {
|
||
"y": 635,
|
||
"height": 22,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"parentIndex": 299,
|
||
"index": 300,
|
||
"ref": "e301"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 635,
|
||
"height": 22,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"index": 301,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 300,
|
||
"depth": 38,
|
||
"ref": "e302"
|
||
},
|
||
{
|
||
"type": "TextView",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"parentIndex": 300,
|
||
"index": 302,
|
||
"depth": 38,
|
||
"label": "(end of synthetic stream)",
|
||
"rect": {
|
||
"y": 635,
|
||
"height": 22,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"value": "(end of synthetic stream)",
|
||
"ref": "e303"
|
||
},
|
||
{
|
||
"type": "TextView",
|
||
"label": "(end of synthetic stream)",
|
||
"rect": {
|
||
"y": 635,
|
||
"height": 22,
|
||
"width": 183.234375,
|
||
"x": 20
|
||
},
|
||
"index": 303,
|
||
"depth": 39,
|
||
"parentIndex": 302,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"ref": "e304"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 304,
|
||
"value": "0%",
|
||
"rect": {
|
||
"y": 635,
|
||
"height": 22,
|
||
"width": 30,
|
||
"x": 349
|
||
},
|
||
"depth": 39,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"parentIndex": 302,
|
||
"type": "Other",
|
||
"ref": "e305"
|
||
},
|
||
{
|
||
"index": 305,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"depth": 40,
|
||
"enabled": true,
|
||
"parentIndex": 304,
|
||
"rect": {
|
||
"y": 596,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 376
|
||
},
|
||
"ref": "e306"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"index": 306,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"value": "0%",
|
||
"hittable": false,
|
||
"parentIndex": 302,
|
||
"rect": {
|
||
"y": 643,
|
||
"height": 11,
|
||
"width": 362,
|
||
"x": 20
|
||
},
|
||
"enabled": true,
|
||
"depth": 39,
|
||
"ref": "e307"
|
||
},
|
||
{
|
||
"index": 307,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"parentIndex": 306,
|
||
"depth": 40,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 651,
|
||
"height": 3,
|
||
"width": 36,
|
||
"x": -19
|
||
},
|
||
"ref": "e308"
|
||
},
|
||
{
|
||
"label": "Copy turn",
|
||
"index": 308,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 669,
|
||
"height": 67,
|
||
"width": 378,
|
||
"x": 12
|
||
},
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"depth": 35,
|
||
"parentIndex": 73,
|
||
"ref": "e309"
|
||
},
|
||
{
|
||
"type": "Button",
|
||
"depth": 36,
|
||
"rect": {
|
||
"y": 682,
|
||
"height": 22,
|
||
"width": 22,
|
||
"x": 16
|
||
},
|
||
"hittable": false,
|
||
"label": "Copy turn",
|
||
"enabled": true,
|
||
"parentIndex": 308,
|
||
"index": 309,
|
||
"ref": "e310"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 682,
|
||
"height": 22,
|
||
"width": 22,
|
||
"x": 46
|
||
},
|
||
"parentIndex": 308,
|
||
"index": 310,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"label": "Fork chat from here",
|
||
"depth": 36,
|
||
"ref": "e311"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 682,
|
||
"height": 22,
|
||
"width": 22,
|
||
"x": 46
|
||
},
|
||
"parentIndex": 310,
|
||
"type": "Button",
|
||
"enabled": true,
|
||
"identifier": "assistant-fork-menu-trigger",
|
||
"label": "Fork chat from here",
|
||
"hittable": false,
|
||
"index": 311,
|
||
"depth": 37,
|
||
"ref": "e312"
|
||
},
|
||
{
|
||
"parentIndex": 308,
|
||
"label": "Worked for 9s, ended 8:44 PM",
|
||
"depth": 36,
|
||
"rect": {
|
||
"y": 685.3333332538605,
|
||
"height": 15.666671752929688,
|
||
"width": 85.33332824707031,
|
||
"x": 76
|
||
},
|
||
"type": "Button",
|
||
"hittable": false,
|
||
"index": 312,
|
||
"enabled": true,
|
||
"ref": "e313"
|
||
},
|
||
{
|
||
"depth": 33,
|
||
"value": "0%",
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"rect": {
|
||
"y": 466,
|
||
"height": 30,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"parentIndex": 71,
|
||
"hittable": false,
|
||
"index": 313,
|
||
"ref": "e314"
|
||
},
|
||
{
|
||
"depth": 34,
|
||
"index": 314,
|
||
"parentIndex": 313,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 466,
|
||
"height": 3,
|
||
"width": 393,
|
||
"x": 3
|
||
},
|
||
"ref": "e315"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 463,
|
||
"height": 273,
|
||
"width": 30,
|
||
"x": 369
|
||
},
|
||
"value": "0%",
|
||
"parentIndex": 71,
|
||
"enabled": true,
|
||
"index": 315,
|
||
"type": "Other",
|
||
"depth": 33,
|
||
"hittable": false,
|
||
"label": "Vertical scroll bar, 13 pages",
|
||
"ref": "e316"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"parentIndex": 315,
|
||
"rect": {
|
||
"y": 734,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 396
|
||
},
|
||
"hittable": false,
|
||
"depth": 34,
|
||
"enabled": true,
|
||
"index": 316,
|
||
"ref": "e317"
|
||
},
|
||
{
|
||
"label": "Vertical scroll bar, 13 pages",
|
||
"type": "Other",
|
||
"value": "0%",
|
||
"rect": {
|
||
"y": 463,
|
||
"height": 273,
|
||
"width": 30,
|
||
"x": 369
|
||
},
|
||
"hittable": false,
|
||
"index": 317,
|
||
"depth": 33,
|
||
"parentIndex": 71,
|
||
"enabled": true,
|
||
"ref": "e318"
|
||
},
|
||
{
|
||
"depth": 34,
|
||
"parentIndex": 317,
|
||
"enabled": true,
|
||
"index": 318,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 734,
|
||
"height": 36,
|
||
"width": 3,
|
||
"x": 396
|
||
},
|
||
"ref": "e319"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 466,
|
||
"height": 30,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 33,
|
||
"index": 319,
|
||
"value": "0%",
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"hittable": false,
|
||
"parentIndex": 71,
|
||
"ref": "e320"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 466,
|
||
"height": 3,
|
||
"width": 393,
|
||
"x": 3
|
||
},
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"depth": 34,
|
||
"index": 320,
|
||
"parentIndex": 319,
|
||
"ref": "e321"
|
||
},
|
||
{
|
||
"index": 321,
|
||
"identifier": "composer-viewport-content",
|
||
"rect": {
|
||
"y": 736,
|
||
"height": 138,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 29,
|
||
"type": "Other",
|
||
"parentIndex": 65,
|
||
"hittable": false,
|
||
"label": "Message agent... Message, @files, /commands",
|
||
"enabled": true,
|
||
"ref": "e322"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 736,
|
||
"height": 88,
|
||
"width": 370,
|
||
"x": 16
|
||
},
|
||
"hittable": false,
|
||
"identifier": "message-input-root",
|
||
"depth": 30,
|
||
"index": 322,
|
||
"parentIndex": 321,
|
||
"ref": "e323"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"parentIndex": 321,
|
||
"depth": 30,
|
||
"rect": {
|
||
"y": 736,
|
||
"height": 88,
|
||
"width": 370,
|
||
"x": 16
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 323,
|
||
"ref": "e324"
|
||
},
|
||
{
|
||
"label": "Message agent... Message, @files, /commands",
|
||
"enabled": true,
|
||
"parentIndex": 321,
|
||
"hittable": false,
|
||
"depth": 30,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 745,
|
||
"height": 30,
|
||
"width": 344,
|
||
"x": 29
|
||
},
|
||
"index": 324,
|
||
"ref": "e325"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"label": "Message agent... Message, @files, /commands",
|
||
"enabled": true,
|
||
"type": "TextView",
|
||
"index": 325,
|
||
"depth": 31,
|
||
"parentIndex": 324,
|
||
"rect": {
|
||
"y": 745,
|
||
"height": 30,
|
||
"width": 344,
|
||
"x": 29
|
||
},
|
||
"ref": "e326"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 745,
|
||
"height": 30,
|
||
"width": 30,
|
||
"x": 340
|
||
},
|
||
"parentIndex": 325,
|
||
"index": 326,
|
||
"label": "Vertical scroll bar, 1 page",
|
||
"type": "Other",
|
||
"depth": 32,
|
||
"enabled": true,
|
||
"value": "0%",
|
||
"hittable": false,
|
||
"ref": "e327"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 766.3332926432291,
|
||
"height": 38.00002034505212,
|
||
"width": 3,
|
||
"x": 367
|
||
},
|
||
"index": 327,
|
||
"enabled": true,
|
||
"parentIndex": 326,
|
||
"hittable": false,
|
||
"depth": 33,
|
||
"type": "Other",
|
||
"ref": "e328"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"depth": 32,
|
||
"label": "Horizontal scroll bar, 1 page",
|
||
"value": "0%",
|
||
"index": 328,
|
||
"parentIndex": 325,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 757,
|
||
"height": 15,
|
||
"width": 344,
|
||
"x": 29
|
||
},
|
||
"ref": "e329"
|
||
},
|
||
{
|
||
"index": 329,
|
||
"depth": 33,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 769,
|
||
"height": 3,
|
||
"width": 338,
|
||
"x": 32
|
||
},
|
||
"parentIndex": 328,
|
||
"ref": "e330"
|
||
},
|
||
{
|
||
"depth": 30,
|
||
"identifier": "message-input-attach-button",
|
||
"index": 330,
|
||
"label": "Add attachment",
|
||
"parentIndex": 321,
|
||
"type": "Button",
|
||
"rect": {
|
||
"y": 787,
|
||
"height": 28,
|
||
"width": 28,
|
||
"x": 23
|
||
},
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"ref": "e331"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"index": 331,
|
||
"rect": {
|
||
"y": 787,
|
||
"height": 28,
|
||
"width": 232,
|
||
"x": 51
|
||
},
|
||
"type": "Other",
|
||
"label": "Select model (Ten second stream)",
|
||
"depth": 30,
|
||
"enabled": true,
|
||
"parentIndex": 321,
|
||
"ref": "e332"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 787,
|
||
"height": 28,
|
||
"width": 202,
|
||
"x": 51
|
||
},
|
||
"identifier": "combined-model-selector",
|
||
"hittable": false,
|
||
"depth": 31,
|
||
"label": "Select model (Ten second stream)",
|
||
"parentIndex": 331,
|
||
"type": "Button",
|
||
"index": 332,
|
||
"enabled": true,
|
||
"ref": "e333"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 787,
|
||
"height": 28,
|
||
"width": 28,
|
||
"x": 283
|
||
},
|
||
"hittable": false,
|
||
"type": "Image",
|
||
"enabled": true,
|
||
"depth": 30,
|
||
"parentIndex": 321,
|
||
"index": 333,
|
||
"identifier": "context-window-meter",
|
||
"label": "Context window 3% used",
|
||
"ref": "e334"
|
||
},
|
||
{
|
||
"depth": 30,
|
||
"parentIndex": 321,
|
||
"label": "Start dictation",
|
||
"rect": {
|
||
"y": 787,
|
||
"height": 28,
|
||
"width": 28,
|
||
"x": 315
|
||
},
|
||
"index": 334,
|
||
"type": "Button",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"ref": "e335"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 787,
|
||
"height": 28,
|
||
"width": 28,
|
||
"x": 351
|
||
},
|
||
"type": "Button",
|
||
"label": "Enable Voice mode",
|
||
"index": 335,
|
||
"enabled": true,
|
||
"depth": 30,
|
||
"parentIndex": 321,
|
||
"hittable": false,
|
||
"ref": "e336"
|
||
},
|
||
{
|
||
"index": 336,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"type": "Other",
|
||
"parentIndex": 16,
|
||
"hittable": false,
|
||
"depth": 11,
|
||
"enabled": true,
|
||
"ref": "e337"
|
||
},
|
||
{
|
||
"index": 337,
|
||
"parentIndex": 10,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"depth": 7,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"ref": "e338"
|
||
},
|
||
{
|
||
"depth": 8,
|
||
"parentIndex": 337,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 338,
|
||
"ref": "e339"
|
||
},
|
||
{
|
||
"parentIndex": 338,
|
||
"type": "Other",
|
||
"depth": 9,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"index": 339,
|
||
"ref": "e340"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"depth": 1,
|
||
"type": "Window",
|
||
"index": 340,
|
||
"parentIndex": 0,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e341"
|
||
},
|
||
{
|
||
"parentIndex": 340,
|
||
"index": 341,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"depth": 2,
|
||
"ref": "e342"
|
||
},
|
||
{
|
||
"parentIndex": 341,
|
||
"index": 342,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"depth": 3,
|
||
"ref": "e343"
|
||
},
|
||
{
|
||
"parentIndex": 341,
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 336,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 343,
|
||
"depth": 3,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"ref": "e344"
|
||
},
|
||
{
|
||
"depth": 4,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 278,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 343,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"index": 344,
|
||
"enabled": true,
|
||
"ref": "e345"
|
||
},
|
||
{
|
||
"depth": 1,
|
||
"hittable": true,
|
||
"label": "Emoji",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 0,
|
||
"index": 345,
|
||
"type": "Window",
|
||
"ref": "e346"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"label": "Emoji",
|
||
"index": 346,
|
||
"parentIndex": 345,
|
||
"hittable": true,
|
||
"type": "Other",
|
||
"depth": 2,
|
||
"rect": {
|
||
"y": 0,
|
||
"height": 874,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e347"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"depth": 3,
|
||
"label": "Emoji",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 336,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 347,
|
||
"type": "Other",
|
||
"parentIndex": 346,
|
||
"ref": "e348"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"depth": 4,
|
||
"enabled": true,
|
||
"index": 348,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 347,
|
||
"ref": "e349"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"depth": 5,
|
||
"enabled": true,
|
||
"index": 349,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 348,
|
||
"ref": "e350"
|
||
},
|
||
{
|
||
"index": 350,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"parentIndex": 349,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 6,
|
||
"ref": "e351"
|
||
},
|
||
{
|
||
"label": "Typing Predictions",
|
||
"enabled": true,
|
||
"identifier": "SystemInputAssistantView",
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 4,
|
||
"index": 351,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"parentIndex": 347,
|
||
"ref": "e352"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"index": 352,
|
||
"label": "Typing Predictions",
|
||
"depth": 5,
|
||
"parentIndex": 351,
|
||
"ref": "e353"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"identifier": "CenterPageView",
|
||
"parentIndex": 352,
|
||
"hittable": false,
|
||
"index": 353,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 6,
|
||
"label": "Typing Predictions",
|
||
"enabled": true,
|
||
"ref": "e354"
|
||
},
|
||
{
|
||
"parentIndex": 353,
|
||
"rect": {
|
||
"y": 274,
|
||
"height": 1245,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 7,
|
||
"type": "Other",
|
||
"index": 354,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e355"
|
||
},
|
||
{
|
||
"depth": 8,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 354,
|
||
"index": 355,
|
||
"type": "ScrollView",
|
||
"ref": "e356"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 7,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 353,
|
||
"type": "Other",
|
||
"label": "Typing Predictions",
|
||
"index": 356,
|
||
"ref": "e357"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"index": 357,
|
||
"label": "Typing Predictions",
|
||
"depth": 8,
|
||
"parentIndex": 356,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"ref": "e358"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"depth": 9,
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 358,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 357,
|
||
"ref": "e359"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 358,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"depth": 10,
|
||
"index": 359,
|
||
"ref": "e360"
|
||
},
|
||
{
|
||
"depth": 11,
|
||
"index": 360,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 134,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 359,
|
||
"ref": "e361"
|
||
},
|
||
{
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 134,
|
||
"x": 134
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 359,
|
||
"depth": 11,
|
||
"enabled": true,
|
||
"index": 361,
|
||
"ref": "e362"
|
||
},
|
||
{
|
||
"index": 362,
|
||
"enabled": true,
|
||
"parentIndex": 359,
|
||
"depth": 11,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 874,
|
||
"height": 45,
|
||
"width": 134,
|
||
"x": 268
|
||
},
|
||
"ref": "e363"
|
||
},
|
||
{
|
||
"index": 363,
|
||
"type": "Other",
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 919,
|
||
"height": 233,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"parentIndex": 347,
|
||
"depth": 4,
|
||
"ref": "e364"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"depth": 5,
|
||
"index": 364,
|
||
"parentIndex": 363,
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"rect": {
|
||
"y": 919,
|
||
"height": 291,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"ref": "e365"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"index": 365,
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"parentIndex": 364,
|
||
"rect": {
|
||
"y": 919,
|
||
"height": 291,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 6,
|
||
"ref": "e366"
|
||
},
|
||
{
|
||
"depth": 7,
|
||
"parentIndex": 365,
|
||
"type": "Other",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 919,
|
||
"height": 291,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"index": 366,
|
||
"ref": "e367"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"type": "Other",
|
||
"label": "q",
|
||
"rect": {
|
||
"y": 919,
|
||
"height": 233,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 4,
|
||
"parentIndex": 347,
|
||
"hittable": false,
|
||
"index": 367,
|
||
"ref": "e368"
|
||
},
|
||
{
|
||
"type": "Keyboard",
|
||
"enabled": true,
|
||
"depth": 5,
|
||
"hittable": false,
|
||
"label": "q",
|
||
"rect": {
|
||
"y": 919,
|
||
"height": 233,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"parentIndex": 367,
|
||
"index": 368,
|
||
"ref": "e369"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 919,
|
||
"height": 233,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"type": "Other",
|
||
"depth": 6,
|
||
"parentIndex": 368,
|
||
"hittable": false,
|
||
"index": 369,
|
||
"label": "q",
|
||
"ref": "e370"
|
||
},
|
||
{
|
||
"parentIndex": 369,
|
||
"type": "Other",
|
||
"depth": 7,
|
||
"identifier": "UIKeyboardLayoutStar Preview",
|
||
"index": 370,
|
||
"rect": {
|
||
"y": 919,
|
||
"height": 233,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"label": "q",
|
||
"ref": "e371"
|
||
},
|
||
{
|
||
"depth": 8,
|
||
"parentIndex": 370,
|
||
"enabled": true,
|
||
"type": "Key",
|
||
"hittable": false,
|
||
"label": "q",
|
||
"index": 371,
|
||
"rect": {
|
||
"y": 926,
|
||
"height": 46,
|
||
"width": 40.333333333333336,
|
||
"x": 0
|
||
},
|
||
"ref": "e372"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 926,
|
||
"height": 46,
|
||
"width": 40.00000000000001,
|
||
"x": 40.333333333333336
|
||
},
|
||
"depth": 8,
|
||
"type": "Key",
|
||
"label": "w",
|
||
"parentIndex": 370,
|
||
"index": 372,
|
||
"hittable": false,
|
||
"ref": "e373"
|
||
},
|
||
{
|
||
"label": "e",
|
||
"index": 373,
|
||
"rect": {
|
||
"y": 926,
|
||
"height": 46,
|
||
"width": 40.33333333333334,
|
||
"x": 80.33333333333334
|
||
},
|
||
"type": "Key",
|
||
"enabled": true,
|
||
"depth": 8,
|
||
"parentIndex": 370,
|
||
"hittable": false,
|
||
"ref": "e374"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 926,
|
||
"height": 46,
|
||
"width": 40,
|
||
"x": 120.66666666666669
|
||
},
|
||
"parentIndex": 370,
|
||
"depth": 8,
|
||
"label": "r",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"type": "Key",
|
||
"index": 374,
|
||
"ref": "e375"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"index": 375,
|
||
"rect": {
|
||
"y": 926,
|
||
"height": 46,
|
||
"width": 40.33333333333334,
|
||
"x": 160.66666666666669
|
||
},
|
||
"label": "t",
|
||
"type": "Key",
|
||
"parentIndex": 370,
|
||
"depth": 8,
|
||
"ref": "e376"
|
||
},
|
||
{
|
||
"index": 376,
|
||
"type": "Key",
|
||
"depth": 8,
|
||
"hittable": false,
|
||
"label": "y",
|
||
"enabled": true,
|
||
"parentIndex": 370,
|
||
"rect": {
|
||
"y": 926,
|
||
"height": 46,
|
||
"width": 40.33333333333334,
|
||
"x": 201.00000000000003
|
||
},
|
||
"ref": "e377"
|
||
},
|
||
{
|
||
"label": "u",
|
||
"rect": {
|
||
"y": 926,
|
||
"height": 46,
|
||
"width": 40,
|
||
"x": 241.33333333333337
|
||
},
|
||
"parentIndex": 370,
|
||
"hittable": false,
|
||
"type": "Key",
|
||
"index": 377,
|
||
"depth": 8,
|
||
"enabled": true,
|
||
"ref": "e378"
|
||
},
|
||
{
|
||
"label": "i",
|
||
"index": 378,
|
||
"type": "Key",
|
||
"parentIndex": 370,
|
||
"depth": 8,
|
||
"rect": {
|
||
"y": 926,
|
||
"height": 46,
|
||
"width": 40.333333333333314,
|
||
"x": 281.33333333333337
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e379"
|
||
},
|
||
{
|
||
"index": 379,
|
||
"label": "o",
|
||
"rect": {
|
||
"y": 926,
|
||
"height": 46,
|
||
"width": 40,
|
||
"x": 321.6666666666667
|
||
},
|
||
"parentIndex": 370,
|
||
"type": "Key",
|
||
"enabled": true,
|
||
"depth": 8,
|
||
"hittable": false,
|
||
"ref": "e380"
|
||
},
|
||
{
|
||
"parentIndex": 370,
|
||
"depth": 8,
|
||
"hittable": false,
|
||
"index": 380,
|
||
"rect": {
|
||
"y": 926,
|
||
"height": 46,
|
||
"width": 40.333333333333314,
|
||
"x": 361.6666666666667
|
||
},
|
||
"enabled": true,
|
||
"label": "p",
|
||
"type": "Key",
|
||
"ref": "e381"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"type": "Key",
|
||
"label": "a",
|
||
"index": 381,
|
||
"rect": {
|
||
"y": 980,
|
||
"height": 46,
|
||
"width": 40.33333333333333,
|
||
"x": 19.666666666666668
|
||
},
|
||
"depth": 8,
|
||
"parentIndex": 370,
|
||
"ref": "e382"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Key",
|
||
"label": "s",
|
||
"index": 382,
|
||
"rect": {
|
||
"y": 980,
|
||
"height": 46,
|
||
"width": 40.33333333333334,
|
||
"x": 60
|
||
},
|
||
"depth": 8,
|
||
"parentIndex": 370,
|
||
"enabled": true,
|
||
"ref": "e383"
|
||
},
|
||
{
|
||
"index": 383,
|
||
"enabled": true,
|
||
"label": "d",
|
||
"parentIndex": 370,
|
||
"rect": {
|
||
"y": 980,
|
||
"height": 46,
|
||
"width": 40,
|
||
"x": 100.33333333333334
|
||
},
|
||
"type": "Key",
|
||
"depth": 8,
|
||
"hittable": false,
|
||
"ref": "e384"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Key",
|
||
"parentIndex": 370,
|
||
"enabled": true,
|
||
"label": "f",
|
||
"index": 384,
|
||
"depth": 8,
|
||
"rect": {
|
||
"y": 980,
|
||
"height": 46,
|
||
"width": 40.33333333333334,
|
||
"x": 140.33333333333334
|
||
},
|
||
"ref": "e385"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 980,
|
||
"height": 46,
|
||
"width": 40,
|
||
"x": 181.2026666666667
|
||
},
|
||
"type": "Key",
|
||
"index": 385,
|
||
"enabled": true,
|
||
"depth": 8,
|
||
"parentIndex": 370,
|
||
"label": "g",
|
||
"ref": "e386"
|
||
},
|
||
{
|
||
"label": "h",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 980,
|
||
"height": 46,
|
||
"width": 40.333333333333314,
|
||
"x": 221.2026666666667
|
||
},
|
||
"depth": 8,
|
||
"index": 386,
|
||
"type": "Key",
|
||
"hittable": false,
|
||
"parentIndex": 370,
|
||
"ref": "e387"
|
||
},
|
||
{
|
||
"type": "Key",
|
||
"parentIndex": 370,
|
||
"label": "j",
|
||
"index": 387,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 980,
|
||
"height": 46,
|
||
"width": 40,
|
||
"x": 261.536
|
||
},
|
||
"depth": 8,
|
||
"enabled": true,
|
||
"ref": "e388"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 980,
|
||
"height": 46,
|
||
"width": 40.333333333333314,
|
||
"x": 301.536
|
||
},
|
||
"label": "k",
|
||
"depth": 8,
|
||
"parentIndex": 370,
|
||
"index": 388,
|
||
"type": "Key",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"ref": "e389"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"parentIndex": 370,
|
||
"depth": 8,
|
||
"label": "l",
|
||
"index": 389,
|
||
"rect": {
|
||
"y": 980,
|
||
"height": 46,
|
||
"width": 40.333333333333314,
|
||
"x": 341.8693333333333
|
||
},
|
||
"hittable": false,
|
||
"type": "Key",
|
||
"ref": "e390"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 1034,
|
||
"height": 46,
|
||
"width": 51.333333333333336,
|
||
"x": 0
|
||
},
|
||
"enabled": true,
|
||
"index": 390,
|
||
"type": "Button",
|
||
"identifier": "shift",
|
||
"label": "shift",
|
||
"hittable": false,
|
||
"depth": 8,
|
||
"parentIndex": 370,
|
||
"ref": "e391"
|
||
},
|
||
{
|
||
"parentIndex": 370,
|
||
"index": 391,
|
||
"rect": {
|
||
"y": 1034,
|
||
"height": 46,
|
||
"width": 40.33333333333334,
|
||
"x": 60
|
||
},
|
||
"depth": 8,
|
||
"label": "z",
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"type": "Key",
|
||
"ref": "e392"
|
||
},
|
||
{
|
||
"index": 392,
|
||
"label": "x",
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"depth": 8,
|
||
"type": "Key",
|
||
"rect": {
|
||
"y": 1034,
|
||
"height": 46,
|
||
"width": 40,
|
||
"x": 100.33333333333334
|
||
},
|
||
"parentIndex": 370,
|
||
"ref": "e393"
|
||
},
|
||
{
|
||
"depth": 8,
|
||
"enabled": true,
|
||
"index": 393,
|
||
"rect": {
|
||
"y": 1034,
|
||
"height": 46,
|
||
"width": 40.33333333333334,
|
||
"x": 140.33333333333334
|
||
},
|
||
"hittable": false,
|
||
"type": "Key",
|
||
"label": "c",
|
||
"parentIndex": 370,
|
||
"ref": "e394"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 1034,
|
||
"height": 46,
|
||
"width": 40,
|
||
"x": 181.2026666666667
|
||
},
|
||
"depth": 8,
|
||
"enabled": true,
|
||
"type": "Key",
|
||
"hittable": false,
|
||
"label": "v",
|
||
"parentIndex": 370,
|
||
"index": 394,
|
||
"ref": "e395"
|
||
},
|
||
{
|
||
"parentIndex": 370,
|
||
"type": "Key",
|
||
"depth": 8,
|
||
"index": 395,
|
||
"rect": {
|
||
"y": 1034,
|
||
"height": 46,
|
||
"width": 40.333333333333314,
|
||
"x": 221.2026666666667
|
||
},
|
||
"hittable": false,
|
||
"label": "b",
|
||
"enabled": true,
|
||
"ref": "e396"
|
||
},
|
||
{
|
||
"label": "n",
|
||
"index": 396,
|
||
"depth": 8,
|
||
"hittable": false,
|
||
"rect": {
|
||
"y": 1034,
|
||
"height": 46,
|
||
"width": 40,
|
||
"x": 261.536
|
||
},
|
||
"type": "Key",
|
||
"enabled": true,
|
||
"parentIndex": 370,
|
||
"ref": "e397"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"type": "Key",
|
||
"parentIndex": 370,
|
||
"label": "m",
|
||
"index": 397,
|
||
"rect": {
|
||
"y": 1034,
|
||
"height": 46,
|
||
"width": 40.333333333333314,
|
||
"x": 301.536
|
||
},
|
||
"depth": 8,
|
||
"ref": "e398"
|
||
},
|
||
{
|
||
"depth": 8,
|
||
"type": "Key",
|
||
"index": 398,
|
||
"identifier": "delete",
|
||
"label": "delete",
|
||
"rect": {
|
||
"y": 1034,
|
||
"height": 46,
|
||
"width": 51.333333333333314,
|
||
"x": 350.42133333333334
|
||
},
|
||
"enabled": true,
|
||
"hittable": false,
|
||
"parentIndex": 370,
|
||
"ref": "e399"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"label": "numbers",
|
||
"enabled": true,
|
||
"index": 399,
|
||
"type": "Key",
|
||
"identifier": "more",
|
||
"rect": {
|
||
"y": 1088,
|
||
"height": 46,
|
||
"width": 101,
|
||
"x": 0
|
||
},
|
||
"depth": 8,
|
||
"parentIndex": 370,
|
||
"ref": "e400"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 1088,
|
||
"height": 46,
|
||
"width": 201.33333333333334,
|
||
"x": 100.33333333333334
|
||
},
|
||
"parentIndex": 370,
|
||
"label": "space",
|
||
"depth": 8,
|
||
"type": "Key",
|
||
"index": 400,
|
||
"identifier": "space",
|
||
"hittable": false,
|
||
"ref": "e401"
|
||
},
|
||
{
|
||
"identifier": "Return",
|
||
"depth": 8,
|
||
"parentIndex": 370,
|
||
"label": "return",
|
||
"enabled": true,
|
||
"rect": {
|
||
"y": 1088,
|
||
"height": 46,
|
||
"width": 100.33333333333331,
|
||
"x": 301.6666666666667
|
||
},
|
||
"hittable": false,
|
||
"index": 401,
|
||
"type": "Button",
|
||
"ref": "e402"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"type": "Other",
|
||
"label": "Emoji",
|
||
"rect": {
|
||
"y": 919,
|
||
"height": 291,
|
||
"width": 402,
|
||
"x": 0
|
||
},
|
||
"depth": 4,
|
||
"parentIndex": 347,
|
||
"index": 402,
|
||
"enabled": true,
|
||
"ref": "e403"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"parentIndex": 402,
|
||
"rect": {
|
||
"y": 1141.6989567998571,
|
||
"height": 68.73516393505088,
|
||
"width": 68.0852958475086,
|
||
"x": 8.47726568115926
|
||
},
|
||
"type": "Button",
|
||
"label": "Emoji",
|
||
"index": 403,
|
||
"depth": 5,
|
||
"ref": "e404"
|
||
},
|
||
{
|
||
"index": 404,
|
||
"type": "StaticText",
|
||
"rect": {
|
||
"y": 1141.6989567998571,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 8.47726568115926
|
||
},
|
||
"enabled": true,
|
||
"depth": 6,
|
||
"hittable": false,
|
||
"parentIndex": 403,
|
||
"ref": "e405"
|
||
},
|
||
{
|
||
"enabled": true,
|
||
"label": "Dictate",
|
||
"identifier": "dictation",
|
||
"parentIndex": 402,
|
||
"rect": {
|
||
"y": 1141.3656234665239,
|
||
"height": 68.7351639350511,
|
||
"width": 68.08529584750863,
|
||
"x": 325.43743847133214
|
||
},
|
||
"hittable": false,
|
||
"depth": 5,
|
||
"index": 405,
|
||
"type": "Button",
|
||
"ref": "e406"
|
||
},
|
||
{
|
||
"parentIndex": 405,
|
||
"hittable": false,
|
||
"enabled": true,
|
||
"depth": 6,
|
||
"rect": {
|
||
"y": 1141.3656234665239,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 325.43743847133214
|
||
},
|
||
"type": "StaticText",
|
||
"index": 406,
|
||
"ref": "e407"
|
||
},
|
||
{
|
||
"hittable": false,
|
||
"parentIndex": 402,
|
||
"enabled": true,
|
||
"type": "Button",
|
||
"label": "Dictate",
|
||
"identifier": "dictation",
|
||
"rect": {
|
||
"y": 1141.3656234665239,
|
||
"height": 68.7351639350511,
|
||
"width": 68.08529584750863,
|
||
"x": 325.43743847133214
|
||
},
|
||
"depth": 5,
|
||
"index": 407,
|
||
"ref": "e408"
|
||
},
|
||
{
|
||
"rect": {
|
||
"y": 1141.3656234665239,
|
||
"height": 0,
|
||
"width": 0,
|
||
"x": 325.43743847133214
|
||
},
|
||
"hittable": false,
|
||
"parentIndex": 407,
|
||
"depth": 6,
|
||
"index": 408,
|
||
"enabled": true,
|
||
"type": "StaticText",
|
||
"ref": "e409"
|
||
}
|
||
],
|
||
"truncated": false,
|
||
"appName": "sh.paseo.debug",
|
||
"appBundleId": "sh.paseo.debug",
|
||
"visibility": {
|
||
"partial": false,
|
||
"visibleNodeCount": 409,
|
||
"totalNodeCount": 409,
|
||
"reasons": []
|
||
},
|
||
"snapshotQuality": {
|
||
"state": "healthy",
|
||
"backend": "tree"
|
||
},
|
||
"snapshotDiagnostics": {
|
||
"stats": {
|
||
"count": 35,
|
||
"p50Ms": 253,
|
||
"p95Ms": 1740,
|
||
"maxMs": 3250,
|
||
"slowThresholdMs": 1500,
|
||
"platform": "ios",
|
||
"backends": {
|
||
"xctest": 35
|
||
}
|
||
},
|
||
"warning": "Warning: ios snapshots are slow in this run: p95 1740ms over 35 captures. Possible causes: device load, app or dev server stuck, helper fallback, or stale daemon."
|
||
},
|
||
"refsGeneration": 776100
|
||
}
|
||
}
|