whistle.mockbubu 2.2.4 → 2.2.5

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.
@@ -32,7 +32,7 @@ module.exports = (router) => {
32
32
  // 新增匹配规则
33
33
  router.post('/cgi-bin/mockbubu/add-match-version', wrapRouteHandler(async (ctx) => {
34
34
  const { groupManager } = ctx
35
- const { url, name, description = '' } = ctx.request.body || {}
35
+ const { url, name, description = '', content } = ctx.request.body || {}
36
36
 
37
37
  validateRequiredParams({ url, name }, ['url', 'name'])
38
38
 
@@ -42,7 +42,7 @@ module.exports = (router) => {
42
42
  name,
43
43
  description,
44
44
  conditions: [], // 新规则默认空条件(兜底匹配)
45
- content: {},
45
+ content: content || {},
46
46
  priority: 0,
47
47
  })
48
48
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "whistle.mockbubu",
3
- "version": "2.2.4",
3
+ "version": "2.2.5",
4
4
  "description": "mock response data",
5
5
  "scripts": {
6
6
  "lint": "eslint . --ext .js",
package/public/js/app.js CHANGED
@@ -2317,6 +2317,24 @@ const __default__ = {
2317
2317
  const fullScreenEditorRef = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)(null);
2318
2318
  const versionNameInput = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)(null);
2319
2319
  const matchRuleNameInput = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)(null);
2320
+ const tabsAreaRef = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)(null);
2321
+ const tabsFade = (0,vue__WEBPACK_IMPORTED_MODULE_12__.reactive)({
2322
+ top: false,
2323
+ bottom: false
2324
+ });
2325
+ let tabsFadePending = false;
2326
+ const updateTabsFade = () => {
2327
+ if (tabsFadePending) return;
2328
+ tabsFadePending = true;
2329
+ requestAnimationFrame(() => {
2330
+ const el = tabsAreaRef.value;
2331
+ if (el) {
2332
+ tabsFade.top = el.scrollTop > 2;
2333
+ tabsFade.bottom = el.scrollTop + el.clientHeight < el.scrollHeight - 2;
2334
+ }
2335
+ tabsFadePending = false;
2336
+ });
2337
+ };
2320
2338
  const responseList = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)([]);
2321
2339
  const currentFile = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)({
2322
2340
  content: {}
@@ -2504,8 +2522,10 @@ const __default__ = {
2504
2522
 
2505
2523
  // 后端返回的数据已经包含 type, name, content, updateTime
2506
2524
  // 只需添加 filename 字段用于兼容前端现有逻辑
2525
+ // 冻结每项的 content,阻止 Vue 2 对大对象进行深度响应式处理,避免主线程卡死
2507
2526
  versionList.forEach(item => {
2508
2527
  item.filename = item.name;
2528
+ item.content = Object.freeze(item.content || {});
2509
2529
  });
2510
2530
 
2511
2531
  // 直接替换列表数据
@@ -2516,11 +2536,19 @@ const __default__ = {
2516
2536
  // 否则选中对应的版本
2517
2537
  const targetName = mockVersion.value || 'source';
2518
2538
  const currentFileData = versionList.find(item => item.name === targetName);
2539
+
2540
+ // 选中项需要深拷贝一份可编辑副本(frozen 对象不可直接编辑)
2519
2541
  if (currentFileData) {
2520
- currentFile.value = currentFileData;
2542
+ currentFile.value = {
2543
+ ...currentFileData,
2544
+ content: JSON.parse(JSON.stringify(currentFileData.content))
2545
+ };
2521
2546
  } else {
2522
- // 如果找不到目标版本,默认选中第一个(通常是 source)
2523
- currentFile.value = versionList[0] || {};
2547
+ const first = versionList[0];
2548
+ currentFile.value = first ? {
2549
+ ...first,
2550
+ content: JSON.parse(JSON.stringify(first.content))
2551
+ } : {};
2524
2552
  }
2525
2553
  console.log('[ResponsePanel] 获取版本列表成功:', {
2526
2554
  total: versionList.length,
@@ -2533,24 +2561,9 @@ const __default__ = {
2533
2561
  throw err;
2534
2562
  });
2535
2563
  };
2536
-
2537
- /**
2538
- * 从已有版本名中计算下一个 v{n} 编号(历史最大编号+1,不与现有名重复)
2539
- */
2540
- const nextVersionName = () => {
2541
- const existing = new Set(responseList.value.map(item => item.filename));
2542
- let max = 0;
2543
- responseList.value.forEach(item => {
2544
- const m = /^v(\d+)$/.exec(item.filename);
2545
- if (m) max = Math.max(max, parseInt(m[1], 10));
2546
- });
2547
- let n = max + 1;
2548
- while (existing.has(`v${n}`)) n++;
2549
- return `v${n}`;
2550
- };
2551
2564
  const onCreate = () => {
2552
2565
  versionModal.status = 'create';
2553
- versionModal.name = nextVersionName();
2566
+ versionModal.name = '';
2554
2567
  versionModal.description = '';
2555
2568
  versionModal.editingVersion = null;
2556
2569
  versionModal.visible = true;
@@ -2733,11 +2746,11 @@ const __default__ = {
2733
2746
  console.error('[ResponsePanel] 解析版本数据失败:', error);
2734
2747
  return;
2735
2748
  }
2736
- console.log('[ResponsePanel] 解析后的版本列表:', versionList);
2737
2749
 
2738
- // 添加 filename 字段
2750
+ // 冻结 content,防止 Vue 2 深度 observe 大对象阻塞主线程
2739
2751
  versionList.forEach(item => {
2740
2752
  item.filename = item.name;
2753
+ item.content = Object.freeze(item.content || {});
2741
2754
  });
2742
2755
 
2743
2756
  // 更新列表
@@ -2848,8 +2861,10 @@ const __default__ = {
2848
2861
  };
2849
2862
  const selectFile = item => {
2850
2863
  const tempEffect = currentFile.value.effect;
2864
+ // content 可能是 frozen 对象,深拷贝一份可编辑副本
2851
2865
  currentFile.value = {
2852
2866
  ...item,
2867
+ content: JSON.parse(JSON.stringify(item.content || {})),
2853
2868
  effect: tempEffect
2854
2869
  };
2855
2870
  const versionName = item.type === 'history' ? item.filename : '';
@@ -3300,14 +3315,30 @@ const __default__ = {
3300
3315
  matchRuleChanged.value = false;
3301
3316
  };
3302
3317
 
3303
- /** 条件编辑区更新 */
3304
- const handleConditionsChange = newConditions => {
3318
+ /** 条件编辑区更新 — 直接自动保存,无需手动点保存 */
3319
+ const handleConditionsChange = async newConditions => {
3305
3320
  if (!currentMatchRule.value) return;
3306
3321
  currentMatchRule.value = {
3307
3322
  ...currentMatchRule.value,
3308
3323
  conditions: newConditions
3309
3324
  };
3310
- matchRuleChanged.value = true;
3325
+ const res = await (0,_service__WEBPACK_IMPORTED_MODULE_11__.updateMatchVersion)({
3326
+ url: props.api.name,
3327
+ matchVersionId: currentMatchRule.value.id,
3328
+ conditions: newConditions,
3329
+ content: currentMatchRule.value.content
3330
+ });
3331
+ if (res.code !== 200) {
3332
+ element_ui_lib_message__WEBPACK_IMPORTED_MODULE_2___default().error(res.msg || '条件保存失败');
3333
+ } else {
3334
+ const idx = matchRuleList.value.findIndex(r => r.id === currentMatchRule.value.id);
3335
+ if (idx > -1) {
3336
+ matchRuleList.value[idx] = {
3337
+ ...matchRuleList.value[idx],
3338
+ conditions: newConditions
3339
+ };
3340
+ }
3341
+ }
3311
3342
  };
3312
3343
 
3313
3344
  /** 匹配规则 JSON 编辑器内容变更 */
@@ -3353,10 +3384,16 @@ const __default__ = {
3353
3384
  return;
3354
3385
  }
3355
3386
  if (matchRuleModal.status === 'create') {
3387
+ // 已保存文件:responseList 在条件匹配模式下未加载,先补一次
3388
+ if (props.api.id && !responseList.value.length) {
3389
+ await getHistoryVersions();
3390
+ }
3391
+ const sourceItem = responseList.value.find(item => item.type === 'source') || getSourceVersion();
3356
3392
  const res = await (0,_service__WEBPACK_IMPORTED_MODULE_11__.addMatchVersion)({
3357
3393
  url: props.api.name,
3358
3394
  name: matchRuleModal.name.trim(),
3359
- description: matchRuleModal.description
3395
+ description: matchRuleModal.description,
3396
+ content: sourceItem?.content ? JSON.parse(JSON.stringify(sourceItem.content)) : {}
3360
3397
  });
3361
3398
  if (res.code !== 200) {
3362
3399
  element_ui_lib_message__WEBPACK_IMPORTED_MODULE_2___default().error(res.msg || '创建失败');
@@ -3487,6 +3524,11 @@ const __default__ = {
3487
3524
  immediate: true
3488
3525
  });
3489
3526
 
3527
+ // tabs 列表变化后重新计算遮罩状态
3528
+ (0,vue__WEBPACK_IMPORTED_MODULE_12__.watch)([responseList, matchRuleList], () => {
3529
+ (0,vue__WEBPACK_IMPORTED_MODULE_12__.nextTick)(updateTabsFade);
3530
+ });
3531
+
3490
3532
  // 移除 watch(date),避免轮询时不必要的 API 调用
3491
3533
  // date 变化由 watch(name) 统一处理
3492
3534
  // watch(date, () => {
@@ -3535,6 +3577,10 @@ const __default__ = {
3535
3577
  fullScreenEditorRef,
3536
3578
  versionNameInput,
3537
3579
  matchRuleNameInput,
3580
+ tabsAreaRef,
3581
+ tabsFade,
3582
+ tabsFadePending,
3583
+ updateTabsFade,
3538
3584
  responseList,
3539
3585
  currentFile,
3540
3586
  hasJsonError,
@@ -3557,7 +3603,6 @@ const __default__ = {
3557
3603
  activeEditorContent,
3558
3604
  getSourceVersion,
3559
3605
  getHistoryVersions,
3560
- nextVersionName,
3561
3606
  onCreate,
3562
3607
  onEditVersion,
3563
3608
  handleDialogOpened,
@@ -4155,7 +4200,7 @@ const __default__ = {
4155
4200
  const [ca, cb, cc] = parse(pluginVersion.value);
4156
4201
  return la > ca || la === ca && lb > cb || la === ca && lb === cb && lc > cc;
4157
4202
  });
4158
- const updateCmd = (0,vue__WEBPACK_IMPORTED_MODULE_16__.computed)(() => `npm install -g whistle.mockbubu --registry https://registry.npmjs.org`);
4203
+ const updateCmd = (0,vue__WEBPACK_IMPORTED_MODULE_16__.computed)(() => `w2 install whistle.mockbubu --registry=https://registry.npmjs.org/`);
4159
4204
 
4160
4205
  // 获取插件版本号
4161
4206
  const fetchPluginVersion = async () => {
@@ -5302,7 +5347,7 @@ var render = function render() {
5302
5347
  placeholder: "参数名"
5303
5348
  },
5304
5349
  on: {
5305
- input: _setup.emitChange
5350
+ blur: _setup.emitChange
5306
5351
  },
5307
5352
  model: {
5308
5353
  value: cond.key,
@@ -5320,7 +5365,7 @@ var render = function render() {
5320
5365
  placeholder: "参数值"
5321
5366
  },
5322
5367
  on: {
5323
- input: _setup.emitChange
5368
+ blur: _setup.emitChange
5324
5369
  },
5325
5370
  model: {
5326
5371
  value: cond.value,
@@ -5777,6 +5822,8 @@ var render = function render() {
5777
5822
  staticClass: "response-panel"
5778
5823
  }, [_c("div", {
5779
5824
  staticClass: "response-panel__header"
5825
+ }, [_c("div", {
5826
+ staticClass: "response-panel__header-toolbar"
5780
5827
  }, [_setup.props.api ? _c("div", {
5781
5828
  staticClass: "response-panel__mode-selector"
5782
5829
  }, [_c("div", {
@@ -5816,7 +5863,37 @@ var render = function render() {
5816
5863
  return _setup.switchMode("match");
5817
5864
  }
5818
5865
  }
5819
- }, [_vm._v(" 条件匹配 ")])]) : _vm._e()]) : _vm._e(), _setup.mockMode === "version" ? [_vm._l(_setup.responseList, function (item, index) {
5866
+ }, [_vm._v(" 条件匹配 ")])]) : _vm._e()]) : _vm._e(), _setup.mockMode === "version" ? _c("div", {
5867
+ staticClass: "response-panel__add-btn",
5868
+ on: {
5869
+ click: _setup.onCreate
5870
+ }
5871
+ }, [_c("i", {
5872
+ staticClass: "el-icon-plus"
5873
+ }), _c("span", [_vm._v("新增版本")])]) : _vm._e(), _setup.mockMode === "match" ? _c("div", {
5874
+ staticClass: "response-panel__add-btn",
5875
+ on: {
5876
+ click: _setup.onCreateMatchRule
5877
+ }
5878
+ }, [_c("i", {
5879
+ staticClass: "el-icon-plus"
5880
+ }), _c("span", [_vm._v("新增规则")])]) : _vm._e(), _setup.mockMode === "version" && _setup.responseList.length > 1 ? _c("span", {
5881
+ staticClass: "response-panel__version-count"
5882
+ }, [_vm._v(" " + _vm._s(_setup.responseList.length - 1) + " 个版本 ")]) : _vm._e(), _setup.mockMode === "match" && _setup.matchRuleList.length > 0 ? _c("span", {
5883
+ staticClass: "response-panel__version-count"
5884
+ }, [_vm._v(" " + _vm._s(_setup.matchRuleList.length) + " 条规则 ")]) : _vm._e()]), _c("div", {
5885
+ staticClass: "response-panel__tabs-wrapper",
5886
+ class: {
5887
+ "has-top-fade": _setup.tabsFade.top,
5888
+ "has-bottom-fade": _setup.tabsFade.bottom
5889
+ }
5890
+ }, [_setup.mockMode === "version" ? _c("div", {
5891
+ ref: "tabsAreaRef",
5892
+ staticClass: "response-panel__tabs-area",
5893
+ on: {
5894
+ scroll: _setup.updateTabsFade
5895
+ }
5896
+ }, _vm._l(_setup.responseList, function (item, index) {
5820
5897
  return _c("div", {
5821
5898
  key: `${item.type}-${item.filename}`,
5822
5899
  staticClass: "response-panel__tab",
@@ -5874,20 +5951,13 @@ var render = function render() {
5874
5951
  }
5875
5952
  }
5876
5953
  }) : _vm._e()], 1);
5877
- }), _c("div", {
5878
- staticClass: "response-panel__add-btn",
5954
+ }), 0) : _vm._e(), _setup.mockMode === "match" ? _c("div", {
5955
+ ref: "tabsAreaRef",
5956
+ staticClass: "response-panel__tabs-area",
5879
5957
  on: {
5880
- click: _setup.onCreate
5958
+ scroll: _setup.updateTabsFade
5881
5959
  }
5882
- }, [_c("el-tooltip", {
5883
- attrs: {
5884
- effect: "dark",
5885
- content: "Add response version",
5886
- placement: "top"
5887
- }
5888
- }, [_c("i", {
5889
- staticClass: "el-icon-plus"
5890
- })])], 1)] : _vm._e(), _setup.mockMode === "match" ? [_vm._l(_setup.matchRuleList, function (item, index) {
5960
+ }, _vm._l(_setup.matchRuleList, function (item, index) {
5891
5961
  return _c("div", {
5892
5962
  key: item.id,
5893
5963
  staticClass: "response-panel__tab",
@@ -5931,20 +6001,7 @@ var render = function render() {
5931
6001
  }
5932
6002
  }
5933
6003
  })], 1);
5934
- }), _c("div", {
5935
- staticClass: "response-panel__add-btn",
5936
- on: {
5937
- click: _setup.onCreateMatchRule
5938
- }
5939
- }, [_c("el-tooltip", {
5940
- attrs: {
5941
- effect: "dark",
5942
- content: "新增匹配规则",
5943
- placement: "top"
5944
- }
5945
- }, [_c("i", {
5946
- staticClass: "el-icon-plus"
5947
- })])], 1)] : _vm._e()], 2), _c("div", {
6004
+ }), 0) : _vm._e()])]), _c("div", {
5948
6005
  staticClass: "response-panel__content"
5949
6006
  }, [_setup.mockMode === "match" && _setup.currentMatchRule ? _c(_setup.MatchConditionEditor, {
5950
6007
  attrs: {
@@ -6046,7 +6103,22 @@ var render = function render() {
6046
6103
  staticClass: "response-panel__readonly-badge"
6047
6104
  }, [_c("i", {
6048
6105
  staticClass: "el-icon-lock"
6049
- }), _c("span", [_vm._v("只读模式")])]) : _vm._e()], 1), _setup.mockMode === "version" ? _c(_setup.Editor, {
6106
+ }), _c("span", [_vm._v("只读模式")])]) : _vm._e(), (_setup.mockMode === "match" ? _setup.currentMatchRule && _setup.matchRuleChanged : !_setup.isSourceReadonly && _setup.currentFile.effect && (_setup.currentFile.type === "history" || _vm.api.mock)) ? _c("div", {
6107
+ staticClass: "response-panel__save-inline"
6108
+ }, [_setup.hasJsonError ? _c("span", {
6109
+ staticClass: "response-panel__error-text-inline"
6110
+ }, [_vm._v("JSON 格式错误")]) : _vm._e(), _c("el-button", {
6111
+ attrs: {
6112
+ size: "mini",
6113
+ type: "primary",
6114
+ disabled: _setup.hasJsonError
6115
+ },
6116
+ on: {
6117
+ click: _setup.handleUpdate
6118
+ }
6119
+ }, [_vm._v(" 保存 ")]), _c("span", {
6120
+ staticClass: "response-panel__effect-dot"
6121
+ })], 1) : _vm._e()], 1), _setup.mockMode === "version" ? _c(_setup.Editor, {
6050
6122
  key: `editor-${_setup.currentFile.filename}-${_setup.isSourceReadonly}`,
6051
6123
  ref: "editRef",
6052
6124
  attrs: {
@@ -6100,22 +6172,7 @@ var render = function render() {
6100
6172
  },
6101
6173
  expression: "currentMatchRule.content"
6102
6174
  }
6103
- }) : _vm._e(), (_setup.mockMode === "match" ? _setup.currentMatchRule && _setup.matchRuleChanged : !_setup.isSourceReadonly && _setup.currentFile.effect && (_setup.currentFile.type === "history" || _vm.api.mock)) ? _c("div", {
6104
- staticClass: "response-panel__save"
6105
- }, [_setup.hasJsonError ? _c("span", {
6106
- staticClass: "response-panel__error-text"
6107
- }, [_vm._v("JSON 格式错误,无法保存")]) : _c("span", {
6108
- staticClass: "response-panel__effect-icon"
6109
- }), _c("el-button", {
6110
- attrs: {
6111
- size: "small",
6112
- type: "primary",
6113
- disabled: _setup.hasJsonError
6114
- },
6115
- on: {
6116
- click: _setup.handleUpdate
6117
- }
6118
- }, [_vm._v(" 保存 ")])], 1) : _vm._e()], 1), _c("el-dialog", {
6175
+ }) : _vm._e()], 1), _c("el-dialog", {
6119
6176
  attrs: {
6120
6177
  visible: _setup.versionModal.visible,
6121
6178
  width: "min(500px, 92vw)",
@@ -7905,7 +7962,7 @@ __webpack_require__.r(__webpack_exports__);
7905
7962
 
7906
7963
  var ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_6_11_0_webpack_5_100_2_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_6_11_0_webpack_5_100_2_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
7907
7964
  // Module
7908
- ___CSS_LOADER_EXPORT___.push([module.id, ".mock-container[data-v-d97322d2] {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n.mock-container__content[data-v-d97322d2] {\n position: relative;\n padding-bottom: 16px;\n background-image: linear-gradient(0deg, var(--mb-accent-blue) 0, var(--mb-accent-blue) 16px, transparent 100%);\n display: flex;\n flex: 1;\n border: 1px solid var(--mb-border-color-light);\n border-left: none;\n overflow: hidden;\n}\n.mock-container__toolbar[data-v-d97322d2] {\n width: 48px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 16px;\n gap: 8px;\n background: var(--mb-bg-base);\n border-right: 1px solid var(--mb-border-color-deep);\n z-index: 10;\n overflow: visible;\n}\n.mock-container__list-badge[data-v-d97322d2] {\n line-height: 1;\n overflow: visible;\n}\n.mock-container__detail-wrapper[data-v-d97322d2] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mock-container__current-url[data-v-d97322d2] {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 6px;\n padding: 5px 10px 5px 12px;\n background: var(--mb-bg-mantle);\n border-bottom: 1px solid var(--mb-border-color);\n min-height: 30px;\n flex-shrink: 0;\n}\n.mock-container__current-url-copy[data-v-d97322d2] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n cursor: pointer;\n color: var(--mb-text-muted);\n transition: color 0.15s, background 0.15s;\n}\n.mock-container__current-url-copy[data-v-d97322d2]:hover {\n color: var(--mb-accent-blue);\n background: var(--mb-bg-surface);\n}\n.mock-container__current-url-copy .el-icon-link[data-v-d97322d2] {\n font-size: 13px;\n}\n.mock-container__current-url-scroll[data-v-d97322d2] {\n flex: 1;\n min-width: 0;\n overflow-x: auto;\n overflow-y: hidden;\n text-align: left;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar {\n height: 3px;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar-track {\n background: transparent;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar-thumb {\n background: var(--mb-border-color-deep);\n border-radius: 2px;\n}\n.mock-container__current-url-text[data-v-d97322d2] {\n display: inline-block;\n font-size: 12px;\n color: var(--mb-text-secondary);\n white-space: nowrap;\n font-family: 'SF Mono', 'Consolas', monospace;\n line-height: 20px;\n}\n.mock-container__list-overlay[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9;\n}\n.mock-container__backdrop[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n}\n.mock-container__list-panel[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 48px;\n bottom: 0;\n width: 70%;\n max-width: calc(100% - 48px);\n background: var(--mb-bg-base);\n display: flex;\n flex-direction: column;\n box-shadow: 4px 0 12px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n z-index: 1;\n}\n.mock-container__list-panel-body[data-v-d97322d2] {\n flex: 1;\n overflow: hidden;\n display: flex;\n}\n.mock-container__list-panel-body .request-list[data-v-d97322d2] {\n width: 100%;\n}\n.mock-container__disabled-overlay[data-v-d97322d2] {\n position: absolute;\n inset: 0;\n z-index: 20;\n background: var(--mb-disabled-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.mock-container__disabled-card[data-v-d97322d2] {\n background: var(--mb-disabled-card-bg);\n border-radius: 16px;\n padding: 40px 48px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n min-width: 260px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);\n}\n.mock-container__disabled-icon[data-v-d97322d2] {\n font-size: 36px;\n color: #888;\n line-height: 1;\n margin-bottom: 4px;\n}\n.mock-container__disabled-title[data-v-d97322d2] {\n font-size: 18px;\n font-weight: 600;\n color: #fff;\n}\n.mock-container__disabled-desc[data-v-d97322d2] {\n font-size: 13px;\n color: #aaa;\n text-align: center;\n}\n.mock-container__disabled-btn[data-v-d97322d2] {\n margin-top: 8px;\n border-radius: 8px;\n padding: 10px 32px;\n font-size: 15px;\n font-weight: 500;\n}\n", ""]);
7965
+ ___CSS_LOADER_EXPORT___.push([module.id, ".mock-container[data-v-d97322d2] {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n.mock-container__content[data-v-d97322d2] {\n position: relative;\n padding-bottom: 16px;\n background-image: linear-gradient(0deg, var(--mb-accent-blue) 0, var(--mb-accent-blue) 16px, transparent 100%);\n display: flex;\n flex: 1;\n border: 1px solid var(--mb-border-color-light);\n border-left: none;\n overflow: hidden;\n}\n.mock-container__toolbar[data-v-d97322d2] {\n width: 48px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 16px;\n gap: 8px;\n background: var(--mb-bg-base);\n border-right: 1px solid var(--mb-border-color-deep);\n z-index: 10;\n overflow: visible;\n}\n.mock-container__list-badge[data-v-d97322d2] {\n line-height: 1;\n overflow: visible;\n}\n.mock-container__detail-wrapper[data-v-d97322d2] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mock-container__current-url[data-v-d97322d2] {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 6px;\n padding: 5px 10px 5px 12px;\n background: var(--mb-bg-mantle);\n border-bottom: 1px solid var(--mb-border-color);\n min-height: 30px;\n flex-shrink: 0;\n}\n.mock-container__current-url-copy[data-v-d97322d2] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n cursor: pointer;\n color: var(--mb-text-muted);\n transition: color 0.15s, background 0.15s;\n}\n.mock-container__current-url-copy[data-v-d97322d2]:hover {\n color: var(--mb-accent-blue);\n background: var(--mb-bg-surface);\n}\n.mock-container__current-url-copy .el-icon-link[data-v-d97322d2] {\n font-size: 13px;\n}\n.mock-container__current-url-scroll[data-v-d97322d2] {\n flex: 1;\n min-width: 0;\n overflow-x: auto;\n overflow-y: hidden;\n text-align: left;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar {\n height: 3px;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar-track {\n background: transparent;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar-thumb {\n background: var(--mb-border-color-deep);\n border-radius: 2px;\n}\n.mock-container__current-url-text[data-v-d97322d2] {\n display: inline-block;\n font-size: 12px;\n color: var(--mb-text-secondary);\n white-space: nowrap;\n font-family: 'SF Mono', 'Consolas', monospace;\n line-height: 20px;\n}\n.mock-container__list-overlay[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9;\n}\n.mock-container__backdrop[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n}\n.mock-container__list-panel[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 48px;\n bottom: 0;\n width: 85%;\n max-width: calc(100% - 48px);\n background: var(--mb-bg-base);\n display: flex;\n flex-direction: column;\n box-shadow: 4px 0 12px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n z-index: 1;\n}\n.mock-container__list-panel-body[data-v-d97322d2] {\n flex: 1;\n overflow: hidden;\n display: flex;\n}\n.mock-container__list-panel-body .request-list[data-v-d97322d2] {\n width: 100%;\n}\n.mock-container__disabled-overlay[data-v-d97322d2] {\n position: absolute;\n inset: 0;\n z-index: 20;\n background: var(--mb-disabled-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.mock-container__disabled-card[data-v-d97322d2] {\n background: var(--mb-disabled-card-bg);\n border-radius: 16px;\n padding: 40px 48px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n min-width: 260px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);\n}\n.mock-container__disabled-icon[data-v-d97322d2] {\n font-size: 36px;\n color: #888;\n line-height: 1;\n margin-bottom: 4px;\n}\n.mock-container__disabled-title[data-v-d97322d2] {\n font-size: 18px;\n font-weight: 600;\n color: #fff;\n}\n.mock-container__disabled-desc[data-v-d97322d2] {\n font-size: 13px;\n color: #aaa;\n text-align: center;\n}\n.mock-container__disabled-btn[data-v-d97322d2] {\n margin-top: 8px;\n border-radius: 8px;\n padding: 10px 32px;\n font-size: 15px;\n font-weight: 500;\n}\n", ""]);
7909
7966
  // Exports
7910
7967
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
7911
7968
 
@@ -8049,7 +8106,7 @@ __webpack_require__.r(__webpack_exports__);
8049
8106
 
8050
8107
  var ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_6_11_0_webpack_5_100_2_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_6_11_0_webpack_5_100_2_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
8051
8108
  // Module
8052
- ___CSS_LOADER_EXPORT___.push([module.id, ".response-panel[data-v-c23cd6a6] {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.response-panel__header[data-v-c23cd6a6] {\n display: flex;\n flex-wrap: wrap;\n background-color: var(--mb-bg-base);\n}\n.response-panel__tab[data-v-c23cd6a6] {\n position: relative;\n cursor: pointer;\n height: 24px;\n padding: 0px 10px;\n font-size: 12px;\n line-height: 24px;\n color: var(--mb-text-secondary);\n font-weight: 500;\n background-color: var(--mb-bg-mantle);\n border-right: 1px solid var(--mb-border-color-light);\n border-bottom: 1px solid var(--mb-border-color-light);\n}\n.response-panel__tab[data-v-c23cd6a6]:hover:not(.response-panel__tab--selected) {\n background-color: var(--mb-hover-bg);\n color: var(--mb-text-primary);\n}\n.response-panel__tab--selected[data-v-c23cd6a6] {\n background-color: var(--mb-accent-blue);\n color: #fff;\n border-bottom-color: var(--mb-accent-blue);\n}\n.response-panel__tab--selected .response-panel__source-tab[data-v-c23cd6a6] {\n color: rgba(255, 255, 255, 0.95);\n}\n.response-panel__tab--selected .response-panel__edit-btn[data-v-c23cd6a6],\n.response-panel__tab--selected .response-panel__delete-btn[data-v-c23cd6a6] {\n color: rgba(255, 255, 255, 0.6);\n}\n.response-panel__tab--selected .response-panel__edit-btn[data-v-c23cd6a6]:hover,\n.response-panel__tab--selected .response-panel__delete-btn[data-v-c23cd6a6]:hover {\n color: #fff;\n}\n.response-panel__source-tab[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--mb-tag-amber);\n font-weight: 600;\n}\n.response-panel__source-tab i[data-v-c23cd6a6] {\n font-size: 14px;\n}\n.response-panel__tab-text[data-v-c23cd6a6] {\n display: inline-block;\n max-width: 120px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n vertical-align: middle;\n}\n.response-panel__edit-btn[data-v-c23cd6a6] {\n margin-left: 8px;\n color: var(--mb-text-muted);\n}\n.response-panel__edit-btn[data-v-c23cd6a6]:hover {\n color: var(--mb-accent-blue);\n}\n.response-panel__delete-btn[data-v-c23cd6a6] {\n margin-left: 8px;\n color: var(--mb-text-muted);\n}\n.response-panel__delete-btn[data-v-c23cd6a6]:hover {\n color: var(--mb-accent-red);\n}\n.response-panel__add-btn[data-v-c23cd6a6] {\n cursor: pointer;\n line-height: 24px;\n padding: 0px 10px;\n color: var(--mb-text-muted);\n font-weight: 500;\n background-color: var(--mb-bg-mantle);\n border-right: 1px solid var(--mb-border-color-light);\n border-bottom: 1px solid var(--mb-border-color-light);\n}\n.response-panel__add-btn[data-v-c23cd6a6]:hover {\n color: var(--mb-accent-blue);\n background-color: var(--mb-hover-bg);\n}\n.response-panel__content[data-v-c23cd6a6] {\n position: relative;\n flex: 1;\n overflow: hidden;\n}\n.response-panel__toolbar[data-v-c23cd6a6] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background-color: var(--mb-bg-surface);\n border-bottom: 1px solid var(--mb-border-color);\n overflow-x: scroll;\n}\n.response-panel__toolbar .el-button[data-v-c23cd6a6] {\n margin: 0;\n}\n.response-panel__readonly-badge[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n padding: 4px 12px;\n background-color: var(--mb-bg-mantle);\n border-radius: 4px;\n font-size: 12px;\n color: var(--mb-text-muted);\n font-weight: 500;\n height: 24px;\n overflow: hidden;\n}\n.response-panel__readonly-badge i[data-v-c23cd6a6] {\n font-size: 12px;\n}\n.response-panel__alert[data-v-c23cd6a6] {\n position: absolute;\n top: 8px;\n right: 10px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mb-accent-yellow);\n}\n.response-panel__save[data-v-c23cd6a6] {\n position: absolute;\n top: 100px;\n right: 20px;\n}\n.response-panel__effect-icon[data-v-c23cd6a6] {\n position: absolute;\n top: -5px;\n right: -5px;\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 6px;\n background-color: var(--mb-accent-red);\n}\n.response-panel__error-text[data-v-c23cd6a6] {\n position: absolute;\n top: -30px;\n right: 0;\n color: var(--mb-accent-red);\n font-size: 12px;\n white-space: nowrap;\n}\n.response-panel__dialog[data-v-c23cd6a6] {\n display: flex;\n align-items: center;\n}\n.response-panel__dialog-label[data-v-c23cd6a6] {\n white-space: nowrap;\n}\n.response-panel__mode-selector[data-v-c23cd6a6] {\n position: relative;\n flex-shrink: 0;\n margin-right: 4px;\n}\n.response-panel__mode-btn[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n height: 24px;\n padding: 0 10px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mb-text-secondary);\n background-color: var(--mb-bg-mantle);\n border-right: 1px solid var(--mb-border-color-light);\n border-bottom: 1px solid var(--mb-border-color-light);\n cursor: pointer;\n white-space: nowrap;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.response-panel__mode-btn .el-icon-arrow-down[data-v-c23cd6a6] {\n font-size: 10px;\n transition: transform 0.2s;\n}\n.response-panel__mode-btn .el-icon-arrow-down.is-rotate[data-v-c23cd6a6] {\n transform: rotate(180deg);\n}\n.response-panel__mode-btn[data-v-c23cd6a6]:hover {\n color: var(--mb-accent-blue);\n background-color: var(--mb-hover-bg);\n}\n.response-panel__mode-overlay[data-v-c23cd6a6] {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 99;\n}\n.response-panel__mode-dropdown[data-v-c23cd6a6] {\n position: absolute;\n top: 24px;\n left: 0;\n z-index: 100;\n min-width: 100px;\n background-color: var(--mb-bg-overlay);\n border: 1px solid var(--mb-border-color-deep);\n border-radius: 0 0 4px 4px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n.response-panel__mode-option[data-v-c23cd6a6] {\n padding: 6px 14px;\n font-size: 12px;\n color: var(--mb-text-secondary);\n cursor: pointer;\n white-space: nowrap;\n}\n.response-panel__mode-option[data-v-c23cd6a6]:hover {\n background-color: var(--mb-bg-surface);\n color: var(--mb-accent-blue);\n}\n.response-panel__mode-option.is-active[data-v-c23cd6a6] {\n color: var(--mb-accent-blue);\n font-weight: 600;\n}\n", ""]);
8109
+ ___CSS_LOADER_EXPORT___.push([module.id, ".response-panel[data-v-c23cd6a6] {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.response-panel__header[data-v-c23cd6a6] {\n display: flex;\n flex-direction: column;\n background-color: var(--mb-bg-mantle);\n flex-shrink: 0;\n}\n.response-panel__header-toolbar[data-v-c23cd6a6] {\n display: flex;\n align-items: center;\n gap: 0;\n height: 34px;\n border-bottom: 1px solid var(--mb-border-color);\n padding: 0 4px 0 0;\n}\n.response-panel__version-count[data-v-c23cd6a6] {\n margin-left: 6px;\n font-size: 11px;\n color: var(--mb-text-muted);\n font-variant-numeric: tabular-nums;\n}\n.response-panel__tabs-wrapper[data-v-c23cd6a6] {\n position: relative;\n}\n.response-panel__tabs-wrapper[data-v-c23cd6a6]::before,\n.response-panel__tabs-wrapper[data-v-c23cd6a6]::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 36px;\n z-index: 1;\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s;\n}\n.response-panel__tabs-wrapper[data-v-c23cd6a6]::before {\n top: 0;\n background: linear-gradient(var(--mb-bg-mantle), transparent);\n}\n.response-panel__tabs-wrapper[data-v-c23cd6a6]::after {\n bottom: 0;\n background: linear-gradient(transparent, var(--mb-bg-mantle));\n}\n.response-panel__tabs-wrapper.has-top-fade[data-v-c23cd6a6]::before {\n opacity: 1;\n}\n.response-panel__tabs-wrapper.has-bottom-fade[data-v-c23cd6a6]::after {\n opacity: 1;\n}\n.response-panel__tabs-area[data-v-c23cd6a6] {\n display: flex;\n flex-wrap: wrap;\n align-content: flex-start;\n gap: 5px;\n min-width: 0;\n padding: 5px 8px;\n max-height: calc((30px + 5px) * 3 + 5px);\n overflow-y: auto;\n overflow-x: hidden;\n}\n.response-panel__tabs-area[data-v-c23cd6a6]::-webkit-scrollbar {\n width: 3px;\n}\n.response-panel__tabs-area[data-v-c23cd6a6]::-webkit-scrollbar-thumb {\n background: var(--mb-border-color-deep);\n border-radius: 2px;\n}\n.response-panel__tab[data-v-c23cd6a6] {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n height: 26px;\n padding: 0 10px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mb-text-secondary);\n background-color: var(--mb-bg-base);\n border: 1px solid var(--mb-border-color-deep);\n border-radius: 5px;\n white-space: nowrap;\n transition: color 0.15s, background-color 0.15s, border-color 0.15s;\n}\n.response-panel__tab[data-v-c23cd6a6]:hover:not(.response-panel__tab--selected) {\n color: var(--mb-accent-blue);\n border-color: var(--mb-accent-blue);\n background-color: var(--mb-accent-blue-bg);\n}\n.response-panel__tab--selected[data-v-c23cd6a6] {\n background-color: var(--mb-accent-blue);\n color: #fff;\n font-weight: 600;\n border-color: var(--mb-accent-blue);\n}\n.response-panel__tab--selected .response-panel__source-tab[data-v-c23cd6a6] {\n color: #fff;\n}\n.response-panel__tab--selected .response-panel__edit-btn[data-v-c23cd6a6],\n.response-panel__tab--selected .response-panel__delete-btn[data-v-c23cd6a6] {\n color: rgba(255, 255, 255, 0.7);\n opacity: 1;\n}\n.response-panel__tab--selected .response-panel__edit-btn[data-v-c23cd6a6]:hover,\n.response-panel__tab--selected .response-panel__delete-btn[data-v-c23cd6a6]:hover {\n color: #fff;\n}\n.response-panel__source-tab[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n color: var(--mb-tag-amber);\n font-weight: 600;\n}\n.response-panel__source-tab i[data-v-c23cd6a6] {\n font-size: 13px;\n}\n.response-panel__tab-text[data-v-c23cd6a6] {\n display: inline-block;\n max-width: 100px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n vertical-align: middle;\n}\n.response-panel__edit-btn[data-v-c23cd6a6] {\n font-size: 11px;\n color: var(--mb-text-muted);\n opacity: 0;\n transition: opacity 0.12s, color 0.12s;\n}\n.response-panel__edit-btn[data-v-c23cd6a6]:hover {\n color: var(--mb-accent-blue);\n}\n.response-panel__delete-btn[data-v-c23cd6a6] {\n font-size: 11px;\n color: var(--mb-text-muted);\n opacity: 0;\n transition: opacity 0.12s, color 0.12s;\n}\n.response-panel__delete-btn[data-v-c23cd6a6]:hover {\n color: var(--mb-accent-red);\n}\n.response-panel__tab:hover .response-panel__edit-btn[data-v-c23cd6a6],\n.response-panel__tab:hover .response-panel__delete-btn[data-v-c23cd6a6] {\n opacity: 1;\n}\n.response-panel__add-btn[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n cursor: pointer;\n height: 24px;\n padding: 0 10px;\n margin: 0 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mb-accent-blue);\n background-color: var(--mb-accent-blue-bg);\n border: 1px solid var(--mb-accent-blue);\n border-radius: 4px;\n transition: background-color 0.15s, color 0.15s;\n}\n.response-panel__add-btn i[data-v-c23cd6a6] {\n font-size: 12px;\n}\n.response-panel__add-btn[data-v-c23cd6a6]:hover {\n color: #fff;\n background-color: var(--mb-accent-blue);\n}\n.response-panel__content[data-v-c23cd6a6] {\n position: relative;\n flex: 1;\n overflow: hidden;\n}\n.response-panel__toolbar[data-v-c23cd6a6] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background-color: var(--mb-bg-surface);\n border-bottom: 1px solid var(--mb-border-color);\n overflow-x: auto;\n}\n.response-panel__toolbar > *[data-v-c23cd6a6] {\n flex-shrink: 0;\n}\n.response-panel__toolbar .el-button[data-v-c23cd6a6] {\n margin: 0;\n}\n.response-panel__readonly-badge[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n padding: 4px 12px;\n background-color: var(--mb-bg-mantle);\n border-radius: 4px;\n font-size: 12px;\n color: var(--mb-text-muted);\n font-weight: 500;\n height: 24px;\n overflow: hidden;\n}\n.response-panel__readonly-badge i[data-v-c23cd6a6] {\n font-size: 12px;\n}\n.response-panel__alert[data-v-c23cd6a6] {\n position: absolute;\n top: 8px;\n right: 10px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mb-accent-yellow);\n}\n.response-panel__save-inline[data-v-c23cd6a6] {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n margin-left: auto;\n flex-shrink: 0;\n}\n.response-panel__save-inline .el-button[data-v-c23cd6a6] {\n margin: 0;\n}\n.response-panel__effect-dot[data-v-c23cd6a6] {\n position: absolute;\n top: -3px;\n right: -3px;\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: var(--mb-accent-red);\n pointer-events: none;\n}\n.response-panel__error-text-inline[data-v-c23cd6a6] {\n color: var(--mb-accent-red);\n font-size: 11px;\n white-space: nowrap;\n}\n.response-panel__dialog[data-v-c23cd6a6] {\n display: flex;\n align-items: center;\n}\n.response-panel__dialog-label[data-v-c23cd6a6] {\n white-space: nowrap;\n}\n.response-panel__mode-selector[data-v-c23cd6a6] {\n position: relative;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n height: 100%;\n padding: 0 8px;\n border-right: 1px solid var(--mb-border-color);\n}\n.response-panel__mode-btn[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n height: 24px;\n padding: 0 8px;\n font-size: 12px;\n font-weight: 600;\n color: #d97706;\n background-color: #fff8ee;\n border: 1px solid #f59e0b;\n border-radius: 4px;\n cursor: pointer;\n white-space: nowrap;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n transition: color 0.15s, border-color 0.15s, background-color 0.15s;\n}\n.response-panel__mode-btn .el-icon-arrow-down[data-v-c23cd6a6] {\n font-size: 12px;\n color: #d97706;\n font-weight: 900;\n transition: transform 0.2s;\n}\n.response-panel__mode-btn .el-icon-arrow-down.is-rotate[data-v-c23cd6a6] {\n transform: rotate(180deg);\n}\n.response-panel__mode-btn[data-v-c23cd6a6]:hover {\n color: #92400e;\n border-color: #d97706;\n background-color: #fef3c7;\n}\n.response-panel__mode-overlay[data-v-c23cd6a6] {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 99;\n}\n.response-panel__mode-dropdown[data-v-c23cd6a6] {\n position: absolute;\n top: calc(100% + 2px);\n left: 8px;\n z-index: 100;\n min-width: 100px;\n background-color: var(--mb-bg-overlay);\n border: 1px solid var(--mb-border-color-deep);\n border-radius: 4px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n}\n.response-panel__mode-option[data-v-c23cd6a6] {\n padding: 6px 14px;\n font-size: 12px;\n color: var(--mb-text-secondary);\n cursor: pointer;\n white-space: nowrap;\n}\n.response-panel__mode-option[data-v-c23cd6a6]:hover {\n background-color: var(--mb-bg-surface);\n color: var(--mb-accent-blue);\n}\n.response-panel__mode-option.is-active[data-v-c23cd6a6] {\n color: var(--mb-accent-blue);\n font-weight: 600;\n}\n", ""]);
8053
8110
  // Exports
8054
8111
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
8055
8112