{"valid":false,"inputBytes":0,"sample":"{\n  \"draggable\": { \"type\": \"card\" },\n  \"targets\": [\n    {\n      \"id\": \"board\",\n      \"accept\": [\"card\", \"column\"],\n      \"result\": \"board\",\n      \"children\": [\n        {\n          \"id\": \"todo\",\n          \"accept\": \"card\",\n          \"result\": \"todo\",\n          \"children\": [\n            { \"id\": \"card-2\", \"accept\": \"card\" }\n          ]\n        },\n        { \"id\": \"done\", \"accept\": \"card\", \"canDrop\": false },\n        { \"id\": \"attachments\", \"accept\": \"BdndNativeTypes.File\" }\n      ]\n    }\n  ],\n  \"hover\": \"card-2\"\n}","notes":["No scenario was passed, so nothing was run. Sample is a kanban board: a 'card' hovered over a card that is itself a drop target, inside a column, inside the board - plus a column whose CanDropPredicate says no and an attachments zone that only takes files. Pass it, or your own page's draggable and targets in the same shape, as json to see the report. A target takes 'id', 'accept' (a type or an array; BdndNativeTypes.File and friends for native drags), 'acceptTypes', 'canDrop' (false emulates a CanDropPredicate answering false), 'result' (what its OnDrop sets as args.Result) and 'children'; 'hover' is the id of the target under the pointer, whose ancestors are hovered with it. A draggable whose type is a native one ('BdndNativeTypes.File') is a drag from outside the app."]}