Skip to content

Use monacco editor in the inspector request panel#82272

Merged
alexwizp merged 10 commits intoelastic:masterfrom
alexwizp:monacco
Nov 6, 2020
Merged

Use monacco editor in the inspector request panel#82272
alexwizp merged 10 commits intoelastic:masterfrom
alexwizp:monacco

Conversation

@alexwizp
Copy link
Copy Markdown
Contributor

@alexwizp alexwizp commented Nov 2, 2020

Closes: #81921

Summary

We should use Monaco as a read-only editor instead of EuiCodeBlock to present the request and response in the inspector requests panel, since EuiCodeBlock has very poor performance for larger responses and can easily freeze your page for some time (also it has no collapsing, which might be useful there).

Screens

image

Checklist

Delete any items that are not applicable to this PR.

For maintainers

@alexwizp
Copy link
Copy Markdown
Contributor Author

alexwizp commented Nov 3, 2020

@elasticmachine merge upstream

@alexwizp alexwizp self-assigned this Nov 3, 2020
@alexwizp alexwizp added Team:Visualizations Team label for Lens, elastic-charts, Graph, legacy editors (TSVB, Visualize, Timelion) t// v7.11.0 v8.0.0 Feature:Inspector Inspector infrastructure and implementations release_note:enhancement labels Nov 3, 2020
@alexwizp alexwizp requested review from stratoula and timroes November 3, 2020 13:10
@alexwizp alexwizp marked this pull request as ready for review November 3, 2020 13:10
@alexwizp alexwizp requested review from a team as code owners November 3, 2020 13:10
@elasticmachine
Copy link
Copy Markdown
Contributor

Pinging @elastic/kibana-app (Team:KibanaApp)

Copy link
Copy Markdown
Contributor

@nreese nreese left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for changing out the editor. This is much faster with large responses.
Maps changes LGTM
code review, tested in chrome

Copy link
Copy Markdown
Contributor

@ryankeairns ryankeairns left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@alexwizp I'll have a design PR for you that tidies up the styles a bit.

@alexwizp
Copy link
Copy Markdown
Contributor Author

alexwizp commented Nov 4, 2020

@elasticmachine merge upstream

Copy link
Copy Markdown
Contributor

@stratoula stratoula left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! I tested it locally on Chrome, it works much better for larger json. Moreover, we make the inspector bundle smaller which is always great!! 👏

// TODO: EUI to allow for custom classNames to inner elements
// Or supply this as default
> div {
.euiFlyoutBody__overflowContent {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm going to create a separate PR - after you merge this one - to clean this up a bit. I've got some changes in the works, but they're going to take more time to iron out across the various implementations (i.e. I was close but realized it broke the dashboard layout ;) ).

@alexwizp
Copy link
Copy Markdown
Contributor Author

alexwizp commented Nov 4, 2020

ping @elastic/kibana-app-arch

@alexwizp
Copy link
Copy Markdown
Contributor Author

alexwizp commented Nov 4, 2020

@elasticmachine merge upstream

@alexwizp
Copy link
Copy Markdown
Contributor Author

alexwizp commented Nov 5, 2020

@elasticmachine merge upstream

@alexwizp
Copy link
Copy Markdown
Contributor Author

alexwizp commented Nov 5, 2020

@lukeelmers @ppisljar we need someone from AppArch to review that, please.

@kibanamachine
Copy link
Copy Markdown
Contributor

💛 Build succeeded, but was flaky


Test Failures

X-Pack Alerting API Integration Tests.x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/disable·ts.alerting api integration security and spaces enabled Alerts disable space_1_all at space1 should still be able to disable alert when AAD is broken

Link to Jenkins

Standard Out

Failed Tests Reporter:
  - Test has not failed recently on tracked branches

[00:00:00]       │
[00:00:00]         └-: alerting api integration security and spaces enabled
[00:00:00]           └-> "before all" hook
[00:00:00]           └-> "before all" hook
[00:00:00]             │ debg creating space
[00:00:00]             │ debg created space
[00:00:00]             │ debg creating space
[00:00:01]             │ debg created space
[00:00:01]             │ debg creating space
[00:00:02]             │ info [o.e.c.m.MetadataCreateIndexService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] [ilm-history-4-000001] creating index, cause [api], templates [ilm-history], shards [1]/[0]
[00:00:02]             │ info [o.e.x.i.IndexLifecycleTransition] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] moving index [ilm-history-4-000001] from [null] to [{"phase":"new","action":"complete","name":"complete"}] in policy [ilm-history-ilm-policy]
[00:00:02]             │ info [o.e.c.r.a.AllocationService] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] current.health="GREEN" message="Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[ilm-history-4-000001][0]]])." previous.health="YELLOW" reason="shards started [[ilm-history-4-000001][0]]"
[00:00:02]             │ info [o.e.x.i.IndexLifecycleTransition] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] moving index [ilm-history-4-000001] from [{"phase":"new","action":"complete","name":"complete"}] to [{"phase":"hot","action":"unfollow","name":"wait-for-indexing-complete"}] in policy [ilm-history-ilm-policy]
[00:00:02]             │ info [o.e.x.i.IndexLifecycleTransition] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] moving index [ilm-history-4-000001] from [{"phase":"hot","action":"unfollow","name":"wait-for-indexing-complete"}] to [{"phase":"hot","action":"unfollow","name":"wait-for-follow-shard-tasks"}] in policy [ilm-history-ilm-policy]
[00:00:02]             │ debg created space
[00:00:02]             │ debg creating user no_kibana_privileges
[00:00:02]             │ info [o.e.x.s.a.u.TransportPutUserAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added user [no_kibana_privileges]
[00:00:02]             │ debg created user no_kibana_privileges
[00:00:02]             │ debg creating role no_kibana_privileges
[00:00:02]             │ info [o.e.x.s.a.r.TransportPutRoleAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added role [no_kibana_privileges]
[00:00:02]             │ debg creating user superuser
[00:00:02]             │ info [o.e.x.s.a.u.TransportPutUserAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added user [superuser]
[00:00:02]             │ debg created user superuser
[00:00:02]             │ debg creating user global_read
[00:00:02]             │ info [o.e.x.s.a.u.TransportPutUserAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added user [global_read]
[00:00:02]             │ debg created user global_read
[00:00:02]             │ debg creating role global_read_role
[00:00:03]             │ info [o.e.x.s.a.r.TransportPutRoleAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added role [global_read_role]
[00:00:03]             │ debg creating user space_1_all
[00:00:03]             │ info [o.e.x.s.a.u.TransportPutUserAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added user [space_1_all]
[00:00:03]             │ debg created user space_1_all
[00:00:03]             │ debg creating role space_1_all_role
[00:00:03]             │ info [o.e.x.s.a.r.TransportPutRoleAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added role [space_1_all_role]
[00:00:03]             │ debg creating user space_1_all_with_restricted_fixture
[00:00:03]             │ info [o.e.x.s.a.u.TransportPutUserAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added user [space_1_all_with_restricted_fixture]
[00:00:03]             │ debg created user space_1_all_with_restricted_fixture
[00:00:03]             │ debg creating role space_1_all_with_restricted_fixture_role
[00:00:03]             │ info [o.e.x.s.a.r.TransportPutRoleAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added role [space_1_all_with_restricted_fixture_role]
[00:00:03]             │ debg creating user space_1_all_alerts_none_actions
[00:00:03]             │ info [o.e.x.s.a.u.TransportPutUserAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added user [space_1_all_alerts_none_actions]
[00:00:03]             │ debg created user space_1_all_alerts_none_actions
[00:00:03]             │ debg creating role space_1_all_alerts_none_actions_role
[00:00:03]             │ info [o.e.x.s.a.r.TransportPutRoleAction] [kibana-ci-immutable-ubuntu-18-tests-xxl-1604575806956203453] added role [space_1_all_alerts_none_actions_role]
[00:03:51]           └-: Alerts
[00:03:51]             └-> "before all" hook
[00:11:12]             └-: disable
[00:11:12]               └-> "before all" hook
[00:12:03]               └-: space_1_all at space1
[00:12:03]                 └-> "before all" hook
[00:12:03]                 └-> should handle disable alert request appropriately
[00:12:03]                   └-> "before each" hook: global before each
[00:12:03]                   │ proc [kibana]   log   [12:14:20.250] [info][eventLog][plugins] event logged: {"event":{"provider":"alerting","action":"execute","start":"2020-11-05T12:14:20.249Z","end":"2020-11-05T12:14:20.249Z","duration":0,"outcome":"success"},"kibana":{"saved_objects":[{"rel":"primary","type":"alert","id":"4cd5a46f-3cb4-4b2f-8898-fe97b14b4a04","namespace":"other"}],"server_uuid":"5b2de169-2785-441b-ae8c-186a1936b17d"},"message":"alert executed: test.noop:4cd5a46f-3cb4-4b2f-8898-fe97b14b4a04: 'abc'","@timestamp":"2020-11-05T12:14:20.249Z","ecs":{"version":"1.5.0"}}
[00:12:07]                   │ proc [kibana]   log   [12:14:24.153] [error][alerting][alerts][plugins][plugins] Executing Alert "9926083e-6285-4171-8893-c69bea6d8e94" has resulted in Error: [security_exception] missing authentication credentials for REST request [/_security/user/_has_privileges], with { header={ WWW-Authenticate={ 0="Basic realm=\"security\" charset=\"UTF-8\"" & 1="Bearer realm=\"security\"" & 2="ApiKey" } } }
[00:12:07]                   └- ✓ pass  (4.5s) "alerting api integration security and spaces enabled Alerts disable space_1_all at space1 should handle disable alert request appropriately"
[00:12:07]                 └-> should handle disable alert request appropriately when consumer is the same as producer
[00:12:07]                   └-> "before each" hook: global before each
[00:12:10]                   └- ✓ pass  (2.6s) "alerting api integration security and spaces enabled Alerts disable space_1_all at space1 should handle disable alert request appropriately when consumer is the same as producer"
[00:12:10]                 └-> should handle disable alert request appropriately when consumer is not the producer
[00:12:10]                   └-> "before each" hook: global before each
[00:12:12]                   └- ✓ pass  (2.0s) "alerting api integration security and spaces enabled Alerts disable space_1_all at space1 should handle disable alert request appropriately when consumer is not the producer"
[00:12:12]                 └-> should handle disable alert request appropriately when consumer is "alerts"
[00:12:12]                   └-> "before each" hook: global before each
[00:12:12]                   │ proc [kibana]   log   [12:14:29.262] [info][eventLog][plugins] event logged: {"event":{"provider":"alerting","action":"execute","start":"2020-11-05T12:14:29.261Z","end":"2020-11-05T12:14:29.261Z","duration":0,"outcome":"success"},"kibana":{"saved_objects":[{"rel":"primary","type":"alert","id":"479687e5-dc44-4509-9dc8-178e8983ec02","namespace":"space1"}],"server_uuid":"5b2de169-2785-441b-ae8c-186a1936b17d"},"message":"alert executed: test.restricted-noop:479687e5-dc44-4509-9dc8-178e8983ec02: 'abc'","@timestamp":"2020-11-05T12:14:29.261Z","ecs":{"version":"1.5.0"}}
[00:12:12]                   │ proc [kibana]   log   [12:14:29.266] [info][eventLog][plugins] event logged: {"event":{"provider":"alerting","action":"execute","start":"2020-11-05T12:14:29.265Z","end":"2020-11-05T12:14:29.265Z","duration":0,"outcome":"success"},"kibana":{"saved_objects":[{"rel":"primary","type":"alert","id":"cb175119-1556-4b75-8528-ed3e5af8826c","namespace":"space1"}],"server_uuid":"5b2de169-2785-441b-ae8c-186a1936b17d"},"message":"alert executed: test.unrestricted-noop:cb175119-1556-4b75-8528-ed3e5af8826c: 'abc'","@timestamp":"2020-11-05T12:14:29.265Z","ecs":{"version":"1.5.0"}}
[00:12:15]                   └- ✓ pass  (3.4s) "alerting api integration security and spaces enabled Alerts disable space_1_all at space1 should handle disable alert request appropriately when consumer is "alerts""
[00:12:15]                 └-> should still be able to disable alert when AAD is broken
[00:12:15]                   └-> "before each" hook: global before each
[00:12:16]                   │ proc [kibana]   log   [12:14:33.229] [error][alerting][alerts][plugins][plugins] Executing Alert "1ba121b0-690e-41fd-8037-5ac1de050b5d" has resulted in Error: [security_exception] missing authentication credentials for REST request [/_security/user/_has_privileges], with { header={ WWW-Authenticate={ 0="Basic realm=\"security\" charset=\"UTF-8\"" & 1="Bearer realm=\"security\"" & 2="ApiKey" } } }
[00:12:18]                   │ proc [kibana]   log   [12:14:35.237] [info][eventLog][plugins] event logged: {"event":{"provider":"alerting","action":"execute","start":"2020-11-05T12:14:35.235Z","end":"2020-11-05T12:14:35.235Z","duration":0,"outcome":"success"},"kibana":{"saved_objects":[{"rel":"primary","type":"alert","id":"156cd9cf-d877-4cf5-9328-9203adee754b","namespace":"space1"}],"server_uuid":"5b2de169-2785-441b-ae8c-186a1936b17d"},"message":"alert executed: test.noop:156cd9cf-d877-4cf5-9328-9203adee754b: 'abc'","@timestamp":"2020-11-05T12:14:35.235Z","ecs":{"version":"1.5.0"}}
[00:12:18]                   │ proc [kibana]   log   [12:14:35.258] [info][eventLog][plugins] event logged: {"event":{"provider":"alerting","action":"execute","start":"2020-11-05T12:14:35.257Z","end":"2020-11-05T12:14:35.257Z","duration":0,"outcome":"success"},"kibana":{"saved_objects":[{"rel":"primary","type":"alert","id":"f88ae072-eed8-4edf-bb5d-ad7f7f0f6b83","namespace":"space1"}],"server_uuid":"5b2de169-2785-441b-ae8c-186a1936b17d"},"message":"alert executed: test.noop:f88ae072-eed8-4edf-bb5d-ad7f7f0f6b83: 'abc'","@timestamp":"2020-11-05T12:14:35.257Z","ecs":{"version":"1.5.0"}}
[00:12:18]                   │ proc [kibana]   log   [12:14:35.267] [error][data][elasticsearch] [version_conflict_engine_exception]: [space1:alert:f88ae072-eed8-4edf-bb5d-ad7f7f0f6b83]: version conflict, required seqNo [983], primary term [1]. current document has seqNo [985] and primary term [1]
[00:12:18]                   │ proc [kibana]   log   [12:14:35.270] [error][http] { ResponseError: [space1:alert:f88ae072-eed8-4edf-bb5d-ad7f7f0f6b83]: version conflict, required seqNo [983], primary term [1]. current document has seqNo [985] and primary term [1]: version_conflict_engine_exception
[00:12:18]                   │ proc [kibana]     at IncomingMessage.response.on (/dev/shm/workspace/kibana-build-xpack-8/node_modules/@elastic/elasticsearch/lib/Transport.js:272:25)
[00:12:18]                   │ proc [kibana]     at IncomingMessage.emit (events.js:203:15)
[00:12:18]                   │ proc [kibana]     at endReadableNT (_stream_readable.js:1145:12)
[00:12:18]                   │ proc [kibana]     at process._tickCallback (internal/process/next_tick.js:63:19)
[00:12:18]                   │ proc [kibana]   name: 'ResponseError',
[00:12:18]                   │ proc [kibana]   meta:
[00:12:18]                   │ proc [kibana]    { body: { error: [Object], status: 409 },
[00:12:18]                   │ proc [kibana]      statusCode: 409,
[00:12:18]                   │ proc [kibana]      headers:
[00:12:18]                   │ proc [kibana]       { 'content-type': 'application/json; charset=UTF-8',
[00:12:18]                   │ proc [kibana]         'content-length': '619' },
[00:12:18]                   │ proc [kibana]      meta:
[00:12:18]                   │ proc [kibana]       { context: null,
[00:12:18]                   │ proc [kibana]         request: [Object],
[00:12:18]                   │ proc [kibana]         name: 'elasticsearch-js',
[00:12:18]                   │ proc [kibana]         connection: [Object],
[00:12:18]                   │ proc [kibana]         attempts: 0,
[00:12:18]                   │ proc [kibana]         aborted: false } },
[00:12:18]                   │ proc [kibana]   isBoom: true,
[00:12:18]                   │ proc [kibana]   isServer: false,
[00:12:18]                   │ proc [kibana]   data: null,
[00:12:18]                   │ proc [kibana]   output:
[00:12:18]                   │ proc [kibana]    { statusCode: 409,
[00:12:18]                   │ proc [kibana]      payload:
[00:12:18]                   │ proc [kibana]       { message:
[00:12:18]                   │ proc [kibana]          '[space1:alert:f88ae072-eed8-4edf-bb5d-ad7f7f0f6b83]: version conflict, required seqNo [983], primary term [1]. current document has seqNo [985] and primary term [1]: version_conflict_engine_exception',
[00:12:18]                   │ proc [kibana]         statusCode: 409,
[00:12:18]                   │ proc [kibana]         error: 'Conflict' },
[00:12:18]                   │ proc [kibana]      headers: {} },
[00:12:18]                   │ proc [kibana]   [Symbol(SavedObjectsClientErrorCode)]: 'SavedObjectsClient/conflict' }
[00:12:18]                   └- ✖ fail: alerting api integration security and spaces enabled Alerts disable space_1_all at space1 should still be able to disable alert when AAD is broken
[00:12:18]                   │      Error: expected 200 "OK", got 500 "Internal Server Error"
[00:12:18]                   │       at Test._assertStatus (/dev/shm/workspace/kibana/node_modules/supertest/lib/test.js:268:12)
[00:12:18]                   │       at Test._assertFunction (/dev/shm/workspace/kibana/node_modules/supertest/lib/test.js:283:11)
[00:12:18]                   │       at Test.assert (/dev/shm/workspace/kibana/node_modules/supertest/lib/test.js:173:18)
[00:12:18]                   │       at assert (/dev/shm/workspace/kibana/node_modules/supertest/lib/test.js:131:12)
[00:12:18]                   │       at /dev/shm/workspace/kibana/node_modules/supertest/lib/test.js:128:5
[00:12:18]                   │       at Test.Request.callback (/dev/shm/workspace/kibana/node_modules/supertest/node_modules/superagent/lib/node/index.js:718:3)
[00:12:18]                   │       at parser (/dev/shm/workspace/kibana/node_modules/supertest/node_modules/superagent/lib/node/index.js:906:18)
[00:12:18]                   │       at IncomingMessage.res.on (/dev/shm/workspace/kibana/node_modules/supertest/node_modules/superagent/lib/node/parsers/json.js:19:7)
[00:12:18]                   │       at endReadableNT (_stream_readable.js:1145:12)
[00:12:18]                   │       at process._tickCallback (internal/process/next_tick.js:63:19)
[00:12:18]                   │ 
[00:12:18]                   │ 

Stack Trace

Error: expected 200 "OK", got 500 "Internal Server Error"
    at Test._assertStatus (/dev/shm/workspace/kibana/node_modules/supertest/lib/test.js:268:12)
    at Test._assertFunction (/dev/shm/workspace/kibana/node_modules/supertest/lib/test.js:283:11)
    at Test.assert (/dev/shm/workspace/kibana/node_modules/supertest/lib/test.js:173:18)
    at assert (/dev/shm/workspace/kibana/node_modules/supertest/lib/test.js:131:12)
    at /dev/shm/workspace/kibana/node_modules/supertest/lib/test.js:128:5
    at Test.Request.callback (/dev/shm/workspace/kibana/node_modules/supertest/node_modules/superagent/lib/node/index.js:718:3)
    at parser (/dev/shm/workspace/kibana/node_modules/supertest/node_modules/superagent/lib/node/index.js:906:18)
    at IncomingMessage.res.on (/dev/shm/workspace/kibana/node_modules/supertest/node_modules/superagent/lib/node/parsers/json.js:19:7)
    at endReadableNT (_stream_readable.js:1145:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)

Metrics [docs]

@kbn/optimizer bundle module count

id before after diff
inspector 59 60 +1

async chunk count

id before after diff
inspector 0 2 +2

async chunks size

id before after diff
inspector 0.0B 39.3KB +39.3KB

distributable file count

id before after diff
default 42728 42734 +6
oss 22424 22430 +6

page load bundle size

id before after diff
inspector 83.6KB 49.9KB -33.7KB

History

To update your PR or re-run it, just comment with:
@elasticmachine merge upstream

@lukeelmers lukeelmers self-requested a review November 5, 2020 15:38
Copy link
Copy Markdown
Contributor

@lukeelmers lukeelmers left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Tested Chrome (macOS) and seems to be working well 👍

Comment on lines +238 to +254
kibana={
Object {
"notifications": Object {
"toasts": Object {
"danger": [Function],
"show": [Function],
"success": [Function],
"warning": [Function],
},
},
"overlays": Object {
"openFlyout": [Function],
"openModal": [Function],
},
"services": Object {},
}
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: It would be preferable if there were any way to update the unit tests so that these dependencies didn't appear in snapshots... otherwise they break any time future changes are made to the services, even if they're non-breaking

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll think how to refactor that test, and create a separate PR for that. I see here we just test a snapshot. It's not so useful...

@alexwizp alexwizp merged commit 0faf8c2 into elastic:master Nov 6, 2020
alexwizp added a commit to alexwizp/kibana that referenced this pull request Nov 6, 2020
* Use monacco editor in the inspector request panel

Closes: elastic#81921

* insRequestCodeViewer -> insRequestCodeViewer

* remove uiSettings from props

* fix functional tests

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
alexwizp added a commit that referenced this pull request Nov 6, 2020
* Use monacco editor in the inspector request panel

Closes: #81921

* insRequestCodeViewer -> insRequestCodeViewer

* remove uiSettings from props

* fix functional tests

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
@alexwizp alexwizp deleted the monacco branch January 16, 2021 15:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feature:Inspector Inspector infrastructure and implementations release_note:enhancement Team:Visualizations Team label for Lens, elastic-charts, Graph, legacy editors (TSVB, Visualize, Timelion) t// v7.11.0 v8.0.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Use monacco editor in the inspector request panel

7 participants