@colyseus/playground 0.16.4 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1 @@
1
- export declare let allRoomNames: string[];
2
- export declare function applyMonkeyPatch(): void;
1
+ export declare function applyMonkeyPatch(): Promise<void>;
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,41 +17,45 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var colyseus_ext_exports = {};
20
30
  __export(colyseus_ext_exports, {
21
- allRoomNames: () => allRoomNames,
22
31
  applyMonkeyPatch: () => applyMonkeyPatch
23
32
  });
24
33
  module.exports = __toCommonJS(colyseus_ext_exports);
25
34
  var import_core = require("@colyseus/core");
26
- let allRoomNames = [];
27
- const define = import_core.Server.prototype.define;
28
- import_core.Server.prototype.define = function(name, handler, options) {
29
- allRoomNames.push(name);
30
- return define.call(this, name, handler, options);
31
- };
32
- const removeRoomType = import_core.Server.prototype.removeRoomType;
33
- import_core.Server.prototype.removeRoomType = function(name) {
34
- const removeIndex = allRoomNames.findIndex((roomName) => roomName === name);
35
- if (removeIndex !== -1) {
36
- (0, import_core.spliceOne)(allRoomNames, removeIndex);
35
+ async function applyMonkeyPatch() {
36
+ let z = void 0;
37
+ try {
38
+ z = await import("zod");
39
+ } catch (e) {
37
40
  }
38
- return removeRoomType.call(this, name);
39
- };
40
- function applyMonkeyPatch() {
41
- const _onJoin = import_core.Room.prototype._onJoin;
42
- import_core.Room.prototype._onJoin = async function(client, authContext) {
43
- const result = await _onJoin.apply(this, [client, authContext]);
41
+ const _onJoin = import_core.Room.prototype["_onJoin"];
42
+ import_core.Room.prototype["_onJoin"] = async function(client) {
43
+ const result = await _onJoin.apply(this, arguments);
44
44
  if (client.state === import_core.ClientState.JOINING) {
45
- const messageTypes = Object.keys(this["onMessageHandlers"]).filter((type) => type.indexOf("__") !== 0);
46
- client.send("__playground_message_types", messageTypes);
45
+ const messages = {};
46
+ Object.keys(this["onMessageEvents"].events).sort().forEach((type) => {
47
+ if (type.indexOf("__") === 0 || type === "*") {
48
+ return;
49
+ }
50
+ const messageValidator = this["onMessageValidators"][type];
51
+ messages[type] = z && messageValidator && z.toJSONSchema(messageValidator) || null;
52
+ });
53
+ client.send("__playground_message_types", messages);
47
54
  }
48
55
  return result;
49
56
  };
50
57
  }
51
58
  // Annotate the CommonJS export names for ESM import in node:
52
59
  0 && (module.exports = {
53
- allRoomNames,
54
60
  applyMonkeyPatch
55
61
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src-backend/colyseus.ext.ts"],
4
- "sourcesContent": ["import http from \"http\";\nimport { Server, Room, Client, ClientState, ClientPrivate, spliceOne, AuthContext } from '@colyseus/core';\n\nexport let allRoomNames: string[] = [];\n\nconst define = Server.prototype.define;\n// @ts-ignore\nServer.prototype.define = function(name, handler, options) {\n allRoomNames.push(name);\n return define.call(this, name, handler, options);\n};\n\nconst removeRoomType = Server.prototype.removeRoomType;\nServer.prototype.removeRoomType = function(name) {\n const removeIndex = allRoomNames.findIndex((roomName) => roomName === name);\n if (removeIndex !== -1) {\n spliceOne(allRoomNames, removeIndex);\n }\n return removeRoomType.call(this, name);\n};\n\nexport function applyMonkeyPatch() {\n const _onJoin = Room.prototype._onJoin;\n Room.prototype._onJoin = async function (client: Client & ClientPrivate, authContext: AuthContext) {\n const result = await _onJoin.apply(this, [client, authContext]);\n\n if (client.state === ClientState.JOINING) {\n const messageTypes = Object.keys(this['onMessageHandlers']).filter((type) => type.indexOf(\"__\") !== 0)\n client.send(\"__playground_message_types\", messageTypes);\n }\n\n return result;\n }\n}"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAyF;AAElF,IAAI,eAAyB,CAAC;AAErC,MAAM,SAAS,mBAAO,UAAU;AAEhC,mBAAO,UAAU,SAAS,SAAS,MAAM,SAAS,SAAS;AACvD,eAAa,KAAK,IAAI;AACtB,SAAO,OAAO,KAAK,MAAM,MAAM,SAAS,OAAO;AACnD;AAEA,MAAM,iBAAiB,mBAAO,UAAU;AACxC,mBAAO,UAAU,iBAAiB,SAAS,MAAM;AAC7C,QAAM,cAAc,aAAa,UAAU,CAAC,aAAa,aAAa,IAAI;AAC1E,MAAI,gBAAgB,IAAI;AACpB,+BAAU,cAAc,WAAW;AAAA,EACvC;AACA,SAAO,eAAe,KAAK,MAAM,IAAI;AACzC;AAEO,SAAS,mBAAmB;AACjC,QAAM,UAAU,iBAAK,UAAU;AAC/B,mBAAK,UAAU,UAAU,eAAgB,QAAgC,aAA0B;AACjG,UAAM,SAAS,MAAM,QAAQ,MAAM,MAAM,CAAC,QAAQ,WAAW,CAAC;AAE9D,QAAI,OAAO,UAAU,wBAAY,SAAS;AACxC,YAAM,eAAe,OAAO,KAAK,KAAK,mBAAmB,CAAC,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC;AACrG,aAAO,KAAK,8BAA8B,YAAY;AAAA,IACxD;AAEA,WAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["import { Room, Client, ClientState, ClientPrivate, AuthContext } from '@colyseus/core';\n\nexport async function applyMonkeyPatch() {\n /**\n * Optional: if zod is available, we can use toJSONSchema() for body and query types\n */\n let z: any = undefined;\n try { z = await import(\"zod\"); } catch (e: any) { /* zod not installed */ }\n\n const _onJoin = Room.prototype['_onJoin'];\n Room.prototype['_onJoin'] = async function (this: Room, client: Client & ClientPrivate) {\n const result = await _onJoin.apply(this, arguments as any);\n\n if (client.state === ClientState.JOINING) {\n\n const messages: any = {};\n Object.keys(this['onMessageEvents'].events).sort().forEach((type) => {\n if (type.indexOf(\"__\") === 0 || type === \"*\") { return; }\n\n const messageValidator = this['onMessageValidators'][type];\n messages[type] = z && messageValidator && z.toJSONSchema(messageValidator) || null;\n });\n\n client.send(\"__playground_message_types\", messages);\n }\n\n return result;\n }\n}"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAsE;AAEtE,eAAsB,mBAAmB;AAIvC,MAAI,IAAS;AACb,MAAI;AAAE,QAAI,MAAM,OAAO,KAAK;AAAA,EAAG,SAAS,GAAP;AAAA,EAA0C;AAE3E,QAAM,UAAU,iBAAK,UAAU,SAAS;AACxC,mBAAK,UAAU,SAAS,IAAI,eAA4B,QAAgC;AACtF,UAAM,SAAS,MAAM,QAAQ,MAAM,MAAM,SAAgB;AAEzD,QAAI,OAAO,UAAU,wBAAY,SAAS;AAExC,YAAM,WAAgB,CAAC;AACvB,aAAO,KAAK,KAAK,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS;AACnE,YAAI,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,KAAK;AAAE;AAAA,QAAQ;AAExD,cAAM,mBAAmB,KAAK,qBAAqB,EAAE,IAAI;AACzD,iBAAS,IAAI,IAAI,KAAK,oBAAoB,EAAE,aAAa,gBAAgB,KAAK;AAAA,MAChF,CAAC;AAED,aAAO,KAAK,8BAA8B,QAAQ;AAAA,IACpD;AAEA,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,31 +1,28 @@
1
1
  // src-backend/colyseus.ext.ts
2
- import { Server, Room, ClientState, spliceOne } from "@colyseus/core";
3
- var allRoomNames = [];
4
- var define = Server.prototype.define;
5
- Server.prototype.define = function(name, handler, options) {
6
- allRoomNames.push(name);
7
- return define.call(this, name, handler, options);
8
- };
9
- var removeRoomType = Server.prototype.removeRoomType;
10
- Server.prototype.removeRoomType = function(name) {
11
- const removeIndex = allRoomNames.findIndex((roomName) => roomName === name);
12
- if (removeIndex !== -1) {
13
- spliceOne(allRoomNames, removeIndex);
2
+ import { Room, ClientState } from "@colyseus/core";
3
+ async function applyMonkeyPatch() {
4
+ let z = void 0;
5
+ try {
6
+ z = await import("zod");
7
+ } catch (e) {
14
8
  }
15
- return removeRoomType.call(this, name);
16
- };
17
- function applyMonkeyPatch() {
18
- const _onJoin = Room.prototype._onJoin;
19
- Room.prototype._onJoin = async function(client, authContext) {
20
- const result = await _onJoin.apply(this, [client, authContext]);
9
+ const _onJoin = Room.prototype["_onJoin"];
10
+ Room.prototype["_onJoin"] = async function(client) {
11
+ const result = await _onJoin.apply(this, arguments);
21
12
  if (client.state === ClientState.JOINING) {
22
- const messageTypes = Object.keys(this["onMessageHandlers"]).filter((type) => type.indexOf("__") !== 0);
23
- client.send("__playground_message_types", messageTypes);
13
+ const messages = {};
14
+ Object.keys(this["onMessageEvents"].events).sort().forEach((type) => {
15
+ if (type.indexOf("__") === 0 || type === "*") {
16
+ return;
17
+ }
18
+ const messageValidator = this["onMessageValidators"][type];
19
+ messages[type] = z && messageValidator && z.toJSONSchema(messageValidator) || null;
20
+ });
21
+ client.send("__playground_message_types", messages);
24
22
  }
25
23
  return result;
26
24
  };
27
25
  }
28
26
  export {
29
- allRoomNames,
30
27
  applyMonkeyPatch
31
28
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src-backend/colyseus.ext.ts"],
4
- "sourcesContent": ["import http from \"http\";\nimport { Server, Room, Client, ClientState, ClientPrivate, spliceOne, AuthContext } from '@colyseus/core';\n\nexport let allRoomNames: string[] = [];\n\nconst define = Server.prototype.define;\n// @ts-ignore\nServer.prototype.define = function(name, handler, options) {\n allRoomNames.push(name);\n return define.call(this, name, handler, options);\n};\n\nconst removeRoomType = Server.prototype.removeRoomType;\nServer.prototype.removeRoomType = function(name) {\n const removeIndex = allRoomNames.findIndex((roomName) => roomName === name);\n if (removeIndex !== -1) {\n spliceOne(allRoomNames, removeIndex);\n }\n return removeRoomType.call(this, name);\n};\n\nexport function applyMonkeyPatch() {\n const _onJoin = Room.prototype._onJoin;\n Room.prototype._onJoin = async function (client: Client & ClientPrivate, authContext: AuthContext) {\n const result = await _onJoin.apply(this, [client, authContext]);\n\n if (client.state === ClientState.JOINING) {\n const messageTypes = Object.keys(this['onMessageHandlers']).filter((type) => type.indexOf(\"__\") !== 0)\n client.send(\"__playground_message_types\", messageTypes);\n }\n\n return result;\n }\n}"],
5
- "mappings": ";AACA,SAAS,QAAQ,MAAc,aAA4B,iBAA8B;AAElF,IAAI,eAAyB,CAAC;AAErC,IAAM,SAAS,OAAO,UAAU;AAEhC,OAAO,UAAU,SAAS,SAAS,MAAM,SAAS,SAAS;AACvD,eAAa,KAAK,IAAI;AACtB,SAAO,OAAO,KAAK,MAAM,MAAM,SAAS,OAAO;AACnD;AAEA,IAAM,iBAAiB,OAAO,UAAU;AACxC,OAAO,UAAU,iBAAiB,SAAS,MAAM;AAC7C,QAAM,cAAc,aAAa,UAAU,CAAC,aAAa,aAAa,IAAI;AAC1E,MAAI,gBAAgB,IAAI;AACpB,cAAU,cAAc,WAAW;AAAA,EACvC;AACA,SAAO,eAAe,KAAK,MAAM,IAAI;AACzC;AAEO,SAAS,mBAAmB;AACjC,QAAM,UAAU,KAAK,UAAU;AAC/B,OAAK,UAAU,UAAU,eAAgB,QAAgC,aAA0B;AACjG,UAAM,SAAS,MAAM,QAAQ,MAAM,MAAM,CAAC,QAAQ,WAAW,CAAC;AAE9D,QAAI,OAAO,UAAU,YAAY,SAAS;AACxC,YAAM,eAAe,OAAO,KAAK,KAAK,mBAAmB,CAAC,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC;AACrG,aAAO,KAAK,8BAA8B,YAAY;AAAA,IACxD;AAEA,WAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["import { Room, Client, ClientState, ClientPrivate, AuthContext } from '@colyseus/core';\n\nexport async function applyMonkeyPatch() {\n /**\n * Optional: if zod is available, we can use toJSONSchema() for body and query types\n */\n let z: any = undefined;\n try { z = await import(\"zod\"); } catch (e: any) { /* zod not installed */ }\n\n const _onJoin = Room.prototype['_onJoin'];\n Room.prototype['_onJoin'] = async function (this: Room, client: Client & ClientPrivate) {\n const result = await _onJoin.apply(this, arguments as any);\n\n if (client.state === ClientState.JOINING) {\n\n const messages: any = {};\n Object.keys(this['onMessageEvents'].events).sort().forEach((type) => {\n if (type.indexOf(\"__\") === 0 || type === \"*\") { return; }\n\n const messageValidator = this['onMessageValidators'][type];\n messages[type] = z && messageValidator && z.toJSONSchema(messageValidator) || null;\n });\n\n client.send(\"__playground_message_types\", messages);\n }\n\n return result;\n }\n}"],
5
+ "mappings": ";AAAA,SAAS,MAAc,mBAA+C;AAEtE,eAAsB,mBAAmB;AAIvC,MAAI,IAAS;AACb,MAAI;AAAE,QAAI,MAAM,OAAO,KAAK;AAAA,EAAG,SAAS,GAAP;AAAA,EAA0C;AAE3E,QAAM,UAAU,KAAK,UAAU,SAAS;AACxC,OAAK,UAAU,SAAS,IAAI,eAA4B,QAAgC;AACtF,UAAM,SAAS,MAAM,QAAQ,MAAM,MAAM,SAAgB;AAEzD,QAAI,OAAO,UAAU,YAAY,SAAS;AAExC,YAAM,WAAgB,CAAC;AACvB,aAAO,KAAK,KAAK,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS;AACnE,YAAI,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,KAAK;AAAE;AAAA,QAAQ;AAExD,cAAM,mBAAmB,KAAK,qBAAqB,EAAE,IAAI;AACzD,iBAAS,IAAI,IAAI,KAAK,oBAAoB,EAAE,aAAa,gBAAgB,KAAK;AAAA,MAChF,CAAC;AAED,aAAO,KAAK,8BAA8B,QAAQ;AAAA,IACpD;AAEA,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
package/build/index.html CHANGED
@@ -1 +1,23 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json" crossorigin="use-credentials"/><title>[Colyseus Playground]</title><script defer="defer" src="./static/js/main.a88d6394.js"></script><link href="./static/css/main.fbbade37.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <link rel="icon" href="./favicon.ico" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ <meta name="theme-color" content="#000000" />
8
+ <meta
9
+ name="description"
10
+ content="Colyseus Playground - Inspect and test your Colyseus rooms"
11
+ />
12
+ <link rel="apple-touch-icon" href="./logo192.png" />
13
+ <link rel="manifest" href="./manifest.json" crossorigin="use-credentials" />
14
+ <title>[Colyseus Playground]</title>
15
+ <script type="module" crossorigin src="./assets/index-Di05Rg4c.js"></script>
16
+ <link rel="stylesheet" crossorigin href="./assets/index-BS3RJoKX.css">
17
+ </head>
18
+ <body>
19
+ <noscript>You need to enable JavaScript to run this app.</noscript>
20
+ <div id="root"></div>
21
+ </body>
22
+ </html>
23
+
package/build/index.js CHANGED
@@ -52,7 +52,7 @@ function playground() {
52
52
  roomsById[room.roomId] = room;
53
53
  });
54
54
  res.json({
55
- rooms: import_colyseus_ext.allRoomNames,
55
+ rooms: Object.keys(import_core.matchMaker.getAllHandlers()),
56
56
  roomsByType,
57
57
  roomsById,
58
58
  auth: {
@@ -63,6 +63,24 @@ function playground() {
63
63
  }
64
64
  });
65
65
  });
66
+ router.get("/__apidocs", async (_, res) => {
67
+ let z = void 0;
68
+ try {
69
+ z = await import("zod");
70
+ } catch (e) {
71
+ }
72
+ res.json(Object.values(import_core.__globalEndpoints).map((endpoint) => {
73
+ var _a, _b;
74
+ return {
75
+ method: endpoint.options.method,
76
+ path: endpoint.path,
77
+ body: z && endpoint.options.body && z.toJSONSchema(endpoint.options.body),
78
+ query: z && endpoint.options.query && z.toJSONSchema(endpoint.options.query),
79
+ metadata: endpoint.options.metadata,
80
+ description: (_b = (_a = endpoint.options.metadata) == null ? void 0 : _a.openapi) == null ? void 0 : _b.description
81
+ };
82
+ }));
83
+ });
66
84
  return router;
67
85
  }
68
86
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src-backend/index.ts"],
4
- "sourcesContent": ["import path from 'path';\nimport express, { Router } from 'express';\nimport { auth, JWT } from '@colyseus/auth';\nimport { matchMaker, IRoomCache } from '@colyseus/core';\nimport { allRoomNames, applyMonkeyPatch } from './colyseus.ext.js';\nimport { fileURLToPath } from 'url'; // required for ESM build (see build.mjs)\n\nexport type AuthConfig = {\n oauth: string[],\n register: boolean,\n anonymous: boolean,\n};\n\nexport function playground(): Router {\n applyMonkeyPatch();\n\n const router = express.Router();\n\n // serve static frontend\n router.use(\"/\", express.static(path.resolve(__dirname, \"..\", \"build\")));\n\n // expose matchmaking stats\n router.get(\"/rooms\", async (req, res) => {\n const rooms = await matchMaker.driver.query({});\n\n const roomsByType: { [roomName: string]: number } = {};\n const roomsById: { [roomName: string]: IRoomCache } = {};\n\n rooms.forEach((room) => {\n if (!roomsByType[room.name]) { roomsByType[room.name] = 0; }\n roomsByType[room.name]++;\n roomsById[room.roomId] = room;\n });\n\n res.json({\n rooms: allRoomNames,\n\n roomsByType,\n roomsById,\n\n auth: {\n // list of OAuth providers\n oauth: Object.keys(auth.oauth.providers),\n register: typeof(auth.settings.onRegisterWithEmailAndPassword) === \"function\",\n anonymous: typeof(JWT.settings.secret) === \"string\",\n } as AuthConfig\n });\n });\n\n return router;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,qBAAgC;AAChC,kBAA0B;AAC1B,kBAAuC;AACvC,0BAA+C;AASxC,SAAS,aAAqB;AACnC,4CAAiB;AAEjB,QAAM,SAAS,eAAAA,QAAQ,OAAO;AAG9B,SAAO,IAAI,KAAK,eAAAA,QAAQ,OAAO,YAAAC,QAAK,QAAQ,WAAW,MAAM,OAAO,CAAC,CAAC;AAGtE,SAAO,IAAI,UAAU,OAAO,KAAK,QAAQ;AACvC,UAAM,QAAQ,MAAM,uBAAW,OAAO,MAAM,CAAC,CAAC;AAE9C,UAAM,cAA8C,CAAC;AACrD,UAAM,YAAgD,CAAC;AAEvD,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,CAAC,YAAY,KAAK,IAAI,GAAG;AAAE,oBAAY,KAAK,IAAI,IAAI;AAAA,MAAG;AAC3D,kBAAY,KAAK,IAAI;AACrB,gBAAU,KAAK,MAAM,IAAI;AAAA,IAC3B,CAAC;AAED,QAAI,KAAK;AAAA,MACP,OAAO;AAAA,MAEP;AAAA,MACA;AAAA,MAEA,MAAM;AAAA;AAAA,QAEJ,OAAO,OAAO,KAAK,iBAAK,MAAM,SAAS;AAAA,QACvC,UAAU,OAAO,iBAAK,SAAS,mCAAoC;AAAA,QACnE,WAAW,OAAO,gBAAI,SAAS,WAAY;AAAA,MAC7C;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AACT;",
4
+ "sourcesContent": ["import path from 'path';\nimport express, { Router } from 'express';\nimport { auth, JWT } from '@colyseus/auth';\nimport { matchMaker, IRoomCache, __globalEndpoints } from '@colyseus/core';\nimport type { Endpoint } from \"@colyseus/better-call\";\nimport { applyMonkeyPatch } from './colyseus.ext.js';\n\nimport { fileURLToPath } from 'url'; // required for ESM build (see build.mjs)\n\nexport type AuthConfig = {\n oauth: string[],\n register: boolean,\n anonymous: boolean,\n};\n\nexport function playground(): Router {\n applyMonkeyPatch();\n\n const router = express.Router();\n\n // serve static frontend\n router.use(\"/\", express.static(path.resolve(__dirname, \"..\", \"build\")));\n\n // expose matchmaking stats\n router.get(\"/rooms\", async (req, res) => {\n const rooms = await matchMaker.driver.query({});\n\n const roomsByType: { [roomName: string]: number } = {};\n const roomsById: { [roomName: string]: IRoomCache } = {};\n\n rooms.forEach((room) => {\n if (!roomsByType[room.name]) { roomsByType[room.name] = 0; }\n roomsByType[room.name]++;\n roomsById[room.roomId] = room;\n });\n\n res.json({\n rooms: Object.keys(matchMaker.getAllHandlers()),\n\n roomsByType,\n roomsById,\n\n auth: {\n // list of OAuth providers\n oauth: Object.keys(auth.oauth.providers),\n register: typeof(auth.settings.onRegisterWithEmailAndPassword) === \"function\",\n anonymous: typeof(JWT.settings.secret) === \"string\",\n } as AuthConfig\n });\n });\n\n // serve API docs for playground\n // (workaround to use better-call route inside express.Router)\n router.get(\"/__apidocs\", async (_, res) => {\n /**\n * Optional: if zod is available, we can use toJSONSchema() for body and query types\n */\n let z: any = undefined;\n try { z = await import(\"zod\"); } catch (e: any) { /* zod not installed */ }\n\n res.json(Object.values(__globalEndpoints).map((endpoint: Endpoint) => {\n return {\n method: endpoint.options.method,\n path: endpoint.path,\n body: z && endpoint.options.body && z.toJSONSchema(endpoint.options.body),\n query: z && endpoint.options.query && z.toJSONSchema(endpoint.options.query),\n metadata: endpoint.options.metadata,\n description: endpoint.options.metadata?.openapi?.description,\n };\n }));\n });\n\n return router;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,qBAAgC;AAChC,kBAA0B;AAC1B,kBAA0D;AAE1D,0BAAiC;AAU1B,SAAS,aAAqB;AACnC,4CAAiB;AAEjB,QAAM,SAAS,eAAAA,QAAQ,OAAO;AAG9B,SAAO,IAAI,KAAK,eAAAA,QAAQ,OAAO,YAAAC,QAAK,QAAQ,WAAW,MAAM,OAAO,CAAC,CAAC;AAGtE,SAAO,IAAI,UAAU,OAAO,KAAK,QAAQ;AACvC,UAAM,QAAQ,MAAM,uBAAW,OAAO,MAAM,CAAC,CAAC;AAE9C,UAAM,cAA8C,CAAC;AACrD,UAAM,YAAgD,CAAC;AAEvD,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,CAAC,YAAY,KAAK,IAAI,GAAG;AAAE,oBAAY,KAAK,IAAI,IAAI;AAAA,MAAG;AAC3D,kBAAY,KAAK,IAAI;AACrB,gBAAU,KAAK,MAAM,IAAI;AAAA,IAC3B,CAAC;AAED,QAAI,KAAK;AAAA,MACP,OAAO,OAAO,KAAK,uBAAW,eAAe,CAAC;AAAA,MAE9C;AAAA,MACA;AAAA,MAEA,MAAM;AAAA;AAAA,QAEJ,OAAO,OAAO,KAAK,iBAAK,MAAM,SAAS;AAAA,QACvC,UAAU,OAAO,iBAAK,SAAS,mCAAoC;AAAA,QACnE,WAAW,OAAO,gBAAI,SAAS,WAAY;AAAA,MAC7C;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAID,SAAO,IAAI,cAAc,OAAO,GAAG,QAAQ;AAIzC,QAAI,IAAS;AACb,QAAI;AAAE,UAAI,MAAM,OAAO,KAAK;AAAA,IAAG,SAAS,GAAP;AAAA,IAA0C;AAE3E,QAAI,KAAK,OAAO,OAAO,6BAAiB,EAAE,IAAI,CAAC,aAAuB;AA5D1E;AA6DM,aAAO;AAAA,QACL,QAAQ,SAAS,QAAQ;AAAA,QACzB,MAAM,SAAS;AAAA,QACf,MAAM,KAAK,SAAS,QAAQ,QAAQ,EAAE,aAAa,SAAS,QAAQ,IAAI;AAAA,QACxE,OAAO,KAAK,SAAS,QAAQ,SAAS,EAAE,aAAa,SAAS,QAAQ,KAAK;AAAA,QAC3E,UAAU,SAAS,QAAQ;AAAA,QAC3B,cAAa,oBAAS,QAAQ,aAAjB,mBAA2B,YAA3B,mBAAoC;AAAA,MACnD;AAAA,IACF,CAAC,CAAC;AAAA,EACJ,CAAC;AAED,SAAO;AACT;",
6
6
  "names": ["express", "path"]
7
7
  }
package/build/index.mjs CHANGED
@@ -2,8 +2,8 @@
2
2
  import path from "path";
3
3
  import express from "express";
4
4
  import { auth, JWT } from "@colyseus/auth";
5
- import { matchMaker } from "@colyseus/core";
6
- import { allRoomNames, applyMonkeyPatch } from "./colyseus.ext.mjs";
5
+ import { matchMaker, __globalEndpoints } from "@colyseus/core";
6
+ import { applyMonkeyPatch } from "./colyseus.ext.mjs";
7
7
  import { fileURLToPath } from "url";
8
8
  function playground() {
9
9
  applyMonkeyPatch();
@@ -21,7 +21,7 @@ function playground() {
21
21
  roomsById[room.roomId] = room;
22
22
  });
23
23
  res.json({
24
- rooms: allRoomNames,
24
+ rooms: Object.keys(matchMaker.getAllHandlers()),
25
25
  roomsByType,
26
26
  roomsById,
27
27
  auth: {
@@ -32,6 +32,23 @@ function playground() {
32
32
  }
33
33
  });
34
34
  });
35
+ router.get("/__apidocs", async (_, res) => {
36
+ let z = void 0;
37
+ try {
38
+ z = await import("zod");
39
+ } catch (e) {
40
+ }
41
+ res.json(Object.values(__globalEndpoints).map((endpoint) => {
42
+ return {
43
+ method: endpoint.options.method,
44
+ path: endpoint.path,
45
+ body: z && endpoint.options.body && z.toJSONSchema(endpoint.options.body),
46
+ query: z && endpoint.options.query && z.toJSONSchema(endpoint.options.query),
47
+ metadata: endpoint.options.metadata,
48
+ description: endpoint.options.metadata?.openapi?.description
49
+ };
50
+ }));
51
+ });
35
52
  return router;
36
53
  }
37
54
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src-backend/index.ts"],
4
- "sourcesContent": ["import path from 'path';\nimport express, { Router } from 'express';\nimport { auth, JWT } from '@colyseus/auth';\nimport { matchMaker, IRoomCache } from '@colyseus/core';\nimport { allRoomNames, applyMonkeyPatch } from './colyseus.ext.js';\nimport { fileURLToPath } from 'url'; // required for ESM build (see build.mjs)\n\nexport type AuthConfig = {\n oauth: string[],\n register: boolean,\n anonymous: boolean,\n};\n\nexport function playground(): Router {\n applyMonkeyPatch();\n\n const router = express.Router();\n\n // serve static frontend\n router.use(\"/\", express.static(path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"..\", \"build\")));\n\n // expose matchmaking stats\n router.get(\"/rooms\", async (req, res) => {\n const rooms = await matchMaker.driver.query({});\n\n const roomsByType: { [roomName: string]: number } = {};\n const roomsById: { [roomName: string]: IRoomCache } = {};\n\n rooms.forEach((room) => {\n if (!roomsByType[room.name]) { roomsByType[room.name] = 0; }\n roomsByType[room.name]++;\n roomsById[room.roomId] = room;\n });\n\n res.json({\n rooms: allRoomNames,\n\n roomsByType,\n roomsById,\n\n auth: {\n // list of OAuth providers\n oauth: Object.keys(auth.oauth.providers),\n register: typeof(auth.settings.onRegisterWithEmailAndPassword) === \"function\",\n anonymous: typeof(JWT.settings.secret) === \"string\",\n } as AuthConfig\n });\n });\n\n return router;\n}\n"],
5
- "mappings": ";AAAA,OAAO,UAAU;AACjB,OAAO,aAAyB;AAChC,SAAS,MAAM,WAAW;AAC1B,SAAS,kBAA8B;AACvC,SAAS,cAAc,wBAAwB;AAC/C,SAAS,qBAAqB;AAQvB,SAAS,aAAqB;AACnC,mBAAiB;AAEjB,QAAM,SAAS,QAAQ,OAAO;AAG9B,SAAO,IAAI,KAAK,QAAQ,OAAO,KAAK,QAAQ,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC;AAGzG,SAAO,IAAI,UAAU,OAAO,KAAK,QAAQ;AACvC,UAAM,QAAQ,MAAM,WAAW,OAAO,MAAM,CAAC,CAAC;AAE9C,UAAM,cAA8C,CAAC;AACrD,UAAM,YAAgD,CAAC;AAEvD,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,CAAC,YAAY,KAAK,IAAI,GAAG;AAAE,oBAAY,KAAK,IAAI,IAAI;AAAA,MAAG;AAC3D,kBAAY,KAAK,IAAI;AACrB,gBAAU,KAAK,MAAM,IAAI;AAAA,IAC3B,CAAC;AAED,QAAI,KAAK;AAAA,MACP,OAAO;AAAA,MAEP;AAAA,MACA;AAAA,MAEA,MAAM;AAAA;AAAA,QAEJ,OAAO,OAAO,KAAK,KAAK,MAAM,SAAS;AAAA,QACvC,UAAU,OAAO,KAAK,SAAS,mCAAoC;AAAA,QACnE,WAAW,OAAO,IAAI,SAAS,WAAY;AAAA,MAC7C;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AACT;",
4
+ "sourcesContent": ["import path from 'path';\nimport express, { Router } from 'express';\nimport { auth, JWT } from '@colyseus/auth';\nimport { matchMaker, IRoomCache, __globalEndpoints } from '@colyseus/core';\nimport type { Endpoint } from \"@colyseus/better-call\";\nimport { applyMonkeyPatch } from './colyseus.ext.js';\n\nimport { fileURLToPath } from 'url'; // required for ESM build (see build.mjs)\n\nexport type AuthConfig = {\n oauth: string[],\n register: boolean,\n anonymous: boolean,\n};\n\nexport function playground(): Router {\n applyMonkeyPatch();\n\n const router = express.Router();\n\n // serve static frontend\n router.use(\"/\", express.static(path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"..\", \"build\")));\n\n // expose matchmaking stats\n router.get(\"/rooms\", async (req, res) => {\n const rooms = await matchMaker.driver.query({});\n\n const roomsByType: { [roomName: string]: number } = {};\n const roomsById: { [roomName: string]: IRoomCache } = {};\n\n rooms.forEach((room) => {\n if (!roomsByType[room.name]) { roomsByType[room.name] = 0; }\n roomsByType[room.name]++;\n roomsById[room.roomId] = room;\n });\n\n res.json({\n rooms: Object.keys(matchMaker.getAllHandlers()),\n\n roomsByType,\n roomsById,\n\n auth: {\n // list of OAuth providers\n oauth: Object.keys(auth.oauth.providers),\n register: typeof(auth.settings.onRegisterWithEmailAndPassword) === \"function\",\n anonymous: typeof(JWT.settings.secret) === \"string\",\n } as AuthConfig\n });\n });\n\n // serve API docs for playground\n // (workaround to use better-call route inside express.Router)\n router.get(\"/__apidocs\", async (_, res) => {\n /**\n * Optional: if zod is available, we can use toJSONSchema() for body and query types\n */\n let z: any = undefined;\n try { z = await import(\"zod\"); } catch (e: any) { /* zod not installed */ }\n\n res.json(Object.values(__globalEndpoints).map((endpoint: Endpoint) => {\n return {\n method: endpoint.options.method,\n path: endpoint.path,\n body: z && endpoint.options.body && z.toJSONSchema(endpoint.options.body),\n query: z && endpoint.options.query && z.toJSONSchema(endpoint.options.query),\n metadata: endpoint.options.metadata,\n description: endpoint.options.metadata?.openapi?.description,\n };\n }));\n });\n\n return router;\n}\n"],
5
+ "mappings": ";AAAA,OAAO,UAAU;AACjB,OAAO,aAAyB;AAChC,SAAS,MAAM,WAAW;AAC1B,SAAS,YAAwB,yBAAyB;AAE1D,SAAS,wBAAwB;AAEjC,SAAS,qBAAqB;AAQvB,SAAS,aAAqB;AACnC,mBAAiB;AAEjB,QAAM,SAAS,QAAQ,OAAO;AAG9B,SAAO,IAAI,KAAK,QAAQ,OAAO,KAAK,QAAQ,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC;AAGzG,SAAO,IAAI,UAAU,OAAO,KAAK,QAAQ;AACvC,UAAM,QAAQ,MAAM,WAAW,OAAO,MAAM,CAAC,CAAC;AAE9C,UAAM,cAA8C,CAAC;AACrD,UAAM,YAAgD,CAAC;AAEvD,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,CAAC,YAAY,KAAK,IAAI,GAAG;AAAE,oBAAY,KAAK,IAAI,IAAI;AAAA,MAAG;AAC3D,kBAAY,KAAK,IAAI;AACrB,gBAAU,KAAK,MAAM,IAAI;AAAA,IAC3B,CAAC;AAED,QAAI,KAAK;AAAA,MACP,OAAO,OAAO,KAAK,WAAW,eAAe,CAAC;AAAA,MAE9C;AAAA,MACA;AAAA,MAEA,MAAM;AAAA;AAAA,QAEJ,OAAO,OAAO,KAAK,KAAK,MAAM,SAAS;AAAA,QACvC,UAAU,OAAO,KAAK,SAAS,mCAAoC;AAAA,QACnE,WAAW,OAAO,IAAI,SAAS,WAAY;AAAA,MAC7C;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAID,SAAO,IAAI,cAAc,OAAO,GAAG,QAAQ;AAIzC,QAAI,IAAS;AACb,QAAI;AAAE,UAAI,MAAM,OAAO,KAAK;AAAA,IAAG,SAAS,GAAP;AAAA,IAA0C;AAE3E,QAAI,KAAK,OAAO,OAAO,iBAAiB,EAAE,IAAI,CAAC,aAAuB;AACpE,aAAO;AAAA,QACL,QAAQ,SAAS,QAAQ;AAAA,QACzB,MAAM,SAAS;AAAA,QACf,MAAM,KAAK,SAAS,QAAQ,QAAQ,EAAE,aAAa,SAAS,QAAQ,IAAI;AAAA,QACxE,OAAO,KAAK,SAAS,QAAQ,SAAS,EAAE,aAAa,SAAS,QAAQ,KAAK;AAAA,QAC3E,UAAU,SAAS,QAAQ;AAAA,QAC3B,aAAa,SAAS,QAAQ,UAAU,SAAS;AAAA,MACnD;AAAA,IACF,CAAC,CAAC;AAAA,EACJ,CAAC;AAED,SAAO;AACT;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@colyseus/playground",
3
- "version": "0.16.4",
3
+ "version": "0.17.0",
4
4
  "main": "./build/index.js",
5
5
  "module": "./build/index.mjs",
6
6
  "typings": "./build/index.d.ts",
@@ -9,32 +9,24 @@
9
9
  "types": "./build/index.d.ts",
10
10
  "import": "./build/index.mjs",
11
11
  "require": "./build/index.js"
12
+ },
13
+ "./*": {
14
+ "types": "./build/*.d.ts",
15
+ "import": "./src-backend/*.ts",
16
+ "require": "./build/*.js"
12
17
  }
13
18
  },
14
- "scripts": {
15
- "start": "react-scripts start",
16
- "build": "PUBLIC_URL='.' react-scripts build && node build.mjs",
17
- "test": "react-scripts test",
18
- "eject": "react-scripts eject",
19
- "prepublishOnly": "npm run build"
20
- },
21
19
  "files": [
22
20
  "build",
23
21
  "README.md",
24
22
  "LICENSE",
25
23
  "screenshot.png"
26
24
  ],
27
- "dependencies": {},
28
25
  "peerDependencies": {
29
- "@colyseus/core": "0.16.x",
30
- "@colyseus/auth": "0.16.x",
31
- "express": ">=4.16.0"
32
- },
33
- "eslintConfig": {
34
- "extends": [
35
- "react-app",
36
- "react-app/jest"
37
- ]
26
+ "express": ">=4.16.0",
27
+ "zod": "^4.1.12",
28
+ "@colyseus/auth": "^0.17.0",
29
+ "@colyseus/core": "^0.17.0"
38
30
  },
39
31
  "browserslist": {
40
32
  "production": [
@@ -49,28 +41,44 @@
49
41
  ]
50
42
  },
51
43
  "devDependencies": {
52
- "@testing-library/jest-dom": "^5.16.5",
53
- "@testing-library/react": "^13.4.0",
54
- "@testing-library/user-event": "^13.5.0",
44
+ "@fortawesome/fontawesome-svg-core": "^6.5.1",
45
+ "@fortawesome/free-solid-svg-icons": "^6.5.1",
46
+ "@fortawesome/react-fontawesome": "^0.2.0",
47
+ "@tailwindcss/container-queries": "^0.1.1",
55
48
  "@types/jest": "^27.5.2",
56
49
  "@types/jsoneditor": "^9.9.0",
57
50
  "@types/node": "^16.18.31",
58
51
  "@types/react": "^18.2.6",
59
52
  "@types/react-dom": "^18.2.4",
60
- "colyseus.js": "^0.16.0",
53
+ "@types/react-syntax-highlighter": "^15.5.13",
54
+ "@vitejs/plugin-react": "^4.2.1",
55
+ "autoprefixer": "^10.4.16",
61
56
  "esbuild": "^0.17.19",
62
57
  "fast-glob": "^3.2.12",
63
58
  "jsoneditor": "^9.10.2",
59
+ "postcss": "^8.4.32",
64
60
  "react": "^18.2.0",
65
61
  "react-dom": "^18.2.0",
66
62
  "react-flatpickr": "^3.10.13",
67
63
  "react-router-dom": "^6.11.2",
68
- "react-scripts": "5.0.1",
64
+ "react-syntax-highlighter": "^16.1.0",
69
65
  "react-tailwindcss-select": "^1.8.5",
70
66
  "react-transition-group": "^4.4.5",
71
67
  "react18-json-view": "^0.0.8",
72
68
  "tailwindcss": "^3.3.2",
73
- "typescript": "^4.9.5",
74
- "web-vitals": "^2.1.4"
69
+ "typescript": "^5.9.3",
70
+ "vite": "^5.0.11",
71
+ "vitest": "^1.1.3",
72
+ "web-vitals": "^2.1.4",
73
+ "@colyseus/sdk": "^0.17.0"
74
+ },
75
+ "dependencies": {
76
+ "@colyseus/better-call": "^1.0.26"
77
+ },
78
+ "scripts": {
79
+ "start": "vite",
80
+ "build": "vite build && node build.mjs",
81
+ "preview": "vite preview",
82
+ "test": "vitest"
75
83
  }
76
- }
84
+ }
@@ -1,17 +0,0 @@
1
- {
2
- "files": {
3
- "main.css": "./static/css/main.fbbade37.css",
4
- "main.js": "./static/js/main.a88d6394.js",
5
- "static/js/453.06401121.chunk.js": "./static/js/453.06401121.chunk.js",
6
- "static/media/jsoneditor-icons.svg": "./static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg",
7
- "static/media/favicon.svg": "./static/media/favicon.cad7290b5f48941db9f836712c091ae7.svg",
8
- "index.html": "./index.html",
9
- "main.fbbade37.css.map": "./static/css/main.fbbade37.css.map",
10
- "main.a88d6394.js.map": "./static/js/main.a88d6394.js.map",
11
- "453.06401121.chunk.js.map": "./static/js/453.06401121.chunk.js.map"
12
- },
13
- "entrypoints": [
14
- "static/css/main.fbbade37.css",
15
- "static/js/main.a88d6394.js"
16
- ]
17
- }
@@ -1,11 +0,0 @@
1
- body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
2
- ! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com
3
- */*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{bottom:0;top:0}.left-0{left:0}.left-8{left:2rem}.z-30{z-index:30}.float-right{float:right}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.-mb-px{margin-bottom:-1px}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.mt-0\.5{margin-top:.125rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.h-10{height:2.5rem}.h-24{height:6rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-32{width:8rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-full{width:100%}.flex-1{flex:1 1}.flex-grow,.grow{flex-grow:1}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.rotate-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate:0deg}.rotate-90{--tw-rotate:90deg}.rotate-90,.scale-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-6{gap:1.5rem}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;white-space:nowrap}.text-ellipsis,.truncate{text-overflow:ellipsis}.rounded{border-radius:.25rem}.rounded-l{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.rounded-r{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-r-0{border-right-width:0}.border-t{border-top-width:1px}.border-gray-200{--tw-border-opacity:1;border-color:#e5e7eb;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:#d1d5db;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-purple-600{--tw-border-opacity:1;border-color:#9333ea;border-color:rgb(147 51 234/var(--tw-border-opacity,1))}.border-red-300{--tw-border-opacity:1;border-color:#fca5a5;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:#3b82f6;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-800{--tw-bg-opacity:1;background-color:#1e40af;background-color:rgb(30 64 175/var(--tw-bg-opacity,1))}.bg-cyan-800{--tw-bg-opacity:1;background-color:#155e75;background-color:rgb(21 94 117/var(--tw-bg-opacity,1))}.bg-emerald-800{--tw-bg-opacity:1;background-color:#065f46;background-color:rgb(6 95 70/var(--tw-bg-opacity,1))}.bg-fuchsia-800{--tw-bg-opacity:1;background-color:#86198f;background-color:rgb(134 25 143/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:#f3f4f6;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:#1f2937;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:#dcfce7;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:#22c55e;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-800{--tw-bg-opacity:1;background-color:#166534;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.bg-indigo-800{--tw-bg-opacity:1;background-color:#3730a3;background-color:rgb(55 48 163/var(--tw-bg-opacity,1))}.bg-lime-800{--tw-bg-opacity:1;background-color:#3f6212;background-color:rgb(63 98 18/var(--tw-bg-opacity,1))}.bg-pink-800{--tw-bg-opacity:1;background-color:#9d174d;background-color:rgb(157 23 77/var(--tw-bg-opacity,1))}.bg-purple-500{--tw-bg-opacity:1;background-color:#a855f7;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.bg-purple-700{--tw-bg-opacity:1;background-color:#7e22ce;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:#fee2e2;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:#ef4444;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-rose-800{--tw-bg-opacity:1;background-color:#9f1239;background-color:rgb(159 18 57/var(--tw-bg-opacity,1))}.bg-sky-800{--tw-bg-opacity:1;background-color:#075985;background-color:rgb(7 89 133/var(--tw-bg-opacity,1))}.bg-teal-800{--tw-bg-opacity:1;background-color:#115e59;background-color:rgb(17 94 89/var(--tw-bg-opacity,1))}.bg-violet-800{--tw-bg-opacity:1;background-color:#5b21b6;background-color:rgb(91 33 182/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:#fff;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:#fef9c3;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.pb-4{padding-bottom:1rem}.pr-2{padding-right:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-medium{font-weight:500}.font-semibold{font-weight:600}.italic{font-style:italic}.text-gray-500{--tw-text-opacity:1;color:#6b7280;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:#4b5563;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:#374151;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:#111827;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:#16a34a;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:#9333ea;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:#7e22ce;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:#ef4444;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:#dc2626;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-900{--tw-text-opacity:1;color:#7f1d1d;color:rgb(127 29 29/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:#475569;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:#fff;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-100{opacity:1}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.dark .ace_gutter{--tw-bg-opacity:1;background-color:#334155;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.dark .ace_gutter-active-line,.dark .ace_marker-layer .ace_active-line{--tw-bg-opacity:1;background-color:#0f172a;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.dark .ace_scroller{--tw-bg-opacity:1;background-color:#1e293b;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:#f3f4f6;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:text-purple-500:hover{--tw-text-opacity:1;color:#a855f7;color:rgb(168 85 247/var(--tw-text-opacity,1))}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-purple-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(168 85 247/var(--tw-ring-opacity,1))}.enabled\:hover\:bg-blue-700:hover:enabled{--tw-bg-opacity:1;background-color:#1d4ed8;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.enabled\:hover\:bg-green-600:hover:enabled{--tw-bg-opacity:1;background-color:#16a34a;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.enabled\:hover\:bg-purple-700:hover:enabled{--tw-bg-opacity:1;background-color:#7e22ce;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.enabled\:hover\:bg-red-600:hover:enabled{--tw-bg-opacity:1;background-color:#dc2626;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.enabled\:hover\:bg-red-700:hover:enabled{--tw-bg-opacity:1;background-color:#b91c1c;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:border-slate-500:is(.dark *){--tw-border-opacity:1;border-color:#64748b;border-color:rgb(100 116 139/var(--tw-border-opacity,1))}.dark\:bg-green-300:is(.dark *){--tw-bg-opacity:1;background-color:#86efac;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.dark\:bg-red-300:is(.dark *){--tw-bg-opacity:1;background-color:#fca5a5;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.dark\:bg-slate-600:is(.dark *){--tw-bg-opacity:1;background-color:#475569;background-color:rgb(71 85 105/var(--tw-bg-opacity,1))}.dark\:bg-slate-700:is(.dark *){--tw-bg-opacity:1;background-color:#334155;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.dark\:bg-slate-800:is(.dark *){--tw-bg-opacity:1;background-color:#1e293b;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.dark\:text-purple-600:is(.dark *){--tw-text-opacity:1;color:#9333ea;color:rgb(147 51 234/var(--tw-text-opacity,1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity:1;color:#cbd5e1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.dark\:text-slate-400:is(.dark *){--tw-text-opacity:1;color:#94a3b8;color:rgb(148 163 184/var(--tw-text-opacity,1))}.dark\:text-slate-800:is(.dark *){--tw-text-opacity:1;color:#1e293b;color:rgb(30 41 59/var(--tw-text-opacity,1))}@media (min-width:1024px){.lg\:static{position:static}.lg\:inset-0{inset:0}.lg\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}}.jsoneditor,.jsoneditor-modal{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none}.jsoneditor input,.jsoneditor input:not([type]),.jsoneditor input[type=search],.jsoneditor input[type=text],.jsoneditor-modal input,.jsoneditor-modal input:not([type]),.jsoneditor-modal input[type=search],.jsoneditor-modal input[type=text]{border:inherit;box-shadow:none;box-sizing:inherit;font-family:inherit;font-size:inherit;height:auto;line-height:inherit;padding:inherit;transition:none}.jsoneditor input:focus,.jsoneditor input:not([type]):focus,.jsoneditor input[type=search]:focus,.jsoneditor input[type=text]:focus,.jsoneditor-modal input:focus,.jsoneditor-modal input:not([type]):focus,.jsoneditor-modal input[type=search]:focus,.jsoneditor-modal input[type=text]:focus{border:inherit;box-shadow:inherit}.jsoneditor textarea,.jsoneditor-modal textarea{height:inherit}.jsoneditor select,.jsoneditor-modal select{display:inherit;height:inherit}.jsoneditor label,.jsoneditor-modal label{color:inherit;font-size:inherit;font-weight:inherit}.jsoneditor table,.jsoneditor-modal table{border-collapse:collapse;width:auto}.jsoneditor td,.jsoneditor th,.jsoneditor-modal td,.jsoneditor-modal th{border-radius:inherit;display:table-cell;padding:0;text-align:left;vertical-align:inherit}.jsoneditor .autocomplete.dropdown{background:#fff;border:1px solid #d3d3d3;box-shadow:2px 2px 12px #8080804d;cursor:default;font-family:consolas,menlo,monaco,Ubuntu Mono,source-code-pro,monospace;font-size:14px;margin:0;outline:0;overflow-x:hidden;overflow-y:auto;padding:5px;position:absolute;text-align:left}.jsoneditor .autocomplete.dropdown .item{color:#1a1a1a}.jsoneditor .autocomplete.dropdown .item.hover{background-color:#ebebeb}.jsoneditor .autocomplete.hint{color:#a1a1a1;left:4px;top:4px}.jsoneditor-contextmenu-root{height:0;position:relative;width:0}.jsoneditor-contextmenu{box-sizing:initial;position:absolute;z-index:2}.jsoneditor-contextmenu .jsoneditor-menu{background:#fff;border:1px solid #d3d3d3;box-shadow:2px 2px 12px #8080804d;height:auto;left:0;list-style:none;margin:0;padding:0;position:relative;top:0;width:128px}.jsoneditor-contextmenu .jsoneditor-menu button{background:#0000;border:none;box-sizing:border-box;color:#4d4d4d;cursor:pointer;font-family:arial,sans-serif;font-size:14px;height:auto;margin:0;padding:0 8px 0 0;position:relative;text-align:left;width:128px}.jsoneditor-contextmenu .jsoneditor-menu button::-moz-focus-inner{border:0;padding:0}.jsoneditor-contextmenu .jsoneditor-menu button.jsoneditor-default{width:96px}.jsoneditor-contextmenu .jsoneditor-menu button.jsoneditor-expand{border-left:1px solid #e5e5e5;float:right;height:24px;width:32px}.jsoneditor-contextmenu .jsoneditor-menu li{overflow:hidden}.jsoneditor-contextmenu .jsoneditor-menu li ul{border:none;box-shadow:inset 0 0 10px #80808080;display:none;left:-10px;padding:0 10px;position:relative;top:0;transition:all .3s ease-out}.jsoneditor-contextmenu .jsoneditor-menu li ul .jsoneditor-icon{margin-left:24px}.jsoneditor-contextmenu .jsoneditor-menu li ul li button{animation:all 1s ease-in-out;padding-left:24px}.jsoneditor-contextmenu .jsoneditor-menu li button .jsoneditor-expand{background-position:0 -72px;margin:0 4px 0 0;right:0}.jsoneditor-contextmenu .jsoneditor-icon,.jsoneditor-contextmenu .jsoneditor-menu li button .jsoneditor-expand{background-image:url(../../static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg);height:24px;padding:0;position:absolute;top:0;width:24px}.jsoneditor-contextmenu .jsoneditor-icon{border:none;left:0;margin:0}.jsoneditor-contextmenu .jsoneditor-text{word-wrap:break-word;padding:4px 0 4px 24px}.jsoneditor-contextmenu .jsoneditor-text.jsoneditor-right-margin{padding-right:24px}.jsoneditor-contextmenu .jsoneditor-separator{border-top:1px solid #e5e5e5;height:0;margin-top:5px;padding-top:5px}.jsoneditor-contextmenu button.jsoneditor-remove .jsoneditor-icon{background-position:-24px 0}.jsoneditor-contextmenu button.jsoneditor-append .jsoneditor-icon,.jsoneditor-contextmenu button.jsoneditor-insert .jsoneditor-icon{background-position:0 0}.jsoneditor-contextmenu button.jsoneditor-duplicate .jsoneditor-icon{background-position:-48px 0}.jsoneditor-contextmenu button.jsoneditor-sort-asc .jsoneditor-icon{background-position:-168px 0}.jsoneditor-contextmenu button.jsoneditor-sort-desc .jsoneditor-icon{background-position:-192px 0}.jsoneditor-contextmenu button.jsoneditor-transform .jsoneditor-icon{background-position:-216px 0}.jsoneditor-contextmenu button.jsoneditor-extract .jsoneditor-icon{background-position:0 -24px}.jsoneditor-contextmenu button.jsoneditor-type-string .jsoneditor-icon{background-position:-144px 0}.jsoneditor-contextmenu button.jsoneditor-type-auto .jsoneditor-icon{background-position:-120px 0}.jsoneditor-contextmenu button.jsoneditor-type-object .jsoneditor-icon{background-position:-72px 0}.jsoneditor-contextmenu button.jsoneditor-type-array .jsoneditor-icon{background-position:-96px 0}.jsoneditor-contextmenu button.jsoneditor-type-modes .jsoneditor-icon{background-image:none;width:6px}.jsoneditor-contextmenu li,.jsoneditor-contextmenu ul{box-sizing:initial;position:relative}.jsoneditor-contextmenu .jsoneditor-menu button:focus,.jsoneditor-contextmenu .jsoneditor-menu button:hover{background-color:#f5f5f5;color:#1a1a1a;outline:none}.jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected,.jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected:focus,.jsoneditor-contextmenu .jsoneditor-menu li button.jsoneditor-selected:hover{background-color:#ee422e;color:#fff}.jsoneditor-contextmenu .jsoneditor-menu li ul li button:focus,.jsoneditor-contextmenu .jsoneditor-menu li ul li button:hover{background-color:#f5f5f5}.jsoneditor-modal{border-radius:2px!important;box-shadow:2px 2px 12px #8080804d;color:#4d4d4d;line-height:1.3em;max-width:95%;padding:45px 15px 15px!important}.jsoneditor-modal.jsoneditor-modal-transform{width:600px!important}.jsoneditor-modal .pico-modal-header{background:#3883fa;box-sizing:border-box;color:#fff;font-family:arial,sans-serif;font-size:11pt;height:30px;left:0;line-height:30px;padding:0 10px;position:absolute;top:0;width:100%}.jsoneditor-modal table{width:100%}.jsoneditor-modal table td{padding:3px 0}.jsoneditor-modal table td.jsoneditor-modal-input{padding-right:0;text-align:right;white-space:nowrap}.jsoneditor-modal table td.jsoneditor-modal-actions{padding-top:15px}.jsoneditor-modal table th{vertical-align:middle}.jsoneditor-modal p:first-child{margin-top:0}.jsoneditor-modal a{color:#3883fa}.jsoneditor-modal .jsoneditor-jmespath-block{margin-bottom:10px}.jsoneditor-modal .pico-close{background:none!important;color:#fff;font-size:24px!important;right:7px!important;top:7px!important}.jsoneditor-modal input{padding:4px}.jsoneditor-modal input[type=text]{cursor:inherit}.jsoneditor-modal input[disabled]{background:#d3d3d3;color:grey}.jsoneditor-modal .jsoneditor-select-wrapper{display:inline-block;position:relative}.jsoneditor-modal .jsoneditor-select-wrapper:after{border-left:5px solid #0000;border-right:5px solid #0000;border-top:6px solid #666;content:"";height:0;pointer-events:none;position:absolute;right:8px;top:14px;width:0}.jsoneditor-modal select{-webkit-appearance:none;appearance:none;font-size:14px;line-height:1.5em;max-width:350px;min-width:180px;padding:3px 24px 3px 10px;text-indent:0;text-overflow:""}.jsoneditor-modal select::-ms-expand{display:none}.jsoneditor-modal .jsoneditor-button-group input{border-left-style:none;border-radius:0;margin:0;padding:4px 10px}.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-first{border-bottom-left-radius:3px;border-left-style:solid;border-top-left-radius:3px}.jsoneditor-modal .jsoneditor-button-group input.jsoneditor-button-last{border-bottom-right-radius:3px;border-top-right-radius:3px}.jsoneditor-modal .jsoneditor-transform-preview{background:#f5f5f5;height:200px}.jsoneditor-modal .jsoneditor-transform-preview.jsoneditor-error{color:#ee422e}.jsoneditor-modal .jsoneditor-jmespath-wizard{border-radius:3px;line-height:1.2em;padding:0;width:100%}.jsoneditor-modal .jsoneditor-jmespath-label{color:#1e90ff;font-weight:700;margin-bottom:5px;margin-top:20px}.jsoneditor-modal .jsoneditor-jmespath-wizard-table{border-collapse:collapse;width:100%}.jsoneditor-modal .jsoneditor-jmespath-wizard-label{font-style:italic;margin:4px 0 2px}.jsoneditor-modal .jsoneditor-inline{display:inline-block;padding-bottom:2px;padding-top:2px;position:relative;width:100%}.jsoneditor-modal .jsoneditor-inline:not(:last-child){padding-right:2px}.jsoneditor-modal .jsoneditor-jmespath-filter{display:flex;flex-wrap:wrap}.jsoneditor-modal .jsoneditor-jmespath-filter-field{width:180px}.jsoneditor-modal .jsoneditor-jmespath-filter-relation{width:100px}.jsoneditor-modal .jsoneditor-jmespath-filter-value{flex:1 1;min-width:180px}.jsoneditor-modal .jsoneditor-jmespath-sort-field{width:170px}.jsoneditor-modal .jsoneditor-jmespath-sort-order{width:150px}.jsoneditor-modal .jsoneditor-jmespath-select-fields{width:100%}.jsoneditor-modal .selectr-selected{border-color:#d3d3d3;padding:4px 28px 4px 8px}.jsoneditor-modal .selectr-selected .selectr-tag{background-color:#3883fa;border-radius:5px}.jsoneditor-modal table td,.jsoneditor-modal table th{border-collapse:collapse;border-spacing:0;color:#4d4d4d;font-weight:400;text-align:left;vertical-align:middle}.jsoneditor-modal #query,.jsoneditor-modal input,.jsoneditor-modal input[type=text],.jsoneditor-modal input[type=text]:focus,.jsoneditor-modal select,.jsoneditor-modal textarea{background:#fff;border:1px solid #d3d3d3;border-radius:3px;color:#4d4d4d;padding:4px}.jsoneditor-modal #query,.jsoneditor-modal textarea{border-radius:0;border-radius:initial}.jsoneditor-modal,.jsoneditor-modal #query,.jsoneditor-modal input,.jsoneditor-modal input[type=text],.jsoneditor-modal option,.jsoneditor-modal select,.jsoneditor-modal table td,.jsoneditor-modal table th,.jsoneditor-modal textarea{font-family:arial,sans-serif;font-size:10.5pt}.jsoneditor-modal #query,.jsoneditor-modal .jsoneditor-transform-preview{box-sizing:border-box;font-family:consolas,menlo,monaco,Ubuntu Mono,source-code-pro,monospace;font-size:14px;width:100%}.jsoneditor-modal input[type=button],.jsoneditor-modal input[type=submit]{background:#f5f5f5;padding:4px 20px}.jsoneditor-modal input,.jsoneditor-modal select{cursor:pointer}.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-asc input.jsoneditor-button-asc,.jsoneditor-modal .jsoneditor-button-group.jsoneditor-button-group-value-desc input.jsoneditor-button-desc{background:#3883fa;border-color:#3883fa;color:#fff}.jsoneditor{border:thin solid #3883fa;box-sizing:border-box;color:#1a1a1a;height:100%;line-height:100%;padding:0;position:relative;width:100%}a.jsoneditor-value,div.jsoneditor-default,div.jsoneditor-field,div.jsoneditor-readonly,div.jsoneditor-value{word-wrap:break-word;border:1px solid #0000;float:left;line-height:16px;margin:1px;min-height:16px;min-width:32px;overflow-wrap:break-word;padding:2px;word-break:break-word}div.jsoneditor-field p,div.jsoneditor-value p{margin:0}div.jsoneditor-value.jsoneditor-empty:after{content:"value"}div.jsoneditor-value.jsoneditor-string{color:#006000}div.jsoneditor-value.jsoneditor-number{color:#ee422e}div.jsoneditor-value.jsoneditor-boolean{color:#ff8c00}div.jsoneditor-value.jsoneditor-null{color:#004ed0}div.jsoneditor-value.jsoneditor-color-value,div.jsoneditor-value.jsoneditor-invalid{color:#1a1a1a}div.jsoneditor-readonly{color:grey;min-width:16px}div.jsoneditor-empty{border-color:#d3d3d3;border-radius:2px;border-style:dashed}div.jsoneditor-field.jsoneditor-empty:after{content:"field"}div.jsoneditor td{vertical-align:top}div.jsoneditor td.jsoneditor-separator{color:grey;padding:3px 0;vertical-align:top}div.jsoneditor td.jsoneditor-tree{vertical-align:top}div.jsoneditor.busy pre.jsoneditor-preview{background:#f5f5f5;color:grey}div.jsoneditor.busy div.jsoneditor-busy{display:inherit}div.jsoneditor code.jsoneditor-preview{background:none}div.jsoneditor.jsoneditor-mode-preview pre.jsoneditor-preview{box-sizing:border-box;height:100%;margin:0;overflow:auto;padding:2px;white-space:pre-wrap;width:100%;word-break:break-all}div.jsoneditor-default{color:grey;padding-left:10px}div.jsoneditor-tree{background:#fff;height:100%;overflow:auto;position:relative;width:100%}div.jsoneditor-tree button.jsoneditor-button{background-color:initial;background-image:url(../../static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg);border:none;cursor:pointer;height:24px;margin:0;padding:0;width:24px}div.jsoneditor-tree button.jsoneditor-button:focus{background-color:#f5f5f5;outline:1px solid #e5e5e5}div.jsoneditor-tree button.jsoneditor-collapsed{background-position:0 -48px}div.jsoneditor-tree button.jsoneditor-expanded{background-position:0 -72px}div.jsoneditor-tree button.jsoneditor-contextmenu-button{background-position:-48px -72px}div.jsoneditor-tree button.jsoneditor-invisible{background:none;visibility:hidden}div.jsoneditor-tree button.jsoneditor-dragarea{background-image:url(../../static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg);background-position:-72px -72px;cursor:move}div.jsoneditor-tree :focus{outline:none}div.jsoneditor-tree div.jsoneditor-show-more{background-color:#e5e5e5;border-radius:3px;color:grey;display:inline-block;font-family:arial,sans-serif;font-size:14px;margin:2px 0;padding:3px 4px}div.jsoneditor-tree div.jsoneditor-show-more a{color:grey;display:inline-block}div.jsoneditor-tree div.jsoneditor-color{border:1px solid grey;cursor:pointer;display:inline-block;height:12px;margin:4px;width:12px}div.jsoneditor-tree div.jsoneditor-color.jsoneditor-color-readonly{cursor:inherit}div.jsoneditor-tree div.jsoneditor-date{background:#a1a1a1;border-radius:3px;color:#fff;display:inline-block;font-family:arial,sans-serif;margin:0 3px;padding:3px}div.jsoneditor-tree table.jsoneditor-tree{border-collapse:collapse;border-spacing:0;width:100%}div.jsoneditor-tree .jsoneditor-button{display:block}div.jsoneditor-tree .jsoneditor-button.jsoneditor-schema-error{background-color:initial;background-image:url(../../static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg);background-position:-168px -48px;height:24px;margin:0 4px 0 0;padding:0;width:24px}div.jsoneditor-outer{box-sizing:border-box;height:100%;margin:0;padding:0;position:static;width:100%}div.jsoneditor-outer.has-nav-bar{margin-top:-26px;padding-top:26px}div.jsoneditor-outer.has-nav-bar.has-main-menu-bar{margin-top:-61px;padding-top:61px}div.jsoneditor-outer.has-status-bar{margin-bottom:-26px;padding-bottom:26px}div.jsoneditor-outer.has-main-menu-bar{margin-top:-35px;padding-top:35px}div.jsoneditor-busy{box-sizing:border-box;display:none;left:0;position:absolute;text-align:center;top:15%;width:100%}div.jsoneditor-busy span{background-color:#ffffab;border:1px solid #fe0;border-radius:3px;box-shadow:0 0 5px #0006;padding:5px 15px}div.jsoneditor-field.jsoneditor-empty:after,div.jsoneditor-value.jsoneditor-empty:after{color:#d3d3d3;font-size:8pt;pointer-events:none}a.jsoneditor-value.jsoneditor-url,div.jsoneditor-value.jsoneditor-url{color:#006000;text-decoration:underline}a.jsoneditor-value.jsoneditor-url{display:inline-block;margin:2px;padding:2px}a.jsoneditor-value.jsoneditor-url:focus,a.jsoneditor-value.jsoneditor-url:hover{color:#ee422e}div.jsoneditor-field.jsoneditor-highlight,div.jsoneditor-field[contenteditable=true]:focus,div.jsoneditor-field[contenteditable=true]:hover,div.jsoneditor-value.jsoneditor-highlight,div.jsoneditor-value[contenteditable=true]:focus,div.jsoneditor-value[contenteditable=true]:hover{background-color:#ffffab;border:1px solid #fe0;border-radius:2px}div.jsoneditor-field.jsoneditor-highlight-active,div.jsoneditor-field.jsoneditor-highlight-active:focus,div.jsoneditor-field.jsoneditor-highlight-active:hover,div.jsoneditor-value.jsoneditor-highlight-active,div.jsoneditor-value.jsoneditor-highlight-active:focus,div.jsoneditor-value.jsoneditor-highlight-active:hover{background-color:#fe0;border:1px solid #ffc700;border-radius:2px}div.jsoneditor-value.jsoneditor-array,div.jsoneditor-value.jsoneditor-object{min-width:16px}div.jsoneditor-tree button.jsoneditor-contextmenu-button.jsoneditor-selected,div.jsoneditor-tree button.jsoneditor-contextmenu-button:focus,div.jsoneditor-tree button.jsoneditor-contextmenu-button:hover,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu-button{background-position:-48px -48px}div.jsoneditor-tree div.jsoneditor-show-more a:focus,div.jsoneditor-tree div.jsoneditor-show-more a:hover{color:#ee422e}.ace-jsoneditor,textarea.jsoneditor-text{min-height:150px}.ace-jsoneditor.ace_editor,textarea.jsoneditor-text.ace_editor{font-family:consolas,menlo,monaco,Ubuntu Mono,source-code-pro,monospace}textarea.jsoneditor-text{background-color:#fff;border:none;box-sizing:border-box;height:100%;margin:0;outline-width:0;resize:none;width:100%}tr.jsoneditor-highlight,tr.jsoneditor-selected{background-color:#d3d3d3}tr.jsoneditor-selected button.jsoneditor-contextmenu-button,tr.jsoneditor-selected button.jsoneditor-dragarea{visibility:hidden}tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-contextmenu-button,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea{visibility:visible}div.jsoneditor-tree button.jsoneditor-dragarea:focus,div.jsoneditor-tree button.jsoneditor-dragarea:hover,tr.jsoneditor-selected.jsoneditor-first button.jsoneditor-dragarea{background-position:-72px -48px}div.jsoneditor td,div.jsoneditor th,div.jsoneditor tr{margin:0;padding:0}.jsoneditor-popover,.jsoneditor-schema-error,div.jsoneditor td,div.jsoneditor textarea,div.jsoneditor th,div.jsoneditor-field,div.jsoneditor-value,pre.jsoneditor-preview{color:#1a1a1a;font-family:consolas,menlo,monaco,Ubuntu Mono,source-code-pro,monospace;font-size:14px}.jsoneditor-schema-error{cursor:default;display:inline-block;height:24px;line-height:24px;position:relative;text-align:center;width:24px}.jsoneditor-popover{background-color:#4c4c4c;border-radius:3px;box-shadow:0 0 5px #0006;color:#fff;cursor:auto;padding:7px 10px;position:absolute;width:200px}.jsoneditor-popover.jsoneditor-above{bottom:32px;left:-98px}.jsoneditor-popover.jsoneditor-above:before{border-top:7px solid #4c4c4c;bottom:-7px}.jsoneditor-popover.jsoneditor-below{left:-98px;top:32px}.jsoneditor-popover.jsoneditor-below:before{border-bottom:7px solid #4c4c4c;top:-7px}.jsoneditor-popover.jsoneditor-left{right:32px;top:-7px}.jsoneditor-popover.jsoneditor-left:before{border-bottom:7px solid #0000;border-left:7px solid #4c4c4c;border-top:7px solid #0000;content:"";left:inherit;margin-left:inherit;margin-top:-7px;position:absolute;right:-14px;top:19px}.jsoneditor-popover.jsoneditor-right{left:32px;top:-7px}.jsoneditor-popover.jsoneditor-right:before{border-bottom:7px solid #0000;border-right:7px solid #4c4c4c;border-top:7px solid #0000;content:"";left:-14px;margin-left:inherit;margin-top:-7px;position:absolute;top:19px}.jsoneditor-popover:before{border-left:7px solid #0000;border-right:7px solid #0000;content:"";display:block;left:50%;margin-left:-7px;position:absolute}.jsoneditor-text-errors tr.jump-to-line:hover{cursor:pointer;text-decoration:underline}.jsoneditor-schema-error:focus .jsoneditor-popover,.jsoneditor-schema-error:hover .jsoneditor-popover{animation:fade-in .3s linear 1,move-up .3s linear 1;display:block}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.jsoneditor .jsoneditor-validation-errors-container{max-height:130px;overflow-y:auto}.jsoneditor .jsoneditor-validation-errors{overflow:hidden;width:100%}.jsoneditor .jsoneditor-additional-errors{background-color:#ebebeb;border-radius:8px;bottom:31px;color:grey;left:calc(50% - 92px);margin:auto;padding:7px 15px;position:absolute}.jsoneditor .jsoneditor-additional-errors.visible{opacity:1;transition:opacity 2s linear;visibility:visible}.jsoneditor .jsoneditor-additional-errors.hidden{opacity:0;transition:visibility 0s 2s,opacity 2s linear;visibility:hidden}.jsoneditor .jsoneditor-text-errors{border-collapse:collapse;border-top:1px solid #ffc700;width:100%}.jsoneditor .jsoneditor-text-errors td{padding:3px 6px;vertical-align:middle}.jsoneditor .jsoneditor-text-errors td pre{margin:0;white-space:pre-wrap}.jsoneditor .jsoneditor-text-errors tr{background-color:#ffffab}.jsoneditor .jsoneditor-text-errors tr.parse-error{background-color:rgba(238,46,46,.439)}.jsoneditor-text-errors .jsoneditor-schema-error{border:none;cursor:pointer;height:24px;margin:0 4px 0 0;padding:0;width:24px}.jsoneditor-text-errors tr .jsoneditor-schema-error{background-color:initial;background-image:url(../../static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg);background-position:-168px -48px}.jsoneditor-text-errors tr.parse-error .jsoneditor-schema-error{background-color:initial;background-image:url(../../static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg);background-position:-25px 0}.jsoneditor-anchor{cursor:pointer}.jsoneditor-anchor .picker_wrapper.popup.popup_bottom{left:-10px;top:28px}.fadein{animation:fadein .3s;-moz-animation:fadein .3s;-o-animation:fadein .3s}@keyframes fadein{0%{opacity:0}to{opacity:1}}.jsoneditor-modal input[type=search].selectr-input{border:1px solid #d3d3d3;box-sizing:border-box;margin:2px;padding:4px;width:calc(100% - 4px)}.jsoneditor-modal button.selectr-input-clear{right:8px}.jsoneditor-menu{background-color:#3883fa;border-bottom:1px solid #3883fa;box-sizing:border-box;color:#fff;height:35px;margin:0;padding:2px;width:100%}.jsoneditor-menu>.jsoneditor-modes>button,.jsoneditor-menu>button{background-color:initial;background-image:url(../../static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg);border:1px solid #0000;border-radius:2px;color:#fff;float:left;font-family:arial,sans-serif;font-size:14px;height:26px;margin:2px;opacity:.8;padding:0;width:26px}.jsoneditor-menu>.jsoneditor-modes>button:hover,.jsoneditor-menu>button:hover{background-color:#fff3;border:1px solid #fff6}.jsoneditor-menu>.jsoneditor-modes>button:active,.jsoneditor-menu>.jsoneditor-modes>button:focus,.jsoneditor-menu>button:active,.jsoneditor-menu>button:focus{background-color:#ffffff4d}.jsoneditor-menu>.jsoneditor-modes>button:disabled,.jsoneditor-menu>button:disabled{background-color:initial;border:none;opacity:.5}.jsoneditor-menu>button.jsoneditor-collapse-all{background-position:0 -96px}.jsoneditor-menu>button.jsoneditor-expand-all{background-position:0 -120px}.jsoneditor-menu>button.jsoneditor-sort{background-position:-120px -96px}.jsoneditor-menu>button.jsoneditor-transform{background-position:-144px -96px}.jsoneditor.jsoneditor-mode-form>.jsoneditor-menu>button.jsoneditor-sort,.jsoneditor.jsoneditor-mode-form>.jsoneditor-menu>button.jsoneditor-transform,.jsoneditor.jsoneditor-mode-view>.jsoneditor-menu>button.jsoneditor-sort,.jsoneditor.jsoneditor-mode-view>.jsoneditor-menu>button.jsoneditor-transform{display:none}.jsoneditor-menu>button.jsoneditor-undo{background-position:-24px -96px}.jsoneditor-menu>button.jsoneditor-undo:disabled{background-position:-24px -120px}.jsoneditor-menu>button.jsoneditor-redo{background-position:-48px -96px}.jsoneditor-menu>button.jsoneditor-redo:disabled{background-position:-48px -120px}.jsoneditor-menu>button.jsoneditor-compact{background-position:-72px -96px}.jsoneditor-menu>button.jsoneditor-format{background-position:-72px -120px}.jsoneditor-menu>button.jsoneditor-repair{background-position:-96px -96px}.jsoneditor-menu>.jsoneditor-modes{display:inline-block;float:left}.jsoneditor-menu>.jsoneditor-modes>button{background-image:none;padding-left:6px;padding-right:6px;width:auto}.jsoneditor-menu>.jsoneditor-modes>button.jsoneditor-separator,.jsoneditor-menu>button.jsoneditor-separator{margin-left:10px}.jsoneditor-menu a{color:#fff;font-family:arial,sans-serif;font-size:14px;opacity:.8;vertical-align:middle}.jsoneditor-menu a:hover{opacity:1}.jsoneditor-menu a.jsoneditor-poweredBy{font-size:8pt;padding:10px;position:absolute;right:0;top:0}.jsoneditor-navigation-bar{background-color:#ebebeb;border-bottom:1px solid #d3d3d3;box-sizing:border-box;color:grey;font-family:arial,sans-serif;font-size:14px;height:26px;line-height:26px;margin:0;overflow:hidden;padding:0;width:100%}.jsoneditor-search{border-collapse:collapse;border-spacing:0;display:flex;font-family:arial,sans-serif;position:absolute;right:4px;top:4px}.jsoneditor-search input{border:none;color:#1a1a1a;font-family:arial,sans-serif;line-height:20px;margin:1px;outline:none;width:120px}.jsoneditor-search button{background:url(../../static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg);border:none;height:24px;margin:0;padding:0;vertical-align:top;width:16px}.jsoneditor-search button:hover{background-color:initial}.jsoneditor-search button.jsoneditor-refresh{background-position:-99px -73px;width:18px}.jsoneditor-search button.jsoneditor-next{background-position:-124px -73px;cursor:pointer}.jsoneditor-search button.jsoneditor-next:hover{background-position:-124px -49px}.jsoneditor-search button.jsoneditor-previous{background-position:-148px -73px;cursor:pointer;margin-right:2px}.jsoneditor-search button.jsoneditor-previous:hover{background-position:-148px -49px}.jsoneditor-results{color:#fff;font-family:arial,sans-serif;line-height:26px;padding-right:5px}.jsoneditor-frame{background-color:#fff;border:1px solid #0000;margin:0;padding:0 2px}.jsoneditor-statusbar{background-color:#ebebeb;border-top:1px solid #d3d3d3;box-sizing:border-box;color:grey;font-size:14px;height:26px;line-height:26px}.jsoneditor-statusbar>.jsoneditor-curserinfo-val{margin-right:12px}.jsoneditor-statusbar>.jsoneditor-curserinfo-count{margin-left:4px}.jsoneditor-statusbar>.jsoneditor-validation-error-icon{background-image:url(../../static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg);background-position:-168px -48px;cursor:pointer;float:right;height:24px;margin-top:1px;padding:0;width:24px}.jsoneditor-statusbar>.jsoneditor-validation-error-count{cursor:pointer;float:right;margin:0 4px 0 0}.jsoneditor-statusbar>.jsoneditor-parse-error-icon{background-image:url(../../static/media/jsoneditor-icons.15f2789dd231f36d43a4.svg);background-position:-25px 0;float:right;height:24px;margin:1px;padding:0;width:24px}.jsoneditor-statusbar .jsoneditor-array-info a{color:inherit}div.jsoneditor-statusbar>.jsoneditor-curserinfo-label,div.jsoneditor-statusbar>.jsoneditor-size-info{margin:0 4px}.jsoneditor-treepath{outline:none;overflow:hidden;padding:0 5px;white-space:nowrap}.jsoneditor-treepath.show-all{word-wrap:break-word;background-color:#ebebeb;box-shadow:2px 2px 12px #8080804d;position:absolute;white-space:normal;z-index:1}.jsoneditor-treepath.show-all span.jsoneditor-treepath-show-all-btn{display:none}.jsoneditor-treepath div.jsoneditor-contextmenu-root{left:0;position:absolute}.jsoneditor-treepath .jsoneditor-treepath-show-all-btn{background-color:#ebebeb;cursor:pointer;height:20px;left:0;padding:0 3px;position:absolute}.jsoneditor-treepath .jsoneditor-treepath-element{font-family:arial,sans-serif;font-size:14px;margin:1px}.jsoneditor-treepath .jsoneditor-treepath-seperator{font-family:arial,sans-serif;font-size:9pt;margin:2px}.jsoneditor-treepath span.jsoneditor-treepath-element:hover,.jsoneditor-treepath span.jsoneditor-treepath-seperator:hover{cursor:pointer;text-decoration:underline}
4
-
5
- /*!
6
- * Selectr 2.4.13
7
- * http://mobius.ovh/docs/selectr
8
- *
9
- * Released under the MIT license
10
- */.selectr-container{position:relative}.selectr-container li{list-style:none}.selectr-hidden{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.selectr-visible{height:100%;left:0;opacity:0;position:absolute;top:0;width:100%;z-index:11}.selectr-desktop.multiple .selectr-visible{display:none}.selectr-desktop.multiple.native-open .selectr-visible{display:block;height:auto;min-height:200px!important;opacity:1;top:100%}.selectr-container.multiple.selectr-mobile .selectr-selected{z-index:0}.selectr-selected{background-color:#fff;border:1px solid #999;border-radius:3px;box-sizing:border-box;cursor:pointer;padding:7px 28px 7px 14px;position:relative;width:100%;z-index:1}.selectr-selected:before{border-color:#6c7a86 #0000 #0000;border-style:solid;border-width:4px 4px 0;content:"";height:0;position:absolute;right:10px;top:50%;transform:rotate(0deg) translate3d(0,-50%,0);width:0}.selectr-container.native-open .selectr-selected:before,.selectr-container.open .selectr-selected:before{border-color:#0000 #0000 #6c7a86;border-style:solid;border-width:0 4px 4px}.selectr-label{display:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.selectr-placeholder{color:#6c7a86}.selectr-tags{margin:0;padding:0;white-space:normal}.has-selected .selectr-tags{margin:0 0 -2px}.selectr-tag{background:#acb7bf none repeat scroll 0 0;border:none;border-radius:10px;color:#fff;cursor:default;float:left;list-style:none;margin:0 2px 2px 0;padding:2px 25px 2px 8px;position:relative}.selectr-container.multiple.has-selected .selectr-selected{padding:5px 28px 5px 5px}.selectr-options-container{background-color:#fff;border:1px solid #999;border-radius:0 0 3px 3px;border-top:0 solid #0000;box-sizing:border-box;display:none;left:0;position:absolute;top:calc(100% - 1px);width:100%;z-index:10000}.selectr-container.open .selectr-options-container{display:block}.selectr-input-container{display:none;position:relative}.selectr-clear,.selectr-input-clear,.selectr-tag-remove{background-color:initial;border:none;cursor:pointer;height:20px;padding:0;position:absolute;right:22px;top:50%;transform:translate3d(0,-50%,0);width:20px;z-index:11}.selectr-clear,.selectr-input-clear{display:none}.selectr-container.has-selected .selectr-clear,.selectr-input-container.active .selectr-input-clear{display:block}.selectr-selected .selectr-tag-remove{right:2px}.selectr-clear:after,.selectr-clear:before,.selectr-input-clear:after,.selectr-input-clear:before,.selectr-tag-remove:after,.selectr-tag-remove:before{background-color:#6c7a86;content:" ";height:10px;left:9px;position:absolute;top:5px;width:2px}.selectr-tag-remove:after,.selectr-tag-remove:before{background-color:#fff;height:12px;top:4px;width:3px}.selectr-clear:before,.selectr-input-clear:before,.selectr-tag-remove:before{transform:rotate(45deg)}.selectr-clear:after,.selectr-input-clear:after,.selectr-tag-remove:after{transform:rotate(-45deg)}.selectr-input-container.active,.selectr-input-container.active .selectr-clear{display:block}.selectr-input{border:1px solid #999;border-radius:3px;box-sizing:border-box;left:5px;margin:10px 15px;padding:7px 30px 7px 9px;top:5px;width:calc(100% - 30px)}.selectr-notice{background-color:#fff;border-radius:0 0 3px 3px;border-top:1px solid #999;box-sizing:border-box;display:none;padding:8px 16px;width:100%}.selectr-container.notice .selectr-notice{display:block}.selectr-container.notice .selectr-selected{border-radius:3px 3px 0 0}.selectr-options{display:none;margin:0;max-height:200px;overflow-x:auto;overflow-y:scroll;padding:0;position:relative;top:calc(100% + 2px)}.selectr-container.notice .selectr-options-container,.selectr-container.open .selectr-input-container,.selectr-container.open .selectr-options{display:block}.selectr-option{cursor:pointer;display:block;font-weight:400;list-style:none outside none;padding:5px 20px;position:relative}.selectr-options.optgroups>.selectr-option{padding-left:25px}.selectr-optgroup{font-weight:700;padding:0}.selectr-optgroup--label{font-weight:700;margin-top:10px;padding:5px 15px}.selectr-match{text-decoration:underline}.selectr-option.selected{background-color:#ddd}.selectr-option.active{background-color:#5897fb;color:#fff}.selectr-option.disabled{opacity:.4}.selectr-option.excluded{display:none}.selectr-container.open .selectr-selected{border-color:#999 #999 #0000;border-radius:3px 3px 0 0}.selectr-container.open .selectr-selected:after{transform:rotate(180deg) translate3d(0,50%,0)}.selectr-disabled{opacity:.6}.has-selected .selectr-placeholder,.selectr-empty{display:none}.has-selected .selectr-label{display:block}.taggable .selectr-selected{padding:4px 28px 4px 4px}.taggable .selectr-selected:after{clear:both;content:" ";display:table}.taggable .selectr-label{width:auto}.taggable .selectr-tags{display:block;float:left}.taggable .selectr-placeholder{display:none}.input-tag{float:left;min-width:90px;width:auto}.selectr-tag-input{border:none;font-family:inherit;font-size:inherit;font-weight:inherit;padding:3px 10px;width:100%}.selectr-input-container.loading:after{animation:selectr-spin .5s linear 0s infinite normal forwards running;border:3px solid #ddd;border-radius:50%;border-top-color:#aaa;content:"";height:20px;position:absolute;right:20px;top:50%;transform:translate3d(0,-50%,0);transform-origin:50% 0 0;width:20px}@keyframes selectr-spin{0%{transform:rotate(0deg) translate3d(0,-50%,0)}to{transform:rotate(1turn) translate3d(0,-50%,0)}}.selectr-container.open.inverted .selectr-selected{border-color:#0000 #999 #999;border-radius:0 0 3px 3px}.selectr-container.inverted .selectr-options-container{background-color:#fff;border-color:#999 #999 #0000;border-radius:3px 3px 0 0;border-width:1px 1px 0;bottom:calc(100% - 1px);top:auto}.selectr-container ::placeholder{color:#6c7a86;opacity:1}.jsoneditor{border:none}.jsoneditor-react-container{height:100%;width:100%}.json-view{--json-property:#009033;--json-index:#676dff;--json-number:#676dff;--json-string:#b2762e;--json-boolean:#dc155e;--json-null:#dc155e}.json-view .json-view--property{color:var(--json-property)}.json-view .json-view--index{color:var(--json-index)}.json-view .json-view--number{color:var(--json-number)}.json-view .json-view--string{color:var(--json-string)}.json-view .json-view--boolean{color:var(--json-boolean)}.json-view .json-view--null{color:var(--json-null)}.json-view .json-view--pair:hover>.json-view--copy,.json-view:hover>.json-view--copy{display:inline-block}.json-view .json-view--copy{cursor:pointer;display:none;height:1em;margin-left:4px;vertical-align:-11%;width:1em}.json-view .jv-indent{padding-left:16px}.json-view .jv-chevron{cursor:pointer;display:inline-block;opacity:.4;vertical-align:-20%}.json-view .jv-chevron:hover{opacity:.8}.json-view .jv-button{background:#0000;border:none;cursor:pointer;outline:none}.json-view .cursor-pointer{cursor:pointer}
11
- /*# sourceMappingURL=main.fbbade37.css.map*/