mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 00:53:33 +00:00
2 lines
7.1 KiB
JavaScript
2 lines
7.1 KiB
JavaScript
import{r as p,c as F,q as A,Z as W,x as i,y as s,z as g,I as O,L as _,C as v,P as $,R as H,J as N,B,Q as T,ac as q,T as I,a5 as M,D as P,Y as V}from"./vue-vendor-R8HMg95E.js";import{_ as J}from"./index-B-5vF07c.js";const Q={class:"relative"},U={class:"select-none whitespace-nowrap text-sm font-medium text-gray-700 dark:text-gray-200"},Y={class:"max-h-60 overflow-y-auto py-1"},Z=["onClick"],K={key:1,class:"fas fa-check ml-auto pl-3 text-xs text-blue-600 dark:text-blue-400"},X={__name:"CustomDropdown",props:{modelValue:{type:[String,Number],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:"请选择"},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"}},emits:["update:modelValue","change"],setup(d,{emit:S}){const C=d,o=S,a=p(!1),c=p(null),f=p(null),L=p({}),E=F(()=>{const r=C.options.find(e=>e.value===C.modelValue);return r?r.label:""}),R=async()=>{a.value=!a.value,a.value&&(await P(),z())},y=()=>{a.value=!1},w=r=>{o("update:modelValue",r.value),o("change",r.value),y()},z=()=>{if(!c.value||!a.value)return;const r=c.value.getBoundingClientRect(),e=250,t=window.innerHeight-r.bottom,n=r.top;let l,u;t>=e||t>=n?l=r.bottom+8:l=r.top-e-8,u=r.left;const D=200;u+D>window.innerWidth&&(u=window.innerWidth-D-10),u<10&&(u=10),L.value={top:`${l}px`,left:`${u}px`,minWidth:`${r.width}px`}},m=()=>{a.value&&z()},h=()=>{a.value&&y()},x=r=>{!c.value||!a.value||c.value.contains(r.target)||(f.value&&!f.value.contains(r.target)?y():f.value||y())};return A(()=>{window.addEventListener("scroll",m,!0),window.addEventListener("resize",h),document.addEventListener("click",x)}),W(()=>{window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",h),document.removeEventListener("click",x)}),(r,e)=>(s(),i("div",Q,[g("div",{ref_key:"triggerRef",ref:c,class:v(["relative flex cursor-pointer items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 shadow-sm transition-all duration-200 hover:shadow-md dark:border-gray-600 dark:bg-gray-800",[a.value&&"border-blue-400 shadow-md"]]),onClick:R},[d.icon?(s(),i("i",{key:0,class:v(["fas",d.icon,"text-sm",d.iconColor])},null,2)):_("",!0),g("span",U,$(E.value||d.placeholder),1),g("i",{class:v(["fas fa-chevron-down ml-auto text-xs text-gray-400 transition-transform duration-200 dark:text-gray-500",a.value&&"rotate-180"])},null,2)],2),(s(),O(M,{to:"body"},[H(I,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:N(()=>[a.value?(s(),i("div",{key:0,ref_key:"dropdownRef",ref:f,class:"fixed z-[9999] min-w-max overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(L.value)},[g("div",Y,[(s(!0),i(T,null,q(d.options,t=>(s(),i("div",{key:t.value,class:v(["flex cursor-pointer items-center gap-2 whitespace-nowrap py-2 text-sm transition-colors duration-150",[t.value===d.modelValue?"bg-blue-50 font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400":t.isGroup?"bg-gray-50 font-semibold text-gray-800 dark:bg-gray-700/50 dark:text-gray-200":"text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700"]]),style:B({paddingLeft:t.indent?`${12+t.indent*16}px`:"12px",paddingRight:"12px"}),onClick:n=>w(t)},[t.icon?(s(),i("i",{key:0,class:v(["fas",t.icon,"text-xs"])},null,2)):_("",!0),g("span",null,$(t.label),1),t.value===d.modelValue?(s(),i("i",K)):_("",!0)],14,Z))),128))])],4)):_("",!0)]),_:1})]))]))}},oe=J(X,[["__scopeId","data-v-b405cc79"]]),ee={class:"relative"},te=["onClick"],ne={__name:"ActionDropdown",props:{actions:{type:Array,required:!0}},emits:["action"],setup(d,{emit:S}){const C=S,o=p(!1),a=p(null),c=p(null),f=p({}),L=e=>{const t={purple:"text-purple-600 hover:bg-purple-50 dark:text-purple-400 dark:hover:bg-purple-900/20",indigo:"text-indigo-600 hover:bg-indigo-50 dark:text-indigo-400 dark:hover:bg-indigo-900/20",blue:"text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20",green:"text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20",orange:"text-orange-600 hover:bg-orange-50 dark:text-orange-400 dark:hover:bg-orange-900/20",red:"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20",gray:"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-700"};return t[e.color]||t.gray},E=Symbol("action-dropdown"),R=e=>{var t;((t=e==null?void 0:e.detail)==null?void 0:t.id)!==E&&w()},y=async()=>{o.value||window.dispatchEvent(new CustomEvent("action-dropdown-open",{detail:{id:E}})),o.value=!o.value,o.value&&(await P(),m())},w=()=>{o.value=!1},z=e=>{w(),e.handler&&e.handler(),C("action",e.key)},m=()=>{if(!a.value||!o.value)return;const e=a.value.getBoundingClientRect(),t=200,n=180,l=8,u=window.innerHeight-e.bottom,D=e.top,G=window.innerWidth-e.right,j=e.left;let k,b;u>=t||u>=D?k=e.bottom+l:k=e.top-t-l,G>=n+l?b=e.right+l:j>=n+l?b=e.left-n-l+e.width:b=window.innerWidth-n-10,b<10&&(b=10),k<10&&(k=10),f.value={top:`${k}px`,left:`${b}px`}},h=()=>{o.value&&m()},x=()=>{o.value&&w()},r=e=>{!a.value||!o.value||a.value.contains(e.target)||(c.value&&!c.value.contains(e.target)?w():c.value||w())};return A(()=>{window.addEventListener("scroll",h,!0),window.addEventListener("resize",x),document.addEventListener("click",r),window.addEventListener("action-dropdown-open",R)}),W(()=>{window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",x),document.removeEventListener("click",r),window.removeEventListener("action-dropdown-open",R)}),(e,t)=>(s(),i("div",ee,[g("button",{ref_key:"triggerRef",ref:a,class:v(["flex h-8 w-8 items-center justify-center rounded-lg border border-gray-200 bg-white text-gray-600 transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:bg-gray-700 dark:hover:text-gray-200",[o.value&&"border-blue-400 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-900/30 dark:text-blue-400"]]),title:"更多操作",onClick:V(y,["stop"])},t[0]||(t[0]=[g("i",{class:"fas fa-ellipsis-v text-sm"},null,-1)]),2),(s(),O(M,{to:"body"},[H(I,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:N(()=>[o.value?(s(),i("div",{key:0,ref_key:"dropdownRef",ref:c,class:"fixed z-[9999] min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(f.value)},[(s(!0),i(T,null,q(d.actions,n=>(s(),i("button",{key:n.key,class:v(["flex w-full items-center gap-2 whitespace-nowrap px-3 py-2 text-left text-sm transition-colors duration-150",L(n)]),onClick:V(l=>z(n),["stop"])},[g("i",{class:v(["fas",n.icon,"w-4 text-center text-xs"])},null,2),g("span",null,$(n.label),1)],10,te))),128))],4)):_("",!0)]),_:1})]))]))}};export{oe as C,ne as _};
|