hunian commited on
Commit ·
9ef8a08
1
Parent(s): 7083a6e
Refactor code structure for improved readability and maintainability
Browse files- dist/frontend/assets/{FileDropZone-CA8QmgeV.js → FileDropZone-Bnye6SLQ.js} +1 -1
- dist/frontend/assets/{index-B_uzSks3.js → index-BVdyMB5y.js} +1 -1
- dist/frontend/assets/{index-DuJHIIAm.js → index-CstZx59R.js} +1 -1
- dist/frontend/assets/{index-CYltYunp.js → index-D3CEv5ex.js} +2 -2
- dist/frontend/assets/index-DH3iE3Xn.css +1 -0
- dist/frontend/assets/index-DfP-YqFs.css +0 -1
- dist/frontend/assets/{index-JYrcwpXe.js → index-S_ho_fSD.js} +1 -1
- dist/frontend/assets/{index-BmzOyGUN.js → index-glrVO3jG.js} +0 -0
- dist/frontend/assets/{index-ClOqV94C.js → index-qBHqhlLD.js} +1 -1
- dist/frontend/assets/{select-DuJYwYQS.js → select-DU-WcEOz.js} +0 -0
- dist/frontend/assets/{ui-3Ja5Lmtv.js → ui-DGAKiEyf.js} +21 -16
- dist/frontend/index.html +3 -3
- frontend/src/components/features/InstallModal.tsx +1 -1
- frontend/src/components/layout/Layout.tsx +25 -16
- frontend/src/components/layout/Navbar.tsx +23 -7
- frontend/src/stores/uiStore.ts +9 -1
- skills-lock.json +30 -0
- 需求.md +0 -596
dist/frontend/assets/{FileDropZone-CA8QmgeV.js → FileDropZone-Bnye6SLQ.js}
RENAMED
|
@@ -1 +1 @@
|
|
| 1 |
-
import{j as n}from"./query-BVy6DjHf.js";import{r as t}from"./vendor-BrxV5zWv.js";import{c as i}from"./index-
|
|
|
|
| 1 |
+
import{j as n}from"./query-BVy6DjHf.js";import{r as t}from"./vendor-BrxV5zWv.js";import{c as i}from"./index-glrVO3jG.js";import{U as D}from"./ui-DGAKiEyf.js";function y({accept:m,multiple:c=!1,onFilesSelected:o,description:u,disabled:r=!1,className:g}){const[s,f]=t.useState(!1),l=t.useRef(null),h=t.useCallback(e=>{e.preventDefault(),r||f(!0)},[r]),x=t.useCallback(e=>{e.preventDefault(),f(!1)},[]),p=t.useCallback(e=>{if(e.preventDefault(),f(!1),r)return;const a=Array.from(e.dataTransfer.files);a.length>0&&o(c?a:[a[0]])},[r,c,o]),d=t.useCallback(()=>{var e;r||(e=l.current)==null||e.click()},[r]),v=t.useCallback(e=>{const a=Array.from(e.target.files||[]);a.length>0&&o(a),l.current&&(l.current.value="")},[o]);return n.jsxs("div",{className:i("relative border-2 border-dashed rounded-xl p-8 text-center cursor-pointer transition-all duration-200","bg-gradient-to-b from-teal-50/30 to-cyan-50/20",s&&"border-teal-400 bg-teal-50/50 scale-[1.02]",!s&&"border-teal-200/50 hover:border-teal-300/70 hover:bg-teal-50/40",r&&"opacity-50 cursor-not-allowed",g),onDragOver:h,onDragLeave:x,onDrop:p,onClick:d,children:[n.jsx("div",{className:i("mx-auto mb-4 h-12 w-12 rounded-xl flex items-center justify-center","bg-gradient-to-br from-teal-500 to-cyan-600","shadow-lg shadow-teal-500/20","transition-transform duration-200",s&&"scale-110"),children:n.jsx(D,{className:"h-6 w-6 text-white"})}),n.jsx("p",{className:i("text-sm font-medium mb-1 transition-colors",s?"text-teal-700":"text-gray-700"),children:s?"松开以上传文件":"点击或拖放文件到此处"}),u&&n.jsx("p",{className:"text-xs text-teal-600/60",children:u}),n.jsx("input",{ref:l,type:"file",accept:m,multiple:c,onChange:v,className:"hidden",disabled:r})]})}export{y as F};
|
dist/frontend/assets/{index-B_uzSks3.js → index-BVdyMB5y.js}
RENAMED
|
@@ -1 +1 @@
|
|
| 1 |
-
import{j as e}from"./query-BVy6DjHf.js";import{r as l}from"./vendor-BrxV5zWv.js";import{C as d,a as m,b as x,d as A,A as I,e as _,i as f,L as v,j as b,E as $,B as g}from"./index-
|
|
|
|
| 1 |
+
import{j as e}from"./query-BVy6DjHf.js";import{r as l}from"./vendor-BrxV5zWv.js";import{C as d,a as m,b as x,d as A,A as I,e as _,i as f,L as v,j as b,E as $,B as g}from"./index-glrVO3jG.js";import{F as L}from"./FileDropZone-Bnye6SLQ.js";import{F as z,b as B,A as M,u as C,y as P,D as U,T as O,I as V,V as H,s as R}from"./ui-DGAKiEyf.js";const p="/plugins/file_cache_plugin/api";function Q(){const[c,E]=l.useState([]),[h,N]=l.useState("temp"),[o,w]=l.useState(null),[F,y]=l.useState(!1),t=(s,a)=>{w({type:s,text:a}),setTimeout(()=>w(null),3e3)},n=l.useCallback(async()=>{try{const s=await fetch(`${p}/list`);if(!s.ok)throw new Error;const a=await s.json();E(a.files||[])}catch(s){console.error("Failed to load file list",s)}},[]);l.useEffect(()=>{n();const s=setInterval(n,3e4);return()=>clearInterval(s)},[n]);const T=async s=>{if(s.length===0)return;const a=s[0];y(!0),t("error","上传中...");const r=new FormData;r.append("file",a),r.append("file_type",h);try{const i=await fetch(`${p}/upload`,{method:"POST",body:r});if(!i.ok){const u=await i.json();throw new Error(u.detail)}t("success","上传成功"),n()}catch(i){const u=i instanceof Error?i.message:"上传失败";t("error",u)}y(!1)},k=async s=>{const a=`${window.location.origin}${p}/file/${s}`;try{await navigator.clipboard.writeText(a),t("success","已复制")}catch{t("error","复制失败")}},D=async s=>{if(window.confirm("确定要删除此文件吗?"))try{if(!(await fetch(`${p}/file/${s}`,{method:"DELETE"})).ok)throw new Error;t("success","文件已删除"),n()}catch{t("error","删除失败")}},S=s=>{var r;const a=((r=s.split(".").pop())==null?void 0:r.toLowerCase())||"";return["jpg","jpeg","png","gif","bmp","webp"].includes(a)?e.jsx(V,{className:"h-4 w-4"}):["mp4","avi","mov","mkv","flv","wmv","webm"].includes(a)?e.jsx(H,{className:"h-4 w-4"}):["mp3","wav","aac","flac","ogg","m4a"].includes(a)?e.jsx(R,{className:"h-4 w-4"}):e.jsx(C,{className:"h-4 w-4"})},j={total:c.length,temp:c.filter(s=>s.type==="temp").length,permanent:c.filter(s=>s.type==="permanent").length};return e.jsxs("div",{className:"space-y-6",children:[e.jsx(d,{children:e.jsxs(m,{children:[e.jsxs(x,{className:"flex items-center gap-2",children:[e.jsx(z,{className:"h-5 w-5"}),"文件缓存管理"]}),e.jsx(A,{children:"上传和管理你的文件,支持图片、视频、音频、文档"})]})}),o&&e.jsxs(I,{variant:o.type==="error"?"destructive":"default",children:[o.type==="success"?e.jsx(B,{className:"h-4 w-4"}):e.jsx(M,{className:"h-4 w-4"}),e.jsx(_,{children:o.text})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[e.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[e.jsxs(d,{children:[e.jsx(m,{className:"pb-3",children:e.jsx(x,{className:"text-base",children:"上传文件"})}),e.jsxs(f,{className:"space-y-4",children:[e.jsx(L,{accept:"image/*,video/*,audio/*,.md,.txt,.pdf,.doc,.docx",multiple:!1,onFilesSelected:T,description:"支持图片、视频、音频、文档文件",disabled:F}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(v,{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"radio",name:"fileType",checked:h==="temp",onChange:()=>N("temp"),className:"h-4 w-4"}),e.jsx("span",{className:"text-sm",children:"临时文件"}),e.jsx(b,{variant:"secondary",className:"text-xs",children:"8小时后删除"})]}),e.jsxs(v,{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"radio",name:"fileType",checked:h==="permanent",onChange:()=>N("permanent"),className:"h-4 w-4"}),e.jsx("span",{className:"text-sm",children:"永久文件"})]})]})]})]}),e.jsxs(d,{children:[e.jsx(m,{className:"pb-3",children:e.jsx(x,{className:"text-base",children:"文件列表"})}),e.jsx(f,{children:c.length===0?e.jsx($,{icon:e.jsx(C,{className:"h-8 w-8"}),title:"暂无文件",description:"上传文件后,它们将显示在这里"}):e.jsx("div",{className:"space-y-3",children:c.map(s=>e.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"h-8 w-8 rounded-lg bg-muted flex items-center justify-center",children:S(s.name)}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"font-medium text-sm truncate",title:s.name,children:s.name}),e.jsx("p",{className:"text-xs text-muted-foreground",children:new Date(s.created).toLocaleString("zh-CN")})]}),e.jsx(b,{variant:s.type==="temp"?"secondary":"default",children:s.type==="temp"?"临时":"永久"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(g,{variant:"outline",size:"sm",onClick:()=>k(s.file_id),children:[e.jsx(P,{className:"h-3 w-3 mr-1"}),"复制"]}),e.jsx(g,{variant:"outline",size:"sm",asChild:!0,children:e.jsx("a",{href:s.url,download:!0,children:e.jsx(U,{className:"h-3 w-3"})})}),e.jsx(g,{variant:"ghost",size:"sm",onClick:()=>D(s.file_id),children:e.jsx(O,{className:"h-3 w-3"})})]})]},s.file_id))})})]})]}),e.jsx("div",{className:"space-y-4",children:e.jsxs(d,{children:[e.jsx(m,{className:"pb-3",children:e.jsx(x,{className:"text-base",children:"统计概览"})}),e.jsxs(f,{className:"space-y-4",children:[e.jsxs("div",{className:"p-3 bg-muted/30 rounded-lg",children:[e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:"总文件数"}),e.jsx("p",{className:"text-2xl font-semibold",children:j.total})]}),e.jsxs("div",{className:"p-3 bg-muted/30 rounded-lg",children:[e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:"临时文件"}),e.jsx("p",{className:"text-xl font-semibold",children:j.temp})]}),e.jsxs("div",{className:"p-3 bg-muted/30 rounded-lg",children:[e.jsx("p",{className:"text-xs text-muted-foreground mb-1",children:"永久文件"}),e.jsx("p",{className:"text-xl font-semibold",children:j.permanent})]})]})]})})]})]})}export{Q as default};
|
dist/frontend/assets/{index-DuJHIIAm.js → index-CstZx59R.js}
RENAMED
|
@@ -1 +1 @@
|
|
| 1 |
-
import{j as e}from"./query-BVy6DjHf.js";import{r as c}from"./vendor-BrxV5zWv.js";import{C as N,a as f,b,d as w,i as v,j as i,L as C,I as y,B as o}from"./index-
|
|
|
|
| 1 |
+
import{j as e}from"./query-BVy6DjHf.js";import{r as c}from"./vendor-BrxV5zWv.js";import{C as N,a as f,b,d as w,i as v,j as i,L as C,I as y,B as o}from"./index-glrVO3jG.js";import{O as S,e as k,Q as I,R as x,W as B}from"./ui-DGAKiEyf.js";const u="/plugins/welcome_plugin/api";function L(){const[l,h]=c.useState("访客"),[p,d]=c.useState("消息将显示在这里..."),[a,m]=c.useState(null),[t,n]=c.useState(!1),g=async()=>{n(!0);try{const r=await(await fetch(`${u}/welcome?name=${encodeURIComponent(l)}`)).json();d(r.message)}catch{d("获取消息失败")}n(!1)},j=async()=>{n(!0);try{const r=await(await fetch(`${u}/status`)).json();m({enabled:r.enabled,message:r.message||"运行正常"})}catch{m({enabled:!1,message:"获取状态失败"})}n(!1)};return e.jsx("div",{className:"space-y-6",children:e.jsxs(N,{children:[e.jsxs(f,{children:[e.jsxs(b,{className:"flex items-center gap-2",children:[e.jsx(S,{className:"h-5 w-5"}),"欢迎插件"]}),e.jsx(w,{children:"一个简单的欢迎插件,用于验证插件管理系统"})]}),e.jsxs(v,{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3 p-4 bg-muted/50 rounded-xl",children:[e.jsx("span",{className:"text-sm font-medium text-muted-foreground",children:"插件状态"}),a?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(i,{variant:a.enabled?"secondary":"destructive",className:"gap-1.5",children:a.enabled?e.jsxs(e.Fragment,{children:[e.jsx(k,{className:"h-3 w-3"}),"运行中"]}):e.jsxs(e.Fragment,{children:[e.jsx(I,{className:"h-3 w-3"}),"已停止"]})}),e.jsx("span",{className:"text-sm text-muted-foreground",children:a.message})]}):e.jsxs(i,{variant:"outline",className:"gap-1.5",children:[e.jsx(x,{className:"h-3 w-3 animate-spin"}),"等待检查"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(C,{htmlFor:"userName",children:"请输入您的名字"}),e.jsx(y,{id:"userName",value:l,onChange:s=>h(s.target.value),placeholder:"请输入名字",className:"max-w-sm"})]}),e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsxs(o,{onClick:g,disabled:t,className:"gap-2",children:[e.jsx(B,{className:"h-4 w-4"}),t?"加载中...":"获取欢迎消息"]}),e.jsxs(o,{variant:"outline",onClick:j,disabled:t,className:"gap-2",children:[e.jsx(x,{className:`h-4 w-4 ${t?"animate-spin":""}`}),"检查状态"]})]}),e.jsxs("div",{className:"p-4 border rounded-lg bg-background",children:[e.jsx("div",{className:"text-sm font-medium text-muted-foreground mb-1",children:"消息"}),e.jsx("p",{className:"text-base",children:p})]})]})]})})}export{L as default};
|
dist/frontend/assets/{index-CYltYunp.js → index-D3CEv5ex.js}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
-
import{j as e}from"./query-BVy6DjHf.js";import{r as c}from"./vendor-BrxV5zWv.js";import{C as B,a as P,b as R,d as _,i as
|
| 2 |
`).length},b={chars:t.length,lines:t.split(`
|
| 3 |
-
`).length},r=(s,l)=>{w(s),D(l),setTimeout(()=>{w("")},3e3)},E=async()=>{if(!n.trim()){r("请输入或上传文本内容","error");return}o(!0);try{const s=new FormData;s.append("text",n),s.append("mode",f);const l=await fetch(`${k}/process`,{method:"POST",body:s});if(!l.ok)throw new Error("Processing failed");const a=await l.json();j(a.cleaned_text||a.result||""),r("清理完成","success")}catch{r("处理失败","error")}o(!1)},L=async s=>{const l=s[0];if(l){o(!0);try{const a=new FormData;a.append("file",l);const
|
|
|
|
| 1 |
+
import{j as e}from"./query-BVy6DjHf.js";import{r as c}from"./vendor-BrxV5zWv.js";import{C as B,a as P,b as R,d as _,i as I,A as M,e as z,L as d,j as x,B as m,E as V}from"./index-glrVO3jG.js";import{S as $,a as H,b as J,c as K,d as C}from"./select-DU-WcEOz.js";import{F as Z}from"./FileDropZone-Bnye6SLQ.js";import{E as p,b as q,A as G,u as Q,J as S,K as T,T as W,y as X,D as Y}from"./ui-DGAKiEyf.js";const k="/plugins/text_cleaner_plugin/api";function ne(){const[n,h]=c.useState(""),[t,j]=c.useState(""),[f,A]=c.useState("standard"),[i,o]=c.useState(!1),[g,w]=c.useState(""),[u,D]=c.useState("info"),N={chars:n.length,lines:n.split(`
|
| 2 |
`).length},b={chars:t.length,lines:t.split(`
|
| 3 |
+
`).length},r=(s,l)=>{w(s),D(l),setTimeout(()=>{w("")},3e3)},E=async()=>{if(!n.trim()){r("请输入或上传文本内容","error");return}o(!0);try{const s=new FormData;s.append("text",n),s.append("mode",f);const l=await fetch(`${k}/process`,{method:"POST",body:s});if(!l.ok)throw new Error("Processing failed");const a=await l.json();j(a.cleaned_text||a.result||""),r("清理完成","success")}catch{r("处理失败","error")}o(!1)},L=async s=>{const l=s[0];if(l){o(!0);try{const a=new FormData;a.append("file",l);const y=await fetch(`${k}/upload`,{method:"POST",body:a});if(!y.ok)throw new Error("Upload failed");const v=await y.json();h(v.text||v.content||""),r("文件已上传","success")}catch{r("文件上传失败","error")}o(!1)}},F=()=>{h(""),j("")},O=async()=>{if(!t.trim()){r("没有可复制的内容","error");return}try{await navigator.clipboard.writeText(t),r("已复制到剪贴板","success")}catch{r("复制失败","error")}},U=()=>{if(!t.trim()){r("没有可下载的内容","error");return}const s=new Blob([t],{type:"text/plain;charset=utf-8"}),l=URL.createObjectURL(s),a=document.createElement("a");a.href=l,a.download="cleaned_text.txt",document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(l),r("下载已开始","success")};return e.jsx("div",{className:"space-y-6",children:e.jsxs(B,{children:[e.jsxs(P,{children:[e.jsxs(R,{className:"flex items-center gap-2",children:[e.jsx(p,{className:"h-5 w-5"}),"文本清理"]}),e.jsx(_,{children:"文本清理工具,去除多余换行和标点符号替换"})]}),e.jsxs(I,{className:"space-y-6",children:[g&&e.jsxs(M,{variant:u==="error"?"destructive":"default",children:[u==="success"?e.jsx(q,{className:"h-4 w-4"}):u==="error"?e.jsx(G,{className:"h-4 w-4"}):e.jsx(Q,{className:"h-4 w-4"}),e.jsx(z,{children:g})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(d,{children:"清理模式"}),e.jsxs($,{value:f,onValueChange:A,children:[e.jsx(H,{className:"w-full rounded-xl",children:e.jsx(J,{})}),e.jsxs(K,{children:[e.jsx(C,{value:"standard",children:"标准模式"}),e.jsx(C,{value:"compact",children:"紧凑模式"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(d,{children:"上传文件"}),e.jsx(Z,{accept:".txt,.md,.html,.json",multiple:!1,onFilesSelected:L,description:"支持格式: txt, md, html, json",disabled:i})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(d,{children:"原始文本"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(x,{variant:"outline",className:"flex items-center gap-1",children:[e.jsx(S,{className:"h-3 w-3"}),N.chars," 字符"]}),e.jsxs(x,{variant:"secondary",className:"flex items-center gap-1",children:[e.jsx(T,{className:"h-3 w-3"}),N.lines," 行"]})]})]}),e.jsx("textarea",{className:"w-full min-h-[200px] p-3 border rounded-xl resize-y bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring",placeholder:"请输入需要清理的文本...",value:n,onChange:s=>h(s.target.value),disabled:i})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(m,{onClick:E,disabled:i||!n.trim(),children:[i?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full"}),"加载中..."]}):e.jsx(p,{className:"h-4 w-4 mr-2"}),"开始清理"]}),e.jsxs(m,{variant:"outline",onClick:F,disabled:i,children:[e.jsx(W,{className:"h-4 w-4 mr-2"}),"清空"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(d,{children:"清理后文本"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(x,{variant:"outline",className:"flex items-center gap-1",children:[e.jsx(S,{className:"h-3 w-3"}),b.chars," 字符"]}),e.jsxs(x,{variant:"secondary",className:"flex items-center gap-1",children:[e.jsx(T,{className:"h-3 w-3"}),b.lines," 行"]})]})]}),t.trim()?e.jsx("textarea",{className:"w-full min-h-[200px] p-3 border rounded-xl resize-y bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring",placeholder:"清理结果将显示在这里...",value:t,readOnly:!0}):e.jsx("div",{className:"border rounded-xl bg-muted/30",children:e.jsx(V,{icon:e.jsx(p,{className:"h-6 w-6"}),title:"等待清理",description:"输入文本并点击开始清理按钮"})})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(m,{variant:"outline",onClick:O,disabled:!t.trim(),children:[e.jsx(X,{className:"h-4 w-4 mr-2"}),"复制"]}),e.jsxs(m,{variant:"outline",onClick:U,disabled:!t.trim(),children:[e.jsx(Y,{className:"h-4 w-4 mr-2"}),"下载"]})]})]})]})})}export{ne as default};
|
dist/frontend/assets/index-DH3iE3Xn.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 222.2 84% 4.9%;--card: 0 0% 100%;--card-foreground: 222.2 84% 4.9%;--popover: 0 0% 100%;--popover-foreground: 222.2 84% 4.9%;--primary: 222.2 47.4% 11.2%;--primary-foreground: 210 40% 98%;--secondary: 210 40% 96.1%;--secondary-foreground: 222.2 47.4% 11.2%;--muted: 210 40% 96.1%;--muted-foreground: 215.4 16.3% 46.9%;--accent: 210 40% 96.1%;--accent-foreground: 222.2 47.4% 11.2%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 210 40% 98%;--border: 214.3 31.8% 91.4%;--input: 214.3 31.8% 91.4%;--ring: 222.2 84% 4.9%;--radius: .5rem}.dark{--background: 222.2 84% 4.9%;--foreground: 210 40% 98%;--card: 222.2 84% 4.9%;--card-foreground: 210 40% 98%;--popover: 222.2 84% 4.9%;--popover-foreground: 210 40% 98%;--primary: 210 40% 98%;--primary-foreground: 222.2 47.4% 11.2%;--secondary: 217.2 32.6% 17.5%;--secondary-foreground: 210 40% 98%;--muted: 217.2 32.6% 17.5%;--muted-foreground: 215 20.2% 65.1%;--accent: 217.2 32.6% 17.5%;--accent-foreground: 210 40% 98%;--destructive: 0 62.8% 30.6%;--destructive-foreground: 210 40% 98%;--border: 217.2 32.6% 17.5%;--input: 217.2 32.6% 17.5%;--ring: 212.7 26.8% 83.9%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,sans-serif}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-14{top:3.5rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-0{margin-left:0}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.mr-1{margin-right:.25rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.min-h-\[calc\(100vh-3\.5rem\)\]{min-height:calc(100vh - 3.5rem)}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[24px\]{min-width:24px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[1\.02\]{--tw-scale-x: 1.02;--tw-scale-y: 1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-dashed{border-style:dashed}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-input{border-color:hsl(var(--input))}.border-teal-200\/50{border-color:#99f6e480}.border-teal-400{--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.bg-background{background-color:hsl(var(--background))}.bg-black\/50{background-color:#00000080}.bg-black\/80{background-color:#000c}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-teal-50\/50{background-color:#f0fdfa80}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-teal-100\/80{--tw-gradient-from: rgb(204 251 241 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(204 251 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-50\/30{--tw-gradient-from: rgb(240 253 250 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-500{--tw-gradient-from: #14b8a6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 184 166 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-cyan-100\/50{--tw-gradient-to: rgb(207 250 254 / .5) var(--tw-gradient-to-position)}.to-cyan-50\/20{--tw-gradient-to: rgb(236 254 255 / .2) var(--tw-gradient-to-position)}.to-cyan-600{--tw-gradient-to: #0891b2 var(--tw-gradient-to-position)}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-10{padding-left:2.5rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pt-0{padding-top:0}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-none{line-height:1}.tracking-tight{letter-spacing:-.025em}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-teal-600{--tw-text-opacity: 1;color:rgb(13 148 136 / var(--tw-text-opacity, 1))}.text-teal-600\/60{color:#0d948899}.text-teal-700{--tw-text-opacity: 1;color:rgb(15 118 110 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-teal-500\/20{--tw-shadow-color: rgb(20 184 166 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\:border-primary:hover{border-color:hsl(var(--primary))}.hover\:border-teal-300\/70:hover{border-color:#5eead4b3}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-teal-50\/40:hover{background-color:#f0fdfa66}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}@media (min-width: 640px){.sm\:mt-0{margin-top:0}.sm\:inline{display:inline}.sm\:max-w-\[500px\]{max-width:500px}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media (min-width: 768px){.md\:ml-64{margin-left:16rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:gap-6{gap:1.5rem}.md\:p-6{padding:1.5rem}}@media (min-width: 1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}
|
dist/frontend/assets/index-DfP-YqFs.css
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 222.2 84% 4.9%;--card: 0 0% 100%;--card-foreground: 222.2 84% 4.9%;--popover: 0 0% 100%;--popover-foreground: 222.2 84% 4.9%;--primary: 222.2 47.4% 11.2%;--primary-foreground: 210 40% 98%;--secondary: 210 40% 96.1%;--secondary-foreground: 222.2 47.4% 11.2%;--muted: 210 40% 96.1%;--muted-foreground: 215.4 16.3% 46.9%;--accent: 210 40% 96.1%;--accent-foreground: 222.2 47.4% 11.2%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 210 40% 98%;--border: 214.3 31.8% 91.4%;--input: 214.3 31.8% 91.4%;--ring: 222.2 84% 4.9%;--radius: .5rem}.dark{--background: 222.2 84% 4.9%;--foreground: 210 40% 98%;--card: 222.2 84% 4.9%;--card-foreground: 210 40% 98%;--popover: 222.2 84% 4.9%;--popover-foreground: 210 40% 98%;--primary: 210 40% 98%;--primary-foreground: 222.2 47.4% 11.2%;--secondary: 217.2 32.6% 17.5%;--secondary-foreground: 210 40% 98%;--muted: 217.2 32.6% 17.5%;--muted-foreground: 215 20.2% 65.1%;--accent: 217.2 32.6% 17.5%;--accent-foreground: 210 40% 98%;--destructive: 0 62.8% 30.6%;--destructive-foreground: 210 40% 98%;--border: 217.2 32.6% 17.5%;--input: 217.2 32.6% 17.5%;--ring: 212.7 26.8% 83.9%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,sans-serif}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width: 1400px){.container{max-width:1400px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-14{top:3.5rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-30{z-index:30}.z-50{z-index:50}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.mr-1{margin-right:.25rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.min-h-\[calc\(100vh-3\.5rem\)\]{min-height:calc(100vh - 3.5rem)}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[24px\]{min-width:24px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[1\.02\]{--tw-scale-x: 1.02;--tw-scale-y: 1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-dashed{border-style:dashed}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-input{border-color:hsl(var(--input))}.border-teal-200\/50{border-color:#99f6e480}.border-teal-400{--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.bg-background{background-color:hsl(var(--background))}.bg-black\/80{background-color:#000c}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-teal-50\/50{background-color:#f0fdfa80}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-teal-100\/80{--tw-gradient-from: rgb(204 251 241 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(204 251 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-50\/30{--tw-gradient-from: rgb(240 253 250 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-500{--tw-gradient-from: #14b8a6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 184 166 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-cyan-100\/50{--tw-gradient-to: rgb(207 250 254 / .5) var(--tw-gradient-to-position)}.to-cyan-50\/20{--tw-gradient-to: rgb(236 254 255 / .2) var(--tw-gradient-to-position)}.to-cyan-600{--tw-gradient-to: #0891b2 var(--tw-gradient-to-position)}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-10{padding-left:2.5rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pt-0{padding-top:0}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-none{line-height:1}.tracking-tight{letter-spacing:-.025em}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-teal-600{--tw-text-opacity: 1;color:rgb(13 148 136 / var(--tw-text-opacity, 1))}.text-teal-600\/60{color:#0d948899}.text-teal-700{--tw-text-opacity: 1;color:rgb(15 118 110 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-teal-500\/20{--tw-shadow-color: rgb(20 184 166 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\:border-primary:hover{border-color:hsl(var(--primary))}.hover\:border-teal-300\/70:hover{border-color:#5eead4b3}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-teal-50\/40:hover{background-color:#f0fdfa66}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}@media (min-width: 640px){.sm\:mt-0{margin-top:0}.sm\:max-w-\[500px\]{max-width:500px}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media (min-width: 768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&_p\]\:leading-relaxed p{line-height:1.625}
|
|
|
|
|
|
dist/frontend/assets/{index-JYrcwpXe.js → index-S_ho_fSD.js}
RENAMED
|
@@ -1 +1 @@
|
|
| 1 |
-
import{j as e}from"./query-BVy6DjHf.js";import{r as o}from"./vendor-BrxV5zWv.js";import{c as g,B as m,C as
|
|
|
|
| 1 |
+
import{j as e}from"./query-BVy6DjHf.js";import{r as o}from"./vendor-BrxV5zWv.js";import{c as g,B as m,C as p,a as u,b as h,d as $,A as D,e as I,T as X,f as Z,g as B,h as E,i as N,E as G}from"./index-glrVO3jG.js";import{F as W}from"./FileDropZone-Bnye6SLQ.js";import{X as H,I as K,V as q,s as J,u as v,b as Q,A as Y,v as ee,w as se,x as te}from"./ui-DGAKiEyf.js";const ae={yellow:"bg-yellow-100 text-yellow-600",green:"bg-green-100 text-green-600",blue:"bg-blue-100 text-blue-600",gray:"bg-gray-100 text-gray-600"},re=l=>{if(l===0)return"0 Bytes";const n=1024,r=["Bytes","KB","MB","GB"],c=Math.floor(Math.log(l)/Math.log(n));return parseFloat((l/Math.pow(n,c)).toFixed(2))+" "+r[c]},le=l=>{var c;const n=((c=l.name.split(".").pop())==null?void 0:c.toLowerCase())||"",r=l.type;return r.startsWith("image/")||["jpg","jpeg","png","gif","bmp","webp","svg"].includes(n)?e.jsx(K,{className:"h-5 w-5"}):r.startsWith("video/")||["mp4","avi","mov","mkv","webm"].includes(n)?e.jsx(q,{className:"h-5 w-5"}):r.startsWith("audio/")||["mp3","wav","aac","flac","ogg"].includes(n)?e.jsx(J,{className:"h-5 w-5"}):e.jsx(v,{className:"h-5 w-5"})},ne=l=>{var c;const n=((c=l.name.split(".").pop())==null?void 0:c.toLowerCase())||"",r=l.type;return r.startsWith("image/")||["jpg","jpeg","png","gif","bmp","webp","svg"].includes(n)?"blue":r.startsWith("audio/")||["mp3","wav","aac","flac","ogg"].includes(n)?"green":["md","txt","html","json","csv"].includes(n)?"yellow":"gray"};function _({file:l,index:n,onRemove:r,iconColor:c,className:x}){const w=c||ne(l),j=le(l);return e.jsxs("div",{className:g("flex items-center gap-3 p-3 bg-muted/30 rounded-lg",x),children:[n!==void 0&&e.jsx("span",{className:g("bg-primary text-primary-foreground text-xs px-2 py-0.5 rounded","font-medium min-w-[24px] text-center"),children:n+1}),e.jsx("div",{className:g("h-10 w-10 rounded-lg flex items-center justify-center",ae[w]),children:j}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium truncate",children:l.name}),e.jsx("p",{className:"text-xs text-muted-foreground",children:re(l.size)})]}),e.jsx(m,{variant:"destructive",size:"icon",className:"h-7 w-7",onClick:r,children:e.jsx(H,{className:"h-4 w-4"})})]})}const A="/plugins/document_merge_split_plugin/api";function xe(){const[l,n]=o.useState("merge"),[r,c]=o.useState([]),[x,w]=o.useState("md"),[j,y]=o.useState(!1),[f,C]=o.useState(null),[F,z]=o.useState("md"),[S,k]=o.useState(!1),[b,M]=o.useState(null),d=(s,t)=>{M({type:s,text:t}),setTimeout(()=>M(null),3e3)},R=o.useCallback(s=>{const t=s.filter(a=>a.name.endsWith(".md")||a.name.endsWith(".txt")).filter(a=>!r.find(i=>i.file.name===a.name)).map(a=>({file:a,id:Math.random().toString(36).slice(2)}));c(a=>[...a,...t])},[r]),T=(s,t)=>{const a=s+t;if(a<0||a>=r.length)return;const i=[...r];[i[s],i[a]]=[i[a],i[s]],c(i)},U=s=>{c(t=>t.filter(a=>a.id!==s))},P=async()=>{if(r.length===0){d("error","请至少上传一个文件");return}y(!0);const s=new FormData;r.forEach(t=>s.append("files",t.file)),s.append("order",r.map((t,a)=>a).join(",")),s.append("output_format",x);try{const t=await fetch(`${A}/merge`,{method:"POST",body:s});if(!t.ok)throw new Error("合并失败");const a=await t.blob();L(a,`merged_document.${x}`),d("success","文档合并成功,已开始下载")}catch{d("error","合并失败")}y(!1)},O=o.useCallback(s=>{const t=s[0];t&&(t.name.endsWith(".md")||t.name.endsWith(".txt"))&&C(t)},[]),V=async()=>{if(!f){d("error","请上传要拆分的文件");return}k(!0);const s=new FormData;s.append("file",f),s.append("output_format",F);try{const t=await fetch(`${A}/split`,{method:"POST",body:s});if(!t.ok)throw new Error("拆分失败");const a=await t.blob();L(a,"split_documents.zip"),d("success","文档拆分成功,已开始下载")}catch{d("error","拆分失败")}k(!1)},L=(s,t)=>{const a=URL.createObjectURL(s),i=document.createElement("a");i.href=a,i.download=t,i.click(),URL.revokeObjectURL(a)};return e.jsxs("div",{className:"space-y-6",children:[e.jsx(p,{children:e.jsxs(u,{children:[e.jsxs(h,{className:"flex items-center gap-2",children:[e.jsx(v,{className:"h-5 w-5"}),"文档合并拆分"]}),e.jsx($,{children:"合并多个文档或将单个文档按章节拆分"})]})}),b&&e.jsxs(D,{variant:b.type==="error"?"destructive":"default",children:[b.type==="success"?e.jsx(Q,{className:"h-4 w-4"}):e.jsx(Y,{className:"h-4 w-4"}),e.jsx(I,{children:b.text})]}),e.jsxs(X,{value:l,onValueChange:n,children:[e.jsxs(Z,{children:[e.jsx(B,{value:"merge",children:"合并文档"}),e.jsx(B,{value:"split",children:"拆分文档"})]}),e.jsxs(E,{value:"merge",className:"space-y-4",children:[e.jsxs(p,{children:[e.jsx(u,{className:"pb-3",children:e.jsx(h,{className:"text-base",children:"上传文档"})}),e.jsx(N,{children:e.jsx(W,{accept:".md,.txt",multiple:!0,onFilesSelected:R,description:"支持格式: md, txt"})})]}),e.jsxs(p,{children:[e.jsx(u,{className:"pb-3",children:e.jsx(h,{className:"text-base",children:"文件列表"})}),e.jsxs(N,{className:"space-y-4",children:[r.length===0?e.jsx(G,{icon:e.jsx(v,{className:"h-8 w-8"}),title:"暂无文件",description:"请上传文档文件进行合并"}):e.jsx("div",{className:"space-y-2",children:r.map((s,t)=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex-1",children:e.jsx(_,{file:s.file,index:t,onRemove:()=>U(s.id),iconColor:"yellow"})}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx(m,{variant:"outline",size:"icon",className:"h-7 w-7 rounded-full",onClick:()=>T(t,-1),disabled:t===0,children:e.jsx(ee,{className:"h-4 w-4"})}),e.jsx(m,{variant:"outline",size:"icon",className:"h-7 w-7 rounded-full",onClick:()=>T(t,1),disabled:t===r.length-1,children:e.jsx(se,{className:"h-4 w-4"})})]})]},s.id))}),e.jsxs("div",{className:"flex items-center gap-4 p-3 bg-muted/30 rounded-lg",children:[e.jsx("span",{className:"text-sm font-medium",children:"输出格式"}),e.jsx("div",{className:"flex gap-2",children:["md","txt"].map(s=>e.jsxs("button",{className:g("px-4 py-1.5 text-sm border rounded-full transition-colors",x===s?"bg-primary text-primary-foreground border-primary":"border-gray-200 hover:bg-muted hover:border-gray-300"),onClick:()=>w(s),children:[".",s]},s))})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(m,{className:"flex-1 rounded-full",onClick:P,disabled:j,children:j?"合并中...":"合并并下载"}),e.jsx(m,{variant:"outline",className:"rounded-full",onClick:()=>c([]),children:"清空文件"})]})]})]})]}),e.jsxs(E,{value:"split",className:"space-y-4",children:[e.jsxs(p,{children:[e.jsx(u,{className:"pb-3",children:e.jsx(h,{className:"text-base",children:"上传文档"})}),e.jsx(N,{children:e.jsx(W,{accept:".md,.txt",onFilesSelected:O,description:"支持格式: md, txt"})})]}),f&&e.jsxs(p,{children:[e.jsx(u,{className:"pb-3",children:e.jsx(h,{className:"text-base",children:"已选文件"})}),e.jsxs(N,{className:"space-y-4",children:[e.jsx(_,{file:f,onRemove:()=>C(null),iconColor:"yellow"}),e.jsxs("div",{className:"flex items-center gap-4 p-3 bg-muted/30 rounded-lg",children:[e.jsx("span",{className:"text-sm font-medium",children:"输出格式"}),e.jsx("div",{className:"flex gap-2",children:["md","txt"].map(s=>e.jsxs("button",{className:g("px-4 py-1.5 text-sm border rounded-full transition-colors",F===s?"bg-primary text-primary-foreground border-primary":"border-gray-200 hover:bg-muted hover:border-gray-300"),onClick:()=>z(s),children:[".",s]},s))})]}),e.jsx(m,{className:"w-full rounded-full",onClick:V,disabled:S,children:S?"拆分中...":"拆分并下载"})]})]}),e.jsxs(D,{children:[e.jsx(te,{className:"h-4 w-4"}),e.jsxs(I,{className:"space-y-1",children:[e.jsx("p",{className:"font-medium",children:"拆分说明:"}),e.jsx("p",{className:"text-sm",children:'自动识别"第X章"格式的章节标记(如:第1章、第2章)'}),e.jsx("p",{className:"text-sm",children:"章节标题将作为拆分文件的文件名和首行"}),e.jsx("p",{className:"text-sm",children:"拆分结果打包为 ZIP 文件下载"})]})]})]})]})]})}export{xe as default};
|
dist/frontend/assets/{index-BmzOyGUN.js → index-glrVO3jG.js}
RENAMED
|
The diff for this file is too large to render.
See raw diff
|
|
|
dist/frontend/assets/{index-ClOqV94C.js → index-qBHqhlLD.js}
RENAMED
|
@@ -1 +1 @@
|
|
| 1 |
-
import{j as e}from"./query-BVy6DjHf.js";import{r as n}from"./vendor-BrxV5zWv.js";import{C as $,a as B,b as H,d as W,i as L,A as U,e as M,E as O,c as I,L as A,B as u,j as R}from"./index-
|
|
|
|
| 1 |
+
import{j as e}from"./query-BVy6DjHf.js";import{r as n}from"./vendor-BrxV5zWv.js";import{C as $,a as B,b as H,d as W,i as L,A as U,e as M,E as O,c as I,L as A,B as u,j as R}from"./index-glrVO3jG.js";import{S as J,a as V,b as Z,c as q,d as K}from"./select-DU-WcEOz.js";import{F as Q}from"./FileDropZone-Bnye6SLQ.js";import{I as j,b as X,A as Y,z as ee,T as se,D}from"./ui-DGAKiEyf.js";const E="/plugins/image_resizer_plugin/api",ae=[16,32,48,128],le=["PNG","JPEG","WEBP"];function de(){const[l,N]=n.useState(null),[w,b]=n.useState(null),[x,T]=n.useState("PNG"),[m,p]=n.useState([]),[c,h]=n.useState(!1),[f,v]=n.useState(!1),[y,S]=n.useState(""),[g,k]=n.useState("info"),o=(s,a)=>{S(s),k(a),setTimeout(()=>{S("")},3e3)},z=n.useCallback(async s=>{var t;const a=s[0];if(a){h(!0);try{const d=new FormData;d.append("file",a);const i=await fetch(`${E}/upload`,{method:"POST",body:d});if(!i.ok)throw new Error("Upload failed");const r=await i.json();b(a),N({fileName:r.filename||r.file_name||a.name,originalWidth:r.width||r.original_width||0,originalHeight:r.height||r.original_height||0,format:r.format||((t=a.type.split("/")[1])==null?void 0:t.toUpperCase())||"PNG",url:r.url||r.file_url||""}),p([]),o("图片上传成功","success")}catch{o("上传失败","error")}h(!1)}},[]),F=()=>{N(null),b(null),p([])},G=async()=>{if(!l||!w)return;h(!0);const s=[];for(const a of ae){const t=l.originalWidth>=a&&l.originalHeight>=a;let d="";if(t)try{const i=new FormData;i.append("file",w),i.append("size",String(a)),i.append("format",x);const r=await fetch(`${E}/generate`,{method:"POST",body:i});if(r.ok){const P=await r.json();d=P.url||P.file_url||""}}catch{}s.push({size:a,format:x,url:d,available:t&&d!==""})}p(s),h(!1)},C=async s=>{var a;if(s.url)try{const t=document.createElement("a");t.href=s.url,t.download=`${(a=l==null?void 0:l.fileName)==null?void 0:a.split(".")[0]}_${s.size}.${s.format.toLowerCase()}`,document.body.appendChild(t),t.click(),document.body.removeChild(t)}catch{o("下载失败","error")}},_=async()=>{const s=m.filter(a=>a.available);if(s.length===0){o("没有可下载的图片","error");return}v(!0),o("下载中...","info");for(const a of s)await C(a),await new Promise(t=>setTimeout(t,100));v(!1),o("下载完成","success")};return e.jsx("div",{className:"space-y-6",children:e.jsxs($,{children:[e.jsxs(B,{children:[e.jsxs(H,{className:"flex items-center gap-2",children:[e.jsx(j,{className:"h-5 w-5"}),"图片缩放"]}),e.jsx(W,{children:"快速生成 16px, 32px, 48px, 128px 尺寸的图片"})]}),e.jsxs(L,{className:"space-y-6",children:[y&&e.jsxs(U,{variant:g==="error"?"destructive":"default",children:[g==="success"?e.jsx(X,{className:"h-4 w-4"}):g==="error"?e.jsx(Y,{className:"h-4 w-4"}):e.jsx(j,{className:"h-4 w-4"}),e.jsx(M,{children:y})]}),!l&&e.jsx(Q,{accept:"image/png,image/jpeg,image/webp",multiple:!1,onFilesSelected:z,description:"支持 PNG, JPG, WEBP 格式",disabled:c}),!l&&!c&&e.jsx(O,{icon:e.jsx(ee,{className:"h-8 w-8"}),title:"开始缩放图片",description:"上传图片后,可生成多种尺寸用于 favicon、图标等场景"}),l&&e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"flex justify-center",children:e.jsx("div",{className:I("relative rounded-xl shadow-sm border p-4 max-w-md","bg-gradient-to-b from-white to-gray-50/30"),children:e.jsx("img",{src:l.url,alt:l.fileName,className:"max-w-full h-auto rounded-lg",style:{maxHeight:"200px"}})})}),e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm",children:[e.jsxs("div",{className:"rounded-lg bg-muted/30 p-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"文件名: "}),e.jsx("span",{className:"font-medium",children:l.fileName})]}),e.jsxs("div",{className:"rounded-lg bg-muted/30 p-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"原始尺寸: "}),e.jsxs("span",{className:"font-medium",children:[l.originalWidth," x ",l.originalHeight]})]}),e.jsxs("div",{className:"rounded-lg bg-muted/30 p-3",children:[e.jsx("span",{className:"text-muted-foreground",children:"格式: "}),e.jsx("span",{className:"font-medium",children:l.format})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(A,{children:"输出格式"}),e.jsxs(J,{value:x,onValueChange:T,disabled:c,children:[e.jsx(V,{className:"w-full",children:e.jsx(Z,{})}),e.jsx(q,{children:le.map(s=>e.jsx(K,{value:s,children:s},s))})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(u,{onClick:G,disabled:c,className:"flex-1",children:[c?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full"}),"加载中..."]}):e.jsx(j,{className:"h-4 w-4 mr-2"}),"生成尺寸"]}),e.jsxs(u,{variant:"outline",onClick:F,disabled:c,children:[e.jsx(se,{className:"h-4 w-4 mr-2"}),"清空"]})]}),m.length>0&&e.jsxs("div",{className:"space-y-4",children:[e.jsx(A,{children:"可用尺寸:"}),e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:m.map(s=>e.jsxs("div",{className:I("rounded-xl border p-4 text-center space-y-3","bg-gradient-to-b from-white to-gray-50/30",s.available?"shadow-sm":"opacity-60"),children:[e.jsxs(R,{variant:s.available?"default":"secondary",className:"text-sm",children:[s.size,"x",s.size]}),e.jsx("div",{className:"text-xs text-muted-foreground",children:s.available?"可下载":"图片过小"}),s.available&&e.jsxs(u,{size:"sm",variant:"outline",onClick:()=>C(s),disabled:f,className:"w-full",children:[e.jsx(D,{className:"h-3 w-3 mr-1"}),"下载"]})]},`${s.size}-${s.format}`))}),e.jsxs(u,{onClick:_,disabled:f||!m.some(s=>s.available),className:"w-full",children:[f?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"animate-spin h-4 w-4 border-2 border-current border-t-transparent rounded-full"}),"下载中..."]}):e.jsx(D,{className:"h-4 w-4 mr-2"}),"一键下载全部"]})]})]})]})]})})}export{de as default};
|
dist/frontend/assets/{select-DuJYwYQS.js → select-DU-WcEOz.js}
RENAMED
|
The diff for this file is too large to render.
See raw diff
|
|
|
dist/frontend/assets/{ui-3Ja5Lmtv.js → ui-DGAKiEyf.js}
RENAMED
|
@@ -158,12 +158,17 @@ import{r as F}from"./vendor-BrxV5zWv.js";/**
|
|
| 158 |
*
|
| 159 |
* This source code is licensed under the ISC license.
|
| 160 |
* See the LICENSE file in the root directory of this source tree.
|
| 161 |
-
*/const ft=l("
|
| 162 |
* @license lucide-react v0.344.0 - ISC
|
| 163 |
*
|
| 164 |
* This source code is licensed under the ISC license.
|
| 165 |
* See the LICENSE file in the root directory of this source tree.
|
| 166 |
-
*/const xt=l("
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
* @license lucide-react v0.344.0 - ISC
|
| 168 |
*
|
| 169 |
* This source code is licensed under the ISC license.
|
|
@@ -173,69 +178,69 @@ import{r as F}from"./vendor-BrxV5zWv.js";/**
|
|
| 173 |
*
|
| 174 |
* This source code is licensed under the ISC license.
|
| 175 |
* See the LICENSE file in the root directory of this source tree.
|
| 176 |
-
*/const
|
| 177 |
* @license lucide-react v0.344.0 - ISC
|
| 178 |
*
|
| 179 |
* This source code is licensed under the ISC license.
|
| 180 |
* See the LICENSE file in the root directory of this source tree.
|
| 181 |
-
*/const
|
| 182 |
* @license lucide-react v0.344.0 - ISC
|
| 183 |
*
|
| 184 |
* This source code is licensed under the ISC license.
|
| 185 |
* See the LICENSE file in the root directory of this source tree.
|
| 186 |
-
*/const
|
| 187 |
* @license lucide-react v0.344.0 - ISC
|
| 188 |
*
|
| 189 |
* This source code is licensed under the ISC license.
|
| 190 |
* See the LICENSE file in the root directory of this source tree.
|
| 191 |
-
*/const
|
| 192 |
* @license lucide-react v0.344.0 - ISC
|
| 193 |
*
|
| 194 |
* This source code is licensed under the ISC license.
|
| 195 |
* See the LICENSE file in the root directory of this source tree.
|
| 196 |
-
*/const
|
| 197 |
* @license lucide-react v0.344.0 - ISC
|
| 198 |
*
|
| 199 |
* This source code is licensed under the ISC license.
|
| 200 |
* See the LICENSE file in the root directory of this source tree.
|
| 201 |
-
*/const
|
| 202 |
* @license lucide-react v0.344.0 - ISC
|
| 203 |
*
|
| 204 |
* This source code is licensed under the ISC license.
|
| 205 |
* See the LICENSE file in the root directory of this source tree.
|
| 206 |
-
*/const
|
| 207 |
* @license lucide-react v0.344.0 - ISC
|
| 208 |
*
|
| 209 |
* This source code is licensed under the ISC license.
|
| 210 |
* See the LICENSE file in the root directory of this source tree.
|
| 211 |
-
*/const
|
| 212 |
* @license lucide-react v0.344.0 - ISC
|
| 213 |
*
|
| 214 |
* This source code is licensed under the ISC license.
|
| 215 |
* See the LICENSE file in the root directory of this source tree.
|
| 216 |
-
*/const
|
| 217 |
* @license lucide-react v0.344.0 - ISC
|
| 218 |
*
|
| 219 |
* This source code is licensed under the ISC license.
|
| 220 |
* See the LICENSE file in the root directory of this source tree.
|
| 221 |
-
*/const
|
| 222 |
* @license lucide-react v0.344.0 - ISC
|
| 223 |
*
|
| 224 |
* This source code is licensed under the ISC license.
|
| 225 |
* See the LICENSE file in the root directory of this source tree.
|
| 226 |
-
*/const
|
| 227 |
* @license lucide-react v0.344.0 - ISC
|
| 228 |
*
|
| 229 |
* This source code is licensed under the ISC license.
|
| 230 |
* See the LICENSE file in the root directory of this source tree.
|
| 231 |
-
*/const
|
| 232 |
* @license lucide-react v0.344.0 - ISC
|
| 233 |
*
|
| 234 |
* This source code is licensed under the ISC license.
|
| 235 |
* See the LICENSE file in the root directory of this source tree.
|
| 236 |
-
*/const
|
| 237 |
* @license lucide-react v0.344.0 - ISC
|
| 238 |
*
|
| 239 |
* This source code is licensed under the ISC license.
|
| 240 |
* See the LICENSE file in the root directory of this source tree.
|
| 241 |
-
*/const Vt=l("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);function re(e){var r,t,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(r=0;r<s;r++)e[r]&&(t=re(e[r]))&&(o&&(o+=" "),o+=t)}else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}function de(){for(var e,r,t=0,o="",s=arguments.length;t<s;t++)(e=arguments[t])&&(r=re(e))&&(o&&(o+=" "),o+=r);return o}const B="-",pe=e=>{const r=he(e),{conflictingClassGroups:t,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:i=>{const a=i.split(B);return a[0]===""&&a.length!==1&&a.shift(),oe(a,r)||ue(i)},getConflictingClassGroupIds:(i,a)=>{const p=t[i]||[];return a&&o[i]?[...p,...o[i]]:p}}},oe=(e,r)=>{var i;if(e.length===0)return r.classGroupId;const t=e[0],o=r.nextPart.get(t),s=o?oe(e.slice(1),o):void 0;if(s)return s;if(r.validators.length===0)return;const n=e.join(B);return(i=r.validators.find(({validator:a})=>a(n)))==null?void 0:i.classGroupId},Y=/^\[(.+)\]$/,ue=e=>{if(Y.test(e)){const r=Y.exec(e)[1],t=r==null?void 0:r.substring(0,r.indexOf(":"));if(t)return"arbitrary.."+t}},he=e=>{const{theme:r,prefix:t}=e,o={nextPart:new Map,validators:[]};return ge(Object.entries(e.classGroups),t).forEach(([n,i])=>{$(i,o,n,r)}),o},$=(e,r,t,o)=>{e.forEach(s=>{if(typeof s=="string"){const n=s===""?r:D(r,s);n.classGroupId=t;return}if(typeof s=="function"){if(ye(s)){$(s(o),r,t,o);return}r.validators.push({validator:s,classGroupId:t});return}Object.entries(s).forEach(([n,i])=>{$(i,D(r,n),t,o)})})},D=(e,r)=>{let t=e;return r.split(B).forEach(o=>{t.nextPart.has(o)||t.nextPart.set(o,{nextPart:new Map,validators:[]}),t=t.nextPart.get(o)}),t},ye=e=>e.isThemeGetter,ge=(e,r)=>r?e.map(([t,o])=>{const s=o.map(n=>typeof n=="string"?r+n:typeof n=="object"?Object.fromEntries(Object.entries(n).map(([i,a])=>[r+i,a])):n);return[t,s]}):e,be=e=>{if(e<1)return{get:()=>{},set:()=>{}};let r=0,t=new Map,o=new Map;const s=(n,i)=>{t.set(n,i),r++,r>e&&(r=0,o=t,t=new Map)};return{get(n){let i=t.get(n);if(i!==void 0)return i;if((i=o.get(n))!==void 0)return s(n,i),i},set(n,i){t.has(n)?t.set(n,i):s(n,i)}}},ne="!",me=e=>{const{separator:r,experimentalParseClassName:t}=e,o=r.length===1,s=r[0],n=r.length,i=a=>{const p=[];let d=0,y=0,f;for(let u=0;u<a.length;u++){let x=a[u];if(d===0){if(x===s&&(o||a.slice(u,u+n)===r)){p.push(a.slice(y,u)),y=u+n;continue}if(x==="/"){f=u;continue}}x==="["?d++:x==="]"&&d--}const b=p.length===0?a:a.substring(y),w=b.startsWith(ne),v=w?b.substring(1):b,m=f&&f>y?f-y:void 0;return{modifiers:p,hasImportantModifier:w,baseClassName:v,maybePostfixModifierPosition:m}};return t?a=>t({className:a,parseClassName:i}):i},fe=e=>{if(e.length<=1)return e;const r=[];let t=[];return e.forEach(o=>{o[0]==="["?(r.push(...t.sort(),o),t=[]):t.push(o)}),r.push(...t.sort()),r},xe=e=>({cache:be(e.cacheSize),parseClassName:me(e),...pe(e)}),ve=/\s+/,ke=(e,r)=>{const{parseClassName:t,getClassGroupId:o,getConflictingClassGroupIds:s}=r,n=[],i=e.trim().split(ve);let a="";for(let p=i.length-1;p>=0;p-=1){const d=i[p],{modifiers:y,hasImportantModifier:f,baseClassName:b,maybePostfixModifierPosition:w}=t(d);let v=!!w,m=o(v?b.substring(0,w):b);if(!m){if(!v){a=d+(a.length>0?" "+a:a);continue}if(m=o(b),!m){a=d+(a.length>0?" "+a:a);continue}v=!1}const u=fe(y).join(":"),x=f?u+ne:u,k=x+m;if(n.includes(k))continue;n.push(k);const L=s(m,v);for(let S=0;S<L.length;++S){const V=L[S];n.push(x+V)}a=d+(a.length>0?" "+a:a)}return a};function we(){let e=0,r,t,o="";for(;e<arguments.length;)(r=arguments[e++])&&(t=ae(r))&&(o&&(o+=" "),o+=t);return o}const ae=e=>{if(typeof e=="string")return e;let r,t="";for(let o=0;o<e.length;o++)e[o]&&(r=ae(e[o]))&&(t&&(t+=" "),t+=r);return t};function Me(e,...r){let t,o,s,n=i;function i(p){const d=r.reduce((y,f)=>f(y),e());return t=xe(d),o=t.cache.get,s=t.cache.set,n=a,a(p)}function a(p){const d=o(p);if(d)return d;const y=ke(p,t);return s(p,y),y}return function(){return n(we.apply(null,arguments))}}const h=e=>{const r=t=>t[e]||[];return r.isThemeGetter=!0,r},se=/^\[(?:([a-z-]+):)?(.+)\]$/i,Ce=/^\d+\/\d+$/,ze=new Set(["px","full","screen"]),Ae=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Se=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,je=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Pe=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Le=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,C=e=>j(e)||ze.has(e)||Ce.test(e),z=e=>P(e,"length",He),j=e=>!!e&&!Number.isNaN(Number(e)),W=e=>P(e,"number",j),G=e=>!!e&&Number.isInteger(Number(e)),qe=e=>e.endsWith("%")&&j(e.slice(0,-1)),c=e=>se.test(e),A=e=>Ae.test(e),Ge=new Set(["length","size","percentage"]),Re=e=>P(e,Ge,le),Ve=e=>P(e,"position",le),Ie=new Set(["image","url"]),Te=e=>P(e,Ie,Oe),Ne=e=>P(e,"",Ee),R=()=>!0,P=(e,r,t)=>{const o=se.exec(e);return o?o[1]?typeof r=="string"?o[1]===r:r.has(o[1]):t(o[2]):!1},He=e=>Se.test(e)&&!je.test(e),le=()=>!1,Ee=e=>Pe.test(e),Oe=e=>Le.test(e),Fe=()=>{const e=h("colors"),r=h("spacing"),t=h("blur"),o=h("brightness"),s=h("borderColor"),n=h("borderRadius"),i=h("borderSpacing"),a=h("borderWidth"),p=h("contrast"),d=h("grayscale"),y=h("hueRotate"),f=h("invert"),b=h("gap"),w=h("gradientColorStops"),v=h("gradientColorStopPositions"),m=h("inset"),u=h("margin"),x=h("opacity"),k=h("padding"),L=h("saturate"),S=h("scale"),V=h("sepia"),U=h("skew"),Z=h("space"),_=h("translate"),N=()=>["auto","contain","none"],H=()=>["auto","hidden","clip","visible","scroll"],E=()=>["auto",c,r],g=()=>[c,r],X=()=>["",C,z],I=()=>["auto",j,c],J=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],T=()=>["solid","dashed","dotted","double","none"],K=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],O=()=>["start","end","center","between","around","evenly","stretch"],q=()=>["","0",c],Q=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>[j,c];return{cacheSize:500,separator:":",theme:{colors:[R],spacing:[C,z],blur:["none","",A,c],brightness:M(),borderColor:[e],borderRadius:["none","","full",A,c],borderSpacing:g(),borderWidth:X(),contrast:M(),grayscale:q(),hueRotate:M(),invert:q(),gap:g(),gradientColorStops:[e],gradientColorStopPositions:[qe,z],inset:E(),margin:E(),opacity:M(),padding:g(),saturate:M(),scale:M(),sepia:q(),skew:M(),space:g(),translate:g()},classGroups:{aspect:[{aspect:["auto","square","video",c]}],container:["container"],columns:[{columns:[A]}],"break-after":[{"break-after":Q()}],"break-before":[{"break-before":Q()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...J(),c]}],overflow:[{overflow:H()}],"overflow-x":[{"overflow-x":H()}],"overflow-y":[{"overflow-y":H()}],overscroll:[{overscroll:N()}],"overscroll-x":[{"overscroll-x":N()}],"overscroll-y":[{"overscroll-y":N()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",G,c]}],basis:[{basis:E()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",c]}],grow:[{grow:q()}],shrink:[{shrink:q()}],order:[{order:["first","last","none",G,c]}],"grid-cols":[{"grid-cols":[R]}],"col-start-end":[{col:["auto",{span:["full",G,c]},c]}],"col-start":[{"col-start":I()}],"col-end":[{"col-end":I()}],"grid-rows":[{"grid-rows":[R]}],"row-start-end":[{row:["auto",{span:[G,c]},c]}],"row-start":[{"row-start":I()}],"row-end":[{"row-end":I()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",c]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",c]}],gap:[{gap:[b]}],"gap-x":[{"gap-x":[b]}],"gap-y":[{"gap-y":[b]}],"justify-content":[{justify:["normal",...O()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...O(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...O(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[k]}],px:[{px:[k]}],py:[{py:[k]}],ps:[{ps:[k]}],pe:[{pe:[k]}],pt:[{pt:[k]}],pr:[{pr:[k]}],pb:[{pb:[k]}],pl:[{pl:[k]}],m:[{m:[u]}],mx:[{mx:[u]}],my:[{my:[u]}],ms:[{ms:[u]}],me:[{me:[u]}],mt:[{mt:[u]}],mr:[{mr:[u]}],mb:[{mb:[u]}],ml:[{ml:[u]}],"space-x":[{"space-x":[Z]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[Z]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",c,r]}],"min-w":[{"min-w":[c,r,"min","max","fit"]}],"max-w":[{"max-w":[c,r,"none","full","min","max","fit","prose",{screen:[A]},A]}],h:[{h:[c,r,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[c,r,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[c,r,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[c,r,"auto","min","max","fit"]}],"font-size":[{text:["base",A,z]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",W]}],"font-family":[{font:[R]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",c]}],"line-clamp":[{"line-clamp":["none",j,W]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",C,c]}],"list-image":[{"list-image":["none",c]}],"list-style-type":[{list:["none","disc","decimal",c]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[x]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[x]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...T(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",C,z]}],"underline-offset":[{"underline-offset":["auto",C,c]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:g()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",c]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",c]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[x]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...J(),Ve]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Re]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Te]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[v]}],"gradient-via-pos":[{via:[v]}],"gradient-to-pos":[{to:[v]}],"gradient-from":[{from:[w]}],"gradient-via":[{via:[w]}],"gradient-to":[{to:[w]}],rounded:[{rounded:[n]}],"rounded-s":[{"rounded-s":[n]}],"rounded-e":[{"rounded-e":[n]}],"rounded-t":[{"rounded-t":[n]}],"rounded-r":[{"rounded-r":[n]}],"rounded-b":[{"rounded-b":[n]}],"rounded-l":[{"rounded-l":[n]}],"rounded-ss":[{"rounded-ss":[n]}],"rounded-se":[{"rounded-se":[n]}],"rounded-ee":[{"rounded-ee":[n]}],"rounded-es":[{"rounded-es":[n]}],"rounded-tl":[{"rounded-tl":[n]}],"rounded-tr":[{"rounded-tr":[n]}],"rounded-br":[{"rounded-br":[n]}],"rounded-bl":[{"rounded-bl":[n]}],"border-w":[{border:[a]}],"border-w-x":[{"border-x":[a]}],"border-w-y":[{"border-y":[a]}],"border-w-s":[{"border-s":[a]}],"border-w-e":[{"border-e":[a]}],"border-w-t":[{"border-t":[a]}],"border-w-r":[{"border-r":[a]}],"border-w-b":[{"border-b":[a]}],"border-w-l":[{"border-l":[a]}],"border-opacity":[{"border-opacity":[x]}],"border-style":[{border:[...T(),"hidden"]}],"divide-x":[{"divide-x":[a]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[a]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[x]}],"divide-style":[{divide:T()}],"border-color":[{border:[s]}],"border-color-x":[{"border-x":[s]}],"border-color-y":[{"border-y":[s]}],"border-color-s":[{"border-s":[s]}],"border-color-e":[{"border-e":[s]}],"border-color-t":[{"border-t":[s]}],"border-color-r":[{"border-r":[s]}],"border-color-b":[{"border-b":[s]}],"border-color-l":[{"border-l":[s]}],"divide-color":[{divide:[s]}],"outline-style":[{outline:["",...T()]}],"outline-offset":[{"outline-offset":[C,c]}],"outline-w":[{outline:[C,z]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:X()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[x]}],"ring-offset-w":[{"ring-offset":[C,z]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",A,Ne]}],"shadow-color":[{shadow:[R]}],opacity:[{opacity:[x]}],"mix-blend":[{"mix-blend":[...K(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":K()}],filter:[{filter:["","none"]}],blur:[{blur:[t]}],brightness:[{brightness:[o]}],contrast:[{contrast:[p]}],"drop-shadow":[{"drop-shadow":["","none",A,c]}],grayscale:[{grayscale:[d]}],"hue-rotate":[{"hue-rotate":[y]}],invert:[{invert:[f]}],saturate:[{saturate:[L]}],sepia:[{sepia:[V]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[t]}],"backdrop-brightness":[{"backdrop-brightness":[o]}],"backdrop-contrast":[{"backdrop-contrast":[p]}],"backdrop-grayscale":[{"backdrop-grayscale":[d]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[y]}],"backdrop-invert":[{"backdrop-invert":[f]}],"backdrop-opacity":[{"backdrop-opacity":[x]}],"backdrop-saturate":[{"backdrop-saturate":[L]}],"backdrop-sepia":[{"backdrop-sepia":[V]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",c]}],duration:[{duration:M()}],ease:[{ease:["linear","in","out","in-out",c]}],delay:[{delay:M()}],animate:[{animate:["none","spin","ping","pulse","bounce",c]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[S]}],"scale-x":[{"scale-x":[S]}],"scale-y":[{"scale-y":[S]}],rotate:[{rotate:[G,c]}],"translate-x":[{"translate-x":[_]}],"translate-y":[{"translate-y":[_]}],"skew-x":[{"skew-x":[U]}],"skew-y":[{"skew-y":[U]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",c]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",c]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":g()}],"scroll-mx":[{"scroll-mx":g()}],"scroll-my":[{"scroll-my":g()}],"scroll-ms":[{"scroll-ms":g()}],"scroll-me":[{"scroll-me":g()}],"scroll-mt":[{"scroll-mt":g()}],"scroll-mr":[{"scroll-mr":g()}],"scroll-mb":[{"scroll-mb":g()}],"scroll-ml":[{"scroll-ml":g()}],"scroll-p":[{"scroll-p":g()}],"scroll-px":[{"scroll-px":g()}],"scroll-py":[{"scroll-py":g()}],"scroll-ps":[{"scroll-ps":g()}],"scroll-pe":[{"scroll-pe":g()}],"scroll-pt":[{"scroll-pt":g()}],"scroll-pr":[{"scroll-pr":g()}],"scroll-pb":[{"scroll-pb":g()}],"scroll-pl":[{"scroll-pl":g()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",c]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[C,z,W]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},It=Me(Fe),ee=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,te=de,Tt=(e,r)=>t=>{var o;if((r==null?void 0:r.variants)==null)return te(e,t==null?void 0:t.class,t==null?void 0:t.className);const{variants:s,defaultVariants:n}=r,i=Object.keys(s).map(d=>{const y=t==null?void 0:t[d],f=n==null?void 0:n[d];if(y===null)return null;const b=ee(y)||ee(f);return s[d][b]}),a=t&&Object.entries(t).reduce((d,y)=>{let[f,b]=y;return b===void 0||(d[f]=b),d},{}),p=r==null||(o=r.compoundVariants)===null||o===void 0?void 0:o.reduce((d,y)=>{let{class:f,className:b,...w}=y;return Object.entries(w).every(v=>{let[m,u]=v;return Array.isArray(u)?u.includes({...n,...a}[m]):{...n,...a}[m]===u})?[...d,f,b]:d},[]);return te(e,i,p,t==null?void 0:t.class,t==null?void 0:t.className)};export{$e as A,Xe as B,Ye as C,ot as D,nt as E,lt as F,ct as G,ut as H,yt as I,Ue as J,Ke as K,mt as L,ft as M,pt as N,jt as O,xt as P,At as Q,Ct as R,St as S,Pt as T,qt as U,Gt as V,Rt as X,Je as a,Tt as b,de as c,kt as d,vt as e,bt as f,Vt as g,wt as h,zt as i,Mt as j,at as k,it as l,et as m,Be as n,rt as o,Ze as p,dt as q,_e as r,st as s,It as t,De as u,Qe as v,gt as w,tt as x,ht as y,Lt as z};
|
|
|
|
| 158 |
*
|
| 159 |
* This source code is licensed under the ISC license.
|
| 160 |
* See the LICENSE file in the root directory of this source tree.
|
| 161 |
+
*/const ft=l("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/**
|
| 162 |
* @license lucide-react v0.344.0 - ISC
|
| 163 |
*
|
| 164 |
* This source code is licensed under the ISC license.
|
| 165 |
* See the LICENSE file in the root directory of this source tree.
|
| 166 |
+
*/const xt=l("Music",[["path",{d:"M9 18V5l12-2v13",key:"1jmyc2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["circle",{cx:"18",cy:"16",r:"3",key:"1hluhg"}]]);/**
|
| 167 |
+
* @license lucide-react v0.344.0 - ISC
|
| 168 |
+
*
|
| 169 |
+
* This source code is licensed under the ISC license.
|
| 170 |
+
* See the LICENSE file in the root directory of this source tree.
|
| 171 |
+
*/const kt=l("Package",[["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}],["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]);/**
|
| 172 |
* @license lucide-react v0.344.0 - ISC
|
| 173 |
*
|
| 174 |
* This source code is licensed under the ISC license.
|
|
|
|
| 178 |
*
|
| 179 |
* This source code is licensed under the ISC license.
|
| 180 |
* See the LICENSE file in the root directory of this source tree.
|
| 181 |
+
*/const wt=l("Play",[["polygon",{points:"5 3 19 12 5 21 5 3",key:"191637"}]]);/**
|
| 182 |
* @license lucide-react v0.344.0 - ISC
|
| 183 |
*
|
| 184 |
* This source code is licensed under the ISC license.
|
| 185 |
* See the LICENSE file in the root directory of this source tree.
|
| 186 |
+
*/const Mt=l("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/**
|
| 187 |
* @license lucide-react v0.344.0 - ISC
|
| 188 |
*
|
| 189 |
* This source code is licensed under the ISC license.
|
| 190 |
* See the LICENSE file in the root directory of this source tree.
|
| 191 |
+
*/const Ct=l("Puzzle",[["path",{d:"M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.077.877.528 1.073 1.01a2.5 2.5 0 1 0 3.259-3.259c-.482-.196-.933-.558-1.01-1.073-.05-.336.062-.676.303-.917l1.525-1.525A2.402 2.402 0 0 1 12 1.998c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.237 3.237c-.464.18-.894.527-.967 1.02Z",key:"i0oyt7"}]]);/**
|
| 192 |
* @license lucide-react v0.344.0 - ISC
|
| 193 |
*
|
| 194 |
* This source code is licensed under the ISC license.
|
| 195 |
* See the LICENSE file in the root directory of this source tree.
|
| 196 |
+
*/const zt=l("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/**
|
| 197 |
* @license lucide-react v0.344.0 - ISC
|
| 198 |
*
|
| 199 |
* This source code is licensed under the ISC license.
|
| 200 |
* See the LICENSE file in the root directory of this source tree.
|
| 201 |
+
*/const At=l("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/**
|
| 202 |
* @license lucide-react v0.344.0 - ISC
|
| 203 |
*
|
| 204 |
* This source code is licensed under the ISC license.
|
| 205 |
* See the LICENSE file in the root directory of this source tree.
|
| 206 |
+
*/const St=l("Send",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]]);/**
|
| 207 |
* @license lucide-react v0.344.0 - ISC
|
| 208 |
*
|
| 209 |
* This source code is licensed under the ISC license.
|
| 210 |
* See the LICENSE file in the root directory of this source tree.
|
| 211 |
+
*/const jt=l("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/**
|
| 212 |
* @license lucide-react v0.344.0 - ISC
|
| 213 |
*
|
| 214 |
* This source code is licensed under the ISC license.
|
| 215 |
* See the LICENSE file in the root directory of this source tree.
|
| 216 |
+
*/const Pt=l("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);/**
|
| 217 |
* @license lucide-react v0.344.0 - ISC
|
| 218 |
*
|
| 219 |
* This source code is licensed under the ISC license.
|
| 220 |
* See the LICENSE file in the root directory of this source tree.
|
| 221 |
+
*/const Lt=l("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/**
|
| 222 |
* @license lucide-react v0.344.0 - ISC
|
| 223 |
*
|
| 224 |
* This source code is licensed under the ISC license.
|
| 225 |
* See the LICENSE file in the root directory of this source tree.
|
| 226 |
+
*/const qt=l("Type",[["polyline",{points:"4 7 4 4 20 4 20 7",key:"1nosan"}],["line",{x1:"9",x2:"15",y1:"20",y2:"20",key:"swin9y"}],["line",{x1:"12",x2:"12",y1:"4",y2:"20",key:"1tx1rr"}]]);/**
|
| 227 |
* @license lucide-react v0.344.0 - ISC
|
| 228 |
*
|
| 229 |
* This source code is licensed under the ISC license.
|
| 230 |
* See the LICENSE file in the root directory of this source tree.
|
| 231 |
+
*/const Gt=l("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);/**
|
| 232 |
* @license lucide-react v0.344.0 - ISC
|
| 233 |
*
|
| 234 |
* This source code is licensed under the ISC license.
|
| 235 |
* See the LICENSE file in the root directory of this source tree.
|
| 236 |
+
*/const Rt=l("Video",[["path",{d:"m22 8-6 4 6 4V8Z",key:"50v9me"}],["rect",{width:"14",height:"12",x:"2",y:"6",rx:"2",ry:"2",key:"1rqjg6"}]]);/**
|
| 237 |
* @license lucide-react v0.344.0 - ISC
|
| 238 |
*
|
| 239 |
* This source code is licensed under the ISC license.
|
| 240 |
* See the LICENSE file in the root directory of this source tree.
|
| 241 |
+
*/const Vt=l("XCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);/**
|
| 242 |
* @license lucide-react v0.344.0 - ISC
|
| 243 |
*
|
| 244 |
* This source code is licensed under the ISC license.
|
| 245 |
* See the LICENSE file in the root directory of this source tree.
|
| 246 |
+
*/const It=l("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);function re(e){var r,t,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(r=0;r<s;r++)e[r]&&(t=re(e[r]))&&(o&&(o+=" "),o+=t)}else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}function de(){for(var e,r,t=0,o="",s=arguments.length;t<s;t++)(e=arguments[t])&&(r=re(e))&&(o&&(o+=" "),o+=r);return o}const B="-",pe=e=>{const r=he(e),{conflictingClassGroups:t,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:i=>{const a=i.split(B);return a[0]===""&&a.length!==1&&a.shift(),oe(a,r)||ue(i)},getConflictingClassGroupIds:(i,a)=>{const p=t[i]||[];return a&&o[i]?[...p,...o[i]]:p}}},oe=(e,r)=>{var i;if(e.length===0)return r.classGroupId;const t=e[0],o=r.nextPart.get(t),s=o?oe(e.slice(1),o):void 0;if(s)return s;if(r.validators.length===0)return;const n=e.join(B);return(i=r.validators.find(({validator:a})=>a(n)))==null?void 0:i.classGroupId},Y=/^\[(.+)\]$/,ue=e=>{if(Y.test(e)){const r=Y.exec(e)[1],t=r==null?void 0:r.substring(0,r.indexOf(":"));if(t)return"arbitrary.."+t}},he=e=>{const{theme:r,prefix:t}=e,o={nextPart:new Map,validators:[]};return ge(Object.entries(e.classGroups),t).forEach(([n,i])=>{$(i,o,n,r)}),o},$=(e,r,t,o)=>{e.forEach(s=>{if(typeof s=="string"){const n=s===""?r:D(r,s);n.classGroupId=t;return}if(typeof s=="function"){if(ye(s)){$(s(o),r,t,o);return}r.validators.push({validator:s,classGroupId:t});return}Object.entries(s).forEach(([n,i])=>{$(i,D(r,n),t,o)})})},D=(e,r)=>{let t=e;return r.split(B).forEach(o=>{t.nextPart.has(o)||t.nextPart.set(o,{nextPart:new Map,validators:[]}),t=t.nextPart.get(o)}),t},ye=e=>e.isThemeGetter,ge=(e,r)=>r?e.map(([t,o])=>{const s=o.map(n=>typeof n=="string"?r+n:typeof n=="object"?Object.fromEntries(Object.entries(n).map(([i,a])=>[r+i,a])):n);return[t,s]}):e,be=e=>{if(e<1)return{get:()=>{},set:()=>{}};let r=0,t=new Map,o=new Map;const s=(n,i)=>{t.set(n,i),r++,r>e&&(r=0,o=t,t=new Map)};return{get(n){let i=t.get(n);if(i!==void 0)return i;if((i=o.get(n))!==void 0)return s(n,i),i},set(n,i){t.has(n)?t.set(n,i):s(n,i)}}},ne="!",me=e=>{const{separator:r,experimentalParseClassName:t}=e,o=r.length===1,s=r[0],n=r.length,i=a=>{const p=[];let d=0,y=0,f;for(let u=0;u<a.length;u++){let x=a[u];if(d===0){if(x===s&&(o||a.slice(u,u+n)===r)){p.push(a.slice(y,u)),y=u+n;continue}if(x==="/"){f=u;continue}}x==="["?d++:x==="]"&&d--}const b=p.length===0?a:a.substring(y),w=b.startsWith(ne),k=w?b.substring(1):b,m=f&&f>y?f-y:void 0;return{modifiers:p,hasImportantModifier:w,baseClassName:k,maybePostfixModifierPosition:m}};return t?a=>t({className:a,parseClassName:i}):i},fe=e=>{if(e.length<=1)return e;const r=[];let t=[];return e.forEach(o=>{o[0]==="["?(r.push(...t.sort(),o),t=[]):t.push(o)}),r.push(...t.sort()),r},xe=e=>({cache:be(e.cacheSize),parseClassName:me(e),...pe(e)}),ke=/\s+/,ve=(e,r)=>{const{parseClassName:t,getClassGroupId:o,getConflictingClassGroupIds:s}=r,n=[],i=e.trim().split(ke);let a="";for(let p=i.length-1;p>=0;p-=1){const d=i[p],{modifiers:y,hasImportantModifier:f,baseClassName:b,maybePostfixModifierPosition:w}=t(d);let k=!!w,m=o(k?b.substring(0,w):b);if(!m){if(!k){a=d+(a.length>0?" "+a:a);continue}if(m=o(b),!m){a=d+(a.length>0?" "+a:a);continue}k=!1}const u=fe(y).join(":"),x=f?u+ne:u,v=x+m;if(n.includes(v))continue;n.push(v);const L=s(m,k);for(let S=0;S<L.length;++S){const V=L[S];n.push(x+V)}a=d+(a.length>0?" "+a:a)}return a};function we(){let e=0,r,t,o="";for(;e<arguments.length;)(r=arguments[e++])&&(t=ae(r))&&(o&&(o+=" "),o+=t);return o}const ae=e=>{if(typeof e=="string")return e;let r,t="";for(let o=0;o<e.length;o++)e[o]&&(r=ae(e[o]))&&(t&&(t+=" "),t+=r);return t};function Me(e,...r){let t,o,s,n=i;function i(p){const d=r.reduce((y,f)=>f(y),e());return t=xe(d),o=t.cache.get,s=t.cache.set,n=a,a(p)}function a(p){const d=o(p);if(d)return d;const y=ve(p,t);return s(p,y),y}return function(){return n(we.apply(null,arguments))}}const h=e=>{const r=t=>t[e]||[];return r.isThemeGetter=!0,r},se=/^\[(?:([a-z-]+):)?(.+)\]$/i,Ce=/^\d+\/\d+$/,ze=new Set(["px","full","screen"]),Ae=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Se=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,je=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Pe=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Le=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,C=e=>j(e)||ze.has(e)||Ce.test(e),z=e=>P(e,"length",He),j=e=>!!e&&!Number.isNaN(Number(e)),W=e=>P(e,"number",j),G=e=>!!e&&Number.isInteger(Number(e)),qe=e=>e.endsWith("%")&&j(e.slice(0,-1)),c=e=>se.test(e),A=e=>Ae.test(e),Ge=new Set(["length","size","percentage"]),Re=e=>P(e,Ge,le),Ve=e=>P(e,"position",le),Ie=new Set(["image","url"]),Te=e=>P(e,Ie,Oe),Ne=e=>P(e,"",Ee),R=()=>!0,P=(e,r,t)=>{const o=se.exec(e);return o?o[1]?typeof r=="string"?o[1]===r:r.has(o[1]):t(o[2]):!1},He=e=>Se.test(e)&&!je.test(e),le=()=>!1,Ee=e=>Pe.test(e),Oe=e=>Le.test(e),Fe=()=>{const e=h("colors"),r=h("spacing"),t=h("blur"),o=h("brightness"),s=h("borderColor"),n=h("borderRadius"),i=h("borderSpacing"),a=h("borderWidth"),p=h("contrast"),d=h("grayscale"),y=h("hueRotate"),f=h("invert"),b=h("gap"),w=h("gradientColorStops"),k=h("gradientColorStopPositions"),m=h("inset"),u=h("margin"),x=h("opacity"),v=h("padding"),L=h("saturate"),S=h("scale"),V=h("sepia"),U=h("skew"),Z=h("space"),_=h("translate"),N=()=>["auto","contain","none"],H=()=>["auto","hidden","clip","visible","scroll"],E=()=>["auto",c,r],g=()=>[c,r],X=()=>["",C,z],I=()=>["auto",j,c],J=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],T=()=>["solid","dashed","dotted","double","none"],K=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],O=()=>["start","end","center","between","around","evenly","stretch"],q=()=>["","0",c],Q=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>[j,c];return{cacheSize:500,separator:":",theme:{colors:[R],spacing:[C,z],blur:["none","",A,c],brightness:M(),borderColor:[e],borderRadius:["none","","full",A,c],borderSpacing:g(),borderWidth:X(),contrast:M(),grayscale:q(),hueRotate:M(),invert:q(),gap:g(),gradientColorStops:[e],gradientColorStopPositions:[qe,z],inset:E(),margin:E(),opacity:M(),padding:g(),saturate:M(),scale:M(),sepia:q(),skew:M(),space:g(),translate:g()},classGroups:{aspect:[{aspect:["auto","square","video",c]}],container:["container"],columns:[{columns:[A]}],"break-after":[{"break-after":Q()}],"break-before":[{"break-before":Q()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...J(),c]}],overflow:[{overflow:H()}],"overflow-x":[{"overflow-x":H()}],"overflow-y":[{"overflow-y":H()}],overscroll:[{overscroll:N()}],"overscroll-x":[{"overscroll-x":N()}],"overscroll-y":[{"overscroll-y":N()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",G,c]}],basis:[{basis:E()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",c]}],grow:[{grow:q()}],shrink:[{shrink:q()}],order:[{order:["first","last","none",G,c]}],"grid-cols":[{"grid-cols":[R]}],"col-start-end":[{col:["auto",{span:["full",G,c]},c]}],"col-start":[{"col-start":I()}],"col-end":[{"col-end":I()}],"grid-rows":[{"grid-rows":[R]}],"row-start-end":[{row:["auto",{span:[G,c]},c]}],"row-start":[{"row-start":I()}],"row-end":[{"row-end":I()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",c]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",c]}],gap:[{gap:[b]}],"gap-x":[{"gap-x":[b]}],"gap-y":[{"gap-y":[b]}],"justify-content":[{justify:["normal",...O()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...O(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...O(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[v]}],px:[{px:[v]}],py:[{py:[v]}],ps:[{ps:[v]}],pe:[{pe:[v]}],pt:[{pt:[v]}],pr:[{pr:[v]}],pb:[{pb:[v]}],pl:[{pl:[v]}],m:[{m:[u]}],mx:[{mx:[u]}],my:[{my:[u]}],ms:[{ms:[u]}],me:[{me:[u]}],mt:[{mt:[u]}],mr:[{mr:[u]}],mb:[{mb:[u]}],ml:[{ml:[u]}],"space-x":[{"space-x":[Z]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[Z]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",c,r]}],"min-w":[{"min-w":[c,r,"min","max","fit"]}],"max-w":[{"max-w":[c,r,"none","full","min","max","fit","prose",{screen:[A]},A]}],h:[{h:[c,r,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[c,r,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[c,r,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[c,r,"auto","min","max","fit"]}],"font-size":[{text:["base",A,z]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",W]}],"font-family":[{font:[R]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",c]}],"line-clamp":[{"line-clamp":["none",j,W]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",C,c]}],"list-image":[{"list-image":["none",c]}],"list-style-type":[{list:["none","disc","decimal",c]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[x]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[x]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...T(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",C,z]}],"underline-offset":[{"underline-offset":["auto",C,c]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:g()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",c]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",c]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[x]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...J(),Ve]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Re]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Te]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[k]}],"gradient-via-pos":[{via:[k]}],"gradient-to-pos":[{to:[k]}],"gradient-from":[{from:[w]}],"gradient-via":[{via:[w]}],"gradient-to":[{to:[w]}],rounded:[{rounded:[n]}],"rounded-s":[{"rounded-s":[n]}],"rounded-e":[{"rounded-e":[n]}],"rounded-t":[{"rounded-t":[n]}],"rounded-r":[{"rounded-r":[n]}],"rounded-b":[{"rounded-b":[n]}],"rounded-l":[{"rounded-l":[n]}],"rounded-ss":[{"rounded-ss":[n]}],"rounded-se":[{"rounded-se":[n]}],"rounded-ee":[{"rounded-ee":[n]}],"rounded-es":[{"rounded-es":[n]}],"rounded-tl":[{"rounded-tl":[n]}],"rounded-tr":[{"rounded-tr":[n]}],"rounded-br":[{"rounded-br":[n]}],"rounded-bl":[{"rounded-bl":[n]}],"border-w":[{border:[a]}],"border-w-x":[{"border-x":[a]}],"border-w-y":[{"border-y":[a]}],"border-w-s":[{"border-s":[a]}],"border-w-e":[{"border-e":[a]}],"border-w-t":[{"border-t":[a]}],"border-w-r":[{"border-r":[a]}],"border-w-b":[{"border-b":[a]}],"border-w-l":[{"border-l":[a]}],"border-opacity":[{"border-opacity":[x]}],"border-style":[{border:[...T(),"hidden"]}],"divide-x":[{"divide-x":[a]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[a]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[x]}],"divide-style":[{divide:T()}],"border-color":[{border:[s]}],"border-color-x":[{"border-x":[s]}],"border-color-y":[{"border-y":[s]}],"border-color-s":[{"border-s":[s]}],"border-color-e":[{"border-e":[s]}],"border-color-t":[{"border-t":[s]}],"border-color-r":[{"border-r":[s]}],"border-color-b":[{"border-b":[s]}],"border-color-l":[{"border-l":[s]}],"divide-color":[{divide:[s]}],"outline-style":[{outline:["",...T()]}],"outline-offset":[{"outline-offset":[C,c]}],"outline-w":[{outline:[C,z]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:X()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[x]}],"ring-offset-w":[{"ring-offset":[C,z]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",A,Ne]}],"shadow-color":[{shadow:[R]}],opacity:[{opacity:[x]}],"mix-blend":[{"mix-blend":[...K(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":K()}],filter:[{filter:["","none"]}],blur:[{blur:[t]}],brightness:[{brightness:[o]}],contrast:[{contrast:[p]}],"drop-shadow":[{"drop-shadow":["","none",A,c]}],grayscale:[{grayscale:[d]}],"hue-rotate":[{"hue-rotate":[y]}],invert:[{invert:[f]}],saturate:[{saturate:[L]}],sepia:[{sepia:[V]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[t]}],"backdrop-brightness":[{"backdrop-brightness":[o]}],"backdrop-contrast":[{"backdrop-contrast":[p]}],"backdrop-grayscale":[{"backdrop-grayscale":[d]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[y]}],"backdrop-invert":[{"backdrop-invert":[f]}],"backdrop-opacity":[{"backdrop-opacity":[x]}],"backdrop-saturate":[{"backdrop-saturate":[L]}],"backdrop-sepia":[{"backdrop-sepia":[V]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",c]}],duration:[{duration:M()}],ease:[{ease:["linear","in","out","in-out",c]}],delay:[{delay:M()}],animate:[{animate:["none","spin","ping","pulse","bounce",c]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[S]}],"scale-x":[{"scale-x":[S]}],"scale-y":[{"scale-y":[S]}],rotate:[{rotate:[G,c]}],"translate-x":[{"translate-x":[_]}],"translate-y":[{"translate-y":[_]}],"skew-x":[{"skew-x":[U]}],"skew-y":[{"skew-y":[U]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",c]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",c]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":g()}],"scroll-mx":[{"scroll-mx":g()}],"scroll-my":[{"scroll-my":g()}],"scroll-ms":[{"scroll-ms":g()}],"scroll-me":[{"scroll-me":g()}],"scroll-mt":[{"scroll-mt":g()}],"scroll-mr":[{"scroll-mr":g()}],"scroll-mb":[{"scroll-mb":g()}],"scroll-ml":[{"scroll-ml":g()}],"scroll-p":[{"scroll-p":g()}],"scroll-px":[{"scroll-px":g()}],"scroll-py":[{"scroll-py":g()}],"scroll-ps":[{"scroll-ps":g()}],"scroll-pe":[{"scroll-pe":g()}],"scroll-pt":[{"scroll-pt":g()}],"scroll-pr":[{"scroll-pr":g()}],"scroll-pb":[{"scroll-pb":g()}],"scroll-pl":[{"scroll-pl":g()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",c]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[C,z,W]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},Tt=Me(Fe),ee=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,te=de,Nt=(e,r)=>t=>{var o;if((r==null?void 0:r.variants)==null)return te(e,t==null?void 0:t.class,t==null?void 0:t.className);const{variants:s,defaultVariants:n}=r,i=Object.keys(s).map(d=>{const y=t==null?void 0:t[d],f=n==null?void 0:n[d];if(y===null)return null;const b=ee(y)||ee(f);return s[d][b]}),a=t&&Object.entries(t).reduce((d,y)=>{let[f,b]=y;return b===void 0||(d[f]=b),d},{}),p=r==null||(o=r.compoundVariants)===null||o===void 0?void 0:o.reduce((d,y)=>{let{class:f,className:b,...w}=y;return Object.entries(w).every(k=>{let[m,u]=k;return Array.isArray(u)?u.includes({...n,...a}[m]):{...n,...a}[m]===u})?[...d,f,b]:d},[]);return te(e,i,p,t==null?void 0:t.class,t==null?void 0:t.className)};export{$e as A,Xe as B,Ye as C,ot as D,nt as E,lt as F,ct as G,ut as H,yt as I,qt as J,Ue as K,mt as L,ft as M,Ke as N,pt as O,kt as P,Pt as Q,zt as R,jt as S,Lt as T,Gt as U,Rt as V,St as W,It as X,Nt as a,Je as b,de as c,Vt as d,wt as e,vt as f,bt as g,Mt as h,At as i,Ct as j,at as k,it as l,et as m,Be as n,rt as o,Ze as p,dt as q,_e as r,xt as s,Tt as t,st as u,De as v,Qe as w,gt as x,tt as y,ht as z};
|
dist/frontend/index.html
CHANGED
|
@@ -8,11 +8,11 @@
|
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 10 |
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
| 11 |
-
<script type="module" crossorigin src="/assets/index-
|
| 12 |
<link rel="modulepreload" crossorigin href="/assets/vendor-BrxV5zWv.js">
|
| 13 |
<link rel="modulepreload" crossorigin href="/assets/query-BVy6DjHf.js">
|
| 14 |
-
<link rel="modulepreload" crossorigin href="/assets/ui-
|
| 15 |
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
| 16 |
</head>
|
| 17 |
<body>
|
| 18 |
<div id="root"></div>
|
|
|
|
| 8 |
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 10 |
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
| 11 |
+
<script type="module" crossorigin src="/assets/index-glrVO3jG.js"></script>
|
| 12 |
<link rel="modulepreload" crossorigin href="/assets/vendor-BrxV5zWv.js">
|
| 13 |
<link rel="modulepreload" crossorigin href="/assets/query-BVy6DjHf.js">
|
| 14 |
+
<link rel="modulepreload" crossorigin href="/assets/ui-DGAKiEyf.js">
|
| 15 |
+
<link rel="stylesheet" crossorigin href="/assets/index-DH3iE3Xn.css">
|
| 16 |
</head>
|
| 17 |
<body>
|
| 18 |
<div id="root"></div>
|
frontend/src/components/features/InstallModal.tsx
CHANGED
|
@@ -105,7 +105,7 @@ export function InstallModal({ open, onClose, onSuccess }: InstallModalProps) {
|
|
| 105 |
onClose();
|
| 106 |
}
|
| 107 |
}}>
|
| 108 |
-
<DialogContent className="sm:max-w-[500px]">
|
| 109 |
<DialogHeader>
|
| 110 |
<DialogTitle>安装插件</DialogTitle>
|
| 111 |
</DialogHeader>
|
|
|
|
| 105 |
onClose();
|
| 106 |
}
|
| 107 |
}}>
|
| 108 |
+
<DialogContent className="max-w-[calc(100vw-2rem)] sm:max-w-[500px]">
|
| 109 |
<DialogHeader>
|
| 110 |
<DialogTitle>安装插件</DialogTitle>
|
| 111 |
</DialogHeader>
|
frontend/src/components/layout/Layout.tsx
CHANGED
|
@@ -9,23 +9,32 @@ export function Layout() {
|
|
| 9 |
return (
|
| 10 |
<div className="min-h-screen bg-background">
|
| 11 |
<Navbar />
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
>
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
</div>
|
| 27 |
-
</main>
|
| 28 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
</div>
|
| 30 |
);
|
| 31 |
}
|
|
|
|
| 9 |
return (
|
| 10 |
<div className="min-h-screen bg-background">
|
| 11 |
<Navbar />
|
| 12 |
+
{/* 侧边栏:小屏幕下作为覆盖层,大屏幕下固定定位 */}
|
| 13 |
+
<div
|
| 14 |
+
className={`fixed left-0 top-14 bottom-0 z-30 transition-transform duration-300 ${
|
| 15 |
+
sidebarOpen ? 'translate-x-0' : '-translate-x-full'
|
| 16 |
+
}`}
|
| 17 |
+
>
|
| 18 |
+
<Sidebar />
|
| 19 |
+
{/* 小屏幕下侧边栏打开时添加遮罩层 */}
|
| 20 |
+
{sidebarOpen && (
|
| 21 |
+
<div
|
| 22 |
+
className="fixed inset-0 top-14 bg-black/50 z-20 md:hidden"
|
| 23 |
+
onClick={() => useUIStore.getState().setSidebarOpen(false)}
|
| 24 |
+
/>
|
| 25 |
+
)}
|
|
|
|
|
|
|
| 26 |
</div>
|
| 27 |
+
|
| 28 |
+
{/* 主内容区域:大屏幕下根据侧边栏状态调整边距,小屏幕下始终全宽 */}
|
| 29 |
+
<main
|
| 30 |
+
className={`min-h-[calc(100vh-3.5rem)] transition-all duration-300 ${
|
| 31 |
+
sidebarOpen ? 'ml-0 md:ml-64' : 'ml-0'
|
| 32 |
+
}`}
|
| 33 |
+
>
|
| 34 |
+
<div className="p-4 md:p-6">
|
| 35 |
+
<Outlet />
|
| 36 |
+
</div>
|
| 37 |
+
</main>
|
| 38 |
</div>
|
| 39 |
);
|
| 40 |
}
|
frontend/src/components/layout/Navbar.tsx
CHANGED
|
@@ -1,9 +1,12 @@
|
|
| 1 |
import { Link, useLocation } from 'react-router-dom';
|
| 2 |
-
import { LayoutTemplate } from 'lucide-react';
|
| 3 |
import { cn } from '@lib/utils';
|
|
|
|
|
|
|
| 4 |
|
| 5 |
export function Navbar() {
|
| 6 |
const location = useLocation();
|
|
|
|
| 7 |
|
| 8 |
const navItems = [
|
| 9 |
{ path: '/', label: '首页' },
|
|
@@ -13,13 +16,26 @@ export function Navbar() {
|
|
| 13 |
|
| 14 |
return (
|
| 15 |
<nav className="sticky top-0 z-50 border-b bg-card">
|
| 16 |
-
<div className="
|
| 17 |
-
<
|
| 18 |
-
|
| 19 |
-
<
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
{navItems.map((item) => (
|
| 24 |
<li key={item.path}>
|
| 25 |
<Link
|
|
|
|
| 1 |
import { Link, useLocation } from 'react-router-dom';
|
| 2 |
+
import { LayoutTemplate, Menu, X } from 'lucide-react';
|
| 3 |
import { cn } from '@lib/utils';
|
| 4 |
+
import { useUIStore } from '@stores/uiStore';
|
| 5 |
+
import { Button } from '@components/ui/button';
|
| 6 |
|
| 7 |
export function Navbar() {
|
| 8 |
const location = useLocation();
|
| 9 |
+
const { sidebarOpen, toggleSidebar } = useUIStore();
|
| 10 |
|
| 11 |
const navItems = [
|
| 12 |
{ path: '/', label: '首页' },
|
|
|
|
| 16 |
|
| 17 |
return (
|
| 18 |
<nav className="sticky top-0 z-50 border-b bg-card">
|
| 19 |
+
<div className="px-4 h-14 flex items-center justify-between">
|
| 20 |
+
<div className="flex items-center gap-2">
|
| 21 |
+
{/* 侧边栏切换按钮 */}
|
| 22 |
+
<Button
|
| 23 |
+
variant="ghost"
|
| 24 |
+
size="icon"
|
| 25 |
+
onClick={toggleSidebar}
|
| 26 |
+
className="md:flex"
|
| 27 |
+
aria-label={sidebarOpen ? '关闭侧边栏' : '打开侧边栏'}
|
| 28 |
+
>
|
| 29 |
+
{sidebarOpen ? <X className="h-5 w-5" /> : <Menu className="h-5 w-5" />}
|
| 30 |
+
</Button>
|
| 31 |
|
| 32 |
+
<Link to="/" className="flex items-center gap-2 font-semibold">
|
| 33 |
+
<LayoutTemplate className="h-5 w-5" />
|
| 34 |
+
<span className="hidden sm:inline">Message Function Center</span>
|
| 35 |
+
</Link>
|
| 36 |
+
</div>
|
| 37 |
+
|
| 38 |
+
<ul className="flex items-center gap-4 md:gap-6">
|
| 39 |
{navItems.map((item) => (
|
| 40 |
<li key={item.path}>
|
| 41 |
<Link
|
frontend/src/stores/uiStore.ts
CHANGED
|
@@ -12,10 +12,18 @@ interface UIState {
|
|
| 12 |
setTheme: (theme: 'light' | 'dark') => void;
|
| 13 |
}
|
| 14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
export const useUIStore = create<UIState>()(
|
| 16 |
persist(
|
| 17 |
(set) => ({
|
| 18 |
-
sidebarOpen:
|
| 19 |
language: 'zh-CN',
|
| 20 |
theme: 'light',
|
| 21 |
|
|
|
|
| 12 |
setTheme: (theme: 'light' | 'dark') => void;
|
| 13 |
}
|
| 14 |
|
| 15 |
+
// 初始化时检测屏幕宽度,小屏幕下默认关闭侧边栏
|
| 16 |
+
const getInitialSidebarState = () => {
|
| 17 |
+
if (typeof window !== 'undefined') {
|
| 18 |
+
return window.innerWidth >= 768; // md breakpoint
|
| 19 |
+
}
|
| 20 |
+
return true;
|
| 21 |
+
};
|
| 22 |
+
|
| 23 |
export const useUIStore = create<UIState>()(
|
| 24 |
persist(
|
| 25 |
(set) => ({
|
| 26 |
+
sidebarOpen: getInitialSidebarState(),
|
| 27 |
language: 'zh-CN',
|
| 28 |
theme: 'light',
|
| 29 |
|
skills-lock.json
CHANGED
|
@@ -6,15 +6,45 @@
|
|
| 6 |
"sourceType": "github",
|
| 7 |
"computedHash": "516bd2154eb843a8240e43d5b285229129853114ad7075a5e141e1c08e408c84"
|
| 8 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
"mcp-builder": {
|
| 10 |
"source": "anthropics/skills",
|
| 11 |
"sourceType": "github",
|
| 12 |
"computedHash": "f08cbdec74dba480ec5217363446dae154b7576b8c3d9b4cb17aff234f15973b"
|
| 13 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
"shadcn": {
|
| 15 |
"source": "shadcn/ui",
|
| 16 |
"sourceType": "github",
|
| 17 |
"computedHash": "642a177bee320618caa49f5106cadb4e7594c606e867f61ba7b56d19cf745cd5"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
}
|
| 19 |
}
|
| 20 |
}
|
|
|
|
| 6 |
"sourceType": "github",
|
| 7 |
"computedHash": "516bd2154eb843a8240e43d5b285229129853114ad7075a5e141e1c08e408c84"
|
| 8 |
},
|
| 9 |
+
"implementation-planning": {
|
| 10 |
+
"source": "ANIAN0/pick-skills",
|
| 11 |
+
"sourceType": "github",
|
| 12 |
+
"skillPath": "skills/implementation-planning/SKILL.md",
|
| 13 |
+
"computedHash": "a6150b56c8505508c78ac65be350730b2a717017f4e5f06c749dc37e98b23fb7"
|
| 14 |
+
},
|
| 15 |
+
"issue-troubleshooting": {
|
| 16 |
+
"source": "ANIAN0/pick-skills",
|
| 17 |
+
"sourceType": "github",
|
| 18 |
+
"skillPath": "skills/issue-troubleshooting/SKILL.md",
|
| 19 |
+
"computedHash": "8ff137138fdd9d80ad696284c96e02fd876eb5094297c47c0c8d52a1685a2406"
|
| 20 |
+
},
|
| 21 |
"mcp-builder": {
|
| 22 |
"source": "anthropics/skills",
|
| 23 |
"sourceType": "github",
|
| 24 |
"computedHash": "f08cbdec74dba480ec5217363446dae154b7576b8c3d9b4cb17aff234f15973b"
|
| 25 |
},
|
| 26 |
+
"plan-execution": {
|
| 27 |
+
"source": "ANIAN0/pick-skills",
|
| 28 |
+
"sourceType": "github",
|
| 29 |
+
"skillPath": "skills/plan-execution/SKILL.md",
|
| 30 |
+
"computedHash": "774c4934e196c08f5a2a7c32da9b2681ed793067bba44f47865ab686d521ebb8"
|
| 31 |
+
},
|
| 32 |
+
"requirements-workshop": {
|
| 33 |
+
"source": "ANIAN0/pick-skills",
|
| 34 |
+
"sourceType": "github",
|
| 35 |
+
"skillPath": "skills/requirements-workshop/SKILL.md",
|
| 36 |
+
"computedHash": "80e794c02e0da1d28e291529ac3469011e8a9da5334d8130940dd75b0ee41104"
|
| 37 |
+
},
|
| 38 |
"shadcn": {
|
| 39 |
"source": "shadcn/ui",
|
| 40 |
"sourceType": "github",
|
| 41 |
"computedHash": "642a177bee320618caa49f5106cadb4e7594c606e867f61ba7b56d19cf745cd5"
|
| 42 |
+
},
|
| 43 |
+
"tech-design": {
|
| 44 |
+
"source": "ANIAN0/pick-skills",
|
| 45 |
+
"sourceType": "github",
|
| 46 |
+
"skillPath": "skills/tech-design/SKILL.md",
|
| 47 |
+
"computedHash": "d703af1f63e97c80cb98be1cb96f56ce3e99dbbaaa3a13ecde244b9ade65344a"
|
| 48 |
}
|
| 49 |
}
|
| 50 |
}
|
需求.md
DELETED
|
@@ -1,596 +0,0 @@
|
|
| 1 |
-
1. 现有首页没有内容
|
| 2 |
-
- 新增启用插件列表,展示插件名称和描述,点击可打开插件页面
|
| 3 |
-
- 新增用户反馈记录和提交用户反馈的输入框。反馈记录记录包括用户名、反馈内容、反馈时间。
|
| 4 |
-
|
| 5 |
-
参考UI
|
| 6 |
-
<!DOCTYPE html>
|
| 7 |
-
<html lang="zh-CN">
|
| 8 |
-
<head>
|
| 9 |
-
<meta charset="UTF-8">
|
| 10 |
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 11 |
-
<title>念的工具集 - 首页</title>
|
| 12 |
-
<style>
|
| 13 |
-
* {
|
| 14 |
-
margin: 0;
|
| 15 |
-
padding: 0;
|
| 16 |
-
box-sizing: border-box;
|
| 17 |
-
}
|
| 18 |
-
|
| 19 |
-
body {
|
| 20 |
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans SC', Roboto, sans-serif;
|
| 21 |
-
background: #f5f7fa;
|
| 22 |
-
color: #2c3e50;
|
| 23 |
-
line-height: 1.6;
|
| 24 |
-
}
|
| 25 |
-
|
| 26 |
-
/* 导航栏样式 - 保持原有设计 */
|
| 27 |
-
.navbar {
|
| 28 |
-
width: 100%;
|
| 29 |
-
height: 70px;
|
| 30 |
-
background: #2C3E50;
|
| 31 |
-
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.10);
|
| 32 |
-
position: fixed;
|
| 33 |
-
top: 0;
|
| 34 |
-
left: 0;
|
| 35 |
-
z-index: 1000;
|
| 36 |
-
}
|
| 37 |
-
|
| 38 |
-
.navbar-container {
|
| 39 |
-
width: 1200px;
|
| 40 |
-
height: 38px;
|
| 41 |
-
margin: 16px auto;
|
| 42 |
-
padding: 0 16px;
|
| 43 |
-
display: flex;
|
| 44 |
-
justify-content: space-between;
|
| 45 |
-
align-items: center;
|
| 46 |
-
}
|
| 47 |
-
|
| 48 |
-
.logo {
|
| 49 |
-
color: white;
|
| 50 |
-
font-size: 24px;
|
| 51 |
-
font-weight: 700;
|
| 52 |
-
line-height: 32px;
|
| 53 |
-
}
|
| 54 |
-
|
| 55 |
-
.nav-menu {
|
| 56 |
-
display: flex;
|
| 57 |
-
gap: 32px;
|
| 58 |
-
}
|
| 59 |
-
|
| 60 |
-
.nav-item {
|
| 61 |
-
padding: 8px 16px;
|
| 62 |
-
border-radius: 4px;
|
| 63 |
-
color: white;
|
| 64 |
-
font-size: 16px;
|
| 65 |
-
font-family: Roboto;
|
| 66 |
-
font-weight: 400;
|
| 67 |
-
text-decoration: none;
|
| 68 |
-
transition: background-color 0.2s ease;
|
| 69 |
-
cursor: pointer;
|
| 70 |
-
}
|
| 71 |
-
|
| 72 |
-
.nav-item:hover {
|
| 73 |
-
background-color: rgba(255, 255, 255, 0.1);
|
| 74 |
-
}
|
| 75 |
-
|
| 76 |
-
.nav-item.active {
|
| 77 |
-
background-color: rgba(255, 255, 255, 0.15);
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
/* 主内容区域 */
|
| 81 |
-
.main-container {
|
| 82 |
-
width: 1200px;
|
| 83 |
-
margin: 100px auto 40px;
|
| 84 |
-
padding: 0 16px;
|
| 85 |
-
}
|
| 86 |
-
|
| 87 |
-
/* 页面标题 */
|
| 88 |
-
.page-header {
|
| 89 |
-
margin-bottom: 32px;
|
| 90 |
-
}
|
| 91 |
-
|
| 92 |
-
.page-title {
|
| 93 |
-
font-size: 32px;
|
| 94 |
-
font-weight: 700;
|
| 95 |
-
color: #2c3e50;
|
| 96 |
-
margin-bottom: 8px;
|
| 97 |
-
}
|
| 98 |
-
|
| 99 |
-
.page-subtitle {
|
| 100 |
-
font-size: 16px;
|
| 101 |
-
color: #6c7a89;
|
| 102 |
-
}
|
| 103 |
-
|
| 104 |
-
/* 网格布局 */
|
| 105 |
-
.content-grid {
|
| 106 |
-
display: grid;
|
| 107 |
-
grid-template-columns: 2fr 1fr;
|
| 108 |
-
gap: 24px;
|
| 109 |
-
}
|
| 110 |
-
|
| 111 |
-
/* 卡片基础样式 */
|
| 112 |
-
.card {
|
| 113 |
-
background: white;
|
| 114 |
-
border-radius: 8px;
|
| 115 |
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
|
| 116 |
-
border: 1px solid #e0e6ed;
|
| 117 |
-
transition: box-shadow 0.2s ease;
|
| 118 |
-
}
|
| 119 |
-
|
| 120 |
-
.card:hover {
|
| 121 |
-
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
|
| 122 |
-
}
|
| 123 |
-
|
| 124 |
-
.card-header {
|
| 125 |
-
padding: 20px 24px;
|
| 126 |
-
border-bottom: 1px solid #e0e6ed;
|
| 127 |
-
}
|
| 128 |
-
|
| 129 |
-
.card-body {
|
| 130 |
-
padding: 20px 24px;
|
| 131 |
-
}
|
| 132 |
-
|
| 133 |
-
.card-title {
|
| 134 |
-
font-size: 20px;
|
| 135 |
-
font-weight: 600;
|
| 136 |
-
color: #2c3e50;
|
| 137 |
-
}
|
| 138 |
-
|
| 139 |
-
/* 插件列表样式 */
|
| 140 |
-
.plugin-grid {
|
| 141 |
-
display: grid;
|
| 142 |
-
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
| 143 |
-
gap: 16px;
|
| 144 |
-
}
|
| 145 |
-
|
| 146 |
-
.plugin-card {
|
| 147 |
-
padding: 20px;
|
| 148 |
-
border-radius: 8px;
|
| 149 |
-
background: white;
|
| 150 |
-
border: 1px solid #e0e6ed;
|
| 151 |
-
cursor: pointer;
|
| 152 |
-
transition: all 0.2s ease;
|
| 153 |
-
}
|
| 154 |
-
|
| 155 |
-
.plugin-card:hover {
|
| 156 |
-
border-color: #3498db;
|
| 157 |
-
box-shadow: 0 4px 12px rgba(52, 152, 219, 0.15);
|
| 158 |
-
transform: translateY(-2px);
|
| 159 |
-
}
|
| 160 |
-
|
| 161 |
-
.plugin-name {
|
| 162 |
-
font-size: 18px;
|
| 163 |
-
font-weight: 600;
|
| 164 |
-
color: #2c3e50;
|
| 165 |
-
margin-bottom: 8px;
|
| 166 |
-
}
|
| 167 |
-
|
| 168 |
-
.plugin-description {
|
| 169 |
-
font-size: 14px;
|
| 170 |
-
color: #6c7a89;
|
| 171 |
-
line-height: 1.5;
|
| 172 |
-
}
|
| 173 |
-
|
| 174 |
-
.plugin-status {
|
| 175 |
-
display: inline-flex;
|
| 176 |
-
align-items: center;
|
| 177 |
-
gap: 4px;
|
| 178 |
-
margin-top: 12px;
|
| 179 |
-
font-size: 12px;
|
| 180 |
-
color: #27ae60;
|
| 181 |
-
font-weight: 500;
|
| 182 |
-
}
|
| 183 |
-
|
| 184 |
-
.status-dot {
|
| 185 |
-
width: 6px;
|
| 186 |
-
height: 6px;
|
| 187 |
-
border-radius: 50%;
|
| 188 |
-
background: #27ae60;
|
| 189 |
-
}
|
| 190 |
-
|
| 191 |
-
/* 反馈表单样式 */
|
| 192 |
-
.feedback-form {
|
| 193 |
-
margin-bottom: 24px;
|
| 194 |
-
}
|
| 195 |
-
|
| 196 |
-
.form-group {
|
| 197 |
-
margin-bottom: 16px;
|
| 198 |
-
}
|
| 199 |
-
|
| 200 |
-
.form-label {
|
| 201 |
-
display: block;
|
| 202 |
-
font-size: 14px;
|
| 203 |
-
font-weight: 500;
|
| 204 |
-
color: #2c3e50;
|
| 205 |
-
margin-bottom: 6px;
|
| 206 |
-
}
|
| 207 |
-
|
| 208 |
-
.form-input {
|
| 209 |
-
width: 100%;
|
| 210 |
-
padding: 10px 12px;
|
| 211 |
-
border: 1px solid #d0d8e0;
|
| 212 |
-
border-radius: 6px;
|
| 213 |
-
font-size: 14px;
|
| 214 |
-
font-family: inherit;
|
| 215 |
-
transition: border-color 0.2s ease;
|
| 216 |
-
}
|
| 217 |
-
|
| 218 |
-
.form-input:focus {
|
| 219 |
-
outline: none;
|
| 220 |
-
border-color: #3498db;
|
| 221 |
-
box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.15);
|
| 222 |
-
}
|
| 223 |
-
|
| 224 |
-
.form-textarea {
|
| 225 |
-
width: 100%;
|
| 226 |
-
min-height: 80px;
|
| 227 |
-
padding: 12px;
|
| 228 |
-
border: 1px solid #d0d8e0;
|
| 229 |
-
border-radius: 6px;
|
| 230 |
-
font-size: 14px;
|
| 231 |
-
font-family: inherit;
|
| 232 |
-
resize: vertical;
|
| 233 |
-
transition: border-color 0.2s ease;
|
| 234 |
-
}
|
| 235 |
-
|
| 236 |
-
.form-textarea:focus {
|
| 237 |
-
outline: none;
|
| 238 |
-
border-color: #3498db;
|
| 239 |
-
box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.15);
|
| 240 |
-
}
|
| 241 |
-
|
| 242 |
-
.submit-btn {
|
| 243 |
-
width: 100%;
|
| 244 |
-
padding: 10px 20px;
|
| 245 |
-
background: #3498db;
|
| 246 |
-
color: white;
|
| 247 |
-
border: none;
|
| 248 |
-
border-radius: 6px;
|
| 249 |
-
font-size: 14px;
|
| 250 |
-
font-weight: 500;
|
| 251 |
-
cursor: pointer;
|
| 252 |
-
transition: background-color 0.2s ease;
|
| 253 |
-
}
|
| 254 |
-
|
| 255 |
-
.submit-btn:hover {
|
| 256 |
-
background: #2980b9;
|
| 257 |
-
}
|
| 258 |
-
|
| 259 |
-
.submit-btn:active {
|
| 260 |
-
transform: scale(0.98);
|
| 261 |
-
}
|
| 262 |
-
|
| 263 |
-
/* 反馈记录样式 */
|
| 264 |
-
.feedback-list {
|
| 265 |
-
max-height: 500px;
|
| 266 |
-
overflow-y: auto;
|
| 267 |
-
}
|
| 268 |
-
|
| 269 |
-
.feedback-item {
|
| 270 |
-
padding: 16px;
|
| 271 |
-
border-bottom: 1px solid #f0f4f8;
|
| 272 |
-
transition: background-color 0.2s ease;
|
| 273 |
-
}
|
| 274 |
-
|
| 275 |
-
.feedback-item:hover {
|
| 276 |
-
background: #f8fafc;
|
| 277 |
-
}
|
| 278 |
-
|
| 279 |
-
.feedback-item:last-child {
|
| 280 |
-
border-bottom: none;
|
| 281 |
-
}
|
| 282 |
-
|
| 283 |
-
.feedback-header {
|
| 284 |
-
display: flex;
|
| 285 |
-
justify-content: space-between;
|
| 286 |
-
align-items: center;
|
| 287 |
-
margin-bottom: 8px;
|
| 288 |
-
}
|
| 289 |
-
|
| 290 |
-
.feedback-user {
|
| 291 |
-
display: flex;
|
| 292 |
-
align-items: center;
|
| 293 |
-
gap: 8px;
|
| 294 |
-
}
|
| 295 |
-
|
| 296 |
-
.user-avatar {
|
| 297 |
-
width: 32px;
|
| 298 |
-
height: 32px;
|
| 299 |
-
border-radius: 50%;
|
| 300 |
-
background: #3498db;
|
| 301 |
-
display: flex;
|
| 302 |
-
align-items: center;
|
| 303 |
-
justify-content: center;
|
| 304 |
-
color: white;
|
| 305 |
-
font-size: 14px;
|
| 306 |
-
font-weight: 600;
|
| 307 |
-
}
|
| 308 |
-
|
| 309 |
-
.user-name {
|
| 310 |
-
font-size: 14px;
|
| 311 |
-
font-weight: 500;
|
| 312 |
-
color: #2c3e50;
|
| 313 |
-
}
|
| 314 |
-
|
| 315 |
-
.feedback-time {
|
| 316 |
-
font-size: 12px;
|
| 317 |
-
color: #95a5a6;
|
| 318 |
-
}
|
| 319 |
-
|
| 320 |
-
.feedback-content {
|
| 321 |
-
font-size: 14px;
|
| 322 |
-
color: #6c7a89;
|
| 323 |
-
line-height: 1.5;
|
| 324 |
-
margin-left: 40px;
|
| 325 |
-
}
|
| 326 |
-
|
| 327 |
-
/* 滚动条样式 */
|
| 328 |
-
.feedback-list::-webkit-scrollbar {
|
| 329 |
-
width: 6px;
|
| 330 |
-
}
|
| 331 |
-
|
| 332 |
-
.feedback-list::-webkit-scrollbar-track {
|
| 333 |
-
background: #f0f4f8;
|
| 334 |
-
border-radius: 3px;
|
| 335 |
-
}
|
| 336 |
-
|
| 337 |
-
.feedback-list::-webkit-scrollbar-thumb {
|
| 338 |
-
background: #d0d8e0;
|
| 339 |
-
border-radius: 3px;
|
| 340 |
-
}
|
| 341 |
-
|
| 342 |
-
.feedback-list::-webkit-scrollbar-thumb:hover {
|
| 343 |
-
background: #b0b8c0;
|
| 344 |
-
}
|
| 345 |
-
|
| 346 |
-
/* 空状态提示 */
|
| 347 |
-
.empty-state {
|
| 348 |
-
text-align: center;
|
| 349 |
-
padding: 40px;
|
| 350 |
-
color: #95a5a6;
|
| 351 |
-
}
|
| 352 |
-
|
| 353 |
-
.empty-icon {
|
| 354 |
-
font-size: 48px;
|
| 355 |
-
margin-bottom: 16px;
|
| 356 |
-
opacity: 0.5;
|
| 357 |
-
}
|
| 358 |
-
|
| 359 |
-
/* 响应式设计 */
|
| 360 |
-
@media (max-width: 1240px) {
|
| 361 |
-
.navbar-container,
|
| 362 |
-
.main-container {
|
| 363 |
-
width: 100%;
|
| 364 |
-
padding-left: 20px;
|
| 365 |
-
padding-right: 20px;
|
| 366 |
-
}
|
| 367 |
-
}
|
| 368 |
-
|
| 369 |
-
@media (max-width: 968px) {
|
| 370 |
-
.content-grid {
|
| 371 |
-
grid-template-columns: 1fr;
|
| 372 |
-
}
|
| 373 |
-
|
| 374 |
-
.plugin-grid {
|
| 375 |
-
grid-template-columns: 1fr;
|
| 376 |
-
}
|
| 377 |
-
}
|
| 378 |
-
</style>
|
| 379 |
-
</head>
|
| 380 |
-
<body>
|
| 381 |
-
<!-- 导航栏 -->
|
| 382 |
-
<nav class="navbar">
|
| 383 |
-
<div class="navbar-container">
|
| 384 |
-
<div class="logo">念的工具集</div>
|
| 385 |
-
<div class="nav-menu">
|
| 386 |
-
<a class="nav-item active">首页</a>
|
| 387 |
-
<a class="nav-item">插件管理</a>
|
| 388 |
-
<a class="nav-item">框架管理</a>
|
| 389 |
-
</div>
|
| 390 |
-
</div>
|
| 391 |
-
</nav>
|
| 392 |
-
|
| 393 |
-
<!-- 主内容区域 -->
|
| 394 |
-
<div class="main-container">
|
| 395 |
-
<!-- 页面标题 -->
|
| 396 |
-
<div class="page-header">
|
| 397 |
-
<h1 class="page-title">欢迎使用工具集</h1>
|
| 398 |
-
<p class="page-subtitle">管理您的插件并查看用户反馈</p>
|
| 399 |
-
</div>
|
| 400 |
-
|
| 401 |
-
<!-- 内容网格 -->
|
| 402 |
-
<div class="content-grid">
|
| 403 |
-
<!-- 左侧:插件列表 -->
|
| 404 |
-
<div class="card">
|
| 405 |
-
<div class="card-header">
|
| 406 |
-
<h2 class="card-title">已启用插件</h2>
|
| 407 |
-
</div>
|
| 408 |
-
<div class="card-body">
|
| 409 |
-
<div class="plugin-grid">
|
| 410 |
-
<div class="plugin-card" onclick="openPlugin('data-viewer')">
|
| 411 |
-
<div class="plugin-name">数据查看器</div>
|
| 412 |
-
<div class="plugin-description">实时查看和分析系统数据,支持多种格式导出</div>
|
| 413 |
-
<div class="plugin-status">
|
| 414 |
-
<span class="status-dot"></span>
|
| 415 |
-
<span>已启用</span>
|
| 416 |
-
</div>
|
| 417 |
-
</div>
|
| 418 |
-
|
| 419 |
-
<div class="plugin-card" onclick="openPlugin('task-scheduler')">
|
| 420 |
-
<div class="plugin-name">任务调度器</div>
|
| 421 |
-
<div class="plugin-description">自动化任务管理,支持定时执行和优先级设置</div>
|
| 422 |
-
<div class="plugin-status">
|
| 423 |
-
<span class="status-dot"></span>
|
| 424 |
-
<span>已启用</span>
|
| 425 |
-
</div>
|
| 426 |
-
</div>
|
| 427 |
-
|
| 428 |
-
<div class="plugin-card" onclick="openPlugin('file-manager')">
|
| 429 |
-
<div class="plugin-name">文件管理器</div>
|
| 430 |
-
<div class="plugin-description">集中管理所有文件,支持版本控制和快速检索</div>
|
| 431 |
-
<div class="plugin-status">
|
| 432 |
-
<span class="status-dot"></span>
|
| 433 |
-
<span>已启用</span>
|
| 434 |
-
</div>
|
| 435 |
-
</div>
|
| 436 |
-
|
| 437 |
-
<div class="plugin-card" onclick="openPlugin('report-generator')">
|
| 438 |
-
<div class="plugin-name">报表生成器</div>
|
| 439 |
-
<div class="plugin-description">一键生成各类统计报表,支持自定义模板</div>
|
| 440 |
-
<div class="plugin-status">
|
| 441 |
-
<span class="status-dot"></span>
|
| 442 |
-
<span>已启用</span>
|
| 443 |
-
</div>
|
| 444 |
-
</div>
|
| 445 |
-
|
| 446 |
-
<div class="plugin-card" onclick="openPlugin('notification-center')">
|
| 447 |
-
<div class="plugin-name">通知中心</div>
|
| 448 |
-
<div class="plugin-description">统一管理各类通知,支持多渠道推送</div>
|
| 449 |
-
<div class="plugin-status">
|
| 450 |
-
<span class="status-dot"></span>
|
| 451 |
-
<span>已启用</span>
|
| 452 |
-
</div>
|
| 453 |
-
</div>
|
| 454 |
-
|
| 455 |
-
<div class="plugin-card" onclick="openPlugin('api-monitor')">
|
| 456 |
-
<div class="plugin-name">API监控</div>
|
| 457 |
-
<div class="plugin-description">实时监控API状态,自动告警异常</div>
|
| 458 |
-
<div class="plugin-status">
|
| 459 |
-
<span class="status-dot"></span>
|
| 460 |
-
<span>已启用</span>
|
| 461 |
-
</div>
|
| 462 |
-
</div>
|
| 463 |
-
</div>
|
| 464 |
-
</div>
|
| 465 |
-
</div>
|
| 466 |
-
|
| 467 |
-
<!-- 右侧:用户反馈 -->
|
| 468 |
-
<div class="card">
|
| 469 |
-
<div class="card-header">
|
| 470 |
-
<h2 class="card-title">用户反馈</h2>
|
| 471 |
-
</div>
|
| 472 |
-
<div class="card-body">
|
| 473 |
-
<!-- 反馈表单 -->
|
| 474 |
-
<form class="feedback-form" onsubmit="submitFeedback(event)">
|
| 475 |
-
<div class="form-group">
|
| 476 |
-
<label class="form-label">您的姓名</label>
|
| 477 |
-
<input type="text" class="form-input" id="usernameInput" placeholder="请输入您的姓名" maxlength="20" required>
|
| 478 |
-
</div>
|
| 479 |
-
<div class="form-group">
|
| 480 |
-
<label class="form-label">反馈内容</label>
|
| 481 |
-
<textarea class="form-textarea" id="feedbackInput" placeholder="请描述您的问题或建议..." required></textarea>
|
| 482 |
-
</div>
|
| 483 |
-
<button type="submit" class="submit-btn">提交反馈</button>
|
| 484 |
-
</form>
|
| 485 |
-
|
| 486 |
-
<!-- 反馈记录列表 -->
|
| 487 |
-
<div class="feedback-list" id="feedbackList">
|
| 488 |
-
<div class="feedback-item">
|
| 489 |
-
<div class="feedback-header">
|
| 490 |
-
<div class="feedback-user">
|
| 491 |
-
<div class="user-avatar">张</div>
|
| 492 |
-
<span class="user-name">张三</span>
|
| 493 |
-
</div>
|
| 494 |
-
<span class="feedback-time">2024-01-02 14:30</span>
|
| 495 |
-
</div>
|
| 496 |
-
<div class="feedback-content">
|
| 497 |
-
数据查看器的导出功能非常好用,希望能增加Excel格式支持。
|
| 498 |
-
</div>
|
| 499 |
-
</div>
|
| 500 |
-
|
| 501 |
-
<div class="feedback-item">
|
| 502 |
-
<div class="feedback-header">
|
| 503 |
-
<div class="feedback-user">
|
| 504 |
-
<div class="user-avatar">李</div>
|
| 505 |
-
<span class="user-name">李四</span>
|
| 506 |
-
</div>
|
| 507 |
-
<span class="feedback-time">2024-01-02 10:15</span>
|
| 508 |
-
</div>
|
| 509 |
-
<div class="feedback-content">
|
| 510 |
-
任务调度器的界面可以更直观一些,现在设置定时任务需要学习成本。
|
| 511 |
-
</div>
|
| 512 |
-
</div>
|
| 513 |
-
|
| 514 |
-
<div class="feedback-item">
|
| 515 |
-
<div class="feedback-header">
|
| 516 |
-
<div class="feedback-user">
|
| 517 |
-
<div class="user-avatar">王</div>
|
| 518 |
-
<span class="user-name">王五</span>
|
| 519 |
-
</div>
|
| 520 |
-
<span class="feedback-time">2024-01-01 18:45</span>
|
| 521 |
-
</div>
|
| 522 |
-
<div class="feedback-content">
|
| 523 |
-
文件管理器的搜索速度很快,但是希望能支持模糊搜索功能。
|
| 524 |
-
</div>
|
| 525 |
-
</div>
|
| 526 |
-
|
| 527 |
-
<div class="feedback-item">
|
| 528 |
-
<div class="feedback-header">
|
| 529 |
-
<div class="feedback-user">
|
| 530 |
-
<div class="user-avatar">赵</div>
|
| 531 |
-
<span class="user-name">赵六</span>
|
| 532 |
-
</div>
|
| 533 |
-
<span class="feedback-time">2024-01-01 09:20</span>
|
| 534 |
-
</div>
|
| 535 |
-
<div class="feedback-content">
|
| 536 |
-
通知中心的邮件推送功能有时会有延迟,希望能优化一下。
|
| 537 |
-
</div>
|
| 538 |
-
</div>
|
| 539 |
-
</div>
|
| 540 |
-
</div>
|
| 541 |
-
</div>
|
| 542 |
-
</div>
|
| 543 |
-
</div>
|
| 544 |
-
|
| 545 |
-
<script>
|
| 546 |
-
// 模拟打开插件页面
|
| 547 |
-
function openPlugin(pluginId) {
|
| 548 |
-
console.log(`打开插件: ${pluginId}`);
|
| 549 |
-
// 实际项目中这里会跳转到插件详情页
|
| 550 |
-
alert(`即将打开插件: ${pluginId}`);
|
| 551 |
-
}
|
| 552 |
-
|
| 553 |
-
// 模拟提交反馈
|
| 554 |
-
function submitFeedback(event) {
|
| 555 |
-
event.preventDefault();
|
| 556 |
-
|
| 557 |
-
const username = document.getElementById('usernameInput').value.trim();
|
| 558 |
-
const feedbackContent = document.getElementById('feedbackInput').value.trim();
|
| 559 |
-
|
| 560 |
-
if (username && feedbackContent) {
|
| 561 |
-
// 创建新反馈项
|
| 562 |
-
const feedbackItem = document.createElement('div');
|
| 563 |
-
feedbackItem.className = 'feedback-item';
|
| 564 |
-
|
| 565 |
-
const now = new Date();
|
| 566 |
-
const timeString = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}`;
|
| 567 |
-
|
| 568 |
-
// 获取用户名的首字作为头像
|
| 569 |
-
const firstChar = username.charAt(0);
|
| 570 |
-
|
| 571 |
-
feedbackItem.innerHTML = `
|
| 572 |
-
<div class="feedback-header">
|
| 573 |
-
<div class="feedback-user">
|
| 574 |
-
<div class="user-avatar">${firstChar}</div>
|
| 575 |
-
<span class="user-name">${username}</span>
|
| 576 |
-
</div>
|
| 577 |
-
<span class="feedback-time">${timeString}</span>
|
| 578 |
-
</div>
|
| 579 |
-
<div class="feedback-content">${feedbackContent}</div>
|
| 580 |
-
`;
|
| 581 |
-
|
| 582 |
-
// 添加到列表顶部
|
| 583 |
-
const feedbackList = document.getElementById('feedbackList');
|
| 584 |
-
feedbackList.insertBefore(feedbackItem, feedbackList.firstChild);
|
| 585 |
-
|
| 586 |
-
// 清空输入框
|
| 587 |
-
document.getElementById('usernameInput').value = '';
|
| 588 |
-
document.getElementById('feedbackInput').value = '';
|
| 589 |
-
|
| 590 |
-
// 显示成功提示
|
| 591 |
-
alert('反馈提交成功!感谢您的建议。');
|
| 592 |
-
}
|
| 593 |
-
}
|
| 594 |
-
</script>
|
| 595 |
-
</body>
|
| 596 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|