@jonathanleelx/meddle 0.5.0-beta.23 → 0.5.0-beta.24

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.
Files changed (100) hide show
  1. package/CONFIG_STRUCTURE.md +1 -0
  2. package/README.md +16 -0
  3. package/bin/commands/route/active.js +14 -1
  4. package/bin/commands/route/add.js +27 -30
  5. package/bin/commands/route/delete.js +31 -30
  6. package/bin/commands/route/index.js +4 -0
  7. package/bin/commands/route/list.js +2 -2
  8. package/bin/commands/route/show.js +10 -1
  9. package/bin/commands/route/update.js +32 -30
  10. package/bin/lib/api-client.js +14 -2
  11. package/bin/lib/file-access.js +39 -1
  12. package/bin/lib/rule-file-edit.js +263 -0
  13. package/bin/lib/ruleset-readonly.js +61 -0
  14. package/dist/core/mock-handler.d.ts.map +1 -1
  15. package/dist/core/mock-handler.js +34 -5
  16. package/dist/core/mock-handler.js.map +1 -1
  17. package/dist/core/rule-file-edit.d.ts +81 -0
  18. package/dist/core/rule-file-edit.d.ts.map +1 -0
  19. package/dist/core/rule-file-edit.js +243 -0
  20. package/dist/core/rule-file-edit.js.map +1 -0
  21. package/dist/core/static-server.d.ts.map +1 -1
  22. package/dist/core/static-server.js +15 -13
  23. package/dist/core/static-server.js.map +1 -1
  24. package/dist/server/agent/tools.d.ts.map +1 -1
  25. package/dist/server/agent/tools.js +18 -17
  26. package/dist/server/agent/tools.js.map +1 -1
  27. package/dist/server/app-info.d.ts +14 -0
  28. package/dist/server/app-info.d.ts.map +1 -1
  29. package/dist/server/app-info.js +33 -1
  30. package/dist/server/app-info.js.map +1 -1
  31. package/dist/server/config.d.ts.map +1 -1
  32. package/dist/server/config.js +51 -9
  33. package/dist/server/config.js.map +1 -1
  34. package/dist/server/index.d.ts.map +1 -1
  35. package/dist/server/index.js +1 -0
  36. package/dist/server/index.js.map +1 -1
  37. package/dist/server/rule-files.d.ts +23 -0
  38. package/dist/server/rule-files.d.ts.map +1 -1
  39. package/dist/server/rule-files.js +169 -81
  40. package/dist/server/rule-files.js.map +1 -1
  41. package/dist/server/ruleset-lock.d.ts +62 -0
  42. package/dist/server/ruleset-lock.d.ts.map +1 -0
  43. package/dist/server/ruleset-lock.js +234 -0
  44. package/dist/server/ruleset-lock.js.map +1 -0
  45. package/mcp-server.js +87 -88
  46. package/package.json +1 -1
  47. package/web/dist/assets/{detail-panel-D4JSaFH3.js → detail-panel-D56nCma2.js} +3 -3
  48. package/web/dist/assets/dist-BQN0rzUS.js +1 -0
  49. package/web/dist/assets/{global-panel-shell-DXvcxmbd.js → global-panel-shell-SKPshqTf.js} +3 -3
  50. package/web/dist/assets/{health-panel-Bo0eD8_R.js → health-panel-CvI-VsvG.js} +1 -1
  51. package/web/dist/assets/index-C6dPxxT3.css +2 -0
  52. package/web/dist/assets/index-Dcm171u1.js +21 -0
  53. package/web/dist/assets/{mobile-proxy-panel-FQwFQFmS.js → mobile-proxy-panel-cpkvsdBT.js} +2 -2
  54. package/web/dist/assets/mock-config-CtZ866iI.js +1 -0
  55. package/web/dist/assets/{mock-editor-panel-kx0bzGv4.js → mock-editor-panel-CweYBdeM.js} +3 -3
  56. package/web/dist/assets/{mocks-file-missing-note-BvL7-uzS.js → mocks-file-missing-note-C-QJ8Bpm.js} +1 -1
  57. package/web/dist/assets/{monaco-editor-BLHN8gCU.js → monaco-editor-Cge8h-Ca.js} +2 -2
  58. package/web/dist/assets/pane-bar-Dvi-MHuB.js +1 -0
  59. package/web/dist/assets/{pane-split-DfQcgd1v.js → pane-split-ChCHxR7K.js} +1 -1
  60. package/web/dist/assets/panel-heading-Crmy9fo0.js +1 -0
  61. package/web/dist/assets/plugin-code-editor-VaL2lVyD.js +2 -0
  62. package/web/dist/assets/plugin-config-DSiOk77l.js +2 -0
  63. package/web/dist/assets/{plugin-generator-B5FRaaKc.js → plugin-generator-iAksMY2Q.js} +2 -2
  64. package/web/dist/assets/plugin-test-dialog-Cx6ifDnm.js +7 -0
  65. package/web/dist/assets/route-preview-T0s6si4V.js +1 -0
  66. package/web/dist/assets/{rule-ai-assistant-panel-BEmXPzli.js → rule-ai-assistant-panel-DzfobTWM.js} +2 -2
  67. package/web/dist/assets/rule-config-ESpfkJg6.js +15 -0
  68. package/web/dist/assets/{rule-overview-panel-DsNEU8L1.js → rule-overview-panel-BswSByar.js} +1 -1
  69. package/web/dist/assets/settings-panel-Cj-1Z8Ow.js +1 -0
  70. package/web/dist/assets/toast-9yeTf7d9.js +1 -0
  71. package/web/dist/assets/use-mocks-file-status-BUIUJ4oQ.js +1 -0
  72. package/web/dist/index.html +11 -9
  73. package/web/dist/assets/index-Cbis1y9h.js +0 -18
  74. package/web/dist/assets/index-dKaIrLee.css +0 -2
  75. package/web/dist/assets/mock-config-CL9nXIkx.js +0 -1
  76. package/web/dist/assets/pane-bar-BSzN6D93.js +0 -1
  77. package/web/dist/assets/panel-heading-Dev_soZA.js +0 -1
  78. package/web/dist/assets/plugin-code-editor-uI_-iAXY.js +0 -2
  79. package/web/dist/assets/plugin-config-BpfIX4Uk.js +0 -2
  80. package/web/dist/assets/plugin-test-dialog-Cptd2bs0.js +0 -7
  81. package/web/dist/assets/route-preview-DEc50Y_R.js +0 -1
  82. package/web/dist/assets/rule-config-DQkdF3tr.js +0 -15
  83. package/web/dist/assets/select-CFTzQ8Uy.js +0 -1
  84. package/web/dist/assets/settings-panel-C1v0UmZQ.js +0 -1
  85. /package/web/dist/assets/{alert-DFypnYT1.js → alert-B514Frte.js} +0 -0
  86. /package/web/dist/assets/{babel-DCr4VA1c.js → babel-bwZm0qi3.js} +0 -0
  87. /package/web/dist/assets/{body-diff-view-CCwbvDYx.js → body-diff-view-SfLCLzs9.js} +0 -0
  88. /package/web/dist/assets/{clipboard-VhPXNN5m.js → clipboard-Bt1qY01V.js} +0 -0
  89. /package/web/dist/assets/{dist-Dk9a2sJl.js → dist-DLQKRjuW.js} +0 -0
  90. /package/web/dist/assets/{editor-pane-actions-BGttNlkS.js → editor-pane-actions-_ckwcCII.js} +0 -0
  91. /package/web/dist/assets/{estree-qO_m2Qaw.js → estree-MatbZDwq.js} +0 -0
  92. /package/web/dist/assets/{html-VDGahtyk.js → html-CCrsbFYX.js} +0 -0
  93. /package/web/dist/assets/{postcss-BUm8EKMw.js → postcss-BxN7Gr8n.js} +0 -0
  94. /package/web/dist/assets/{standalone-Bj8SSd8Q.js → standalone-DsnFnsqM.js} +0 -0
  95. /package/web/dist/assets/{syntax-highlight-Dg_CTbXd.js → syntax-highlight-BFgN_C0Y.js} +0 -0
  96. /package/web/dist/assets/{table-B10JkPhg.js → table-DaXD6jJv.js} +0 -0
  97. /package/web/dist/assets/{textarea-BjWF0pk4.js → textarea-9wB8Hsz-.js} +0 -0
  98. /package/web/dist/assets/{wand-sparkles-DDGjzjnX.js → wand-sparkles-Bmt4dDOf.js} +0 -0
  99. /package/web/dist/assets/{wifi-QkTcTrED.js → wifi-Cjj_Br1u.js} +0 -0
  100. /package/web/dist/assets/{zap-CEVoVkAg.js → zap-BuOtogAv.js} +0 -0
@@ -1,8 +1,8 @@
1
- import{c as e,d as t,f as n,p as r,t as i,u as a}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as o}from"./check-BkfHQ6re.js";import{t as s}from"./copy-BRnscYy1.js";import{t as c}from"./refresh-cw-BfLoHqg5.js";import{t as l}from"./shield-check-hQXjdfZ7.js";import{t as u}from"./smartphone-D4Q7cQfm.js";import{t as d}from"./wifi-QkTcTrED.js";import{$ as f,Ot as p,Q as m,St as h,Tt as g,X as _,Y as v,Z as y,_t as b,at as x,b as S,et as C,it as w,nt as T,rt as E,tt as D}from"./index-Cbis1y9h.js";import{t as O}from"./clipboard-VhPXNN5m.js";import{n as k,r as A,t as j}from"./alert-DFypnYT1.js";var ee=a(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),M=a(`shield-off`,[[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71`,key:`1jlk70`}],[`path`,{d:`M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264`,key:`18rp1v`}]]),N=n(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),P=n((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),F=n((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),I=n(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),L=n(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),R=n((e=>{var t=P().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e<n-1;e++)a[e]=a[e-1]-i;return a.push(6),a.reverse()},e.getPositions=function(t){let n=[],r=e.getRowColCoords(t),i=r.length;for(let e=0;e<i;e++)for(let t=0;t<i;t++)e===0&&t===0||e===0&&t===i-1||e===i-1&&t===0||n.push([r[e],r[t]]);return n}})),z=n((e=>{var t=P().getSymbolSize,n=7;e.getPositions=function(e){let r=t(e);return[[0,0],[r-n,0],[0,r-n]]}})),B=n((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c<n;c++){i=a=0,o=s=null;for(let l=0;l<n;l++){let n=e.get(c,l);n===o?i++:(i>=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t<n-1;t++)for(let i=0;i<n-1;i++){let n=e.get(t,i)+e.get(t,i+1)+e.get(t+1,i)+e.get(t+1,i+1);(n===4||n===0)&&r++}return r*t.N2},e.getPenaltyN3=function(e){let n=e.size,r=0,i=0,a=0;for(let t=0;t<n;t++){i=a=0;for(let o=0;o<n;o++)i=i<<1&2047|e.get(t,o),o>=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t<r;t++)n+=e.data[t];return Math.abs(Math.ceil(n*100/r/5)-10)*t.N4};function n(t,n,r){switch(t){case e.Patterns.PATTERN000:return(n+r)%2==0;case e.Patterns.PATTERN001:return n%2==0;case e.Patterns.PATTERN010:return r%3==0;case e.Patterns.PATTERN011:return(n+r)%3==0;case e.Patterns.PATTERN100:return(Math.floor(n/2)+Math.floor(r/3))%2==0;case e.Patterns.PATTERN101:return n*r%2+n*r%3==0;case e.Patterns.PATTERN110:return(n*r%2+n*r%3)%2==0;case e.Patterns.PATTERN111:return(n*r%3+(n+r)%2)%2==0;default:throw Error(`bad maskPattern:`+t)}}e.applyMask=function(e,t){let r=t.size;for(let i=0;i<r;i++)for(let a=0;a<r;a++)t.isReserved(a,i)||t.xor(a,i,n(e,a,i))},e.getBestMask=function(t,n){let r=Object.keys(e.Patterns).length,i=0,a=1/0;for(let o=0;o<r;o++){n(o),e.applyMask(o,t);let r=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(o,t),r<a&&(a=r,i=o)}return i}})),V=n((e=>{var t=F(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),H=n((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),U=n((e=>{var t=H();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i<e.length;i++)for(let a=0;a<n.length;a++)r[i+a]^=t.mul(e[i],n[a]);return r},e.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let e=r[0];for(let i=0;i<n.length;i++)r[i]^=t.mul(n[i],e);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r},e.generateECPolynomial=function(n){let r=new Uint8Array([1]);for(let i=0;i<n;i++)r=e.mul(r,new Uint8Array([1,t.exp(i)]));return r}})),W=n(((e,t)=>{var n=U();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),G=n((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),K=n((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r
1
+ import{c as e,d as t,f as n,p as r,t as i,u as a}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as o}from"./check-BkfHQ6re.js";import{t as s}from"./copy-BRnscYy1.js";import{t as c}from"./refresh-cw-BfLoHqg5.js";import{t as l}from"./shield-check-hQXjdfZ7.js";import{t as u}from"./smartphone-D4Q7cQfm.js";import{t as d}from"./wifi-Cjj_Br1u.js";import{n as f}from"./toast-9yeTf7d9.js";import{$ as p,Dt as m,Q as h,X as g,Y as _,Z as v,at as y,et as b,gt as x,it as S,nt as C,rt as w,tt as ee,wt as T,xt as E}from"./index-Dcm171u1.js";import{t as D}from"./clipboard-Bt1qY01V.js";import{n as O,r as k,t as A}from"./alert-B514Frte.js";var j=a(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),M=a(`shield-off`,[[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71`,key:`1jlk70`}],[`path`,{d:`M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264`,key:`18rp1v`}]]),N=n(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),P=n((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),F=n((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),I=n(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),L=n(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),R=n((e=>{var t=P().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e<n-1;e++)a[e]=a[e-1]-i;return a.push(6),a.reverse()},e.getPositions=function(t){let n=[],r=e.getRowColCoords(t),i=r.length;for(let e=0;e<i;e++)for(let t=0;t<i;t++)e===0&&t===0||e===0&&t===i-1||e===i-1&&t===0||n.push([r[e],r[t]]);return n}})),z=n((e=>{var t=P().getSymbolSize,n=7;e.getPositions=function(e){let r=t(e);return[[0,0],[r-n,0],[0,r-n]]}})),B=n((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c<n;c++){i=a=0,o=s=null;for(let l=0;l<n;l++){let n=e.get(c,l);n===o?i++:(i>=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t<n-1;t++)for(let i=0;i<n-1;i++){let n=e.get(t,i)+e.get(t,i+1)+e.get(t+1,i)+e.get(t+1,i+1);(n===4||n===0)&&r++}return r*t.N2},e.getPenaltyN3=function(e){let n=e.size,r=0,i=0,a=0;for(let t=0;t<n;t++){i=a=0;for(let o=0;o<n;o++)i=i<<1&2047|e.get(t,o),o>=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t<r;t++)n+=e.data[t];return Math.abs(Math.ceil(n*100/r/5)-10)*t.N4};function n(t,n,r){switch(t){case e.Patterns.PATTERN000:return(n+r)%2==0;case e.Patterns.PATTERN001:return n%2==0;case e.Patterns.PATTERN010:return r%3==0;case e.Patterns.PATTERN011:return(n+r)%3==0;case e.Patterns.PATTERN100:return(Math.floor(n/2)+Math.floor(r/3))%2==0;case e.Patterns.PATTERN101:return n*r%2+n*r%3==0;case e.Patterns.PATTERN110:return(n*r%2+n*r%3)%2==0;case e.Patterns.PATTERN111:return(n*r%3+(n+r)%2)%2==0;default:throw Error(`bad maskPattern:`+t)}}e.applyMask=function(e,t){let r=t.size;for(let i=0;i<r;i++)for(let a=0;a<r;a++)t.isReserved(a,i)||t.xor(a,i,n(e,a,i))},e.getBestMask=function(t,n){let r=Object.keys(e.Patterns).length,i=0,a=1/0;for(let o=0;o<r;o++){n(o),e.applyMask(o,t);let r=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(o,t),r<a&&(a=r,i=o)}return i}})),V=n((e=>{var t=F(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),H=n((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),U=n((e=>{var t=H();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i<e.length;i++)for(let a=0;a<n.length;a++)r[i+a]^=t.mul(e[i],n[a]);return r},e.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let e=r[0];for(let i=0;i<n.length;i++)r[i]^=t.mul(n[i],e);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r},e.generateECPolynomial=function(n){let r=new Uint8Array([1]);for(let i=0;i<n;i++)r=e.mul(r,new Uint8Array([1,t.exp(i)]));return r}})),W=n(((e,t)=>{var n=U();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),G=n((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),K=n((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r
2
2
  ]))+`;e.KANJI=new RegExp(r,`g`),e.BYTE_KANJI=RegExp(`[^A-Z0-9 $%*+\\-./:]+`,`g`),e.BYTE=new RegExp(i,`g`),e.NUMERIC=new RegExp(t,`g`),e.ALPHANUMERIC=new RegExp(n,`g`);var a=RegExp(`^`+r+`$`),o=RegExp(`^`+t+`$`),s=RegExp(`^[A-Z0-9 $%*+\\-./:]+$`);e.testKanji=function(e){return a.test(e)},e.testNumeric=function(e){return o.test(e)},e.testAlphanumeric=function(e){return s.test(e)}})),q=n((e=>{var t=G(),n=K();e.NUMERIC={id:`Numeric`,bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:`Alphanumeric`,bit:2,ccBits:[9,11,13]},e.BYTE={id:`Byte`,bit:4,ccBits:[8,16,16]},e.KANJI={id:`Kanji`,bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(e,n){if(!e.ccBits)throw Error(`Invalid mode: `+e);if(!t.isValid(n))throw Error(`Invalid version: `+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]},e.getBestModeForData=function(t){return n.testNumeric(t)?e.NUMERIC:n.testAlphanumeric(t)?e.ALPHANUMERIC:n.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(e){if(e&&e.id)return e.id;throw Error(`Invalid mode`)},e.isValid=function(e){return e&&e.bit&&e.ccBits};function r(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`numeric`:return e.NUMERIC;case`alphanumeric`:return e.ALPHANUMERIC;case`kanji`:return e.KANJI;case`byte`:return e.BYTE;default:throw Error(`Unknown mode: `+t)}}e.from=function(t,n){if(e.isValid(t))return t;try{return r(t)}catch{return n}}})),J=n((e=>{var t=P(),n=V(),r=F(),i=q(),a=G(),o=7973,s=t.getBCHDigit(o);function c(t,n,r){for(let i=1;i<=40;i++)if(n<=e.getCapacity(i,r,t))return i}function l(e,t){return i.getCharCountIndicator(e,t)+4}function u(e,t){let n=0;return e.forEach(function(e){let r=l(e.mode,t);n+=r+e.getBitsLength()}),n}function d(t,n){for(let r=1;r<=40;r++)if(u(t,r)<=e.getCapacity(r,n,i.MIXED))return r}e.from=function(e,t){return a.isValid(e)?parseInt(e,10):t},e.getCapacity=function(e,r,o){if(!a.isValid(e))throw Error(`Invalid QR Code version`);o===void 0&&(o=i.BYTE);let s=(t.getSymbolTotalCodewords(e)-n.getTotalCodewordsCount(e,r))*8;if(o===i.MIXED)return s;let c=s-l(o,e);switch(o){case i.NUMERIC:return Math.floor(c/10*3);case i.ALPHANUMERIC:return Math.floor(c/11*2);case i.KANJI:return Math.floor(c/13);case i.BYTE:default:return Math.floor(c/8)}},e.getBestVersionForData=function(e,t){let n,i=r.from(t,r.M);if(Array.isArray(e)){if(e.length>1)return d(e,i);if(e.length===0)return 1;n=e[0]}else n=e;return c(n.mode,n.getLength(),i)},e.getEncodedBits=function(e){if(!a.isValid(e)||e<7)throw Error(`Invalid QR Code version`);let n=e<<12;for(;t.getBCHDigit(n)-s>=0;)n^=o<<t.getBCHDigit(n)-s;return e<<12|n}})),te=n((e=>{var t=P(),n=1335,r=21522,i=t.getBCHDigit(n);e.getEncodedBits=function(e,a){let o=e.bit<<3|a,s=o<<10;for(;t.getBCHDigit(s)-i>=0;)s^=n<<t.getBCHDigit(s)-i;return(o<<10|s)^r}})),ne=n(((e,t)=>{var n=q();function r(e){this.mode=n.NUMERIC,this.data=e.toString()}r.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){let t,n,r;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),r=parseInt(n,10),e.put(r,10);let i=this.data.length-t;i>0&&(n=this.data.substr(t),r=parseInt(n,10),e.put(r,i*3+1))},t.exports=r})),re=n(((e,t)=>{var n=q(),r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`.split(``);function i(e){this.mode=n.ALPHANUMERIC,this.data=e}i.getBitsLength=function(e){return 11*Math.floor(e/2)+e%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t+2<=this.data.length;t+=2){let n=r.indexOf(this.data[t])*45;n+=r.indexOf(this.data[t+1]),e.put(n,11)}this.data.length%2&&e.put(r.indexOf(this.data[t]),6)},t.exports=i})),ie=n(((e,t)=>{var n=q();function r(e){this.mode=n.BYTE,typeof e==`string`?this.data=new TextEncoder().encode(e):this.data=new Uint8Array(e)}r.getBitsLength=function(e){return e*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){for(let t=0,n=this.data.length;t<n;t++)e.put(this.data[t],8)},t.exports=r})),ae=n(((e,t)=>{var n=q(),r=P();function i(e){this.mode=n.KANJI,this.data=e}i.getBitsLength=function(e){return e*13},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t<this.data.length;t++){let n=r.toSJIS(this.data[t]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error(`Invalid SJIS character: `+this.data[t]+`
3
3
  Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},t.exports=i})),oe=n(((e,t)=>{var n={single_source_shortest_paths:function(e,t,r){var i={},a={};a[t]=0;var o=n.PriorityQueue.make();o.push(t,0);for(var s,c,l,u,d,f,p,m,h;!o.empty();)for(l in s=o.pop(),c=s.value,u=s.cost,d=e[c]||{},d)d.hasOwnProperty(l)&&(f=d[l],p=u+f,m=a[l],h=a[l]===void 0,(h||m>p)&&(a[l]=p,o.push(l,p),i[l]=c));if(r!==void 0&&a[r]===void 0){var g=[`Could not find a path from `,t,` to `,r,`.`].join(``);throw Error(g)}return i},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],r=t;r;)n.push(r),e[r],r=e[r];return n.reverse(),n},find_path:function(e,t,r){var i=n.single_source_shortest_paths(e,t,r);return n.extract_shortest_path_from_predecessor_list(i,r)},PriorityQueue:{make:function(e){var t=n.PriorityQueue,r={},i;for(i in e||={},t)t.hasOwnProperty(i)&&(r[i]=t[i]);return r.queue=[],r.sorter=e.sorter||t.default_sorter,r},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){var n={value:e,cost:t};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t!==void 0&&(t.exports=n)})),se=n((e=>{var t=q(),n=ne(),r=re(),i=ie(),a=ae(),o=K(),s=P(),c=oe();function l(e){return unescape(encodeURIComponent(e)).length}function u(e,t,n){let r=[],i;for(;(i=e.exec(n))!==null;)r.push({data:i[0],index:i.index,mode:t,length:i[0].length});return r}function d(e){let n=u(o.NUMERIC,t.NUMERIC,e),r=u(o.ALPHANUMERIC,t.ALPHANUMERIC,e),i,a;return s.isKanjiModeEnabled()?(i=u(o.BYTE,t.BYTE,e),a=u(o.KANJI,t.KANJI,e)):(i=u(o.BYTE_KANJI,t.BYTE,e),a=[]),n.concat(r,i,a).sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function f(e,o){switch(o){case t.NUMERIC:return n.getBitsLength(e);case t.ALPHANUMERIC:return r.getBitsLength(e);case t.KANJI:return a.getBitsLength(e);case t.BYTE:return i.getBitsLength(e)}}function p(e){return e.reduce(function(e,t){let n=e.length-1>=0?e[e.length-1]:null;return n&&n.mode===t.mode?(e[e.length-1].data+=t.data,e):(e.push(t),e)},[])}function m(e){let n=[];for(let r=0;r<e.length;r++){let i=e[r];switch(i.mode){case t.NUMERIC:n.push([i,{data:i.data,mode:t.ALPHANUMERIC,length:i.length},{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.ALPHANUMERIC:n.push([i,{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.KANJI:n.push([i,{data:i.data,mode:t.BYTE,length:l(i.data)}]);break;case t.BYTE:n.push([{data:i.data,mode:t.BYTE,length:l(i.data)}])}}return n}function h(e,n){let r={},i={start:{}},a=[`start`];for(let o=0;o<e.length;o++){let s=e[o],c=[];for(let e=0;e<s.length;e++){let l=s[e],u=``+o+e;c.push(u),r[u]={node:l,lastCount:0},i[u]={};for(let e=0;e<a.length;e++){let o=a[e];r[o]&&r[o].node.mode===l.mode?(i[o][u]=f(r[o].lastCount+l.length,l.mode)-f(r[o].lastCount,l.mode),r[o].lastCount+=l.length):(r[o]&&(r[o].lastCount=l.length),i[o][u]=f(l.length,l.mode)+4+t.getCharCountIndicator(l.mode,n))}}a=c}for(let e=0;e<a.length;e++)i[a[e]].end=0;return{map:i,table:r}}function g(e,o){let c,l=t.getBestModeForData(e);if(c=t.from(o,l),c!==t.BYTE&&c.bit<l.bit)throw Error(`"`+e+`" cannot be encoded with mode `+t.toString(c)+`.
4
4
  Suggested mode is: `+t.toString(l));switch(c===t.KANJI&&!s.isKanjiModeEnabled()&&(c=t.BYTE),c){case t.NUMERIC:return new n(e);case t.ALPHANUMERIC:return new r(e);case t.KANJI:return new a(e);case t.BYTE:return new i(e)}}e.fromArray=function(e){return e.reduce(function(e,t){return typeof t==`string`?e.push(g(t,null)):t.data&&e.push(g(t.data,t.mode)),e},[])},e.fromString=function(t,n){let r=h(m(d(t,s.isKanjiModeEnabled())),n),i=c.find_path(r.map,`start`,`end`),a=[];for(let e=1;e<i.length-1;e++)a.push(r.table[i[e]].node);return e.fromArray(p(a))},e.rawSplit=function(t){return e.fromArray(d(t,s.isKanjiModeEnabled()))}})),ce=n((e=>{var t=P(),n=F(),r=I(),i=L(),a=R(),o=z(),s=B(),c=V(),l=W(),u=J(),d=te(),f=q(),p=se();function m(e,t){let n=e.size,r=o.getPositions(t);for(let t=0;t<r.length;t++){let i=r[t][0],a=r[t][1];for(let t=-1;t<=7;t++)if(!(i+t<=-1||n<=i+t))for(let r=-1;r<=7;r++)a+r<=-1||n<=a+r||(t>=0&&t<=6&&(r===0||r===6)||r>=0&&r<=6&&(t===0||t===6)||t>=2&&t<=4&&r>=2&&r<=4?e.set(i+t,a+r,!0,!0):e.set(i+t,a+r,!1,!0))}}function h(e){let t=e.size;for(let n=8;n<t-8;n++){let t=n%2==0;e.set(n,6,t,!0),e.set(6,n,t,!0)}}function g(e,t){let n=a.getPositions(t);for(let t=0;t<n.length;t++){let r=n[t][0],i=n[t][1];for(let t=-2;t<=2;t++)for(let n=-2;n<=2;n++)t===-2||t===2||n===-2||n===2||t===0&&n===0?e.set(r+t,i+n,!0,!0):e.set(r+t,i+n,!1,!0)}}function _(e,t){let n=e.size,r=u.getEncodedBits(t),i,a,o;for(let t=0;t<18;t++)i=Math.floor(t/3),a=t%3+n-8-3,o=(r>>t&1)==1,e.set(i,a,o,!0),e.set(a,i,o,!0)}function v(e,t,n){let r=e.size,i=d.getEncodedBits(t,n),a,o;for(a=0;a<15;a++)o=(i>>a&1)==1,a<6?e.set(a,8,o,!0):a<8?e.set(a+1,8,o,!0):e.set(r-15+a,8,o,!0),a<8?e.set(8,r-a-1,o,!0):a<9?e.set(8,15-a-1+1,o,!0):e.set(8,15-a-1,o,!0);e.set(r-8,8,1,!0)}function y(e,t){let n=e.size,r=-1,i=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(s===6&&s--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,s-n)){let r=!1;o<t.length&&(r=(t[o]>>>a&1)==1),e.set(i,s-n,r),a--,a===-1&&(o++,a=7)}if(i+=r,i<0||n<=i){i-=r,r=-r;break}}}function b(e,n,i){let a=new r;i.forEach(function(t){a.put(t.mode.bit,4),a.put(t.getLength(),f.getCharCountIndicator(t.mode,e)),t.write(a)});let o=(t.getSymbolTotalCodewords(e)-c.getTotalCodewordsCount(e,n))*8;for(a.getLengthInBits()+4<=o&&a.put(0,4);a.getLengthInBits()%8!=0;)a.putBit(0);let s=(o-a.getLengthInBits())/8;for(let e=0;e<s;e++)a.put(e%2?17:236,8);return x(a,e,n)}function x(e,n,r){let i=t.getSymbolTotalCodewords(n),a=i-c.getTotalCodewordsCount(n,r),o=c.getBlocksCount(n,r),s=o-i%o,u=Math.floor(i/o),d=Math.floor(a/o),f=d+1,p=u-d,m=new l(p),h=0,g=Array(o),_=Array(o),v=0,y=new Uint8Array(e.buffer);for(let e=0;e<o;e++){let t=e<s?d:f;g[e]=y.slice(h,h+t),_[e]=m.encode(g[e]),h+=t,v=Math.max(v,t)}let b=new Uint8Array(i),x=0,S,C;for(S=0;S<v;S++)for(C=0;C<o;C++)S<g[C].length&&(b[x++]=g[C][S]);for(S=0;S<p;S++)for(C=0;C<o;C++)b[x++]=_[C][S];return b}function S(e,n,r,a){let o;if(Array.isArray(e))o=p.fromArray(e);else if(typeof e==`string`){let t=n;if(!t){let n=p.rawSplit(e);t=u.getBestVersionForData(n,r)}o=p.fromString(e,t||40)}else throw Error(`Invalid data`);let c=u.getBestVersionForData(o,r);if(!c)throw Error(`The amount of data is too big to be stored in a QR Code`);if(!n)n=c;else if(n<c)throw Error(`
5
5
  The chosen QR Code version cannot contain this amount of data.
6
6
  Minimum version required to store current data is: `+c+`.
7
7
  `);let l=b(n,r,o),d=new i(t.getSymbolSize(n));return m(d,n),h(d),g(d,n),v(d,r,0),n>=7&&_(d,n),y(d,l),isNaN(a)&&(a=s.getBestMask(d,v.bind(null,d,r))),s.applyMask(a,d),v(d,r,a),{modules:d,version:n,errorCorrectionLevel:r,maskPattern:a,segments:o}}e.create=function(e,r){if(e===void 0||e===``)throw Error(`No input text`);let i=n.M,a,o;return r!==void 0&&(i=n.from(r.errorCorrectionLevel,n.M),a=u.from(r.version),o=s.from(r.maskPattern),r.toSJISFunc&&t.setToSJISFunction(r.toSJISFunc)),S(e,a,i,o)}})),Y=n((e=>{function t(e){if(typeof e==`number`&&(e=e.toString()),typeof e!=`string`)throw Error(`Color should be defined as hex string`);let t=e.slice().replace(`#`,``).split(``);if(t.length<3||t.length===5||t.length>8)throw Error(`Invalid hex color: `+e);(t.length===3||t.length===4)&&(t=Array.prototype.concat.apply([],t.map(function(e){return[e,e]}))),t.length===6&&t.push(`F`,`F`);let n=parseInt(t.join(``),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:`#`+t.slice(0,6).join(``)}}e.getOptions=function(e){e||={},e.color||={};let n=e.margin===void 0||e.margin===null||e.margin<0?4:e.margin,r=e.width&&e.width>=21?e.width:void 0,i=e.scale||4;return{width:r,scale:r?4:i,margin:n,color:{dark:t(e.color.dark||`#000000ff`),light:t(e.color.light||`#ffffffff`)},type:e.type,rendererOpts:e.rendererOpts||{}}},e.getScale=function(e,t){return t.width&&t.width>=e+t.margin*2?t.width/(e+t.margin*2):t.scale},e.getImageWidth=function(t,n){let r=e.getScale(t,n);return Math.floor((t+n.margin*2)*r)},e.qrToImageData=function(t,n,r){let i=n.modules.size,a=n.modules.data,o=e.getScale(i,r),s=Math.floor((i+r.margin*2)*o),c=r.margin*o,l=[r.color.light,r.color.dark];for(let e=0;e<s;e++)for(let n=0;n<s;n++){let u=(e*s+n)*4,d=r.color.light;if(e>=c&&n>=c&&e<s-c&&n<s-c){let t=Math.floor((e-c)/o),r=Math.floor((n-c)/o);d=l[a[t*i+r]?1:0]}t[u++]=d.r,t[u++]=d.g,t[u++]=d.b,t[u]=d.a}}})),le=n((e=>{var t=Y();function n(e,t,n){e.clearRect(0,0,t.width,t.height),t.style||={},t.height=n,t.width=n,t.style.height=n+`px`,t.style.width=n+`px`}function r(){try{return document.createElement(`canvas`)}catch{throw Error(`You need to specify a canvas element`)}}e.render=function(e,i,a){let o=a,s=i;o===void 0&&(!i||!i.getContext)&&(o=i,i=void 0),i||(s=r()),o=t.getOptions(o);let c=t.getImageWidth(e.modules.size,o),l=s.getContext(`2d`),u=l.createImageData(c,c);return t.qrToImageData(u.data,e,o),n(l,s,c),l.putImageData(u,0,0),s},e.renderToDataURL=function(t,n,r){let i=r;i===void 0&&(!n||!n.getContext)&&(i=n,n=void 0),i||={};let a=e.render(t,n,i),o=i.type||`image/png`,s=i.rendererOpts||{};return a.toDataURL(o,s.quality)}})),ue=n((e=>{var t=Y();function n(e,t){let n=e.a/255,r=t+`="`+e.hex+`"`;return n<1?r+` `+t+`-opacity="`+n.toFixed(2).slice(1)+`"`:r}function r(e,t,n){let r=e+t;return n!==void 0&&(r+=` `+n),r}function i(e,t,n){let i=``,a=0,o=!1,s=0;for(let c=0;c<e.length;c++){let l=Math.floor(c%t),u=Math.floor(c/t);!l&&!o&&(o=!0),e[c]?(s++,c>0&&l>0&&e[c-1]||(i+=o?r(`M`,l+n,.5+u+n):r(`m`,a,0),a=0,o=!1),l+1<t&&e[c+1]||(i+=r(`h`,s),s=0)):a++}return i}e.render=function(e,r,a){let o=t.getOptions(r),s=e.modules.size,c=e.modules.data,l=s+o.margin*2,u=o.color.light.a?`<path `+n(o.color.light,`fill`)+` d="M0 0h`+l+`v`+l+`H0z"/>`:``,d=`<path `+n(o.color.dark,`stroke`)+` d="`+i(c,s,o.margin)+`"/>`,f=`viewBox="0 0 `+l+` `+l+`"`,p=`<svg xmlns="http://www.w3.org/2000/svg" `+(o.width?`width="`+o.width+`" height="`+o.width+`" `:``)+f+` shape-rendering="crispEdges">`+u+d+`</svg>
8
- `;return typeof a==`function`&&a(null,p),p}})),de=r(n((e=>{var t=N(),n=ce(),r=le(),i=ue();function a(e,r,i,a,o){let s=[].slice.call(arguments,1),c=s.length,l=typeof s[c-1]==`function`;if(!l&&!t())throw Error(`Callback required as last argument`);if(l){if(c<2)throw Error(`Too few arguments provided`);c===2?(o=i,i=r,r=a=void 0):c===3&&(r.getContext&&o===void 0?(o=a,a=void 0):(o=a,a=i,i=r,r=void 0))}else{if(c<1)throw Error(`Too few arguments provided`);return c===1?(i=r,r=a=void 0):c===2&&!r.getContext&&(a=i,i=r,r=void 0),new Promise(function(t,o){try{t(e(n.create(i,a),r,a))}catch(e){o(e)}})}try{let t=n.create(i,a);o(null,e(t,r,a))}catch(e){o(e)}}e.create=n.create,e.toCanvas=a.bind(null,r.render),e.toDataURL=a.bind(null,r.renderToDataURL),e.toString=a.bind(null,function(e,t,n){return i.render(e,n)})}))(),1),X=r(t(),1);async function fe(e,t){try{let n=await fetch(e,t),r=n.headers.get(`content-type`);return r&&r.includes(`application/json`)?await n.json():await n.text()}catch(t){throw console.error(`API request failed for ${e}:`,t),t}}async function pe(e){return fe(e)}var Z=e();function Q(e){return/^\d{1,3}(\.\d{1,3}){3}$/.test(e)}function me(e){return e===`localhost`||e===`127.0.0.1`||e===`::1`||Q(e)}function $(e){try{return new URL(e).protocol===`https:`?443:80}catch{return 0}}function he(e,t){if(!e.address)return``;if(Q(e.address))return`${e.address}:${t??``}`;let n=e.proxyPort??$(e.proxyUrl);return!n||n===$(e.proxyUrl)?e.address:`${e.address}:${n}`}function ge(){let{hostname:e,origin:t,protocol:n,port:r}=window.location;if(me(e))return null;let i=r?Number(r):n===`https:`?443:80;return{address:e,proxyUrl:t,setupUrl:`${t}/`,certificateUrl:`${t}/_meddle/ca.crt`,proxyPort:i}}function _e(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.enabled==`boolean`&&typeof t.interceptHttps==`boolean`&&typeof t.authenticationRequired==`boolean`&&Array.isArray(t.targets)}function ve(){let[e,t]=(0,X.useState)(null),[n,r]=(0,X.useState)(``),[a,N]=(0,X.useState)(``),[P,F]=(0,X.useState)(!0),[I,L]=(0,X.useState)(``),[R,z]=(0,X.useState)(!1),[B,V]=(0,X.useState)(``),H=(0,X.useRef)(null),U=async()=>{F(!0),L(``);try{let e=await pe(`/api/remote-access`);if(!_e(e))throw Error(`手机代理接口不可用,请重启 Meddle 服务后重试`);let n=ge(),i=n&&!e.targets.some(e=>e.address===n.address)?[n,...e.targets]:e.targets;t({...e,targets:i}),r(e=>i.some(t=>t.address===e)?e:i[0]?.address||``)}catch(e){L(e instanceof Error?e.message:`无法读取远程代理状态`)}finally{F(!1)}};(0,X.useEffect)(()=>{U()},[]),(0,X.useEffect)(()=>{B&&(H.current?.focus(),H.current?.select())},[B]);let W=(0,X.useMemo)(()=>e?.targets.find(e=>e.address===n)||e?.targets[0]||null,[e,n]),G=W?!Q(W.address):!1;(0,X.useEffect)(()=>{let e=!1;if(!W){N(``);return}return de.toDataURL(W.setupUrl,{width:320,margin:2,errorCorrectionLevel:`M`,color:{dark:`#111827`,light:`#ffffff`}}).then(t=>{e||N(t)}).catch(t=>{e||L(t instanceof Error?t.message:`二维码生成失败`)}),()=>{e=!0}},[W]);let K=async()=>{if(W)try{await O(W.setupUrl),z(!0),V(``),S.success(`手机配置地址已复制`),window.setTimeout(()=>z(!1),1500)}catch{V(W.setupUrl),S.info(`浏览器禁止自动复制,地址已选中`)}};return P?(0,Z.jsxs)(`div`,{className:`grid h-full gap-6 p-6 md:grid-cols-[340px_1fr]`,"aria-label":`正在读取手机代理状态`,children:[(0,Z.jsx)(f,{className:`min-h-[420px] w-full`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Z.jsx)(f,{className:`h-8 w-40`}),(0,Z.jsx)(f,{className:`h-20 w-full`}),(0,Z.jsx)(f,{className:`h-10 w-full`})]})]}):I&&!e?(0,Z.jsx)(`div`,{className:`p-6`,children:(0,Z.jsxs)(j,{variant:`destructive`,children:[(0,Z.jsx)(A,{children:`加载失败`}),(0,Z.jsx)(k,{children:I})]})}):e?.enabled?W?(0,Z.jsx)(`div`,{className:`app-panel-content h-full w-full`,children:(0,Z.jsxs)(`div`,{"data-testid":`mobile-proxy-fullwidth`,className:`mx-auto grid w-full max-w-6xl gap-6 md:grid-cols-[340px_minmax(0,1fr)]`,children:[(0,Z.jsxs)(C,{className:`gap-0 overflow-hidden py-0 shadow-none`,children:[(0,Z.jsxs)(w,{className:`border-b py-4`,children:[(0,Z.jsxs)(x,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(b,{}),`扫码打开配置页`]}),(0,Z.jsx)(E,{children:`使用手机相机或 Safari 扫描。`}),(0,Z.jsx)(D,{children:G?(0,Z.jsx)(y,{variant:`secondary`,children:`公网入口`}):(0,Z.jsx)(y,{variant:`secondary`,children:`局域网`})})]}),(0,Z.jsx)(T,{className:`flex min-h-[340px] items-center justify-center bg-background p-4`,children:a?(0,Z.jsx)(`img`,{src:a,alt:`打开 ${W.setupUrl} 的二维码`,className:`size-[300px] rounded-lg`}):(0,Z.jsx)(h,{className:`size-6 animate-spin text-muted-foreground`})})]}),(0,Z.jsxs)(C,{className:`gap-0 py-0 shadow-none`,children:[(0,Z.jsxs)(w,{className:`border-b py-4`,children:[(0,Z.jsxs)(x,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(u,{}),`手机代理配置`]}),(0,Z.jsx)(E,{children:`手机与电脑连接同一局域网后,扫描二维码打开配置页并安装 HTTPS 根证书。`})]}),(0,Z.jsxs)(T,{className:`flex flex-col gap-5 p-5`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Z.jsxs)(`div`,{className:`inline-flex items-center gap-1`,children:[(0,Z.jsxs)(y,{variant:`outline`,className:`gap-1.5`,children:[G?(0,Z.jsx)(g,{}):(0,Z.jsx)(d,{}),he(W,e.proxyPort)]}),(0,Z.jsx)(i,{variant:`ghost`,size:`icon-sm`,onClick:()=>void K(),"aria-label":R?`地址已复制`:`复制手机配置地址`,title:R?`已复制`:`复制地址`,className:`size-6`,children:R?(0,Z.jsx)(o,{}):(0,Z.jsx)(s,{})})]}),(0,Z.jsxs)(y,{variant:e.interceptHttps?`default`:`secondary`,className:`gap-1.5`,children:[e.interceptHttps?(0,Z.jsx)(l,{}):(0,Z.jsx)(M,{}),`HTTPS `,e.interceptHttps?`解密开启`:`解密关闭`]}),e.authenticationRequired&&(0,Z.jsx)(y,{variant:`secondary`,children:`需要代理认证`})]}),B&&(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-lg border bg-muted/40 p-3 text-xs text-muted-foreground`,role:`status`,children:[(0,Z.jsx)(`span`,{children:`浏览器禁止自动访问剪贴板,请按 Ctrl/Cmd+C 复制:`}),(0,Z.jsx)(m,{ref:H,value:B,readOnly:!0,"aria-label":`手动复制手机配置地址`,onFocus:e=>e.currentTarget.select(),onClick:e=>e.currentTarget.select()})]}),e.targets.length>1&&(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Z.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`选择局域网地址`}),(0,Z.jsx)(v,{type:`single`,value:W.address,onValueChange:e=>{e&&(r(e),V(``))},variant:`outline`,size:`sm`,spacing:1,className:`flex-wrap justify-start`,"aria-label":`局域网地址`,children:e.targets.map(e=>(0,Z.jsx)(_,{value:e.address,children:e.address},e.address))})]}),(0,Z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Z.jsx)(i,{variant:`outline`,size:`sm`,asChild:!0,children:(0,Z.jsxs)(`a`,{href:W.setupUrl,target:`_blank`,rel:`noreferrer`,children:[(0,Z.jsx)(p,{"data-icon":`inline-start`}),`浏览器打开`]})}),e.interceptHttps&&(0,Z.jsx)(i,{variant:`outline`,size:`sm`,asChild:!0,children:(0,Z.jsxs)(`a`,{href:W.certificateUrl,children:[(0,Z.jsx)(ee,{"data-icon":`inline-start`}),`下载根证书`]})})]}),(0,Z.jsxs)(`ol`,{className:`flex flex-col gap-2 text-sm leading-6 text-muted-foreground`,children:[(0,Z.jsx)(`li`,{children:`1. 扫码打开手机配置页。`}),(0,Z.jsx)(`li`,{children:`2. 在手机 Wi-Fi 设置中填写页面显示的代理地址。`}),(0,Z.jsx)(`li`,{children:`3. 安装并完全信任根证书后,即可查看 HTTPS 请求。`})]}),I&&(0,Z.jsxs)(j,{variant:`destructive`,children:[(0,Z.jsx)(A,{children:`操作失败`}),(0,Z.jsx)(k,{children:I})]})]})]})]})}):(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4 p-6`,children:[(0,Z.jsxs)(j,{variant:`destructive`,children:[(0,Z.jsx)(d,{}),(0,Z.jsx)(A,{children:`未发现局域网地址`}),(0,Z.jsx)(k,{children:`请确认电脑已连接 Wi-Fi 或有线局域网,然后重新检测。`})]}),(0,Z.jsxs)(i,{variant:`outline`,size:`sm`,onClick:()=>void U(),children:[(0,Z.jsx)(c,{"data-icon":`inline-start`}),`重新检测`]})]}):(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4 p-6`,children:[(0,Z.jsxs)(j,{children:[(0,Z.jsx)(M,{}),(0,Z.jsx)(A,{children:`远程代理尚未开启`}),(0,Z.jsxs)(k,{children:[`使用 `,(0,Z.jsx)(`code`,{className:`rounded bg-muted px-1.5 py-0.5`,children:`meddle --remote`}),` 重启代理后,即可显示手机扫码入口。`]})]}),(0,Z.jsxs)(i,{variant:`outline`,size:`sm`,onClick:()=>void U(),children:[(0,Z.jsx)(c,{"data-icon":`inline-start`}),`重新检测`]})]})}export{ve as MobileProxyPanel};
8
+ `;return typeof a==`function`&&a(null,p),p}})),de=r(n((e=>{var t=N(),n=ce(),r=le(),i=ue();function a(e,r,i,a,o){let s=[].slice.call(arguments,1),c=s.length,l=typeof s[c-1]==`function`;if(!l&&!t())throw Error(`Callback required as last argument`);if(l){if(c<2)throw Error(`Too few arguments provided`);c===2?(o=i,i=r,r=a=void 0):c===3&&(r.getContext&&o===void 0?(o=a,a=void 0):(o=a,a=i,i=r,r=void 0))}else{if(c<1)throw Error(`Too few arguments provided`);return c===1?(i=r,r=a=void 0):c===2&&!r.getContext&&(a=i,i=r,r=void 0),new Promise(function(t,o){try{t(e(n.create(i,a),r,a))}catch(e){o(e)}})}try{let t=n.create(i,a);o(null,e(t,r,a))}catch(e){o(e)}}e.create=n.create,e.toCanvas=a.bind(null,r.render),e.toDataURL=a.bind(null,r.renderToDataURL),e.toString=a.bind(null,function(e,t,n){return i.render(e,n)})}))(),1),X=r(t(),1);async function fe(e,t){try{let n=await fetch(e,t),r=n.headers.get(`content-type`);return r&&r.includes(`application/json`)?await n.json():await n.text()}catch(t){throw console.error(`API request failed for ${e}:`,t),t}}async function pe(e){return fe(e)}var Z=e();function Q(e){return/^\d{1,3}(\.\d{1,3}){3}$/.test(e)}function me(e){return e===`localhost`||e===`127.0.0.1`||e===`::1`||Q(e)}function $(e){try{return new URL(e).protocol===`https:`?443:80}catch{return 0}}function he(e,t){if(!e.address)return``;if(Q(e.address))return`${e.address}:${t??``}`;let n=e.proxyPort??$(e.proxyUrl);return!n||n===$(e.proxyUrl)?e.address:`${e.address}:${n}`}function ge(){let{hostname:e,origin:t,protocol:n,port:r}=window.location;if(me(e))return null;let i=r?Number(r):n===`https:`?443:80;return{address:e,proxyUrl:t,setupUrl:`${t}/`,certificateUrl:`${t}/_meddle/ca.crt`,proxyPort:i}}function _e(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.enabled==`boolean`&&typeof t.interceptHttps==`boolean`&&typeof t.authenticationRequired==`boolean`&&Array.isArray(t.targets)}function ve(){let[e,t]=(0,X.useState)(null),[n,r]=(0,X.useState)(``),[a,N]=(0,X.useState)(``),[P,F]=(0,X.useState)(!0),[I,L]=(0,X.useState)(``),[R,z]=(0,X.useState)(!1),[B,V]=(0,X.useState)(``),H=(0,X.useRef)(null),U=async()=>{F(!0),L(``);try{let e=await pe(`/api/remote-access`);if(!_e(e))throw Error(`手机代理接口不可用,请重启 Meddle 服务后重试`);let n=ge(),i=n&&!e.targets.some(e=>e.address===n.address)?[n,...e.targets]:e.targets;t({...e,targets:i}),r(e=>i.some(t=>t.address===e)?e:i[0]?.address||``)}catch(e){L(e instanceof Error?e.message:`无法读取远程代理状态`)}finally{F(!1)}};(0,X.useEffect)(()=>{U()},[]),(0,X.useEffect)(()=>{B&&(H.current?.focus(),H.current?.select())},[B]);let W=(0,X.useMemo)(()=>e?.targets.find(e=>e.address===n)||e?.targets[0]||null,[e,n]),G=W?!Q(W.address):!1;(0,X.useEffect)(()=>{let e=!1;if(!W){N(``);return}return de.toDataURL(W.setupUrl,{width:320,margin:2,errorCorrectionLevel:`M`,color:{dark:`#111827`,light:`#ffffff`}}).then(t=>{e||N(t)}).catch(t=>{e||L(t instanceof Error?t.message:`二维码生成失败`)}),()=>{e=!0}},[W]);let K=async()=>{if(W)try{await D(W.setupUrl),z(!0),V(``),f.success(`手机配置地址已复制`),window.setTimeout(()=>z(!1),1500)}catch{V(W.setupUrl),f.info(`浏览器禁止自动复制,地址已选中`)}};return P?(0,Z.jsxs)(`div`,{className:`grid h-full gap-6 p-6 md:grid-cols-[340px_1fr]`,"aria-label":`正在读取手机代理状态`,children:[(0,Z.jsx)(p,{className:`min-h-[420px] w-full`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Z.jsx)(p,{className:`h-8 w-40`}),(0,Z.jsx)(p,{className:`h-20 w-full`}),(0,Z.jsx)(p,{className:`h-10 w-full`})]})]}):I&&!e?(0,Z.jsx)(`div`,{className:`p-6`,children:(0,Z.jsxs)(A,{variant:`destructive`,children:[(0,Z.jsx)(k,{children:`加载失败`}),(0,Z.jsx)(O,{children:I})]})}):e?.enabled?W?(0,Z.jsx)(`div`,{className:`app-panel-content h-full w-full`,children:(0,Z.jsxs)(`div`,{"data-testid":`mobile-proxy-fullwidth`,className:`mx-auto grid w-full max-w-6xl gap-6 md:grid-cols-[340px_minmax(0,1fr)]`,children:[(0,Z.jsxs)(b,{className:`gap-0 overflow-hidden py-0 shadow-none`,children:[(0,Z.jsxs)(S,{className:`border-b py-4`,children:[(0,Z.jsxs)(y,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(x,{}),`扫码打开配置页`]}),(0,Z.jsx)(w,{children:`使用手机相机或 Safari 扫描。`}),(0,Z.jsx)(ee,{children:G?(0,Z.jsx)(v,{variant:`secondary`,children:`公网入口`}):(0,Z.jsx)(v,{variant:`secondary`,children:`局域网`})})]}),(0,Z.jsx)(C,{className:`flex min-h-[340px] items-center justify-center bg-background p-4`,children:a?(0,Z.jsx)(`img`,{src:a,alt:`打开 ${W.setupUrl} 的二维码`,className:`size-[300px] rounded-lg`}):(0,Z.jsx)(E,{className:`size-6 animate-spin text-muted-foreground`})})]}),(0,Z.jsxs)(b,{className:`gap-0 py-0 shadow-none`,children:[(0,Z.jsxs)(S,{className:`border-b py-4`,children:[(0,Z.jsxs)(y,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(u,{}),`手机代理配置`]}),(0,Z.jsx)(w,{children:`手机与电脑连接同一局域网后,扫描二维码打开配置页并安装 HTTPS 根证书。`})]}),(0,Z.jsxs)(C,{className:`flex flex-col gap-5 p-5`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Z.jsxs)(`div`,{className:`inline-flex items-center gap-1`,children:[(0,Z.jsxs)(v,{variant:`outline`,className:`gap-1.5`,children:[G?(0,Z.jsx)(T,{}):(0,Z.jsx)(d,{}),he(W,e.proxyPort)]}),(0,Z.jsx)(i,{variant:`ghost`,size:`icon-sm`,onClick:()=>void K(),"aria-label":R?`地址已复制`:`复制手机配置地址`,title:R?`已复制`:`复制地址`,className:`size-6`,children:R?(0,Z.jsx)(o,{}):(0,Z.jsx)(s,{})})]}),(0,Z.jsxs)(v,{variant:e.interceptHttps?`default`:`secondary`,className:`gap-1.5`,children:[e.interceptHttps?(0,Z.jsx)(l,{}):(0,Z.jsx)(M,{}),`HTTPS `,e.interceptHttps?`解密开启`:`解密关闭`]}),e.authenticationRequired&&(0,Z.jsx)(v,{variant:`secondary`,children:`需要代理认证`})]}),B&&(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-lg border bg-muted/40 p-3 text-xs text-muted-foreground`,role:`status`,children:[(0,Z.jsx)(`span`,{children:`浏览器禁止自动访问剪贴板,请按 Ctrl/Cmd+C 复制:`}),(0,Z.jsx)(h,{ref:H,value:B,readOnly:!0,"aria-label":`手动复制手机配置地址`,onFocus:e=>e.currentTarget.select(),onClick:e=>e.currentTarget.select()})]}),e.targets.length>1&&(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Z.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:`选择局域网地址`}),(0,Z.jsx)(_,{type:`single`,value:W.address,onValueChange:e=>{e&&(r(e),V(``))},variant:`outline`,size:`sm`,spacing:1,className:`flex-wrap justify-start`,"aria-label":`局域网地址`,children:e.targets.map(e=>(0,Z.jsx)(g,{value:e.address,children:e.address},e.address))})]}),(0,Z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Z.jsx)(i,{variant:`outline`,size:`sm`,asChild:!0,children:(0,Z.jsxs)(`a`,{href:W.setupUrl,target:`_blank`,rel:`noreferrer`,children:[(0,Z.jsx)(m,{"data-icon":`inline-start`}),`浏览器打开`]})}),e.interceptHttps&&(0,Z.jsx)(i,{variant:`outline`,size:`sm`,asChild:!0,children:(0,Z.jsxs)(`a`,{href:W.certificateUrl,children:[(0,Z.jsx)(j,{"data-icon":`inline-start`}),`下载根证书`]})})]}),(0,Z.jsxs)(`ol`,{className:`flex flex-col gap-2 text-sm leading-6 text-muted-foreground`,children:[(0,Z.jsx)(`li`,{children:`1. 扫码打开手机配置页。`}),(0,Z.jsx)(`li`,{children:`2. 在手机 Wi-Fi 设置中填写页面显示的代理地址。`}),(0,Z.jsx)(`li`,{children:`3. 安装并完全信任根证书后,即可查看 HTTPS 请求。`})]}),I&&(0,Z.jsxs)(A,{variant:`destructive`,children:[(0,Z.jsx)(k,{children:`操作失败`}),(0,Z.jsx)(O,{children:I})]})]})]})]})}):(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4 p-6`,children:[(0,Z.jsxs)(A,{variant:`destructive`,children:[(0,Z.jsx)(d,{}),(0,Z.jsx)(k,{children:`未发现局域网地址`}),(0,Z.jsx)(O,{children:`请确认电脑已连接 Wi-Fi 或有线局域网,然后重新检测。`})]}),(0,Z.jsxs)(i,{variant:`outline`,size:`sm`,onClick:()=>void U(),children:[(0,Z.jsx)(c,{"data-icon":`inline-start`}),`重新检测`]})]}):(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4 p-6`,children:[(0,Z.jsxs)(A,{children:[(0,Z.jsx)(M,{}),(0,Z.jsx)(k,{children:`远程代理尚未开启`}),(0,Z.jsxs)(O,{children:[`使用 `,(0,Z.jsx)(`code`,{className:`rounded bg-muted px-1.5 py-0.5`,children:`meddle --remote`}),` 重启代理后,即可显示手机扫码入口。`]})]}),(0,Z.jsxs)(i,{variant:`outline`,size:`sm`,onClick:()=>void U(),children:[(0,Z.jsx)(c,{"data-icon":`inline-start`}),`重新检测`]})]})}export{ve as MobileProxyPanel};
@@ -0,0 +1 @@
1
+ import{c as e,d as t,p as n,t as r}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as ee}from"./code-DD-AYxxu.js";import{t as te}from"./checkbox-CQyFsZzS.js";import{t as i}from"./plus-ixZQRprm.js";import{c as ne}from"./dist-BQN0rzUS.js";import"./es2015-DPJTBYa9.js";import{n as a}from"./toast-9yeTf7d9.js";import{a as o,n as s,o as c,r as l,t as u}from"./use-mocks-file-status-BUIUJ4oQ.js";import{D as d,E as f,Et as re,O as ie,Z as p,i as m}from"./index-Dcm171u1.js";import"./syntax-highlight-BFgN_C0Y.js";import{a as ae,i as h,n as g,o as _,r as v,t as oe}from"./table-DaXD6jJv.js";import"./monaco-editor-Cge8h-Ca.js";import{n as y}from"./editor-pane-actions-_ckwcCII.js";import{a as b,i as x,r as S}from"./pane-bar-Dvi-MHuB.js";import{MockEditorPanel as C}from"./mock-editor-panel-CweYBdeM.js";import{n as w,r as T,t as E}from"./pane-split-ChCHxR7K.js";import{a as se,n as ce}from"./mocks-file-missing-note-C-QJ8Bpm.js";var D=n(t(),1),O=E({storageKey:`meddle-mock-list-width`,defaultPx:480,minPx:320,maxPx:640,editorMinPx:360});O.storageKey,O.defaultPx,O.minPx,O.maxPx,O.editorMinPx,O.clamp,O.load,O.save,O.widthFromPointer;var k=e(),A=`Mock 文件格式错误,修复后才能新增`;function j({mockRules:e,fetchMocks:t,createMock:n,updateMock:E,deleteMock:j,initialEditData:M,onInitialEditConsumed:N}){let[P,F]=(0,D.useState)({kind:`idle`}),[I,L]=(0,D.useState)(null),{status:R}=c(e.length);(0,D.useEffect)(()=>{t()},[t]);let z=l(R),B=(0,D.useRef)(z);(0,D.useEffect)(()=>{B.current=z},[z]);let V=l(R)?s(R.parseError):null,H=(0,D.useCallback)(e=>{if(B.current){a.error(A);return}F({kind:`create`,initialData:e,nonce:Date.now()})},[]),U=(0,D.useCallback)(e=>{F({kind:`edit`,ruleId:e.id})},[]),W=(0,D.useCallback)(()=>{F({kind:`idle`})},[]);(0,D.useEffect)(()=>{let e=e=>{let t=e.detail;H(t?.initialData)};return window.addEventListener(m,e),()=>window.removeEventListener(m,e)},[H]),(0,D.useEffect)(()=>{M&&(H(M),N?.())},[M,N,H]);let[G,K]=(0,D.useState)(void 0),q=(0,D.useMemo)(()=>{if(P.kind===`edit`)return e.find(e=>e.id===P.ruleId)},[P,e]);(0,D.useEffect)(()=>{q&&K(q)},[q]);let J=P.kind===`edit`&&!q,Y=(0,D.useRef)(null);(0,D.useEffect)(()=>{if(!J){Y.current=null;return}Y.current={status:R},window.dispatchEvent(new CustomEvent(u))},[J]);let X=q??(P.kind===`edit`&&G?.id===P.ruleId?G:void 0);(0,D.useEffect)(()=>{if(!J)return;let e=Y.current;(!G||G.id!==(P.kind===`edit`?P.ruleId:-1)||e!==null&&R!==e.status&&!z)&&F({kind:`idle`})},[J,P,G,R,z]);let le=(0,D.useCallback)(async(e,t)=>{await E(e.id,{enabled:t})},[E]),ue=(0,D.useCallback)(async e=>{window.confirm(`确定删除这条 Mock 规则?`)&&(await j(e)?(a.success(`已删除 Mock 规则`),P.kind===`edit`&&P.ruleId===e&&W()):a.error(`删除失败`))},[W,j,P]),Z=(0,D.useCallback)(()=>{t(),W()},[W,t]),Q=P.kind===`create`?`create-${P.nonce}`:P.kind===`edit`?`edit-${P.ruleId}`:`idle`,$=w(Q);return(0,k.jsxs)(T,{testId:`mock-config-layout`,layout:`list-edit`,widthAttr:`mock-list-width`,split:O,listTestId:`mock-config-list`,panelTestId:`mock-config-edit`,separatorTestId:`mock-panel-separator`,separatorLabel:`调整 Mock 列表宽度`,list:(0,k.jsxs)(k.Fragment,{children:[(0,k.jsxs)(x,{children:[(0,k.jsx)(b,{children:`Mock 规则`}),z?(0,k.jsxs)(f,{children:[(0,k.jsx)(ie,{asChild:!0,children:(0,k.jsx)(`span`,{tabIndex:0,"data-testid":`mock-config-create-wrapper`,"aria-label":A,children:(0,k.jsxs)(r,{variant:`outline`,size:`sm`,disabled:!0,"data-testid":`mock-config-create`,className:`pointer-events-none`,children:[(0,k.jsx)(i,{"data-icon":`inline-start`}),`新增规则`]})})}),(0,k.jsx)(d,{"data-testid":`mock-config-create-tooltip`,children:A})]}):(0,k.jsxs)(r,{variant:`outline`,size:`sm`,onClick:()=>H(),"data-testid":`mock-config-create`,children:[(0,k.jsx)(i,{"data-icon":`inline-start`}),`新增规则`]})]}),(0,k.jsx)(`div`,{className:`meddle-thin-scroll min-h-0 flex-1 overflow-x-hidden overflow-y-auto`,children:(0,k.jsxs)(oe,{children:[(0,k.jsx)(ae,{children:(0,k.jsxs)(_,{children:[(0,k.jsx)(h,{className:`w-12`,children:`启用`}),(0,k.jsx)(h,{className:`w-16`,children:`方法`}),(0,k.jsx)(h,{children:`名称 / 匹配`}),(0,k.jsx)(h,{className:`w-14`,children:`状态`}),(0,k.jsx)(h,{className:`w-14`,children:`延迟`}),(0,k.jsx)(h,{className:`w-12`})]})}),(0,k.jsx)(g,{children:e.length===0?(0,k.jsx)(_,{"data-testid":`mock-config-empty-row`,className:`hover:bg-transparent hover:text-inherit`,children:(0,k.jsx)(v,{colSpan:6,className:`py-8 text-center text-muted-foreground whitespace-normal`,children:l(R)?(0,k.jsx)(ce,{path:R.path,location:s(R.parseError)}):o(R)?(0,k.jsx)(se,{path:R.path,children:`暂无 Mock 规则,点击「新增规则」或从流量详情一键创建`}):`暂无 Mock 规则,点击「新增规则」或从流量详情一键创建`})}):e.map(e=>{let t=P.kind===`edit`&&P.ruleId===e.id;return(0,k.jsxs)(_,{"data-testid":`mock-config-row-${e.id}`,"data-state":t?`selected`:void 0,className:`cursor-pointer`,onClick:()=>U(e),children:[(0,k.jsx)(v,{onClick:e=>e.stopPropagation(),children:(0,k.jsx)(te,{checked:e.enabled,onCheckedChange:t=>le(e,t===!0),"aria-label":`启用 ${e.name||e.urlPattern}`})}),(0,k.jsx)(v,{children:(0,k.jsx)(p,{variant:`outline`,className:`text-xs`,children:e.method||`*`})}),(0,k.jsxs)(v,{className:`max-w-[220px]`,children:[(0,k.jsx)(`div`,{className:`truncate text-sm font-medium`,children:e.name||(0,k.jsx)(`span`,{className:`italic text-muted-foreground`,children:`未命名`})}),(0,k.jsx)(`div`,{className:`truncate font-mono text-xs text-muted-foreground`,title:e.urlPattern,children:e.urlPattern})]}),(0,k.jsx)(v,{children:(0,k.jsx)(p,{variant:e.statusCode>=400?`destructive`:e.statusCode>=300?`secondary`:`default`,children:e.statusCode})}),(0,k.jsx)(v,{className:`font-mono text-xs text-muted-foreground`,children:e.delay?`${e.delay}ms`:`0ms`}),(0,k.jsx)(v,{onClick:e=>e.stopPropagation(),children:(0,k.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[e.bodyType===`file`?(0,k.jsx)(re,{className:`size-3.5 text-muted-foreground`,"aria-hidden":!0}):(0,k.jsx)(ee,{className:`size-3.5 text-muted-foreground`,"aria-hidden":!0}),(0,k.jsx)(r,{variant:`ghost`,size:`icon-sm`,onClick:()=>void ue(e.id),className:`text-muted-foreground hover:text-destructive`,"aria-label":`删除 Mock 规则`,children:(0,k.jsx)(ne,{})})]})})]},e.id)})})]})})]}),children:[(0,k.jsx)(S,{"data-testid":`mock-editor-title-bar`,scrolled:$.scrolled,title:P.kind===`create`?`编辑 Mock · 新建`:P.kind===`edit`?`编辑 Mock · ${X?.name||X?.urlPattern||P.ruleId}`:`编辑 Mock`,actions:(0,k.jsxs)(k.Fragment,{children:[P.kind===`idle`?null:(0,k.jsx)(r,{variant:`ghost`,size:`sm`,onClick:W,children:`取消`}),(0,k.jsx)(`div`,{ref:L,"data-testid":`editor-pane-actions`,className:`contents`})]})}),(0,k.jsx)(y,{host:I,children:(0,k.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:P.kind===`idle`?(0,k.jsxs)(`div`,{className:`flex h-full min-h-[240px] flex-col items-center justify-center gap-2 p-6 text-center text-sm text-muted-foreground`,children:[(0,k.jsx)(`p`,{children:`选择左侧规则进行编辑,或点击「新增规则」`}),(0,k.jsx)(`p`,{className:`text-xs`,children:`从流量详情「创建 Mock」会打开本编辑器并预填 URL / 方法 / Body`})]}):P.kind===`create`?(0,k.jsx)(C,{onBodyScroll:$.onScroll,initialData:P.initialData,createMock:n,updateMock:E,onSaved:Z,fileInvalidLocation:V},Q):X?(0,k.jsx)(C,{onBodyScroll:$.onScroll,rule:X,createMock:n,updateMock:E,onSaved:Z,fileInvalidLocation:V},Q):null})})]})}export{j as MockConfig};
@@ -1,5 +1,5 @@
1
- import{c as e,d as t,l as n,p as r,t as i}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as a}from"./code-DD-AYxxu.js";import{n as o,t as s}from"./checkbox-CQyFsZzS.js";import{t as c}from"./plus-ixZQRprm.js";import{t as l}from"./wand-sparkles-DDGjzjnX.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./select-CFTzQ8Uy.js";import"./es2015-DPJTBYa9.js";import{i as g,o as _,r as v}from"./ai-config-store-C8D_PUGV.js";import{C as ee,F as y,L as b,M as te,N as ne,P as re,Pt as x,Q as S,R as C,S as ie,St as ae,T as oe,a as se,b as w,ht as ce,j as T,ot as le,st as E,x as ue}from"./index-Cbis1y9h.js";import{i as D}from"./syntax-highlight-Dg_CTbXd.js";import{n as O}from"./monaco-editor-BLHN8gCU.js";import{i as de,t as fe}from"./editor-pane-actions-BGttNlkS.js";import{n as pe}from"./pane-bar-BSzN6D93.js";var k=r(t(),1);function A(e,t){let n=e;switch(t){case`json`:n=j(n),n=M(n);break;case`javascript`:n=N(n),n=P(n);break;case`html`:n=F(n);break;case`css`:n=I(n);break}return n}function j(e){let t=e.replace(/'/g,`"`);return t=t.replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:/g,`$1"$2":`),t}function M(e){return e.replace(/,(\s*[}\]])/g,`$1`)}function N(e){let t={"{":`}`,"[":`]`,"(":`)`},n=[],r=!1,i=``;for(let a=0;a<e.length;a++){let o=e[a],s=a>0?e[a-1]:``;if((o===`"`||o===`'`||o==="`")&&s!==`\\`&&(r?o===i&&(r=!1):(r=!0,i=o)),!r){if(o in t)n.push(o);else if(Object.values(t).includes(o)){let e=Object.keys(t).find(e=>t[e]===o);n.length>0&&n[n.length-1]===e&&n.pop()}}}let a=e;for(;n.length>0;){let e=t[n.pop()];a+=e}return a}function P(e){let t=e,n={'"':0,"'":0,"`":0};for(let t of e)(t===`"`||t===`'`||t==="`")&&n[t]++;return n[`"`]%2!=0&&(t+=`"`),n[`'`]%2!=0&&(t+=`'`),n["`"]%2!=0&&(t+="`"),t}function F(e){let t=[],n=[`br`,`hr`,`img`,`input`,`link`,`meta`,`area`,`base`,`col`,`embed`,`param`,`source`,`track`,`wbr`],r=/<\/?([a-z][\w-]*)\b[^>]*>/gi,i;for(;(i=r.exec(e))!==null;){let e=i[0],r=i[1].toLowerCase(),a=e.endsWith(`/>`)||n.includes(r);e.startsWith(`</`)?t.length>0&&t[t.length-1]===r&&t.pop():a||t.push(r)}let a=e;for(;t.length>0;){let e=t.pop();a+=`</${e}>`}return a}function I(e){let t=0,n=!1,r=``;for(let i=0;i<e.length;i++){let a=e[i],o=i>0?e[i-1]:``;(a===`"`||a===`'`)&&o!==`\\`&&(n?a===r&&(n=!1):(n=!0,r=a)),n||(a===`{`?t++:a===`}`&&t--)}let i=e;for(;t>0;)i+=`
2
- }`,t--;return i}async function me(e,t=!1){if(!e.trim())return{fixed:e,method:`none`,success:!0};let n=D(e);if(!t&&n.valid)return{fixed:e,method:`none`,success:!0};let r=n.type?.toLowerCase();(!r||r===`text`)&&(r=L(e)),(!r||r===`text`)&&(r=`json`);let i=r,a=v();if(_(a))try{let t=g(a),n=await V(e,i,t?{provider:t.provider,apiKey:t.apiKey,baseUrl:t.baseUrl,model:t.model}:{provider:a.provider,apiKey:a.apiKey,baseUrl:a.baseUrl,model:a.model}),r=D(n);return r.valid?{fixed:n,method:`ai`,success:!0}:{fixed:n,method:`ai`,success:r.valid}}catch(e){console.warn(`AI修复失败:`,e)}let o=A(e,i);return{fixed:o,method:`rules`,success:D(o).valid}}function L(e){let t=e.trim();return t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`)?`json`:t.startsWith(`<`)&&t.includes(`>`)?`html`:t.includes(`{`)&&t.includes(`}`)&&t.includes(`:`)?`css`:`text`}async function R(e,t,n){let r=`You are a code fixing assistant. Fix syntax errors in ${t.toUpperCase()} code. Return only the fixed code without explanations or markdown formatting.`,i=`Please fix the syntax errors in the following ${t.toUpperCase()} code. Return ONLY the fixed code without any explanations:
1
+ import{c as e,d as t,l as n,p as r,t as i}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as a}from"./code-DD-AYxxu.js";import{n as o,t as s}from"./checkbox-CQyFsZzS.js";import{t as c}from"./plus-ixZQRprm.js";import{c as l}from"./dist-BQN0rzUS.js";import{t as u}from"./wand-sparkles-Bmt4dDOf.js";import"./es2015-DPJTBYa9.js";import{i as d,o as f,r as p}from"./ai-config-store-C8D_PUGV.js";import{n as m}from"./toast-9yeTf7d9.js";import"./use-mocks-file-status-BUIUJ4oQ.js";import{D as h,E as g,G as _,J as v,K as ee,M as y,Nt as b,O as te,Q as x,T as S,U as ne,W as re,_ as ie,a as C,g as ae,h as oe,j as w,k as T,mt as se,ot as ce,q as le,xt as E,y as ue}from"./index-Dcm171u1.js";import{i as D}from"./syntax-highlight-BFgN_C0Y.js";import{n as O}from"./monaco-editor-Cge8h-Ca.js";import{i as de,t as fe}from"./editor-pane-actions-_ckwcCII.js";import{n as pe}from"./pane-bar-Dvi-MHuB.js";var k=r(t(),1);function A(e,t){let n=e;switch(t){case`json`:n=j(n),n=M(n);break;case`javascript`:n=N(n),n=P(n);break;case`html`:n=F(n);break;case`css`:n=I(n);break}return n}function j(e){let t=e.replace(/'/g,`"`);return t=t.replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:/g,`$1"$2":`),t}function M(e){return e.replace(/,(\s*[}\]])/g,`$1`)}function N(e){let t={"{":`}`,"[":`]`,"(":`)`},n=[],r=!1,i=``;for(let a=0;a<e.length;a++){let o=e[a],s=a>0?e[a-1]:``;if((o===`"`||o===`'`||o==="`")&&s!==`\\`&&(r?o===i&&(r=!1):(r=!0,i=o)),!r){if(o in t)n.push(o);else if(Object.values(t).includes(o)){let e=Object.keys(t).find(e=>t[e]===o);n.length>0&&n[n.length-1]===e&&n.pop()}}}let a=e;for(;n.length>0;){let e=t[n.pop()];a+=e}return a}function P(e){let t=e,n={'"':0,"'":0,"`":0};for(let t of e)(t===`"`||t===`'`||t==="`")&&n[t]++;return n[`"`]%2!=0&&(t+=`"`),n[`'`]%2!=0&&(t+=`'`),n["`"]%2!=0&&(t+="`"),t}function F(e){let t=[],n=[`br`,`hr`,`img`,`input`,`link`,`meta`,`area`,`base`,`col`,`embed`,`param`,`source`,`track`,`wbr`],r=/<\/?([a-z][\w-]*)\b[^>]*>/gi,i;for(;(i=r.exec(e))!==null;){let e=i[0],r=i[1].toLowerCase(),a=e.endsWith(`/>`)||n.includes(r);e.startsWith(`</`)?t.length>0&&t[t.length-1]===r&&t.pop():a||t.push(r)}let a=e;for(;t.length>0;){let e=t.pop();a+=`</${e}>`}return a}function I(e){let t=0,n=!1,r=``;for(let i=0;i<e.length;i++){let a=e[i],o=i>0?e[i-1]:``;(a===`"`||a===`'`)&&o!==`\\`&&(n?a===r&&(n=!1):(n=!0,r=a)),n||(a===`{`?t++:a===`}`&&t--)}let i=e;for(;t>0;)i+=`
2
+ }`,t--;return i}async function me(e,t=!1){if(!e.trim())return{fixed:e,method:`none`,success:!0};let n=D(e);if(!t&&n.valid)return{fixed:e,method:`none`,success:!0};let r=n.type?.toLowerCase();(!r||r===`text`)&&(r=L(e)),(!r||r===`text`)&&(r=`json`);let i=r,a=p();if(f(a))try{let t=d(a),n=await V(e,i,t?{provider:t.provider,apiKey:t.apiKey,baseUrl:t.baseUrl,model:t.model}:{provider:a.provider,apiKey:a.apiKey,baseUrl:a.baseUrl,model:a.model}),r=D(n);return r.valid?{fixed:n,method:`ai`,success:!0}:{fixed:n,method:`ai`,success:r.valid}}catch(e){console.warn(`AI修复失败:`,e)}let o=A(e,i);return{fixed:o,method:`rules`,success:D(o).valid}}function L(e){let t=e.trim();return t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`)?`json`:t.startsWith(`<`)&&t.includes(`>`)?`html`:t.includes(`{`)&&t.includes(`}`)&&t.includes(`:`)?`css`:`text`}async function R(e,t,n){let r=`You are a code fixing assistant. Fix syntax errors in ${t.toUpperCase()} code. Return only the fixed code without explanations or markdown formatting.`,i=`Please fix the syntax errors in the following ${t.toUpperCase()} code. Return ONLY the fixed code without any explanations:
3
3
 
4
4
  ${e}`,a=await fetch(n.baseUrl,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${n.apiKey}`},body:JSON.stringify({model:n.model,messages:[{role:`system`,content:r},{role:`user`,content:i}],temperature:.3,max_tokens:2e3})});if(!a.ok){let e=await a.text();throw Error(`OpenAI API错误 (${a.status}): ${e}`)}let o=(await a.json()).choices?.[0]?.message?.content?.trim();if(!o)throw Error(`OpenAI返回了空结果`);return B(o)}async function z(e,t,n){let r=`You are a code fixing assistant. Fix syntax errors in ${t.toUpperCase()} code. Return only the fixed code without explanations or markdown formatting.`,i=`Please fix the syntax errors in the following ${t.toUpperCase()} code. Return ONLY the fixed code without any explanations:
5
5
 
@@ -17,4 +17,4 @@ ${e}`,a=await fetch(n.baseUrl,{method:`POST`,headers:{"Content-Type":`applicatio
17
17
  `,r);if(i===-1)break;n.push(` `.repeat(t)+e.slice(r,i).trim()),r=i+1;continue}if(i===`/`&&a===`*`){let i=e.indexOf(`*/`,r);if(i===-1)break;let a=e.slice(r,i+2);n.push(` `.repeat(t)+a),r=i+2;continue}if(i===`"`||i===`'`||i==="`"){let a=i,o=a;for(r++;r<e.length;)if(e[r]===`\\`&&r+1<e.length)o+=e[r]+e[r+1],r+=2;else if(e[r]===a){o+=a,r++;break}else o+=e[r],r++;n.push(` `.repeat(t)+o);continue}if(i===`{`){n.push(` `.repeat(t)+`{`),t++,r++;continue}if(i===`}`){t=Math.max(0,t-1),n.push(` `.repeat(t)+`}`),r++;continue}let o=``;for(;r<e.length&&e[r]!==`
18
18
  `&&!`{}`.includes(e[r]);)o+=e[r],r++;o.trim()&&n.push(` `.repeat(t)+o.trim()),e[r]===`
19
19
  `&&r++}return n.join(`
20
- `)}async function K(e,t){try{let n=x(()=>import(`./standalone-Bj8SSd8Q.js`),[]),r=t===`css`?[x(()=>import(`./postcss-BUm8EKMw.js`),[])]:t===`html`?[x(()=>import(`./html-VDGahtyk.js`),[]),x(()=>import(`./babel-DCr4VA1c.js`),[]),x(()=>import(`./estree-qO_m2Qaw.js`),[]),x(()=>import(`./postcss-BUm8EKMw.js`),[])]:[x(()=>import(`./babel-DCr4VA1c.js`),[]),x(()=>import(`./estree-qO_m2Qaw.js`),[])],[i,...a]=await Promise.all([n,...r]);return(await i.format(e,{parser:t===`json`?`json-stringify`:t,plugins:a.map(e=>e.default),printWidth:80,tabWidth:2,useTabs:!1,semi:!0,singleQuote:!0,trailingComma:`es5`,bracketSpacing:!0,arrowParens:`always`})).trim()}catch(n){if(t===`json`)try{let t=JSON.parse(e);return JSON.stringify(t,null,2)}catch{throw Error(`JSON格式错误,无法解析`)}else if(t===`html`)return U(e);else if(t===`css`)return W(e);else if(t===`babel`)return G(e);let r=n instanceof Error?n.message:`未知错误`;throw Error(`格式化失败: ${r}`)}}async function he(e){let t=H(e);try{let n,r;switch(t){case`json`:n=await K(e,`json`),r=`JSON`;break;case`html`:n=await K(e,`html`),r=`HTML`;break;case`css`:n=await K(e,`css`),r=`CSS`;break;case`javascript`:n=await K(e,`babel`),r=`JavaScript`;break;default:n=e,r=`Unknown`}return{formatted:n,type:r}}catch(e){throw Error(`格式化失败: ${e instanceof Error?e.message:`未知错误`}`)}}var q=e();function J(e){return typeof e==`string`?e:e==null?``:typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function Y(e){if(!e.trim())return{entries:[],error:null};let t;try{t=JSON.parse(e)}catch{return{entries:[],error:`响应头 JSON 无法解析`}}return!t||typeof t!=`object`||Array.isArray(t)?{entries:[],error:`响应头必须是 JSON 对象`}:{entries:Object.entries(t).map(([e,t])=>({key:e,value:J(t)})),error:null}}function X(e){let t={};for(let n of e){let e=n.key.trim();e&&(t[e]=n.value)}return JSON.stringify(t,null,2)}function ge({value:e,onChange:t}){let n=(0,k.useRef)(0),r=e=>(n.current+=1,{id:`header-row-${n.current}`,key:e?.key??``,value:e?.value??``}),a=Y(e),[s,l]=(0,k.useState)(`list`),[u,d]=(0,k.useState)(()=>a.entries.map(e=>r(e))),[f,p]=(0,k.useState)(a.error),[m,h]=(0,k.useState)(180),g=(0,k.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=m,r=e=>{h(Math.max(120,n+e.clientY-t))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[m]),_=e=>{d(e),p(null),t(X(e))};return(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(y,{value:s,onValueChange:t=>{if(!(t!==`list`&&t!==`code`)){if(t===`list`){let t=Y(e);p(t.error),t.error||d(t.entries.map(e=>r(e)))}l(t)}},children:(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,q.jsx)(T,{children:`响应头`}),(0,q.jsxs)(b,{"aria-label":`响应头编辑视图`,children:[(0,q.jsx)(C,{value:`list`,"data-testid":`mock-headers-view-list`,children:`列表`}),(0,q.jsx)(C,{value:`code`,"data-testid":`mock-headers-view-code`,children:`代码`})]})]})}),s===`list`?f?(0,q.jsxs)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,"data-testid":`mock-headers-parse-error`,children:[f,`。请在代码视图中修正。`]}):(0,q.jsxs)(`div`,{className:`flex flex-col gap-2`,"data-testid":`mock-headers-list`,children:[u.map((e,t)=>(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(S,{value:e.key,onChange:t=>{_(u.map(n=>n.id===e.id?{...n,key:t.target.value}:n))},placeholder:`名称`,"aria-label":`响应头名称 ${t+1}`,className:`font-mono`}),(0,q.jsx)(S,{value:e.value,onChange:t=>{_(u.map(n=>n.id===e.id?{...n,value:t.target.value}:n))},placeholder:`值`,"aria-label":`响应头值 ${t+1}`,className:`font-mono`}),(0,q.jsx)(i,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":`删除响应头 ${t+1}`,onClick:()=>_(u.filter(t=>t.id!==e.id)),children:(0,q.jsx)(E,{})})]},e.id)),(0,q.jsxs)(i,{type:`button`,variant:`outline`,size:`sm`,className:`self-start`,onClick:()=>_([...u,r()]),children:[(0,q.jsx)(c,{"data-icon":`inline-start`}),`添加`]})]}):(0,q.jsxs)(`div`,{className:`group relative`,style:{height:`${m}px`},"data-testid":`mock-headers-code-frame`,children:[(0,q.jsx)(O,{value:e,onChange:t,language:`json`,height:`flex`,className:`mock-headers-code`,placeholder:`{"Content-Type":"application/json"}`}),(0,q.jsx)(`div`,{"data-testid":`mock-headers-resize`,role:`separator`,"aria-orientation":`horizontal`,"aria-label":`调整响应头编辑器高度`,"aria-valuenow":m,className:`absolute bottom-0 left-0 right-0 flex h-4 cursor-ns-resize items-center justify-center bg-gradient-to-t from-border/50 to-transparent opacity-0 transition-opacity group-hover:opacity-100`,onMouseDown:g,children:(0,q.jsx)(o,{className:`h-4 w-4 text-muted-foreground`})})]})]})}var _e=[{value:`*`,label:`全部`},{value:`GET`,label:`GET`},{value:`POST`,label:`POST`},{value:`PUT`,label:`PUT`},{value:`DELETE`,label:`DELETE`},{value:`PATCH`,label:`PATCH`}],Z=`Mock 文件格式错误,修复后才能保存`,ve={name:``,urlPattern:``,query:``,method:`*`,statusCode:200,delay:0,bodyType:`inline`,headers:{},body:``,enabled:!0};function Q({rule:e,initialData:t,createMock:r,updateMock:c,onSaved:g,fileInvalidLocation:y=null,onBodyScroll:b}){let x=y!=null,C=(0,k.useId)(),E=(0,k.useRef)(null);y!=null&&(E.current=y);let A=y??E.current??``,j=(0,k.useMemo)(()=>e?{name:e.name,urlPattern:e.urlPattern,query:e.query||``,method:e.method,statusCode:e.statusCode,delay:e.delay||0,bodyType:e.bodyType||`inline`,headers:e.headers||{},body:e.body,enabled:e.enabled}:{...ve,...t},[t,e]),[M,N]=(0,k.useState)(j),[P,F]=(0,k.useState)(()=>JSON.stringify(j.headers||{},null,2)),[I,L]=(0,k.useState)(!1),[R,z]=(0,k.useState)(null),[B,V]=(0,k.useState)(null),[H,U]=(0,k.useState)(null),[W,G]=(0,k.useState)(!1),[K,J]=(0,k.useState)(!1),[Y,X]=(0,k.useState)(300),Q=_(v()),ye=(0,k.useCallback)(e=>{if(!e.trim()){U(null);return}let t=D(e);U(t.valid?null:t.error||`内容格式错误`)},[]),$=(e,t)=>{N(n=>({...n,[e]:t})),e===`body`&&typeof t==`string`&&ye(t)},be=(0,k.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=Y,r=e=>{let r=e.clientY-t;X(Math.max(150,n+r))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[Y]),xe=async()=>{if(!(!M.body.trim()||K)){J(!0),V(null);try{let{formatted:e}=await he(M.body);$(`body`,e)}catch(e){V(e instanceof Error?e.message:`格式化失败`),window.setTimeout(()=>V(null),3e3)}finally{J(!1)}}},Se=async()=>{if(!(!M.body.trim()||W||!Q)){G(!0),V(null);try{let e=await me(M.body,!0);if(!e.success)throw Error(`自动修复失败,请手动修正语法错误`);$(`body`,e.fixed),U(null)}catch(e){V(e instanceof Error?e.message:`修复失败`),window.setTimeout(()=>V(null),3e3)}finally{G(!1)}}},Ce=async()=>{if(!x){if(!M.urlPattern.trim()){z(`请填写 URL 匹配`);return}if(M.bodyType===`inline`&&M.body.trim()){let e=D(M.body);if(!e.valid){U(e.error||`内容格式错误`);return}}L(!0),z(null);try{let t={};if(P.trim()){let e=JSON.parse(P);if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`响应头必须是 JSON 对象`);t=Object.fromEntries(Object.entries(e).map(([e,t])=>[e,String(t)]))}let n={...M,headers:t},i=!1;if(se(),i=e?await c(e.id,n,{silentInvalid:!0}):!!await r(n,{silentInvalid:!0}),!i&&se())return;if(!i)throw Error(`保存 Mock 规则失败`);w.success(e?`Mock 规则已更新`:`Mock 规则已创建`),g?.()}catch(e){let t=e instanceof Error?e.message:`保存失败`;z(t),w.error(t)}finally{L(!1)}}};ue({active:!0,enabled:!I&&!x&&!!M.urlPattern.trim(),priority:ie.panel,onSave:Ce});let we=de();return(0,q.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,q.jsxs)(`div`,{className:`app-panel-content`,onScroll:b,"data-slot":`mock-editor-scroll`,children:[(0,q.jsx)(`div`,{"data-testid":`mock-editor-file-invalid-wrap`,"data-visible":x?`true`:`false`,className:n(`-mb-[var(--ui-content-gap)] grid shrink-0 transition-[grid-template-rows,opacity] duration-150 ease-out motion-reduce:transition-none`,x?`grid-rows-[1fr] opacity-100`:`grid-rows-[0fr] opacity-0`),children:(0,q.jsx)(`div`,{className:`min-h-0 overflow-hidden`,children:(0,q.jsx)(`div`,{className:`pb-[var(--ui-content-gap)]`,children:(0,q.jsx)(`p`,{"data-testid":x?`mock-editor-file-invalid`:void 0,role:`alert`,className:`flex items-start gap-1 text-xs text-destructive`,children:(0,q.jsxs)(`span`,{"aria-hidden":!x||void 0,className:`flex min-w-0 items-start gap-1`,children:[(0,q.jsx)(le,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0`}),(0,q.jsxs)(`span`,{className:`min-w-0`,children:[Z,`:`,(0,q.jsx)(`span`,{className:`font-mono`,children:A})]})]})})})})}),R&&!x&&(0,q.jsx)(`div`,{className:`rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-900 dark:bg-red-950/20 dark:text-red-300`,children:R}),(0,q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(T,{children:`规则名称`}),(0,q.jsx)(S,{value:M.name,onChange:e=>$(`name`,e.target.value),placeholder:`如:模拟欠费状态`})]}),(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(T,{htmlFor:C,children:`HTTP 方法`}),(0,q.jsxs)(h,{value:M.method||`*`,onValueChange:e=>$(`method`,e),children:[(0,q.jsx)(u,{id:C,className:`w-full`,"data-testid":`mock-editor-method`,children:(0,q.jsx)(p,{})}),(0,q.jsx)(f,{children:(0,q.jsx)(m,{children:_e.map(e=>(0,q.jsx)(d,{value:e.value,children:e.label},e.value))})})]})]})]}),(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(T,{children:`URL 匹配(支持正则)`}),(0,q.jsx)(S,{value:M.urlPattern,onChange:e=>$(`urlPattern`,e.target.value),placeholder:`如:/api/console/user/corp/.*`,className:`font-mono`})]}),(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(T,{children:`Query 匹配(可选)`}),(0,q.jsx)(S,{value:M.query||``,onChange:e=>$(`query`,e.target.value),placeholder:`如:window_key=A`,className:`font-mono`})]}),(0,q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(T,{children:`响应状态码`}),(0,q.jsx)(S,{type:`number`,value:M.statusCode,onChange:e=>$(`statusCode`,parseInt(e.target.value)||200)})]}),(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(T,{children:`响应延迟 (ms)`}),(0,q.jsx)(S,{type:`number`,value:M.delay,onChange:e=>$(`delay`,parseInt(e.target.value)||0)})]})]}),(0,q.jsx)(ge,{value:P,onChange:F}),(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,q.jsx)(T,{children:`响应内容`}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[B&&(0,q.jsx)(`span`,{className:`max-w-[280px] truncate text-xs text-red-500`,title:B,children:B}),M.body.trim()&&(0,q.jsxs)(i,{type:`button`,variant:`outline`,size:`xs`,onClick:Se,disabled:W||!Q,title:Q?`使用 AI 修复响应内容`:`AI 未配置或未启用`,children:[W?(0,q.jsx)(ae,{className:`mr-1 h-3 w-3 animate-spin`}):(0,q.jsx)(l,{className:`mr-1 h-3 w-3`}),W?`修复中...`:`AI修复`]}),(0,q.jsxs)(i,{type:`button`,variant:`ghost`,size:`xs`,onClick:xe,disabled:K||!M.body.trim(),title:`格式化响应内容`,children:[K?(0,q.jsx)(ae,{className:`mr-1 h-3 w-3 animate-spin`}):(0,q.jsx)(a,{className:`mr-1 h-3 w-3`}),K?`格式化中...`:`代码格式化`]})]})]}),(0,q.jsxs)(`div`,{className:`relative group`,style:{height:`${Y}px`},children:[(0,q.jsx)(O,{value:M.body,onChange:e=>$(`body`,e),placeholder:`支持 JSON、HTML、JS、CSS 等响应内容`,height:`flex`}),(0,q.jsx)(`div`,{className:`absolute bottom-0 left-0 right-0 h-4 cursor-ns-resize flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity bg-gradient-to-t from-border/50 to-transparent`,onMouseDown:be,children:(0,q.jsx)(o,{className:`h-4 w-4 text-muted-foreground`})})]}),H&&(0,q.jsxs)(`div`,{className:`flex items-start gap-2 p-2 rounded-md bg-red-50 dark:bg-red-950/20 border border-red-200 dark:border-red-900`,children:[(0,q.jsx)(`span`,{className:`text-xs text-red-600 dark:text-red-400 font-medium`,children:`语法错误:`}),(0,q.jsx)(`span`,{className:`text-xs text-red-600 dark:text-red-400 flex-1`,children:H})]})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(s,{checked:M.enabled,onCheckedChange:e=>$(`enabled`,!!e)}),(0,q.jsx)(T,{className:`text-sm`,children:`启用此规则`})]})]}),we?null:(0,q.jsx)(oe,{}),(0,q.jsx)(fe,{className:`flex justify-end gap-2 px-5 py-3`,children:x?(0,q.jsxs)(te,{children:[(0,q.jsx)(re,{asChild:!0,children:(0,q.jsx)(`span`,{tabIndex:0,"data-testid":`mock-editor-save-wrapper`,"aria-label":Z,children:(0,q.jsxs)(ee,{size:`sm`,disabled:!0,className:`pointer-events-none`,children:[(0,q.jsx)(ce,{"data-icon":`inline-start`}),`保存`]})})}),(0,q.jsx)(ne,{"data-testid":`mock-editor-save-tooltip`,children:Z})]}):(0,q.jsx)(pe,{onClick:Ce,saving:I,disabled:!M.urlPattern.trim()})})]})}export{Q as MockEditorPanel};
20
+ `)}async function K(e,t){try{let n=b(()=>import(`./standalone-DsnFnsqM.js`),[]),r=t===`css`?[b(()=>import(`./postcss-BxN7Gr8n.js`),[])]:t===`html`?[b(()=>import(`./html-CCrsbFYX.js`),[]),b(()=>import(`./babel-bwZm0qi3.js`),[]),b(()=>import(`./estree-MatbZDwq.js`),[]),b(()=>import(`./postcss-BxN7Gr8n.js`),[])]:[b(()=>import(`./babel-bwZm0qi3.js`),[]),b(()=>import(`./estree-MatbZDwq.js`),[])],[i,...a]=await Promise.all([n,...r]);return(await i.format(e,{parser:t===`json`?`json-stringify`:t,plugins:a.map(e=>e.default),printWidth:80,tabWidth:2,useTabs:!1,semi:!0,singleQuote:!0,trailingComma:`es5`,bracketSpacing:!0,arrowParens:`always`})).trim()}catch(n){if(t===`json`)try{let t=JSON.parse(e);return JSON.stringify(t,null,2)}catch{throw Error(`JSON格式错误,无法解析`)}else if(t===`html`)return U(e);else if(t===`css`)return W(e);else if(t===`babel`)return G(e);let r=n instanceof Error?n.message:`未知错误`;throw Error(`格式化失败: ${r}`)}}async function he(e){let t=H(e);try{let n,r;switch(t){case`json`:n=await K(e,`json`),r=`JSON`;break;case`html`:n=await K(e,`html`),r=`HTML`;break;case`css`:n=await K(e,`css`),r=`CSS`;break;case`javascript`:n=await K(e,`babel`),r=`JavaScript`;break;default:n=e,r=`Unknown`}return{formatted:n,type:r}}catch(e){throw Error(`格式化失败: ${e instanceof Error?e.message:`未知错误`}`)}}var q=e();function J(e){return typeof e==`string`?e:e==null?``:typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function Y(e){if(!e.trim())return{entries:[],error:null};let t;try{t=JSON.parse(e)}catch{return{entries:[],error:`响应头 JSON 无法解析`}}return!t||typeof t!=`object`||Array.isArray(t)?{entries:[],error:`响应头必须是 JSON 对象`}:{entries:Object.entries(t).map(([e,t])=>({key:e,value:J(t)})),error:null}}function X(e){let t={};for(let n of e){let e=n.key.trim();e&&(t[e]=n.value)}return JSON.stringify(t,null,2)}function ge({value:e,onChange:t}){let n=(0,k.useRef)(0),r=e=>(n.current+=1,{id:`header-row-${n.current}`,key:e?.key??``,value:e?.value??``}),a=Y(e),[s,u]=(0,k.useState)(`list`),[d,f]=(0,k.useState)(()=>a.entries.map(e=>r(e))),[p,m]=(0,k.useState)(a.error),[h,g]=(0,k.useState)(180),_=(0,k.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=h,r=e=>{g(Math.max(120,n+e.clientY-t))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[h]),v=e=>{f(e),m(null),t(X(e))};return(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(T,{value:s,onValueChange:t=>{if(!(t!==`list`&&t!==`code`)){if(t===`list`){let t=Y(e);m(t.error),t.error||f(t.entries.map(e=>r(e)))}u(t)}},children:(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,q.jsx)(S,{children:`响应头`}),(0,q.jsxs)(w,{"aria-label":`响应头编辑视图`,children:[(0,q.jsx)(y,{value:`list`,"data-testid":`mock-headers-view-list`,children:`列表`}),(0,q.jsx)(y,{value:`code`,"data-testid":`mock-headers-view-code`,children:`代码`})]})]})}),s===`list`?p?(0,q.jsxs)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,"data-testid":`mock-headers-parse-error`,children:[p,`。请在代码视图中修正。`]}):(0,q.jsxs)(`div`,{className:`flex flex-col gap-2`,"data-testid":`mock-headers-list`,children:[d.map((e,t)=>(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(x,{value:e.key,onChange:t=>{v(d.map(n=>n.id===e.id?{...n,key:t.target.value}:n))},placeholder:`名称`,"aria-label":`响应头名称 ${t+1}`,className:`font-mono`}),(0,q.jsx)(x,{value:e.value,onChange:t=>{v(d.map(n=>n.id===e.id?{...n,value:t.target.value}:n))},placeholder:`值`,"aria-label":`响应头值 ${t+1}`,className:`font-mono`}),(0,q.jsx)(i,{type:`button`,variant:`ghost`,size:`icon-sm`,"aria-label":`删除响应头 ${t+1}`,onClick:()=>v(d.filter(t=>t.id!==e.id)),children:(0,q.jsx)(l,{})})]},e.id)),(0,q.jsxs)(i,{type:`button`,variant:`outline`,size:`sm`,className:`self-start`,onClick:()=>v([...d,r()]),children:[(0,q.jsx)(c,{"data-icon":`inline-start`}),`添加`]})]}):(0,q.jsxs)(`div`,{className:`group relative`,style:{height:`${h}px`},"data-testid":`mock-headers-code-frame`,children:[(0,q.jsx)(O,{value:e,onChange:t,language:`json`,height:`flex`,className:`mock-headers-code`,placeholder:`{"Content-Type":"application/json"}`}),(0,q.jsx)(`div`,{"data-testid":`mock-headers-resize`,role:`separator`,"aria-orientation":`horizontal`,"aria-label":`调整响应头编辑器高度`,"aria-valuenow":h,className:`absolute bottom-0 left-0 right-0 flex h-4 cursor-ns-resize items-center justify-center bg-gradient-to-t from-border/50 to-transparent opacity-0 transition-opacity group-hover:opacity-100`,onMouseDown:_,children:(0,q.jsx)(o,{className:`h-4 w-4 text-muted-foreground`})})]})]})}var _e=[{value:`*`,label:`全部`},{value:`GET`,label:`GET`},{value:`POST`,label:`POST`},{value:`PUT`,label:`PUT`},{value:`DELETE`,label:`DELETE`},{value:`PATCH`,label:`PATCH`}],Z=`Mock 文件格式错误,修复后才能保存`,ve={name:``,urlPattern:``,query:``,method:`*`,statusCode:200,delay:0,bodyType:`inline`,headers:{},body:``,enabled:!0};function Q({rule:e,initialData:t,createMock:r,updateMock:c,onSaved:l,fileInvalidLocation:d=null,onBodyScroll:y}){let b=d!=null,w=(0,k.useId)(),T=(0,k.useRef)(null);d!=null&&(T.current=d);let A=d??T.current??``,j=(0,k.useMemo)(()=>e?{name:e.name,urlPattern:e.urlPattern,query:e.query||``,method:e.method,statusCode:e.statusCode,delay:e.delay||0,bodyType:e.bodyType||`inline`,headers:e.headers||{},body:e.body,enabled:e.enabled}:{...ve,...t},[t,e]),[M,N]=(0,k.useState)(j),[P,F]=(0,k.useState)(()=>JSON.stringify(j.headers||{},null,2)),[I,L]=(0,k.useState)(!1),[R,z]=(0,k.useState)(null),[B,V]=(0,k.useState)(null),[H,U]=(0,k.useState)(null),[W,G]=(0,k.useState)(!1),[K,J]=(0,k.useState)(!1),[Y,X]=(0,k.useState)(300),Q=f(p()),ye=(0,k.useCallback)(e=>{if(!e.trim()){U(null);return}let t=D(e);U(t.valid?null:t.error||`内容格式错误`)},[]),$=(e,t)=>{N(n=>({...n,[e]:t})),e===`body`&&typeof t==`string`&&ye(t)},be=(0,k.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=Y,r=e=>{let r=e.clientY-t;X(Math.max(150,n+r))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[Y]),xe=async()=>{if(!(!M.body.trim()||K)){J(!0),V(null);try{let{formatted:e}=await he(M.body);$(`body`,e)}catch(e){V(e instanceof Error?e.message:`格式化失败`),window.setTimeout(()=>V(null),3e3)}finally{J(!1)}}},Se=async()=>{if(!(!M.body.trim()||W||!Q)){G(!0),V(null);try{let e=await me(M.body,!0);if(!e.success)throw Error(`自动修复失败,请手动修正语法错误`);$(`body`,e.fixed),U(null)}catch(e){V(e instanceof Error?e.message:`修复失败`),window.setTimeout(()=>V(null),3e3)}finally{G(!1)}}},Ce=async()=>{if(!b){if(!M.urlPattern.trim()){z(`请填写 URL 匹配`);return}if(M.bodyType===`inline`&&M.body.trim()){let e=D(M.body);if(!e.valid){U(e.error||`内容格式错误`);return}}L(!0),z(null);try{let t={};if(P.trim()){let e=JSON.parse(P);if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`响应头必须是 JSON 对象`);t=Object.fromEntries(Object.entries(e).map(([e,t])=>[e,String(t)]))}let n={...M,headers:t},i=!1;if(C(),i=e?await c(e.id,n,{silentInvalid:!0}):!!await r(n,{silentInvalid:!0}),!i&&C())return;if(!i)throw Error(`保存 Mock 规则失败`);m.success(e?`Mock 规则已更新`:`Mock 规则已创建`),l?.()}catch(e){let t=e instanceof Error?e.message:`保存失败`;z(t),m.error(t)}finally{L(!1)}}};oe({active:!0,enabled:!I&&!b&&!!M.urlPattern.trim(),priority:ae.panel,onSave:Ce});let we=de();return(0,q.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,q.jsxs)(`div`,{className:`app-panel-content`,onScroll:y,"data-slot":`mock-editor-scroll`,children:[(0,q.jsx)(`div`,{"data-testid":`mock-editor-file-invalid-wrap`,"data-visible":b?`true`:`false`,className:n(`-mb-[var(--ui-content-gap)] grid shrink-0 transition-[grid-template-rows,opacity] duration-150 ease-out motion-reduce:transition-none`,b?`grid-rows-[1fr] opacity-100`:`grid-rows-[0fr] opacity-0`),children:(0,q.jsx)(`div`,{className:`min-h-0 overflow-hidden`,children:(0,q.jsx)(`div`,{className:`pb-[var(--ui-content-gap)]`,children:(0,q.jsx)(`p`,{"data-testid":b?`mock-editor-file-invalid`:void 0,role:`alert`,className:`flex items-start gap-1 text-xs text-destructive`,children:(0,q.jsxs)(`span`,{"aria-hidden":!b||void 0,className:`flex min-w-0 items-start gap-1`,children:[(0,q.jsx)(ce,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0`}),(0,q.jsxs)(`span`,{className:`min-w-0`,children:[Z,`:`,(0,q.jsx)(`span`,{className:`font-mono`,children:A})]})]})})})})}),R&&!b&&(0,q.jsx)(`div`,{className:`rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-900 dark:bg-red-950/20 dark:text-red-300`,children:R}),(0,q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(S,{children:`规则名称`}),(0,q.jsx)(x,{value:M.name,onChange:e=>$(`name`,e.target.value),placeholder:`如:模拟欠费状态`})]}),(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(S,{htmlFor:w,children:`HTTP 方法`}),(0,q.jsxs)(ne,{value:M.method||`*`,onValueChange:e=>$(`method`,e),children:[(0,q.jsx)(le,{id:w,className:`w-full`,"data-testid":`mock-editor-method`,children:(0,q.jsx)(v,{})}),(0,q.jsx)(re,{children:(0,q.jsx)(_,{children:_e.map(e=>(0,q.jsx)(ee,{value:e.value,children:e.label},e.value))})})]})]})]}),(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(S,{children:`URL 匹配(支持正则)`}),(0,q.jsx)(x,{value:M.urlPattern,onChange:e=>$(`urlPattern`,e.target.value),placeholder:`如:/api/console/user/corp/.*`,className:`font-mono`})]}),(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(S,{children:`Query 匹配(可选)`}),(0,q.jsx)(x,{value:M.query||``,onChange:e=>$(`query`,e.target.value),placeholder:`如:window_key=A`,className:`font-mono`})]}),(0,q.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(S,{children:`响应状态码`}),(0,q.jsx)(x,{type:`number`,value:M.statusCode,onChange:e=>$(`statusCode`,parseInt(e.target.value)||200)})]}),(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsx)(S,{children:`响应延迟 (ms)`}),(0,q.jsx)(x,{type:`number`,value:M.delay,onChange:e=>$(`delay`,parseInt(e.target.value)||0)})]})]}),(0,q.jsx)(ge,{value:P,onChange:F}),(0,q.jsxs)(`div`,{className:`app-field-group`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,q.jsx)(S,{children:`响应内容`}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[B&&(0,q.jsx)(`span`,{className:`max-w-[280px] truncate text-xs text-red-500`,title:B,children:B}),M.body.trim()&&(0,q.jsxs)(i,{type:`button`,variant:`outline`,size:`xs`,onClick:Se,disabled:W||!Q,title:Q?`使用 AI 修复响应内容`:`AI 未配置或未启用`,children:[W?(0,q.jsx)(E,{className:`mr-1 h-3 w-3 animate-spin`}):(0,q.jsx)(u,{className:`mr-1 h-3 w-3`}),W?`修复中…`:`AI修复`]}),(0,q.jsxs)(i,{type:`button`,variant:`ghost`,size:`xs`,onClick:xe,disabled:K||!M.body.trim(),title:`格式化响应内容`,children:[K?(0,q.jsx)(E,{className:`mr-1 h-3 w-3 animate-spin`}):(0,q.jsx)(a,{className:`mr-1 h-3 w-3`}),K?`格式化中…`:`代码格式化`]})]})]}),(0,q.jsxs)(`div`,{className:`relative group`,style:{height:`${Y}px`},children:[(0,q.jsx)(O,{value:M.body,onChange:e=>$(`body`,e),placeholder:`支持 JSON、HTML、JS、CSS 等响应内容`,height:`flex`}),(0,q.jsx)(`div`,{className:`absolute bottom-0 left-0 right-0 h-4 cursor-ns-resize flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity bg-gradient-to-t from-border/50 to-transparent`,onMouseDown:be,children:(0,q.jsx)(o,{className:`h-4 w-4 text-muted-foreground`})})]}),H&&(0,q.jsxs)(`div`,{className:`flex items-start gap-2 p-2 rounded-md bg-red-50 dark:bg-red-950/20 border border-red-200 dark:border-red-900`,children:[(0,q.jsx)(`span`,{className:`text-xs text-red-600 dark:text-red-400 font-medium`,children:`语法错误:`}),(0,q.jsx)(`span`,{className:`text-xs text-red-600 dark:text-red-400 flex-1`,children:H})]})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(s,{checked:M.enabled,onCheckedChange:e=>$(`enabled`,!!e)}),(0,q.jsx)(S,{className:`text-sm`,children:`启用此规则`})]})]}),we?null:(0,q.jsx)(ue,{}),(0,q.jsx)(fe,{className:`flex justify-end gap-2 px-5 py-3`,children:b?(0,q.jsxs)(g,{children:[(0,q.jsx)(te,{asChild:!0,children:(0,q.jsx)(`span`,{tabIndex:0,"data-testid":`mock-editor-save-wrapper`,"aria-label":Z,children:(0,q.jsxs)(ie,{size:`sm`,disabled:!0,className:`pointer-events-none`,children:[(0,q.jsx)(se,{"data-icon":`inline-start`}),`保存`]})})}),(0,q.jsx)(h,{"data-testid":`mock-editor-save-tooltip`,children:Z})]}):(0,q.jsx)(pe,{onClick:Ce,saving:I,disabled:!M.urlPattern.trim()})})]})}export{Q as MockEditorPanel};
@@ -1 +1 @@
1
- import{c as e,d as t,l as n,p as r}from"./button-BFNlGZ5p.js";import{ot as i}from"./index-Cbis1y9h.js";var a=r(t(),1),o=e();function s({path:e}){let t=e.split(`/`);return(0,o.jsx)(o.Fragment,{children:t.map((e,n)=>(0,o.jsxs)(a.Fragment,{children:[e,n<t.length-1?(0,o.jsxs)(o.Fragment,{children:[`/`,(0,o.jsx)(`wbr`,{})]}):null]},n))})}function c({path:e,children:t}){return(0,o.jsxs)(`div`,{className:`mx-auto flex max-w-[360px] flex-col items-center text-center text-muted-foreground`,children:[(0,o.jsxs)(`div`,{"data-testid":`mock-config-file-missing`,role:`status`,className:`flex flex-col items-center gap-0.5 text-xs`,children:[(0,o.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),`文件不存在`]}),(0,o.jsx)(`span`,{"data-testid":`mock-config-file-missing-path`,className:`font-mono wrap-anywhere`,children:(0,o.jsx)(s,{path:e})}),(0,o.jsx)(`span`,{children:`保存第一条规则时会创建`})]}),t?(0,o.jsx)(`div`,{className:`mt-2`,children:t}):null]})}function l({className:e,testId:t=`mocks-file-missing-note`}){return(0,o.jsxs)(`p`,{"data-testid":t,role:`status`,className:n(`flex items-start gap-1 text-xs text-muted-foreground`,e),children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0`}),(0,o.jsx)(`span`,{className:`min-w-0`,children:`文件不存在,保存第一条规则时会创建`})]})}function u({path:e,location:t}){return(0,o.jsx)(`div`,{className:`mx-auto flex max-w-[360px] flex-col items-center text-center`,children:(0,o.jsxs)(`div`,{"data-testid":`mock-config-file-invalid`,role:`alert`,className:`flex flex-col items-center gap-0.5 text-xs`,children:[(0,o.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-destructive`,children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),`文件格式错误`]}),(0,o.jsx)(`span`,{"data-testid":`mock-config-file-invalid-path`,className:`font-mono wrap-anywhere text-foreground`,children:(0,o.jsx)(s,{path:e})}),(0,o.jsx)(`span`,{"data-testid":`mock-config-file-invalid-location`,className:`font-mono wrap-anywhere text-muted-foreground`,children:t})]})})}function d({location:e,className:t,testId:r=`mocks-file-invalid-note`}){return(0,o.jsxs)(`p`,{"data-testid":r,role:`alert`,className:n(`flex items-start gap-1 text-xs text-destructive`,t),children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0`}),(0,o.jsxs)(`span`,{className:`min-w-0`,children:[`文件格式错误,修复前不会写入:`,(0,o.jsx)(`span`,{className:`font-mono`,children:e})]})]})}function f({oldPath:e,newPath:t,visible:r,onUseOldPath:a}){return(0,o.jsx)(`div`,{"data-testid":`settings-mocks-file-legacy-wrap`,"data-visible":r?`true`:`false`,"aria-hidden":!r,className:n(`-mt-[var(--ui-field-gap)] grid transition-[grid-template-rows,opacity] duration-150 ease-out motion-reduce:transition-none`,r?`grid-rows-[1fr] opacity-100`:`grid-rows-[0fr] opacity-0`),children:(0,o.jsx)(`div`,{className:`min-h-0 overflow-hidden`,inert:!r||void 0,children:(0,o.jsx)(`div`,{"data-testid":`settings-mocks-file-legacy-gap`,className:`pt-[var(--ui-field-gap)]`,children:(0,o.jsxs)(`div`,{"data-testid":`settings-mocks-file-legacy`,role:r?`status`:void 0,className:`flex items-start gap-1.5 border-l-2 border-amber-500 py-0.5 pl-2 text-xs dark:border-amber-400`,children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0 text-amber-600 dark:text-amber-400`}),(0,o.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,o.jsx)(`p`,{className:`text-foreground`,children:`相对路径的解析规则已变更,当前可能读不到原来的 Mock 文件`}),(0,o.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5`,children:[(0,o.jsxs)(`span`,{"data-testid":`settings-mocks-file-legacy-old`,className:`min-w-0 font-mono wrap-anywhere text-muted-foreground`,children:[`原来读取:`,(0,o.jsx)(s,{path:e})]}),(0,o.jsx)(`button`,{type:`button`,"data-testid":`settings-mocks-file-legacy-use`,onClick:a,className:`shrink-0 rounded-sm text-foreground underline underline-offset-2 hover:text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:`改用此路径`})]}),(0,o.jsxs)(`p`,{"data-testid":`settings-mocks-file-legacy-new`,className:`font-mono wrap-anywhere text-muted-foreground`,children:[`现在读取:`,(0,o.jsx)(s,{path:t}),`(文件不存在)`]})]})]})})})})}export{c as a,f as i,u as n,l as o,d as r,s as t};
1
+ import{c as e,d as t,l as n,p as r}from"./button-BFNlGZ5p.js";import{ot as i}from"./index-Dcm171u1.js";var a=r(t(),1),o=e();function s({path:e}){let t=e.split(`/`);return(0,o.jsx)(o.Fragment,{children:t.map((e,n)=>(0,o.jsxs)(a.Fragment,{children:[e,n<t.length-1?(0,o.jsxs)(o.Fragment,{children:[`/`,(0,o.jsx)(`wbr`,{})]}):null]},n))})}function c({path:e,children:t}){return(0,o.jsxs)(`div`,{className:`mx-auto flex max-w-[360px] flex-col items-center text-center text-muted-foreground`,children:[(0,o.jsxs)(`div`,{"data-testid":`mock-config-file-missing`,role:`status`,className:`flex flex-col items-center gap-0.5 text-xs`,children:[(0,o.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),`文件不存在`]}),(0,o.jsx)(`span`,{"data-testid":`mock-config-file-missing-path`,className:`font-mono wrap-anywhere`,children:(0,o.jsx)(s,{path:e})}),(0,o.jsx)(`span`,{children:`保存第一条规则时会创建`})]}),t?(0,o.jsx)(`div`,{className:`mt-2`,children:t}):null]})}function l({className:e,testId:t=`mocks-file-missing-note`}){return(0,o.jsxs)(`p`,{"data-testid":t,role:`status`,className:n(`flex items-start gap-1 text-xs text-muted-foreground`,e),children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0`}),(0,o.jsx)(`span`,{className:`min-w-0`,children:`文件不存在,保存第一条规则时会创建`})]})}function u({path:e,location:t}){return(0,o.jsx)(`div`,{className:`mx-auto flex max-w-[360px] flex-col items-center text-center`,children:(0,o.jsxs)(`div`,{"data-testid":`mock-config-file-invalid`,role:`alert`,className:`flex flex-col items-center gap-0.5 text-xs`,children:[(0,o.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-destructive`,children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),`文件格式错误`]}),(0,o.jsx)(`span`,{"data-testid":`mock-config-file-invalid-path`,className:`font-mono wrap-anywhere text-foreground`,children:(0,o.jsx)(s,{path:e})}),(0,o.jsx)(`span`,{"data-testid":`mock-config-file-invalid-location`,className:`font-mono wrap-anywhere text-muted-foreground`,children:t})]})})}function d({location:e,className:t,testId:r=`mocks-file-invalid-note`}){return(0,o.jsxs)(`p`,{"data-testid":r,role:`alert`,className:n(`flex items-start gap-1 text-xs text-destructive`,t),children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0`}),(0,o.jsxs)(`span`,{className:`min-w-0`,children:[`文件格式错误,修复前不会写入:`,(0,o.jsx)(`span`,{className:`font-mono`,children:e})]})]})}function f({oldPath:e,newPath:t,visible:r,onUseOldPath:a}){return(0,o.jsx)(`div`,{"data-testid":`settings-mocks-file-legacy-wrap`,"data-visible":r?`true`:`false`,"aria-hidden":!r,className:n(`-mt-[var(--ui-field-gap)] grid transition-[grid-template-rows,opacity] duration-150 ease-out motion-reduce:transition-none`,r?`grid-rows-[1fr] opacity-100`:`grid-rows-[0fr] opacity-0`),children:(0,o.jsx)(`div`,{className:`min-h-0 overflow-hidden`,inert:!r||void 0,children:(0,o.jsx)(`div`,{"data-testid":`settings-mocks-file-legacy-gap`,className:`pt-[var(--ui-field-gap)]`,children:(0,o.jsxs)(`div`,{"data-testid":`settings-mocks-file-legacy`,role:r?`status`:void 0,className:`flex items-start gap-1.5 border-l-2 border-amber-500 py-0.5 pl-2 text-xs dark:border-amber-400`,children:[(0,o.jsx)(i,{"aria-hidden":`true`,className:`mt-px size-3.5 shrink-0 text-amber-600 dark:text-amber-400`}),(0,o.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,o.jsx)(`p`,{className:`text-foreground`,children:`相对路径的解析规则已变更,当前可能读不到原来的 Mock 文件`}),(0,o.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5`,children:[(0,o.jsxs)(`span`,{"data-testid":`settings-mocks-file-legacy-old`,className:`min-w-0 font-mono wrap-anywhere text-muted-foreground`,children:[`原来读取:`,(0,o.jsx)(s,{path:e})]}),(0,o.jsx)(`button`,{type:`button`,"data-testid":`settings-mocks-file-legacy-use`,onClick:a,className:`shrink-0 rounded-sm text-foreground underline underline-offset-2 hover:text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:`改用此路径`})]}),(0,o.jsxs)(`p`,{"data-testid":`settings-mocks-file-legacy-new`,className:`font-mono wrap-anywhere text-muted-foreground`,children:[`现在读取:`,(0,o.jsx)(s,{path:t}),`(文件不存在)`]})]})]})})})})}export{c as a,f as i,u as n,l as o,d as r,s as t};
@@ -1,4 +1,4 @@
1
- import{c as e,d as t,p as n}from"./button-BFNlGZ5p.js";import{g as r}from"./index-Cbis1y9h.js";function i(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function a(e){if(Array.isArray(e))return e}function o(e,t,n){return(t=h(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function c(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
1
+ import{c as e,d as t,p as n}from"./button-BFNlGZ5p.js";import{d as r}from"./index-Dcm171u1.js";function i(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function a(e){if(Array.isArray(e))return e}function o(e,t,n){return(t=h(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function c(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?l(Object(n),!0).forEach(function(t){o(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function d(e,t){if(e==null)return{};var n,r,i=f(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function f(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function p(e,t){return a(e)||s(e,t)||g(e,t)||c()}function m(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function h(e){var t=m(e,`string`);return typeof t==`symbol`?t:t+``}function g(e,t){if(e){if(typeof e==`string`)return i(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}function _(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?v(Object(n),!0).forEach(function(t){_(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function b(){var e=[...arguments];return function(t){return e.reduceRight(function(e,t){return t(e)},t)}}function x(e){return function t(){var n=this,r=[...arguments];return r.length>=e.length?e.apply(this,r):function(){var e=[...arguments];return t.apply(n,[].concat(r,e))}}}function S(e){return{}.toString.call(e).includes(`Object`)}function C(e){return!Object.keys(e).length}function w(e){return typeof e==`function`}function T(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function E(e,t){return S(t)||j(`changeType`),Object.keys(t).some(function(t){return!T(e,t)})&&j(`changeField`),t}function D(e){w(e)||j(`selectorType`)}function O(e){w(e)||S(e)||j(`handlerType`),S(e)&&Object.values(e).some(function(e){return!w(e)})&&j(`handlersType`)}function k(e){e||j(`initialIsRequired`),S(e)||j(`initialType`),C(e)&&j(`initialContent`)}function A(e,t){throw Error(e[t]||e.default)}var j=x(A)({initialIsRequired:`initial state is required`,initialType:`initial state should be an object`,initialContent:`initial state shouldn't be an empty object`,handlerType:`handler should be an object or a function`,handlersType:`all handlers should be a functions`,selectorType:`selector should be a function`,changeType:`provided value of changes should be an object`,changeField:`it seams you want to change a field in the state which is not specified in the "initial" state`,default:"an unknown error accured in `state-local` package"}),M={changes:E,selector:D,handler:O,initial:k};function N(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};M.initial(e),M.handler(t);var n={current:e},r=x(ee)(n,t),i=x(F)(n),a=x(M.changes)(e),o=x(P)(n);function s(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(e){return e};return M.selector(e),e(n.current)}function c(e){b(r,i,a,o)(e)}return[s,c]}function P(e,t){return w(t)?t(e.current):t}function F(e,t){return e.current=y(y({},e.current),t),t}function ee(e,t,n){return w(t)?t(e.current):Object.keys(n).forEach(function(n){return t[n]?.call(t,e.current[n])}),n}var te={create:N},ne={paths:{vs:`https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs`}};function re(e){return function t(){var n=this,r=[...arguments];return r.length>=e.length?e.apply(this,r):function(){var e=[...arguments];return t.apply(n,[].concat(r,e))}}}function ie(e){return{}.toString.call(e).includes(`Object`)}function ae(e){return e||le(`configIsRequired`),ie(e)||le(`configType`),e.urls?(oe(),{paths:{vs:e.urls.monacoBase}}):e}function oe(){console.warn(ce.deprecation)}function se(e,t){throw Error(e[t]||e.default)}var ce={configIsRequired:`the configuration object is required`,configType:`the configuration object should be an object`,default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:`Deprecation warning!
3
3
  You are using deprecated way of configuration.
4
4
 
@@ -8,4 +8,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
8
8
  monaco.config({ paths: { vs: '...' } })
9
9
 
10
10
  For more please check the link https://github.com/suren-atoyan/monaco-loader#config
11
- `},le=re(se)(ce),ue={config:ae},de=function(){var e=[...arguments];return function(t){return e.reduceRight(function(e,t){return t(e)},t)}};function I(e,t){return Object.keys(t).forEach(function(n){t[n]instanceof Object&&e[n]&&Object.assign(t[n],I(e[n],t[n]))}),u(u({},e),t)}var fe={type:`cancelation`,msg:`operation is manually canceled`};function L(e){var t=!1,n=new Promise(function(n,r){e.then(function(e){return t?r(fe):n(e)}),e.catch(r)});return n.cancel=function(){return t=!0},n}var pe=[`monaco`],R=p(te.create({config:ne,isInitialized:!1,resolve:null,reject:null,monaco:null}),2),z=R[0],B=R[1];function me(e){var t=ue.config(e),n=t.monaco,r=d(t,pe);B(function(e){return{config:I(e.config,r),monaco:n}})}function he(){var e=z(function(e){return{monaco:e.monaco,isInitialized:e.isInitialized,resolve:e.resolve}});if(!e.isInitialized){if(B({isInitialized:!0}),e.monaco)return e.resolve(e.monaco),L(H);if(window.monaco&&window.monaco.editor)return V(window.monaco),e.resolve(window.monaco),L(H);de(ge,ve)(ye)}return L(H)}function ge(e){return document.body.appendChild(e)}function _e(e){var t=document.createElement(`script`);return e&&(t.src=e),t}function ve(e){var t=z(function(e){return{config:e.config,reject:e.reject}}),n=_e(`${t.config.paths.vs}/loader.js`);return n.onload=function(){return e()},n.onerror=t.reject,n}function ye(){var e=z(function(e){return{config:e.config,resolve:e.resolve,reject:e.reject}}),t=window.require;t.config(e.config),t([`vs/editor/editor.main`],function(t){var n=t.m||t;V(n),e.resolve(n)},function(t){e.reject(t)})}function V(e){z().monaco||B({monaco:e})}function be(){return z(function(e){return e.monaco})}var H=new Promise(function(e,t){return B({resolve:e,reject:t})}),U={config:me,init:he,__getMonacoInstance:be},W=n(t(),1),G={wrapper:{display:`flex`,position:`relative`,textAlign:`initial`},fullWidth:{width:`100%`},hide:{display:`none`}},xe={container:{display:`flex`,height:`100%`,width:`100%`,justifyContent:`center`,alignItems:`center`}};function Se({children:e}){return W.createElement(`div`,{style:xe.container},e)}var Ce=Se;function we({width:e,height:t,isEditorReady:n,loading:r,_ref:i,className:a,wrapperProps:o}){return W.createElement(`section`,{style:{...G.wrapper,width:e,height:t},...o},!n&&W.createElement(Ce,null,r),W.createElement(`div`,{ref:i,style:{...G.fullWidth,...!n&&G.hide},className:a}))}var K=(0,W.memo)(we);function Te(e){(0,W.useEffect)(e,[])}var Ee=Te;function De(e,t,n=!0){let r=(0,W.useRef)(!0);(0,W.useEffect)(r.current||!n?()=>{r.current=!1}:e,t)}var q=De;function J(){}function Y(e,t,n,r){return Oe(e,r)||ke(e,t,n,r)}function Oe(e,t){return e.editor.getModel(Ae(e,t))}function ke(e,t,n,r){return e.editor.createModel(t,n,r?Ae(e,r):void 0)}function Ae(e,t){return e.Uri.parse(t)}function je({original:e,modified:t,language:n,originalLanguage:r,modifiedLanguage:i,originalModelPath:a,modifiedModelPath:o,keepCurrentOriginalModel:s=!1,keepCurrentModifiedModel:c=!1,theme:l=`light`,loading:u=`Loading...`,options:d={},height:f=`100%`,width:p=`100%`,className:m,wrapperProps:h={},beforeMount:g=J,onMount:_=J}){let[v,y]=(0,W.useState)(!1),[b,x]=(0,W.useState)(!0),S=(0,W.useRef)(null),C=(0,W.useRef)(null),w=(0,W.useRef)(null),T=(0,W.useRef)(_),E=(0,W.useRef)(g),D=(0,W.useRef)(!1);Ee(()=>{let e=U.init();return e.then(e=>(C.current=e)&&x(!1)).catch(e=>e?.type!==`cancelation`&&console.error(`Monaco initialization: error:`,e)),()=>S.current?A():e.cancel()}),q(()=>{if(S.current&&C.current){let t=S.current.getOriginalEditor(),i=Y(C.current,e||``,r||n||`text`,a||``);i!==t.getModel()&&t.setModel(i)}},[a],v),q(()=>{if(S.current&&C.current){let e=S.current.getModifiedEditor(),r=Y(C.current,t||``,i||n||`text`,o||``);r!==e.getModel()&&e.setModel(r)}},[o],v),q(()=>{let e=S.current.getModifiedEditor();e.getOption(C.current.editor.EditorOption.readOnly)?e.setValue(t||``):t!==e.getValue()&&(e.executeEdits(``,[{range:e.getModel().getFullModelRange(),text:t||``,forceMoveMarkers:!0}]),e.pushUndoStop())},[t],v),q(()=>{S.current?.getModel()?.original.setValue(e||``)},[e],v),q(()=>{let{original:e,modified:t}=S.current.getModel();C.current.editor.setModelLanguage(e,r||n||`text`),C.current.editor.setModelLanguage(t,i||n||`text`)},[n,r,i],v),q(()=>{C.current?.editor.setTheme(l)},[l],v),q(()=>{S.current?.updateOptions(d)},[d],v);let O=(0,W.useCallback)(()=>{if(!C.current)return;E.current(C.current);let s=Y(C.current,e||``,r||n||`text`,a||``),c=Y(C.current,t||``,i||n||`text`,o||``);S.current?.setModel({original:s,modified:c})},[n,t,i,e,r,a,o]),k=(0,W.useCallback)(()=>{!D.current&&w.current&&(S.current=C.current.editor.createDiffEditor(w.current,{automaticLayout:!0,...d}),O(),C.current?.editor.setTheme(l),y(!0),D.current=!0)},[d,l,O]);(0,W.useEffect)(()=>{v&&T.current(S.current,C.current)},[v]),(0,W.useEffect)(()=>{!b&&!v&&k()},[b,v,k]);function A(){let e=S.current?.getModel();s||e?.original?.dispose(),c||e?.modified?.dispose(),S.current?.dispose()}return W.createElement(K,{width:p,height:f,isEditorReady:v,loading:u,_ref:w,className:m,wrapperProps:h})}var Me=(0,W.memo)(je);function Ne(e){let t=(0,W.useRef)();return(0,W.useEffect)(()=>{t.current=e},[e]),t.current}var Pe=Ne,X=new Map;function Fe({defaultValue:e,defaultLanguage:t,defaultPath:n,value:r,language:i,path:a,theme:o=`light`,line:s,loading:c=`Loading...`,options:l={},overrideServices:u={},saveViewState:d=!0,keepCurrentModel:f=!1,width:p=`100%`,height:m=`100%`,className:h,wrapperProps:g={},beforeMount:_=J,onMount:v=J,onChange:y,onValidate:b=J}){let[x,S]=(0,W.useState)(!1),[C,w]=(0,W.useState)(!0),T=(0,W.useRef)(null),E=(0,W.useRef)(null),D=(0,W.useRef)(null),O=(0,W.useRef)(v),k=(0,W.useRef)(_),A=(0,W.useRef)(),j=(0,W.useRef)(r),M=Pe(a),N=(0,W.useRef)(!1),P=(0,W.useRef)(!1);Ee(()=>{let e=U.init();return e.then(e=>(T.current=e)&&w(!1)).catch(e=>e?.type!==`cancelation`&&console.error(`Monaco initialization: error:`,e)),()=>E.current?ee():e.cancel()}),q(()=>{let o=Y(T.current,e||r||``,t||i||``,a||n||``);o!==E.current?.getModel()&&(d&&X.set(M,E.current?.saveViewState()),E.current?.setModel(o),d&&E.current?.restoreViewState(X.get(a)))},[a],x),q(()=>{E.current?.updateOptions(l)},[l],x),q(()=>{!E.current||r===void 0||(E.current.getOption(T.current.editor.EditorOption.readOnly)?E.current.setValue(r):r!==E.current.getValue()&&(P.current=!0,E.current.executeEdits(``,[{range:E.current.getModel().getFullModelRange(),text:r,forceMoveMarkers:!0}]),E.current.pushUndoStop(),P.current=!1))},[r],x),q(()=>{let e=E.current?.getModel();e&&i&&T.current?.editor.setModelLanguage(e,i)},[i],x),q(()=>{s!==void 0&&E.current?.revealLine(s)},[s],x),q(()=>{T.current?.editor.setTheme(o)},[o],x);let F=(0,W.useCallback)(()=>{if(!(!D.current||!T.current)&&!N.current){k.current(T.current);let c=a||n,f=Y(T.current,r||e||``,t||i||``,c||``);E.current=T.current?.editor.create(D.current,{model:f,automaticLayout:!0,...l},u),d&&E.current.restoreViewState(X.get(c)),T.current.editor.setTheme(o),s!==void 0&&E.current.revealLine(s),S(!0),N.current=!0}},[e,t,n,r,i,a,l,u,d,o,s]);(0,W.useEffect)(()=>{x&&O.current(E.current,T.current)},[x]),(0,W.useEffect)(()=>{!C&&!x&&F()},[C,x,F]),j.current=r,(0,W.useEffect)(()=>{x&&y&&(A.current?.dispose(),A.current=E.current?.onDidChangeModelContent(e=>{P.current||y(E.current.getValue(),e)}))},[x,y]),(0,W.useEffect)(()=>{if(x){let e=T.current.editor.onDidChangeMarkers(e=>{let t=E.current.getModel()?.uri;if(t&&e.find(e=>e.path===t.path)){let e=T.current.editor.getModelMarkers({resource:t});b?.(e)}});return()=>{e?.dispose()}}return()=>{}},[x,b]);function ee(){A.current?.dispose(),f?d&&X.set(a,E.current.saveViewState()):E.current.getModel()?.dispose(),E.current.dispose()}return W.createElement(K,{width:p,height:m,isEditorReady:x,loading:c,_ref:D,className:h,wrapperProps:g})}var Ie=(0,W.memo)(Fe),Le=`meddle-light`,Re=`meddle-dark`;function ze(e){return e===`dark`?Re:Le}function Be(e){let t=e.trim();if(!t||typeof document>`u`)return null;let n=document.createElement(`canvas`);n.width=1,n.height=1;let r=n.getContext(`2d`,{willReadFrequently:!0});if(!r)return null;r.clearRect(0,0,1,1),r.fillStyle=t,r.fillRect(0,0,1,1);let[i,a,o,s]=r.getImageData(0,0,1,1).data;if(s===0&&!t.includes(`transparent`))return null;let c=e=>e.toString(16).padStart(2,`0`),l=`#${c(i)}${c(a)}${c(o)}`;return s===255?l:`${l}${c(s)}`}function Z(e){return typeof document>`u`?null:Be(getComputedStyle(document.documentElement).getPropertyValue(e))}function Ve(){let e=[[`editor.background`,Z(`--card`)],[`editor.foreground`,Z(`--card-foreground`)],[`editorCursor.foreground`,Z(`--primary`)],[`editor.selectionBackground`,Z(`--accent`)],[`editor.inactiveSelectionBackground`,Z(`--muted`)],[`editor.lineHighlightBackground`,Z(`--muted`)],[`editorLineNumber.foreground`,Z(`--muted-foreground`)],[`editorLineNumber.activeForeground`,Z(`--foreground`)],[`editorGutter.background`,Z(`--card`)],[`editorWidget.background`,Z(`--popover`)],[`editorWidget.border`,Z(`--border`)],[`editorIndentGuide.background1`,Z(`--border`)],[`focusBorder`,Z(`--ring`)],[`scrollbarSlider.background`,Z(`--border`)],[`scrollbarSlider.hoverBackground`,Z(`--muted-foreground`)]],t={};for(let[n,r]of e)r&&(t[n]=r);return t}function He(e,t){let n=ze(t);return e.editor.defineTheme(n,{base:t===`dark`?`vs-dark`:`vs`,inherit:!0,rules:[],colors:Ve()}),e.editor.setTheme(n),n}var Q=e();function $(){let{resolvedTheme:e,accentColor:t}=r(),n=(0,W.useRef)(null),i=ze(e),a=(0,W.useCallback)(t=>{n.current=t,He(t,e)},[t,e]);return(0,W.useEffect)(()=>{let t=!1;return queueMicrotask(()=>{t||!n.current||He(n.current,e)}),()=>{t=!0}},[t,e]),{monacoRef:n,themeId:i,beforeMount:a}}function Ue({value:e,onChange:t,placeholder:n,className:r,minHeight:i=`240px`,height:a,language:o=`json`,readOnly:s=!1}){let c=(0,W.useRef)(null),{monacoRef:l,themeId:u,beforeMount:d}=$(),f=(0,W.useMemo)(()=>{if(!e.trim())return o;let t=e.trim();return t.startsWith(`{`)||t.startsWith(`[`)?`json`:t.startsWith(`<!DOCTYPE`)||t.startsWith(`<html`)||t.match(/^<\w+/)?`html`:t.match(/^[.#@]?[\w-]+\s*\{/)||t.includes(`/*`)&&t.includes(`*/`)?`css`:t.startsWith(`function`)||t.startsWith(`const `)||t.startsWith(`let `)||t.startsWith(`var `)||t.startsWith(`import `)||t.startsWith(`export `)||t.includes(`=>`)?`javascript`:o},[e,o]),p=(e,t)=>{c.current=e,l.current=t,t.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!0,schemas:[],enableSchemaRequest:!1}),e.updateOptions({fontSize:13,lineHeight:20,tabSize:2,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:`on`,wrappingStrategy:`advanced`,automaticLayout:!0,folding:!0,lineNumbers:`on`,renderLineHighlight:`all`,scrollbar:{vertical:`auto`,horizontal:`auto`,useShadows:!1,verticalScrollbarSize:8,horizontalScrollbarSize:8},suggest:{showKeywords:!0,showSnippets:!0},quickSuggestions:{other:!0,comments:!1,strings:!0}})},m=e=>{t(e||``)},h=a||i;return(0,Q.jsxs)(`div`,{className:`rounded-md border border-input overflow-hidden ${r||``}`,style:a===`flex`?{height:`100%`,display:`flex`,flexDirection:`column`}:void 0,children:[(0,Q.jsx)(Ie,{height:a===`flex`?`100%`:h,language:f,value:e,theme:u,onChange:m,beforeMount:d,onMount:p,options:{readOnly:s},loading:(0,Q.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-sm text-muted-foreground`,children:[(0,Q.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,Q.jsx)(`span`,{children:`加载编辑器中...`})]})}),!e&&n&&(0,Q.jsx)(`div`,{className:`absolute top-2 left-14 text-sm text-muted-foreground pointer-events-none select-none`,children:n})]})}function We({original:e,modified:t,className:n,minHeight:r=`320px`,height:i,language:a=`javascript`,readOnly:o=!0}){let{monacoRef:s,themeId:c,beforeMount:l}=$(),u=(e,t)=>{s.current=t},d=i||r;return(0,Q.jsx)(`div`,{className:`rounded-md border border-input overflow-hidden ${n||``}`,style:i===`flex`?{height:`100%`,display:`flex`,flexDirection:`column`}:void 0,children:(0,Q.jsx)(Me,{height:i===`flex`?`100%`:d,language:a,original:e,modified:t,theme:c,beforeMount:l,onMount:u,options:{readOnly:o,renderSideBySide:!0,originalEditable:!1,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:`on`,automaticLayout:!0,folding:!0,renderOverviewRuler:!1,diffWordWrap:`on`,scrollbar:{vertical:`auto`,horizontal:`auto`,useShadows:!1,verticalScrollbarSize:8,horizontalScrollbarSize:8}},loading:(0,Q.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-sm text-muted-foreground`,children:[(0,Q.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,Q.jsx)(`span`,{children:`加载 Diff 编辑器中...`})]})})})}export{Ue as n,We as t};
11
+ `},le=re(se)(ce),ue={config:ae},de=function(){var e=[...arguments];return function(t){return e.reduceRight(function(e,t){return t(e)},t)}};function I(e,t){return Object.keys(t).forEach(function(n){t[n]instanceof Object&&e[n]&&Object.assign(t[n],I(e[n],t[n]))}),u(u({},e),t)}var fe={type:`cancelation`,msg:`operation is manually canceled`};function L(e){var t=!1,n=new Promise(function(n,r){e.then(function(e){return t?r(fe):n(e)}),e.catch(r)});return n.cancel=function(){return t=!0},n}var pe=[`monaco`],R=p(te.create({config:ne,isInitialized:!1,resolve:null,reject:null,monaco:null}),2),z=R[0],B=R[1];function me(e){var t=ue.config(e),n=t.monaco,r=d(t,pe);B(function(e){return{config:I(e.config,r),monaco:n}})}function he(){var e=z(function(e){return{monaco:e.monaco,isInitialized:e.isInitialized,resolve:e.resolve}});if(!e.isInitialized){if(B({isInitialized:!0}),e.monaco)return e.resolve(e.monaco),L(H);if(window.monaco&&window.monaco.editor)return V(window.monaco),e.resolve(window.monaco),L(H);de(ge,ve)(ye)}return L(H)}function ge(e){return document.body.appendChild(e)}function _e(e){var t=document.createElement(`script`);return e&&(t.src=e),t}function ve(e){var t=z(function(e){return{config:e.config,reject:e.reject}}),n=_e(`${t.config.paths.vs}/loader.js`);return n.onload=function(){return e()},n.onerror=t.reject,n}function ye(){var e=z(function(e){return{config:e.config,resolve:e.resolve,reject:e.reject}}),t=window.require;t.config(e.config),t([`vs/editor/editor.main`],function(t){var n=t.m||t;V(n),e.resolve(n)},function(t){e.reject(t)})}function V(e){z().monaco||B({monaco:e})}function be(){return z(function(e){return e.monaco})}var H=new Promise(function(e,t){return B({resolve:e,reject:t})}),U={config:me,init:he,__getMonacoInstance:be},W=n(t(),1),G={wrapper:{display:`flex`,position:`relative`,textAlign:`initial`},fullWidth:{width:`100%`},hide:{display:`none`}},xe={container:{display:`flex`,height:`100%`,width:`100%`,justifyContent:`center`,alignItems:`center`}};function Se({children:e}){return W.createElement(`div`,{style:xe.container},e)}var Ce=Se;function we({width:e,height:t,isEditorReady:n,loading:r,_ref:i,className:a,wrapperProps:o}){return W.createElement(`section`,{style:{...G.wrapper,width:e,height:t},...o},!n&&W.createElement(Ce,null,r),W.createElement(`div`,{ref:i,style:{...G.fullWidth,...!n&&G.hide},className:a}))}var K=(0,W.memo)(we);function Te(e){(0,W.useEffect)(e,[])}var Ee=Te;function De(e,t,n=!0){let r=(0,W.useRef)(!0);(0,W.useEffect)(r.current||!n?()=>{r.current=!1}:e,t)}var q=De;function J(){}function Y(e,t,n,r){return Oe(e,r)||ke(e,t,n,r)}function Oe(e,t){return e.editor.getModel(Ae(e,t))}function ke(e,t,n,r){return e.editor.createModel(t,n,r?Ae(e,r):void 0)}function Ae(e,t){return e.Uri.parse(t)}function je({original:e,modified:t,language:n,originalLanguage:r,modifiedLanguage:i,originalModelPath:a,modifiedModelPath:o,keepCurrentOriginalModel:s=!1,keepCurrentModifiedModel:c=!1,theme:l=`light`,loading:u=`Loading...`,options:d={},height:f=`100%`,width:p=`100%`,className:m,wrapperProps:h={},beforeMount:g=J,onMount:_=J}){let[v,y]=(0,W.useState)(!1),[b,x]=(0,W.useState)(!0),S=(0,W.useRef)(null),C=(0,W.useRef)(null),w=(0,W.useRef)(null),T=(0,W.useRef)(_),E=(0,W.useRef)(g),D=(0,W.useRef)(!1);Ee(()=>{let e=U.init();return e.then(e=>(C.current=e)&&x(!1)).catch(e=>e?.type!==`cancelation`&&console.error(`Monaco initialization: error:`,e)),()=>S.current?A():e.cancel()}),q(()=>{if(S.current&&C.current){let t=S.current.getOriginalEditor(),i=Y(C.current,e||``,r||n||`text`,a||``);i!==t.getModel()&&t.setModel(i)}},[a],v),q(()=>{if(S.current&&C.current){let e=S.current.getModifiedEditor(),r=Y(C.current,t||``,i||n||`text`,o||``);r!==e.getModel()&&e.setModel(r)}},[o],v),q(()=>{let e=S.current.getModifiedEditor();e.getOption(C.current.editor.EditorOption.readOnly)?e.setValue(t||``):t!==e.getValue()&&(e.executeEdits(``,[{range:e.getModel().getFullModelRange(),text:t||``,forceMoveMarkers:!0}]),e.pushUndoStop())},[t],v),q(()=>{S.current?.getModel()?.original.setValue(e||``)},[e],v),q(()=>{let{original:e,modified:t}=S.current.getModel();C.current.editor.setModelLanguage(e,r||n||`text`),C.current.editor.setModelLanguage(t,i||n||`text`)},[n,r,i],v),q(()=>{C.current?.editor.setTheme(l)},[l],v),q(()=>{S.current?.updateOptions(d)},[d],v);let O=(0,W.useCallback)(()=>{if(!C.current)return;E.current(C.current);let s=Y(C.current,e||``,r||n||`text`,a||``),c=Y(C.current,t||``,i||n||`text`,o||``);S.current?.setModel({original:s,modified:c})},[n,t,i,e,r,a,o]),k=(0,W.useCallback)(()=>{!D.current&&w.current&&(S.current=C.current.editor.createDiffEditor(w.current,{automaticLayout:!0,...d}),O(),C.current?.editor.setTheme(l),y(!0),D.current=!0)},[d,l,O]);(0,W.useEffect)(()=>{v&&T.current(S.current,C.current)},[v]),(0,W.useEffect)(()=>{!b&&!v&&k()},[b,v,k]);function A(){let e=S.current?.getModel();s||e?.original?.dispose(),c||e?.modified?.dispose(),S.current?.dispose()}return W.createElement(K,{width:p,height:f,isEditorReady:v,loading:u,_ref:w,className:m,wrapperProps:h})}var Me=(0,W.memo)(je);function Ne(e){let t=(0,W.useRef)();return(0,W.useEffect)(()=>{t.current=e},[e]),t.current}var Pe=Ne,X=new Map;function Fe({defaultValue:e,defaultLanguage:t,defaultPath:n,value:r,language:i,path:a,theme:o=`light`,line:s,loading:c=`Loading...`,options:l={},overrideServices:u={},saveViewState:d=!0,keepCurrentModel:f=!1,width:p=`100%`,height:m=`100%`,className:h,wrapperProps:g={},beforeMount:_=J,onMount:v=J,onChange:y,onValidate:b=J}){let[x,S]=(0,W.useState)(!1),[C,w]=(0,W.useState)(!0),T=(0,W.useRef)(null),E=(0,W.useRef)(null),D=(0,W.useRef)(null),O=(0,W.useRef)(v),k=(0,W.useRef)(_),A=(0,W.useRef)(),j=(0,W.useRef)(r),M=Pe(a),N=(0,W.useRef)(!1),P=(0,W.useRef)(!1);Ee(()=>{let e=U.init();return e.then(e=>(T.current=e)&&w(!1)).catch(e=>e?.type!==`cancelation`&&console.error(`Monaco initialization: error:`,e)),()=>E.current?ee():e.cancel()}),q(()=>{let o=Y(T.current,e||r||``,t||i||``,a||n||``);o!==E.current?.getModel()&&(d&&X.set(M,E.current?.saveViewState()),E.current?.setModel(o),d&&E.current?.restoreViewState(X.get(a)))},[a],x),q(()=>{E.current?.updateOptions(l)},[l],x),q(()=>{!E.current||r===void 0||(E.current.getOption(T.current.editor.EditorOption.readOnly)?E.current.setValue(r):r!==E.current.getValue()&&(P.current=!0,E.current.executeEdits(``,[{range:E.current.getModel().getFullModelRange(),text:r,forceMoveMarkers:!0}]),E.current.pushUndoStop(),P.current=!1))},[r],x),q(()=>{let e=E.current?.getModel();e&&i&&T.current?.editor.setModelLanguage(e,i)},[i],x),q(()=>{s!==void 0&&E.current?.revealLine(s)},[s],x),q(()=>{T.current?.editor.setTheme(o)},[o],x);let F=(0,W.useCallback)(()=>{if(!(!D.current||!T.current)&&!N.current){k.current(T.current);let c=a||n,f=Y(T.current,r||e||``,t||i||``,c||``);E.current=T.current?.editor.create(D.current,{model:f,automaticLayout:!0,...l},u),d&&E.current.restoreViewState(X.get(c)),T.current.editor.setTheme(o),s!==void 0&&E.current.revealLine(s),S(!0),N.current=!0}},[e,t,n,r,i,a,l,u,d,o,s]);(0,W.useEffect)(()=>{x&&O.current(E.current,T.current)},[x]),(0,W.useEffect)(()=>{!C&&!x&&F()},[C,x,F]),j.current=r,(0,W.useEffect)(()=>{x&&y&&(A.current?.dispose(),A.current=E.current?.onDidChangeModelContent(e=>{P.current||y(E.current.getValue(),e)}))},[x,y]),(0,W.useEffect)(()=>{if(x){let e=T.current.editor.onDidChangeMarkers(e=>{let t=E.current.getModel()?.uri;if(t&&e.find(e=>e.path===t.path)){let e=T.current.editor.getModelMarkers({resource:t});b?.(e)}});return()=>{e?.dispose()}}return()=>{}},[x,b]);function ee(){A.current?.dispose(),f?d&&X.set(a,E.current.saveViewState()):E.current.getModel()?.dispose(),E.current.dispose()}return W.createElement(K,{width:p,height:m,isEditorReady:x,loading:c,_ref:D,className:h,wrapperProps:g})}var Ie=(0,W.memo)(Fe),Le=`meddle-light`,Re=`meddle-dark`;function ze(e){return e===`dark`?Re:Le}function Be(e){let t=e.trim();if(!t||typeof document>`u`)return null;let n=document.createElement(`canvas`);n.width=1,n.height=1;let r=n.getContext(`2d`,{willReadFrequently:!0});if(!r)return null;r.clearRect(0,0,1,1),r.fillStyle=t,r.fillRect(0,0,1,1);let[i,a,o,s]=r.getImageData(0,0,1,1).data;if(s===0&&!t.includes(`transparent`))return null;let c=e=>e.toString(16).padStart(2,`0`),l=`#${c(i)}${c(a)}${c(o)}`;return s===255?l:`${l}${c(s)}`}function Z(e){return typeof document>`u`?null:Be(getComputedStyle(document.documentElement).getPropertyValue(e))}function Ve(){let e=[[`editor.background`,Z(`--card`)],[`editor.foreground`,Z(`--card-foreground`)],[`editorCursor.foreground`,Z(`--primary`)],[`editor.selectionBackground`,Z(`--accent`)],[`editor.inactiveSelectionBackground`,Z(`--muted`)],[`editor.lineHighlightBackground`,Z(`--muted`)],[`editorLineNumber.foreground`,Z(`--muted-foreground`)],[`editorLineNumber.activeForeground`,Z(`--foreground`)],[`editorGutter.background`,Z(`--card`)],[`editorWidget.background`,Z(`--popover`)],[`editorWidget.border`,Z(`--border`)],[`editorIndentGuide.background1`,Z(`--border`)],[`focusBorder`,Z(`--ring`)],[`scrollbarSlider.background`,Z(`--border`)],[`scrollbarSlider.hoverBackground`,Z(`--muted-foreground`)]],t={};for(let[n,r]of e)r&&(t[n]=r);return t}function He(e,t){let n=ze(t);return e.editor.defineTheme(n,{base:t===`dark`?`vs-dark`:`vs`,inherit:!0,rules:[],colors:Ve()}),e.editor.setTheme(n),n}var Q=e();function $(){let{resolvedTheme:e,accentColor:t}=r(),n=(0,W.useRef)(null),i=ze(e),a=(0,W.useCallback)(t=>{n.current=t,He(t,e)},[t,e]);return(0,W.useEffect)(()=>{let t=!1;return queueMicrotask(()=>{t||!n.current||He(n.current,e)}),()=>{t=!0}},[t,e]),{monacoRef:n,themeId:i,beforeMount:a}}function Ue({value:e,onChange:t,placeholder:n,className:r,minHeight:i=`240px`,height:a,language:o=`json`,readOnly:s=!1}){let c=(0,W.useRef)(null),{monacoRef:l,themeId:u,beforeMount:d}=$(),f=(0,W.useMemo)(()=>{if(!e.trim())return o;let t=e.trim();return t.startsWith(`{`)||t.startsWith(`[`)?`json`:t.startsWith(`<!DOCTYPE`)||t.startsWith(`<html`)||t.match(/^<\w+/)?`html`:t.match(/^[.#@]?[\w-]+\s*\{/)||t.includes(`/*`)&&t.includes(`*/`)?`css`:t.startsWith(`function`)||t.startsWith(`const `)||t.startsWith(`let `)||t.startsWith(`var `)||t.startsWith(`import `)||t.startsWith(`export `)||t.includes(`=>`)?`javascript`:o},[e,o]),p=(e,t)=>{c.current=e,l.current=t,t.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!0,schemas:[],enableSchemaRequest:!1}),e.updateOptions({fontSize:13,lineHeight:20,tabSize:2,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:`on`,wrappingStrategy:`advanced`,automaticLayout:!0,folding:!0,lineNumbers:`on`,renderLineHighlight:`all`,scrollbar:{vertical:`auto`,horizontal:`auto`,useShadows:!1,verticalScrollbarSize:8,horizontalScrollbarSize:8},suggest:{showKeywords:!0,showSnippets:!0},quickSuggestions:{other:!0,comments:!1,strings:!0}})},m=e=>{t(e||``)},h=a||i;return(0,Q.jsxs)(`div`,{className:`rounded-md border border-input overflow-hidden ${r||``}`,style:a===`flex`?{height:`100%`,display:`flex`,flexDirection:`column`}:void 0,children:[(0,Q.jsx)(Ie,{height:a===`flex`?`100%`:h,language:f,value:e,theme:u,onChange:m,beforeMount:d,onMount:p,options:{readOnly:s},loading:(0,Q.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-sm text-muted-foreground`,children:[(0,Q.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,Q.jsx)(`span`,{children:`加载编辑器中…`})]})}),!e&&n&&(0,Q.jsx)(`div`,{className:`absolute top-2 left-14 text-sm text-muted-foreground pointer-events-none select-none`,children:n})]})}function We({original:e,modified:t,className:n,minHeight:r=`320px`,height:i,language:a=`javascript`,readOnly:o=!0}){let{monacoRef:s,themeId:c,beforeMount:l}=$(),u=(e,t)=>{s.current=t},d=i||r;return(0,Q.jsx)(`div`,{className:`rounded-md border border-input overflow-hidden ${n||``}`,style:i===`flex`?{height:`100%`,display:`flex`,flexDirection:`column`}:void 0,children:(0,Q.jsx)(Me,{height:i===`flex`?`100%`:d,language:a,original:e,modified:t,theme:c,beforeMount:l,onMount:u,options:{readOnly:o,renderSideBySide:!0,originalEditable:!1,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:`on`,automaticLayout:!0,folding:!0,renderOverviewRuler:!1,diffWordWrap:`on`,scrollbar:{vertical:`auto`,horizontal:`auto`,useShadows:!1,verticalScrollbarSize:8,horizontalScrollbarSize:8}},loading:(0,Q.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-sm text-muted-foreground`,children:[(0,Q.jsx)(`div`,{className:`w-6 h-6 border-2 border-primary/30 border-t-primary rounded-full animate-spin`}),(0,Q.jsx)(`span`,{children:`加载 Diff 编辑器中…`})]})})})}export{Ue as n,We as t};
@@ -0,0 +1 @@
1
+ import{c as e,l as t}from"./button-BFNlGZ5p.js";import{_ as n,mt as r}from"./index-Dcm171u1.js";var i=e();function a({className:e,...n}){return(0,i.jsx)(`div`,{"data-slot":`pane-bar`,className:t(`app-pane-bar relative z-10 flex min-h-[50px] shrink-0 items-center justify-between gap-2 border-b bg-card`,e),...n})}function o({className:e,...n}){return(0,i.jsx)(`h2`,{"data-slot":`pane-title`,className:t(`m-0 min-w-0 truncate text-xs font-medium text-muted-foreground`,e),...n})}function s({title:e,actions:n,scrolled:r=!1,className:s,...c}){return(0,i.jsxs)(a,{"data-slot":`editor-title-bar`,"data-scrolled":r?`true`:`false`,className:t(`flex-wrap gap-x-3 gap-y-2 transition-[box-shadow,border-color] duration-150 ease-out motion-reduce:transition-none`,`data-[scrolled=true]:shadow-[0_1px_3px_rgb(0_0_0/0.06)] dark:data-[scrolled=true]:border-black dark:data-[scrolled=true]:shadow-none`,s),...c,children:[(0,i.jsx)(o,{children:e}),(0,i.jsx)(`div`,{className:`ml-auto flex min-w-0 max-w-full flex-wrap items-center justify-end gap-2`,children:n})]})}function c({saving:e=!1,label:t=`保存`,savingLabel:a=`保存中…`,disabled:o,...s}){return(0,i.jsxs)(n,{size:`sm`,...s,disabled:o||e,"aria-busy":e||void 0,"data-slot":`editor-save`,children:[(0,i.jsx)(r,{"data-icon":`inline-start`}),(0,i.jsxs)(`span`,{"data-slot":`editor-save-label`,className:`inline-grid`,children:[(0,i.jsx)(`span`,{className:`[grid-area:1/1]`,children:e?a:t}),(0,i.jsx)(`span`,{"data-slot":`editor-save-sizer`,"aria-hidden":`true`,className:`invisible [grid-area:1/1]`,children:e?t:a})]})]})}function l({title:e,hint:n,className:r,...a}){return(0,i.jsxs)(`div`,{"data-slot":`editor-empty-state`,className:t(`flex h-full min-h-[240px] flex-col items-center justify-center gap-2 p-6 text-center text-sm text-muted-foreground`,r),...a,children:[(0,i.jsx)(`p`,{children:e}),n?(0,i.jsx)(`p`,{className:`text-xs`,children:n}):null]})}export{o as a,a as i,c as n,s as r,l as t};
@@ -1 +1 @@
1
- import{c as e,d as t,l as n,p as r}from"./button-BFNlGZ5p.js";import{z as i}from"./index-Cbis1y9h.js";var a=r(t(),1),o=`(min-width: 768px)`;function s({load:e,save:t,clamp:n,widthFromPointer:r}){let s=(0,a.useRef)(null),c=(0,a.useRef)(!1),[l,u]=(0,a.useState)(e),[d,f]=(0,a.useState)(!1),p=i(o);return c.current=d,(0,a.useEffect)(()=>{let e=s.current;if(!e||!p)return;let t=()=>{if(c.current)return;let t=e.getBoundingClientRect().width;t<=0||u(e=>n(e,t))};t();let r=new ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[n,p]),(0,a.useEffect)(()=>{if(!d)return;let e=e=>{let t=s.current;if(!t)return;let n=t.getBoundingClientRect();u(r(e.clientX,n.left,n.width))},n=()=>{f(!1),u(e=>t(e)),document.body.style.cursor=``,document.body.style.userSelect=``};return document.addEventListener(`mousemove`,e),document.addEventListener(`mouseup`,n),document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,()=>{document.removeEventListener(`mousemove`,e),document.removeEventListener(`mouseup`,n),document.body.style.cursor=``,document.body.style.userSelect=``}},[d,t,r]),{layoutRef:s,paneWidth:l,resizing:d,isWide:p,onResizeStart:(0,a.useCallback)(e=>{e.preventDefault(),f(!0)},[])}}var c=e();function l({testId:e,layout:t,widthAttr:r,split:i,listTestId:a,listSlot:o,panelTestId:l,panelSlot:u,separatorTestId:d,separatorLabel:f,list:p,children:m}){let{layoutRef:h,paneWidth:g,resizing:_,isWide:v,onResizeStart:y}=s({load:i.load,save:i.save,clamp:i.clamp,widthFromPointer:i.widthFromPointer});return(0,c.jsxs)(`div`,{ref:h,className:`app-page-stack flex min-h-0 flex-1 flex-col gap-0 overflow-hidden md:flex-row`,"data-testid":e,"data-layout":t,[`data-${r}`]:g,children:[(0,c.jsx)(`aside`,{"data-testid":a,"data-slot":o,className:`flex max-h-[46%] min-h-0 w-full shrink-0 flex-col md:max-h-none`,style:v?{width:g,flex:`0 0 ${g}px`}:void 0,children:p}),(0,c.jsx)(`div`,{role:`separator`,"aria-orientation":`horizontal`,className:`relative h-px w-full shrink-0 bg-border md:hidden`}),(0,c.jsxs)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-valuenow":g,"aria-valuemin":i.minPx,"aria-valuemax":i.maxPx,"aria-label":f,"data-testid":d,"data-resizing":_?`true`:`false`,className:`group relative z-10 hidden w-px shrink-0 cursor-col-resize self-stretch md:block`,onMouseDown:y,children:[(0,c.jsx)(`div`,{"aria-hidden":!0,className:n(`pointer-events-none absolute inset-0 bg-border transition-colors`,_?`bg-primary`:`group-hover:bg-transparent`)}),(0,c.jsx)(`div`,{"aria-hidden":!0,className:n(`pointer-events-none absolute inset-y-0 left-1/2 w-1 -translate-x-1/2 opacity-0 transition-opacity`,_?`bg-primary opacity-100`:`bg-primary/60 group-hover:opacity-100`)}),(0,c.jsx)(`div`,{className:`absolute inset-y-0 -left-1.5 -right-1.5`})]}),(0,c.jsx)(`div`,{"data-testid":l,"data-slot":u,className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-card`,children:m})]})}function u(e){let[t,n]=(0,a.useState)(!1),[r,i]=(0,a.useState)(e);return Object.is(r,e)||(i(e),n(!1)),{scrolled:t,onScroll:(0,a.useCallback)(e=>{e.target===e.currentTarget&&n(e.currentTarget.scrollTop>4)},[])}}function d(e){let{storageKey:t,defaultPx:n,minPx:r,maxPx:i,editorMinPx:a}=e,o=(e,t)=>{if(!Number.isFinite(e))return n;let o=i;if(t!=null&&t>0){let e=t-a;o=Math.min(i,Math.max(r,e))}return Math.round(Math.max(r,Math.min(o,e)))},s=()=>{if(typeof window>`u`)return n;try{let e=localStorage.getItem(t);return e==null?n:o(parseFloat(e))}catch{return n}},c=e=>{let n=o(e);try{localStorage.setItem(t,String(n))}catch{}return n},l=(e,t,r)=>r<=0?n:o(e-t,r);return{...e,clamp:o,load:s,save:c,widthFromPointer:l}}export{u as n,l as r,d as t};
1
+ import{c as e,d as t,l as n,p as r}from"./button-BFNlGZ5p.js";import{N as i}from"./index-Dcm171u1.js";var a=r(t(),1),o=`(min-width: 768px)`;function s({load:e,save:t,clamp:n,widthFromPointer:r}){let s=(0,a.useRef)(null),c=(0,a.useRef)(!1),[l,u]=(0,a.useState)(e),[d,f]=(0,a.useState)(!1),p=i(o);return c.current=d,(0,a.useEffect)(()=>{let e=s.current;if(!e||!p)return;let t=()=>{if(c.current)return;let t=e.getBoundingClientRect().width;t<=0||u(e=>n(e,t))};t();let r=new ResizeObserver(t);return r.observe(e),()=>r.disconnect()},[n,p]),(0,a.useEffect)(()=>{if(!d)return;let e=e=>{let t=s.current;if(!t)return;let n=t.getBoundingClientRect();u(r(e.clientX,n.left,n.width))},n=()=>{f(!1),u(e=>t(e)),document.body.style.cursor=``,document.body.style.userSelect=``};return document.addEventListener(`mousemove`,e),document.addEventListener(`mouseup`,n),document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`,()=>{document.removeEventListener(`mousemove`,e),document.removeEventListener(`mouseup`,n),document.body.style.cursor=``,document.body.style.userSelect=``}},[d,t,r]),{layoutRef:s,paneWidth:l,resizing:d,isWide:p,onResizeStart:(0,a.useCallback)(e=>{e.preventDefault(),f(!0)},[])}}var c=e();function l({testId:e,layout:t,widthAttr:r,split:i,listTestId:a,listSlot:o,panelTestId:l,panelSlot:u,separatorTestId:d,separatorLabel:f,list:p,children:m}){let{layoutRef:h,paneWidth:g,resizing:_,isWide:v,onResizeStart:y}=s({load:i.load,save:i.save,clamp:i.clamp,widthFromPointer:i.widthFromPointer});return(0,c.jsxs)(`div`,{ref:h,className:`app-page-stack flex min-h-0 flex-1 flex-col gap-0 overflow-hidden md:flex-row`,"data-testid":e,"data-layout":t,[`data-${r}`]:g,children:[(0,c.jsx)(`aside`,{"data-testid":a,"data-slot":o,className:`flex max-h-[46%] min-h-0 w-full shrink-0 flex-col md:max-h-none`,style:v?{width:g,flex:`0 0 ${g}px`}:void 0,children:p}),(0,c.jsx)(`div`,{role:`separator`,"aria-orientation":`horizontal`,className:`relative h-px w-full shrink-0 bg-border md:hidden`}),(0,c.jsxs)(`div`,{role:`separator`,"aria-orientation":`vertical`,"aria-valuenow":g,"aria-valuemin":i.minPx,"aria-valuemax":i.maxPx,"aria-label":f,"data-testid":d,"data-resizing":_?`true`:`false`,className:`group relative z-10 hidden w-px shrink-0 cursor-col-resize self-stretch md:block`,onMouseDown:y,children:[(0,c.jsx)(`div`,{"aria-hidden":!0,className:n(`pointer-events-none absolute inset-0 bg-border transition-colors`,_?`bg-primary`:`group-hover:bg-transparent`)}),(0,c.jsx)(`div`,{"aria-hidden":!0,className:n(`pointer-events-none absolute inset-y-0 left-1/2 w-1 -translate-x-1/2 opacity-0 transition-opacity`,_?`bg-primary opacity-100`:`bg-primary/60 group-hover:opacity-100`)}),(0,c.jsx)(`div`,{className:`absolute inset-y-0 -left-1.5 -right-1.5`})]}),(0,c.jsx)(`div`,{"data-testid":l,"data-slot":u,className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-card`,children:m})]})}function u(e){let[t,n]=(0,a.useState)(!1),[r,i]=(0,a.useState)(e);return Object.is(r,e)||(i(e),n(!1)),{scrolled:t,onScroll:(0,a.useCallback)(e=>{e.target===e.currentTarget&&n(e.currentTarget.scrollTop>4)},[])}}function d(e){let{storageKey:t,defaultPx:n,minPx:r,maxPx:i,editorMinPx:a}=e,o=(e,t)=>{if(!Number.isFinite(e))return n;let o=i;if(t!=null&&t>0){let e=t-a;o=Math.min(i,Math.max(r,e))}return Math.round(Math.max(r,Math.min(o,e)))},s=()=>{if(typeof window>`u`)return n;try{let e=localStorage.getItem(t);return e==null?n:o(parseFloat(e))}catch{return n}},c=e=>{let n=o(e);try{localStorage.setItem(t,String(n))}catch{}return n},l=(e,t,r)=>r<=0?n:o(e-t,r);return{...e,clamp:o,load:s,save:c,widthFromPointer:l}}export{u as n,l as r,d as t};
@@ -0,0 +1 @@
1
+ import{c as e}from"./button-BFNlGZ5p.js";import{C as t,S as n,w as r}from"./index-Dcm171u1.js";var i=e();function a({plain:e=!1,className:a,title:o,description:s}){return e?(0,i.jsxs)(`div`,{className:a,children:[(0,i.jsx)(`h2`,{className:`flex items-center gap-2 text-base font-semibold leading-none`,children:o}),s?(0,i.jsx)(`p`,{className:`mt-1.5 text-sm text-muted-foreground`,children:s}):null]}):(0,i.jsxs)(t,{className:a,children:[(0,i.jsx)(r,{className:`flex items-center gap-2`,children:o}),s?(0,i.jsx)(n,{children:s}):null]})}export{a as t};
@@ -0,0 +1,2 @@
1
+ import{c as e,d as t,p as n,t as r}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as i}from"./pencil-line-CEZ7D-de.js";import{t as a}from"./rotate-ccw-CRguJya4.js";import{t as o}from"./zap-BuOtogAv.js";import"./es2015-DPJTBYa9.js";import{i as ee,o as te,r as ne}from"./ai-config-store-C8D_PUGV.js";import{n as s}from"./toast-9yeTf7d9.js";import{Ot as re,T as ie,Z as c,b as l,g as u,h as d,x as f,xt as p,y as m}from"./index-Dcm171u1.js";import{n as h}from"./monaco-editor-Cge8h-Ca.js";import{i as ae,r as g,t as _}from"./editor-pane-actions-_ckwcCII.js";import{n as v}from"./pane-bar-Dvi-MHuB.js";import{t as y}from"./panel-heading-Crmy9fo0.js";import{t as oe}from"./textarea-9wB8Hsz-.js";var b=n(t(),1),x=e();function S({open:e=!1,onOpenChange:t,embedded:n=!1,plainHeading:S=!1,filename:C,onSaved:w}){let[T,E]=(0,b.useState)(``),[D,O]=(0,b.useState)(``),[k,A]=(0,b.useState)(!1),[j,M]=(0,b.useState)(!1),[N,P]=(0,b.useState)(!1),[F,I]=(0,b.useState)(!1),[L,R]=(0,b.useState)(null),[z,B]=(0,b.useState)(``),[V,H]=(0,b.useState)(null),[U,W]=(0,b.useState)(!1),G=T!==D,K=ne(),q=ee(K),se=q?{provider:q.provider,apiKey:q.apiKey,baseUrl:q.baseUrl,model:q.model}:{provider:K.provider,apiKey:K.apiKey,baseUrl:K.baseUrl,model:K.model},J=te(K),Y=(0,b.useCallback)(async()=>{if(C){A(!0),R(null);try{let e=await fetch(`/api/plugins/custom/${encodeURIComponent(C)}/code`);if(!e.ok){let t=await e.json();throw Error(t.error||`读取插件代码失败`)}let t=await e.json();E(t.code),O(t.code)}catch(e){R(e instanceof Error?e.message:`读取失败`)}finally{A(!1)}}},[C]);(0,b.useEffect)(()=>{(e||n)&&C&&Y()},[e,n,C,Y]);let X=async()=>{M(!0),R(null);try{let e=await fetch(`/api/plugins/custom/${encodeURIComponent(C)}/code`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:T})});if(!e.ok){let t=await e.json();throw Error(t.error||`保存失败`)}O(T),window.dispatchEvent(new CustomEvent(`plugins-custom-updated`)),w?.(),s.success(`插件代码保存成功`)}catch(e){let t=e instanceof Error?e.message:`保存失败`;R(t),s.error(t)}finally{M(!1)}},ce=async()=>{M(!0),P(!0),R(null);try{let e=await fetch(`/api/plugins/custom/${encodeURIComponent(C)}/code`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({code:T})});if(!e.ok){let t=await e.json();throw Error(t.error||`保存失败`)}if(O(T),!(await fetch(`/api/plugins/reload`,{method:`POST`})).ok)throw Error(`热加载失败`);w?.(),window.dispatchEvent(new CustomEvent(`plugins-custom-updated`)),s.success(`插件代码已保存并完成热加载`)}catch(e){let t=e instanceof Error?e.message:`操作失败`;R(t),s.error(t)}finally{M(!1),P(!1)}};d({active:e||n,enabled:G&&!j&&!F,priority:u.panel,onSave:X});let le=()=>{E(D)},Z=()=>{G&&!confirm(`有未保存的修改,确定要关闭吗?`)||(W(!1),t?.(!1))},Q=ae();g(Z);let ue=async()=>{if(!z.trim()||!J)return;let e=T;W(!0),I(!0),R(null),H(`AI 正在根据补充需求更新代码…`);try{let e=await fetch(`/api/plugins/revise-stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({originalCode:T,instruction:z.trim(),requirement:{name:C.replace(/\.js$/i,``),description:`根据补充要求更新插件 ${C},保持 Meddle 插件结构和现有核心能力正确。`},aiConfig:se})});if(!e.ok){let t=await e.json();throw Error(t.error||`AI 更新代码失败`)}let t=e.body?.getReader(),n=new TextDecoder;if(!t)throw Error(`无法读取 AI 更新流`);let r=``,i=``;for(;;){let{done:e,value:a}=await t.read();if(e)break;i+=n.decode(a,{stream:!0});let o=i.split(`
2
+ `);i=o.pop()||``;for(let e of o){if(!e.startsWith(`data:`))continue;let t=e.slice(5).trim();if(t)try{let e=JSON.parse(t);if(e.status===`generating`)H(`AI 正在根据补充需求更新代码…`);else if(e.chunk)r=e.accumulated||`${r}${e.chunk}`,E(r),H(`生成中… ${r.length} 字符`);else if(e.status===`success`)r=e.revisedCode||r,E(r),H(`AI 已完成代码更新,请检查后保存。`);else if(e.error)throw Error(e.error)}catch(e){if(e instanceof Error&&e.message!==`Unexpected end of JSON input`)throw e}}}if(!r.trim())throw Error(`AI 未返回有效代码`)}catch(t){let n=t instanceof Error?t.message:`AI 更新代码失败`;E(e),R(n),H(`更新失败,已恢复原代码:${n}`)}finally{I(!1)}},$=(0,x.jsxs)(x.Fragment,{children:[S?null:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(y,{className:`px-6 pt-6 pb-3`,title:(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(re,{className:`h-5 w-5`}),C,G&&(0,x.jsx)(c,{variant:`outline`,className:`text-orange-600 border-orange-300`,children:`未保存`})]}),description:`查看和编辑插件源码,保存后需热加载才能生效`}),(0,x.jsx)(m,{})]}),(0,x.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden px-4 py-3`,children:k?(0,x.jsxs)(`div`,{className:`flex flex-1 items-center justify-center gap-2 text-muted-foreground`,children:[(0,x.jsx)(p,{className:`h-5 w-5 animate-spin`}),(0,x.jsx)(`span`,{children:`加载中…`})]}):L&&!T?(0,x.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-destructive`,children:L}):(0,x.jsx)(`div`,{className:`min-h-0 flex-1`,children:(0,x.jsx)(`div`,{className:`relative h-full min-h-[320px]`,children:(0,x.jsx)(h,{value:T,onChange:E,language:`javascript`,height:`flex`})})})}),(0,x.jsx)(`div`,{"aria-hidden":!U,className:[`overflow-hidden transition-[max-height,opacity] duration-200 ease-out`,U?`max-h-[260px] border-t opacity-100`:`max-h-0 border-t-0 opacity-0 pointer-events-none`].join(` `),children:(0,x.jsxs)(`div`,{className:`space-y-3 px-6 py-4`,children:[(0,x.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,x.jsxs)(`div`,{className:`min-w-0`,children:[(0,x.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,x.jsx)(i,{className:`h-4 w-4`}),`AI 更新代码`]}),(0,x.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`输入补充需求后,AI 会直接把结果写回当前编辑器。`})]}),(0,x.jsx)(r,{variant:`ghost`,size:`xs`,onClick:()=>W(!1),disabled:!U||F,children:`收起`})]}),(0,x.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-[minmax(0,1fr)_auto] md:items-end`,children:[(0,x.jsxs)(`div`,{className:`app-field-group`,children:[(0,x.jsx)(ie,{htmlFor:`plugin-editor-extra-instruction`,children:`补充需求信息`}),(0,x.jsx)(oe,{id:`plugin-editor-extra-instruction`,value:z,onChange:e=>B(e.target.value),placeholder:`例如:补充 onBeforeResponse 对空 referer 的处理;保留现有 manifest 和 hook,不要改插件 id。`,className:`min-h-[88px] resize-none`,disabled:!U||F||j})]}),(0,x.jsx)(r,{size:`sm`,onClick:ue,disabled:!U||!z.trim()||!J||F||j,title:J?`根据补充需求更新当前代码`:`AI 未配置或未启用`,children:F?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(p,{className:`h-4 w-4 mr-1 animate-spin`}),`更新中…`]}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(i,{className:`h-4 w-4 mr-1`}),`更新代码`]})})]}),(0,x.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:V||(J?`生成结果会写回上方编辑器,请检查后再保存或热加载。`:`AI 未配置或未启用,请先在设置中配置 AI 服务。`)})]})}),L&&T&&(0,x.jsx)(`div`,{className:`px-6 py-2 text-sm text-destructive bg-destructive/10`,children:L}),Q?null:(0,x.jsx)(m,{}),(0,x.jsxs)(_,{className:`px-6 py-3 flex justify-between items-center gap-2`,children:[(0,x.jsxs)(`div`,{className:Q?`contents`:`flex items-center gap-2`,children:[S&&G?(0,x.jsx)(c,{variant:`outline`,className:`text-orange-600 border-orange-300`,children:`未保存`}):null,(0,x.jsxs)(r,{variant:`ghost`,size:`sm`,onClick:le,disabled:!G||j||F,title:`撤销修改`,children:[(0,x.jsx)(a,{className:`h-4 w-4 mr-1`}),`还原`]}),(0,x.jsxs)(r,{variant:`outline`,size:`sm`,onClick:()=>W(e=>!e),disabled:!T||j||F,title:J?`使用 AI 根据补充需求更新代码`:`AI 未配置或未启用`,children:[(0,x.jsx)(i,{className:`h-4 w-4 mr-1`}),`AI 更新代码`]})]}),(0,x.jsxs)(`div`,{className:Q?`contents`:`flex gap-2`,children:[Q?null:(0,x.jsx)(r,{variant:`outline`,size:`sm`,onClick:Z,disabled:j||F,children:`关闭`}),(0,x.jsxs)(r,{variant:`outline`,size:`sm`,onClick:ce,disabled:!G||j||F,children:[N?(0,x.jsx)(p,{className:`h-4 w-4 mr-1 animate-spin`}):(0,x.jsx)(o,{className:`h-4 w-4 mr-1`}),`保存并热加载`]}),(0,x.jsx)(v,{onClick:X,saving:j&&!N,disabled:!G||j||F})]})]})]});return n?(0,x.jsx)(`div`,{className:`flex h-full min-h-0 flex-col`,children:$}):(0,x.jsx)(l,{open:e,onOpenChange:e=>{!e&&G&&!confirm(`有未保存的修改,确定要关闭吗?`)||(e||W(!1),t?.(e))},children:(0,x.jsx)(f,{className:`p-0 flex flex-col`,resizable:!0,defaultWidth:900,storageKey:`plugin-code-editor`,children:$})})}export{S as PluginCodeEditor};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/plugin-generator-iAksMY2Q.js","assets/button-BFNlGZ5p.js","assets/index-Dcm171u1.js","assets/dist-BQN0rzUS.js","assets/dist-CFZ4xMSF.js","assets/dist-C-E2R2jk.js","assets/dist-fzPL-8F9.js","assets/dist-Bsv9ad5F.js","assets/dist-LiAcI8CK.js","assets/dist-DLQKRjuW.js","assets/es2015-DPJTBYa9.js","assets/dist-CRmX_NvH.js","assets/dist-wv9ebJK_.js","assets/check-BkfHQ6re.js","assets/chevron-down-DHwUtL4O.js","assets/toast-9yeTf7d9.js","assets/use-mocks-file-status-BUIUJ4oQ.js","assets/ai-config-store-C8D_PUGV.js","assets/index-C6dPxxT3.css","assets/circle-x-BEkinhez.js","assets/code-DD-AYxxu.js","assets/copy-BRnscYy1.js","assets/wand-sparkles-Bmt4dDOf.js","assets/editor-pane-actions-_ckwcCII.js","assets/pane-bar-Dvi-MHuB.js","assets/panel-heading-Crmy9fo0.js","assets/textarea-9wB8Hsz-.js","assets/plugin-code-editor-VaL2lVyD.js","assets/monaco-editor-Cge8h-Ca.js","assets/pencil-line-CEZ7D-de.js","assets/rotate-ccw-CRguJya4.js","assets/zap-BuOtogAv.js","assets/plugin-test-dialog-Cx6ifDnm.js","assets/body-diff-view-SfLCLzs9.js","assets/arrow-right-BNum_060.js","assets/circle-alert-zMagrFuI.js","assets/refresh-cw-BfLoHqg5.js"])))=>i.map(i=>d[i]);
2
+ import{c as e,d as t,p as n,t as r,u as i}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as a}from"./refresh-cw-BfLoHqg5.js";import{c as o}from"./dist-BQN0rzUS.js";import{t as s}from"./zap-BuOtogAv.js";import"./es2015-DPJTBYa9.js";import{t as c}from"./switch-94vgsMHm.js";import{G as l,J as ee,K as u,Nt as d,Q as te,U as ne,W as f,Z as p,dt as re,n as ie,ot as ae,q as oe,st as se,ut as m,vt as h,xt as g}from"./index-Dcm171u1.js";import{n as ce}from"./editor-pane-actions-_ckwcCII.js";import{a as _,i as le,r as ue}from"./pane-bar-Dvi-MHuB.js";import{n as de,r as fe,t as v}from"./pane-split-ChCHxR7K.js";var pe=i(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),me=i(`shield`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]),y=i(`unplug`,[[`path`,{d:`m19 5 3-3`,key:`yk6iyv`}],[`path`,{d:`m2 22 3-3`,key:`19mgm9`}],[`path`,{d:`M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z`,key:`goz73y`}],[`path`,{d:`M7.5 13.5 10 11`,key:`7xgeeb`}],[`path`,{d:`M10.5 16.5 13 14`,key:`10btkg`}],[`path`,{d:`m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z`,key:`1snsnr`}]]),b=n(t(),1),x=v({storageKey:`meddle-plugin-list-width`,defaultPx:360,minPx:280,maxPx:560,editorMinPx:420});x.storageKey,x.defaultPx;var S=e(),he=(0,b.lazy)(()=>d(()=>import(`./plugin-generator-iAksMY2Q.js`).then(e=>({default:e.PluginGenerator})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]))),ge=(0,b.lazy)(()=>d(()=>import(`./plugin-code-editor-VaL2lVyD.js`).then(e=>({default:e.PluginCodeEditor})),__vite__mapDeps([27,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,28,29,30,31,23,24,25,26]))),_e=(0,b.lazy)(()=>d(()=>import(`./plugin-test-dialog-Cx6ifDnm.js`).then(e=>({default:e.PluginTestDialog})),__vite__mapDeps([32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,28,33,34,35,19,29,36,22,23,25,26])));function C(){return(0,S.jsxs)(`div`,{className:`flex h-full min-h-[160px] items-center justify-center gap-2 text-sm text-muted-foreground`,children:[(0,S.jsx)(g,{className:`size-4 animate-spin`}),`加载编辑器…`]})}function w({plugins:e,pluginMode:t,switchPluginMode:n,fetchPlugins:i,startPlugin:d,stopPlugin:m,togglePlugin:h,thirdPartyPlugins:v,thirdPartySecurity:w,fetchThirdPartyPlugins:D,loadThirdPartyPlugin:O,unloadThirdPartyPlugin:M}){let[N,P]=(0,b.useState)(!1),[F,I]=(0,b.useState)(``),[L,R]=(0,b.useState)(!1),[ye,be]=(0,b.useState)([]),[z,B]=(0,b.useState)(!1),[V,H]=(0,b.useState)({kind:`idle`}),[xe,Se]=(0,b.useState)(null),U=(0,b.useRef)(null),Ce=(0,b.useCallback)(e=>{U.current=e},[]),we=(0,b.useCallback)(()=>{if(U.current){U.current();return}H({kind:`idle`})},[]);(0,b.useEffect)(()=>{i(),D(),W()},[i,D]),(0,b.useEffect)(()=>{let e=()=>{W()};return window.addEventListener(`plugins-custom-updated`,e),()=>window.removeEventListener(`plugins-custom-updated`,e)},[]);let W=async()=>{try{be((await(await fetch(`/api/plugins/custom`)).json()).plugins||[])}catch(e){console.error(`加载自定义插件失败:`,e)}},Te=async(e,t)=>{if(confirm(`确定要删除插件 ${e} 吗?`))try{let n=await fetch(`/api/plugins/custom/${encodeURIComponent(e)}`,{method:`DELETE`});if(n.ok)H(n=>n.kind===`code`&&n.filename===e||n.kind===`test`&&(n.filename===e||t!==void 0&&n.pluginId===t)?{kind:`idle`}:n),await W();else{let e=await n.json();alert(e.error||`删除失败`)}}catch(e){console.error(`删除插件失败:`,e),alert(`删除失败`)}},G=async(e,t)=>{if(confirm(`插件文件已删除,确定要从内存卸载 ${t} 吗?`))try{let t=await fetch(`/api/plugins/custom/loaded/${encodeURIComponent(e)}/unload`,{method:`POST`});if(t.ok)H(t=>(t.kind===`test`||t.kind===`builtin`)&&t.pluginId===e?{kind:`idle`}:t),await i(),await W();else{let e=await t.json().catch(()=>({}));alert(e.error||`卸载失败`)}}catch(e){console.error(`卸载插件失败:`,e),alert(`卸载失败`)}},K=async()=>{B(!0);try{let e=await fetch(`/api/plugins/reload`,{method:`POST`});if(e.ok){let t=await e.json();alert(`成功热加载 ${t.count} 个插件!`),await i(),await W()}else{let t=await e.json();alert(t.error||`热加载失败`)}}catch(e){console.error(`热加载失败:`,e),alert(`热加载失败`)}finally{B(!1)}},Ee=async e=>{P(!0);try{await d(e),await i()}finally{P(!1)}},De=async e=>{P(!0);try{await m(e),await i()}finally{P(!1)}},Oe=async()=>{if(F.trim()){R(!0);try{await O(F),I(``),await D()}finally{R(!1)}}},ke=async e=>{R(!0);try{await M(e),await D(),V.kind===`third-party`&&V.pluginId===e&&H({kind:`idle`})}finally{R(!1)}},{builtinPlugins:q,customRows:J}=ie(e,ye,new Set(v.map(e=>e.id))),Y=V.kind===`builtin`?e.find(e=>e.id===V.pluginId):void 0,X=Y?J.find(e=>e.fileDeleted&&e.pluginId===Y.id):void 0,Z=V.kind===`third-party`?v.find(e=>e.id===V.pluginId):void 0,Q=V.kind===`generate`?`编辑插件 · AI 生成`:V.kind===`code`?`编辑插件 · ${V.filename}`:V.kind===`test`?`编辑插件 · 测试 ${V.pluginName}`:V.kind===`builtin`?`编辑插件 · ${Y?.name||V.pluginId}`:V.kind===`third-party`?`编辑插件 · ${Z?.name||V.pluginId}`:V.kind===`load-third-party`?`编辑插件 · 加载第三方`:`编辑插件`,Ae=V.kind===`code`||V.kind===`generate`||V.kind===`test`,$=de(Q);return(0,S.jsxs)(fe,{testId:`plugin-config-layout`,layout:`list-edit`,widthAttr:`plugin-list-width`,split:x,listTestId:`plugin-config-list`,panelTestId:`plugin-config-edit`,separatorTestId:`plugin-panel-separator`,separatorLabel:`调整插件列表宽度`,list:(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`div`,{className:`shrink-0`,children:[(0,S.jsxs)(le,{children:[(0,S.jsx)(_,{children:`插件`}),(0,S.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,S.jsx)(r,{variant:`ghost`,size:`icon-sm`,onClick:()=>void W(),disabled:N||z,"aria-label":`刷新列表`,children:(0,S.jsx)(a,{})}),(0,S.jsx)(r,{variant:`ghost`,size:`icon-sm`,onClick:()=>void K(),disabled:N||z,"aria-label":`热加载插件`,children:z?(0,S.jsx)(g,{className:`animate-spin`}):(0,S.jsx)(s,{})}),(0,S.jsxs)(r,{variant:`outline`,size:`sm`,onClick:()=>H({kind:`generate`}),"data-testid":`plugin-config-generate`,children:[(0,S.jsx)(re,{"data-icon":`inline-start`}),`AI 生成`]})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2 border-b p-[var(--ui-section-gap)]`,children:[(0,S.jsxs)(ne,{value:t,onValueChange:e=>n(e),children:[(0,S.jsx)(oe,{className:`h-7 w-full text-xs`,"aria-label":`插件模式`,children:(0,S.jsx)(ee,{})}),(0,S.jsx)(f,{children:(0,S.jsxs)(l,{children:[(0,S.jsx)(u,{value:`off`,children:`关闭`}),(0,S.jsx)(u,{value:`on`,children:`开启`}),(0,S.jsx)(u,{value:`shadow`,children:`影子模式`})]})})]}),t===`off`?(0,S.jsx)(p,{variant:`destructive`,className:`shrink-0 text-xs`,children:`未生效`}):null]})]}),(0,S.jsxs)(`div`,{"data-plugin-row-list":``,className:`meddle-thin-scroll min-h-0 flex-1 overflow-x-hidden overflow-y-auto`,children:[(0,S.jsx)(T,{title:`内置插件`,children:q.length===0?(0,S.jsx)(E,{children:`暂无内置插件`}):q.map(e=>(0,S.jsx)(k,{testId:`plugin-config-row-builtin-${e.id}`,selected:V.kind===`builtin`&&V.pluginId===e.id,title:e.name,meta:e.version,onSelect:()=>H({kind:`builtin`,pluginId:e.id}),badge:(0,S.jsx)(p,{variant:e.state===`running`?`default`:`secondary`,children:e.state})},e.id))}),(0,S.jsx)(T,{title:`自定义插件`,children:J.length===0?(0,S.jsx)(E,{children:`暂无自定义插件,点击「AI 生成」`}):J.map(({filename:e,pluginId:t,loadedPlugin:n,fileDeleted:i})=>{let a=n?n.state!==`disabled`:!1,s=i?(V.kind===`builtin`||V.kind===`test`)&&V.pluginId===t:V.kind===`code`&&V.filename===e||V.kind===`test`&&(V.filename===e||V.pluginId===t),l=n?a?`已启用`:`已禁用`:`未加载`;return(0,S.jsx)(k,{testId:i?`plugin-config-row-custom-deleted-${t}`:`plugin-config-row-custom-${e}`,selected:s,title:e,meta:l,muted:!!n&&!a,onSelect:()=>H(i?{kind:`builtin`,pluginId:t}:{kind:`code`,filename:e}),badge:(0,S.jsxs)(S.Fragment,{children:[i?(0,S.jsxs)(`span`,{"data-testid":`plugin-file-deleted-label`,className:`mr-1 inline-flex items-center gap-1 text-xs text-muted-foreground`,children:[(0,S.jsx)(ae,{"aria-hidden":`true`,className:`size-3.5 shrink-0`}),`文件已删除`]}):null,n?(0,S.jsx)(c,{checked:a,onCheckedChange:e=>h(n.id,e),"aria-label":`启用插件 ${e}`}):(0,S.jsx)(p,{variant:`outline`,children:`未加载`})]}),action:(0,S.jsxs)(`div`,{className:`flex items-center`,children:[n&&a&&!i&&(0,S.jsx)(r,{variant:`ghost`,size:`icon-sm`,onClick:()=>H({kind:`test`,pluginId:n.id,pluginName:n.name,hooks:n.hooks,filename:e}),"aria-label":`测试插件 ${n.name}`,children:(0,S.jsx)(se,{})}),i?(0,S.jsx)(r,{variant:`ghost`,size:`icon-sm`,onClick:()=>void G(t,e),"aria-label":`卸载插件 ${e}`,"aria-description":`文件已删除,仅从内存移除`,title:`卸载`,children:(0,S.jsx)(y,{})}):(0,S.jsx)(r,{variant:`ghost`,size:`icon-sm`,onClick:()=>void Te(e,n?.id),className:`text-destructive`,"aria-label":`删除插件 ${e}`,children:(0,S.jsx)(o,{})})]})},i?`loaded:${t}`:e)})}),(0,S.jsx)(T,{title:`第三方插件`,extra:(0,S.jsxs)(`span`,{className:`inline-flex items-center gap-1 normal-case tracking-normal`,children:[w.allowAll?(0,S.jsx)(me,{className:`size-3.5 text-primary`}):(0,S.jsx)(pe,{className:`size-3.5`}),w.allowAll?`已信任所有插件`:`已信任 ${w.trusted.length} 个`]}),action:(0,S.jsx)(r,{variant:`ghost`,size:`xs`,onClick:()=>H({kind:`load-third-party`}),"data-testid":`plugin-config-load`,children:`加载`}),children:v.length===0?(0,S.jsx)(E,{children:`暂无第三方插件`}):v.map(e=>(0,S.jsx)(k,{testId:`plugin-config-row-third-${e.id}`,selected:V.kind===`third-party`&&V.pluginId===e.id,title:e.name,meta:e.version,onSelect:()=>H({kind:`third-party`,pluginId:e.id}),badge:(0,S.jsx)(p,{variant:e.state===`running`?`default`:`secondary`,children:e.state})},e.id))})]})]}),children:[(0,S.jsx)(ue,{"data-testid":`plugin-editor-title-bar`,scrolled:$.scrolled,title:Q,actions:(0,S.jsxs)(S.Fragment,{children:[V.kind===`idle`?null:(0,S.jsx)(r,{variant:`ghost`,size:`sm`,onClick:we,children:`取消`}),(0,S.jsx)(`div`,{ref:Se,"data-testid":`editor-pane-actions`,className:`contents`})]})}),(0,S.jsx)(ce,{host:xe,registerDismiss:Ce,children:(0,S.jsx)(`div`,{className:Ae?`min-h-0 flex-1 overflow-hidden`:`min-h-0 flex-1 overflow-y-auto`,onScroll:$.onScroll,"data-slot":`plugin-editor-scroll`,children:V.kind===`idle`?(0,S.jsxs)(`div`,{className:`flex h-full min-h-[240px] flex-col items-center justify-center gap-2 p-6 text-center text-sm text-muted-foreground`,children:[(0,S.jsx)(`p`,{children:`选择左侧插件进行编辑,或点击「AI 生成」`}),(0,S.jsx)(`p`,{className:`text-xs`,children:`自定义插件在右侧编辑代码;内置和第三方插件在右侧查看并操作`})]}):V.kind===`generate`?(0,S.jsx)(b.Suspense,{fallback:(0,S.jsx)(C,{}),children:(0,S.jsx)(he,{embedded:!0,plainHeading:!0,onOpenChange:e=>{e||H({kind:`idle`})},onPluginSaved:()=>{i(),W()}})}):V.kind===`code`?(0,S.jsx)(b.Suspense,{fallback:(0,S.jsx)(C,{}),children:(0,S.jsx)(ge,{embedded:!0,plainHeading:!0,filename:V.filename,onOpenChange:e=>{e||H({kind:`idle`})},onSaved:()=>{i()}},V.filename)}):V.kind===`test`?(0,S.jsx)(b.Suspense,{fallback:(0,S.jsx)(C,{}),children:(0,S.jsx)(_e,{embedded:!0,plainHeading:!0,pluginId:V.pluginId,pluginName:V.pluginName,hooks:V.hooks,filename:V.filename,onOpenChange:e=>{e||H({kind:`idle`})},onPluginFixed:()=>{i()}},V.pluginId)}):V.kind===`builtin`&&Y?(0,S.jsx)(A,{plugin:Y,...X?{note:ve,onUnload:()=>void G(X.pluginId,X.filename)}:{},loading:N,onStart:()=>void Ee(Y.id),onStop:()=>void De(Y.id)}):V.kind===`third-party`&&Z?(0,S.jsx)(j,{plugin:Z,loading:L,onUnload:()=>void ke(Z.id)}):V.kind===`load-third-party`?(0,S.jsxs)(`div`,{className:`flex flex-col gap-[var(--ui-section-gap)] p-[var(--ui-section-gap)]`,children:[(0,S.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`输入插件文件或目录路径后加载。`}),(0,S.jsxs)(`div`,{className:`flex gap-2`,children:[(0,S.jsx)(te,{value:F,onChange:e=>I(e.target.value),placeholder:`输入插件路径…`,className:`flex-1`,"aria-label":`第三方插件路径`}),(0,S.jsx)(r,{onClick:()=>void Oe(),disabled:L||!F.trim(),children:L?(0,S.jsx)(g,{className:`animate-spin`}):`加载`})]})]}):null})})]})}function T({title:e,extra:t,action:n,children:r}){return(0,S.jsxs)(`section`,{children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b px-[var(--ui-section-gap)] py-1.5 text-xs font-medium text-muted-foreground`,children:[(0,S.jsx)(`span`,{className:`truncate`,children:e}),(0,S.jsxs)(`span`,{className:`flex shrink-0 items-center gap-2`,children:[t,n]})]}),r]})}function E({children:e}){return(0,S.jsx)(`div`,{className:`px-[var(--ui-section-gap)] py-6 text-center text-sm text-muted-foreground`,children:e})}function D(e){let{key:t}=e;if(t!==`ArrowDown`&&t!==`ArrowUp`&&t!==`Home`&&t!==`End`)return;let n=e.currentTarget.closest(`[data-plugin-row-list]`);if(!n)return;let r=Array.from(n.querySelectorAll(`[data-plugin-row-trigger]`)),i=r.indexOf(e.currentTarget);if(i===-1||r.length===0)return;let a=t===`Home`?0:t===`End`?r.length-1:t===`ArrowDown`?Math.min(i+1,r.length-1):Math.max(i-1,0);e.preventDefault(),r[a]?.focus()}var O=`has-[[data-plugin-row-trigger]:focus-visible]:ring-[3px] has-[[data-plugin-row-trigger]:focus-visible]:ring-inset has-[[data-plugin-row-trigger]:focus-visible]:ring-ring/50`;function k({testId:e,selected:t,title:n,meta:r,muted:i,badge:a,action:o,onSelect:s}){return(0,S.jsxs)(`div`,{"data-testid":e,"data-state":t?`selected`:void 0,className:`flex w-full cursor-pointer items-center gap-2 border-b border-border/40 px-[var(--ui-section-gap)] py-2 text-left transition-colors outline-none hover:bg-muted/50 data-[state=selected]:bg-accent ${O} ${i?`opacity-60`:``}`,onClick:s,children:[(0,S.jsxs)(`button`,{type:`button`,"data-plugin-row-trigger":``,"data-testid":`${e}-trigger`,"aria-current":t?`true`:void 0,className:`min-w-0 flex-1 cursor-pointer text-left outline-none`,onKeyDown:D,children:[(0,S.jsx)(`span`,{className:`block truncate text-sm font-medium`,children:n}),r?(0,S.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:r}):null]}),(0,S.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,onClick:e=>e.stopPropagation(),onKeyDown:e=>e.stopPropagation(),children:[a,o]})]})}var ve=`插件文件已删除,无法编辑或测试。可以卸载它,或者恢复文件后重新加载`;function A({plugin:e,note:t,loading:n,onStart:i,onStop:a,onUnload:o}){return(0,S.jsxs)(`div`,{className:`flex flex-col gap-[var(--ui-section-gap)] p-[var(--ui-section-gap)]`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`div`,{className:`text-sm font-medium`,children:e.name}),(0,S.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[e.id,` · `,e.version]})]}),t?(0,S.jsx)(`p`,{"data-testid":`plugin-detail-note`,className:`text-xs text-muted-foreground`,children:t}):null,(0,S.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.hooks.length===0?(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`无 hooks`}):e.hooks.map(e=>(0,S.jsx)(p,{variant:`secondary`,className:`text-xs`,children:e},e))}),(0,S.jsx)(`div`,{children:o?(0,S.jsxs)(r,{variant:`outline`,size:`sm`,onClick:o,disabled:n,"aria-label":`卸载插件 ${e.name}`,children:[(0,S.jsx)(y,{"data-icon":`inline-start`}),`卸载`]}):e.state===`running`?(0,S.jsxs)(r,{variant:`outline`,size:`sm`,onClick:a,disabled:n,"aria-label":`停止插件 ${e.name}`,children:[(0,S.jsx)(m,{"data-icon":`inline-start`}),`停止`]}):(0,S.jsxs)(r,{variant:`outline`,size:`sm`,onClick:i,disabled:n,"aria-label":`启动插件 ${e.name}`,children:[(0,S.jsx)(h,{"data-icon":`inline-start`}),`启动`]})})]})}function j({plugin:e,loading:t,onUnload:n}){return(0,S.jsxs)(`div`,{className:`flex flex-col gap-[var(--ui-section-gap)] p-[var(--ui-section-gap)]`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`div`,{className:`text-sm font-medium`,children:e.name}),(0,S.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[e.id,` · `,e.version,` · `,e.state]})]}),(0,S.jsx)(`div`,{children:(0,S.jsxs)(r,{variant:`outline`,size:`sm`,onClick:n,disabled:t,className:`text-destructive`,"aria-label":`卸载插件 ${e.name}`,children:[(0,S.jsx)(o,{"data-icon":`inline-start`}),`卸载`]})})]})}export{w as PluginConfig};
@@ -1,2 +1,2 @@
1
- import{c as e,d as t,p as n,t as r}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as i}from"./check-BkfHQ6re.js";import{t as a}from"./circle-x-BEkinhez.js";import{t as o}from"./code-DD-AYxxu.js";import{t as s}from"./copy-BRnscYy1.js";import{t as ee}from"./wand-sparkles-DDGjzjnX.js";import"./es2015-DPJTBYa9.js";import{o as te,r as ne}from"./ai-config-store-C8D_PUGV.js";import{At as re,D as ie,E as ae,Q as c,S as oe,St as l,T as u,Z as d,b as f,ft as p,j as m,x as se}from"./index-Cbis1y9h.js";import{i as ce,t as le}from"./editor-pane-actions-BGttNlkS.js";import{n as ue}from"./pane-bar-BSzN6D93.js";import{t as de}from"./panel-heading-Dev_soZA.js";import{t as fe}from"./textarea-BjWF0pk4.js";var h=n(t(),1),g=e();function _({open:e=!1,onOpenChange:t,embedded:n=!1,plainHeading:_=!1,onPluginSaved:v}){let[y,b]=(0,h.useState)(``),[x,S]=(0,h.useState)(``),[C,w]=(0,h.useState)(``),[pe,T]=(0,h.useState)(``),[E,D]=(0,h.useState)(!1),[O,k]=(0,h.useState)(!1),[A,j]=(0,h.useState)(``),[M,N]=(0,h.useState)(``),[P,F]=(0,h.useState)(null),[I,L]=(0,h.useState)(null),[R,z]=(0,h.useState)(``),[me,B]=(0,h.useState)(!1),[V,H]=(0,h.useState)(0),[U,W]=(0,h.useState)(0),[G,K]=(0,h.useState)(!1),[q,J]=(0,h.useState)(!1),Y=ne(),X=te(Y),he=async()=>{if(!y.trim()||!x.trim()){L(`error`),z(`请填写插件名称和描述`);return}if(!X){L(`error`),z(`AI 配置未完成,请先配置 AI 服务`);return}D(!0),L(null),z(`正在连接 AI 服务...`),j(``),H(0),W(0);let e=Date.now(),t=0;try{let n={name:y,description:x,hooks:C.split(`,`).map(e=>e.trim()).filter(Boolean),permissions:pe.split(`,`).map(e=>e.trim()).filter(Boolean)},r=await fetch(`/api/plugins/generate-stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({requirement:n,aiConfig:{provider:Y.provider,apiKey:Y.apiKey,baseUrl:Y.baseUrl,model:Y.model}})});if(!r.ok)throw Error(`请求失败: ${r.status}`);let i=r.body?.getReader(),a=new TextDecoder;if(!i)throw Error(`无法读取响应流`);let o=``;for(;;){let{done:n,value:r}=await i.read();if(n)break;o+=a.decode(r,{stream:!0});let s=o.split(`
2
- `);o=s.pop()||``;for(let n of s)if(!n.startsWith(`event:`)&&n.startsWith(`data:`)){let r=n.slice(5).trim();try{let n=JSON.parse(r);if(n.status===`generating`)z(`AI 正在生成代码...`),W(10);else if(n.chunk){t++;let r=n.accumulated||n.chunk;j(r),H(r.length),W(Math.min(90,10+t*2));let i=((Date.now()-e)/1e3).toFixed(1);z(`生成中... (${r.length} 字符, ${i}s)`)}else if(n.status===`success`){j(n.plugin.code),N(n.plugin.filename),F(n.plugin.manifest),H(n.plugin.code.length),W(100),L(`success`);let t=((Date.now()-e)/1e3).toFixed(1);z(`插件代码生成成功!(${n.plugin.code.length} 字符, ${t}s)`)}else if(n.error)throw Error(n.error)}catch(e){if(e instanceof Error&&e.message!==`Unexpected end of JSON input`)throw e}}}}catch(e){L(`error`),z(e instanceof Error?e.message:`生成失败`),W(0)}finally{D(!1)}},Z=async()=>{if(!A||!M){L(`error`),z(`没有可保存的插件代码`);return}k(!0),L(null),z(`正在保存插件...`);try{let e=await fetch(`/api/plugins/save`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filename:M,code:A})});if(!e.ok){let t=await e.json();throw Error(t.error||`保存失败`)}await e.json(),L(`success`),z(`插件已保存!现在可以热加载并测试。`),K(!0),window.dispatchEvent(new CustomEvent(`plugins-custom-updated`)),f.success(`插件保存成功`),v&&v(),window.dispatchEvent(new CustomEvent(`plugins-custom-updated`))}catch(e){let t=e instanceof Error?e.message:`保存失败`;L(`error`),z(t),f.error(t)}finally{k(!1)}};se({active:(e||n)&&!!A&&!G,enabled:!O&&!E&&!!M,priority:oe.panel,onSave:Z});let ge=async()=>{A&&(await navigator.clipboard.writeText(A),B(!0),setTimeout(()=>B(!1),2e3))},_e=async()=>{J(!0);try{let e=await fetch(`/api/plugins/reload`,{method:`POST`});if(!e.ok){let t=await e.json();throw Error(t.error||`热加载失败`)}let n=await e.json();L(`success`),z(`成功热加载 ${n.count} 个插件!插件已激活,可以使用了。`),v&&v(),setTimeout(()=>{t?.(!1),Q()},3e3)}catch(e){L(`error`),z(e instanceof Error?e.message:`热加载失败`)}finally{J(!1)}},Q=()=>{b(``),S(``),w(``),T(``),j(``),N(``),F(null),L(null),z(``),B(!1),H(0),W(0),K(!1),J(!1)},$=ce(),ve=(0,g.jsxs)(g.Fragment,{children:[_?null:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(de,{className:`px-6 pt-6 pb-4`,title:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(p,{className:`h-5 w-5`}),`AI 插件生成器`]}),description:`使用 AI 根据插件系统设计和您的需求自动生成自定义插件代码`}),(0,g.jsx)(u,{})]}),(0,g.jsxs)(`div`,{className:`app-panel-content`,children:[!X&&(0,g.jsx)(`div`,{className:`bg-yellow-50 dark:bg-yellow-950/20 border border-yellow-200 dark:border-yellow-900 rounded-md p-3`,children:(0,g.jsx)(`p`,{className:`text-sm text-yellow-700 dark:text-yellow-300`,children:`AI 功能未配置或未启用,请先在设置中配置 AI 服务`})}),(0,g.jsxs)(`div`,{className:`app-section`,children:[(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsxs)(m,{htmlFor:`pluginName`,children:[`插件名称 `,(0,g.jsx)(`span`,{className:`text-red-500`,children:`*`})]}),(0,g.jsx)(c,{id:`pluginName`,value:y,onChange:e=>b(e.target.value),placeholder:`例如:请求日志分析器`,disabled:E||O})]}),(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsxs)(m,{htmlFor:`pluginDescription`,children:[`插件描述 `,(0,g.jsx)(`span`,{className:`text-red-500`,children:`*`})]}),(0,g.jsx)(fe,{id:`pluginDescription`,value:x,onChange:e=>S(e.target.value),placeholder:`详细描述插件的功能,例如:分析HTTP请求日志,统计各个API的调用次数、响应时间等信息,并在控制台输出统计报告`,rows:4,disabled:E||O})]}),(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsx)(m,{htmlFor:`hooks`,children:`需要的 Hooks(可选,用逗号分隔)`}),(0,g.jsx)(c,{id:`hooks`,value:C,onChange:e=>w(e.target.value),placeholder:`例如:onRequestStart, onAfterResponse`,disabled:E||O}),(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`可选:onRequestStart, onBeforeProxy, onBeforeResponse, onAfterResponse, onError`})]}),(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsx)(m,{htmlFor:`permissions`,children:`需要的权限(可选,用逗号分隔)`}),(0,g.jsx)(c,{id:`permissions`,value:pe,onChange:e=>T(e.target.value),placeholder:`例如:proxy:read, storage:write`,disabled:E||O}),(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`可选:proxy:read, proxy:write, response:shortcircuit, storage:read, storage:write`})]})]}),E&&U>0&&(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsxs)(`div`,{className:`flex items-center justify-between text-sm`,children:[(0,g.jsx)(`span`,{className:`text-muted-foreground`,children:`生成进度`}),(0,g.jsxs)(`span`,{className:`font-medium`,children:[U,`%`]})]}),(0,g.jsx)(`div`,{className:`w-full bg-muted rounded-full h-2 overflow-hidden`,children:(0,g.jsx)(`div`,{className:`bg-primary h-full transition-all duration-300 ease-out`,style:{width:`${U}%`}})})]}),(A||E)&&(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,g.jsxs)(m,{className:`flex items-center gap-2`,children:[(0,g.jsx)(o,{className:`h-4 w-4`}),E?`正在生成插件代码`:`生成的插件代码`]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[V>0&&(0,g.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[V,` 字符`]}),!E&&A&&(0,g.jsx)(r,{variant:`ghost`,size:`sm`,onClick:ge,className:`h-8`,children:me?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(i,{className:`h-4 w-4 mr-1`}),`已复制`]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(s,{className:`h-4 w-4 mr-1`}),`复制`]})})]})]}),(0,g.jsxs)(`div`,{className:`bg-muted rounded-md p-4 max-h-[400px] overflow-auto relative`,children:[E&&(0,g.jsx)(`div`,{className:`absolute top-2 right-2`,children:(0,g.jsx)(l,{className:`h-4 w-4 animate-spin text-muted-foreground`})}),(0,g.jsx)(`pre`,{className:`text-xs font-mono whitespace-pre-wrap break-all`,children:A||`等待 AI 响应...`})]}),P&&(0,g.jsxs)(`div`,{className:`bg-blue-50 dark:bg-blue-950/20 border border-blue-200 dark:border-blue-900 rounded-md p-3 space-y-2`,children:[(0,g.jsx)(`p`,{className:`text-sm font-medium text-blue-900 dark:text-blue-100`,children:`插件信息`}),(0,g.jsxs)(`div`,{className:`text-xs space-y-1 text-blue-700 dark:text-blue-300`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`strong`,{children:`ID:`}),` `,P.id]}),(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`strong`,{children:`名称:`}),` `,P.name]}),(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`strong`,{children:`版本:`}),` `,P.version]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(`strong`,{children:`Hooks:`}),(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:P.hooks.map(e=>(0,g.jsx)(d,{variant:`secondary`,className:`text-xs`,children:e},e))})]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(`strong`,{children:`权限:`}),(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:P.permissions.map(e=>(0,g.jsx)(d,{variant:`outline`,className:`text-xs`,children:e},e))})]})]})]})]}),R&&(0,g.jsxs)(`div`,{className:`flex items-start gap-2 p-3 rounded-md border ${I===`success`?`bg-green-50 dark:bg-green-950/20 border-green-200 dark:border-green-900`:I===`error`?`bg-red-50 dark:bg-red-950/20 border-red-200 dark:border-red-900`:`bg-blue-50 dark:bg-blue-950/20 border-blue-200 dark:border-blue-900`}`,children:[I===`success`&&(0,g.jsx)(re,{className:`h-4 w-4 text-green-600 dark:text-green-400 mt-0.5`}),I===`error`&&(0,g.jsx)(a,{className:`h-4 w-4 text-red-600 dark:text-red-400 mt-0.5`}),E&&(0,g.jsx)(l,{className:`h-4 w-4 text-blue-600 dark:text-blue-400 mt-0.5 animate-spin`}),(0,g.jsx)(`span`,{className:`text-xs flex-1 ${I===`success`?`text-green-700 dark:text-green-300`:I===`error`?`text-red-700 dark:text-red-300`:`text-blue-700 dark:text-blue-300`}`,children:R})]})]}),$?null:(0,g.jsx)(u,{}),(0,g.jsxs)(le,{className:`px-6 py-4 flex justify-between gap-2`,children:[$?null:(0,g.jsx)(r,{variant:`outline`,size:`sm`,onClick:()=>{t?.(!1),Q()},disabled:E||O||q,children:G?`完成`:`取消`}),(0,g.jsx)(`div`,{className:$?`contents`:`flex gap-2`,children:A?G?(0,g.jsx)(r,{variant:`outline`,size:`sm`,onClick:_e,disabled:q,"data-testid":`plugin-generator-hot-reload`,children:q?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(l,{className:`h-4 w-4 mr-1 animate-spin`}),`加载中...`]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(p,{className:`h-4 w-4 mr-1`}),`热加载并测试`]})}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(r,{variant:`outline`,size:`sm`,onClick:()=>{j(``),N(``),F(null),L(null),z(``)},disabled:E||O,children:`重新生成`}),(0,g.jsx)(ue,{onClick:Z,saving:O,label:`保存插件`})]}):(0,g.jsx)(r,{size:`sm`,onClick:he,disabled:!X||E||O||!y.trim()||!x.trim(),children:E?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(l,{className:`h-4 w-4 mr-1 animate-spin`}),`生成中...`]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(ee,{className:`h-4 w-4 mr-1`}),`生成插件`]})})})]})]});return n?(0,g.jsx)(`div`,{className:`flex h-full min-h-0 flex-col`,children:ve}):(0,g.jsx)(ae,{open:e,onOpenChange:e=>{t?.(e),e||Q()},children:(0,g.jsx)(ie,{className:`p-0 flex flex-col`,resizable:!0,defaultWidth:900,storageKey:`plugin-generator`,children:ve})})}export{_ as PluginGenerator};
1
+ import{c as e,d as t,p as n,t as r}from"./button-BFNlGZ5p.js";import"./dist-CFZ4xMSF.js";import{t as i}from"./check-BkfHQ6re.js";import{t as a}from"./circle-x-BEkinhez.js";import{t as o}from"./code-DD-AYxxu.js";import{t as s}from"./copy-BRnscYy1.js";import{t as ee}from"./wand-sparkles-Bmt4dDOf.js";import"./es2015-DPJTBYa9.js";import{o as te,r as ne}from"./ai-config-store-C8D_PUGV.js";import{n as c}from"./toast-9yeTf7d9.js";import{Q as l,T as u,Z as d,b as re,dt as f,g as ie,h as ae,kt as oe,x as se,xt as p,y as m}from"./index-Dcm171u1.js";import{i as ce,t as le}from"./editor-pane-actions-_ckwcCII.js";import{n as ue}from"./pane-bar-Dvi-MHuB.js";import{t as de}from"./panel-heading-Crmy9fo0.js";import{t as fe}from"./textarea-9wB8Hsz-.js";var h=n(t(),1),g=e();function _({open:e=!1,onOpenChange:t,embedded:n=!1,plainHeading:_=!1,onPluginSaved:v}){let[y,b]=(0,h.useState)(``),[x,S]=(0,h.useState)(``),[C,w]=(0,h.useState)(``),[pe,T]=(0,h.useState)(``),[E,D]=(0,h.useState)(!1),[O,k]=(0,h.useState)(!1),[A,j]=(0,h.useState)(``),[M,N]=(0,h.useState)(``),[P,F]=(0,h.useState)(null),[I,L]=(0,h.useState)(null),[R,z]=(0,h.useState)(``),[me,B]=(0,h.useState)(!1),[V,H]=(0,h.useState)(0),[U,W]=(0,h.useState)(0),[G,K]=(0,h.useState)(!1),[q,J]=(0,h.useState)(!1),Y=ne(),X=te(Y),he=async()=>{if(!y.trim()||!x.trim()){L(`error`),z(`请填写插件名称和描述`);return}if(!X){L(`error`),z(`AI 配置未完成,请先配置 AI 服务`);return}D(!0),L(null),z(`正在连接 AI 服务…`),j(``),H(0),W(0);let e=Date.now(),t=0;try{let n={name:y,description:x,hooks:C.split(`,`).map(e=>e.trim()).filter(Boolean),permissions:pe.split(`,`).map(e=>e.trim()).filter(Boolean)},r=await fetch(`/api/plugins/generate-stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({requirement:n,aiConfig:{provider:Y.provider,apiKey:Y.apiKey,baseUrl:Y.baseUrl,model:Y.model}})});if(!r.ok)throw Error(`请求失败: ${r.status}`);let i=r.body?.getReader(),a=new TextDecoder;if(!i)throw Error(`无法读取响应流`);let o=``;for(;;){let{done:n,value:r}=await i.read();if(n)break;o+=a.decode(r,{stream:!0});let s=o.split(`
2
+ `);o=s.pop()||``;for(let n of s)if(!n.startsWith(`event:`)&&n.startsWith(`data:`)){let r=n.slice(5).trim();try{let n=JSON.parse(r);if(n.status===`generating`)z(`AI 正在生成代码…`),W(10);else if(n.chunk){t++;let r=n.accumulated||n.chunk;j(r),H(r.length),W(Math.min(90,10+t*2));let i=((Date.now()-e)/1e3).toFixed(1);z(`生成中… (${r.length} 字符, ${i}s)`)}else if(n.status===`success`){j(n.plugin.code),N(n.plugin.filename),F(n.plugin.manifest),H(n.plugin.code.length),W(100),L(`success`);let t=((Date.now()-e)/1e3).toFixed(1);z(`插件代码生成成功!(${n.plugin.code.length} 字符, ${t}s)`)}else if(n.error)throw Error(n.error)}catch(e){if(e instanceof Error&&e.message!==`Unexpected end of JSON input`)throw e}}}}catch(e){L(`error`),z(e instanceof Error?e.message:`生成失败`),W(0)}finally{D(!1)}},Z=async()=>{if(!A||!M){L(`error`),z(`没有可保存的插件代码`);return}k(!0),L(null),z(`正在保存插件…`);try{let e=await fetch(`/api/plugins/save`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filename:M,code:A})});if(!e.ok){let t=await e.json();throw Error(t.error||`保存失败`)}await e.json(),L(`success`),z(`插件已保存!现在可以热加载并测试。`),K(!0),window.dispatchEvent(new CustomEvent(`plugins-custom-updated`)),c.success(`插件保存成功`),v&&v(),window.dispatchEvent(new CustomEvent(`plugins-custom-updated`))}catch(e){let t=e instanceof Error?e.message:`保存失败`;L(`error`),z(t),c.error(t)}finally{k(!1)}};ae({active:(e||n)&&!!A&&!G,enabled:!O&&!E&&!!M,priority:ie.panel,onSave:Z});let ge=async()=>{A&&(await navigator.clipboard.writeText(A),B(!0),setTimeout(()=>B(!1),2e3))},_e=async()=>{J(!0);try{let e=await fetch(`/api/plugins/reload`,{method:`POST`});if(!e.ok){let t=await e.json();throw Error(t.error||`热加载失败`)}let n=await e.json();L(`success`),z(`成功热加载 ${n.count} 个插件!插件已激活,可以使用了。`),v&&v(),setTimeout(()=>{t?.(!1),Q()},3e3)}catch(e){L(`error`),z(e instanceof Error?e.message:`热加载失败`)}finally{J(!1)}},Q=()=>{b(``),S(``),w(``),T(``),j(``),N(``),F(null),L(null),z(``),B(!1),H(0),W(0),K(!1),J(!1)},$=ce(),ve=(0,g.jsxs)(g.Fragment,{children:[_?null:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(de,{className:`px-6 pt-6 pb-4`,title:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(f,{className:`h-5 w-5`}),`AI 插件生成器`]}),description:`使用 AI 根据插件系统设计和您的需求自动生成自定义插件代码`}),(0,g.jsx)(m,{})]}),(0,g.jsxs)(`div`,{className:`app-panel-content`,children:[!X&&(0,g.jsx)(`div`,{className:`bg-yellow-50 dark:bg-yellow-950/20 border border-yellow-200 dark:border-yellow-900 rounded-md p-3`,children:(0,g.jsx)(`p`,{className:`text-sm text-yellow-700 dark:text-yellow-300`,children:`AI 功能未配置或未启用,请先在设置中配置 AI 服务`})}),(0,g.jsxs)(`div`,{className:`app-section`,children:[(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsxs)(u,{htmlFor:`pluginName`,children:[`插件名称 `,(0,g.jsx)(`span`,{className:`text-red-500`,children:`*`})]}),(0,g.jsx)(l,{id:`pluginName`,value:y,onChange:e=>b(e.target.value),placeholder:`例如:请求日志分析器`,disabled:E||O})]}),(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsxs)(u,{htmlFor:`pluginDescription`,children:[`插件描述 `,(0,g.jsx)(`span`,{className:`text-red-500`,children:`*`})]}),(0,g.jsx)(fe,{id:`pluginDescription`,value:x,onChange:e=>S(e.target.value),placeholder:`详细描述插件的功能,例如:分析HTTP请求日志,统计各个API的调用次数、响应时间等信息,并在控制台输出统计报告`,rows:4,disabled:E||O})]}),(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsx)(u,{htmlFor:`hooks`,children:`需要的 Hooks(可选,用逗号分隔)`}),(0,g.jsx)(l,{id:`hooks`,value:C,onChange:e=>w(e.target.value),placeholder:`例如:onRequestStart, onAfterResponse`,disabled:E||O}),(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`可选:onRequestStart, onBeforeProxy, onBeforeResponse, onAfterResponse, onError`})]}),(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsx)(u,{htmlFor:`permissions`,children:`需要的权限(可选,用逗号分隔)`}),(0,g.jsx)(l,{id:`permissions`,value:pe,onChange:e=>T(e.target.value),placeholder:`例如:proxy:read, storage:write`,disabled:E||O}),(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`可选:proxy:read, proxy:write, response:shortcircuit, storage:read, storage:write`})]})]}),E&&U>0&&(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsxs)(`div`,{className:`flex items-center justify-between text-sm`,children:[(0,g.jsx)(`span`,{className:`text-muted-foreground`,children:`生成进度`}),(0,g.jsxs)(`span`,{className:`font-medium`,children:[U,`%`]})]}),(0,g.jsx)(`div`,{className:`w-full bg-muted rounded-full h-2 overflow-hidden`,children:(0,g.jsx)(`div`,{className:`bg-primary h-full transition-all duration-300 ease-out`,style:{width:`${U}%`}})})]}),(A||E)&&(0,g.jsxs)(`div`,{className:`app-field-group`,children:[(0,g.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,g.jsxs)(u,{className:`flex items-center gap-2`,children:[(0,g.jsx)(o,{className:`h-4 w-4`}),E?`正在生成插件代码`:`生成的插件代码`]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[V>0&&(0,g.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[V,` 字符`]}),!E&&A&&(0,g.jsx)(r,{variant:`ghost`,size:`sm`,onClick:ge,className:`h-8`,children:me?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(i,{className:`h-4 w-4 mr-1`}),`已复制`]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(s,{className:`h-4 w-4 mr-1`}),`复制`]})})]})]}),(0,g.jsxs)(`div`,{className:`bg-muted rounded-md p-4 max-h-[400px] overflow-auto relative`,children:[E&&(0,g.jsx)(`div`,{className:`absolute top-2 right-2`,children:(0,g.jsx)(p,{className:`h-4 w-4 animate-spin text-muted-foreground`})}),(0,g.jsx)(`pre`,{className:`text-xs font-mono whitespace-pre-wrap break-all`,children:A||`等待 AI 响应…`})]}),P&&(0,g.jsxs)(`div`,{className:`bg-blue-50 dark:bg-blue-950/20 border border-blue-200 dark:border-blue-900 rounded-md p-3 space-y-2`,children:[(0,g.jsx)(`p`,{className:`text-sm font-medium text-blue-900 dark:text-blue-100`,children:`插件信息`}),(0,g.jsxs)(`div`,{className:`text-xs space-y-1 text-blue-700 dark:text-blue-300`,children:[(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`strong`,{children:`ID:`}),` `,P.id]}),(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`strong`,{children:`名称:`}),` `,P.name]}),(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`strong`,{children:`版本:`}),` `,P.version]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(`strong`,{children:`Hooks:`}),(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:P.hooks.map(e=>(0,g.jsx)(d,{variant:`secondary`,className:`text-xs`,children:e},e))})]}),(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(`strong`,{children:`权限:`}),(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:P.permissions.map(e=>(0,g.jsx)(d,{variant:`outline`,className:`text-xs`,children:e},e))})]})]})]})]}),R&&(0,g.jsxs)(`div`,{className:`flex items-start gap-2 p-3 rounded-md border ${I===`success`?`bg-green-50 dark:bg-green-950/20 border-green-200 dark:border-green-900`:I===`error`?`bg-red-50 dark:bg-red-950/20 border-red-200 dark:border-red-900`:`bg-blue-50 dark:bg-blue-950/20 border-blue-200 dark:border-blue-900`}`,children:[I===`success`&&(0,g.jsx)(oe,{className:`h-4 w-4 text-green-600 dark:text-green-400 mt-0.5`}),I===`error`&&(0,g.jsx)(a,{className:`h-4 w-4 text-red-600 dark:text-red-400 mt-0.5`}),E&&(0,g.jsx)(p,{className:`h-4 w-4 text-blue-600 dark:text-blue-400 mt-0.5 animate-spin`}),(0,g.jsx)(`span`,{className:`text-xs flex-1 ${I===`success`?`text-green-700 dark:text-green-300`:I===`error`?`text-red-700 dark:text-red-300`:`text-blue-700 dark:text-blue-300`}`,children:R})]})]}),$?null:(0,g.jsx)(m,{}),(0,g.jsxs)(le,{className:`px-6 py-4 flex justify-between gap-2`,children:[$?null:(0,g.jsx)(r,{variant:`outline`,size:`sm`,onClick:()=>{t?.(!1),Q()},disabled:E||O||q,children:G?`完成`:`取消`}),(0,g.jsx)(`div`,{className:$?`contents`:`flex gap-2`,children:A?G?(0,g.jsx)(r,{variant:`outline`,size:`sm`,onClick:_e,disabled:q,"data-testid":`plugin-generator-hot-reload`,children:q?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(p,{className:`h-4 w-4 mr-1 animate-spin`}),`加载中…`]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(f,{className:`h-4 w-4 mr-1`}),`热加载并测试`]})}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(r,{variant:`outline`,size:`sm`,onClick:()=>{j(``),N(``),F(null),L(null),z(``)},disabled:E||O,children:`重新生成`}),(0,g.jsx)(ue,{onClick:Z,saving:O,label:`保存插件`})]}):(0,g.jsx)(r,{size:`sm`,onClick:he,disabled:!X||E||O||!y.trim()||!x.trim(),children:E?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(p,{className:`h-4 w-4 mr-1 animate-spin`}),`生成中…`]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(ee,{className:`h-4 w-4 mr-1`}),`生成插件`]})})})]})]});return n?(0,g.jsx)(`div`,{className:`flex h-full min-h-0 flex-col`,children:ve}):(0,g.jsx)(re,{open:e,onOpenChange:e=>{t?.(e),e||Q()},children:(0,g.jsx)(se,{className:`p-0 flex flex-col`,resizable:!0,defaultWidth:900,storageKey:`plugin-generator`,children:ve})})}export{_ as PluginGenerator};