PageSourceSearch

https://auth.feedlog.ai/_nuxt/CyzQtwvN.js

js feedlog.ai collected 2026-10-02 05:35:35 UTC 48,281 bytes, 42 lines download raw bytes

1import{V as Ye,_ as Ze}from"./BKIO9JcG.js";import Ne from"./BPwGyymh.js";import{dT as zt,dU as Te,M as Qe,C as m,d as M,dR as Nt,j as Ee,aQ as Ut,o as f,a as j,w as E,b as y,u as e,U as _e,r as de,aD as ve,aT as qt,aF as Ue,f as F,cv as et,aU as At,L as De,aG as qe,aH as Ae,a0 as Be,m as Fe,c as $,a7 as t,a8 as o,ab as Q,ac as se,e as W,y as T,ae as tt,cn as Ft,Q as ot,aV as Pt,g as st,d5 as Wt,c0 as jt,R as Mt,ad as Gt,ag as Oe,aO as pe,aM as Ht,n as A,aP as be,aw as Kt,az as Jt,aA as He,N as Se,O as Ie,at as Xt,P as me,dt as Pe,dV as Ve,dy as Ke,ds as ze,dW as Yt,dX as Zt,dw as Qt,dB as at,du as Je,as as eo,aj as to,au as oo}from"./Dqn5kp9W.js";import{i as so,f as ao,g as no,w as io,h as ro,u as lo,R as uo}from"./CTrU65a0.js";import{u as nt}from"./A0p_OiA8.js";import{c as co,_ as go,d as po,a as fo,b as mo}from"./BC5Ve1hC.js";import{_ as vo}from"./C-nT6OAM.js";import{_ as bo}from"./DlAUqK2U.js";import{_ as it,b as rt,a as lt}from"./YxSe5RxL.js";import{_ as dt}from"./CZWsHZCW.js";import{_ as ut}from"./DgQpvxHD.js";import{_ as ho}from"./BQBMLLCx.js";import{u as yo}from"./C2UvLCh5.js";import"./D56cJ4jK.js";import"./BKLdhikr.js";function ct(s,r){return zt(s)?!1:Array.isArray(s)?s.some(n=>Te(n,r)):Te(s,r)}function _o({type:s,defaultValue:r,modelValue:n}){const g=n||r;return n!==void 0||r!==void 0?Array.isArray(g)?"multiple":"single":s??"single"}function xo({type:s,defaultValue:r,modelValue:n}){return s||_o({type:s,defaultValue:r,modelValue:n})}function wo({type:s,defaultValue:r}){return r!==void 0?r:s==="single"?void 0:[]}function $o(s,r){const n=m(()=>xo(s)),g=Qe(s,"modelValue",r,{defaultValue:wo(s),passive:s.modelValue===void 0,deep:!0});function x(b){if(n.value==="single")g.value=Te(b,g.value)?void 0:b;else{const l=Array.isArray(g.value)?[...g.value||[]]:[g.value].filter(Boolean);if(ct(l,b)){const k=l.findIndex(_=>Te(_,b));l.splice(k,1)}else l.push(b);g.value=l}}const d=m(()=>n.value==="single");return{modelValue:g,changeModelValue:x,isSingle:d}}var ko=M({__name:"RovingFocusItem",props:{tabStopId:{type:String,required:!1},focusable:{type:Boolean,required:!1,default:!0},active:{type:Boolean,required:!1},allowShiftKey:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(s){const r=s,n=so(),g=Nt(),x=m(()=>r.tabStopId||g),d=m(()=>n.currentTabStopId.value===x.value),{getItems:b,CollectionItem:l}=ao();Ee(()=>{r.focusable&&n.onFocusableItemAdd()}),Ut(()=>{r.focusable&&n.onFocusableItemRemove()});function k(_){if(_.key==="Tab"&&_.shiftKey){n.onItemShiftTab();return}if(_.target!==_.currentTarget)return;
1const p=no(_,n.orientation.value,n.dir.value);if(p!==void 0){if(_.metaKey||_.ctrlKey||_.altKey||!r.allowShiftKey&&_.shiftKey)return;_.preventDefault();let i=[...b().map(v=>v.ref).filter(v=>v.dataset.disabled!=="")];if(p==="last")i.reverse();else if(p==="prev"||p==="next"){p==="prev"&&i.reverse();const v=i.indexOf(_.currentTarget);i=n.loop.value?io(i,v+1):i.slice(v+1)}ve(()=>ro(i))}}return(_,p)=>(f(),j(e(l),null,{default:E(()=>[y(e(_e),{tabindex:d.value?0:-1,"data-orientation":e(n).orientation.value,"data-active":_.active?"":void 0,"data-disabled":_.focusable?void 0:"",as:_.as,"as-child":_.asChild,onMousedown:p[0]||(p[0]=i=>{_.focusable?e(n).onItemFocus(x.value):i.preventDefault()}),onFocus:p[1]||(p[1]=i=>e(n).onItemFocus(x.value)),onKeydown:k},{default:E(()=>[de(_.$slots,"default")]),_:3},8,["tabindex","data-orientation","data-active","data-disabled","as","as-child"])]),_:3}))}}),Co=ko;const[gt,So]=At("ToggleGroupRoot");var Io=M({__name:"ToggleGroupRoot",props:{rovingFocus:{type:Boolean,required:!1,default:!0},disabled:{type:Boolean,required:!1,default:!1},orientation:{type:String,required:!1},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1},type:{type:String,required:!1},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1}},emits:["update:modelValue"],setup(s,{emit:r}){const n=s,g=r,{loop:x,rovingFocus:d,disabled:b,dir:l}=qt(n),k=lo(l),{forwardRef:_,currentElement:p}=Ue(),{modelValue:i,changeModelValue:v,isSingle:h}=$o(n,g),R=nt(p);return So({isSingle:h,modelValue:i,changeModelValue:v,dir:k,orientation:n.orientation,loop:x,rovingFocus:d,disabled:b}),(C,D)=>(f(),j(et(e(d)?e(uo):e(_e)),{"as-child":"",orientation:e(d)?C.orientation:void 0,dir:e(k),loop:e(d)?e(x):void 0},{default:E(()=>[y(e(_e),{ref:e(_),role:"group","as-child":C.asChild,as:C.as},{default:E(()=>[de(C.$slots,"default",{modelValue:e(i)}),e(R)&&C.name?(f(),j(Ye,{key:0,name:C.name,required:C.required,value:e(i)},null,8,["name","required","value"])):F("v-if",!0)]),_:3},8,["as-child","as"])]),_:3},8,["orientation","dir","loop"]))}}),To=Io,Eo=M({__name:"Toggle",props:{defaultValue:{type:Boolean,required:!1},modelValue:{type:[Boolean,null],required:!1,default:void 0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue"],setup(s,{emit:r}){const n=s,g=r,{forwardRef:x,currentElement:d}=Ue(),b=gt(null),l=Qe(n,"modelValue",g,{defaultValue:n.defaultValue,passive:n.modelValue===void 0});function k(){l.value=!l.value}const _=m(()=>l.value?"on":"off"),p=nt(d);return(i,v)=>(f(),j(e(_e),{ref:e(x),type:i.as==="button"?"button":void 0,"as-child":n.asChild,as:i.as,"aria-pressed":e(l),"data-state":_.value,"data-disabled":i.disabled?"":void 0,disabled:i.disabled,onClick:k},{default:E(()=>[de(i.$slots,"default",{modelValue:e(l),disabled:i.disabled,pressed:e(l),state:_.value}),e(p)&&i.name&&!e(b)?(f(),j(Ye,{key:0,type:"checkbox",name:i.name,value:e(l),required:i.required},null,8,["name","value","required"])):F("v-if",!0)]),_:3},8,["type","as-child","as","aria-pressed","data-state","data-disabled","disabled"]))}}),Do=Eo,Ro=M({__name:"ToggleGroupItem",props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(s){const r=s,n=gt(),g=m(()=>n.disabled?.value||r.disabled),x=m(()=>ct(n.modelValue.value,r.value)),{forwardRef:d}=Ue();return(b,l)=>(f(),j(et(e(n).rovingFocus.value?e(Co):e(_e)),De({"as-child":""},e(n).rovingFocus.value?{focusable:!g.value,active:x.value}:{}),{default:E(()=>[y(e(Do),De(r,{ref:e(d),disabled:g.value,"model-value":x.value,"onUpdate:modelValue":l[0]||(l[0]=k=>e(n).changeModelValue(b.value))}),{default:E(k=>[de(b.$slots,"default",qe(Ae(k)))]),_:3},16,["disabled","model-value"])]),_:3},16))}}),Bo=Ro;const Lo={class:"rounded-xl border border-border bg-card overflow-hidden","data-widget-section":"installation"},Oo={class:"px-6 py-5 border-b border-border flex flex-wrap items-start justify-between gap-4"},Vo={class:"font-heading font-bold text-sm"},zo={class:"text-xs text-muted-foreground mt-0.5"},No={class:"flex items-center gap-2.5"},Uo={for:"widget-enabled",class:"text-xs font-semibold"},qo={class:"px-6 py-6 space-y-5 min-w-0"},Ao={class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},Fo={class:"mt-2 flex items-center gap-2"},Po={class:"flex-1 min-w-0 break-all text-xs font-mono px-2.5 py-2 rounded-md bg-muted border border-border"},Wo=["aria-label"],jo={class:"text-[11px] text-muted-foreground mt-1.5"},Mo={class:"group/install"},Go={class:"cursor-pointer text-xs font-semibold text-primary"},Ho={class:"pt-5 space-y-5"},Ko={class:"flex items-center justify-between gap-3"},Jo={class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},Xo=["onClick"],Yo={class:"mt-2 px-4 py-3 rounded-lg bg-muted/40 border border-border overflow-x-auto text-xs font-mono leading-relaxed"},Zo={class:"text-[11px] text-muted-foreground"},Qo={class:"border-t border-border pt-4"},es={class:"cursor-pointer text-xs font-semibold"},ts={class:"pt-4 space-y-5"},os={class:"text-[11px] text-muted-foreground"},ss={class:"flex items-center justify-between gap-3"},as={class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},ns=["onClick"],is={class:"mt-2 px-4 py-3 rounded-lg bg-muted/40 border border-border overflow-x-auto text-xs font-mono leading-relaxed"},rs={class:"border-t border-border pt-4"},ls={class:"cursor-pointer text-xs font-semibold"},ds={class:"text-[11px] text-muted-foreground mt-4"},us={class:"flex justify-end mt-3"},cs={class:"mt-2 px-4 py-3 rounded-lg bg-muted/40 border border-border overflow-x-auto text-xs font-mono leading-relaxed"},gs={href:"https://help.feedlog.ai/developers/widget",target:"_blank",rel:"noopener noreferrer",class:"inline-flex items-center gap-1 text-xs font-semibold text-primary hover:underline underline-offset-4"},ps=`import jwt from 'jsonwebtoken'
2
3// Keep this endpoint behind your own sign-in. Never expose the secret.
4app.get('/api/feedlog-token', requireSignIn, (req, res) => {
5  const token = jwt.sign(
6    {
7      email: req.user.email,
8      name: req.user.name,
9      picture: req.user.avatar,
10      exp: Math.floor(Date.now() / 1000) + 60 * 60,
11    },
12    process.env.FEEDLOG_SSO_SECRET,
13    { algorithm: 'HS256' },
14  )
15  res.json({ token })
16})`,fs=M({__name:"WidgetInstallationSection",props:{baseUrl:{},enabled:{type:Boolean},saving:{type:Boolean}},emits:["toggle"],setup(s,{emit:r}){const n=s,g=r,{t:x}=Be(),d=T(null);let b;async function l(h,R){try{await navigator.clipboard.writeText(R),d.value=h,clearTimeout(b),b=setTimeout(()=>{d.value=null},1500)}catch{tt.error(x("settings.widget.copyFailed"))}}Fe(()=>clearTimeout(b));const k=m(()=>`import { createWidget } from '@feedlog/widget'
17
18createWidget({
19  baseUrl: ${JSON.stringify(n.baseUrl)},
20  theme: 'auto',
21})`),_=m(()=>`import { createWidget } from '@feedlog/widget'
22
23createWidget({
24  baseUrl: ${JSON.stringify(n.baseUrl)},
25  auth: {
26    getToken: async () => {
27      const res = await fetch('/api/feedlog-token')
28      if (res.status === 401) return null // Signed out.
29      if (!res.ok) throw new Error('temporary failure')
30      return (await res.json()).token ?? null
31    },
32    // The promise must settle after success, cancellation, or failure.
33    login: () => openYourLoginModalAndWaitUntilClosed(),
34  },
35  theme: 'auto',
36})`),p=m(()=>`import { createWidget, openWidget } from '@feedlog/widget'
37
38createWidget({
39  baseUrl: ${JSON.stringify(n.baseUrl)},
40})
41
42document.querySelector('#help-entry')?.addEventListener('click', openWidget)`),i=m(()=>[{key:"package",title:x("settings.widget.packageLabel"),code:"pnpm add @feedlog/widget"},{key:"basic",title:x("settings.widget.snippetLabel"),code:k.value}]),v=m(()=>[{key:"server",title:x("settings.widget.serverLabel"),code:ps},{key:"auth",title:x("settings.widget.clientLabel"),code:_.value}]);
42return(h,R)=>{const C=Ze,D=Ne;return f(),$("section",Lo,[t("div",Oo,[t("div",null,[t("h3",Vo,o(h.$t("settings.widget.installSection")),1),t("p",zo,o(h.$t("settings.widget.installDesc")),1)]),t("div",No,[y(C,{id:"widget-enabled","model-value":s.enabled,disabled:s.saving,"onUpdate:modelValue":R[0]||(R[0]=I=>g("toggle"))},null,8,["model-value","disabled"]),t("label",Uo,o(h.$t("settings.widget.enabledLabel")),1)])]),t("div",qo,[t("div",null,[t("p",Ao,o(h.$t("settings.widget.baseUrlLabel")),1),t("div",Fo,[t("code",Po,o(s.baseUrl),1),t("button",{type:"button",class:"size-9 rounded-md hover:bg-secondary flex items-center justify-center shrink-0 text-muted-foreground","aria-label":h.$t("settings.widget.copy"),onClick:R[1]||(R[1]=I=>l("url",s.baseUrl))},[y(D,{name:e(d)==="url"?"lucide:check":"lucide:copy",size:"14"},null,8,["name"])],8,Wo)]),t("p",jo,o(h.$t("settings.widget.enabledHint")),1)]),t("details",Mo,[t("summary",Go,o(h.$t("settings.widget.installInstructions")),1),t("div",Ho,[(f(!0),$(Q,null,se(e(i),I=>(f(),$("div",{key:I.key},[t("div",Ko,[t("p",Jo,o(I.title),1),t("button",{type:"button",class:"h-7 px-2.5 rounded-md border border-border text-[11px] font-semibold hover:bg-secondary",onClick:U=>l(I.key,I.code)},o(e(d)===I.key?h.$t("settings.widget.copied"):h.$t("settings.widget.copy")),9,Xo)]),t("pre",Yo,[t("code",null,o(I.code),1)])]))),128)),t("p",Zo,o(h.$t("settings.widget.guestInstallHint")),1),t("details",Qo,[t("summary",es,o(h.$t("settings.widget.authInstructions")),1),t("div",ts,[t("p",os,o(h.$t("settings.widget.serverHint")),1),(f(!0),$(Q,null,se(e(v),I=>(f(),$("div",{key:I.key},[t("div",ss,[t("p",as,o(I.title),1),t("button",{type:"button",class:"h-7 px-2.5 rounded-md border border-border text-[11px] font-semibold hover:bg-secondary",onClick:U=>l(I.key,I.code)},o(e(d)===I.key?h.$t("settings.widget.copied"):h.$t("settings.widget.copy")),9,ns)]),t("pre",is,[t("code",null,o(I.code),1)])]))),128))])]),t("details",rs,[t("summary",ls,o(h.$t("settings.widget.customEntryInstructions")),1),t("p",ds,o(h.$t("settings.widget.customEntryHint")),1),t("div",us,[t("button",{type:"button",class:"h-7 px-2.5 rounded-md border border-border text-[11px] font-semibold hover:bg-secondary",onClick:R[2]||(R[2]=I=>l("custom-entry",e(p)))},o(e(d)==="custom-entry"?h.$t("settings.widget.copied"):h.$t("settings.widget.copy")),1)]),t("pre",cs,[t("code",null,o(e(p)),1)])])])]),t("a",gs,[W(o(h.$t("settings.widget.installGuide"))+" ",1),y(D,{name:"lucide:arrow-up-right",size:"14","aria-hidden":"true"})])])])}}}),ms=Object.assign(fs,{__name:"WidgetInstallationSection"}),vs=M({__name:"ToggleGroup",props:{rovingFocus:{type:Boolean},disabled:{type:Boolean},orientation:{},dir:{},loop:{type:Boolean},asChild:{type:Boolean},as:{},name:{},required:{type:Boolean},type:{},modelValue:{},defaultValue:{},class:{type:[Boolean,null,String,Object,Array],default:void 0},variant:{default:void 0},size:{default:void 0},spacing:{default:0}},emits:["update:modelValue"],setup(s,{emit:r}){const n=s,g=r;Ft("toggleGroup",{variant:n.variant,size:n.size,spacing:n.spacing});const x=ot(n,"class","size","variant"),d=Pt(x,g);return(b,l)=>(f(),j(e(To),De({"data-slot":"toggle-group","data-size":s.size,"data-variant":s.variant,"data-spacing":s.spacing,style:{"--gap":s.spacing}},e(d),{class:e(st)("group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs",n.class)}),{default:E(k=>[de(b.$slots,"default",qe(Ae(k)))]),_:3},16,["data-size","data-variant","data-spacing","style","class"]))}}),bs=Wt("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3 outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",{variants:{variant:{default:"bg-transparent",outline:"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"},size:{default:"h-9 px-2 min-w-9",sm:"h-8 px-1.5 min-w-8",lg:"h-10 px-2.5 min-w-10"}},defaultVariants:{variant:"default",size:"default"}}),hs=M({__name:"ToggleGroupItem",props:{value:{},disabled:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},variant:{},size:{}},setup(s){const r=s,n=jt("toggleGroup"),g=ot(r,"class","size","variant"),x=Mt(g);return(d,b)=>(f(),j(e(Bo),De({"data-slot":"toggle-group-item","data-variant":e(n)?.variant||s.variant,"data-size":e(n)?.size||s.size,"data-spacing":e(n)?.spacing},e(x),{class:e(st)(e(bs)({variant:e(n)?.variant||s.variant,size:e(n)?.size||s.size}),"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10","data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l",r.class)}),{default:E(l=>[de(d.$slots,"default",qe(Ae(l)))]),_:3},16,["data-variant","data-size","data-spacing","class"]))}}),ys=["right","left"],Xe="right",re=20,le=0,pt=["none","collapse","hide"],_s="collapse",xs={class:"min-w-0 space-y-3","data-widget-preview":""},ws={class:"flex flex-wrap items-center justify-between gap-2"},$s={class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},ks={class:"inline-flex rounded-md border border-border bg-background p-0.5"},Cs=["aria-pressed","onClick"],Ss={key:0,class:"text-xs text-destructive",role:"alert"},Is=["data-device"],Ts={class:"h-16 px-6 border-b border-border bg-card flex items-center justify-between"},Es={class:"text-base font-heading font-bold"},Ds={key:0,class:"absolute inset-x-6 bottom-12 text-center text-sm text-muted-foreground"},Rs=["data-mode","data-side"],Bs=["aria-label"],Ls={key:0,class:"text-xs font-semibold [writing-mode:vertical-rl]"},Os=["aria-label"],Vs={class:"min-h-16 px-4 border-b border-border bg-card flex items-center gap-2.5 shrink-0"},zs={class:"size-7 shrink-0 flex items-center justify-center text-primary","aria-hidden":"true"},Ns=["src"],Us={key:1,class:"size-7 rounded-md shrink-0 grid place-items-center bg-primary text-primary-foreground font-heading font-bold text-[13px]"},qs={class:"flex-1 min-w-0 font-heading font-semibold text-[15.5px] truncate"},As=["aria-label"],Fs={class:"min-h-0 flex-1 overflow-y-auto bg-background p-3.5 [overflow-wrap:anywhere]"},Ps={class:"max-w-[88%] rounded-lg border border-border bg-card px-3 py-2.5 text-[13.5px]"},Ws={class:"px-3 py-2.5 bg-card shrink-0"},js={class:"rounded-md border border-border bg-card"},Ms=["placeholder","aria-label"],Gs={class:"flex items-center justify-between px-1.5 py-1"},Hs=["aria-label"],Ks={type:"button",disabled:"",class:"px-3.5 py-1.5 rounded-md bg-primary text-primary-foreground text-[12.5px] font-heading font-semibold disabled:opacity-40 disabled:cursor-default"},Js={class:"pt-1.5 pb-1.5 bg-card text-center text-[10.5px] text-muted-foreground shrink-0"},Xs={class:"text-center text-[11px] leading-5 text-muted-foreground"},Ys={role:"status"}
42,G=720,Zs=M({__name:"WidgetLauncherPreview",props:{alignment:{},bottomOffset:{},sideOffset:{},closeBehavior:{},enabled:{type:Boolean}},setup(s){const r=s,{t:n}=Be(),{data:g,error:x,refresh:d}=Gt("/api/widget/config",{server:!1},"$sNvP3JIQbb"),b=T("desktop"),l=T(null),k=T(null),_=T(null),p=T(.4),i=m(()=>b.value==="desktop"?900:390),v=T("button"),h=T(!1),R=T(null),C=T(null);let D=null,I=!1,U;function ee(){l.value&&(p.value=l.value.clientWidth/i.value)}Ee(()=>{U=new ResizeObserver(ee),l.value&&U.observe(l.value),ee()}),Fe(()=>U?.disconnect());const H=m(()=>g.value?{"--primary":g.value.branding.primary,"--primary-foreground":g.value.branding.primaryForeground}:{}),L=m(()=>g.value?.org.name||n("widget.thisProduct")),K=m(()=>g.value?.org.name.trim().charAt(0).toUpperCase()||"F"),q=m(()=>R.value?.side??r.alignment),V=m(()=>v.value==="tab"),O=m(()=>V.value?22:56);function ae(c){const w=Number(c);return String(c).trim()!==""&&Number.isSafeInteger(w)&&w>=0?w:re}const z=m(()=>{const c=V.value?0:R.value?re:Math.min(ae(r.sideOffset),i.value-112),w=Math.min(ae(r.bottomOffset),G-76);return{x:q.value==="left"?c:i.value-O.value-c,y:R.value?14+R.value.ratio*(G-70):G-56-Math.max(V.value?12:0,w)}}),X=m(()=>C.value??z.value),ne=m(()=>({left:`${X.value.x}px`,top:`${X.value.y}px`,width:`${O.value}px`,borderRadius:V.value?C.value?"8px":q.value==="left"?"0 8px 8px 0":"8px 0 0 8px":"28px"})),xe=m(()=>{if(b.value==="mobile")return{inset:"0"};const c=z.value.y-16-12,w=G-(z.value.y+56+16)-12,N=Math.min(680,c>=480?c:w>=480?w:G-24),Y=400,B=q.value==="left"?z.value.x:z.value.x+O.value-Y,Z=q.value==="left"?z.value.x+O.value+16:z.value.x-16-Y,te=c>=480||w>=480?B:Z;return{width:`${Y}px`,height:`${N}px`,left:`${Math.max(12,Math.min(i.value-Y-12,te))}px`,top:`${c>=480?z.value.y-16-N:w>=480?z.value.y+72:12}px`}}),ue=m(()=>r.enabled?v.value==="hidden"?n("settings.widget.previewState_hidden"):n("settings.widget.previewHint"):n("settings.widget.previewDisabled"));function P(c=!1){if(!D)return;const w=D.id;D.moved&&C.value&&!c&&(R.value={side:C.value.x+O.value/2<i.value/2?"left":"right",ratio:(C.value.y-14)/(G-70)}),D=null,C.value=null,k.value?.hasPointerCapture(w)&&k.value.releasePointerCapture(w)}function J(){P(!0),v.value="button",h.value=!1,R.value=null,I=!1}Oe(()=>[r.alignment,r.bottomOffset,r.sideOffset,r.closeBehavior,r.enabled],J),Oe(b,()=>{J(),ve(ee)});function we(c){c.button!==0||h.value||(D={id:c.pointerId,x:c.clientX,y:c.clientY,left:z.value.x,top:z.value.y,moved:!1},I=!1,k.value?.setPointerCapture(c.pointerId))}function ce(c){if(!D||D.id!==c.pointerId)return;const w=c.clientX-D.x,N=c.clientY-D.y;!D.moved&&Math.hypot(w,N)<8||(D.moved=!0,I=!0,C.value={x:Math.max(0,Math.min(i.value-O.value,D.left+w/p.value)),y:Math.max(14,Math.min(G-56,D.top+N/p.value))})}function ie(){if(I){I=!1;return}v.value="button",h.value=!h.value}function $e(){v.value=r.closeBehavior==="hide"?"hidden":"tab",h.value=!1,ve(()=>(v.value==="hidden"?_.value:k.value)?.focus())}function Le(c){if(c.key==="Escape"){P(!0);return}h.value||!["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"].includes(c.key)||(c.preventDefault(),R.value={side:c.key==="ArrowLeft"?"left":c.key==="ArrowRight"?"right":q.value,ratio:Math.max(0,Math.min(1,(z.value.y-14+(c.key==="ArrowUp"?-20:c.key==="ArrowDown"?20:0))/(G-70)))})}function ge(){h.value=!1,ve(()=>(v.value==="hidden"?_.value:k.value)?.focus())}return(c,w)=>{const N=Ne,Y=vo;return f(),$("div",xs,[t("div",ws,[t("p",$s,o(c.$t("settings.widget.previewTitle")),1),t("div",ks,[(f(),$(Q,null,se(["desktop","mobile"],B=>t("button",{key:B,type:"button",class:A(["h-6 px-2 rounded flex items-center gap-1.5 text-[11px] font-semibold transition-colors",e(b)===B?"bg-secondary text-primary":"text-muted-foreground hover:text-foreground"]),"aria-pressed":e(b)===B,onClick:Z=>b.value=B},[y(N,{name:B==="desktop"?"lucide:monitor":"lucide:smartphone",size:"13"},null,8,["name"]),W(o(c.$t(`settings.widget.preview_${B}`)),1)],10,Cs)),64))])]),e(x)?(f(),$("div",Ss,[W(o(c.$t("settings.widget.previewFailed"))+" ",1),t("button",{type:"button",class:"underline",onClick:w[0]||(w[0]=B=>e(d)())},o(c.$t("settings.widget.retry")),1)])):F("",!0),t("div",{class:A(["rounded-lg border border-border bg-muted/30 overflow-hidden mx-auto",e(b)==="mobile"?"max-w-[260px]":""])},[t("div",{ref_key:"frame",ref:l,class:"relative overflow-hidden",style:pe({height:`${G*e(p)}px`})},[t("div",{class:"preview-canvas absolute left-0 top-0 origin-top-left bg-background text-foreground overflow-hidden",style:pe({...e(H),width:`${e(i)}px`,height:`${G}px`,transform:`scale(${e(p)})`}),"data-device":e(b)},[t("div",Ts,[t("span",Es,o(c.$t("settings.widget.previewSite")),1),y(N,{name:"lucide:menu",size:"20",class:"text-muted-foreground"})]),w[4]||(w[4]=Ht('<div class="p-8 space-y-6" aria-hidden="true" data-v-36206878><div class="h-5 w-40 bg-muted rounded" data-v-36206878></div><div class="h-3 w-3/4 bg-muted rounded" data-v-36206878></div><div class="h-3 w-1/2 bg-muted rounded" data-v-36206878></div><div class="rounded-xl border border-border bg-card p-6 space-y-5 mt-8" data-v-36206878><div class="h-4 w-1/3 bg-muted rounded" data-v-36206878></div><div class="h-3 w-full bg-muted rounded" data-v-36206878></div><div class="h-3 w-2/3 bg-muted rounded" data-v-36206878></div></div></div>',1)),s.enabled?F("",!0):(f(),$("p",Ds,o(c.$t("settings.widget.previewDisabled")),1)),s.enabled&&e(v)!=="hidden"&&!(e(b)==="mobile"&&e(h))?(f(),$("div",{key:1,class:A(["preview-anchor absolute h-14 group",{dragging:e(C)}]),style:pe(e(ne)),"data-mode":e(v),"data-side":e(q)},[t("button",{ref_key:"launcher",ref:k,type:"button",class:A(["preview-launcher absolute inset-0 h-14 select-none touch-none border grid place-items-center focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary",e(V)?"bg-card text-primary border-border shadow-sm":"bg-primary text-primary-foreground border-transparent shadow-xl"]),style:pe({borderRadius:e(ne).borderRadius}),"aria-label":c.$t(e(V)?"settings.widget.previewRestore":"settings.widget.previewOpenLauncher"),onPointerdown:we,onPointermove:ce,onPointerup:w[1]||(w[1]=B=>P()),onPointercancel:w[2]||(w[2]=B=>P(!0)),onLostpointercapture:w[3]||(w[3]=B=>P(!0)),onKeydown:Le,onClick:ie},[e(V)?(f(),$("span",Ls,"Help")):(f(),j(N,{key:1,name:"lucide:square-pen",size:"26"}))],46,Bs),e(v)==="button"&&s.closeBehavior!=="none"&&!e(h)&&!e(C)?(f(),$("button",{key:0,t
42ype:"button",class:A(["preview-close absolute -top-5 size-11 grid place-items-center text-muted-foreground hover:text-foreground",e(q)==="right"?"-left-5":"-right-5"]),"aria-label":c.$t("settings.widget.previewCloseLauncher"),onClick:$e},[y(N,{name:"lucide:x",size:"18"})],10,Os)):F("",!0)],14,Rs)):F("",!0),s.enabled&&e(h)?(f(),$("div",{key:2,class:A(["absolute flex flex-col bg-background shadow-xl overflow-hidden",e(b)==="desktop"?"rounded-2xl":""]),style:pe(e(xe)),"data-preview-panel":"",onKeydown:be(ge,["esc"])},[t("header",Vs,[t("span",zs,[y(N,{name:"lucide:arrow-left",size:"17"})]),e(g)?.org.logo?(f(),$("img",{key:0,src:e(Kt)(e(g).org.logo),alt:"",class:"size-7 rounded-md object-cover shrink-0"},null,8,Ns)):(f(),$("span",Us,o(e(K)),1)),t("p",qs,o(c.$t("widget.agentTitle",{product:e(L)})),1),t("button",{type:"button",class:"size-6.5 rounded-full bg-secondary hover:opacity-80 transition-opacity flex items-center justify-center text-primary shrink-0","aria-label":c.$t("settings.widget.previewClosePanel"),onClick:ge},[y(N,{name:"lucide:x",size:"13"})],8,As)]),t("div",Fs,[t("p",Ps,o(c.$t("widget.greeting",{product:e(L)})),1)]),t("div",Ws,[t("div",js,[t("textarea",{readonly:"",tabindex:"-1",rows:"1",placeholder:c.$t("widget.placeholder"),"aria-label":c.$t("widget.placeholder"),class:"w-full min-h-12 max-h-[120px] px-3 py-2 bg-transparent text-[13.5px] leading-normal resize-none focus:outline-none"},null,8,Ms),t("div",Gs,[t("button",{type:"button",disabled:"",class:"h-6.5 w-7 rounded-md flex items-center justify-center text-muted-foreground disabled:cursor-default","aria-label":c.$t("widget.attachImage")},[y(N,{name:"lucide:image",size:"15"})],8,Hs),t("button",Ks,o(c.$t("widget.send")),1)])])]),t("p",Js,o(c.$t("board.poweredBy"))+"FeedLog ",1)],38)):F("",!0)],12,Is)],4)],2),t("div",Xs,[t("span",Ys,o(e(ue)),1),y(Y,{variant:"link",size:"xs",class:"ml-2 align-baseline text-[11px] font-normal text-muted-foreground underline hover:text-foreground","as-child":""},{default:E(()=>[t("button",{ref_key:"resetButton",ref:_,type:"button",onClick:J},o(c.$t("settings.widget.previewReset")),513)]),_:1})])])}}}),Qs=Object.assign(bo(Zs,[["__scopeId","data-v-36206878"]]),{__name:"WidgetLauncherPreview"}),ea={class:"px-6 py-3 border-t border-border bg-muted/30 flex flex-wrap items-center justify-end gap-3"},ta=["role"],oa=["disabled"],sa=["disabled"],aa=M({__name:"WidgetSaveBar",props:{dirty:{type:Boolean},saving:{type:Boolean},disabled:{type:Boolean},error:{},saved:{type:Boolean},savedHint:{}},emits:["cancel","save"],setup(s){return(r,n)=>(f(),$("div",ea,[t("p",{class:A(["text-xs mr-auto",s.error?"text-destructive":"text-muted-foreground"]),role:s.error?"alert":"status"},o(s.error||(s.dirty?r.$t("settings.unsavedChanges"):s.saved?s.savedHint||r.$t("settings.widget.saved"):"")),11,ta),s.dirty?(f(),$("button",{key:0,type:"button",class:"h-9 px-4 rounded-lg border border-border bg-background text-xs font-semibold hover:bg-secondary disabled:opacity-40",disabled:s.saving,onClick:n[0]||(n[0]=g=>r.$emit("cancel"))},o(r.$t("settings.widget.cancelChanges")),9,oa)):F("",!0),t("button",{type:"button",class:"h-9 px-4 rounded-lg bg-primary text-primary-foreground text-xs font-heading font-bold hover:opacity-90 disabled:opacity-40 disabled:cursor-not-allowed transition-all",disabled:s.disabled||!s.dirty,onClick:n[1]||(n[1]=g=>r.$emit("save"))},o(s.saving?r.$t("settings.saving"):r.$t("settings.saveChanges")),9,sa)]))}}),na=Object.assign(aa,{__name:"WidgetSaveBar"}),Re=180,fe=10,ia=[{id:"builtin-billing",scenario:"the user requests staff to execute or correct a charge, refund, or invoice requiring account access; exclude policy questions, how-to questions, and self-service payment troubleshooting",scenarioZh:"用户要求客服代办或纠正扣费、退款、发票,需要访问账户;不含政策咨询、操作指引和自助支付排查"},{id:"builtin-account-access",scenario:"the user needs staff to verify identity, unlock or restore a restricted account, or investigate suspected unauthorized access; exclude general login and password-reset instructions",scenarioZh:"用户需要客服核验身份、解锁或恢复受限账户,或调查疑似盗用;不含一般登录和密码重置指引"},{id:"builtin-privacy-legal",scenario:"the user submits a formal privacy or rights claim, or requests staff to delete or export private account data; exclude policy questions and instructions for self-service account deleti
42on",scenarioZh:"用户提出正式隐私或权利申诉,或要求客服代为删除、导出账户私密数据;不含政策咨询和自助注销指引"}],ra=ia.map(s=>s.id),la={class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},da=["placeholder","onKeydown"],ua={class:"flex items-start justify-between gap-3 mt-1.5"},ca={class:"text-[11px] text-muted-foreground leading-snug"},ga=["disabled"],pa=M({__name:"WidgetRuleDialog",props:He({initial:{}},{open:{type:Boolean,required:!0},openModifiers:{}}),emits:He(["submit"],["update:open"]),setup(s,{emit:r}){const n=s,g=r,x=Jt(s,"open"),d=T(""),b=T(null);Oe(x,i=>{i&&(d.value=n.initial??"",ve(()=>b.value?.focus()))});const l=m(()=>d.value.trim()),k=m(()=>l.value.length>Re),_=m(()=>l.value.length>0&&!k.value);function p(){_.value&&(g("submit",l.value),x.value=!1)}return(i,v)=>{const h=rt,R=ut,C=dt,D=lt,I=it;return f(),j(I,{open:x.value,"onUpdate:open":v[2]||(v[2]=U=>x.value=U)},{default:E(()=>[y(D,{class:"sm:max-w-lg"},{default:E(()=>[y(R,null,{default:E(()=>[y(h,{class:"font-heading"},{default:E(()=>[W(o(s.initial?i.$t("settings.widget.editRule"):i.$t("settings.widget.addRule")),1)]),_:1})]),_:1}),t("div",null,[t("label",la,o(i.$t("settings.widget.ruleLabel")),1),Se(t("textarea",{ref_key:"field",ref:b,"onUpdate:modelValue":v[0]||(v[0]=U=>me(d)?d.value=U:null),rows:"3",placeholder:i.$t("settings.widget.rulePlaceholder"),class:"mt-2 w-full px-3.5 py-2.5 rounded-lg border border-border bg-background text-sm resize-none focus:outline-none focus:border-primary transition-colors",onKeydown:be(Xt(p,["meta"]),["enter"])},null,40,da),[[Ie,e(d)]]),t("div",ua,[t("p",ca,o(i.$t("settings.widget.ruleHint")),1),t("span",{class:A(["text-[11px] tabular-nums shrink-0",e(k)?"text-red-600 font-semibold":"text-muted-foreground"])},o(e(l).length)+"/"+o(e(Re)),3)])]),y(C,null,{default:E(()=>[t("button",{class:"h-9 px-4 rounded-lg border border-border bg-background text-xs font-semibold hover:bg-secondary transition-colors",onClick:v[1]||(v[1]=U=>x.value=!1)},o(i.$t("settings.widget.cancel")),1),t("button",{disabled:!e(_),class:"h-9 px-4 rounded-lg bg-primary text-primary-foreground text-xs font-heading font-bold hover:opacity-90 disabled:opacity-40 disabled:cursor-not-allowed transition-all",onClick:p},o(i.$t("settings.widget.done")),9,ga)]),_:1})]),_:1})]),_:1},8,["open"])}}}),fa=Object.assign(pa,{__name:"WidgetRuleDialog"}),ma=14,he=7,ye=3650,va=Pe({id:Je().optional(),scenario:Je().trim().min(1,"Rule cannot be empty").max(Re,`Rule must be ${Re} characters or less`),enabled:at()}),ba=Pe({alignment:ze(ys),bottomOffset:Ve("Offset must be a whole number of pixels").min(le,`Offset must be at least ${le}px`),sideOffset:Ve("Offset must be a whole number of pixels").min(le,`Offset must be at least ${le}px`),closeBehavior:ze(pt)}),ha=Pe({enabled:at().optional(),supportEmail:Yt([Zt("Invalid support email"),Qt("")]).optional(),disabledBuiltins:Ke(ze(ra)).optional(),customRules:Ke(va).optional(),conversationRetentionDays:Ve("Retention must be a whole number of days").min(he,`Retention must be at least ${he} days`).max(ye,`Retention must be ${ye} days or less`).optional(),launcherConfig:ba.optional()});function ya(){const s=T(null),r=T(!0),n=T(!1),g=T(null);async function x(){r.value=!0,g.value=null;try{s.value=await $fetch("/api/admin/widget")}catch(p){g.value=p?.data?.message||"Failed to load widget settings"}finally{r.value=!1}}async function d(p){n.value=!0;try{return s.value=await $fetch("/api/admin/widget",{method:"PATCH",body:p}),null}catch(i){return i?.data?.message||"Failed to save"}finally{n.value=!1}}const{locale:b}=Be(),l=m(()=>{const p=s.value;if(!p)return[];const i=b.value.startsWith("zh");return[...p.rules.builtins.map(v=>({id:v.id,scenario:i?v.scenarioZh:v.scenario,enabled:v.enabled,builtin:!0})),...p.rules.custom.map(v=>({id:v.id,scenario:v.scenario,enabled:v.enabled,builtin:!1}))]});function k(p){return{disabledBuiltins:p.filter(i=>i.builtin&&!i.enabled).map(i=>i.id)}}function _(p){return{customRules:p.filter(i=>!i.builtin).map(i=>({id:i.id.startsWith("new-")?void 0:i.id,scenario:i.scenario,enabled:i.enabled}))}}return{settings:s,loading:r,saving:n,error:g,refresh:x,save:d,allRules:l,builtinsPatch:k,customPatch:_}}const _a={class:"flex flex-col h-full"},xa={class:"h-16 px-6 border-b border-border flex items-center shrink-0 bg-card"},wa={class:"font-heading text-lg font-bold"},$a={class:"text-xs text-muted-foreground"},ka={class:"flex-1 overflow-y-auto"},Ca={class:"max-w-4xl mx-auto px-4 sm:px-6 py-8 space-y-6"},Sa={key:0,class:"text-sm text-muted-foreground"},Ia={key:1,class:"text-sm text-muted-foreground"},Ta={key:2,class:"text-sm text-red-600"},Ea={class:"rounded-xl border border-border bg-card overflow-hidden","data-widget-section":"lau
42ncher"},Da={class:"px-6 py-5 border-b border-border flex flex-wrap items-start justify-between gap-3"},Ra={class:"font-heading font-bold text-sm"},Ba={class:"text-xs text-muted-foreground mt-0.5"},La=["disabled"],Oa={class:"px-6 py-6 grid lg:grid-cols-[270px_minmax(0,1fr)] gap-6 items-start"},Va=["disabled"],za={id:"launcher-alignment-label",class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},Na={class:"grid grid-cols-2 gap-4 mt-5"},Ua=["for"],qa={class:"mt-2 flex items-center gap-2"},Aa=["id","onUpdate:modelValue","min","aria-invalid","aria-describedby"],Fa={class:"shrink-0 whitespace-nowrap text-xs text-muted-foreground"},Pa=["id"],Wa={class:"text-[11px] text-muted-foreground mt-3"},ja={class:"pt-5 border-t border-border"},Ma={for:"launcher-close-behavior",class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},Ga={class:"block min-w-0"},Ha={class:"block font-medium leading-5"},Ka={class:"mt-0.5 block text-[11px] leading-snug opacity-70"},Ja={id:"launcher-close-hint",class:"text-[11px] text-muted-foreground mt-3"},Xa={class:"rounded-xl border border-border bg-card overflow-hidden","data-widget-section":"assistant"},Ya={class:"px-6 py-5 border-b border-border"},Za={class:"font-heading font-bold text-sm"},Qa={class:"text-xs text-muted-foreground mt-0.5"},en=["disabled"],tn={for:"widget-support-email",class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},on=["placeholder","aria-invalid"],sn={class:"pt-5 border-t border-border"},an={class:"flex flex-wrap items-center justify-between gap-4"},nn={class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},rn={class:"text-[11px] text-muted-foreground mt-1"},ln={class:"flex items-center gap-3"},dn={key:0,class:"text-[11px] text-muted-foreground tabular-nums"},un={class:"mt-4 divide-y divide-border rounded-lg border border-border overflow-hidden"},cn=["for"],gn={key:0,class:"ml-1.5 align-middle text-[10px] font-bold uppercase tracking-wider bg-secondary text-primary px-1.5 py-0.5 rounded"},pn={key:0,class:"flex items-center gap-1 shrink-0 ml-auto"},fn=["aria-label","onClick"],mn=["aria-label","onClick"],vn={class:"pt-5 border-t border-border"},bn={for:"widget-retention",class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},hn={class:"mt-2 flex items-center gap-2"},yn=["min","max","aria-invalid"],_n={class:"text-sm text-muted-foreground"},zn=M({__name:"widget",setup(s){const{t:r,locale:n}=Be(),g=yo(),x=m(()=>g.value.role==="owner"||g.value.role==="manager"),{settings:d,loading:b,saving:l,error:k,refresh:_,save:p,allRules:i,builtinsPatch:v,customPatch:h}=ya(),{confirm:R}=oo(),C=T(null),D=T(null),I=T(null),U=T(!1),ee=T(!1),H=T(Xe),L=to({bottom:re,side:re}),K=T(_s),q=T(""),V=T(ma),O=T([]);function ae(){d.value&&(H.value=d.value.launcherConfig.alignment,L.bottom=d.value.launcherConfig.bottomOffset,L.side=d.value.launcherConfig.sideOffset,K.value=d.value.launcherConfig.closeBehavior,D.value=null,U.value=!1)}function z(){d.value&&(q.value=d.value.supportEmail??"",V.value=d.value.conversationRetentionDays,O.value=i.value.map(a=>({...a})),I.value=null,ee.value=!1)}Ee(async()=>{x.value&&(await _(),ae(),z())});function X(a){return String(a).trim()!==""&&Number.isSafeInteger(Number(a))&&Number(a)>=le}const ne=m(()=>Object.values(L).every(X)),xe=m(()=>({alignment:H.value,bottomOffset:Number(L.bottom),sideOffset:Number(L.side),closeBehavior:K.value})),ue=m(()=>!!d.value&&(!ne.value||Object.entries(xe.value).some(([a,S])=>S!==d.value.launcherConfig[a]))),P=m(()=>String(V.value).trim()!==""&&Number.isInteger(Number(V.value))&&Number(V.value)>=he&&Number(V.value)<=ye),J=m(()=>ha.pick({supportEmail:!0}).safeParse({supportEmail:q.value.trim()}).success),we=m(()=>({supportEmail:q.value.trim(),conversationRetentionDays:Number(V.value),...v(O.value),...h(O.value)})),ce=m(()=>!!d.value&&(!P.value||JSON.stringify(we.value)!==JSON.stringify({supportEmail:d.value.supportEmail??"",conversationRetentionDays:d.value.conversationRetentionDays,...v(i.value),...h(i.value)}))),ie=m(()=>O.value.filter(a=>a.enabled).length),$e=m(()=>ie.value>=fe),Le=m(()=>ie.value>=fe-2),ge=m(()=>J.value&&P.value&&ie.value<=fe);
42async function c(){l.value||!ue.value||!ne.value||(C.value="launcher",D.value=await p({launcherConfig:xe.value}),D.value||(ae(),U.value=!0),C.value=null)}async function w(){l.value||!ce.value||!ge.value||(C.value="assistant",I.value=await p(we.value),I.value||(z(),ee.value=!0),C.value=null)}async function N(){if(l.value||!d.value)return;C.value="enabled";const a=await p({enabled:!d.value.enabled});a&&tt.error(a),C.value=null}function Y(){H.value=Xe,L.bottom=re,L.side=re,D.value=null}const B=T(!1),Z=T(!1),te=T(null),ft=m(()=>O.value.find(a=>a.id===te.value)?.scenario);function mt(){if($e.value){B.value=!0;return}te.value=null,Z.value=!0}function vt(a){te.value=a,Z.value=!0}function bt(a){if(te.value){const S=O.value.find(oe=>oe.id===te.value);S&&(S.scenario=a)}else O.value.push({id:`new-${crypto.randomUUID()}`,scenario:a,enabled:!0,builtin:!1})}function ht(a){const S=O.value.find(oe=>oe.id===a);if(S){if(!S.enabled&&$e.value){B.value=!0;return}S.enabled=!S.enabled}}function yt(a){O.value=O.value.filter(S=>S.id!==a)}function We(a){const S=a.builtin&&d.value?.rules.builtins.find(oe=>oe.id===a.id);return S?n.value.startsWith("zh")?S.scenarioZh:S.scenario:a.scenario}const je=m(()=>ue.value||ce.value);eo(async()=>l.value?!1:je.value?R({title:r("settings.widget.leaveTitle"),description:r("settings.widget.leaveDescription"),confirmText:r("settings.widget.leaveDiscard"),cancelText:r("settings.widget.leaveKeep"),variant:"destructive"}):!0);function Me(a){!je.value&&!l.value||(a.preventDefault(),a.returnValue="")}return Ee(()=>window.addEventListener("beforeunload",Me)),Fe(()=>window.removeEventListener("beforeunload",Me)),(a,S)=>{const oe=ms,ke=Ne,_t=hs,xt=vs,wt=po,$t=go,kt=mo,Ct=fo,St=co,It=Qs,Ge=na,Tt=Ze,Et=fa,Dt=rt,Rt=ho,Bt=ut,Lt=dt,Ot=lt,Vt=it;return f(),$("div",_a,[t("header",xa,[t("div",null,[t("h2",wa,o(a.$t("settings.widget.title")),1),t("p",$a,o(a.$t("settings.widget.subtitle")),1)])]),t("div",ka,[t("div",Ca,[e(x)?e(b)?(f(),$("p",Ia,o(a.$t("settings.loading")),1)):e(k)?(f(),$("p",Ta,o(e(k)),1)):e(d)?(f(),$(Q,{key:3},[y(oe,{"base-url":e(d).baseUrl,enabled:e(d).enabled,saving:e(l),onToggle:N},null,8,["base-url","enabled","saving"]),t("section",Ea,[t("div",Da,[t("div",null,[t("h3",Ra,o(a.$t("settings.widget.placementSection")),1),t("p",Ba,o(a.$t("settings.widget.placementDesc")),1)]),t("button",{type:"button",class:"h-8 px-3 rounded-md border border-border bg-background hover:bg-secondary transition-colors flex items-center gap-1.5 text-xs font-semibold disabled:opacity-50",disabled:e(l),onClick:Y},[y(ke,{name:"lucide:rotate-ccw",size:"14"}),W(o(a.$t("settings.widget.resetPlacement")),1)],8,La)]),t("div",Oa,[t("fieldset",{disabled:e(l),class:"min-w-0 space-y-6"},[t("div",null,[t("p",za,o(a.$t("settings.widget.alignLabel")),1),y(xt,{type:"single",spacing:1,class:"mt-2 gap-0 rounded-lg border border-border bg-background p-1","model-value":e(H),disabled:e(l),"aria-labelledby":"launcher-alignment-label","onUpdate:modelValue":S[0]||(S[0]=u=>{(u==="left"||u==="right")&&(H.value=u)})},{default:E(()=>[(f(),$(Q,null,se(["left","right"],u=>y(_t,{key:u,value:u,class:"h-8 rounded-md px-3 text-xs font-semibold text-muted-foreground transition-colors hover:bg-transparent hover:text-foreground data-[state=on]:bg-primary data-[state=on]:text-primary-foreground disabled:cursor-not-allowed"},{default:E(()=>[W(o(a.$t(`settings.widget.align_${u}`)),1)]),_:2},1032,["value"])),64))]),_:1},8,["model-value","disabled"]),t("div",Na,[(f(),$(Q,null,se(["bottom","side"],u=>t("div",{key:u,class:"min-w-0"},[t("label",{for:`launcher-${u}-offset`,class:"text-[11px] font-bold uppercase tracking-wider text-muted-foreground"},o(a.$t(u==="bottom"?"settings.widget.offsetLabel":`settings.widget.sideOffsetLabel_${e(H)}`)),9,Ua),t("div",qa,[Se(t("input",{id:`launcher-${u}-offset`,"onUpdate:modelValue":Ce=>e(L)[u]=Ce,type:"number",min:e(le),step:"1",class:A(["min-w-16 w-0 flex-1 h-10 px-3 rounded-lg border bg-background text-sm tabular-nums focus:outline-none focus:border-primary transition-colors",X(e(L)[u])?"border-border":"border-destructive"]),"aria-invalid":!X(e(L)[u]),"aria-describedby":X(e(L)[u])?void 0:`launcher-${u}-error`,onKeydown:be(c,["enter"])},null,42,Aa),[[Ie,e(L)[u]]]),t("span",Fa,o(a.$t("settings.widget.offsetUnit")),1)]),X(e(L)[u])?F("",!0):(f(),$("p",{key:0,id:`launcher-${u}-error`,class:"text-[11px] text-destructive mt-2",role:"alert"},o(a.$t("settings.widget.offsetInvalid")),9,Pa))])),64))]),t("p",Wa,o(a.$t("settings.widget.placementHint")),1)]),t("div",ja,[t("label",Ma,o(a.$t("settings.widget.closeBehaviorLabel")),1),y(St,{"model-value":e(K),disabled:e(l),"onUpdate:modelValue":S[1]||(S[1]=u=>{(u==="none"||u==="collapse"||u==="hide")&&(K.value=u)})},{default:E(()=>[y($t,{id:"launcher-close-behavior",class:"mt-2 w-full data-[size=default]:h-10 rounded-lg border-border bg-background text-xs","aria-describedby":"launcher-close-hint"},{default:E(()=>[y(wt,null,{default:E(()=>[W(o(a.$t(`settings.widget.closeBehavior_${e(K)}`)),1)]),_:1})]),_:1}),y(Ct,{class:"max-w-[calc(100vw-2rem)]"},{default:E(()=>[(f(!0),$(Q,null,se(e(pt),u=>(f(),j(kt,{key:u,value:u,"text-value":a.$t(`settings.widget.closeBehavior_${u}`),class:"py-2.5 text-xs"},{default:E(()=>[t("span",Ga,[t("span",Ha,o(a.$t(`settings.widget.closeBehavior_${u}`)),1),t("span",Ka,o(a.$t(`settings.widget.closeBehaviorHint_${u}`)),1)])]),_:2},1032,["value","text-value"]))),128))]),_:1})]),_:1},8,["model-value","disabled"]),t("p",Ja,o(a.$t(`settings.widget.closeBehaviorHint_${e(K)}`)),1)])],8,Va),y(It,{class:"border-t border-border pt-6 lg:border-t-0 lg:border-l lg:pl-6 lg:pt-0",alignment:e(H),"bottom-offset":e(L).bottom,"side-offset":e(L).side,"close-behavior":e(K),enabled:e(d).enabled},null,8,["alignment","bottom-offset","side-offset","close-behavior","enabled"])]),y(Ge,{dirty:e(ue),saving:e(C)==="launcher",disabled:e(l)||!e(ne),error:e(D),saved:e(U),"saved-hint":a.$t("settings.widget.launcherSavedHint"),onCancel:ae,onSave:c},null,8,["dirty","saving","disabled","error","saved","saved-hint"])]),t("section",Xa,[t("div",Ya,[t("h3",Za,o(a.$t("settings.widget.supportSection")),1),t("p",Qa,o(a.$t("settings.widget.supportDesc")),1
42)]),t("fieldset",{disabled:e(l),class:"px-6 py-6 space-y-6 min-w-0"},[t("div",null,[t("label",tn,o(a.$t("settings.widget.emailLabel")),1),Se(t("input",{id:"widget-support-email","onUpdate:modelValue":S[2]||(S[2]=u=>me(q)?q.value=u:null),type:"email",placeholder:a.$t("settings.widget.emailPlaceholder"),class:A(["mt-2 w-full min-w-0 h-10 px-3 rounded-lg border bg-background text-sm focus:outline-none focus:border-primary transition-colors",e(J)?"border-border":"border-destructive"]),"aria-invalid":!e(J),onKeydown:be(w,["enter"])},null,42,on),[[Ie,e(q)]]),t("p",{class:A(["text-[11px] mt-1.5",e(J)?"text-muted-foreground":"text-destructive"])},o(a.$t(e(J)?"settings.widget.emailHint":"settings.widget.invalidEmail")),3)]),t("div",sn,[t("div",an,[t("div",null,[t("p",nn,o(a.$t("settings.widget.rulesLabel")),1),t("p",rn,o(a.$t("settings.widget.rulesHint")),1)]),t("div",ln,[e(Le)?(f(),$("span",dn,o(a.$t("settings.widget.activeCount",{count:e(ie),max:e(fe)})),1)):F("",!0),t("button",{type:"button",class:"h-8 px-3 rounded-lg border border-border bg-background text-xs font-semibold hover:bg-secondary transition-colors flex items-center gap-1.5",onClick:mt},[y(ke,{name:"lucide:plus",size:"13"}),W(o(a.$t("settings.widget.addRule")),1)])])]),t("ul",un,[(f(!0),$(Q,null,se(e(O),u=>(f(),$("li",{key:u.id,class:"px-4 py-3 flex flex-wrap items-start gap-3 bg-background"},[y(Tt,{id:`widget-rule-${u.id}`,"model-value":u.enabled,disabled:e(l),class:"mt-0.5","aria-label":We(u),"onUpdate:modelValue":Ce=>ht(u.id)},null,8,["id","model-value","disabled","aria-label","onUpdate:modelValue"]),t("label",{for:`widget-rule-${u.id}`,class:A(["flex-1 min-w-24 text-xs leading-relaxed break-words",u.enabled?"":"text-muted-foreground"])},[W(o(We(u)),1),u.builtin?(f(),$("span",gn,o(a.$t("settings.widget.builtinBadge")),1)):F("",!0)],10,cn),u.builtin?F("",!0):(f(),$("div",pn,[t("button",{type:"button",class:"size-8 rounded-md hover:bg-secondary flex items-center justify-center text-muted-foreground","aria-label":a.$t("settings.widget.editRule"),onClick:Ce=>vt(u.id)},[y(ke,{name:"lucide:pencil",size:"13"})],8,fn),t("button",{type:"button",class:"size-8 rounded-md hover:bg-secondary flex items-center justify-center text-muted-foreground hover:text-destructive","aria-label":a.$t("settings.widget.deleteConfirm"),onClick:Ce=>yt(u.id)},[y(ke,{name:"lucide:trash-2",size:"13"})],8,mn)]))]))),128))])]),t("div",vn,[t("label",bn,o(a.$t("settings.widget.retentionLabel")),1),t("div",hn,[Se(t("input",{id:"widget-retention","onUpdate:modelValue":S[3]||(S[3]=u=>me(V)?V.value=u:null),type:"number",min:e(he),max:e(ye),step:"1",class:A(["w-28 h-10 px-3 rounded-lg border bg-background text-sm tabular-nums focus:outline-none focus:border-primary transition-colors",e(P)?"border-border":"border-destructive"]),"aria-invalid":!e(P),onKeydown:be(w,["enter"])},null,42,yn),[[Ie,e(V)]]),t("span",_n,o(a.$t("settings.widget.retentionUnit")),1)]),t("p",{class:A(["text-[11px] mt-1.5",e(P)?"text-muted-foreground":"text-destructive"])},o(e(P)?a.$t("settings.widget.retentionHint"):a.$t("settings.widget.retentionRange",{min:e(he),max:e(ye)})),3)])],8,en),y(Ge,{dirty:e(ce),saving:e(C)==="assistant",disabled:e(l)||!e(ge),error:e(I),saved:e(ee),onCancel:z,onSave:w},null,8,["dirty","saving","disabled","error","saved"])])],64)):F("",!0):(f(),$("p",Sa,o(a.$t("settings.widget.ownerOnly")),1))])]),y(Et,{open:e(Z),"onUpdate:open":S[4]||(S[4]=u=>me(Z)?Z.value=u:null),initial:e(ft),onSubmit:bt},null,8,["open","initial"]),y(Vt,{open:e(B),"onUpdate:open":S[6]||(S[6]=u=>me(B)?B.value=u:null)},{default:E(()=>[y(Ot,{class:"sm:max-w-sm"},{default:E(()=>[y(Bt,null,{default:E(()=>[y(Dt,{class:"font-heading"},{default:E(()=>[W(o(a.$t("settings.widget.limitTitle")),1)]),_:1}),y(Rt,null,{default:E(()=>[W(o(a.$t("settings.widget.limitDesc",{max:e(fe)})),1)]),_:1})]),_:1}),y(Lt,null,{default:E(()=>[t("button",{type:"button",class:"h-9 px-4 rounded-lg bg-primary text-primary-foreground text-xs font-heading font-bold hover:opacity-90",onClick:S[5]||(S[5]=u=>B.value=!1)},o(a.$t("settings.widget.gotIt")),1)]),_:1})]),_:1})]),_:1},8,["open"])])}}});
42export{zn as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.