mirror of
https://github.com/ParisNeo/lollms-webui.git
synced 2025-04-08 03:14:17 +00:00
upgraded ui
This commit is contained in:
parent
9da90e683f
commit
3d3452ec51
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
import{b as O,d as b,L as r,f as s,g as a,s as t,j as P,l as n,t as e}from"./index-D8eUH6YH.js";const S={__proto__:null,anyref:34,dataref:34,eqref:34,externref:34,i31ref:34,funcref:34,i8:34,i16:34,i32:34,i64:34,f32:34,f64:34},Q=r.deserialize({version:14,states:"!^Q]QPOOOqQPO'#CbOOQO'#Cd'#CdOOQO'#Cl'#ClOOQO'#Ch'#ChQ]QPOOOOQO,58|,58|OxQPO,58|OOQO-E6f-E6fOOQO1G.h1G.h",stateData:"!P~O_OSPOSQOS~OTPOVROXROYROZROaQO~OSUO~P]OSXO~P]O",goto:"xaPPPPPPbPbPPPhPPPrXROPTVQTOQVPTWTVXSOPTV",nodeNames:"⚠ LineComment BlockComment Module ) ( App Identifier Type Keyword Number String",maxTerm:17,nodeProps:[["isolate",-3,1,2,11,""],["openedBy",4,"("],["closedBy",5,")"],["group",-6,6,7,8,9,10,11,"Expression"]],skippedNodes:[0,1,2],repeatNodeCount:1,tokenData:"0o~R^XY}YZ}]^}pq}rs!Stu#pxy'Uyz(e{|(j}!O(j!Q!R(s!R![*p!]!^.^#T#o.{~!SO_~~!VVOr!Srs!ls#O!S#O#P!q#P;'S!S;'S;=`#j<%lO!S~!qOZ~~!tRO;'S!S;'S;=`!};=`O!S~#QWOr!Srs!ls#O!S#O#P!q#P;'S!S;'S;=`#j;=`<%l!S<%lO!S~#mP;=`<%l!S~#siqr%bst%btu%buv%bvw%bwx%bz{%b{|%b}!O%b!O!P%b!P!Q%b!Q![%b![!]%b!^!_%b!_!`%b!`!a%b!a!b%b!b!c%b!c!}%b#Q#R%b#R#S%b#S#T%b#T#o%b#p#q%b#r#s%b~%giV~qr%bst%btu%buv%bvw%bwx%bz{%b{|%b}!O%b!O!P%b!P!Q%b!Q![%b![!]%b!^!_%b!_!`%b!`!a%b!a!b%b!b!c%b!c!}%b#Q#R%b#R#S%b#S#T%b#T#o%b#p#q%b#r#s%b~'ZPT~!]!^'^~'aTO!]'^!]!^'p!^;'S'^;'S;=`(_<%lO'^~'sVOy'^yz(Yz!]'^!]!^'p!^;'S'^;'S;=`(_<%lO'^~(_OQ~~(bP;=`<%l'^~(jOS~~(mQ!Q!R(s!R![*p~(xUY~!O!P)[!Q![*p!g!h){#R#S+U#X#Y){#l#m+[~)aRY~!Q![)j!g!h){#X#Y){~)oSY~!Q![)j!g!h){#R#S*j#X#Y){~*OR{|*X}!O*X!Q![*_~*[P!Q![*_~*dQY~!Q![*_#R#S*X~*mP!Q![)j~*uTY~!O!P)[!Q![*p!g!h){#R#S+U#X#Y){~+XP!Q![*p~+_R!Q![+h!c!i+h#T#Z+h~+mVY~!O!P,S!Q![+h!c!i+h!r!s-P#R#S+[#T#Z+h#d#e-P~,XTY~!Q![,h!c!i,h!r!s-P#T#Z,h#d#e-P~,mUY~!Q![,h!c!i,h!r!s-P#R#S.Q#T#Z,h#d#e-P~-ST{|-c}!O-c!Q![-o!c!i-o#T#Z-o~-fR!Q![-o!c!i-o#T#Z-o~-tSY~!Q![-o!c!i-o#R#S-c#T#Z-o~.TR!Q![,h!c!i,h#T#Z,h~.aP!]!^.d~.iSP~OY.dZ;'S.d;'S;=`.u<%lO.d~.xP;=`<%l.d~/QiX~qr.{st.{tu.{uv.{vw.{wx.{z{.{{|.{}!O.{!O!P.{!P!Q.{!Q![.{![!].{!^!_.{!_!`.{!`!a.{!a!b.{!b!c.{!c!}.{#Q#R.{#R#S.{#S#T.{#T#o.{#p#q.{#r#s.{",tokenizers:[0],topRules:{Module:[0,3]},specialized:[{term:9,get:o=>S[o]||-1}],tokenPrec:0}),i=O.define({name:"wast",parser:Q.configure({props:[s.add({App:P({closing:")",align:!1})}),a.add({App:n,BlockComment(o){return{from:o.from+2,to:o.to-2}}}),t({Keyword:e.keyword,Type:e.typeName,Number:e.number,String:e.string,Identifier:e.variableName,LineComment:e.lineComment,BlockComment:e.blockComment,"( )":e.paren})]}),languageData:{commentTokens:{line:";;",block:{open:"(;",close:";)"}},closeBrackets:{brackets:["(",'"']}}});function p(){return new b(i)}export{p as wast,i as wastLanguage};
|
||||
import{b as O,d as b,L as r,f as s,g as a,s as t,j as P,l as n,t as e}from"./index-CTkhORQ_.js";const S={__proto__:null,anyref:34,dataref:34,eqref:34,externref:34,i31ref:34,funcref:34,i8:34,i16:34,i32:34,i64:34,f32:34,f64:34},Q=r.deserialize({version:14,states:"!^Q]QPOOOqQPO'#CbOOQO'#Cd'#CdOOQO'#Cl'#ClOOQO'#Ch'#ChQ]QPOOOOQO,58|,58|OxQPO,58|OOQO-E6f-E6fOOQO1G.h1G.h",stateData:"!P~O_OSPOSQOS~OTPOVROXROYROZROaQO~OSUO~P]OSXO~P]O",goto:"xaPPPPPPbPbPPPhPPPrXROPTVQTOQVPTWTVXSOPTV",nodeNames:"⚠ LineComment BlockComment Module ) ( App Identifier Type Keyword Number String",maxTerm:17,nodeProps:[["isolate",-3,1,2,11,""],["openedBy",4,"("],["closedBy",5,")"],["group",-6,6,7,8,9,10,11,"Expression"]],skippedNodes:[0,1,2],repeatNodeCount:1,tokenData:"0o~R^XY}YZ}]^}pq}rs!Stu#pxy'Uyz(e{|(j}!O(j!Q!R(s!R![*p!]!^.^#T#o.{~!SO_~~!VVOr!Srs!ls#O!S#O#P!q#P;'S!S;'S;=`#j<%lO!S~!qOZ~~!tRO;'S!S;'S;=`!};=`O!S~#QWOr!Srs!ls#O!S#O#P!q#P;'S!S;'S;=`#j;=`<%l!S<%lO!S~#mP;=`<%l!S~#siqr%bst%btu%buv%bvw%bwx%bz{%b{|%b}!O%b!O!P%b!P!Q%b!Q![%b![!]%b!^!_%b!_!`%b!`!a%b!a!b%b!b!c%b!c!}%b#Q#R%b#R#S%b#S#T%b#T#o%b#p#q%b#r#s%b~%giV~qr%bst%btu%buv%bvw%bwx%bz{%b{|%b}!O%b!O!P%b!P!Q%b!Q![%b![!]%b!^!_%b!_!`%b!`!a%b!a!b%b!b!c%b!c!}%b#Q#R%b#R#S%b#S#T%b#T#o%b#p#q%b#r#s%b~'ZPT~!]!^'^~'aTO!]'^!]!^'p!^;'S'^;'S;=`(_<%lO'^~'sVOy'^yz(Yz!]'^!]!^'p!^;'S'^;'S;=`(_<%lO'^~(_OQ~~(bP;=`<%l'^~(jOS~~(mQ!Q!R(s!R![*p~(xUY~!O!P)[!Q![*p!g!h){#R#S+U#X#Y){#l#m+[~)aRY~!Q![)j!g!h){#X#Y){~)oSY~!Q![)j!g!h){#R#S*j#X#Y){~*OR{|*X}!O*X!Q![*_~*[P!Q![*_~*dQY~!Q![*_#R#S*X~*mP!Q![)j~*uTY~!O!P)[!Q![*p!g!h){#R#S+U#X#Y){~+XP!Q![*p~+_R!Q![+h!c!i+h#T#Z+h~+mVY~!O!P,S!Q![+h!c!i+h!r!s-P#R#S+[#T#Z+h#d#e-P~,XTY~!Q![,h!c!i,h!r!s-P#T#Z,h#d#e-P~,mUY~!Q![,h!c!i,h!r!s-P#R#S.Q#T#Z,h#d#e-P~-ST{|-c}!O-c!Q![-o!c!i-o#T#Z-o~-fR!Q![-o!c!i-o#T#Z-o~-tSY~!Q![-o!c!i-o#R#S-c#T#Z-o~.TR!Q![,h!c!i,h#T#Z,h~.aP!]!^.d~.iSP~OY.dZ;'S.d;'S;=`.u<%lO.d~.xP;=`<%l.d~/QiX~qr.{st.{tu.{uv.{vw.{wx.{z{.{{|.{}!O.{!O!P.{!P!Q.{!Q![.{![!].{!^!_.{!_!`.{!`!a.{!a!b.{!b!c.{!c!}.{#Q#R.{#R#S.{#S#T.{#T#o.{#p#q.{#r#s.{",tokenizers:[0],topRules:{Module:[0,3]},specialized:[{term:9,get:o=>S[o]||-1}],tokenPrec:0}),i=O.define({name:"wast",parser:Q.configure({props:[s.add({App:P({closing:")",align:!1})}),a.add({App:n,BlockComment(o){return{from:o.from+2,to:o.to-2}}}),t({Keyword:e.keyword,Type:e.typeName,Number:e.number,String:e.string,Identifier:e.variableName,LineComment:e.lineComment,BlockComment:e.blockComment,"( )":e.paren})]}),languageData:{commentTokens:{line:";;",block:{open:"(;",close:";)"}},closeBrackets:{brackets:["(",'"']}}});function p(){return new b(i)}export{p as wast,i as wastLanguage};
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
import{b as q,d as P,q as g,r as l,L as c,u as i,s as R,t as r,E as p}from"./index-D8eUH6YH.js";const b=1,$=33,m=34,v=35,x=36,d=new p(O=>{let e=O.pos;for(;;){if(O.next==10){O.advance();break}else if(O.next==123&&O.peek(1)==123||O.next<0)break;O.advance()}O.pos>e&&O.acceptToken(b)});function n(O,e,a){return new p(t=>{let u=t.pos;for(;t.next!=O&&t.next>=0&&(a||t.next!=38&&(t.next!=123||t.peek(1)!=123));)t.advance();t.pos>u&&t.acceptToken(e)})}const W=n(39,$,!1),C=n(34,m,!1),T=n(39,v,!0),f=n(34,x,!0),A=c.deserialize({version:14,states:"(jOVOqOOOeQpOOOvO!bO'#CaOOOP'#Cx'#CxQVOqOOO!OQpO'#CfO!WQpO'#ClO!]QpO'#CrO!bQpO'#CsOOQO'#Cv'#CvQ!gQpOOQ!lQpOOQ!qQpOOOOOV,58{,58{O!vOpO,58{OOOP-E6v-E6vO!{QpO,59QO#TQpO,59QOOQO,59W,59WO#YQpO,59^OOQO,59_,59_O#_QpOOO#_QpOOO#gQpOOOOOV1G.g1G.gO#oQpO'#CyO#tQpO1G.lOOQO1G.l1G.lO#|QpO1G.lOOQO1G.x1G.xO$UO`O'#DUO$ZOWO'#DUOOQO'#Co'#CoQOQpOOOOQO'#Cu'#CuO$`OtO'#CwO$qOrO'#CwOOQO,59e,59eOOQO-E6w-E6wOOQO7+$W7+$WO%SQpO7+$WO%[QpO7+$WOOOO'#Cp'#CpO%aOpO,59pOOOO'#Cq'#CqO%fOpO,59pOOOS'#Cz'#CzO%kOtO,59cOOQO,59c,59cOOOQ'#C{'#C{O%|OrO,59cO&_QpO<<GrOOQO<<Gr<<GrOOQO1G/[1G/[OOOS-E6x-E6xOOQO1G.}1G.}OOOQ-E6y-E6yOOQOAN=^AN=^",stateData:"&d~OvOS~OPROSQOVROWRO~OZTO[XO^VOaUOhWO~OR]OU^O~O[`O^aO~O[bO~O[cO~O[dO~ObeO~ObfO~ObgO~ORhO~O]kOwiO~O[lO~O_mO~OynOzoO~OysOztO~O[uO~O]wOwiO~O_yOwiO~OtzO~Os|O~OSQOV!OOW!OOr!OOy!QO~OSQOV!ROW!ROq!ROz!QO~O_!TOwiO~O]!UO~Oy!VO~Oz!VO~OSQOV!OOW!OOr!OOy!XO~OSQOV!ROW!ROq!ROz!XO~O]!ZO~O",goto:"#dyPPPPPzPPPP!WPPPPP!WPP!Z!^!a!d!dP!g!j!m!p!v#Q#WPPPPPPPP#^SROSS!Os!PT!Rt!SRYPRqeR{nR}oRZPRqfR[PRqgQSOR_SQj`SvjxRxlQ!PsR!W!PQ!StR!Y!SQpeRrf",nodeNames:"⚠ Text Content }} {{ Interpolation InterpolationContent Entity InvalidEntity Attribute BoundAttributeName [ Identifier ] ( ) ReferenceName # Is ExpressionAttributeValue AttributeInterpolation AttributeInterpolation EventName DirectiveName * StatementAttributeValue AttributeName AttributeValue",maxTerm:42,nodeProps:[["openedBy",3,"{{",15,"("],["closedBy",4,"}}",14,")"],["isolate",-4,5,19,25,27,""]],skippedNodes:[0],repeatNodeCount:4,tokenData:"0r~RyOX#rXY$mYZ$mZ]#r]^$m^p#rpq$mqr#rrs%jst&Qtv#rvw&hwx)zxy*byz*xz{+`{}#r}!O+v!O!P-]!P!Q#r!Q![+v![!]+v!]!_#r!_!`-s!`!c#r!c!}+v!}#O.Z#O#P#r#P#Q.q#Q#R#r#R#S+v#S#T#r#T#o+v#o#p/X#p#q#r#q#r0Z#r%W#r%W;'S+v;'S;:j-V;:j;=`$g<%lO+vQ#wTUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rQ$ZSO#q#r#r;'S#r;'S;=`$g<%lO#rQ$jP;=`<%l#rR$t[UQvPOX#rXY$mYZ$mZ]#r]^$m^p#rpq$mq#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR%qTyPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR&XTaPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR&oXUQWPOp'[pq#rq!]'[!]!^#r!^#q'[#q#r(d#r;'S'[;'S;=`)t<%lO'[R'aXUQOp'[pq#rq!]'[!]!^'|!^#q'[#q#r(d#r;'S'[;'S;=`)t<%lO'[R(TTVPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR(gXOp'[pq#rq!]'[!]!^'|!^#q'[#q#r)S#r;'S'[;'S;=`)t<%lO'[P)VUOp)Sq!])S!]!^)i!^;'S)S;'S;=`)n<%lO)SP)nOVPP)qP;=`<%l)SR)wP;=`<%l'[R*RTzPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR*iT^PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+PT_PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+gThPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+}b[PUQO}#r}!O+v!O!Q#r!Q![+v![!]+v!]!c#r!c!}+v!}#R#r#R#S+v#S#T#r#T#o+v#o#q#r#q#r$W#r%W#r%W;'S+v;'S;:j-V;:j;=`$g<%lO+vR-YP;=`<%l+vR-dTwPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR-zTUQbPO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR.bTZPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR.xT]PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR/^VUQO#o#r#o#p/s#p#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR/zTSPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#r~0^TO#q#r#q#r0m#r;'S#r;'S;=`$g<%lO#r~0rOR~",tokenizers:[d,W,C,T,f,0,1],topRules:{Content:[0,2],Attribute:[1,9]},tokenPrec:0}),V=i.parser.configure({top:"SingleExpression"}),Q=A.configure({props:[R({Text:r.content,Is:r.definitionOperator,AttributeName:r.attributeName,"AttributeValue ExpressionAttributeValue StatementAttributeValue":r.attributeValue,Entity:r.character,InvalidEntity:r.invalid,"BoundAttributeName/Identifier":r.attributeName,"EventName/Identifier":r.special(r.attributeName),"ReferenceName/Identifier":r.variableName,"DirectiveName/Identifier":r.keyword,"{{ }}":r.brace,"( )":r.paren,"[ ]":r.bracket,"# '*'":r.punctuation})]}),o={parser:V},w={parser:i.parser},U=Q.configure({wrap:l((O,e)=>O.name=="InterpolationContent"?o:null)}),y=Q.configure({wrap:l((O,e)=>{var a;return O.name=="InterpolationContent"?o:O.name!="AttributeInterpolation"?null:((a=O.node.parent)===null||a===void 0?void 0:a.name)=="StatementAttributeValue"?w:o}),top:"Attribute"}),E={parser:U},N={parser:y},s=g();function S(O){return O.configure({wrap:l(z)},"angular")}const k=S(s.language);function z(O,e){switch(O.name){case"Attribute":return/^[*#(\[]|\{\{/.test(e.read(O.from,O.to))?N:null;case"Text":return E}return null}function G(O={}){let e=s;if(O.base){if(O.base.language.name!="html"||!(O.base.language instanceof q))throw new RangeError("The base option must be the result of calling html(...)");e=O.base}return new P(e.language==s.language?k:S(e.language),[e.support,e.language.data.of({closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/})])}export{G as angular,k as angularLanguage};
|
||||
import{b as q,d as P,q as g,r as l,L as c,u as i,s as R,t as r,E as p}from"./index-CTkhORQ_.js";const b=1,$=33,m=34,v=35,x=36,d=new p(O=>{let e=O.pos;for(;;){if(O.next==10){O.advance();break}else if(O.next==123&&O.peek(1)==123||O.next<0)break;O.advance()}O.pos>e&&O.acceptToken(b)});function n(O,e,a){return new p(t=>{let u=t.pos;for(;t.next!=O&&t.next>=0&&(a||t.next!=38&&(t.next!=123||t.peek(1)!=123));)t.advance();t.pos>u&&t.acceptToken(e)})}const W=n(39,$,!1),C=n(34,m,!1),T=n(39,v,!0),f=n(34,x,!0),A=c.deserialize({version:14,states:"(jOVOqOOOeQpOOOvO!bO'#CaOOOP'#Cx'#CxQVOqOOO!OQpO'#CfO!WQpO'#ClO!]QpO'#CrO!bQpO'#CsOOQO'#Cv'#CvQ!gQpOOQ!lQpOOQ!qQpOOOOOV,58{,58{O!vOpO,58{OOOP-E6v-E6vO!{QpO,59QO#TQpO,59QOOQO,59W,59WO#YQpO,59^OOQO,59_,59_O#_QpOOO#_QpOOO#gQpOOOOOV1G.g1G.gO#oQpO'#CyO#tQpO1G.lOOQO1G.l1G.lO#|QpO1G.lOOQO1G.x1G.xO$UO`O'#DUO$ZOWO'#DUOOQO'#Co'#CoQOQpOOOOQO'#Cu'#CuO$`OtO'#CwO$qOrO'#CwOOQO,59e,59eOOQO-E6w-E6wOOQO7+$W7+$WO%SQpO7+$WO%[QpO7+$WOOOO'#Cp'#CpO%aOpO,59pOOOO'#Cq'#CqO%fOpO,59pOOOS'#Cz'#CzO%kOtO,59cOOQO,59c,59cOOOQ'#C{'#C{O%|OrO,59cO&_QpO<<GrOOQO<<Gr<<GrOOQO1G/[1G/[OOOS-E6x-E6xOOQO1G.}1G.}OOOQ-E6y-E6yOOQOAN=^AN=^",stateData:"&d~OvOS~OPROSQOVROWRO~OZTO[XO^VOaUOhWO~OR]OU^O~O[`O^aO~O[bO~O[cO~O[dO~ObeO~ObfO~ObgO~ORhO~O]kOwiO~O[lO~O_mO~OynOzoO~OysOztO~O[uO~O]wOwiO~O_yOwiO~OtzO~Os|O~OSQOV!OOW!OOr!OOy!QO~OSQOV!ROW!ROq!ROz!QO~O_!TOwiO~O]!UO~Oy!VO~Oz!VO~OSQOV!OOW!OOr!OOy!XO~OSQOV!ROW!ROq!ROz!XO~O]!ZO~O",goto:"#dyPPPPPzPPPP!WPPPPP!WPP!Z!^!a!d!dP!g!j!m!p!v#Q#WPPPPPPPP#^SROSS!Os!PT!Rt!SRYPRqeR{nR}oRZPRqfR[PRqgQSOR_SQj`SvjxRxlQ!PsR!W!PQ!StR!Y!SQpeRrf",nodeNames:"⚠ Text Content }} {{ Interpolation InterpolationContent Entity InvalidEntity Attribute BoundAttributeName [ Identifier ] ( ) ReferenceName # Is ExpressionAttributeValue AttributeInterpolation AttributeInterpolation EventName DirectiveName * StatementAttributeValue AttributeName AttributeValue",maxTerm:42,nodeProps:[["openedBy",3,"{{",15,"("],["closedBy",4,"}}",14,")"],["isolate",-4,5,19,25,27,""]],skippedNodes:[0],repeatNodeCount:4,tokenData:"0r~RyOX#rXY$mYZ$mZ]#r]^$m^p#rpq$mqr#rrs%jst&Qtv#rvw&hwx)zxy*byz*xz{+`{}#r}!O+v!O!P-]!P!Q#r!Q![+v![!]+v!]!_#r!_!`-s!`!c#r!c!}+v!}#O.Z#O#P#r#P#Q.q#Q#R#r#R#S+v#S#T#r#T#o+v#o#p/X#p#q#r#q#r0Z#r%W#r%W;'S+v;'S;:j-V;:j;=`$g<%lO+vQ#wTUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rQ$ZSO#q#r#r;'S#r;'S;=`$g<%lO#rQ$jP;=`<%l#rR$t[UQvPOX#rXY$mYZ$mZ]#r]^$m^p#rpq$mq#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR%qTyPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR&XTaPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR&oXUQWPOp'[pq#rq!]'[!]!^#r!^#q'[#q#r(d#r;'S'[;'S;=`)t<%lO'[R'aXUQOp'[pq#rq!]'[!]!^'|!^#q'[#q#r(d#r;'S'[;'S;=`)t<%lO'[R(TTVPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR(gXOp'[pq#rq!]'[!]!^'|!^#q'[#q#r)S#r;'S'[;'S;=`)t<%lO'[P)VUOp)Sq!])S!]!^)i!^;'S)S;'S;=`)n<%lO)SP)nOVPP)qP;=`<%l)SR)wP;=`<%l'[R*RTzPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR*iT^PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+PT_PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+gThPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR+}b[PUQO}#r}!O+v!O!Q#r!Q![+v![!]+v!]!c#r!c!}+v!}#R#r#R#S+v#S#T#r#T#o+v#o#q#r#q#r$W#r%W#r%W;'S+v;'S;:j-V;:j;=`$g<%lO+vR-YP;=`<%l+vR-dTwPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR-zTUQbPO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR.bTZPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR.xT]PUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR/^VUQO#o#r#o#p/s#p#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#rR/zTSPUQO#q#r#q#r$W#r;'S#r;'S;=`$g<%lO#r~0^TO#q#r#q#r0m#r;'S#r;'S;=`$g<%lO#r~0rOR~",tokenizers:[d,W,C,T,f,0,1],topRules:{Content:[0,2],Attribute:[1,9]},tokenPrec:0}),V=i.parser.configure({top:"SingleExpression"}),Q=A.configure({props:[R({Text:r.content,Is:r.definitionOperator,AttributeName:r.attributeName,"AttributeValue ExpressionAttributeValue StatementAttributeValue":r.attributeValue,Entity:r.character,InvalidEntity:r.invalid,"BoundAttributeName/Identifier":r.attributeName,"EventName/Identifier":r.special(r.attributeName),"ReferenceName/Identifier":r.variableName,"DirectiveName/Identifier":r.keyword,"{{ }}":r.brace,"( )":r.paren,"[ ]":r.bracket,"# '*'":r.punctuation})]}),o={parser:V},w={parser:i.parser},U=Q.configure({wrap:l((O,e)=>O.name=="InterpolationContent"?o:null)}),y=Q.configure({wrap:l((O,e)=>{var a;return O.name=="InterpolationContent"?o:O.name!="AttributeInterpolation"?null:((a=O.node.parent)===null||a===void 0?void 0:a.name)=="StatementAttributeValue"?w:o}),top:"Attribute"}),E={parser:U},N={parser:y},s=g();function S(O){return O.configure({wrap:l(z)},"angular")}const k=S(s.language);function z(O,e){switch(O.name){case"Attribute":return/^[*#(\[]|\{\{/.test(e.read(O.from,O.to))?N:null;case"Text":return E}return null}function G(O={}){let e=s;if(O.base){if(O.base.language.name!="html"||!(O.base.language instanceof q))throw new RangeError("The base option must be the result of calling html(...)");e=O.base}return new P(e.language==s.language?k:S(e.language),[e.support,e.language.data.of({closeBrackets:{brackets:["[","{",'"']},indentOnInput:/^\s*[\}\]]$/})])}export{G as angular,k as angularLanguage};
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
26
web/dist/assets/index-DmcjkfZo.css
vendored
Normal file
26
web/dist/assets/index-DmcjkfZo.css
vendored
Normal file
File diff suppressed because one or more lines are too long
26
web/dist/assets/index-voCSfR0x.css
vendored
26
web/dist/assets/index-voCSfR0x.css
vendored
File diff suppressed because one or more lines are too long
4
web/dist/index.html
vendored
4
web/dist/index.html
vendored
@ -6,8 +6,8 @@
|
||||
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>LoLLMS WebUI</title>
|
||||
<script type="module" crossorigin src="/assets/index-D8eUH6YH.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-voCSfR0x.css">
|
||||
<script type="module" crossorigin src="/assets/index-CTkhORQ_.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-DmcjkfZo.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
@ -1,49 +1,31 @@
|
||||
<template>
|
||||
<div v-if="loading" title="Loading.." class="flex flex-row flex-grow justify-end">
|
||||
<!-- Spinner remains the same -->
|
||||
<svg class="animate-spin h-5 w-5 text-blue-500" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
|
||||
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
||||
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div v-else class="relative" ref="menuContainer">
|
||||
<button
|
||||
<button
|
||||
@click="toggleMenu"
|
||||
class="flex items-center gap-2 px-4 py-2 text-white rounded-lg transition-all duration-300 shadow-md"
|
||||
class="flex items-center gap-2 px-4 py-2 text-white rounded-lg transition-all duration-300 shadow-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-400 dark:focus:ring-offset-gray-900"
|
||||
:title="help"
|
||||
:class="{
|
||||
'bg-blue-600 hover:bg-blue-700': !isAnyCommandChecked,
|
||||
'bg-yellow-400 hover:bg-yellow-500': isAnyCommandChecked
|
||||
'bg-yellow-400 hover:bg-yellow-500 text-gray-800': isAnyCommandChecked
|
||||
}"
|
||||
>
|
||||
<template v-if="icon">
|
||||
<svg
|
||||
v-if="iconParts.type === 'feather'"
|
||||
class="w-4 h-4"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
:data-feather="iconParts.value"
|
||||
></svg>
|
||||
<img
|
||||
v-else-if="iconParts.type === 'img'"
|
||||
:src="iconParts.value"
|
||||
class="w-4 h-4"
|
||||
/>
|
||||
<img
|
||||
v-else-if="iconParts.type === 'b64'"
|
||||
:src="'data:image/png;base64,' + iconParts.value"
|
||||
class="w-4 h-4"
|
||||
/>
|
||||
<i v-if="iconParts.type === 'feather'" :data-feather="iconParts.value" class="w-4 h-4"></i>
|
||||
<img v-else-if="iconParts.type === 'img'" :src="iconParts.value" class="w-4 h-4" alt="Icon" />
|
||||
<img v-else-if="iconParts.type === 'b64'" :src="'data:image/png;base64,' + iconParts.value" class="w-4 h-4" alt="Icon" />
|
||||
</template>
|
||||
|
||||
<svg
|
||||
class="w-4 h-4 transform transition-transform"
|
||||
<span>{{ buttonLabel }}</span>
|
||||
<svg
|
||||
class="w-4 h-4 transform transition-transform duration-200"
|
||||
:class="{ 'rotate-180': showMenu }"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
|
||||
@ -56,31 +38,49 @@
|
||||
enter-from-class="opacity-0"
|
||||
leave-to-class="opacity-0"
|
||||
>
|
||||
<div
|
||||
<div
|
||||
v-if="showMenu"
|
||||
ref="menu"
|
||||
class="absolute z-50 mt-2 w-72 origin-top-right rounded-lg bg-white dark:bg-gray-800 shadow-xl ring-1 ring-black ring-opacity-5 focus:outline-none"
|
||||
class="absolute z-50 mt-2 w-80 origin-top-right rounded-lg bg-white dark:bg-gray-800 shadow-xl ring-1 ring-black ring-opacity-5 focus:outline-none flex flex-col overflow-hidden"
|
||||
:class="menuPosition === 'above' ? 'bottom-full mb-2' : 'top-full'"
|
||||
style="max-height: calc(28rem + 3rem);"
|
||||
>
|
||||
<div class="p-2 space-y-1 custom-scrollbar max-h-96 overflow-y-auto">
|
||||
<template v-for="(cmd, index) in commandsList" :key="index">
|
||||
<div class="flex items-center justify-between w-full px-2 py-1 hover:bg-blue-100 dark:hover:bg-gray-700 transition-colors duration-200 rounded-md">
|
||||
<div v-if="commandsList.length > 10" class="p-2 sticky top-0 bg-white dark:bg-gray-800 z-10 border-b border-gray-200 dark:border-gray-700 flex-shrink-0">
|
||||
<input
|
||||
ref="searchInput"
|
||||
type="search"
|
||||
v-model="searchTerm"
|
||||
placeholder="Search commands..."
|
||||
class="w-full px-3 py-1.5 text-sm border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-1 focus:ring-blue-500 dark:bg-gray-700 dark:text-gray-200"
|
||||
@click.stop
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="custom-scrollbar overflow-y-auto flex-grow">
|
||||
<ul class="divide-y divide-gray-100 dark:divide-gray-700 px-1 py-1">
|
||||
<li
|
||||
v-for="(cmd) in filteredCommandsList"
|
||||
:key="cmd.value || cmd.name"
|
||||
class="group flex items-center justify-between w-full text-sm rounded-md hover:bg-blue-50 dark:hover:bg-gray-700 transition-colors duration-150"
|
||||
:class="{'bg-blue-50 dark:bg-gray-700': cmd.value === recentlyClicked}"
|
||||
>
|
||||
<button
|
||||
:title="cmd.help"
|
||||
@click="selected(cmd)"
|
||||
class="flex items-center flex-1 min-w-0 text-sm text-gray-700 dark:text-gray-200"
|
||||
@click="handleSelect(cmd)"
|
||||
class="flex items-center flex-1 min-w-0 px-3 py-2 text-gray-700 dark:text-gray-200 group-hover:text-blue-700 dark:group-hover:text-blue-300"
|
||||
>
|
||||
<span v-if="cmd.is_checked !== undefined" class="mr-2 flex-shrink-0">
|
||||
<span v-if="cmd.is_checked !== undefined" class="mr-3 flex-shrink-0 relative h-4 w-4">
|
||||
<input
|
||||
type="checkbox"
|
||||
:checked="cmd.is_checked"
|
||||
class="opacity-0 absolute h-4 w-4"
|
||||
:id="`checkbox-${index}`"
|
||||
class="opacity-0 absolute h-full w-full cursor-pointer"
|
||||
:id="`checkbox-${cmd.value || cmd.name}`"
|
||||
tabindex="-1"
|
||||
/>
|
||||
<label
|
||||
:for="`checkbox-${index}`"
|
||||
class="flex items-center justify-center h-4 w-4 border-2 border-blue-500 rounded-sm cursor-pointer transition-colors duration-200"
|
||||
:class="{ 'bg-blue-500 border-blue-500': cmd.is_checked }"
|
||||
:for="`checkbox-${cmd.value || cmd.name}`"
|
||||
class="flex items-center justify-center h-4 w-4 border-2 border-gray-400 dark:border-gray-500 rounded-sm cursor-pointer transition-all duration-200 group-hover:border-blue-500"
|
||||
:class="{ 'bg-blue-500 border-blue-500 dark:border-blue-400 dark:bg-blue-400': cmd.is_checked }"
|
||||
>
|
||||
<svg
|
||||
v-if="cmd.is_checked"
|
||||
@ -89,42 +89,31 @@
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M5 13l4 4L19 7"
|
||||
/>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/>
|
||||
</svg>
|
||||
</label>
|
||||
</span>
|
||||
|
||||
<span v-if="cmd.icon" class="mr-2 flex-shrink-0">
|
||||
<template v-if="cmd.icon.startsWith('feather:')">
|
||||
<i :data-feather="cmd.icon.replace('feather:', '')" class="w-4 h-4"></i>
|
||||
</template>
|
||||
<template v-else-if="cmd.icon.startsWith('img:')">
|
||||
<img :src="cmd.icon.replace('img:', '')" class="w-4 h-4" />
|
||||
</template>
|
||||
<template v-else-if="cmd.icon.startsWith('b64:')">
|
||||
<img :src="`data:image/png;base64,${cmd.icon.replace('b64:', '')}`" class="w-4 h-4" />
|
||||
</template>
|
||||
<span v-if="cmd.icon" class="mr-2 flex-shrink-0 w-4 h-4">
|
||||
<i v-if="cmdIconType(cmd.icon) === 'feather'" :data-feather="cmdIconValue(cmd.icon)" class="w-full h-full"></i>
|
||||
<img v-else-if="cmdIconType(cmd.icon) === 'img'" :src="cmdIconValue(cmd.icon)" class="w-full h-full object-contain" alt="" />
|
||||
<img v-else-if="cmdIconType(cmd.icon) === 'b64'" :src="`data:image/png;base64,${cmdIconValue(cmd.icon)}`" class="w-full h-full object-contain" alt="" />
|
||||
</span>
|
||||
|
||||
<span v-html="cmd.name" class="truncate flex-1 text-left"></span>
|
||||
<span v-html="highlightMatch(cmd.name)" class="truncate flex-1 text-left"></span>
|
||||
</button>
|
||||
|
||||
<button
|
||||
v-if="showSettings !== undefined"
|
||||
@click="showSettings(cmd)"
|
||||
class="text-green-500 hover:text-green-600 transition duration-300 ease-in-out flex-shrink-0 p-1"
|
||||
<button
|
||||
v-if="showSettings && typeof showSettings === 'function'"
|
||||
@click.stop="handleShowSettings(cmd)"
|
||||
class="text-gray-400 hover:text-green-600 dark:hover:text-green-400 transition duration-150 flex-shrink-0 p-2 mr-1 focus:outline-none opacity-0 group-hover:opacity-100"
|
||||
title="Settings"
|
||||
tabindex="-1"
|
||||
>
|
||||
<i data-feather="settings" class="h-4 w-4"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div v-if="index < commandsList.length - 1" class="border-t border-gray-200 dark:border-gray-700"></div>
|
||||
</template>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
@ -132,31 +121,45 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import feather from 'feather-icons'
|
||||
import feather from 'feather-icons';
|
||||
|
||||
export default {
|
||||
name: 'CommandMenu',
|
||||
props: {
|
||||
commandsList: {
|
||||
type: Array,
|
||||
required: true,
|
||||
default: () => []
|
||||
},
|
||||
sendCommand: {
|
||||
type: Function,
|
||||
required: true
|
||||
},
|
||||
showSettings: {
|
||||
type: Function,
|
||||
default: undefined
|
||||
},
|
||||
help: {
|
||||
type: String,
|
||||
default: 'Select Command'
|
||||
},
|
||||
icon: {
|
||||
type: String,
|
||||
default: 'feather:tool'
|
||||
},
|
||||
buttonLabel: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
showMenu: false,
|
||||
menuPosition: 'below'
|
||||
}
|
||||
},
|
||||
props: {
|
||||
commandsList: Array,
|
||||
sendCommand: Function,
|
||||
showSettings: Function,
|
||||
help: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
icon: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
highlighted: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
menuPosition: 'below',
|
||||
searchTerm: '',
|
||||
recentlyClicked: null,
|
||||
clickTimeout: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@ -164,68 +167,183 @@ export default {
|
||||
return this.commandsList.some((cmd) => cmd.is_checked);
|
||||
},
|
||||
iconParts() {
|
||||
if (!this.icon) return { type: null, value: null };
|
||||
const [type, ...valueParts] = this.icon.split(':');
|
||||
return {
|
||||
type,
|
||||
value: valueParts.join(':')
|
||||
return this.parseIconString(this.icon);
|
||||
},
|
||||
filteredCommandsList() {
|
||||
if (!this.searchTerm) {
|
||||
return this.commandsList;
|
||||
}
|
||||
const lowerSearchTerm = this.searchTerm.toLowerCase();
|
||||
const stripHtml = (html) => {
|
||||
const tmp = document.createElement("DIV");
|
||||
tmp.innerHTML = html;
|
||||
return tmp.textContent || tmp.innerText || "";
|
||||
};
|
||||
return this.commandsList.filter(cmd =>
|
||||
stripHtml(cmd.name).toLowerCase().includes(lowerSearchTerm)
|
||||
);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
selected(cmd) {
|
||||
if (cmd.is_checked !== undefined)
|
||||
cmd.is_checked = !cmd.is_checked
|
||||
this.sendCommand(cmd.value)
|
||||
parseIconString(iconString) {
|
||||
if (!iconString) return { type: null, value: null };
|
||||
const parts = iconString.split(':');
|
||||
const type = parts[0];
|
||||
const value = parts.slice(1).join(':');
|
||||
if (['feather', 'img', 'b64'].includes(type)) {
|
||||
return { type, value };
|
||||
}
|
||||
return { type: 'feather', value: iconString };
|
||||
},
|
||||
cmdIconType(iconString) {
|
||||
return this.parseIconString(iconString).type;
|
||||
},
|
||||
cmdIconValue(iconString) {
|
||||
return this.parseIconString(iconString).value;
|
||||
},
|
||||
handleSelect(cmd) {
|
||||
if (cmd.is_checked !== undefined) {
|
||||
// Avoid direct prop mutation if possible, emit event instead if commandsList is a prop
|
||||
// Assuming direct modification is intended based on original code
|
||||
cmd.is_checked = !cmd.is_checked;
|
||||
}
|
||||
this.sendCommand(cmd.value);
|
||||
this.recentlyClicked = cmd.value;
|
||||
this.closeMenu();
|
||||
|
||||
if(this.clickTimeout) clearTimeout(this.clickTimeout);
|
||||
this.clickTimeout = setTimeout(() => {
|
||||
this.recentlyClicked = null;
|
||||
}, 300);
|
||||
},
|
||||
handleShowSettings(cmd) {
|
||||
if(this.showSettings && typeof this.showSettings === 'function') {
|
||||
this.showSettings(cmd);
|
||||
this.closeMenu();
|
||||
}
|
||||
},
|
||||
toggleMenu() {
|
||||
this.showMenu = !this.showMenu
|
||||
this.showMenu = !this.showMenu;
|
||||
if (this.showMenu) {
|
||||
this.$nextTick(() => {
|
||||
feather.replace();
|
||||
this.calculatePosition()
|
||||
})
|
||||
this.searchTerm = '';
|
||||
this.$nextTick(() => {
|
||||
this.calculatePosition();
|
||||
this.replaceFeatherIcons();
|
||||
this.$refs.searchInput?.focus();
|
||||
});
|
||||
}
|
||||
},
|
||||
closeMenu() {
|
||||
this.showMenu = false;
|
||||
this.searchTerm = '';
|
||||
},
|
||||
calculatePosition() {
|
||||
const menuButton = this.$refs.menuContainer.getBoundingClientRect()
|
||||
const menuHeight = this.$refs.menu?.offsetHeight || 300
|
||||
const spaceBelow = window.innerHeight - menuButton.bottom
|
||||
const spaceAbove = menuButton.top
|
||||
if (!this.$refs.menuContainer || !this.showMenu) return; // Check showMenu here
|
||||
|
||||
this.menuPosition = spaceBelow > menuHeight || spaceBelow > spaceAbove ? 'below' : 'above'
|
||||
this.$nextTick(() => { // Ensure menu is rendered for measurement
|
||||
if (!this.$refs.menu) return;
|
||||
const menuButtonRect = this.$refs.menuContainer.getBoundingClientRect();
|
||||
const menuHeightEst = Math.min(this.$refs.menu.scrollHeight, 480); // Use scrollHeight up to max-height approx
|
||||
const spaceBelow = window.innerHeight - menuButtonRect.bottom;
|
||||
const spaceAbove = menuButtonRect.top;
|
||||
const safetyMargin = 10;
|
||||
|
||||
this.menuPosition = (spaceBelow < menuHeightEst + safetyMargin) && (spaceAbove > spaceBelow) ? 'above' : 'below';
|
||||
});
|
||||
},
|
||||
handleClickOutside(event) {
|
||||
if (!this.$refs.menuContainer.contains(event.target)) {
|
||||
this.showMenu = false
|
||||
if (this.$refs.menuContainer && !this.$refs.menuContainer.contains(event.target)) {
|
||||
this.closeMenu();
|
||||
}
|
||||
},
|
||||
replaceFeatherIcons() {
|
||||
this.$nextTick(() => {
|
||||
feather.replace({
|
||||
width: '1em',
|
||||
height: '1em',
|
||||
'stroke-width': 2
|
||||
});
|
||||
});
|
||||
},
|
||||
highlightMatch(text) {
|
||||
if (!this.searchTerm) return text;
|
||||
// Strip potential existing HTML before searching
|
||||
const strippedText = (() => {
|
||||
const tempDiv = document.createElement('div');
|
||||
tempDiv.innerHTML = text;
|
||||
return tempDiv.textContent || tempDiv.innerText || '';
|
||||
})();
|
||||
|
||||
const lowerText = strippedText.toLowerCase();
|
||||
const lowerSearch = this.searchTerm.toLowerCase();
|
||||
const index = lowerText.indexOf(lowerSearch);
|
||||
|
||||
if (index === -1) return text; // Return original HTML if no match in text content
|
||||
|
||||
const before = strippedText.substring(0, index);
|
||||
const match = strippedText.substring(index, index + this.searchTerm.length);
|
||||
const after = strippedText.substring(index + this.searchTerm.length);
|
||||
|
||||
// Escape HTML entities for parts before/after match, wrap match in strong
|
||||
const escapeHtml = (unsafe) => unsafe.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, "\"").replace(/'/g, "'");
|
||||
|
||||
return `${escapeHtml(before)}<strong class="font-semibold bg-yellow-200 dark:bg-yellow-600 rounded-sm">${escapeHtml(match)}</strong>${escapeHtml(after)}`;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
filteredCommandsList() {
|
||||
if (this.showMenu) {
|
||||
this.$nextTick(() => {
|
||||
this.calculatePosition(); // Recalculate potentially changed height
|
||||
this.replaceFeatherIcons();
|
||||
});
|
||||
}
|
||||
},
|
||||
searchTerm() {
|
||||
if (this.showMenu) {
|
||||
this.replaceFeatherIcons();
|
||||
this.$nextTick(() => this.calculatePosition()); // Recalculate as list size changes
|
||||
}
|
||||
},
|
||||
showMenu(newVal) {
|
||||
// Ensure position is calculated *after* menu is rendered
|
||||
if (newVal) {
|
||||
this.$nextTick(() => this.calculatePosition());
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
document.addEventListener('click', this.handleClickOutside)
|
||||
window.addEventListener('resize', this.calculatePosition)
|
||||
document.addEventListener('click', this.handleClickOutside, true);
|
||||
window.addEventListener('resize', this.calculatePosition);
|
||||
this.replaceFeatherIcons();
|
||||
},
|
||||
beforeUnmount() {
|
||||
document.removeEventListener('click', this.handleClickOutside)
|
||||
window.removeEventListener('resize', this.calculatePosition)
|
||||
document.removeEventListener('click', this.handleClickOutside, true);
|
||||
window.removeEventListener('resize', this.calculatePosition);
|
||||
if(this.clickTimeout) clearTimeout(this.clickTimeout);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.custom-scrollbar::-webkit-scrollbar {
|
||||
@apply w-2;
|
||||
@apply w-1.5;
|
||||
}
|
||||
|
||||
.custom-scrollbar::-webkit-scrollbar-track {
|
||||
@apply bg-gray-100 dark:bg-gray-700 rounded-full;
|
||||
@apply bg-gray-100 dark:bg-gray-700; /* Removed rounded-full for edge */
|
||||
}
|
||||
|
||||
.custom-scrollbar::-webkit-scrollbar-thumb {
|
||||
@apply bg-gray-400 dark:bg-gray-600 rounded-full;
|
||||
@apply bg-gray-400 dark:bg-gray-500 rounded-full; /* Keep thumb rounded */
|
||||
}
|
||||
.custom-scrollbar::-webkit-scrollbar-thumb:hover {
|
||||
@apply bg-gray-500 dark:bg-gray-400;
|
||||
}
|
||||
|
||||
.custom-scrollbar::-webkit-scrollbar-thumb:hover {
|
||||
@apply bg-gray-500 dark:bg-gray-500;
|
||||
/* Ensure consistent icon sizing */
|
||||
li svg[data-feather], li img,
|
||||
button > svg[data-feather], button > img {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
</style>
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user