@discreted/vue-browser-tabs
Version:
A browser-like tabs component for Vue3
752 lines • 59.8 kB
JavaScript
import { defineComponent as B0, ref as b, computed as c0, onMounted as A0, nextTick as E, watch as N, createElementBlock as f, openBlock as h, createElementVNode as n, createVNode as T, unref as r, withCtx as C0, withDirectives as a0, withModifiers as O, vModelText as d0, Fragment as G, renderList as u0, normalizeClass as K, toDisplayString as Q, createCommentVNode as z, renderSlot as J, createTextVNode as N0, withKeys as z0, createBlock as p0 } from "vue";
import { createMessageChannelPairTransport as D0, WebMcpServer as W0, z as x, WebMcpClient as V0 } from "@opentiny/next-sdk";
import j0 from "@opentiny/vue-popover";
import { IconArrowLeft as Y0, IconArrowRight as X0, IconRefresh as q0, IconChevronDown as H0, IconDelete as G0, IconMinus as K0, IconMore as Q0, IconStarO as J0, IconStarActive as e2 } from "@opentiny/vue-icon";
import { McpProxyClient as C1 } from "./mcp-proxy-client/index.es.js";
const t2 = "data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M0,0%20H24%20V24%20H0%20Z%20M0,0%20A24,24%200%200,1%2024,24%20L0,24%20Z'%20fill='%23fff'%20fill-rule='evenodd'/%3e%3c/svg%3e", o2 = "data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M0,0%20H24%20V24%20H0%20Z%20M0,0%20A24,24%200%200,1%2024,24%20L0,24%20Z'%20fill='%23fff'%20fill-rule='evenodd'%20/%3e%3c/svg%3e", h0 = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='20.000000'%20height='20.000000'%20viewBox='0%200%2020%2020'%20fill='none'%3e%3cscript%20xmlns=''/%3e%3cdesc%3e%20Created%20with%20Pixso.%20%3c/desc%3e%3cdefs%3e%3cclipPath%20id='clip10_104'%3e%3crect%20id='个人'%20width='20.000000'%20height='20.000000'%20fill='white'%20fill-opacity='0'/%3e%3c/clipPath%3e%3c/defs%3e%3crect%20id='个人'%20width='20.000000'%20height='20.000000'%20fill='%23474747'%20fill-opacity='0'/%3e%3cg%20clip-path='url(%23clip10_104)'%3e%3cpath%20id='path'%20d='M10.02%2019.04L13.7%2012.65C13.78%2012.54%2013.85%2012.43%2013.92%2012.32C13.99%2012.2%2014.05%2012.08%2014.11%2011.96C14.16%2011.84%2014.22%2011.72%2014.26%2011.59C14.31%2011.46%2014.35%2011.34%2014.39%2011.21C14.42%2011.08%2014.45%2010.95%2014.47%2010.82C14.5%2010.68%2014.52%2010.55%2014.53%2010.42C14.54%2010.29%2014.55%2010.15%2014.55%2010.02C14.55%209.88%2014.54%209.75%2014.53%209.62C14.52%209.48%2014.5%209.35%2014.48%209.22C14.46%209.09%2014.43%208.96%2014.4%208.83C14.36%208.7%2014.32%208.57%2014.28%208.44C14.23%208.32%2014.18%208.19%2014.12%208.07C14.07%207.95%2014.01%207.83%2013.94%207.71C13.87%207.6%2013.8%207.49%2013.72%207.38C13.65%207.27%2013.57%207.16%2013.48%207.06C13.39%206.95%2013.3%206.85%2013.21%206.76L18.37%206.76C18.42%206.9%2018.47%207.04%2018.52%207.18C18.57%207.32%2018.61%207.46%2018.65%207.6C18.69%207.74%2018.73%207.88%2018.76%208.03C18.79%208.17%2018.82%208.31%2018.85%208.46C18.88%208.61%2018.9%208.75%2018.92%208.9C18.94%209.04%2018.95%209.19%2018.97%209.34C18.98%209.48%2018.99%209.63%2018.99%209.78C19%209.93%2019%2010.07%2018.99%2010.22C18.99%2010.37%2018.99%2010.52%2018.98%2010.66C18.97%2010.81%2018.95%2010.96%2018.94%2011.11C18.92%2011.25%2018.9%2011.4%2018.87%2011.54C18.85%2011.69%2018.82%2011.83%2018.79%2011.98C18.76%2012.12%2018.73%2012.27%2018.69%2012.41C18.65%2012.55%2018.61%2012.69%2018.56%2012.83C18.52%2012.97%2018.47%2013.11%2018.42%2013.25C18.36%2013.39%2018.31%2013.53%2018.25%2013.66C18.19%2013.8%2018.13%2013.93%2018.06%2014.06C18%2014.2%2017.93%2014.33%2017.86%2014.45C17.79%2014.58%2017.71%2014.71%2017.63%2014.84C17.56%2014.96%2017.48%2015.09%2017.39%2015.21C17.31%2015.33%2017.22%2015.45%2017.13%2015.56C17.04%2015.68%2016.95%2015.8%2016.85%2015.91C16.76%2016.02%2016.66%2016.13%2016.56%2016.24C16.46%2016.35%2016.35%2016.45%2016.25%2016.55C16.14%2016.66%2016.03%2016.76%2015.92%2016.85C15.81%2016.95%2015.7%2017.05%2015.58%2017.14C15.47%2017.23%2015.35%2017.32%2015.23%2017.41C15.11%2017.49%2014.99%2017.57%2014.86%2017.65C14.74%2017.73%2014.61%2017.81%2014.49%2017.89C14.36%2017.96%2014.23%2018.03%2014.1%2018.1C13.97%2018.16%2013.83%2018.23%2013.7%2018.29C13.56%2018.35%2013.43%2018.41%2013.29%2018.46C12.23%2018.82%2011.14%2019.01%2010.02%2019.04ZM8.63%2018.95C8.48%2018.93%208.34%2018.91%208.19%2018.88C8.05%2018.85%207.91%2018.82%207.76%2018.78C7.62%2018.74%207.48%2018.7%207.34%2018.66C7.2%2018.62%207.06%2018.57%206.92%2018.52C6.78%2018.47%206.64%2018.42%206.51%2018.36C6.37%2018.3%206.24%2018.24%206.11%2018.18C5.97%2018.12%205.84%2018.05%205.71%2017.98C5.58%2017.91%205.46%2017.84%205.33%2017.76C5.2%2017.69%205.08%2017.61%204.96%2017.53C4.84%2017.44%204.72%2017.36%204.6%2017.27C4.48%2017.18%204.37%2017.09%204.25%2017C4.14%2016.9%204.03%2016.81%203.92%2016.71C3.81%2016.61%203.7%2016.51%203.6%2016.4C3.5%2016.3%203.4%2016.19%203.3%2016.08C3.2%2015.97%203.1%2015.86%203.01%2015.75C2.92%2015.63%202.83%2015.52%202.74%2015.4C2.65%2015.28%202.57%2015.16%202.49%2015.04C2.41%2014.92%202.33%2014.79%202.25%2014.66C2.18%2014.54%202.11%2014.41%202.04%2014.28C1.97%2014.15%201.9%2014.02%201.84%2013.89C1.78%2013.75%201.72%2013.62%201.66%2013.48C1.61%2013.35%201.56%2013.21%201.51%2013.07C1.46%2012.93%201.41%2012.79%201.37%2012.65C1.33%2012.51%201.29%2012.37%201.26%2012.23C1.22%2012.08%201.19%2011.94%201.16%2011.79C1.13%2011.65%201.11%2011.51%201.09%2011.36C1.07%2011.21%201.05%2011.07%201.03%2010.92C1.02%2010.78%201.01%2010.63%201%2010.48C1%2010.34%200.99%2010.19%201%2010.04C1%209.89%201%209.75%201.01%209.6C1.02%209.45%201.03%209.31%201.04%209.16C1.06%209.02%201.08%208.87%201.1%208.72C1.17%208.19%201.29%207.67%201.47%207.16C1.65%206.65%201.88%206.16%202.16%205.7L5.84%2012.08C5.9%2012.2%205.96%2012.32%206.03%2012.44C6.1%2012.55%206.17%2012.66%206.25%2012.77C6.33%2012.88%206.41%2012.99%206.5%2013.09C6.59%2013.19%206.68%2013.29%206.77%2013.39C6.87%2013.48%206.97%2013.57%207.07%2013.66C7.18%2013.74%207.28%2013.82%207.4%2013.9C7.51%2013.97%207.62%2014.05%207.74%2014.11C7.85%2014.18%207.97%2014.24%208.1%2014.29C8.22%2014.35%208.34%2014.4%208.47%2014.44C8.6%2014.49%208.73%2014.53%208.86%2014.56C8.99%2014.6%209.12%2014.62%209.25%2014.65C9.38%2014.67%209.52%2014.68%209.65%2014.69C9.78%2014.7%209.92%2014.71%2010.05%2014.71C10.19%2014.7%2010.32%2014.7%2010.45%2014.68C10.59%2014.67%2010.72%2014.65%2010.85%2014.63C10.99%2014.6%2011.12%2014.57%2011.25%2014.53L8.63%2018.95ZM9.94%2013.31C9.83%2013.31%209.72%2013.3%209.62%2013.29C9.51%2013.28%209.4%2013.26%209.3%2013.24C9.19%2013.22%209.09%2013.2%208.99%2013.17C8.88%2013.13%208.78%2013.1%208.68%2013.06C8.58%2013.02%208.49%2012.97%208.39%2012.92C8.3%2012.87%208.21%2012.81%208.12%2012.76C8.03%2012.7%207.94%2012.63%207.86%2012.56C7.78%2012.5%207.7%2012.42%207.62%2012.35C7.55%2012.27%207.47%2012.19%207.41%2012.11C7.34%2012.03%207.27%2011.94%207.21%2011.85C7.16%2011.76%207.1%2011.67%207.05%2011.58C7%2011.48%206.95%2011.39%206.91%2011.29C6.87%2011.19%206.83%2011.09%206.8%2010.98C6.77%2010.88%206.75%2010.78%206.73%2010.67C6.7%2010.57%206.69%2010.46%206.68%2010.35C6.67%2010.25%206.66%2010.14%206.66%2010.03C6.66%209.93%206.67%209.82%206.68%209.71C6.69%209.61%206.7%209.5%206.73%209.39C6.75%209.29%206.77%209.19%206.8%209.08C6.83%208.98%206.87%208.88%206.91%208.78C6.95%208.68%207%208.58%207.05%208.49C7.1%208.4%207.16%208.3%207.21%208.21C7.27%208.13%207.34%208.04%207.41%207.96C7.47%207.87%207.55%207.79%207.62%207.72C7.7%207.64%207.78%207.57%207.86%207.5C7.94%207.43%208.03%207.37%208.12%207.31C8.21%207.25%208.3%207.2%208.39%207.15C8.49%207.1%208.58%207.05%208.68%207.01C8.78%206.97%208.88%206.93%208.99%206.9C9.09%206.87%209.19%206.84%209.3%206.82C9.4%206.8%209.51%206.79%209.62%206.78C9.72%206.77%209.83%206.76%209.94%206.76C10.04%206.76%2010.15%206.77%2010.26%206.78C10.36%206.79%2010.47%206.8%2010.58%206.82C10.68%206.84%2010.78%206.87%2010.89%206.9C10.99%206.93%2011.09%206.97%2011.19%207.01C11.29%207.05%2011.38%207.1%2011.48%207.15C11.57%207.2%2011.67%207.25%2011.76%207.31C11.84%207.37%2011.93%207.43%2012.01%207.5C12.1%207.57%2012.18%207.64%2012.25%207.72C12.33%207.79%2012.4%207.87%2012.47%207.96C12.53%208.04%2012.6%208.13%2012.66%208.21C12.72%208.3%2012.77%208.4%2012.82%208.49C12.87%208.58%2012.92%208.68%2012.96%208.78C13%208.88%2013.04%208.98%2013.07%209.08C13.1%209.19%2013.13%209.29%2013.15%209.39C13.17%209.5%2013.18%209.61%2013.19%209.71C13.2%209.82%2013.21%209.93%2013.21%2010.03C13.21%2010.14%2013.2%2010.25%2013.19%2010.35C13.18%2010.46%2013.16%2010.56%2013.14%2010.67C13.11%2010.77%2013.09%2010.88%2013.06%2010.98C13.02%2011.08%2012.99%2011.18%2012.94%2011.28C12.9%2011.37%2012.86%2011.47%2012.81%2011.56C12.75%2011.66%2012.7%2011.75%2012.64%2011.84C12.58%2011.93%2012.52%2012.01%2012.45%2012.09C12.38%2012.18%2012.31%2012.25%2012.23%2012.33C12.16%2012.41%2012.08%2012.48%2012%2012.54C11.91%2012.61%2011.83%2012.68%2011.74%2012.74C11.65%2012.8%2011.56%2012.85%2011.47%2012.9C11.37%2012.95%2011.28%2013%2011.18%2013.04C11.08%2013.08%2010.98%2013.12%2010.88%2013.15C10.78%2013.18%2010.67%2013.21%2010.57%2013.23C10.47%2013.26%2010.36%2013.27%2010.26%2013.29C10.15%2013.3%2010.04%2013.3%209.94%2013.31ZM5.44%208.89L2.9%204.39C3.01%204.24%203.13%204.1%203.25%203.97C3.37%203.83%203.49%203.7%203.62%203.57C3.75%203.44%203.88%203.32%204.01%203.2C4.15%203.08%204.29%202.96%204.43%202.85C4.57%202.74%204.72%202.63%204.87%202.53C5.02%202.43%205.17%202.33%205.32%202.24C5.48%202.14%205.64%202.05%205.8%201.97C5.96%201.89%206.12%201.81%206.29%201.73C6.45%201.66%206.62%201.59%206.79%201.53C6.96%201.46%207.13%201.4%207.3%201.35C7.48%201.3%207.65%201.25%207.83%201.21C8%201.16%208.18%201.13%208.36%201.09C8.54%201.06%208.72%201.04%208.9%201.01C9.08%200.99%209.26%200.98%209.44%200.97C9.62%200.96%209.8%200.95%209.98%200.95C10.16%200.96%2010.34%200.96%2010.52%200.97C10.7%200.99%2010.89%201%2011.06%201.03C11.24%201.05%2011.42%201.08%2011.6%201.11C11.78%201.15%2011.96%201.19%2012.13%201.23C12.31%201.27%2012.48%201.33%2012.65%201.38C12.83%201.44%2013%201.5%2013.17%201.56C13.33%201.63%2013.5%201.7%2013.67%201.77C13.83%201.85%2013.99%201.93%2014.15%202.02C14.31%202.1%2014.47%202.19%2014.62%202.29C14.78%202.38%2014.93%202.48%2015.08%202.59C15.22%202.69%2015.37%202.8%2015.51%202.91C15.65%203.03%2015.79%203.15%2015.92%203.27C16.06%203.39%2016.19%203.51%2016.31%203.64C16.44%203.77%2016.56%203.91%2016.68%204.04C16.8%204.18%2016.91%204.32%2017.02%204.47C17.13%204.61%2017.24%204.76%2017.34%204.91C17.44%205.06%2017.54%205.21%2017.63%205.37L9.85%205.37C9.73%205.38%209.61%205.39%209.48%205.41C9.36%205.43%209.23%205.45%209.11%205.48C8.99%205.5%208.87%205.54%208.75%205.57C8.63%205.61%208.51%205.65%208.4%205.7C8.28%205.74%208.16%205.79%208.05%205.85C7.94%205.9%207.83%205.96%207.72%206.02C7.61%206.08%207.5%206.15%207.4%206.22C7.3%206.29%207.2%206.36%207.1%206.44C7%206.52%206.91%206.6%206.81%206.69C6.72%206.77%206.63%206.86%206.55%206.95C6.46%207.04%206.38%207.14%206.3%207.24C6.23%207.33%206.15%207.44%206.08%207.54C6.01%207.64%205.94%207.75%205.88%207.86C5.82%207.97%205.76%208.08%205.71%208.19C5.65%208.3%205.6%208.42%205.56%208.53C5.51%208.65%205.47%208.77%205.44%208.89Z'%20fill='%233C4043'%20fill-opacity='1.000000'%20fill-rule='nonzero'/%3e%3c/g%3e%3cscript%20xmlns=''/%3e%3c/svg%3e", n2 = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='20.000000'%20height='20.000000'%20viewBox='0%200%2020%2020'%20fill='none'%3e%3cscript%20xmlns=''/%3e%3cdesc%3e%20Created%20with%20Pixso.%20%3c/desc%3e%3cdefs%3e%3cclipPath%20id='clip10_121'%3e%3crect%20id='谷歌%20(1)'%20width='16.000000'%20height='16.000000'%20transform='translate(2.000000%202.000000)'%20fill='white'%20fill-opacity='0'/%3e%3c/clipPath%3e%3cclipPath%20id='clip10_119'%3e%3crect%20id='个人'%20width='20.000000'%20height='20.000000'%20transform='matrix(-1%200%200%201%2020%200)'%20fill='white'%20fill-opacity='0'/%3e%3c/clipPath%3e%3c/defs%3e%3crect%20id='个人'%20width='20.000000'%20height='20.000000'%20transform='matrix(-1%200%200%201%2020%200)'%20fill='%23474747'%20fill-opacity='0'/%3e%3cg%20clip-path='url(%23clip10_119)'%3e%3cg%20clip-path='url(%23clip10_121)'%3e%3cpath%20id='path'%20d='M5.33%2010.05C5.33%209.53%205.41%209.02%205.57%208.55L2.83%206.48C2.55%207.04%202.35%207.61%202.21%208.22C2.06%208.82%201.99%209.43%202%2010.05C2%2011.33%202.3%2012.54%202.83%2013.61L5.57%2011.54C5.41%2011.06%205.33%2010.56%205.33%2010.05Z'%20fill='%23FBBC05'%20fill-opacity='1.000000'%20fill-rule='nonzero'/%3e%3cpath%20id='path'%20d='M10.14%205.29C10.41%205.29%2010.68%205.31%2010.95%205.36C11.21%205.4%2011.47%205.47%2011.73%205.56C11.99%205.65%2012.23%205.76%2012.47%205.9C12.7%206.03%2012.93%206.18%2013.14%206.35L15.51%204.01C14.06%202.77%2012.21%202%2010.14%202C6.92%202%204.15%203.82%202.83%206.48L5.57%208.55C6.2%206.66%208%205.29%2010.14%205.29Z'%20fill='%23EA4335'%20fill-opacity='1.000000'%20fill-rule='nonzero'/%3e%3cpath%20id='path'%20d='M10.17%2014.7C8.03%2014.7%206.22%2013.35%205.58%2011.46L2.83%2013.52C4.16%2016.17%206.94%2017.98%2010.17%2017.98C12.17%2017.98%2014.08%2017.28%2015.51%2015.98L12.89%2014C12.15%2014.46%2011.23%2014.7%2010.17%2014.7Z'%20fill='%2334A853'%20fill-opacity='1.000000'%20fill-rule='nonzero'/%3e%3cpath%20id='path'%20d='M17.99%209.97C17.99%209.5%2017.91%208.99%2017.8%208.52L10.17%208.52L10.17%2011.61L14.56%2011.61C14.34%2012.66%2013.75%2013.48%2012.89%2014L15.51%2015.98C17.01%2014.62%2017.99%2012.58%2017.99%209.97Z'%20fill='%234285F4'%20fill-opacity='1.000000'%20fill-rule='nonzero'/%3e%3c/g%3e%3c/g%3e%3cscript%20xmlns=''/%3e%3c/svg%3e", i2 = "data:image/svg+xml,%3csvg%20width='16'%20height='16'%20viewBox='0%200%2016%2016'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3ccircle%20cx='7'%20cy='7'%20r='6'%20stroke='%23888'%20stroke-width='2'%20fill='none'/%3e%3cline%20x1='12'%20y1='12'%20x2='15'%20y2='15'%20stroke='%23888'%20stroke-width='2'/%3e%3c/svg%3e", l2 = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='20.000000'%20height='20.000000'%20viewBox='0%200%2020%2020'%20fill='none'%3e%3cscript%20xmlns=''/%3e%3cdesc%3e%20Created%20with%20Pixso.%20%3c/desc%3e%3cdefs%3e%3cclipPath%20id='clip10_176'%3e%3crect%20id='个人'%20width='20.000000'%20height='20.000000'%20transform='matrix(-1%200%200%201%2020%200)'%20fill='white'%20fill-opacity='0'/%3e%3c/clipPath%3e%3c/defs%3e%3crect%20id='个人'%20width='20.000000'%20height='20.000000'%20transform='matrix(-1%200%200%201%2020%200)'%20fill='%23474747'%20fill-opacity='0'/%3e%3cg%20clip-path='url(%23clip10_176)'%3e%3cpath%20id='path'%20d='M19.55%2010.32C19.51%2010.26%2019.46%2010.2%2019.42%2010.14C19.37%2010.08%2019.32%2010.02%2019.27%209.96C19.22%209.91%2019.16%209.85%2019.11%209.8C19.05%209.75%2018.99%209.7%2018.93%209.66C18.87%209.61%2018.81%209.56%2018.75%209.52C18.68%209.48%2018.62%209.44%2018.55%209.41C18.49%209.37%2018.42%209.34%2018.35%209.31C18.28%209.28%2018.21%209.25%2018.13%209.23C18.06%209.2%2017.99%209.18%2017.92%209.16C17.84%209.15%2017.77%209.13%2017.69%209.12C17.62%209.11%2017.54%209.1%2017.47%209.09C17.39%209.09%2017.31%209.08%2017.24%209.08C17.16%209.08%2017.09%209.09%2017.01%209.1C16.94%209.1%2016.86%209.11%2016.79%209.13C16.71%209.14%2016.64%209.16%2016.56%209.18C16.49%209.19%2016.42%209.22%2016.35%209.24L16.35%205.48C16.35%205.2%2016.29%204.94%2016.18%204.69C16.14%204.61%2016.1%204.53%2016.05%204.46C16%204.39%2015.95%204.32%2015.9%204.26C15.84%204.19%2015.78%204.13%2015.71%204.07C15.65%204.02%2015.58%203.97%2015.5%203.92C15.43%203.87%2015.36%203.83%2015.28%203.8C15.2%203.76%2015.12%203.73%2015.04%203.71C14.95%203.68%2014.87%203.67%2014.78%203.65C14.7%203.64%2014.61%203.63%2014.53%203.63L10.74%203.63C10.75%203.58%2010.77%203.53%2010.79%203.48C10.8%203.43%2010.81%203.38%2010.83%203.32C10.84%203.27%2010.85%203.22%2010.86%203.16C10.87%203.11%2010.87%203.05%2010.88%203C10.88%202.95%2010.89%202.89%2010.89%202.84C10.89%202.78%2010.89%202.73%2010.89%202.68C10.89%202.62%2010.89%202.57%2010.88%202.51C10.88%202.46%2010.87%202.4%2010.87%202.35C10.86%202.3%2010.85%202.24%2010.84%202.19C10.83%202.14%2010.82%202.08%2010.8%202.03C10.79%201.98%2010.77%201.93%2010.76%201.88C10.74%201.82%2010.72%201.77%2010.7%201.72C10.68%201.67%2010.66%201.62%2010.64%201.57C10.62%201.52%2010.59%201.47%2010.56%201.43C10.54%201.38%2010.51%201.33%2010.48%201.29C10.45%201.24%2010.42%201.19%2010.39%201.15C10.36%201.11%2010.33%201.06%2010.3%201.02C10.26%200.98%2010.23%200.94%2010.19%200.9C10.15%200.86%2010.12%200.82%2010.08%200.78C10.04%200.74%2010%200.7%209.96%200.67C9.92%200.63%209.88%200.6%209.83%200.56C9.79%200.53%209.75%200.5%209.7%200.47C9.66%200.44%209.61%200.41%209.56%200.38C9.52%200.35%209.47%200.33%209.42%200.3C9.37%200.28%209.32%200.25%209.27%200.23C9.22%200.21%209.17%200.19%209.12%200.17C9.07%200.15%209.02%200.13%208.97%200.12C8.92%200.1%208.86%200.09%208.81%200.07C8.76%200.06%208.71%200.05%208.65%200.04C8.6%200.03%208.55%200.02%208.49%200.01C8.44%200.01%208.38%200%208.33%200C8.28%200%208.22%206.1e-5%208.17%200L8.17%200.02C8.11%200.02%208.06%200.02%208%200.02C7.95%200.02%207.9%200.03%207.84%200.04C7.79%200.04%207.73%200.05%207.68%200.06C7.63%200.07%207.57%200.08%207.52%200.09C7.47%200.11%207.42%200.12%207.36%200.14C7.31%200.15%207.26%200.17%207.21%200.19C7.16%200.21%207.11%200.23%207.06%200.25C7.01%200.27%206.96%200.3%206.91%200.32C6.86%200.35%206.82%200.37%206.77%200.4C6.72%200.43%206.68%200.46%206.63%200.49C6.59%200.52%206.54%200.55%206.5%200.58C6.46%200.62%206.42%200.65%206.38%200.69C6.33%200.72%206.29%200.76%206.26%200.8C6.22%200.83%206.18%200.87%206.14%200.91C6.11%200.95%206.07%201%206.04%201.04C6%201.08%205.97%201.12%205.94%201.17C5.91%201.21%205.88%201.26%205.85%201.3C5.82%201.35%205.79%201.4%205.77%201.44C5.74%201.49%205.72%201.54%205.69%201.59C5.67%201.64%205.65%201.69%205.63%201.74C5.61%201.79%205.59%201.84%205.57%201.89C5.56%201.94%205.54%202%205.53%202.05C5.51%202.1%205.5%202.15%205.49%202.21C5.48%202.26%205.47%202.31%205.46%202.37C5.46%202.42%205.45%202.47%205.45%202.53C5.44%202.58%205.44%202.64%205.44%202.69C5.44%202.75%205.44%202.8%205.44%202.85C5.44%202.91%205.45%202.96%205.45%203.02C5.46%203.07%205.46%203.12%205.47%203.18C5.48%203.23%205.49%203.28%205.5%203.34C5.51%203.39%205.53%203.44%205.54%203.5C5.56%203.55%205.57%203.6%205.59%203.65L1.81%203.65C1.75%203.65%201.69%203.65%201.63%203.66C1.57%203.66%201.52%203.67%201.46%203.69C1.4%203.7%201.34%203.71%201.28%203.73C1.23%203.75%201.17%203.77%201.12%203.79C1.06%203.81%201.01%203.84%200.96%203.86C0.9%203.89%200.85%203.92%200.8%203.96C0.75%203.99%200.71%204.02%200.66%204.06C0.61%204.1%200.57%204.14%200.53%204.18C0.48%204.22%200.45%204.27%200.41%204.31C0.37%204.36%200.33%204.41%200.3%204.46C0.27%204.51%200.24%204.56%200.21%204.61C0.18%204.66%200.16%204.72%200.13%204.77C0.11%204.83%200.09%204.88%200.07%204.94C0.06%205%200.04%205.05%200.03%205.11C0.02%205.17%200.01%205.23%200%205.29C0%205.35%200%205.41%200%205.47L0%208.66C0%208.69%200%208.72%200.01%208.76C0.01%208.79%200.03%208.82%200.04%208.86C0.05%208.89%200.07%208.92%200.09%208.94C0.11%208.97%200.14%209%200.16%209.02C0.19%209.04%200.22%209.06%200.25%209.08C0.28%209.09%200.31%209.1%200.34%209.11C0.38%209.12%200.41%209.13%200.44%209.13C0.48%209.13%200.51%209.13%200.55%209.13C0.64%209.12%200.74%209.11%200.83%209.11C0.93%209.1%201.03%209.11%201.12%209.11C1.22%209.12%201.32%209.14%201.41%209.15C1.51%209.17%201.6%209.19%201.69%209.22C1.78%209.25%201.87%209.28%201.96%209.32C2.05%209.36%202.14%209.4%202.22%209.45C2.31%209.5%202.39%209.55%202.47%209.6C2.55%209.66%202.62%209.72%202.7%209.78C2.77%209.85%202.84%209.91%202.9%209.98C2.97%2010.06%203.03%2010.13%203.09%2010.21C3.14%2010.28%203.2%2010.37%203.25%2010.45C3.3%2010.53%203.34%2010.62%203.38%2010.71C3.42%2010.79%203.45%2010.88%203.48%2010.98C3.52%2011.07%203.54%2011.16%203.56%2011.25C3.58%2011.35%203.6%2011.44%203.61%2011.54C3.62%2011.64%203.62%2011.73%203.62%2011.83C3.62%2011.93%203.62%2012.02%203.61%2012.12C3.6%2012.21%203.58%2012.31%203.56%2012.4C3.54%2012.5%203.52%2012.59%203.48%2012.68C3.45%2012.77%203.42%2012.86%203.38%2012.95C3.34%2013.04%203.3%2013.13%203.25%2013.21C3.2%2013.29%203.14%2013.37%203.09%2013.45C3.03%2013.53%202.97%2013.6%202.9%2013.67C2.84%2013.74%202.77%2013.81%202.7%2013.88C2.62%2013.94%202.55%2014%202.47%2014.05C2.39%2014.11%202.31%2014.16%202.22%2014.21C2.14%2014.26%202.05%2014.3%201.96%2014.34C1.87%2014.37%201.78%2014.41%201.69%2014.43C1.6%2014.46%201.51%2014.49%201.41%2014.5C1.32%2014.52%201.22%2014.54%201.12%2014.54C1.03%2014.55%200.93%2014.55%200.83%2014.55C0.74%2014.55%200.64%2014.54%200.55%2014.53C0.51%2014.53%200.48%2014.52%200.44%2014.53C0.41%2014.53%200.38%2014.53%200.34%2014.54C0.31%2014.55%200.28%2014.57%200.25%2014.58C0.22%2014.6%200.19%2014.62%200.16%2014.64C0.14%2014.66%200.11%2014.69%200.09%2014.71C0.07%2014.74%200.05%2014.77%200.04%2014.8C0.03%2014.83%200.01%2014.87%200.01%2014.9C0%2014.93%200%2014.97%200%2015L0%2018.17C-0.01%2018.26%200%2018.35%200.01%2018.43C0.02%2018.52%200.04%2018.6%200.07%2018.68C0.09%2018.77%200.12%2018.85%200.16%2018.93C0.19%2019%200.23%2019.08%200.28%2019.15C0.33%2019.23%200.38%2019.29%200.43%2019.36C0.49%2019.43%200.55%2019.49%200.61%2019.54C0.68%2019.6%200.75%2019.65%200.82%2019.7C0.89%2019.75%200.97%2019.79%201.04%2019.83C1.3%2019.94%201.56%2020%201.84%2019.99L14.5%2019.99C14.78%2020%2015.04%2019.94%2015.3%2019.83C15.37%2019.79%2015.45%2019.75%2015.52%2019.7C15.59%2019.65%2015.66%2019.6%2015.73%2019.54C15.79%2019.49%2015.85%2019.43%2015.91%2019.36C15.96%2019.29%2016.02%2019.23%2016.06%2019.15C16.11%2019.08%2016.15%2019%2016.18%2018.93C16.22%2018.85%2016.25%2018.77%2016.27%2018.68C16.3%2018.6%2016.32%2018.52%2016.33%2018.43C16.34%2018.35%2016.35%2018.26%2016.35%2018.17L16.35%2014.38C16.48%2014.43%2016.62%2014.47%2016.76%2014.5C16.9%2014.52%2017.04%2014.54%2017.18%2014.54C17.32%2014.55%2017.46%2014.54%2017.6%2014.52C17.74%2014.5%2017.88%2014.48%2018.02%2014.44C18.16%2014.4%2018.29%2014.35%2018.42%2014.29C18.55%2014.23%2018.67%2014.16%2018.79%2014.08C18.91%2014%2019.02%2013.91%2019.12%2013.82C19.22%2013.72%2019.32%2013.62%2019.41%2013.5C19.5%2013.39%2019.58%2013.27%2019.65%2013.15C19.71%2013.03%2019.77%2012.9%2019.82%2012.77C19.87%2012.63%2019.91%2012.5%2019.94%2012.36C19.97%2012.22%2019.99%2012.08%2019.99%2011.93C20%2011.79%2019.99%2011.65%2019.98%2011.51C19.96%2011.37%2019.94%2011.23%2019.9%2011.09C19.86%2010.96%2019.81%2010.82%2019.75%2010.69C19.7%2010.56%2019.63%2010.44%2019.55%2010.32ZM18.11%2012.44C18.06%2012.51%2018%2012.57%2017.94%2012.62C17.88%2012.68%2017.81%2012.72%2017.74%2012.76C17.66%2012.8%2017.58%2012.82%2017.5%2012.84C17.42%2012.86%2017.34%2012.87%2017.26%2012.87C17.14%2012.87%2017.02%2012.85%2016.9%2012.81L15.46%2012.3C15.44%2012.29%2015.42%2012.28%2015.4%2012.28C15.37%2012.27%2015.35%2012.27%2015.33%2012.26C15.3%2012.26%2015.28%2012.26%2015.25%2012.26C15.23%2012.26%2015.21%2012.26%2015.18%2012.27C15.16%2012.27%2015.14%2012.27%2015.11%2012.28C15.09%2012.29%2015.07%2012.29%2015.04%2012.3C15.02%2012.31%2015%2012.32%2014.98%2012.33C14.96%2012.34%2014.94%2012.36%2014.92%2012.37C14.9%2012.38%2014.88%2012.4%2014.86%2012.41C14.85%2012.43%2014.83%2012.45%2014.81%2012.47C14.8%2012.48%2014.78%2012.5%2014.77%2012.52C14.76%2012.54%2014.74%2012.56%2014.73%2012.58C14.72%2012.61%2014.71%2012.63%2014.7%2012.65C14.7%2012.67%2014.69%2012.69%2014.68%2012.72C14.68%2012.74%2014.67%2012.76%2014.67%2012.79C14.67%2012.81%2014.67%2012.84%2014.67%2012.86L14.67%2018.18C14.67%2018.22%2014.65%2018.25%2014.63%2018.28C14.6%2018.31%2014.56%2018.33%2014.52%2018.33L1.81%2018.33C1.77%2018.33%201.74%2018.31%201.71%2018.28C1.68%2018.25%201.67%2018.22%201.67%2018.18L1.67%2016.16C1.79%2016.13%201.92%2016.11%202.04%2016.07C2.16%2016.04%202.28%2016%202.4%2015.96C2.52%2015.91%202.64%2015.87%202.76%2015.81C2.87%2015.76%202.99%2015.7%203.1%2015.63C3.21%2015.57%203.32%2015.5%203.42%2015.43C3.53%2015.35%203.63%2015.28%203.72%2015.19C3.82%2015.11%203.92%2015.03%204.01%2014.94C4.1%2014.85%204.18%2014.75%204.26%2014.65C4.35%2014.56%204.42%2014.45%204.5%2014.35C4.57%2014.24%204.64%2014.14%204.7%2014.03C4.77%2013.92%204.83%2013.8%204.88%2013.69C4.93%2013.57%204.98%2013.45%205.03%2013.33C5.07%2013.21%205.11%2013.09%205.14%2012.97C5.17%2012.84%205.2%2012.72%205.22%2012.59C5.25%2012.47%205.26%2012.34%205.27%2012.21C5.29%2012.09%205.29%2011.96%205.29%2011.83C5.29%2011.7%205.29%2011.58%205.27%2011.45C5.26%2011.32%205.25%2011.2%205.22%2011.07C5.2%2010.94%205.17%2010.82%205.14%2010.7C5.11%2010.57%205.07%2010.45%205.03%2010.33C4.98%2010.21%204.93%2010.09%204.88%209.98C4.83%209.86%204.77%209.75%204.7%209.64C4.64%209.53%204.57%209.42%204.5%209.31C4.42%209.21%204.35%209.11%204.26%209.01C4.18%208.91%204.1%208.82%204.01%208.73C3.92%208.64%203.82%208.55%203.72%208.47C3.63%208.39%203.53%208.31%203.42%208.23C3.32%208.16%203.21%208.09%203.1%208.03C2.99%207.96%202.87%207.91%202.76%207.85C2.64%207.8%202.52%207.75%202.4%207.7C2.28%207.66%202.16%207.62%202.04%207.59C1.92%207.56%201.79%207.53%201.67%207.51L1.67%205.47C1.67%205.45%201.67%205.43%201.68%205.41C1.68%205.4%201.69%205.38%201.71%205.37C1.72%205.35%201.74%205.34%201.76%205.34C1.77%205.33%201.79%205.32%201.81%205.32L7.12%205.32C7.14%205.32%207.17%205.32%207.19%205.32C7.21%205.32%207.24%205.31%207.26%205.31C7.28%205.3%207.31%205.29%207.33%205.29C7.35%205.28%207.37%205.27%207.39%205.26C7.42%205.25%207.44%205.23%207.46%205.22C7.47%205.21%207.49%205.19%207.51%205.18C7.53%205.16%207.55%205.15%207.56%205.13C7.58%205.11%207.59%205.09%207.61%205.07C7.62%205.05%207.63%205.03%207.64%205.01C7.66%204.99%207.67%204.97%207.67%204.95C7.68%204.93%207.69%204.9%207.7%204.88C7.7%204.86%207.71%204.83%207.71%204.81C7.71%204.79%207.72%204.76%207.72%204.74C7.72%204.71%207.72%204.69%207.71%204.67C7.71%204.64%207.71%204.62%207.7%204.6C7.7%204.57%207.69%204.55%207.68%204.53L7.19%203.13C7.14%203.01%207.12%202.88%207.12%202.74C7.12%202.61%207.14%202.48%207.19%202.36C7.23%202.26%207.28%202.17%207.35%202.09C7.41%202%207.49%201.93%207.58%201.87C7.66%201.81%207.76%201.77%207.86%201.74C7.96%201.71%208.06%201.69%208.17%201.69L8.38%201.69C8.48%201.71%208.57%201.75%208.66%201.79C8.75%201.84%208.83%201.9%208.9%201.97C8.97%202.04%209.04%202.12%209.09%202.2C9.14%202.29%209.17%202.38%209.2%202.48C9.24%202.69%209.23%202.9%209.15%203.1L8.66%204.51C8.65%204.53%208.64%204.56%208.64%204.58C8.63%204.6%208.63%204.63%208.63%204.65C8.62%204.67%208.62%204.7%208.62%204.72C8.62%204.74%208.63%204.77%208.63%204.79C8.63%204.82%208.64%204.84%208.64%204.86C8.65%204.88%208.66%204.91%208.67%204.93C8.67%204.95%208.68%204.97%208.7%204.99C8.71%205.01%208.72%205.04%208.73%205.05C8.75%205.07%208.76%205.09%208.78%205.11C8.79%205.13%208.81%205.14%208.83%205.16C8.85%205.18%208.87%205.19%208.88%205.2C8.9%205.22%208.92%205.23%208.95%205.24C8.97%205.25%208.99%205.26%209.01%205.27C9.03%205.28%209.06%205.28%209.08%205.29C9.1%205.3%209.13%205.3%209.15%205.3C9.17%205.31%209.2%205.31%209.22%205.31L14.53%205.31C14.57%205.31%2014.6%205.32%2014.63%205.35C14.66%205.38%2014.67%205.41%2014.67%205.45L14.67%2010.77C14.67%2010.79%2014.68%2010.82%2014.68%2010.84C14.68%2010.86%2014.68%2010.89%2014.69%2010.91C14.7%2010.93%2014.7%2010.96%2014.71%2010.98C14.72%2011%2014.73%2011.02%2014.74%2011.05C14.75%2011.07%2014.76%2011.09%2014.78%2011.11C14.79%2011.13%2014.8%2011.15%2014.82%2011.16C14.84%2011.18%2014.85%2011.2%2014.87%2011.21C14.89%2011.23%2014.91%2011.25%2014.93%2011.26C14.95%2011.27%2014.97%2011.29%2014.99%2011.3C15.01%2011.31%2015.03%2011.32%2015.05%2011.33C15.07%2011.34%2015.1%2011.34%2015.12%2011.35C15.14%2011.36%2015.17%2011.36%2015.19%2011.36C15.21%2011.37%2015.24%2011.37%2015.26%2011.37C15.29%2011.37%2015.31%2011.37%2015.33%2011.36C15.36%2011.36%2015.38%2011.36%2015.4%2011.35C15.43%2011.35%2015.45%2011.34%2015.47%2011.33L16.91%2010.82C16.96%2010.8%2017.02%2010.79%2017.07%2010.78C17.13%2010.77%2017.18%2010.76%2017.24%2010.76C17.3%2010.76%2017.35%2010.76%2017.41%2010.77C17.47%2010.78%2017.52%2010.79%2017.57%2010.81C17.63%2010.82%2017.68%2010.84%2017.73%2010.87C17.78%2010.89%2017.83%2010.92%2017.88%2010.96C17.92%2010.99%2017.97%2011.02%2018.01%2011.06C18.05%2011.1%2018.08%2011.15%2018.12%2011.19C18.15%2011.24%2018.18%2011.28%2018.21%2011.33C18.23%2011.38%2018.25%2011.44%2018.27%2011.49C18.29%2011.54%2018.3%2011.6%2018.31%2011.65C18.32%2011.71%2018.32%2011.76%2018.32%2011.82C18.32%2011.88%2018.32%2011.93%2018.31%2011.99C18.3%2012.04%2018.29%2012.1%2018.27%2012.15C18.25%2012.21%2018.23%2012.26%2018.21%2012.31C18.18%2012.36%2018.15%2012.41%2018.12%2012.45L18.11%2012.44Z'%20fill='%23474747'%20fill-opacity='1.000000'%20fill-rule='nonzero'/%3e%3c/g%3e%3cscript%20xmlns=''/%3e%3c/svg%3e", s2 = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='20.000000'%20height='20.000000'%20viewBox='0%200%2020%2020'%20fill='none'%3e%3cscript%20xmlns=''/%3e%3cdesc%3e%20Created%20with%20Pixso.%20%3c/desc%3e%3cdefs%3e%3cclipPath%20id='clip10_179'%3e%3crect%20id='个人'%20width='20.000000'%20height='20.000000'%20transform='matrix(-1%200%200%201%2020%200)'%20fill='white'%20fill-opacity='0'/%3e%3c/clipPath%3e%3c/defs%3e%3crect%20id='个人'%20width='20.000000'%20height='20.000000'%20transform='matrix(-1%200%200%201%2020%200)'%20fill='%23474747'%20fill-opacity='0'/%3e%3cg%20clip-path='url(%23clip10_179)'%3e%3cpath%20id='path'%20d='M16.99%2017.13C15.19%2018.9%2012.72%2020%2010%2020C4.47%2020%200%2015.52%200%209.99C0%204.47%204.47%200%2010%200C15.52%200%2019.99%204.47%2019.99%209.99C19.99%2012.79%2018.84%2015.32%2016.99%2017.13ZM10%2018.57C12.02%2018.57%2013.89%2017.86%2015.36%2016.68C14.57%2014.46%2012.48%2012.85%2010%2012.85C7.51%2012.85%205.42%2014.46%204.63%2016.68C6.1%2017.86%207.97%2018.57%2010%2018.57ZM10%201.42C5.26%201.42%201.42%205.26%201.42%2010C1.42%2012.13%202.21%2014.09%203.51%2015.59C4.64%2013.13%207.11%2011.42%2010%2011.42C12.87%2011.42%2015.35%2013.13%2016.48%2015.59C17.78%2014.09%2018.57%2012.13%2018.57%2010C18.57%205.26%2014.73%201.42%2010%201.42ZM10%2010.71C8.02%2010.71%206.42%209.11%206.42%207.14C6.42%205.17%208.02%203.57%2010%203.57C11.97%203.57%2013.57%205.17%2013.57%207.14C13.57%209.11%2011.97%2010.71%2010%2010.71ZM10%205C8.81%205%207.85%205.95%207.85%207.14C7.85%208.32%208.81%209.28%2010%209.28C11.18%209.28%2012.14%208.32%2012.14%207.14C12.14%205.95%2011.18%205%2010%205Z'%20fill='%230B5FE8'%20fill-opacity='1.000000'%20fill-rule='nonzero'/%3e%3c/g%3e%3cscript%20xmlns=''/%3e%3c/svg%3e", r2 = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='14.000000'%20height='14.000000'%20viewBox='0%200%2014%2014'%20fill='none'%3e%3cdesc%3eCreated%20with%20Pixso.%3c/desc%3e%3cdefs%3e%3cclipPath%20id='clip10_152'%3e%3crect%20id='ic_public_copy'%20width='14.000000'%20height='14.000000'%20fill='red'%20fill-opacity='1'%20/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23clip10_152)'%3e%3crect%20id='ic_public_copy-复制/base/ic_public_copy'%20x='0.000122'%20width='13.999854'%20height='13.999854'%20fill='%23FFFFFF'%20fill-opacity='0'%20/%3e%3cpath%20id='path1'%20d='M0%206.99C0%205.9%20-0.01%204.8%200%203.71C-0.01%203.18%200.06%202.65%200.19%202.14C0.48%201.05%201.18%200.41%202.27%200.16C2.81%200.04%203.37%20-0.01%203.92%20-6.11e-5C6.02%20-6.11e-5%208.12%20-6.11e-5%2010.22%20-6.11e-5C10.74%20-0.01%2011.27%200.05%2011.79%200.18C12.9%200.45%2013.58%201.16%2013.83%202.27C13.95%202.79%2014%203.33%2013.99%203.87C13.99%205.99%2013.99%208.11%2013.99%2010.23C13.99%2010.75%2013.94%2011.28%2013.81%2011.79C13.54%2012.91%2012.83%2013.57%2011.72%2013.83C11.17%2013.95%2010.62%2014%2010.06%2013.99C7.97%2013.99%205.88%2013.99%203.8%2013.99C3.26%2014%202.73%2013.94%202.21%2013.81C1.09%2013.54%200.42%2012.83%200.16%2011.71C0.03%2011.14%200%2010.57%200%2010C0%209%200%207.99%200%206.99Z'%20fill='%23FFFFFF'%20fill-opacity='0'%20fill-rule='evenodd'%20/%3e%3ccircle%20id='path2'%20cx='7.000061'%20cy='6.999939'%20r='6.999927'%20fill='%23FFFFFF'%20fill-opacity='0'%20/%3e%3cmask%20id='mask10_164'%20mask-type='alpha'%20maskUnits='userSpaceOnUse'%20x='0.000000'%20y='0.000000'%20width='13.999878'%20height='13.999878'%3e%3cpath%20id='蒙版'%20d='M0%200L13.99%200L13.99%2013.99L0%2013.99L0%200ZM3.14%201.57L9.44%201.57C11.09%201.57%2012.42%202.9%2012.42%204.54L12.42%2010.84C12.42%2012.49%2011.09%2013.82%209.44%2013.82L3.14%2013.82C1.5%2013.82%200.17%2012.49%200.17%2010.84L0.17%204.54C0.17%202.9%201.5%201.57%203.14%201.57Z'%20fill='%23000000'%20fill-opacity='1.000000'%20fill-rule='evenodd'%20/%3e%3c/mask%3e%3cg%20mask='url(%23mask10_164)'%3e%3cpath%20id='path'%20d='M9.44%201.04C11.38%201.04%2012.94%202.61%2012.94%204.54L12.94%208.04C12.94%209.98%2011.38%2011.54%209.44%2011.54L5.94%2011.54C4.01%2011.54%202.44%209.98%202.44%208.04L2.44%204.54C2.44%202.61%204.01%201.04%205.94%201.04L9.44%201.04Z'%20fill='%23000000'%20fill-opacity='0'%20fill-rule='nonzero'%20/%3e%3cpath%20id='path'%20d='M12.94%204.54L12.94%208.04C12.94%209.98%2011.38%2011.54%209.44%2011.54L5.94%2011.54C4.01%2011.54%202.44%209.98%202.44%208.04L2.44%204.54C2.44%202.61%204.01%201.04%205.94%201.04L9.44%201.04C11.38%201.04%2012.94%202.61%2012.94%204.54Z'%20stroke='%23191919'%20stroke-opacity='1.000000'%20stroke-width='0.874991'%20stroke-linejoin='round'%20/%3e%3c/g%3e%3cpath%20id='path4'%20d='M2.44%202.79L9.44%202.79C10.41%202.79%2011.19%203.58%2011.19%204.54L11.19%2011.54C11.19%2012.51%2010.41%2013.29%209.44%2013.29L2.44%2013.29C1.48%2013.29%200.69%2012.51%200.69%2011.54L0.69%204.54C0.69%203.58%201.48%202.79%202.44%202.79Z'%20fill='%23FFFFFF'%20fill-opacity='0'%20fill-rule='evenodd'%20/%3e%3cpath%20id='path4'%20d='M9.44%202.79C10.41%202.79%2011.19%203.58%2011.19%204.54L11.19%2011.54C11.19%2012.51%2010.41%2013.29%209.44%2013.29L2.44%2013.29C1.48%2013.29%200.69%2012.51%200.69%2011.54L0.69%204.54C0.69%203.58%201.48%202.79%202.44%202.79L9.44%202.79Z'%20fill='%23000000'%20fill-opacity='0'%20fill-rule='nonzero'%20/%3e%3cpath%20id='path4'%20d='M11.19%204.54L11.19%2011.54C11.19%2012.51%2010.41%2013.29%209.44%2013.29L2.44%2013.29C1.48%2013.29%200.69%2012.51%200.69%2011.54L0.69%204.54C0.69%203.58%201.48%202.79%202.44%202.79L9.44%202.79C10.41%202.79%2011.19%203.58%2011.19%204.54Z'%20stroke='%23191919'%20stroke-opacity='1.000000'%20stroke-width='0.874991'%20stroke-linejoin='round'%20/%3e%3c/g%3e%3c/svg%3e", c2 = async (c, L) => {
if (!(c.title && c.title !== "新标签页" && c.icon))
try {
const a = document.createElement("iframe");
a.style.display = "none", a.sandbox = "allow-scripts allow-same-origin", document.body.appendChild(a), await new Promise((_, m) => {
let k = null;
k = window.setTimeout(() => {
P(), m(new Error("获取网页信息超时"));
}, 1e4);
const P = () => {
k && window.clearTimeout(k), a && a.parentNode && a.parentNode.removeChild(a);
};
a.onload = async () => {
var D, W;
try {
let g = c.title;
if (!g || g === "新标签页") {
try {
g = ((D = a.contentDocument) == null ? void 0 : D.title) || "", !g && a.contentWindow && (g = a.contentWindow.document.title || "");
} catch (C) {
console.warn("无法获取页面标题(可能由于跨域限制):", C);
}
if (!g)
try {
g = new URL(c.url || "").hostname;
} catch {
g = "新标签页";
}
}
let M = c.icon;
if (!M)
try {
const C = (W = a.contentDocument) == null ? void 0 : W.querySelector('link[rel*="icon"]');
if (C)
M = C.href;
else if (a.contentWindow) {
const d = a.contentWindow.document.querySelector('link[rel*="icon"]');
d && (M = d.href);
}
if (!M)
try {
M = `${new URL(c.url || "").origin}/favicon.ico`;
} catch (d) {
console.warn("无法构建默认favicon URL:", d);
}
} catch (C) {
console.warn("无法获取网站图标(可能由于跨域限制):", C);
try {
M = `${new URL(c.url || "").origin}/favicon.ico`;
} catch (d) {
console.warn("无法构建默认favicon URL:", d);
}
}
L.value = L.value.map((C) => C.name === c.name ? {
...C,
title: g || C.title,
icon: M || C.icon
} : C), P(), _();
} catch (g) {
P(), m(g);
}
}, a.onerror = () => {
P(), m(new Error("无法加载页面"));
}, c.url ? a.src = c.url : (P(), m(new Error("没有提供URL")));
});
} catch (a) {
if (console.warn("获取网页信息失败:", a), !c.icon)
try {
const m = `${new URL(c.url || "").origin}/favicon.ico`;
L.value = L.value.map((k) => k.name === c.name ? { ...k, icon: m } : k);
} catch (_) {
console.warn("无法设置默认图标:", _);
}
if (!c.title || c.title === "新标签页")
try {
const _ = new URL(c.url || "");
L.value = L.value.map((m) => m.name === c.name ? { ...m, title: _.hostname } : m);
} catch (_) {
console.warn("无法设置默认标题:", _);
}
}
}, C2 = { class: "browser-tabs" }, a2 = { class: "tabs-bar" }, d2 = { class: "dropdown-search" }, u2 = { class: "dropdown-search-icon" }, p2 = ["src"], h2 = { class: "dropdown-tab-list" }, v2 = ["onClick"], f2 = ["src"], m2 = { class: "dropdown-tab-info" }, w2 = { class: "dropdown-tab-title" }, g2 = { class: "dropdown-tab-url" }, y2 = ["onClick"], _2 = {
class: "dropdown-btn",
title: "标签页列表"
}, L2 = ["draggable", "onClick", "onDragstart", "onDrop", "title", "onMouseenter"], b2 = { class: "tab-header-content" }, x2 = ["src"], k2 = {
key: 1,
class: "tab-icon"
}, M2 = ["src"], T2 = {
key: 2,
class: "tab-title"
}, P2 = {
key: 3,
class: "custom-close"
}, I2 = ["src"], R2 = { class: "window-controls" }, E2 = ["src"], O2 = { class: "address-bar" }, S2 = { class: "address-left" }, F2 = ["disabled"], Z2 = ["disabled"], U2 = { class: "address-url" }, $2 = { class: "address-site-icon" }, B2 = ["src"], A2 = ["readonly"], N2 = { class: "address-right" }, z2 = {
class: "nav-btn addressbar-btn-tool",
title: "扩展"
}, D2 = ["src"], W2 = {
class: "nav-btn addressbar-btn-user",
title: "用户"
}, V2 = ["src"], j2 = {
class: "nav-btn addressbar-btn-setting",
title: "设置"
}, Y2 = { class: "tab-content" }, X2 = { key: 0 }, q2 = ["src"], H2 = {
key: 1,
class: "empty-content"
}, G2 = {
key: 1,
class: "empty-content"
}, K2 = "https://agent.opentiny.design/api/v1/webmcp-trial/mcp", Q2 = 55, J2 = /* @__PURE__ */ B0({
name: "TinyBrowserTabs",
__name: "index",
props: {
items: {},
modelValue: {},
draggable: { type: Boolean },
backward: {},
forward: {},
addressEditable: { type: Boolean },
sessionId: {},
agentRoot: {}
},
emits: [
"change",
"close",
"tab-drag-end",
"add",
"address-enter",
"go-back",
"go-forward",
"refresh",
"minimize",
"maximize",
"window-close",
"star"
],
setup(c, { emit: L }) {
var l0;
const a = Y0(), _ = X0(), m = q0(), k = H0(), P = G0(), D = K0(), W = Q0(), g = J0(), M = e2(), C = c, d = L, [t0, v0] = D0(), V = {
transport: t0,
capabilities: {
prompts: { listChanged: !0 },
resources: { subscribe: !0, listChanged: !0 },
tools: { listChanged: !0 },
completions: {},
logging: {}
}
};
window && (window.mcpServer = V), t0.onerror = (e) => {
console.error("ServerTransport error:", e);
}, (async () => {
const e = new V0(
{ name: "mcp-web-client", version: "1.0.0" },
{ capabilities: { roots: { listChanged: !0 }, sampling: {}, elicitation: {} } }
);
window.client = e, await e.connect(v0);
const { sessionId: o } = await e.connect({
url: C.agentRoot || K2,
sessionId: C.sessionId,
agent: !0,
onError: (i) => {
console.error("Connect proxy error:", i);
}
});
console.log("sessionId", o), window.addEventListener("pagehide", e.onPagehide);
})();
const S = new W0(
{ name: "tiny-browser-tabs", version: "1.0.0" },
{ capabilities: V.capabilities }
), v = b(C.modelValue), s = b(C.items), R = b(null), o0 = b(null), n0 = b(null), j = b([]), F = b(!1), Y = b(""), f0 = c0(
() => s.value.filter(
(e) => e.title.toLowerCase().includes(Y.value.toLowerCase()) || e.url && e.url.toLowerCase().includes(Y.value.toLowerCase())
)
), X = C.draggable, m0 = C.backward, w0 = C.forward, g0 = C.addressEditable, Z = () => {
F.value = s.value.length === 1 ? !1 : !!(j.value.length > 0 && j.value.some((e) => e && e.offsetWidth < Q2));
};
A0(async () => {
E(Z), window.addEventListener("resize", Z), y0(), await S.connect(V.transport), window.addEventListener("message", (e) => {
e.data && e.data.type === "LOAD_COMPLETE" && F0(), Z0(e);
});
});
const y0 = async () => {
S.registerTool(
"open-tab",
{
description: "打开一个新的浏览器标签页、打开网页、打开网址,打开网站",
inputSchema: {
url: x.string().describe("要打开的网页URL,网站,标签页,网址"),
title: x.string().optional().describe("标签页标题,如果未指定则自动从网页获取"),
icon: x.string().optional().describe("标签页图标URL,如果未指定则自动从网页获取")
}
},
async ({ url: e, name: o, title: i, icon: t }) => {
var w;
const l = o || `tab-${(w = s.value) == null ? void 0 : w.length}`, u = {
title: i || "新标签页",
name: l,
url: e,
icon: t
};
return s.value.push(u), $(l), (!i || !t) && c2(u, s.value), {
content: [
{
type: "text",
text: `成功打开标签页: ${u.title} (${u.name})`
}
]
};
}
), S.registerTool(
"close-tab",
{
description: "关闭一个浏览器标签页",
inputSchema: {
title: x.string().optional().describe("要关闭的标签页名称"),
url: x.string().optional().describe("要关闭的标签页URL"),
index: x.number().optional().describe("要关闭的标签页索引(从0开始)")
}
},
async ({ title: e, url: o, index: i }) => {
let t;
if (e !== void 0)
t = s.value.find((l) => l.title === e);
else if (o !== void 0)
t = s.value.find((l) => l.url === o);
else if (i !== void 0 && i >= 0 && i < s.value.length)
t = s.value[i];
else
return {
content: [
{
type: "text",
text: "必须提供name、url或index参数中的一个来指定要关闭的标签页"
}
]
};
return t ? (H(t, !0), {
content: [
{
type: "text",
text: `成功关闭标签页: ${t.title} (${t.name})`
}
]
}) : {
content: [
{
type: "text",
text: "未找到要关闭的标签页"
}
]
};
}
), S.registerTool(
"switch-to-tab",
{
description: "切换到指定的浏览器标签页",
inputSchema: {
title: x.string().optional().describe("要切换到的标签页名称"),
url: x.string().optional().describe("要切换到的标签页URL、网址"),
index: x.number().optional().describe("要切换到的第几个标签页(从0开始)")
}
},
async ({ title: e, url: o, index: i }) => {
let t;
if (s.value.length === 0)
return {
content: [
{
type: "text",
text: "没有标签页可以切换"
}
]
};
if (e !== void 0)
t = s.value.find((l) => l.title === e);
else if (o !== void 0)
t = s.value.find((l) => l.url === o);
else if (i !== void 0 && i >= 0 && i < s.value.length)
t = s.value[i];
else
return {
content: [
{
type: "text",
text: "必须提供name、url或index参数中的一个来指定要切换到的标签页"
}
]
};
return t ? ($(t.name), {
content: [
{
type: "text",
text: `成功切换到标签页: ${t.title} (${t.name})`
}
]
}) : {
content: [
{
type: "text",
text: "未找到要切换到的标签页"
}
]
};
}
);
};
N(
() => s.value,
() => {
E(Z);
},
{ deep: !0 }
), N(v, () => {
E(Z);
});
const i0 = (e) => {
E(() => {
const o = j.value[e], i = n0.value;
if (!o || !i) return;
const t = o.getBoundingClientRect(), l = i.getBoundingClientRect(), u = 42;
t.left < l.left ? i.scrollLeft -= l.left - t.left + u : t.right > l.right && (i.scrollLeft += t.right - l.right + u);
});
}, _0 = (e, o) => {
d("change", e), $(e.name), i0(o);
}, L0 = () => {
d("add"), E(() => {
i0(s.value.length - 1);
});
};
N(
() => C.modelValue,
(e) => {
v.value = e;
}
), N(
() => C.items,
(e) => {
s.value = e || [];
}
);
const p = c0(() => (s.value || []).find((e) => e.name === v.value)), U = b(((l0 = p.value) == null ? void 0 : l0.url) || "");
N(p, (e) => {
U.value = (e == null ? void 0 : e.url) || "";
});
const b0 = () => {
d("address-enter", U.value, p.value);
const e = s.value.findIndex((o) => o.name === v.value);
e !== -1 && (s.value[e].url = U.value);
}, $ = (e) => {
v.value = e;
}, H = (e, o) => {
if (!o) {
d("close", e);
return;
}
const i = s.value.findIndex((t) => t.name === e.name);
i !== -1 && (v.value === e.name && (i < s.value.length - 1 ? $(s.value[i + 1].name) : i > 0 && $(s.value[i - 1].name)), s.value.splice(i, 1));
}, x0 = (e) => {
R.value = e;
}, k0 = (e) => {
if (R.value === null || R.value === e) return;
const o = s.value.splice(R.value, 1)[0];
s.value.splice(e, 0, o), d("tab-drag-end", { from: R.value, to: e, tabs: s.value }), R.value = null;
}, M0 = () => {
d("go-back", p.value);
}, T0 = () => {
d("go-forward", p.value);
}, P0 = () => {
d("refresh", p.value);
}, I0 = () => {
d("minimize");
}, R0 = () => {
d("maximize");
}, E0 = () => {
d("window-close");
}, O0 = (e) => {
v.value = e, E(Z);
}, B = b(!1), S0 = () => {
B.value = !B.value, d("star", p.value, B.value);
}, F0 = () => {
var o, i;
const e = document.querySelector('iframe[src="' + ((o = p.value) == null ? void 0 : o.url) + '"]');
if (e && e.contentWindow && ((i = p.value) != null && i.url))
try {
const t = {
endpoint: "tiny-browser-tabs",
capabilities: V.capabilities,
// 添加MCP代理客户端标识,让iframe知道可以使用代理功能
proxyEnabled: !0
};
e.contentWindow.postMessage(
{
type: "MCP_CONFIG",
data: t,
source: "browser-tabs-mcp"
},
new URL(p.value.url).origin
);
} catch (t) {
console.error("向iframe发送消息时出错:", t);
}
}, Z0 = async (e) => {
var t;
const o = document.querySelector('iframe[src="' + ((t = p.value) == null ? void 0 : t.url) + '"]');
if (!o || e.source !== o.contentWindow)
return;
const i = e.data;
if (i && i.type === "MCP_PROXY_REQUEST") {
const { id: l, method: u, params: w } = i.data;
try {
let y;
switch (u) {
case "registerTool":
const s0 = {};
Object.keys(w.parameters).forEach((I) => {
s0[I] = x.string().describe(w.parameters[I]);
}), S.registerTool(
w.name,
{
description: w.description,
inputSchema: s0
},
async (I) => new Promise(($0, r0) => {
const q = ++U0;
A.set(q, { resolve: $0, reject: r0 }), o.contentWindow.postMessage(
{
type: "MCP_PROXY_TOOL_CALL",
data: {
id: q,
toolName: w.name,
args: I
}
},
new URL(p.value.url).origin
), setTimeout(() => {
A.has(q) && (A.delete(q), r0(new Error(`Tool call timeout: ${w.name}`)));
}, 5e3);
})
), y = { success: !0 };
break;
case "callTool":
try {
y = await client.callTool({
name: w.name,
arguments: w.arguments
});
} catch (I) {
y = { error: I.message };
}
break;
case "listTools":
try {
y = await client.listTools();
} catch (I) {
y = { error: I.message };
}
break;
default:
y = { error: `Unknown method: ${u}` };
}
o.contentWindow.postMessage(
{
type: "MCP_PROXY_RESPONSE",
data: { id: l, result: y }
},
new URL(p.value.url).origin
);
} catch (y) {
o.contentWindow.postMessage(
{
type: "MCP_PROXY_RESPONSE",
data: {
id: l,
error: y.message || "Unknown error occurred"
}
},
new URL(p.value.url).origin
);
}
}
if (i && i.type === "MCP_PROXY_TOOL_CALL_RESPONSE") {
const { id: l, result: u, error: w } = i.data, y = A.get(l);
y && (A.delete(l), w ? y.reject(new Error(w)) : y.resolve(u));
}
};
let U0 = 0;
const A = /* @__PURE__ */ new Map();
return (e, o) => {
var i;
return h(), f("div", C2, [
n("div", a2, [
T(r(j0), {
placement: "bottom-start",
"append-to-body": !1
}, {
reference: C0(() => [
n("button", _2, [
T(r(k))
])
]),
default: C0(() => [
n("div", null, [
n("div", d2, [
n("span", u2, [
n("img", {
src: r(i2),
alt: "search"
}, null, 8, p2)
]),
a0(n("input", {
class: "dropdown-search-input",
"onUpdate:modelValue": o[0] || (o[0] = (t) => Y.value = t),
placeholder: "搜索标签页",
onClick: o[1] || (o[1] = O(() => {
}, ["stop"]))
}, null, 512), [
[d0, Y.value]
])
]),
o[6] || (o[6] = n("div", { class: "dropdown-search-divider" }, null, -1)),
n("div", h2, [
(h(!0), f(G, null, u0(f0.value, (t) => (h(), f("div", {
key: t.name,
class: K(["dropdown-tab-item", { active: t.name === v.value }]),
onClick: (l) => O0(t.name)
}, [
n("img", {
src: t.icon || r(h0),
class: "dropdown-tab-icon"
}, null, 8, f2),
n("div", m2, [
n("div", w2, Q(t.title), 1),
n("div", g2, Q(t.url), 1)
]),
n("div", {
class: "dropdown-tab-close",
onClick: O((l) => H(t), ["stop"]),
title: "关闭"
}, "×", 8, y2)
], 10, v2))), 128))
])
])
]),
_: 1
}),
n("div", {
class: "tab-list",
ref_key: "tabListRef",
ref: n0
}, [
(h(!0), f(G, null, u0(s.value, (t, l) => (h(), f("div", {
key: t.name,
class: K(["tab-item", { active: t.name === v.value, narrow: F.value }]),
ref_for: !0,
ref: (u) => j.value[l] = u,
draggable: r(X) === !0,
onClick: (u) => _0(t, l),
onDragstart: (u) => r(X) === !0 ? () => x0(l) : void 0,
onDragover: o[3] || (o[3] = O((u) => r(X) === !0, ["prevent"])),
onDrop: O((u) => r(X) === !0 ? () => k0(l) : void 0, ["prevent"]),
title: t.title,
onMouseenter: (u) => o0.value = l,
onMouseleave: o[4] || (o[4] = (u) => o0.value = null)
}, [
n("div", b2, [
t.name === v.value ? (h(), f("img", {
key: 0,
class: "tab-arc arc-left",
src: r(t2)
}, null, 8, x2)) : z("", !0),
!F.value || t.name !== v.value ? (h(), f("span", k2, [
J(e.$slots, "tab-icon", {
tab: t,
index: l,
isActive: t.name === v.value
}, () => [
n("img", {
src: (t == null ? void 0 : t.icon) || r(h0),
alt: "icon",
class: "tab-header-icon"
}, null, 8, M2)
], !0)
])) : z("", !0),
F.value ? z("", !0) : (h(), f("span", T2, [
J(e.$slots, "tab-title", {
tab: t,
index: l,
isActive: t.name === v.value
}, () => [
N0(Q(t.title), 1)
], !0)
])),
!F.value || t.name === v.value ? (h(), f("div", P2, [
T(r(P), {
class: "tab-close",
onMousedown: o[2] || (o[2] = O(() => {
}, ["stop"])),
onClick: O((u) => H(t), ["stop"])
}, null, 8, ["onClick"])
])) : z("", !0),
t.name === v.value ? (h(), f("img", {
key: 4,
class: "tab-arc arc-right",
src: r(o2)
}, null, 8, I2)) : z("", !0)
])
], 42, L2))), 128))
], 512),
n("button", {
class: "tab-add",
onClick: L0
}, "+"),
n("div", R2, [
n("button", {
class: "window-btn min",
onClick: I0,
title: "最小化"
}, [
T(r(D))
]),
n("button", {
class: "window-btn max",
onClick: R0,
title: "窗口化"
}, [
n("img", { src: r(r2) }, null, 8, E2)
]),
n("button", {
class: "window-btn close",
onClick: E0,
title: "关闭"
}, [
T(r(P))
])
])
]),
n("div", O2, [
n("div", S2, [
n("button", {
class: "nav-btn",
onClick: M0,
disabled: !r(m0),
title: "后退"
}, [
T(r(a))
], 8, F2),
n("button", {
class: "nav-btn",
onClick: T0,
disabled: !r(w0),
title: "前进"
}, [
T(r(_))
], 8, Z2),
n("button", {
class: "nav-btn",
onClick: P0,
title: "刷新"
}, [
T(r(m))
])
]),
n("div", U2, [
n("span", $2, [
n("img", {
src: ((i = p.value) == null ? void 0 : i.icon) || r(n2),
alt: "site"
}, null, 8, B2)
]),
a0(n("input", {
class: "address-input",
"onUpdate:modelValue": o[5] || (o[5] = (t) => U.value = t),
onKeydown: z0(b0, ["enter"]),
readonly: r(g0)
}, null, 40, A2), [
[d0, U.value]
]),
n("button", {
class: K(["star-btn", { starred: B.value }]),
onClick: S0,
title: "收藏"
}, [
B.value ? (h(), p0(r(M), { key: 0 })) : (h(), p0(r(g), {
key: 1,
class: "stared"
}))
], 2)
]),
n("div", N2, [
n("button", z2, [
n("img", {
src: r(l2),
alt: "extension"
}, null, 8, D2)
]),
o[7] || (o[7] = n("div", { class: "delivider" }, null, -1)),
n("button", W2, [
n("img", {
src: r(s2),
alt: "user"
}, null, 8, V2)
]),
n("button", j2, [
T(r(W))
])
])
]),
n("div", Y2, [
e.$slots.default ? J(e.$slots, "default", {
key: 0,
tab: p.value,
items: s.value,
activeName: v.value
}, void 0, !0) : (h(), f(G, { key: 1 }, [
p.value ? (h(), f("div", X2, [
p.value.url ? (h(), f("iframe", {
key: 0,
src: p.value.url,
id: "iframe-page",
frameborder: "0",
style: { width: "100%", height: "calc(100vh - 110px)" }
}, null, 8, q2)) : (h(), f("div", H2, o[8] || (o[8] = [
n("p", null, "No URL provided for this tab.", -1),
n("p", null, "You can use slots to display custom content.", -1)
])))
])) : (h(), f("div", G2, o[9] || (o[9] = [
n("p", null, "No tab selected.", -1)
])))
], 64))
])
]);
};
}
}), e1 = (c, L) => {
const a = c.__vccOpts || c;
for (const [_, m] of L)
a[_] = m;
return a;
}, e0 = /* @__PURE__ */ e1(J2, [["__scopeId", "data-v-1533fbb2"]]);
e0.install = function(c) {
c.component(e0.name || "TinyBrowserTabs", e0);
};
export {
e0 as BrowserTabs,
C1 as McpProxyClient,
e0 as default
};