mcp-use 1.1.7 → 1.1.8-canary.1

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.
@@ -939,25 +939,48 @@ if (container && Component) {
939
939
  }
940
940
  let html = "";
941
941
  try {
942
- html = await (0, import_node_fs2.readFileSync)((0, import_node_path.join)(tempDir, widget.name, "index.html"), "utf8");
942
+ html = (0, import_node_fs2.readFileSync)((0, import_node_path.join)(tempDir, widget.name, "index.html"), "utf8");
943
+ const mcpUrl = process.env.MCP_URL || "/";
944
+ if (mcpUrl && html) {
945
+ const htmlWithoutComments = html.replace(/<!--[\s\S]*?-->/g, "");
946
+ const baseTagRegex = /<base\s+[^>]*\/?>/i;
947
+ if (baseTagRegex.test(htmlWithoutComments)) {
948
+ const actualBaseTagMatch = html.match(/<base\s+[^>]*\/?>/i);
949
+ if (actualBaseTagMatch) {
950
+ html = html.replace(actualBaseTagMatch[0], `<base href="${mcpUrl}" />`);
951
+ }
952
+ } else {
953
+ const headTagRegex = /<head[^>]*>/i;
954
+ if (headTagRegex.test(html)) {
955
+ html = html.replace(headTagRegex, (match) => `${match}
956
+ <base href="${mcpUrl}" />`);
957
+ }
958
+ }
959
+ }
960
+ html = html.replace(/src="\/mcp-use\/widgets\/([^"]+)"/g, `src="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
961
+ html = html.replace(/href="\/mcp-use\/widgets\/([^"]+)"/g, `href="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
962
+ html = html.replace(/<head[^>]*>/i, `<head>
963
+ <script>window.__getFile = (filename) => { return "${this.serverBaseUrl}/mcp-use/widgets/${widget.name}/"+filename }</script>`);
943
964
  } catch (error) {
944
965
  console.error(`Failed to read html template for widget ${widget.name}`, error);
945
966
  }
946
967
  this.uiResource({
947
968
  name: widget.name,
948
- title: widget.name,
969
+ title: widgetMetadata.title || widget.name,
949
970
  description,
950
971
  type,
951
972
  props,
952
973
  _meta: {
953
974
  "mcp-use/widget": {
954
975
  name: widget.name,
976
+ title: widgetMetadata.title || widget.name,
955
977
  description,
956
978
  type,
957
979
  props,
958
980
  html,
959
981
  dev: true
960
- }
982
+ },
983
+ ...widgetMetadata._meta || {}
961
984
  },
962
985
  htmlTemplate: html,
963
986
  appsSdkMetadata: {
@@ -967,10 +990,18 @@ if (container && Component) {
967
990
  "openai/widgetAccessible": true,
968
991
  "openai/resultCanProduceWidget": true,
969
992
  "openai/widgetCSP": {
970
- connect_domains: [],
971
- resource_domains: ["https://persistent.oaistatic.com"]
993
+ connect_domains: [
994
+ ...widgetMetadata.appsSdkMetadata?.connect_domains || []
995
+ ],
996
+ resource_domains: [
997
+ "https://*.oaistatic.com",
998
+ "https://*.oaiusercontent.com",
999
+ // always also add the base url of the server
1000
+ ...this.serverBaseUrl ? [this.serverBaseUrl] : []
1001
+ ]
972
1002
  }
973
- }
1003
+ },
1004
+ ...widgetMetadata.appsSdkMetadata || {}
974
1005
  });
975
1006
  }
976
1007
  }
@@ -1011,6 +1042,27 @@ if (container && Component) {
1011
1042
  let html = "";
1012
1043
  try {
1013
1044
  html = (0, import_node_fs2.readFileSync)(indexPath, "utf8");
1045
+ const mcpUrl = process.env.MCP_URL || "/";
1046
+ if (mcpUrl && html) {
1047
+ const htmlWithoutComments = html.replace(/<!--[\s\S]*?-->/g, "");
1048
+ const baseTagRegex = /<base\s+[^>]*\/?>/i;
1049
+ if (baseTagRegex.test(htmlWithoutComments)) {
1050
+ const actualBaseTagMatch = html.match(/<base\s+[^>]*\/?>/i);
1051
+ if (actualBaseTagMatch) {
1052
+ html = html.replace(actualBaseTagMatch[0], `<base href="${mcpUrl}" />`);
1053
+ }
1054
+ } else {
1055
+ const headTagRegex = /<head[^>]*>/i;
1056
+ if (headTagRegex.test(html)) {
1057
+ html = html.replace(headTagRegex, (match) => `${match}
1058
+ <base href="${mcpUrl}" />`);
1059
+ }
1060
+ }
1061
+ html = html.replace(/src="\/mcp-use\/widgets\/([^"]+)"/g, `src="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
1062
+ html = html.replace(/href="\/mcp-use\/widgets\/([^"]+)"/g, `href="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
1063
+ html = html.replace(/<head[^>]*>/i, `<head>
1064
+ <script>window.__getFile = (filename) => { return "${this.serverBaseUrl}/mcp-use/widgets/${widgetName}/"+filename }</script>`);
1065
+ }
1014
1066
  } catch (error) {
1015
1067
  console.error(`[WIDGET] Failed to read ${widgetName}/index.html:`, error);
1016
1068
  continue;
@@ -1032,7 +1084,7 @@ if (container && Component) {
1032
1084
  }
1033
1085
  this.uiResource({
1034
1086
  name: widgetName,
1035
- title: widgetName,
1087
+ title: metadata.title || widgetName,
1036
1088
  description,
1037
1089
  type: "appsSdk",
1038
1090
  props,
@@ -1044,7 +1096,8 @@ if (container && Component) {
1044
1096
  props,
1045
1097
  html,
1046
1098
  dev: false
1047
- }
1099
+ },
1100
+ ...metadata._meta || {}
1048
1101
  },
1049
1102
  htmlTemplate: html,
1050
1103
  appsSdkMetadata: {
@@ -1053,14 +1106,17 @@ if (container && Component) {
1053
1106
  "openai/toolInvocation/invoked": `${widgetName} ready`,
1054
1107
  "openai/widgetAccessible": true,
1055
1108
  "openai/resultCanProduceWidget": true,
1109
+ ...metadata.appsSdkMetadata || {},
1056
1110
  "openai/widgetCSP": {
1057
- connect_domains: [],
1111
+ connect_domains: [
1112
+ ...metadata.appsSdkMetadata?.connect_domains || []
1113
+ ],
1058
1114
  resource_domains: [
1059
1115
  "https://*.oaistatic.com",
1060
- "https://*.unsplash.com",
1061
1116
  "https://*.oaiusercontent.com",
1062
1117
  // always also add the base url of the server
1063
- ...this.serverBaseUrl ? [this.serverBaseUrl] : []
1118
+ ...this.serverBaseUrl ? [this.serverBaseUrl] : [],
1119
+ ...metadata.appsSdkMetadata?.resource_domains || []
1064
1120
  ]
1065
1121
  }
1066
1122
  }
@@ -1249,7 +1305,12 @@ if (container && Component) {
1249
1305
  });
1250
1306
  this.app.get("/mcp-use/widgets/:widget", (req, res, next) => {
1251
1307
  const filePath = (0, import_node_path.join)(process.cwd(), "dist", "resources", "widgets", req.params.widget, "index.html");
1252
- res.sendFile(filePath, (err) => err ? next() : void 0);
1308
+ let html = (0, import_node_fs2.readFileSync)(filePath, "utf8");
1309
+ html = html.replace(/src="\/mcp-use\/widgets\/([^"]+)"/g, `src="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
1310
+ html = html.replace(/href="\/mcp-use\/widgets\/([^"]+)"/g, `href="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
1311
+ html = html.replace(/<head[^>]*>/i, `<head>
1312
+ <script>window.__getFile = (filename) => { return "${this.serverBaseUrl}/mcp-use/widgets/${req.params.widget}/"+filename }</script>`);
1313
+ res.send(html);
1253
1314
  });
1254
1315
  }
1255
1316
  /**
@@ -901,25 +901,48 @@ if (container && Component) {
901
901
  }
902
902
  let html = "";
903
903
  try {
904
- html = await readFileSync(join(tempDir, widget.name, "index.html"), "utf8");
904
+ html = readFileSync(join(tempDir, widget.name, "index.html"), "utf8");
905
+ const mcpUrl = process.env.MCP_URL || "/";
906
+ if (mcpUrl && html) {
907
+ const htmlWithoutComments = html.replace(/<!--[\s\S]*?-->/g, "");
908
+ const baseTagRegex = /<base\s+[^>]*\/?>/i;
909
+ if (baseTagRegex.test(htmlWithoutComments)) {
910
+ const actualBaseTagMatch = html.match(/<base\s+[^>]*\/?>/i);
911
+ if (actualBaseTagMatch) {
912
+ html = html.replace(actualBaseTagMatch[0], `<base href="${mcpUrl}" />`);
913
+ }
914
+ } else {
915
+ const headTagRegex = /<head[^>]*>/i;
916
+ if (headTagRegex.test(html)) {
917
+ html = html.replace(headTagRegex, (match) => `${match}
918
+ <base href="${mcpUrl}" />`);
919
+ }
920
+ }
921
+ }
922
+ html = html.replace(/src="\/mcp-use\/widgets\/([^"]+)"/g, `src="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
923
+ html = html.replace(/href="\/mcp-use\/widgets\/([^"]+)"/g, `href="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
924
+ html = html.replace(/<head[^>]*>/i, `<head>
925
+ <script>window.__getFile = (filename) => { return "${this.serverBaseUrl}/mcp-use/widgets/${widget.name}/"+filename }</script>`);
905
926
  } catch (error) {
906
927
  console.error(`Failed to read html template for widget ${widget.name}`, error);
907
928
  }
908
929
  this.uiResource({
909
930
  name: widget.name,
910
- title: widget.name,
931
+ title: widgetMetadata.title || widget.name,
911
932
  description,
912
933
  type,
913
934
  props,
914
935
  _meta: {
915
936
  "mcp-use/widget": {
916
937
  name: widget.name,
938
+ title: widgetMetadata.title || widget.name,
917
939
  description,
918
940
  type,
919
941
  props,
920
942
  html,
921
943
  dev: true
922
- }
944
+ },
945
+ ...widgetMetadata._meta || {}
923
946
  },
924
947
  htmlTemplate: html,
925
948
  appsSdkMetadata: {
@@ -929,10 +952,18 @@ if (container && Component) {
929
952
  "openai/widgetAccessible": true,
930
953
  "openai/resultCanProduceWidget": true,
931
954
  "openai/widgetCSP": {
932
- connect_domains: [],
933
- resource_domains: ["https://persistent.oaistatic.com"]
955
+ connect_domains: [
956
+ ...widgetMetadata.appsSdkMetadata?.connect_domains || []
957
+ ],
958
+ resource_domains: [
959
+ "https://*.oaistatic.com",
960
+ "https://*.oaiusercontent.com",
961
+ // always also add the base url of the server
962
+ ...this.serverBaseUrl ? [this.serverBaseUrl] : []
963
+ ]
934
964
  }
935
- }
965
+ },
966
+ ...widgetMetadata.appsSdkMetadata || {}
936
967
  });
937
968
  }
938
969
  }
@@ -973,6 +1004,27 @@ if (container && Component) {
973
1004
  let html = "";
974
1005
  try {
975
1006
  html = readFileSync(indexPath, "utf8");
1007
+ const mcpUrl = process.env.MCP_URL || "/";
1008
+ if (mcpUrl && html) {
1009
+ const htmlWithoutComments = html.replace(/<!--[\s\S]*?-->/g, "");
1010
+ const baseTagRegex = /<base\s+[^>]*\/?>/i;
1011
+ if (baseTagRegex.test(htmlWithoutComments)) {
1012
+ const actualBaseTagMatch = html.match(/<base\s+[^>]*\/?>/i);
1013
+ if (actualBaseTagMatch) {
1014
+ html = html.replace(actualBaseTagMatch[0], `<base href="${mcpUrl}" />`);
1015
+ }
1016
+ } else {
1017
+ const headTagRegex = /<head[^>]*>/i;
1018
+ if (headTagRegex.test(html)) {
1019
+ html = html.replace(headTagRegex, (match) => `${match}
1020
+ <base href="${mcpUrl}" />`);
1021
+ }
1022
+ }
1023
+ html = html.replace(/src="\/mcp-use\/widgets\/([^"]+)"/g, `src="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
1024
+ html = html.replace(/href="\/mcp-use\/widgets\/([^"]+)"/g, `href="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
1025
+ html = html.replace(/<head[^>]*>/i, `<head>
1026
+ <script>window.__getFile = (filename) => { return "${this.serverBaseUrl}/mcp-use/widgets/${widgetName}/"+filename }</script>`);
1027
+ }
976
1028
  } catch (error) {
977
1029
  console.error(`[WIDGET] Failed to read ${widgetName}/index.html:`, error);
978
1030
  continue;
@@ -994,7 +1046,7 @@ if (container && Component) {
994
1046
  }
995
1047
  this.uiResource({
996
1048
  name: widgetName,
997
- title: widgetName,
1049
+ title: metadata.title || widgetName,
998
1050
  description,
999
1051
  type: "appsSdk",
1000
1052
  props,
@@ -1006,7 +1058,8 @@ if (container && Component) {
1006
1058
  props,
1007
1059
  html,
1008
1060
  dev: false
1009
- }
1061
+ },
1062
+ ...metadata._meta || {}
1010
1063
  },
1011
1064
  htmlTemplate: html,
1012
1065
  appsSdkMetadata: {
@@ -1015,14 +1068,17 @@ if (container && Component) {
1015
1068
  "openai/toolInvocation/invoked": `${widgetName} ready`,
1016
1069
  "openai/widgetAccessible": true,
1017
1070
  "openai/resultCanProduceWidget": true,
1071
+ ...metadata.appsSdkMetadata || {},
1018
1072
  "openai/widgetCSP": {
1019
- connect_domains: [],
1073
+ connect_domains: [
1074
+ ...metadata.appsSdkMetadata?.connect_domains || []
1075
+ ],
1020
1076
  resource_domains: [
1021
1077
  "https://*.oaistatic.com",
1022
- "https://*.unsplash.com",
1023
1078
  "https://*.oaiusercontent.com",
1024
1079
  // always also add the base url of the server
1025
- ...this.serverBaseUrl ? [this.serverBaseUrl] : []
1080
+ ...this.serverBaseUrl ? [this.serverBaseUrl] : [],
1081
+ ...metadata.appsSdkMetadata?.resource_domains || []
1026
1082
  ]
1027
1083
  }
1028
1084
  }
@@ -1211,7 +1267,12 @@ if (container && Component) {
1211
1267
  });
1212
1268
  this.app.get("/mcp-use/widgets/:widget", (req, res, next) => {
1213
1269
  const filePath = join(process.cwd(), "dist", "resources", "widgets", req.params.widget, "index.html");
1214
- res.sendFile(filePath, (err) => err ? next() : void 0);
1270
+ let html = readFileSync(filePath, "utf8");
1271
+ html = html.replace(/src="\/mcp-use\/widgets\/([^"]+)"/g, `src="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
1272
+ html = html.replace(/href="\/mcp-use\/widgets\/([^"]+)"/g, `href="${this.serverBaseUrl}/mcp-use/widgets/$1"`);
1273
+ html = html.replace(/<head[^>]*>/i, `<head>
1274
+ <script>window.__getFile = (filename) => { return "${this.serverBaseUrl}/mcp-use/widgets/${req.params.widget}/"+filename }</script>`);
1275
+ res.send(html);
1215
1276
  });
1216
1277
  }
1217
1278
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,YAAY,EACZ,cAAc,EACd,oBAAoB,EAIrB,MAAM,kBAAkB,CAAA;AAGzB,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAc/C,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,aAAa,CAAC,CAAQ;IAE9B;;;;;;;;;OASG;gBACS,MAAM,EAAE,YAAY;IAmChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI;IAmBtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,gBAAgB,CAAC,0BAA0B,EAAE,0BAA0B,GAAG,IAAI;IA4C9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,IAAI,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;IAmB1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI;IAiBhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkEG;IACH,UAAU,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI;IAoJlD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;IAsBtB;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;;;;;;;;OAUG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjB;;;;;;;;;;;;OAYG;YACW,eAAe;IAqO7B;;;;;;;;;;;OAWG;YACW,sBAAsB;IAwGpC;;;;;;;;;;;;;;;;;;;OAmBG;YACW,QAAQ;IAyDtB;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB1C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,cAAc;IA6BtB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,iBAAiB;IAsCzB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,sBAAsB;IAmC9B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,gBAAgB;CAyBzB;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,GAAG,OAAO,CAAA;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,iBAAiB,CASnG"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,YAAY,EACZ,cAAc,EACd,oBAAoB,EAIrB,MAAM,kBAAkB,CAAA;AAGzB,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAc/C,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,aAAa,CAAC,CAAQ;IAE9B;;;;;;;;;OASG;gBACS,MAAM,EAAE,YAAY;IAmChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI;IAmBtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,gBAAgB,CAAC,0BAA0B,EAAE,0BAA0B,GAAG,IAAI;IA4C9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,IAAI,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;IAmB1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI;IAiBhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkEG;IACH,UAAU,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI;IAoJlD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;IAsBtB;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;;;;;;;;OAUG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjB;;;;;;;;;;;;OAYG;YACW,eAAe;IA8Q7B;;;;;;;;;;;OAWG;YACW,sBAAsB;IA2IpC;;;;;;;;;;;;;;;;;;;OAmBG;YACW,QAAQ;IAyDtB;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB1C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,cAAc;IA6BtB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,iBAAiB;IA+CzB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,sBAAsB;IAmC9B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,gBAAgB;CAyBzB;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,GAAG,OAAO,CAAA;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,iBAAiB,CASnG"}