@openloaf/openspeech-frontend 0.2.52 → 0.2.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{App-ZDJNSDOs.js → App-BFpSUQKp.js} +3 -3
- package/dist/assets/App-CWEdoK1C.css +1 -0
- package/dist/assets/main-BTc7NyZo.js +1005 -0
- package/dist/assets/{promo-BWSHpoHx.js → promo-DgJRN6om.js} +1 -1
- package/dist/index.html +3 -3
- package/dist/promo.html +3 -3
- package/package.json +1 -1
- package/dist/assets/App-B9oI8z2l.css +0 -1
- package/dist/assets/main-C3S8VqtP.js +0 -1005
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{l as F,Q as M,T as Y,U as fe,V as ge,Y as Pe,Z as We,_ as Ae,$ as Ie,a0 as Re,a1 as Ce,a2 as xe,a3 as He,a4 as Fe,a5 as De,r as x,a6 as Be,a7 as J,a8 as P,a9 as Ve,aa as Xe,ab as Ye,o as s,C as f,h as $e,X as Ue,A as U,I as qe,ac as Ge,ad as Ke,W as Qe,N as Je,m as Ze,b as E,P as et}from"./App-ZDJNSDOs.js";const tt=[["path",{d:"M12 17V3",key:"1cwfxf"}],["path",{d:"m6 11 6 6 6-6",key:"12ii2o"}],["path",{d:"M19 21H5",key:"150jfl"}]],it=F("arrow-down-to-line",tt);const st=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],nt=F("cpu",st);const rt=[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],at=F("earth",rt);const ot=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],lt=F("lock",ot);function ve(e,t){let i;const n=()=>{const{currentTime:r}=t,o=(r===null?0:r.value)/100;i!==o&&e(o),i=o};return M.preUpdate(n,!0),()=>Y(n)}function R(e){return typeof window>"u"?!1:e?fe():ge()}const ct=50,Z=()=>({current:0,offset:[],progress:0,scrollLength:0,targetOffset:0,targetLength:0,containerLength:0,velocity:0}),ht=()=>({time:0,x:Z(),y:Z()}),dt={x:{length:"Width",position:"Left"},y:{length:"Height",position:"Top"}};function ee(e,t,i,n){const r=i[t],{length:a,position:o}=dt[t],h=r.current,l=i.time;r.current=Math.abs(e[`scroll${o}`]),r.scrollLength=e[`scroll${a}`]-e[`client${a}`],r.offset.length=0,r.offset[0]=0,r.offset[1]=r.scrollLength,r.progress=Pe(0,r.scrollLength,r.current);const d=n-l;r.velocity=d>ct?0:We(r.current-h,d)}function pt(e,t,i){ee(e,"x",t,i),ee(e,"y",t,i),t.time=i}function ut(e,t){const i={x:0,y:0};let n=e;for(;n&&n!==t;)if(Ae(n))i.x+=n.offsetLeft,i.y+=n.offsetTop,n=n.offsetParent;else if(n.tagName==="svg"){const r=n.getBoundingClientRect();n=n.parentElement;const a=n.getBoundingClientRect();i.x+=r.left-a.left,i.y+=r.top-a.top}else if(n instanceof SVGGraphicsElement){const{x:r,y:a}=n.getBBox();i.x+=r,i.y+=a;let o=null,h=n.parentNode;for(;!o;)h.tagName==="svg"&&(o=h),h=n.parentNode;n=o}else break;return i}const $={start:0,center:.5,end:1};function te(e,t,i=0){let n=0;if(e in $&&(e=$[e]),typeof e=="string"){const r=parseFloat(e);e.endsWith("px")?n=r:e.endsWith("%")?e=r/100:e.endsWith("vw")?n=r/100*document.documentElement.clientWidth:e.endsWith("vh")?n=r/100*document.documentElement.clientHeight:e=r}return typeof e=="number"&&(n=t*e),i+n}const mt=[0,0];function ft(e,t,i,n){let r=Array.isArray(e)?e:mt,a=0,o=0;return typeof e=="number"?r=[e,e]:typeof e=="string"&&(e=e.trim(),e.includes(" ")?r=e.split(" "):r=[e,$[e]?e:"0"]),a=te(r[0],i,n),o=te(r[1],t),a-o}const _={Enter:[[0,1],[1,1]],Exit:[[0,0],[1,0]],Any:[[1,0],[0,1]],All:[[0,0],[1,1]]},gt={x:0,y:0};function xt(e){return"getBBox"in e&&e.tagName!=="svg"?e.getBBox():{width:e.clientWidth,height:e.clientHeight}}function vt(e,t,i){const{offset:n=_.All}=i,{target:r=e,axis:a="y"}=i,o=a==="y"?"height":"width",h=r!==e?ut(r,e):gt,l=r===e?{width:e.scrollWidth,height:e.scrollHeight}:xt(r),d={width:e.clientWidth,height:e.clientHeight};t[a].offset.length=0;let p=!t[a].interpolate;const m=n.length;for(let c=0;c<m;c++){const g=ft(n[c],d[o],l[o],h[a]);!p&&g!==t[a].interpolatorOffsets[c]&&(p=!0),t[a].offset[c]=g}p&&(t[a].interpolate=Ie(t[a].offset,Re(n),{clamp:!1}),t[a].interpolatorOffsets=[...t[a].offset]),t[a].progress=Ce(0,1,t[a].interpolate(t[a].current))}function yt(e,t=e,i){if(i.x.targetOffset=0,i.y.targetOffset=0,t!==e){let n=t;for(;n&&n!==e;)i.x.targetOffset+=n.offsetLeft,i.y.targetOffset+=n.offsetTop,n=n.offsetParent}i.x.targetLength=t===e?t.scrollWidth:t.clientWidth,i.y.targetLength=t===e?t.scrollHeight:t.clientHeight,i.x.containerLength=e.clientWidth,i.y.containerLength=e.clientHeight}function bt(e,t,i,n={}){return{measure:r=>{yt(e,n.target,i),pt(e,i,r),(n.offset||n.target)&&vt(e,i,n)},notify:()=>t(i)}}const L=new WeakMap,ie=new WeakMap,B=new WeakMap,se=new WeakMap,W=new WeakMap,ne=e=>e===document.scrollingElement?window:e;function ye(e,{container:t=document.scrollingElement,trackContentSize:i=!1,...n}={}){if(!t)return xe;let r=B.get(t);r||(r=new Set,B.set(t,r));const a=ht(),o=bt(t,e,a,n);if(r.add(o),!L.has(t)){const l=()=>{for(const c of r)c.measure(Fe.timestamp);M.preUpdate(d)},d=()=>{for(const c of r)c.notify()},p=()=>M.read(l);L.set(t,p);const m=ne(t);window.addEventListener("resize",p),t!==document.documentElement&&ie.set(t,He(t,p)),m.addEventListener("scroll",p),p()}if(i&&!W.has(t)){const l=L.get(t),d={width:t.scrollWidth,height:t.scrollHeight};se.set(t,d);const p=()=>{const c=t.scrollWidth,g=t.scrollHeight;(d.width!==c||d.height!==g)&&(l(),d.width=c,d.height=g)},m=M.read(p,!0);W.set(t,m)}const h=L.get(t);return M.read(h,!1,!0),()=>{Y(h);const l=B.get(t);if(!l||(l.delete(o),l.size))return;const d=L.get(t);L.delete(t),d&&(ne(t).removeEventListener("scroll",d),ie.get(t)?.(),window.removeEventListener("resize",d));const p=W.get(t);p&&(Y(p),W.delete(t)),se.delete(t)}}const wt=[[_.Enter,"entry"],[_.Exit,"exit"],[_.Any,"cover"],[_.All,"contain"]],re={start:0,end:1};function jt(e){const t=e.trim().split(/\s+/);if(t.length!==2)return;const i=re[t[0]],n=re[t[1]];if(!(i===void 0||n===void 0))return[i,n]}function St(e){if(e.length!==2)return;const t=[];for(const i of e)if(Array.isArray(i))t.push(i);else if(typeof i=="string"){const n=jt(i);if(!n)return;t.push(n)}else return;return t}function Nt(e,t){const i=St(e);if(!i)return!1;for(let n=0;n<2;n++){const r=i[n],a=t[n];if(r[0]!==a[0]||r[1]!==a[1])return!1}return!0}function q(e){if(!e)return{rangeStart:"contain 0%",rangeEnd:"contain 100%"};for(const[t,i]of wt)if(Nt(e,t))return{rangeStart:`${i} 0%`,rangeEnd:`${i} 100%`}}const ae=new Map;function oe(e){const t={value:0},i=ye(n=>{t.value=n[e.axis].progress*100},e);return{currentTime:t,cancel:i}}function be({source:e,container:t,...i}){const{axis:n}=i;e&&(t=e);let r=ae.get(t);r||(r=new Map,ae.set(t,r));const a=i.target??"self";let o=r.get(a);o||(o={},r.set(a,o));const h=n+(i.offset??[]).join(",");return o[h]||(i.target&&R(i.target)?q(i.offset)?o[h]=new ViewTimeline({subject:i.target,axis:n}):o[h]=oe({container:t,...i}):R()?o[h]=new ScrollTimeline({source:t,axis:n}):o[h]=oe({container:t,...i})),o[h]}function kt(e,t){const i=be(t),n=t.target?q(t.offset):void 0,r=t.target?R(t.target)&&!!n:R();return e.attachTimeline({timeline:r?i:void 0,...n&&r&&{rangeStart:n.rangeStart,rangeEnd:n.rangeEnd},observe:a=>(a.pause(),ve(o=>{a.time=a.iterationDuration*o},i))})}function Et(e){return e.length===2}function Ot(e,t){return Et(e)?ye(i=>{e(i[t.axis].progress,i)},t):ve(e,be(t))}function we(e,{axis:t="y",container:i=document.scrollingElement,...n}={}){if(!i)return xe;const r={axis:t,container:i,...n};return typeof e=="function"?Ot(e,r):kt(e,r)}const zt=()=>({scrollX:P(0),scrollY:P(0),scrollXProgress:P(0),scrollYProgress:P(0)}),A=e=>e?!e.current:!1;function le(e,t,i,n){return{factory:r=>we(r,{...t,axis:e,container:i?.current||void 0,target:n?.current||void 0}),times:[0,1],keyframes:[0,1],ease:r=>r,duration:1}}function Lt(e,t){return typeof window>"u"?!1:e?fe()&&!!q(t):ge()}function Tt({container:e,target:t,...i}={}){const n=De(zt);Lt(t,i.offset)&&(n.scrollXProgress.accelerate=le("x",i,e,t),n.scrollYProgress.accelerate=le("y",i,e,t));const r=x.useRef(null),a=x.useRef(!1),o=x.useCallback(()=>(r.current=we((h,{x:l,y:d})=>{n.scrollX.set(l.current),n.scrollXProgress.set(l.progress),n.scrollY.set(d.current),n.scrollYProgress.set(d.progress)},{...i,container:e?.current||void 0,target:t?.current||void 0}),()=>{r.current?.()}),[e,t,JSON.stringify(i.offset)]);return Be(()=>{if(a.current=!1,A(e)||A(t)){a.current=!0;return}else return o()},[o]),x.useEffect(()=>{if(a.current)return J(!A(e)),J(!A(t)),o()},[o]),n}function G(){!Ve.current&&Xe();const[e]=x.useState(Ye.current);return e}var ce="1.3.23";function je(e,t,i){return Math.max(e,Math.min(t,i))}function Mt(e,t,i){return(1-i)*e+i*t}function _t(e,t,i,n){return Mt(e,t,1-Math.exp(-i*n))}function Pt(e,t){return(e%t+t)%t}var Wt=class{isRunning=!1;value=0;from=0;to=0;currentTime=0;lerp;duration;easing;onUpdate;advance(e){if(!this.isRunning)return;let t=!1;if(this.duration&&this.easing){this.currentTime+=e;const i=je(0,this.currentTime/this.duration,1);t=i>=1;const n=t?1:this.easing(i);this.value=this.from+(this.to-this.from)*n}else this.lerp?(this.value=_t(this.value,this.to,this.lerp*60,e),Math.round(this.value)===Math.round(this.to)&&(this.value=this.to,t=!0)):(this.value=this.to,t=!0);t&&this.stop(),this.onUpdate?.(this.value,t)}stop(){this.isRunning=!1}fromTo(e,t,{lerp:i,duration:n,easing:r,onStart:a,onUpdate:o}){this.from=this.value=e,this.to=t,this.lerp=i,this.duration=n,this.easing=r,this.currentTime=0,this.isRunning=!0,a?.(),this.onUpdate=o}};function At(e,t){let i;return function(...n){clearTimeout(i),i=setTimeout(()=>{i=void 0,e.apply(this,n)},t)}}var It=class{width=0;height=0;scrollHeight=0;scrollWidth=0;debouncedResize;wrapperResizeObserver;contentResizeObserver;constructor(e,t,{autoResize:i=!0,debounce:n=250}={}){this.wrapper=e,this.content=t,i&&(this.debouncedResize=At(this.resize,n),this.wrapper instanceof Window?window.addEventListener("resize",this.debouncedResize):(this.wrapperResizeObserver=new ResizeObserver(this.debouncedResize),this.wrapperResizeObserver.observe(this.wrapper)),this.contentResizeObserver=new ResizeObserver(this.debouncedResize),this.contentResizeObserver.observe(this.content)),this.resize()}destroy(){this.wrapperResizeObserver?.disconnect(),this.contentResizeObserver?.disconnect(),this.wrapper===window&&this.debouncedResize&&window.removeEventListener("resize",this.debouncedResize)}resize=()=>{this.onWrapperResize(),this.onContentResize()};onWrapperResize=()=>{this.wrapper instanceof Window?(this.width=window.innerWidth,this.height=window.innerHeight):(this.width=this.wrapper.clientWidth,this.height=this.wrapper.clientHeight)};onContentResize=()=>{this.wrapper instanceof Window?(this.scrollHeight=this.content.scrollHeight,this.scrollWidth=this.content.scrollWidth):(this.scrollHeight=this.wrapper.scrollHeight,this.scrollWidth=this.wrapper.scrollWidth)};get limit(){return{x:this.scrollWidth-this.width,y:this.scrollHeight-this.height}}},Se=class{events={};emit(e,...t){const i=this.events[e]||[];for(let n=0,r=i.length;n<r;n++)i[n]?.(...t)}on(e,t){return this.events[e]?this.events[e].push(t):this.events[e]=[t],()=>{this.events[e]=this.events[e]?.filter(i=>t!==i)}}off(e,t){this.events[e]=this.events[e]?.filter(i=>t!==i)}destroy(){this.events={}}};const Rt=100/6,k={passive:!1};function he(e,t){return e===1?Rt:e===2?t:1}var Ct=class{touchStart={x:0,y:0};lastDelta={x:0,y:0};window={width:0,height:0};emitter=new Se;constructor(e,t={wheelMultiplier:1,touchMultiplier:1}){this.element=e,this.options=t,window.addEventListener("resize",this.onWindowResize),this.onWindowResize(),this.element.addEventListener("wheel",this.onWheel,k),this.element.addEventListener("touchstart",this.onTouchStart,k),this.element.addEventListener("touchmove",this.onTouchMove,k),this.element.addEventListener("touchend",this.onTouchEnd,k)}on(e,t){return this.emitter.on(e,t)}destroy(){this.emitter.destroy(),window.removeEventListener("resize",this.onWindowResize),this.element.removeEventListener("wheel",this.onWheel,k),this.element.removeEventListener("touchstart",this.onTouchStart,k),this.element.removeEventListener("touchmove",this.onTouchMove,k),this.element.removeEventListener("touchend",this.onTouchEnd,k)}onTouchStart=e=>{const{clientX:t,clientY:i}=e.targetTouches?e.targetTouches[0]:e;this.touchStart.x=t,this.touchStart.y=i,this.lastDelta={x:0,y:0},this.emitter.emit("scroll",{deltaX:0,deltaY:0,event:e})};onTouchMove=e=>{const{clientX:t,clientY:i}=e.targetTouches?e.targetTouches[0]:e,n=-(t-this.touchStart.x)*this.options.touchMultiplier,r=-(i-this.touchStart.y)*this.options.touchMultiplier;this.touchStart.x=t,this.touchStart.y=i,this.lastDelta={x:n,y:r},this.emitter.emit("scroll",{deltaX:n,deltaY:r,event:e})};onTouchEnd=e=>{this.emitter.emit("scroll",{deltaX:this.lastDelta.x,deltaY:this.lastDelta.y,event:e})};onWheel=e=>{let{deltaX:t,deltaY:i,deltaMode:n}=e;const r=he(n,this.window.width),a=he(n,this.window.height);t*=r,i*=a,t*=this.options.wheelMultiplier,i*=this.options.wheelMultiplier,this.emitter.emit("scroll",{deltaX:t,deltaY:i,event:e})};onWindowResize=()=>{this.window={width:window.innerWidth,height:window.innerHeight}}};const de=e=>Math.min(1,1.001-2**(-10*e));var Ht=class{_isScrolling=!1;_isStopped=!1;_isLocked=!1;_preventNextNativeScrollEvent=!1;_resetVelocityTimeout=null;_rafId=null;isTouching;time=0;userData={};lastVelocity=0;velocity=0;direction=0;options;targetScroll;animatedScroll;animate=new Wt;emitter=new Se;dimensions;virtualScroll;constructor({wrapper:e=window,content:t=document.documentElement,eventsTarget:i=e,smoothWheel:n=!0,syncTouch:r=!1,syncTouchLerp:a=.075,touchInertiaExponent:o=1.7,duration:h,easing:l,lerp:d=.1,infinite:p=!1,orientation:m="vertical",gestureOrientation:c=m==="horizontal"?"both":"vertical",touchMultiplier:g=1,wheelMultiplier:u=1,autoResize:v=!0,prevent:y,virtualScroll:b,overscroll:j=!0,autoRaf:S=!1,anchors:N=!1,autoToggle:T=!1,allowNestedScroll:O=!1,__experimental__naiveDimensions:Te=!1,naiveDimensions:Me=Te,stopInertiaOnNavigate:_e=!1}={}){window.lenisVersion=ce,window.lenis||(window.lenis={}),window.lenis.version=ce,m==="horizontal"&&(window.lenis.horizontal=!0),r===!0&&(window.lenis.touch=!0),(!e||e===document.documentElement)&&(e=window),typeof h=="number"&&typeof l!="function"?l=de:typeof l=="function"&&typeof h!="number"&&(h=1),this.options={wrapper:e,content:t,eventsTarget:i,smoothWheel:n,syncTouch:r,syncTouchLerp:a,touchInertiaExponent:o,duration:h,easing:l,lerp:d,infinite:p,gestureOrientation:c,orientation:m,touchMultiplier:g,wheelMultiplier:u,autoResize:v,prevent:y,virtualScroll:b,overscroll:j,autoRaf:S,anchors:N,autoToggle:T,allowNestedScroll:O,naiveDimensions:Me,stopInertiaOnNavigate:_e},this.dimensions=new It(e,t,{autoResize:v}),this.updateClassName(),this.targetScroll=this.animatedScroll=this.actualScroll,this.options.wrapper.addEventListener("scroll",this.onNativeScroll),this.options.wrapper.addEventListener("scrollend",this.onScrollEnd,{capture:!0}),(this.options.anchors||this.options.stopInertiaOnNavigate)&&this.options.wrapper.addEventListener("click",this.onClick),this.options.wrapper.addEventListener("pointerdown",this.onPointerDown),this.virtualScroll=new Ct(i,{touchMultiplier:g,wheelMultiplier:u}),this.virtualScroll.on("scroll",this.onVirtualScroll),this.options.autoToggle&&(this.checkOverflow(),this.rootElement.addEventListener("transitionend",this.onTransitionEnd)),this.options.autoRaf&&(this._rafId=requestAnimationFrame(this.raf))}destroy(){this.emitter.destroy(),this.options.wrapper.removeEventListener("scroll",this.onNativeScroll),this.options.wrapper.removeEventListener("scrollend",this.onScrollEnd,{capture:!0}),this.options.wrapper.removeEventListener("pointerdown",this.onPointerDown),(this.options.anchors||this.options.stopInertiaOnNavigate)&&this.options.wrapper.removeEventListener("click",this.onClick),this.virtualScroll.destroy(),this.dimensions.destroy(),this.cleanUpClassName(),this._rafId&&cancelAnimationFrame(this._rafId)}on(e,t){return this.emitter.on(e,t)}off(e,t){return this.emitter.off(e,t)}onScrollEnd=e=>{e instanceof CustomEvent||(this.isScrolling==="smooth"||this.isScrolling===!1)&&e.stopPropagation()};dispatchScrollendEvent=()=>{this.options.wrapper.dispatchEvent(new CustomEvent("scrollend",{bubbles:this.options.wrapper===window,detail:{lenisScrollEnd:!0}}))};get overflow(){const e=this.isHorizontal?"overflow-x":"overflow-y";return getComputedStyle(this.rootElement)[e]}checkOverflow(){["hidden","clip"].includes(this.overflow)?this.internalStop():this.internalStart()}onTransitionEnd=e=>{e.propertyName?.includes("overflow")&&e.target===this.rootElement&&this.checkOverflow()};setScroll(e){this.isHorizontal?this.options.wrapper.scrollTo({left:e,behavior:"instant"}):this.options.wrapper.scrollTo({top:e,behavior:"instant"})}onClick=e=>{const t=e.composedPath().filter(n=>n instanceof HTMLAnchorElement&&n.href).map(n=>new URL(n.href)),i=new URL(window.location.href);if(this.options.anchors){const n=t.find(r=>i.host===r.host&&i.pathname===r.pathname&&r.hash);if(n){const r=typeof this.options.anchors=="object"&&this.options.anchors?this.options.anchors:void 0,a=`#${n.hash.split("#")[1]}`;this.scrollTo(a,r);return}}if(this.options.stopInertiaOnNavigate&&t.some(n=>i.host===n.host&&i.pathname!==n.pathname)){this.reset();return}};onPointerDown=e=>{e.button===1&&this.reset()};onVirtualScroll=e=>{if(typeof this.options.virtualScroll=="function"&&this.options.virtualScroll(e)===!1)return;const{deltaX:t,deltaY:i,event:n}=e;if(this.emitter.emit("virtual-scroll",{deltaX:t,deltaY:i,event:n}),n.ctrlKey||n.lenisStopPropagation)return;const r=n.type.includes("touch"),a=n.type.includes("wheel");this.isTouching=n.type==="touchstart"||n.type==="touchmove";const o=t===0&&i===0;if(this.options.syncTouch&&r&&n.type==="touchstart"&&o&&!this.isStopped&&!this.isLocked){this.reset();return}const h=this.options.gestureOrientation==="vertical"&&i===0||this.options.gestureOrientation==="horizontal"&&t===0;if(o||h)return;let l=n.composedPath();l=l.slice(0,l.indexOf(this.rootElement));const d=this.options.prevent,p=Math.abs(t)>=Math.abs(i)?"horizontal":"vertical";if(l.find(u=>u instanceof HTMLElement&&(typeof d=="function"&&d?.(u)||u.hasAttribute?.("data-lenis-prevent")||p==="vertical"&&u.hasAttribute?.("data-lenis-prevent-vertical")||p==="horizontal"&&u.hasAttribute?.("data-lenis-prevent-horizontal")||r&&u.hasAttribute?.("data-lenis-prevent-touch")||a&&u.hasAttribute?.("data-lenis-prevent-wheel")||this.options.allowNestedScroll&&this.hasNestedScroll(u,{deltaX:t,deltaY:i}))))return;if(this.isStopped||this.isLocked){n.cancelable&&n.preventDefault();return}if(!(this.options.syncTouch&&r||this.options.smoothWheel&&a)){this.isScrolling="native",this.animate.stop(),n.lenisStopPropagation=!0;return}let m=i;this.options.gestureOrientation==="both"?m=Math.abs(i)>Math.abs(t)?i:t:this.options.gestureOrientation==="horizontal"&&(m=t),(!this.options.overscroll||this.options.infinite||this.options.wrapper!==window&&this.limit>0&&(this.animatedScroll>0&&this.animatedScroll<this.limit||this.animatedScroll===0&&i>0||this.animatedScroll===this.limit&&i<0))&&(n.lenisStopPropagation=!0),n.cancelable&&n.preventDefault();const c=r&&this.options.syncTouch,g=r&&n.type==="touchend";g&&(m=Math.sign(m)*Math.abs(this.velocity)**this.options.touchInertiaExponent),this.scrollTo(this.targetScroll+m,{programmatic:!1,...c?{lerp:g?this.options.syncTouchLerp:1}:{lerp:this.options.lerp,duration:this.options.duration,easing:this.options.easing}})};resize(){this.dimensions.resize(),this.animatedScroll=this.targetScroll=this.actualScroll,this.emit()}emit(){this.emitter.emit("scroll",this)}onNativeScroll=()=>{if(this._resetVelocityTimeout!==null&&(clearTimeout(this._resetVelocityTimeout),this._resetVelocityTimeout=null),this._preventNextNativeScrollEvent){this._preventNextNativeScrollEvent=!1;return}if(this.isScrolling===!1||this.isScrolling==="native"){const e=this.animatedScroll;this.animatedScroll=this.targetScroll=this.actualScroll,this.lastVelocity=this.velocity,this.velocity=this.animatedScroll-e,this.direction=Math.sign(this.animatedScroll-e),this.isStopped||(this.isScrolling="native"),this.emit(),this.velocity!==0&&(this._resetVelocityTimeout=setTimeout(()=>{this.lastVelocity=this.velocity,this.velocity=0,this.isScrolling=!1,this.emit()},400))}};reset(){this.isLocked=!1,this.isScrolling=!1,this.animatedScroll=this.targetScroll=this.actualScroll,this.lastVelocity=this.velocity=0,this.animate.stop()}start(){if(this.isStopped){if(this.options.autoToggle){this.rootElement.style.removeProperty("overflow");return}this.internalStart()}}internalStart(){this.isStopped&&(this.reset(),this.isStopped=!1,this.emit())}stop(){if(!this.isStopped){if(this.options.autoToggle){this.rootElement.style.setProperty("overflow","clip");return}this.internalStop()}}internalStop(){this.isStopped||(this.reset(),this.isStopped=!0,this.emit())}raf=e=>{const t=e-(this.time||e);this.time=e,this.animate.advance(t*.001),this.options.autoRaf&&(this._rafId=requestAnimationFrame(this.raf))};scrollTo(e,{offset:t=0,immediate:i=!1,lock:n=!1,programmatic:r=!0,lerp:a=r?this.options.lerp:void 0,duration:o=r?this.options.duration:void 0,easing:h=r?this.options.easing:void 0,onStart:l,onComplete:d,force:p=!1,userData:m}={}){if((this.isStopped||this.isLocked)&&!p)return;let c=e,g=t;if(typeof c=="string"&&["top","left","start","#"].includes(c))c=0;else if(typeof c=="string"&&["bottom","right","end"].includes(c))c=this.limit;else{let u=null;if(typeof c=="string"?(u=document.querySelector(c),u||(c==="#top"?c=0:console.warn("Lenis: Target not found",c))):c instanceof HTMLElement&&c?.nodeType&&(u=c),u){if(this.options.wrapper!==window){const N=this.rootElement.getBoundingClientRect();g-=this.isHorizontal?N.left:N.top}const v=u.getBoundingClientRect(),y=getComputedStyle(u),b=this.isHorizontal?Number.parseFloat(y.scrollMarginLeft):Number.parseFloat(y.scrollMarginTop),j=getComputedStyle(this.rootElement),S=this.isHorizontal?Number.parseFloat(j.scrollPaddingLeft):Number.parseFloat(j.scrollPaddingTop);c=(this.isHorizontal?v.left:v.top)+this.animatedScroll-(Number.isNaN(b)?0:b)-(Number.isNaN(S)?0:S)}}if(typeof c=="number"){if(c+=g,this.options.infinite){if(r){this.targetScroll=this.animatedScroll=this.scroll;const u=c-this.animatedScroll;u>this.limit/2?c-=this.limit:u<-this.limit/2&&(c+=this.limit)}}else c=je(0,c,this.limit);if(c===this.targetScroll){l?.(this),d?.(this);return}if(this.userData=m??{},i){this.animatedScroll=this.targetScroll=c,this.setScroll(this.scroll),this.reset(),this.preventNextNativeScrollEvent(),this.emit(),d?.(this),this.userData={},requestAnimationFrame(()=>{this.dispatchScrollendEvent()});return}r||(this.targetScroll=c),typeof o=="number"&&typeof h!="function"?h=de:typeof h=="function"&&typeof o!="number"&&(o=1),this.animate.fromTo(this.animatedScroll,c,{duration:o,easing:h,lerp:a,onStart:()=>{n&&(this.isLocked=!0),this.isScrolling="smooth",l?.(this)},onUpdate:(u,v)=>{this.isScrolling="smooth",this.lastVelocity=this.velocity,this.velocity=u-this.animatedScroll,this.direction=Math.sign(this.velocity),this.animatedScroll=u,this.setScroll(this.scroll),r&&(this.targetScroll=u),v||this.emit(),v&&(this.reset(),this.emit(),d?.(this),this.userData={},requestAnimationFrame(()=>{this.dispatchScrollendEvent()}),this.preventNextNativeScrollEvent())}})}}preventNextNativeScrollEvent(){this._preventNextNativeScrollEvent=!0,requestAnimationFrame(()=>{this._preventNextNativeScrollEvent=!1})}hasNestedScroll(e,{deltaX:t,deltaY:i}){const n=Date.now();e._lenis||(e._lenis={});const r=e._lenis;let a,o,h,l,d,p,m,c,g,u;if(n-(r.time??0)>2e3){r.time=Date.now();const O=window.getComputedStyle(e);if(r.computedStyle=O,a=["auto","overlay","scroll"].includes(O.overflowX),o=["auto","overlay","scroll"].includes(O.overflowY),d=["auto"].includes(O.overscrollBehaviorX),p=["auto"].includes(O.overscrollBehaviorY),r.hasOverflowX=a,r.hasOverflowY=o,!(a||o))return!1;m=e.scrollWidth,c=e.scrollHeight,g=e.clientWidth,u=e.clientHeight,h=m>g,l=c>u,r.isScrollableX=h,r.isScrollableY=l,r.scrollWidth=m,r.scrollHeight=c,r.clientWidth=g,r.clientHeight=u,r.hasOverscrollBehaviorX=d,r.hasOverscrollBehaviorY=p}else h=r.isScrollableX,l=r.isScrollableY,a=r.hasOverflowX,o=r.hasOverflowY,m=r.scrollWidth,c=r.scrollHeight,g=r.clientWidth,u=r.clientHeight,d=r.hasOverscrollBehaviorX,p=r.hasOverscrollBehaviorY;if(!(a&&h||o&&l))return!1;const v=Math.abs(t)>=Math.abs(i)?"horizontal":"vertical";let y,b,j,S,N,T;if(v==="horizontal")y=Math.round(e.scrollLeft),b=m-g,j=t,S=a,N=h,T=d;else if(v==="vertical")y=Math.round(e.scrollTop),b=c-u,j=i,S=o,N=l,T=p;else return!1;return!T&&(y>=b||y<=0)?!0:(j>0?y<b:y>0)&&S&&N}get rootElement(){return this.options.wrapper===window?document.documentElement:this.options.wrapper}get limit(){return this.options.naiveDimensions?this.isHorizontal?this.rootElement.scrollWidth-this.rootElement.clientWidth:this.rootElement.scrollHeight-this.rootElement.clientHeight:this.dimensions.limit[this.isHorizontal?"x":"y"]}get isHorizontal(){return this.options.orientation==="horizontal"}get actualScroll(){const e=this.options.wrapper;return this.isHorizontal?e.scrollX??e.scrollLeft:e.scrollY??e.scrollTop}get scroll(){return this.options.infinite?Pt(this.animatedScroll,this.limit):this.animatedScroll}get progress(){return this.limit===0?1:this.scroll/this.limit}get isScrolling(){return this._isScrolling}set isScrolling(e){this._isScrolling!==e&&(this._isScrolling=e,this.updateClassName())}get isStopped(){return this._isStopped}set isStopped(e){this._isStopped!==e&&(this._isStopped=e,this.updateClassName())}get isLocked(){return this._isLocked}set isLocked(e){this._isLocked!==e&&(this._isLocked=e,this.updateClassName())}get isSmooth(){return this.isScrolling==="smooth"}get className(){let e="lenis";return this.options.autoToggle&&(e+=" lenis-autoToggle"),this.isStopped&&(e+=" lenis-stopped"),this.isLocked&&(e+=" lenis-locked"),this.isScrolling&&(e+=" lenis-scrolling"),this.isScrolling==="smooth"&&(e+=" lenis-smooth"),e}updateClassName(){this.cleanUpClassName(),this.className.split(" ").forEach(e=>{this.rootElement.classList.add(e)})}cleanUpClassName(){for(const e of Array.from(this.rootElement.classList))(e==="lenis"||e.startsWith("lenis-"))&&this.rootElement.classList.remove(e)}};const Ft=[{label:"特性",href:"#features"},{label:"常见问题",href:"#faq"},{label:"下载",href:"#download"}];function Dt(){return s.jsx("header",{className:"fixed top-0 z-50 w-full border-b border-te-gray/30 bg-te-bg/80 backdrop-blur-sm",children:s.jsxs("div",{className:"mx-auto flex h-14 max-w-7xl items-center justify-between px-[4vw]",children:[s.jsxs("a",{href:"#top",className:"flex items-center gap-2 font-mono text-sm font-bold tracking-tighter text-te-fg transition-colors hover:text-te-accent",children:[s.jsx("img",{src:"/logo-write.png",alt:"OpenSpeech",className:"h-5 w-auto"}),s.jsx("span",{children:"OpenSpeech"})]}),s.jsx("nav",{className:"hidden items-center gap-6 md:flex",children:Ft.map(e=>s.jsx("a",{href:e.href,className:"font-mono text-xs uppercase tracking-[0.1em] text-te-light-gray transition-colors hover:text-te-accent",children:e.label},e.href))}),s.jsx("a",{href:"https://github.com/OpenLoaf/OpenSpeech",target:"_blank",rel:"noreferrer",className:"border border-te-gray/40 px-4 py-1.5 font-mono text-xs uppercase tracking-[0.1em] text-te-fg transition-colors hover:border-te-accent hover:text-te-accent",children:"GitHub"})]})})}function Bt(){return s.jsx("footer",{className:"border-t border-te-gray/30 bg-te-bg px-[4vw] py-8",children:s.jsxs("div",{className:"mx-auto flex max-w-7xl flex-col items-center justify-between gap-4 md:flex-row",children:[s.jsxs("div",{className:"flex items-center gap-3 font-mono text-xs text-te-light-gray/60",children:[s.jsx("img",{src:"/logo-write.png",alt:"OpenSpeech",className:"h-5 w-5 opacity-70"}),s.jsx("span",{children:"© 2026 OpenSpeech · 源码公开(PolyForm Noncommercial)"})]}),s.jsxs("nav",{className:"flex items-center gap-6 font-mono text-xs uppercase tracking-[0.15em] text-te-light-gray/60",children:[s.jsx("a",{className:"transition-colors hover:text-te-accent",href:"https://github.com/OpenLoaf/OpenSpeech",target:"_blank",rel:"noreferrer",children:"GitHub"}),s.jsx("a",{className:"transition-colors hover:text-te-accent",href:"https://github.com/OpenLoaf/OpenSpeech/releases",target:"_blank",rel:"noreferrer",children:"版本"}),s.jsx("a",{className:"transition-colors hover:text-te-accent",href:"#faq",children:"常见问题"}),s.jsx("a",{className:"transition-colors hover:text-te-accent",href:"https://github.com/OpenLoaf/OpenSpeech/blob/main/LICENSE",target:"_blank",rel:"noreferrer",children:"License"})]}),s.jsxs("div",{className:"flex items-center gap-2 font-mono text-xs text-te-light-gray/60",children:[s.jsx(f.span,{className:"size-1.5 rounded-full bg-te-accent",animate:{opacity:[1,.3,1]},transition:{duration:2,repeat:1/0}}),s.jsx("span",{className:"uppercase tracking-[0.15em]",children:"v0.2.24"})]})]})})}function Vt(){const e=G()??!1;return s.jsxs("div",{className:"absolute inset-0 overflow-hidden bg-te-bg",children:[s.jsx("div",{className:"pointer-events-none absolute inset-0 opacity-[0.5]",style:{backgroundImage:"linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px)",backgroundSize:"72px 72px",maskImage:"radial-gradient(ellipse 90% 70% at 50% 40%, #000 30%, transparent 85%)",WebkitMaskImage:"radial-gradient(ellipse 90% 70% at 50% 40%, #000 30%, transparent 85%)"}}),s.jsx(f.div,{className:"absolute left-1/2 top-[20%] h-[80vh] w-[110vh] -translate-x-1/2 rounded-full",style:{background:"radial-gradient(ellipse, rgba(255,204,0,0.14) 0%, transparent 65%)",filter:"blur(90px)"},initial:{opacity:0},animate:e?{opacity:.9}:{opacity:[.6,1,.6]},transition:{duration:11,repeat:1/0,ease:"easeInOut"}}),s.jsx("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 h-[35%]",style:{background:"linear-gradient(to top, var(--te-bg) 0%, transparent 100%)"}})]})}const I={"zh-CN":{raw:[{text:"嗯,",kind:"filler"},{text:"我们这周要做三件事",kind:"keep"},{text:"啊",kind:"filler"},{text:"。第一个,",kind:"keep"},{text:"呃,",kind:"filler"},{text:"把",kind:"keep"},{text:"那个",kind:"filler"},{text:"登录页面…不对不对,是",kind:"correction"},{text:"注册页面修一下",kind:"keep"},{text:"。然后",kind:"keep"},{text:"呢",kind:"filler"},{text:",把数据库迁移搞完",kind:"keep"},{text:"。最后,把测试覆盖率提到 80% 以上。",kind:"keep"}],polishedHeader:"本周任务 · 共 3 项",polishedList:["修改注册页面","完成数据库迁移","测试覆盖率提升至 80% 以上"],scratchPath:"~/scratch.md",scratchFooterPrompt:"输入 · 按一下快捷键开始 · 再按一下结束",charsUnit:"字",liveLabel:"实时",waiting:"// 等待按键",listening:"// 正在听..."},en:{raw:[{text:"Um, ",kind:"filler"},{text:"we've got three things to ship this week",kind:"keep"},{text:", uh",kind:"filler"},{text:". First, ",kind:"keep"},{text:"uh, ",kind:"filler"},{text:"fix the ",kind:"keep"},{text:"you know, ",kind:"filler"},{text:"login page... wait no, the ",kind:"correction"},{text:"signup page",kind:"keep"},{text:". Then ",kind:"keep"},{text:"well, ",kind:"filler"},{text:"finish the database migration",kind:"keep"},{text:". Finally, lift test coverage above 80%.",kind:"keep"}],polishedHeader:"This week · 3 items",polishedList:["Fix the signup page","Finish the database migration","Lift test coverage above 80%"],scratchPath:"~/scratch.md",scratchFooterPrompt:"input · press hotkey to start · press again to stop",charsUnit:"chars",liveLabel:"live",waiting:"// awaiting hotkey",listening:"// listening..."},"zh-TW":{raw:[{text:"嗯,",kind:"filler"},{text:"我們這週要做三件事",kind:"keep"},{text:"啊",kind:"filler"},{text:"。第一個,",kind:"keep"},{text:"呃,",kind:"filler"},{text:"把",kind:"keep"},{text:"那個",kind:"filler"},{text:"登入頁面…不對不對,是",kind:"correction"},{text:"註冊頁面修一下",kind:"keep"},{text:"。然後",kind:"keep"},{text:"呢",kind:"filler"},{text:",把資料庫遷移搞完",kind:"keep"},{text:"。最後,把測試覆蓋率提到 80% 以上。",kind:"keep"}],polishedHeader:"本週任務 · 共 3 項",polishedList:["修改註冊頁面","完成資料庫遷移","測試覆蓋率提升至 80% 以上"],scratchPath:"~/scratch.md",scratchFooterPrompt:"輸入 · 按一下快捷鍵開始 · 再按一下結束",charsUnit:"字",liveLabel:"即時",waiting:"// 等待按鍵",listening:"// 正在聽..."}};function K(){return x.useMemo(()=>{if(typeof window>"u")return I["zh-CN"];const e=new URLSearchParams(window.location.search).get("lang");return e==="en"?I.en:e==="zh-TW"||e==="zhTW"||e==="tw"?I["zh-TW"]:I["zh-CN"]},[])}const Ne={idle:1e3,recording:1500,transcribing:2400,polishing:1500,injecting:2200},Xt={idle:"recording",recording:"transcribing",transcribing:"polishing",polishing:"injecting",injecting:"idle"};function Yt(e){const[t,i]=x.useState("idle"),n=G();return x.useEffect(()=>{if(!e||n)return;const r=setTimeout(()=>i(Xt[t]),Ne[t]);return()=>clearTimeout(r)},[t,e,n]),x.useEffect(()=>{n&&i("injecting")},[n]),t}const $t={idle:"// 待机",recording:"// 收音中",transcribing:"// 转写中",polishing:"// 清洗中",injecting:"// 注入中"};function Ut({stage:e}){const t=K(),i=x.useMemo(()=>t.raw.map(a=>a.text).join(""),[t]),n=e==="injecting"?t.polishedList.join("").length+t.polishedHeader.length:e==="polishing"?i.length:0,r=e==="recording"||e==="transcribing";return s.jsx("div",{className:"border border-te-gray/30 p-px",children:s.jsxs("div",{className:"flex flex-col bg-te-surface",children:[s.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-te-gray/30 px-5 py-3",children:[s.jsxs("div",{className:"flex items-center gap-2 font-mono text-[11px] uppercase tracking-[0.25em] text-te-light-gray/70",children:[s.jsx("span",{className:"text-te-accent",children:"▍"}),s.jsx("span",{children:t.scratchPath})]}),s.jsx("span",{className:"font-mono text-[11px] uppercase tracking-[0.25em] text-te-accent",children:$t[e]})]}),s.jsx("div",{className:"px-8 py-7 md:px-12 md:py-9",children:s.jsx(qt,{stage:e})}),s.jsxs("div",{className:"flex items-center justify-between gap-3 border-t border-te-gray/30 px-5 py-2.5 font-mono text-[10px] uppercase tracking-[0.25em] text-te-light-gray/40",children:[s.jsx("span",{children:t.scratchFooterPrompt}),s.jsx("span",{className:"flex items-center gap-2",children:r?s.jsxs(s.Fragment,{children:[s.jsx(f.span,{className:"size-1.5 rounded-full bg-te-accent",animate:{opacity:[1,.3,1]},transition:{duration:1.4,repeat:1/0}}),t.liveLabel]}):s.jsxs("span",{children:[n," ",t.charsUnit]})})]})]})})}function qt({stage:e}){const t=e==="injecting";return s.jsx("div",{className:"relative h-[11rem]",children:s.jsxs(U,{mode:"wait",initial:!1,children:[!t&&s.jsx(f.div,{initial:{opacity:1},animate:{opacity:1},exit:{opacity:0,y:-6},transition:{duration:.35,ease:"easeOut"},children:s.jsx(Gt,{stage:e})},"raw"),t&&s.jsx(f.div,{initial:{opacity:0,y:8},animate:{opacity:1,y:0},exit:{opacity:0},transition:{duration:.5,ease:"easeOut",delay:.1},children:s.jsx(Kt,{})},"list")]})})}function Gt({stage:e}){const t=K(),i=x.useMemo(()=>t.raw.map(l=>l.text).join(""),[t]),[n,r]=x.useState(0),a=G();x.useEffect(()=>{if(e==="transcribing"){r(0);const l=i.length,d=Math.max(28,Math.floor(Ne.transcribing/l)),p=setInterval(()=>{r(m=>m>=l?(clearInterval(p),m):m+1)},d);return()=>clearInterval(p)}e==="polishing"&&r(i.length),(e==="idle"||e==="recording")&&r(0)},[e,i]),x.useEffect(()=>{a&&r(i.length)},[a,i]);const o=e==="recording"||e==="transcribing";if(e==="idle"||e==="recording")return s.jsxs("div",{className:"flex min-h-[1.6em] items-baseline",children:[s.jsx("span",{className:"font-mono text-sm text-te-light-gray/40",children:e==="recording"?t.listening:t.waiting}),s.jsx(f.span,{className:"ml-0.5 inline-block h-[1em] w-[2px] translate-y-[0.15em] bg-te-accent",animate:e==="recording"?{opacity:[1,.2,1]}:{opacity:.3},transition:{repeat:e==="recording"?1/0:0,duration:1,ease:"easeInOut"}})]});let h=0;return s.jsxs("div",{className:"text-lg leading-relaxed text-te-fg md:text-xl",children:[t.raw.map((l,d)=>{const p=h;h=p+l.text.length;const m=Math.max(0,Math.min(l.text.length,n-p));if(m===0)return null;const c=l.text.slice(0,m),g=e==="polishing"&&l.kind!=="keep";return s.jsx(f.span,{className:"inline align-baseline transition-colors",animate:{opacity:g?.45:1,color:g?l.kind==="correction"?"var(--te-accent)":"var(--te-light-gray)":"var(--te-fg)"},transition:{duration:.35},style:g?{textDecoration:"line-through"}:void 0,children:c},d)}),o&&s.jsx(f.span,{className:"ml-0.5 inline-block h-[1em] w-[2px] translate-y-[0.15em] bg-te-accent",animate:{opacity:[1,.2,1]},transition:{repeat:1/0,duration:1,ease:"easeInOut"}})]})}function Kt(){const e=K();return s.jsxs("div",{className:"flex flex-col gap-3 text-lg leading-relaxed text-te-fg md:text-xl",children:[s.jsx("div",{className:"font-mono text-lg text-te-accent md:text-xl",children:e.polishedHeader}),s.jsx("ol",{className:"flex flex-col gap-2",children:e.polishedList.map((t,i)=>s.jsxs(f.li,{className:"flex items-baseline gap-3",initial:{opacity:0,x:-6},animate:{opacity:1,x:0},transition:{duration:.35,delay:.15+i*.08},children:[s.jsxs("span",{className:"font-mono text-base text-te-accent md:text-lg",children:[i+1,"."]}),s.jsx("span",{children:t})]},t))})]})}function Qt(e){return e==="macos"?[{label:"Fn"},{glyph:"⌃",label:"Ctrl"}]:e==="windows"?[{label:"Alt"},{glyph:s.jsx(Ge,{size:13}),label:"Win"}]:[{glyph:"⌃",label:"Ctrl"},{glyph:s.jsx(Ke,{size:11,strokeWidth:2.5}),label:"Super"}]}function Jt({stage:e}){const t=x.useMemo(()=>$e(),[]),i=x.useMemo(()=>Qt(t),[t]),n=e==="recording";return s.jsx("div",{className:"flex h-[52px] items-center gap-2",children:i.map((r,a)=>s.jsxs(x.Fragment,{children:[a>0&&s.jsx("span",{className:"font-mono text-base text-te-light-gray/60",children:"+"}),s.jsx(Zt,{pressed:n,glyph:r.glyph,label:r.label})]},r.label))})}function Zt({pressed:e,glyph:t,label:i}){return s.jsxs(f.span,{animate:{y:e?2:0,scale:e?.97:1},transition:{duration:.12,ease:"easeOut"},className:"inline-flex h-[52px] min-w-[64px] items-center justify-center gap-1.5 border px-3 font-mono text-xs uppercase tracking-[0.15em] transition-colors "+(e?"border-te-accent bg-te-accent/15 text-te-accent shadow-[inset_0_-3px_0_0_var(--te-accent)]":"border-te-gray bg-te-bg text-te-fg shadow-[inset_0_-3px_0_0_var(--te-gray)]"),children:[t&&s.jsx("span",{className:"opacity-80",children:t}),s.jsx("span",{children:i})]})}function ei({stage:e}){const t=e==="recording",i=e==="recording";return s.jsxs("div",{className:"flex h-[52px] w-[340px] max-w-full items-center gap-2 border border-te-gray bg-te-bg px-2",children:[s.jsx("button",{type:"button",disabled:!i,"aria-label":"cancel",className:i?"flex size-9 shrink-0 items-center justify-center border border-te-gray text-te-fg transition-colors hover:border-te-accent hover:text-te-accent":"flex size-9 shrink-0 items-center justify-center border border-te-gray/40 text-te-light-gray/40",children:s.jsx(Ue,{className:"size-4"})}),s.jsx("div",{className:"flex min-w-0 flex-1 items-center justify-center",children:s.jsxs(U,{mode:"wait",initial:!1,children:[e==="recording"&&s.jsx(f.div,{className:"flex h-full w-full items-center justify-center",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.12},children:s.jsx(ti,{})},"wave"),e==="transcribing"&&s.jsx(V,{label:"// 转写中"},"transcribing"),e==="polishing"&&s.jsx(V,{label:"// 清洗中"},"polishing"),e==="injecting"&&s.jsx(V,{label:"// 注入中"},"injecting"),e==="idle"&&s.jsx(f.div,{className:"flex h-full w-full items-center justify-center",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.12},children:s.jsx("span",{className:"font-mono text-[11px] uppercase tracking-[0.15em] text-te-light-gray/50",children:"// 待机"})},"idle")]})}),s.jsx("button",{type:"button",disabled:!t,"aria-label":"confirm",className:t?"flex size-9 shrink-0 items-center justify-center border border-te-accent text-te-accent transition-colors hover:bg-te-accent hover:text-te-accent-fg":"flex size-9 shrink-0 items-center justify-center border border-te-gray/40 text-te-light-gray/40",children:s.jsx(qe,{className:"size-4"})})]})}function V({label:e}){return s.jsxs(f.div,{className:"flex h-full w-full flex-col items-center justify-center gap-1.5 px-2",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.12},children:[s.jsx("span",{className:"font-mono text-[11px] uppercase tracking-[0.15em] text-te-fg",children:e}),s.jsx(ii,{})]})}function ti(){return s.jsx("div",{className:"flex h-9 w-full items-center gap-[2px]",children:Array.from({length:36}).map((t,i)=>{const n=Math.abs(Math.sin(i*.7))*.7+.3;return s.jsx(f.span,{className:"block flex-1 rounded-[1px] bg-te-accent",style:{height:"100%",originY:.5},animate:{scaleY:[n*.3,n*1,n*.5,n*.85,n*.4]},transition:{repeat:1/0,duration:.7+i%5*.1,ease:"easeInOut",delay:i%7*.04}},i)})})}function ii(){return s.jsx("div",{className:"relative h-px w-24 overflow-hidden bg-te-gray/40",children:s.jsx(f.span,{className:"absolute inset-y-0 bg-te-accent",style:{width:"33%"},initial:{left:"-33%"},animate:{left:"100%"},transition:{repeat:1/0,duration:1.1,ease:"linear"}})})}const X={hidden:{opacity:0,y:24},visible:e=>({opacity:1,y:0,transition:{duration:.75,delay:.1+e*.12,ease:[.25,.4,.25,1]}})};function si(){const[e]=x.useState(!0),t=Yt(e);return s.jsxs("section",{"data-promo-section":!0,className:"relative flex min-h-screen w-full flex-col items-center justify-center overflow-hidden pt-24 pb-12",children:[s.jsx(Vt,{}),s.jsxs("div",{className:"relative z-10 mx-auto flex w-full max-w-6xl flex-col items-center gap-6 px-[4vw] text-center",children:[s.jsxs(f.h1,{custom:0,variants:X,initial:"hidden",animate:"visible",className:"whitespace-nowrap font-mono font-bold leading-[1] tracking-tighter text-[clamp(1.5rem,4.2vw,3.25rem)]",children:[s.jsx("span",{className:"bg-gradient-to-b from-te-fg to-te-fg/70 bg-clip-text text-transparent",children:"Open"}),s.jsxs("span",{className:"relative bg-gradient-to-r from-te-accent to-te-accent/80 bg-clip-text text-transparent",children:["Speech",s.jsx("span",{className:"absolute -inset-1 -z-10 blur-2xl bg-te-accent/30"})]}),s.jsx("span",{className:"mx-3 text-te-light-gray/40",children:"/"}),s.jsx("span",{className:"bg-gradient-to-b from-te-fg to-te-fg/70 bg-clip-text text-transparent",children:"动嘴说,让"}),s.jsxs("span",{className:"relative bg-gradient-to-r from-te-accent to-te-accent/80 bg-clip-text text-transparent",children:["键盘",s.jsx("span",{className:"absolute -inset-1 -z-10 blur-2xl bg-te-accent/30"})]}),s.jsx("span",{className:"bg-gradient-to-b from-te-fg to-te-fg/70 bg-clip-text text-transparent",children:"休息。"})]}),s.jsx(f.p,{custom:1,variants:X,initial:"hidden",animate:"visible",className:"max-w-xl text-balance text-sm leading-relaxed text-te-light-gray/70 md:text-base",children:"按下快捷键说话,AI 自动转写、清洗口误、注入到任意应用。"}),s.jsxs(f.div,{custom:2,variants:X,initial:"hidden",animate:"visible",className:"relative mt-2 w-full max-w-3xl",children:[s.jsx("div",{className:"absolute -inset-x-12 -inset-y-8 -z-10 opacity-70",style:{background:"radial-gradient(ellipse 60% 50% at 50% 50%, rgba(255,204,0,0.18), transparent 70%)",filter:"blur(40px)"}}),s.jsx("div",{className:"border border-te-gray/40 bg-te-bg/60 p-px shadow-[0_30px_120px_-20px_rgba(255,204,0,0.18)] backdrop-blur-sm",children:s.jsx(Ut,{stage:t})}),s.jsxs("div",{className:"mt-6 flex flex-wrap items-center justify-center gap-4",children:[s.jsx(Jt,{stage:t}),s.jsx(ei,{stage:t})]})]})]}),s.jsxs(f.a,{href:"#download",initial:{opacity:0,y:16},animate:{opacity:1,y:0},transition:{duration:.7,delay:.7,ease:[.25,.4,.25,1]},className:"group absolute bottom-8 left-1/2 z-20 inline-flex -translate-x-1/2 flex-col items-center gap-2",children:[s.jsxs("span",{className:"inline-flex items-center gap-2.5 border border-te-gray/50 bg-te-bg/30 px-6 py-2 font-mono text-[11px] uppercase tracking-[0.25em] text-te-fg/70 backdrop-blur-md transition-colors group-hover:border-te-accent group-hover:text-te-accent",children:["免费下载",s.jsx("span",{className:"text-te-light-gray/50 group-hover:text-te-accent/70",children:"macOS · Windows · Linux"})]}),s.jsx(f.span,{"aria-hidden":!0,animate:{y:[0,5,0]},transition:{duration:1.8,repeat:1/0,ease:"easeInOut"},className:"font-mono text-sm text-te-light-gray/40 group-hover:text-te-accent",children:"↓"})]}),s.jsx("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 z-[5] h-32 bg-gradient-to-t from-te-bg to-transparent"})]})}const ni=[{icon:Qe,meta:"AI · Polish",title:"AI 自动清洗口误",body:"「嗯…那个…」「啊…对…」自我纠错全部抹平,再按你想要的风格——结构化清单、邮件、技术文档——重排输出。",span:"md:col-span-3 md:row-span-2",accent:!0},{icon:lt,meta:"Privacy",title:"本地优先 · 零追踪",body:"音频帧只发到你配置的 ASR endpoint,OpenSpeech 不存任何录音、不做任何埋点。",span:"md:col-span-3 md:row-span-1"},{icon:Je,meta:"Hotkey",title:"全局快捷键",body:"Fn+Ctrl / Alt+Win / Ctrl+Super 默认绑定,可改任意单键 PTT 或修饰键双击。",span:"md:col-span-3 md:row-span-1"},{icon:nt,meta:"ASR",title:"任意 ASR 后端",body:"OpenAI Whisper、Deepgram、火山引擎、阿里云 NLS、自部署 whisper.cpp / sherpa-onnx——只要给个 endpoint。",span:"md:col-span-2 md:row-span-1"},{icon:at,meta:"Cross-Platform",title:"全平台",body:"macOS · Windows · Linux 同一份 Tauri bundle,原生体感。",span:"md:col-span-2 md:row-span-1"},{icon:Ze,meta:"History",title:"可撤销历史",body:"最近 N 条注入历史,一键撤销 / 复制 / 重新转写。",span:"md:col-span-2 md:row-span-1"}];function ri(){return s.jsxs("section",{id:"features","data-promo-section":!0,className:"relative bg-te-bg px-[4vw] py-[clamp(5rem,11vw,9rem)]",children:[s.jsx("div",{className:"pointer-events-none absolute inset-0 opacity-[0.4]",style:{backgroundImage:"linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px)",backgroundSize:"80px 80px",maskImage:"radial-gradient(ellipse 80% 60% at 50% 50%, #000 30%, transparent 90%)",WebkitMaskImage:"radial-gradient(ellipse 80% 60% at 50% 50%, #000 30%, transparent 90%)"}}),s.jsxs("div",{className:"relative mx-auto max-w-6xl",children:[s.jsxs(f.div,{className:"mb-14 flex flex-col gap-6 border-b border-te-gray/30 pb-8 md:mb-20 md:flex-row md:items-end md:justify-between",initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.6},children:[s.jsxs("div",{className:"flex flex-col gap-3",children:[s.jsx("span",{className:"font-mono text-xs uppercase tracking-[0.3em] text-te-light-gray/50",children:"[03] · Features"}),s.jsxs("h2",{className:"max-w-2xl font-mono text-3xl font-bold leading-[1.05] tracking-tighter text-te-fg md:text-5xl",children:["不是又一个语音工具,",s.jsx("br",{}),s.jsx("span",{className:"text-te-accent",children:"是把说话变成生产力。"})]})]}),s.jsx("p",{className:"max-w-sm text-sm leading-relaxed text-te-light-gray/60 md:text-right",children:"围绕真实工作流设计——开会、写代码、写文档、记灵感——让说出来的话直接落到光标里成为可用的文本。"})]}),s.jsx("div",{className:"grid grid-cols-1 gap-3 md:auto-rows-[minmax(140px,auto)] md:grid-cols-6",children:ni.map((e,t)=>s.jsx(ai,{feature:e,index:t},e.title))})]})]})}function ai({feature:e,index:t}){const i=e.icon;return s.jsxs(f.article,{initial:{opacity:0,y:18},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-10% 0px"},transition:{duration:.5,delay:t*.07},className:"group relative flex flex-col justify-between gap-6 overflow-hidden border border-te-gray/30 bg-te-surface/40 p-6 transition-colors hover:border-te-accent/50 md:p-8 "+e.span,children:[e.accent&&s.jsx("div",{className:"pointer-events-none absolute inset-0 opacity-60",style:{background:"radial-gradient(ellipse 80% 60% at 100% 0%, rgba(255,204,0,0.10), transparent 70%)"}}),s.jsxs("div",{className:"absolute right-5 top-5 flex items-center gap-1.5 font-mono text-[10px] uppercase tracking-[0.25em] text-te-light-gray/40",children:[s.jsx("span",{className:"size-1 rounded-full bg-te-light-gray/50"}),e.meta]}),s.jsxs("div",{className:"relative flex size-12 items-center justify-center border border-te-gray/40 bg-te-bg/60 text-te-accent transition-colors group-hover:border-te-accent/60",children:[s.jsx(i,{className:"size-5",strokeWidth:1.6}),s.jsx("span",{className:"absolute -inset-px -z-10 bg-te-accent/0 blur-xl transition-colors group-hover:bg-te-accent/10"})]}),s.jsxs("div",{className:"relative flex flex-col gap-2",children:[s.jsx("h3",{className:"font-mono text-xl font-bold tracking-tight text-te-fg md:text-2xl",children:e.title}),s.jsx("p",{className:"text-sm leading-relaxed text-te-light-gray/65",children:e.body})]}),s.jsx("div",{className:"absolute bottom-0 left-0 h-px w-0 bg-te-accent transition-all duration-500 group-hover:w-full"})]})}const oi=[{question:"OpenSpeech 是免费的吗?",answer:"客户端源码公开、个人非商业使用免费,你只需自备一个 ASR 服务(OpenAI Whisper API、自部署 whisper、第三方实时 ASR 等都行)。商业用途请联系作者获取授权。"},{question:"支持哪些操作系统?",answer:"macOS(Apple Silicon + Intel)、Windows 10/11、Linux x86_64。三平台同一份 Tauri bundle。"},{question:"语音数据会被上传到 OpenSpeech 吗?",answer:"不会。音频帧只发送到你自己配置的 ASR endpoint。OpenSpeech 不存任何录音、不做日志埋点。"},{question:"支持哪些 ASR 模型?",answer:"任何 REST/Realtime ASR endpoint:OpenAI Whisper、Deepgram、火山引擎 ASR、阿里云 NLS、自部署 whisper.cpp、自部署 sherpa-onnx。"},{question:"怎么唤起?快捷键能改吗?",answer:"默认 macOS 是 Fn + Control,Windows 是 Alt + Win,Linux 是 Ctrl + Super,按一下开始、再按一下结束。在设置里可以改成任意全局快捷键组合、单键 PTT 或修饰键双击。"},{question:"转写错了能撤销吗?",answer:"可以。每次注入文字后会保留历史记录,最近 N 条可一键撤销/复制/重新转写。"}];function li(){const[e,t]=x.useState(null);return s.jsx("section",{id:"faq","data-promo-section":!0,className:"bg-te-bg px-[4vw] py-[clamp(4rem,10vw,8rem)]",children:s.jsxs("div",{className:"mx-auto max-w-3xl",children:[s.jsxs(f.div,{className:"mb-12 md:mb-16",initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.6},children:[s.jsx("div",{className:"mb-3 font-mono text-xs uppercase tracking-[0.3em] text-te-light-gray/50",children:"[03] · FAQ"}),s.jsx("h2",{className:"font-mono text-3xl font-bold leading-[1.05] tracking-tighter text-te-fg md:text-5xl",children:"常见问题"}),s.jsxs("p",{className:"mt-4 max-w-xl text-sm leading-relaxed text-te-light-gray/60",children:["没找到答案?打开"," ",s.jsx("a",{href:"https://github.com/OpenLoaf/OpenSpeech/issues",target:"_blank",rel:"noreferrer",className:"text-te-accent underline-offset-4 hover:underline",children:"GitHub Issues"})," ","提问。"]})]}),s.jsx("div",{className:"divide-y divide-te-gray/30",children:oi.map((i,n)=>{const r=e===n;return s.jsxs(f.div,{initial:{opacity:0,y:12},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.4,delay:n*.05},children:[s.jsxs("button",{type:"button",className:"group flex w-full items-center justify-between gap-4 py-5 text-left",onClick:()=>t(r?null:n),"aria-expanded":r,children:[s.jsx("span",{className:"font-mono text-sm font-bold tracking-tight text-te-fg/90 transition-colors group-hover:text-te-accent",children:i.question}),s.jsx(f.span,{className:"ml-4 shrink-0 font-mono text-lg leading-none text-te-light-gray",animate:{rotate:r?45:0},transition:{duration:.2},children:"+"})]}),s.jsx(U,{initial:!1,children:r&&s.jsx(f.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.3},className:"overflow-hidden",children:s.jsx("p",{className:"pb-5 pr-8 text-sm leading-relaxed text-te-light-gray/60",children:i.answer})},"content")})]},i.question)})})]})})}var ke={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},pe=E.createContext&&E.createContext(ke),ci=["attr","size","title"];function hi(e,t){if(e==null)return{};var i,n,r=di(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)i=a[n],t.indexOf(i)===-1&&{}.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}function di(e,t){if(e==null)return{};var i={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)!==-1)continue;i[n]=e[n]}return i}function C(){return C=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var n in i)({}).hasOwnProperty.call(i,n)&&(e[n]=i[n])}return e},C.apply(null,arguments)}function ue(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),i.push.apply(i,n)}return i}function H(e){for(var t=1;t<arguments.length;t++){var i=arguments[t]!=null?arguments[t]:{};t%2?ue(Object(i),!0).forEach(function(n){pi(e,n,i[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):ue(Object(i)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(i,n))})}return e}function pi(e,t,i){return(t=ui(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function ui(e){var t=mi(e,"string");return typeof t=="symbol"?t:t+""}function mi(e,t){if(typeof e!="object"||!e)return e;var i=e[Symbol.toPrimitive];if(i!==void 0){var n=i.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Ee(e){return e&&e.map((t,i)=>E.createElement(t.tag,H({key:i},t.attr),Ee(t.child)))}function D(e){return t=>E.createElement(fi,C({attr:H({},e.attr)},t),Ee(e.child))}function fi(e){var t=i=>{var{attr:n,size:r,title:a}=e,o=hi(e,ci),h=r||i.size||"1em",l;return i.className&&(l=i.className),e.className&&(l=(l?l+" ":"")+e.className),E.createElement("svg",C({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},i.attr,n,o,{className:l,style:H(H({color:e.color||i.color},i.style),e.style),height:h,width:h,xmlns:"http://www.w3.org/2000/svg"}),a&&E.createElement("title",null,a),e.children)};return pe!==void 0?E.createElement(pe.Consumer,null,i=>t(i)):t(ke)}function gi(e){return D({attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z"},child:[]}]})(e)}function xi(e){return D({attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z"},child:[]}]})(e)}function vi(e){return D({attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"},child:[]}]})(e)}function yi(e){return D({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"},child:[]}]})(e)}const bi="0.2.51",wi={version:bi},Oe="https://github.com/OpenLoaf/OpenSpeech/releases",ji="https://github.com/OpenLoaf/OpenSpeech",w=wi.version,z=e=>`${Oe}/download/v${w}/${e}`,Si=[{os:"macOS",icon:vi,tagline:"11 Big Sur+",variants:[{label:"Apple Silicon",arch:"arm64",ext:"DMG",href:z(`OpenSpeech-${w}-macOS-arm64.dmg`)},{label:"Intel",arch:"x86_64",ext:"DMG",href:z(`OpenSpeech-${w}-macOS-intel.dmg`)}]},{os:"Windows",icon:gi,tagline:"10 / 11",variants:[{label:"x64",arch:"x86_64",ext:"EXE",href:z(`OpenSpeech-${w}-Windows-x86_64-setup.exe`)},{label:"ARM64",arch:"arm64",ext:"EXE",href:z(`OpenSpeech-${w}-Windows-arm64-setup.exe`)}]},{os:"Linux",icon:xi,tagline:"Ubuntu / Fedora / Arch",variants:[{label:"AppImage",arch:"x86_64",ext:"APPIMAGE",href:z(`OpenSpeech-${w}-Linux-x86_64.AppImage`)},{label:"Debian",arch:"x86_64",ext:"DEB",href:z(`OpenSpeech-${w}-Linux-x86_64.deb`)},{label:"Red Hat",arch:"x86_64",ext:"RPM",href:z(`OpenSpeech-${w}-Linux-x86_64.rpm`)}]}];function Ni(){if(typeof navigator>"u")return null;const e=navigator.userAgent.toLowerCase();return/mac|iphone|ipad|ipod/.test(e)?"macOS":/win/.test(e)?"Windows":/linux|x11|cros/.test(e)?"Linux":null}function ki({platform:e,isDetected:t}){const[i,n]=x.useState(!1),r=e.icon,a=i||t,o=e.variants[0];return s.jsxs("div",{onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),onFocus:()=>n(!0),onBlur:()=>n(!1),className:`group relative flex flex-col overflow-hidden border bg-te-surface/30 backdrop-blur-sm transition-[border-color,box-shadow] duration-300 ${t?"border-te-accent/70 shadow-[0_0_60px_-20px_rgba(255,204,0,0.4)]":i?"border-te-accent/40":"border-te-gray/40"}`,children:[s.jsx("div",{className:"pointer-events-none absolute inset-x-0 top-0 -z-0 h-48 transition-opacity duration-500",style:{opacity:a?1:.3,background:t?"radial-gradient(ellipse 90% 70% at 50% 0%, rgba(255,204,0,0.22) 0%, transparent 70%)":"radial-gradient(ellipse 90% 70% at 50% 0%, rgba(255,204,0,0.12) 0%, transparent 70%)"}}),t&&s.jsxs("div",{className:"absolute right-3 top-3 z-10 inline-flex items-center gap-1.5 border border-te-accent/60 bg-te-bg/80 px-2 py-0.5 font-mono text-[9px] uppercase tracking-[0.25em] text-te-accent backdrop-blur",children:[s.jsx("span",{className:"size-1 rounded-full bg-te-accent"}),"当前系统"]}),s.jsxs("div",{className:"relative z-10 flex items-center gap-4 px-6 pt-7 pb-5",children:[s.jsx(r,{className:`size-10 shrink-0 transition-colors duration-300 ${t||i?"text-te-accent":"text-te-fg/85"}`}),s.jsxs("div",{className:"flex flex-col leading-tight",children:[s.jsx("div",{className:"font-mono text-xl font-bold tracking-tighter text-te-fg",children:e.os}),s.jsx("div",{className:"font-mono text-[10px] uppercase tracking-[0.25em] text-te-light-gray/50",children:e.tagline})]}),s.jsxs("div",{className:"ml-auto font-mono text-[10px] uppercase tracking-[0.2em] text-te-light-gray/40",children:[e.variants.length," 版本"]})]}),s.jsxs("div",{className:"relative z-10 px-5 pb-5",children:[s.jsxs("a",{href:o.href,download:!0,className:`flex items-center justify-between gap-3 border px-4 py-3 font-mono text-sm font-bold tracking-tight transition-colors duration-200 ${t?"border-te-accent bg-te-accent text-te-bg hover:bg-te-accent/90":"border-te-fg/50 text-te-fg hover:border-te-accent hover:bg-te-accent hover:text-te-bg"}`,children:[s.jsxs("span",{className:"flex flex-col items-start leading-tight",children:[s.jsxs("span",{children:["下载 · ",o.label]}),s.jsxs("span",{className:`mt-0.5 text-[9px] font-normal uppercase tracking-[0.2em] ${t?"text-te-bg/60":"text-te-light-gray/55"}`,children:[o.arch," · ",o.ext]})]}),s.jsx(it,{className:"size-4 shrink-0"})]}),e.variants.length>1&&s.jsx("div",{className:"grid transition-[grid-template-rows,opacity] duration-300 ease-out",style:{gridTemplateRows:a?"1fr":"0fr",opacity:a?1:0},children:s.jsx("div",{className:"overflow-hidden",children:s.jsx("div",{className:"flex flex-col gap-1.5 pt-2.5",children:e.variants.slice(1).map(h=>s.jsxs("a",{href:h.href,download:!0,className:"flex items-center justify-between gap-3 border border-te-gray/40 px-3 py-2 font-mono text-xs tracking-tight text-te-light-gray/80 transition-colors hover:border-te-accent hover:text-te-accent",children:[s.jsx("span",{children:h.label}),s.jsx("span",{className:"font-mono text-[9px] uppercase tracking-[0.2em] text-te-light-gray/40",children:h.ext})]},h.label))})})})]})]})}function Ei(){const e=x.useMemo(Ni,[]);return s.jsxs("section",{id:"download",className:"relative px-[4vw] py-[clamp(6rem,12vw,10rem)]",children:[s.jsx("div",{className:"pointer-events-none absolute inset-0",style:{backgroundImage:`
|
|
1
|
+
import{l as F,Q as M,T as Y,U as fe,V as ge,Y as Pe,Z as We,_ as Ae,$ as Ie,a0 as Re,a1 as Ce,a2 as xe,a3 as He,a4 as Fe,a5 as De,r as x,a6 as Be,a7 as J,a8 as P,a9 as Ve,aa as Xe,ab as Ye,o as s,C as f,h as $e,X as Ue,A as U,I as qe,ac as Ge,ad as Ke,W as Qe,N as Je,m as Ze,b as E,P as et}from"./App-BFpSUQKp.js";const tt=[["path",{d:"M12 17V3",key:"1cwfxf"}],["path",{d:"m6 11 6 6 6-6",key:"12ii2o"}],["path",{d:"M19 21H5",key:"150jfl"}]],it=F("arrow-down-to-line",tt);const st=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],nt=F("cpu",st);const rt=[["path",{d:"M21.54 15H17a2 2 0 0 0-2 2v4.54",key:"1djwo0"}],["path",{d:"M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17",key:"1tzkfa"}],["path",{d:"M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05",key:"14pb5j"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],at=F("earth",rt);const ot=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],lt=F("lock",ot);function ve(e,t){let i;const n=()=>{const{currentTime:r}=t,o=(r===null?0:r.value)/100;i!==o&&e(o),i=o};return M.preUpdate(n,!0),()=>Y(n)}function R(e){return typeof window>"u"?!1:e?fe():ge()}const ct=50,Z=()=>({current:0,offset:[],progress:0,scrollLength:0,targetOffset:0,targetLength:0,containerLength:0,velocity:0}),ht=()=>({time:0,x:Z(),y:Z()}),dt={x:{length:"Width",position:"Left"},y:{length:"Height",position:"Top"}};function ee(e,t,i,n){const r=i[t],{length:a,position:o}=dt[t],h=r.current,l=i.time;r.current=Math.abs(e[`scroll${o}`]),r.scrollLength=e[`scroll${a}`]-e[`client${a}`],r.offset.length=0,r.offset[0]=0,r.offset[1]=r.scrollLength,r.progress=Pe(0,r.scrollLength,r.current);const d=n-l;r.velocity=d>ct?0:We(r.current-h,d)}function pt(e,t,i){ee(e,"x",t,i),ee(e,"y",t,i),t.time=i}function ut(e,t){const i={x:0,y:0};let n=e;for(;n&&n!==t;)if(Ae(n))i.x+=n.offsetLeft,i.y+=n.offsetTop,n=n.offsetParent;else if(n.tagName==="svg"){const r=n.getBoundingClientRect();n=n.parentElement;const a=n.getBoundingClientRect();i.x+=r.left-a.left,i.y+=r.top-a.top}else if(n instanceof SVGGraphicsElement){const{x:r,y:a}=n.getBBox();i.x+=r,i.y+=a;let o=null,h=n.parentNode;for(;!o;)h.tagName==="svg"&&(o=h),h=n.parentNode;n=o}else break;return i}const $={start:0,center:.5,end:1};function te(e,t,i=0){let n=0;if(e in $&&(e=$[e]),typeof e=="string"){const r=parseFloat(e);e.endsWith("px")?n=r:e.endsWith("%")?e=r/100:e.endsWith("vw")?n=r/100*document.documentElement.clientWidth:e.endsWith("vh")?n=r/100*document.documentElement.clientHeight:e=r}return typeof e=="number"&&(n=t*e),i+n}const mt=[0,0];function ft(e,t,i,n){let r=Array.isArray(e)?e:mt,a=0,o=0;return typeof e=="number"?r=[e,e]:typeof e=="string"&&(e=e.trim(),e.includes(" ")?r=e.split(" "):r=[e,$[e]?e:"0"]),a=te(r[0],i,n),o=te(r[1],t),a-o}const _={Enter:[[0,1],[1,1]],Exit:[[0,0],[1,0]],Any:[[1,0],[0,1]],All:[[0,0],[1,1]]},gt={x:0,y:0};function xt(e){return"getBBox"in e&&e.tagName!=="svg"?e.getBBox():{width:e.clientWidth,height:e.clientHeight}}function vt(e,t,i){const{offset:n=_.All}=i,{target:r=e,axis:a="y"}=i,o=a==="y"?"height":"width",h=r!==e?ut(r,e):gt,l=r===e?{width:e.scrollWidth,height:e.scrollHeight}:xt(r),d={width:e.clientWidth,height:e.clientHeight};t[a].offset.length=0;let p=!t[a].interpolate;const m=n.length;for(let c=0;c<m;c++){const g=ft(n[c],d[o],l[o],h[a]);!p&&g!==t[a].interpolatorOffsets[c]&&(p=!0),t[a].offset[c]=g}p&&(t[a].interpolate=Ie(t[a].offset,Re(n),{clamp:!1}),t[a].interpolatorOffsets=[...t[a].offset]),t[a].progress=Ce(0,1,t[a].interpolate(t[a].current))}function yt(e,t=e,i){if(i.x.targetOffset=0,i.y.targetOffset=0,t!==e){let n=t;for(;n&&n!==e;)i.x.targetOffset+=n.offsetLeft,i.y.targetOffset+=n.offsetTop,n=n.offsetParent}i.x.targetLength=t===e?t.scrollWidth:t.clientWidth,i.y.targetLength=t===e?t.scrollHeight:t.clientHeight,i.x.containerLength=e.clientWidth,i.y.containerLength=e.clientHeight}function bt(e,t,i,n={}){return{measure:r=>{yt(e,n.target,i),pt(e,i,r),(n.offset||n.target)&&vt(e,i,n)},notify:()=>t(i)}}const L=new WeakMap,ie=new WeakMap,B=new WeakMap,se=new WeakMap,W=new WeakMap,ne=e=>e===document.scrollingElement?window:e;function ye(e,{container:t=document.scrollingElement,trackContentSize:i=!1,...n}={}){if(!t)return xe;let r=B.get(t);r||(r=new Set,B.set(t,r));const a=ht(),o=bt(t,e,a,n);if(r.add(o),!L.has(t)){const l=()=>{for(const c of r)c.measure(Fe.timestamp);M.preUpdate(d)},d=()=>{for(const c of r)c.notify()},p=()=>M.read(l);L.set(t,p);const m=ne(t);window.addEventListener("resize",p),t!==document.documentElement&&ie.set(t,He(t,p)),m.addEventListener("scroll",p),p()}if(i&&!W.has(t)){const l=L.get(t),d={width:t.scrollWidth,height:t.scrollHeight};se.set(t,d);const p=()=>{const c=t.scrollWidth,g=t.scrollHeight;(d.width!==c||d.height!==g)&&(l(),d.width=c,d.height=g)},m=M.read(p,!0);W.set(t,m)}const h=L.get(t);return M.read(h,!1,!0),()=>{Y(h);const l=B.get(t);if(!l||(l.delete(o),l.size))return;const d=L.get(t);L.delete(t),d&&(ne(t).removeEventListener("scroll",d),ie.get(t)?.(),window.removeEventListener("resize",d));const p=W.get(t);p&&(Y(p),W.delete(t)),se.delete(t)}}const wt=[[_.Enter,"entry"],[_.Exit,"exit"],[_.Any,"cover"],[_.All,"contain"]],re={start:0,end:1};function jt(e){const t=e.trim().split(/\s+/);if(t.length!==2)return;const i=re[t[0]],n=re[t[1]];if(!(i===void 0||n===void 0))return[i,n]}function St(e){if(e.length!==2)return;const t=[];for(const i of e)if(Array.isArray(i))t.push(i);else if(typeof i=="string"){const n=jt(i);if(!n)return;t.push(n)}else return;return t}function Nt(e,t){const i=St(e);if(!i)return!1;for(let n=0;n<2;n++){const r=i[n],a=t[n];if(r[0]!==a[0]||r[1]!==a[1])return!1}return!0}function q(e){if(!e)return{rangeStart:"contain 0%",rangeEnd:"contain 100%"};for(const[t,i]of wt)if(Nt(e,t))return{rangeStart:`${i} 0%`,rangeEnd:`${i} 100%`}}const ae=new Map;function oe(e){const t={value:0},i=ye(n=>{t.value=n[e.axis].progress*100},e);return{currentTime:t,cancel:i}}function be({source:e,container:t,...i}){const{axis:n}=i;e&&(t=e);let r=ae.get(t);r||(r=new Map,ae.set(t,r));const a=i.target??"self";let o=r.get(a);o||(o={},r.set(a,o));const h=n+(i.offset??[]).join(",");return o[h]||(i.target&&R(i.target)?q(i.offset)?o[h]=new ViewTimeline({subject:i.target,axis:n}):o[h]=oe({container:t,...i}):R()?o[h]=new ScrollTimeline({source:t,axis:n}):o[h]=oe({container:t,...i})),o[h]}function kt(e,t){const i=be(t),n=t.target?q(t.offset):void 0,r=t.target?R(t.target)&&!!n:R();return e.attachTimeline({timeline:r?i:void 0,...n&&r&&{rangeStart:n.rangeStart,rangeEnd:n.rangeEnd},observe:a=>(a.pause(),ve(o=>{a.time=a.iterationDuration*o},i))})}function Et(e){return e.length===2}function Ot(e,t){return Et(e)?ye(i=>{e(i[t.axis].progress,i)},t):ve(e,be(t))}function we(e,{axis:t="y",container:i=document.scrollingElement,...n}={}){if(!i)return xe;const r={axis:t,container:i,...n};return typeof e=="function"?Ot(e,r):kt(e,r)}const zt=()=>({scrollX:P(0),scrollY:P(0),scrollXProgress:P(0),scrollYProgress:P(0)}),A=e=>e?!e.current:!1;function le(e,t,i,n){return{factory:r=>we(r,{...t,axis:e,container:i?.current||void 0,target:n?.current||void 0}),times:[0,1],keyframes:[0,1],ease:r=>r,duration:1}}function Lt(e,t){return typeof window>"u"?!1:e?fe()&&!!q(t):ge()}function Tt({container:e,target:t,...i}={}){const n=De(zt);Lt(t,i.offset)&&(n.scrollXProgress.accelerate=le("x",i,e,t),n.scrollYProgress.accelerate=le("y",i,e,t));const r=x.useRef(null),a=x.useRef(!1),o=x.useCallback(()=>(r.current=we((h,{x:l,y:d})=>{n.scrollX.set(l.current),n.scrollXProgress.set(l.progress),n.scrollY.set(d.current),n.scrollYProgress.set(d.progress)},{...i,container:e?.current||void 0,target:t?.current||void 0}),()=>{r.current?.()}),[e,t,JSON.stringify(i.offset)]);return Be(()=>{if(a.current=!1,A(e)||A(t)){a.current=!0;return}else return o()},[o]),x.useEffect(()=>{if(a.current)return J(!A(e)),J(!A(t)),o()},[o]),n}function G(){!Ve.current&&Xe();const[e]=x.useState(Ye.current);return e}var ce="1.3.23";function je(e,t,i){return Math.max(e,Math.min(t,i))}function Mt(e,t,i){return(1-i)*e+i*t}function _t(e,t,i,n){return Mt(e,t,1-Math.exp(-i*n))}function Pt(e,t){return(e%t+t)%t}var Wt=class{isRunning=!1;value=0;from=0;to=0;currentTime=0;lerp;duration;easing;onUpdate;advance(e){if(!this.isRunning)return;let t=!1;if(this.duration&&this.easing){this.currentTime+=e;const i=je(0,this.currentTime/this.duration,1);t=i>=1;const n=t?1:this.easing(i);this.value=this.from+(this.to-this.from)*n}else this.lerp?(this.value=_t(this.value,this.to,this.lerp*60,e),Math.round(this.value)===Math.round(this.to)&&(this.value=this.to,t=!0)):(this.value=this.to,t=!0);t&&this.stop(),this.onUpdate?.(this.value,t)}stop(){this.isRunning=!1}fromTo(e,t,{lerp:i,duration:n,easing:r,onStart:a,onUpdate:o}){this.from=this.value=e,this.to=t,this.lerp=i,this.duration=n,this.easing=r,this.currentTime=0,this.isRunning=!0,a?.(),this.onUpdate=o}};function At(e,t){let i;return function(...n){clearTimeout(i),i=setTimeout(()=>{i=void 0,e.apply(this,n)},t)}}var It=class{width=0;height=0;scrollHeight=0;scrollWidth=0;debouncedResize;wrapperResizeObserver;contentResizeObserver;constructor(e,t,{autoResize:i=!0,debounce:n=250}={}){this.wrapper=e,this.content=t,i&&(this.debouncedResize=At(this.resize,n),this.wrapper instanceof Window?window.addEventListener("resize",this.debouncedResize):(this.wrapperResizeObserver=new ResizeObserver(this.debouncedResize),this.wrapperResizeObserver.observe(this.wrapper)),this.contentResizeObserver=new ResizeObserver(this.debouncedResize),this.contentResizeObserver.observe(this.content)),this.resize()}destroy(){this.wrapperResizeObserver?.disconnect(),this.contentResizeObserver?.disconnect(),this.wrapper===window&&this.debouncedResize&&window.removeEventListener("resize",this.debouncedResize)}resize=()=>{this.onWrapperResize(),this.onContentResize()};onWrapperResize=()=>{this.wrapper instanceof Window?(this.width=window.innerWidth,this.height=window.innerHeight):(this.width=this.wrapper.clientWidth,this.height=this.wrapper.clientHeight)};onContentResize=()=>{this.wrapper instanceof Window?(this.scrollHeight=this.content.scrollHeight,this.scrollWidth=this.content.scrollWidth):(this.scrollHeight=this.wrapper.scrollHeight,this.scrollWidth=this.wrapper.scrollWidth)};get limit(){return{x:this.scrollWidth-this.width,y:this.scrollHeight-this.height}}},Se=class{events={};emit(e,...t){const i=this.events[e]||[];for(let n=0,r=i.length;n<r;n++)i[n]?.(...t)}on(e,t){return this.events[e]?this.events[e].push(t):this.events[e]=[t],()=>{this.events[e]=this.events[e]?.filter(i=>t!==i)}}off(e,t){this.events[e]=this.events[e]?.filter(i=>t!==i)}destroy(){this.events={}}};const Rt=100/6,k={passive:!1};function he(e,t){return e===1?Rt:e===2?t:1}var Ct=class{touchStart={x:0,y:0};lastDelta={x:0,y:0};window={width:0,height:0};emitter=new Se;constructor(e,t={wheelMultiplier:1,touchMultiplier:1}){this.element=e,this.options=t,window.addEventListener("resize",this.onWindowResize),this.onWindowResize(),this.element.addEventListener("wheel",this.onWheel,k),this.element.addEventListener("touchstart",this.onTouchStart,k),this.element.addEventListener("touchmove",this.onTouchMove,k),this.element.addEventListener("touchend",this.onTouchEnd,k)}on(e,t){return this.emitter.on(e,t)}destroy(){this.emitter.destroy(),window.removeEventListener("resize",this.onWindowResize),this.element.removeEventListener("wheel",this.onWheel,k),this.element.removeEventListener("touchstart",this.onTouchStart,k),this.element.removeEventListener("touchmove",this.onTouchMove,k),this.element.removeEventListener("touchend",this.onTouchEnd,k)}onTouchStart=e=>{const{clientX:t,clientY:i}=e.targetTouches?e.targetTouches[0]:e;this.touchStart.x=t,this.touchStart.y=i,this.lastDelta={x:0,y:0},this.emitter.emit("scroll",{deltaX:0,deltaY:0,event:e})};onTouchMove=e=>{const{clientX:t,clientY:i}=e.targetTouches?e.targetTouches[0]:e,n=-(t-this.touchStart.x)*this.options.touchMultiplier,r=-(i-this.touchStart.y)*this.options.touchMultiplier;this.touchStart.x=t,this.touchStart.y=i,this.lastDelta={x:n,y:r},this.emitter.emit("scroll",{deltaX:n,deltaY:r,event:e})};onTouchEnd=e=>{this.emitter.emit("scroll",{deltaX:this.lastDelta.x,deltaY:this.lastDelta.y,event:e})};onWheel=e=>{let{deltaX:t,deltaY:i,deltaMode:n}=e;const r=he(n,this.window.width),a=he(n,this.window.height);t*=r,i*=a,t*=this.options.wheelMultiplier,i*=this.options.wheelMultiplier,this.emitter.emit("scroll",{deltaX:t,deltaY:i,event:e})};onWindowResize=()=>{this.window={width:window.innerWidth,height:window.innerHeight}}};const de=e=>Math.min(1,1.001-2**(-10*e));var Ht=class{_isScrolling=!1;_isStopped=!1;_isLocked=!1;_preventNextNativeScrollEvent=!1;_resetVelocityTimeout=null;_rafId=null;isTouching;time=0;userData={};lastVelocity=0;velocity=0;direction=0;options;targetScroll;animatedScroll;animate=new Wt;emitter=new Se;dimensions;virtualScroll;constructor({wrapper:e=window,content:t=document.documentElement,eventsTarget:i=e,smoothWheel:n=!0,syncTouch:r=!1,syncTouchLerp:a=.075,touchInertiaExponent:o=1.7,duration:h,easing:l,lerp:d=.1,infinite:p=!1,orientation:m="vertical",gestureOrientation:c=m==="horizontal"?"both":"vertical",touchMultiplier:g=1,wheelMultiplier:u=1,autoResize:v=!0,prevent:y,virtualScroll:b,overscroll:j=!0,autoRaf:S=!1,anchors:N=!1,autoToggle:T=!1,allowNestedScroll:O=!1,__experimental__naiveDimensions:Te=!1,naiveDimensions:Me=Te,stopInertiaOnNavigate:_e=!1}={}){window.lenisVersion=ce,window.lenis||(window.lenis={}),window.lenis.version=ce,m==="horizontal"&&(window.lenis.horizontal=!0),r===!0&&(window.lenis.touch=!0),(!e||e===document.documentElement)&&(e=window),typeof h=="number"&&typeof l!="function"?l=de:typeof l=="function"&&typeof h!="number"&&(h=1),this.options={wrapper:e,content:t,eventsTarget:i,smoothWheel:n,syncTouch:r,syncTouchLerp:a,touchInertiaExponent:o,duration:h,easing:l,lerp:d,infinite:p,gestureOrientation:c,orientation:m,touchMultiplier:g,wheelMultiplier:u,autoResize:v,prevent:y,virtualScroll:b,overscroll:j,autoRaf:S,anchors:N,autoToggle:T,allowNestedScroll:O,naiveDimensions:Me,stopInertiaOnNavigate:_e},this.dimensions=new It(e,t,{autoResize:v}),this.updateClassName(),this.targetScroll=this.animatedScroll=this.actualScroll,this.options.wrapper.addEventListener("scroll",this.onNativeScroll),this.options.wrapper.addEventListener("scrollend",this.onScrollEnd,{capture:!0}),(this.options.anchors||this.options.stopInertiaOnNavigate)&&this.options.wrapper.addEventListener("click",this.onClick),this.options.wrapper.addEventListener("pointerdown",this.onPointerDown),this.virtualScroll=new Ct(i,{touchMultiplier:g,wheelMultiplier:u}),this.virtualScroll.on("scroll",this.onVirtualScroll),this.options.autoToggle&&(this.checkOverflow(),this.rootElement.addEventListener("transitionend",this.onTransitionEnd)),this.options.autoRaf&&(this._rafId=requestAnimationFrame(this.raf))}destroy(){this.emitter.destroy(),this.options.wrapper.removeEventListener("scroll",this.onNativeScroll),this.options.wrapper.removeEventListener("scrollend",this.onScrollEnd,{capture:!0}),this.options.wrapper.removeEventListener("pointerdown",this.onPointerDown),(this.options.anchors||this.options.stopInertiaOnNavigate)&&this.options.wrapper.removeEventListener("click",this.onClick),this.virtualScroll.destroy(),this.dimensions.destroy(),this.cleanUpClassName(),this._rafId&&cancelAnimationFrame(this._rafId)}on(e,t){return this.emitter.on(e,t)}off(e,t){return this.emitter.off(e,t)}onScrollEnd=e=>{e instanceof CustomEvent||(this.isScrolling==="smooth"||this.isScrolling===!1)&&e.stopPropagation()};dispatchScrollendEvent=()=>{this.options.wrapper.dispatchEvent(new CustomEvent("scrollend",{bubbles:this.options.wrapper===window,detail:{lenisScrollEnd:!0}}))};get overflow(){const e=this.isHorizontal?"overflow-x":"overflow-y";return getComputedStyle(this.rootElement)[e]}checkOverflow(){["hidden","clip"].includes(this.overflow)?this.internalStop():this.internalStart()}onTransitionEnd=e=>{e.propertyName?.includes("overflow")&&e.target===this.rootElement&&this.checkOverflow()};setScroll(e){this.isHorizontal?this.options.wrapper.scrollTo({left:e,behavior:"instant"}):this.options.wrapper.scrollTo({top:e,behavior:"instant"})}onClick=e=>{const t=e.composedPath().filter(n=>n instanceof HTMLAnchorElement&&n.href).map(n=>new URL(n.href)),i=new URL(window.location.href);if(this.options.anchors){const n=t.find(r=>i.host===r.host&&i.pathname===r.pathname&&r.hash);if(n){const r=typeof this.options.anchors=="object"&&this.options.anchors?this.options.anchors:void 0,a=`#${n.hash.split("#")[1]}`;this.scrollTo(a,r);return}}if(this.options.stopInertiaOnNavigate&&t.some(n=>i.host===n.host&&i.pathname!==n.pathname)){this.reset();return}};onPointerDown=e=>{e.button===1&&this.reset()};onVirtualScroll=e=>{if(typeof this.options.virtualScroll=="function"&&this.options.virtualScroll(e)===!1)return;const{deltaX:t,deltaY:i,event:n}=e;if(this.emitter.emit("virtual-scroll",{deltaX:t,deltaY:i,event:n}),n.ctrlKey||n.lenisStopPropagation)return;const r=n.type.includes("touch"),a=n.type.includes("wheel");this.isTouching=n.type==="touchstart"||n.type==="touchmove";const o=t===0&&i===0;if(this.options.syncTouch&&r&&n.type==="touchstart"&&o&&!this.isStopped&&!this.isLocked){this.reset();return}const h=this.options.gestureOrientation==="vertical"&&i===0||this.options.gestureOrientation==="horizontal"&&t===0;if(o||h)return;let l=n.composedPath();l=l.slice(0,l.indexOf(this.rootElement));const d=this.options.prevent,p=Math.abs(t)>=Math.abs(i)?"horizontal":"vertical";if(l.find(u=>u instanceof HTMLElement&&(typeof d=="function"&&d?.(u)||u.hasAttribute?.("data-lenis-prevent")||p==="vertical"&&u.hasAttribute?.("data-lenis-prevent-vertical")||p==="horizontal"&&u.hasAttribute?.("data-lenis-prevent-horizontal")||r&&u.hasAttribute?.("data-lenis-prevent-touch")||a&&u.hasAttribute?.("data-lenis-prevent-wheel")||this.options.allowNestedScroll&&this.hasNestedScroll(u,{deltaX:t,deltaY:i}))))return;if(this.isStopped||this.isLocked){n.cancelable&&n.preventDefault();return}if(!(this.options.syncTouch&&r||this.options.smoothWheel&&a)){this.isScrolling="native",this.animate.stop(),n.lenisStopPropagation=!0;return}let m=i;this.options.gestureOrientation==="both"?m=Math.abs(i)>Math.abs(t)?i:t:this.options.gestureOrientation==="horizontal"&&(m=t),(!this.options.overscroll||this.options.infinite||this.options.wrapper!==window&&this.limit>0&&(this.animatedScroll>0&&this.animatedScroll<this.limit||this.animatedScroll===0&&i>0||this.animatedScroll===this.limit&&i<0))&&(n.lenisStopPropagation=!0),n.cancelable&&n.preventDefault();const c=r&&this.options.syncTouch,g=r&&n.type==="touchend";g&&(m=Math.sign(m)*Math.abs(this.velocity)**this.options.touchInertiaExponent),this.scrollTo(this.targetScroll+m,{programmatic:!1,...c?{lerp:g?this.options.syncTouchLerp:1}:{lerp:this.options.lerp,duration:this.options.duration,easing:this.options.easing}})};resize(){this.dimensions.resize(),this.animatedScroll=this.targetScroll=this.actualScroll,this.emit()}emit(){this.emitter.emit("scroll",this)}onNativeScroll=()=>{if(this._resetVelocityTimeout!==null&&(clearTimeout(this._resetVelocityTimeout),this._resetVelocityTimeout=null),this._preventNextNativeScrollEvent){this._preventNextNativeScrollEvent=!1;return}if(this.isScrolling===!1||this.isScrolling==="native"){const e=this.animatedScroll;this.animatedScroll=this.targetScroll=this.actualScroll,this.lastVelocity=this.velocity,this.velocity=this.animatedScroll-e,this.direction=Math.sign(this.animatedScroll-e),this.isStopped||(this.isScrolling="native"),this.emit(),this.velocity!==0&&(this._resetVelocityTimeout=setTimeout(()=>{this.lastVelocity=this.velocity,this.velocity=0,this.isScrolling=!1,this.emit()},400))}};reset(){this.isLocked=!1,this.isScrolling=!1,this.animatedScroll=this.targetScroll=this.actualScroll,this.lastVelocity=this.velocity=0,this.animate.stop()}start(){if(this.isStopped){if(this.options.autoToggle){this.rootElement.style.removeProperty("overflow");return}this.internalStart()}}internalStart(){this.isStopped&&(this.reset(),this.isStopped=!1,this.emit())}stop(){if(!this.isStopped){if(this.options.autoToggle){this.rootElement.style.setProperty("overflow","clip");return}this.internalStop()}}internalStop(){this.isStopped||(this.reset(),this.isStopped=!0,this.emit())}raf=e=>{const t=e-(this.time||e);this.time=e,this.animate.advance(t*.001),this.options.autoRaf&&(this._rafId=requestAnimationFrame(this.raf))};scrollTo(e,{offset:t=0,immediate:i=!1,lock:n=!1,programmatic:r=!0,lerp:a=r?this.options.lerp:void 0,duration:o=r?this.options.duration:void 0,easing:h=r?this.options.easing:void 0,onStart:l,onComplete:d,force:p=!1,userData:m}={}){if((this.isStopped||this.isLocked)&&!p)return;let c=e,g=t;if(typeof c=="string"&&["top","left","start","#"].includes(c))c=0;else if(typeof c=="string"&&["bottom","right","end"].includes(c))c=this.limit;else{let u=null;if(typeof c=="string"?(u=document.querySelector(c),u||(c==="#top"?c=0:console.warn("Lenis: Target not found",c))):c instanceof HTMLElement&&c?.nodeType&&(u=c),u){if(this.options.wrapper!==window){const N=this.rootElement.getBoundingClientRect();g-=this.isHorizontal?N.left:N.top}const v=u.getBoundingClientRect(),y=getComputedStyle(u),b=this.isHorizontal?Number.parseFloat(y.scrollMarginLeft):Number.parseFloat(y.scrollMarginTop),j=getComputedStyle(this.rootElement),S=this.isHorizontal?Number.parseFloat(j.scrollPaddingLeft):Number.parseFloat(j.scrollPaddingTop);c=(this.isHorizontal?v.left:v.top)+this.animatedScroll-(Number.isNaN(b)?0:b)-(Number.isNaN(S)?0:S)}}if(typeof c=="number"){if(c+=g,this.options.infinite){if(r){this.targetScroll=this.animatedScroll=this.scroll;const u=c-this.animatedScroll;u>this.limit/2?c-=this.limit:u<-this.limit/2&&(c+=this.limit)}}else c=je(0,c,this.limit);if(c===this.targetScroll){l?.(this),d?.(this);return}if(this.userData=m??{},i){this.animatedScroll=this.targetScroll=c,this.setScroll(this.scroll),this.reset(),this.preventNextNativeScrollEvent(),this.emit(),d?.(this),this.userData={},requestAnimationFrame(()=>{this.dispatchScrollendEvent()});return}r||(this.targetScroll=c),typeof o=="number"&&typeof h!="function"?h=de:typeof h=="function"&&typeof o!="number"&&(o=1),this.animate.fromTo(this.animatedScroll,c,{duration:o,easing:h,lerp:a,onStart:()=>{n&&(this.isLocked=!0),this.isScrolling="smooth",l?.(this)},onUpdate:(u,v)=>{this.isScrolling="smooth",this.lastVelocity=this.velocity,this.velocity=u-this.animatedScroll,this.direction=Math.sign(this.velocity),this.animatedScroll=u,this.setScroll(this.scroll),r&&(this.targetScroll=u),v||this.emit(),v&&(this.reset(),this.emit(),d?.(this),this.userData={},requestAnimationFrame(()=>{this.dispatchScrollendEvent()}),this.preventNextNativeScrollEvent())}})}}preventNextNativeScrollEvent(){this._preventNextNativeScrollEvent=!0,requestAnimationFrame(()=>{this._preventNextNativeScrollEvent=!1})}hasNestedScroll(e,{deltaX:t,deltaY:i}){const n=Date.now();e._lenis||(e._lenis={});const r=e._lenis;let a,o,h,l,d,p,m,c,g,u;if(n-(r.time??0)>2e3){r.time=Date.now();const O=window.getComputedStyle(e);if(r.computedStyle=O,a=["auto","overlay","scroll"].includes(O.overflowX),o=["auto","overlay","scroll"].includes(O.overflowY),d=["auto"].includes(O.overscrollBehaviorX),p=["auto"].includes(O.overscrollBehaviorY),r.hasOverflowX=a,r.hasOverflowY=o,!(a||o))return!1;m=e.scrollWidth,c=e.scrollHeight,g=e.clientWidth,u=e.clientHeight,h=m>g,l=c>u,r.isScrollableX=h,r.isScrollableY=l,r.scrollWidth=m,r.scrollHeight=c,r.clientWidth=g,r.clientHeight=u,r.hasOverscrollBehaviorX=d,r.hasOverscrollBehaviorY=p}else h=r.isScrollableX,l=r.isScrollableY,a=r.hasOverflowX,o=r.hasOverflowY,m=r.scrollWidth,c=r.scrollHeight,g=r.clientWidth,u=r.clientHeight,d=r.hasOverscrollBehaviorX,p=r.hasOverscrollBehaviorY;if(!(a&&h||o&&l))return!1;const v=Math.abs(t)>=Math.abs(i)?"horizontal":"vertical";let y,b,j,S,N,T;if(v==="horizontal")y=Math.round(e.scrollLeft),b=m-g,j=t,S=a,N=h,T=d;else if(v==="vertical")y=Math.round(e.scrollTop),b=c-u,j=i,S=o,N=l,T=p;else return!1;return!T&&(y>=b||y<=0)?!0:(j>0?y<b:y>0)&&S&&N}get rootElement(){return this.options.wrapper===window?document.documentElement:this.options.wrapper}get limit(){return this.options.naiveDimensions?this.isHorizontal?this.rootElement.scrollWidth-this.rootElement.clientWidth:this.rootElement.scrollHeight-this.rootElement.clientHeight:this.dimensions.limit[this.isHorizontal?"x":"y"]}get isHorizontal(){return this.options.orientation==="horizontal"}get actualScroll(){const e=this.options.wrapper;return this.isHorizontal?e.scrollX??e.scrollLeft:e.scrollY??e.scrollTop}get scroll(){return this.options.infinite?Pt(this.animatedScroll,this.limit):this.animatedScroll}get progress(){return this.limit===0?1:this.scroll/this.limit}get isScrolling(){return this._isScrolling}set isScrolling(e){this._isScrolling!==e&&(this._isScrolling=e,this.updateClassName())}get isStopped(){return this._isStopped}set isStopped(e){this._isStopped!==e&&(this._isStopped=e,this.updateClassName())}get isLocked(){return this._isLocked}set isLocked(e){this._isLocked!==e&&(this._isLocked=e,this.updateClassName())}get isSmooth(){return this.isScrolling==="smooth"}get className(){let e="lenis";return this.options.autoToggle&&(e+=" lenis-autoToggle"),this.isStopped&&(e+=" lenis-stopped"),this.isLocked&&(e+=" lenis-locked"),this.isScrolling&&(e+=" lenis-scrolling"),this.isScrolling==="smooth"&&(e+=" lenis-smooth"),e}updateClassName(){this.cleanUpClassName(),this.className.split(" ").forEach(e=>{this.rootElement.classList.add(e)})}cleanUpClassName(){for(const e of Array.from(this.rootElement.classList))(e==="lenis"||e.startsWith("lenis-"))&&this.rootElement.classList.remove(e)}};const Ft=[{label:"特性",href:"#features"},{label:"常见问题",href:"#faq"},{label:"下载",href:"#download"}];function Dt(){return s.jsx("header",{className:"fixed top-0 z-50 w-full border-b border-te-gray/30 bg-te-bg/80 backdrop-blur-sm",children:s.jsxs("div",{className:"mx-auto flex h-14 max-w-7xl items-center justify-between px-[4vw]",children:[s.jsxs("a",{href:"#top",className:"flex items-center gap-2 font-mono text-sm font-bold tracking-tighter text-te-fg transition-colors hover:text-te-accent",children:[s.jsx("img",{src:"/logo-write.png",alt:"OpenSpeech",className:"h-5 w-auto"}),s.jsx("span",{children:"OpenSpeech"})]}),s.jsx("nav",{className:"hidden items-center gap-6 md:flex",children:Ft.map(e=>s.jsx("a",{href:e.href,className:"font-mono text-xs uppercase tracking-[0.1em] text-te-light-gray transition-colors hover:text-te-accent",children:e.label},e.href))}),s.jsx("a",{href:"https://github.com/OpenLoaf/OpenSpeech",target:"_blank",rel:"noreferrer",className:"border border-te-gray/40 px-4 py-1.5 font-mono text-xs uppercase tracking-[0.1em] text-te-fg transition-colors hover:border-te-accent hover:text-te-accent",children:"GitHub"})]})})}function Bt(){return s.jsx("footer",{className:"border-t border-te-gray/30 bg-te-bg px-[4vw] py-8",children:s.jsxs("div",{className:"mx-auto flex max-w-7xl flex-col items-center justify-between gap-4 md:flex-row",children:[s.jsxs("div",{className:"flex items-center gap-3 font-mono text-xs text-te-light-gray/60",children:[s.jsx("img",{src:"/logo-write.png",alt:"OpenSpeech",className:"h-5 w-5 opacity-70"}),s.jsx("span",{children:"© 2026 OpenSpeech · 源码公开(PolyForm Noncommercial)"})]}),s.jsxs("nav",{className:"flex items-center gap-6 font-mono text-xs uppercase tracking-[0.15em] text-te-light-gray/60",children:[s.jsx("a",{className:"transition-colors hover:text-te-accent",href:"https://github.com/OpenLoaf/OpenSpeech",target:"_blank",rel:"noreferrer",children:"GitHub"}),s.jsx("a",{className:"transition-colors hover:text-te-accent",href:"https://github.com/OpenLoaf/OpenSpeech/releases",target:"_blank",rel:"noreferrer",children:"版本"}),s.jsx("a",{className:"transition-colors hover:text-te-accent",href:"#faq",children:"常见问题"}),s.jsx("a",{className:"transition-colors hover:text-te-accent",href:"https://github.com/OpenLoaf/OpenSpeech/blob/main/LICENSE",target:"_blank",rel:"noreferrer",children:"License"})]}),s.jsxs("div",{className:"flex items-center gap-2 font-mono text-xs text-te-light-gray/60",children:[s.jsx(f.span,{className:"size-1.5 rounded-full bg-te-accent",animate:{opacity:[1,.3,1]},transition:{duration:2,repeat:1/0}}),s.jsx("span",{className:"uppercase tracking-[0.15em]",children:"v0.2.24"})]})]})})}function Vt(){const e=G()??!1;return s.jsxs("div",{className:"absolute inset-0 overflow-hidden bg-te-bg",children:[s.jsx("div",{className:"pointer-events-none absolute inset-0 opacity-[0.5]",style:{backgroundImage:"linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px)",backgroundSize:"72px 72px",maskImage:"radial-gradient(ellipse 90% 70% at 50% 40%, #000 30%, transparent 85%)",WebkitMaskImage:"radial-gradient(ellipse 90% 70% at 50% 40%, #000 30%, transparent 85%)"}}),s.jsx(f.div,{className:"absolute left-1/2 top-[20%] h-[80vh] w-[110vh] -translate-x-1/2 rounded-full",style:{background:"radial-gradient(ellipse, rgba(255,204,0,0.14) 0%, transparent 65%)",filter:"blur(90px)"},initial:{opacity:0},animate:e?{opacity:.9}:{opacity:[.6,1,.6]},transition:{duration:11,repeat:1/0,ease:"easeInOut"}}),s.jsx("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 h-[35%]",style:{background:"linear-gradient(to top, var(--te-bg) 0%, transparent 100%)"}})]})}const I={"zh-CN":{raw:[{text:"嗯,",kind:"filler"},{text:"我们这周要做三件事",kind:"keep"},{text:"啊",kind:"filler"},{text:"。第一个,",kind:"keep"},{text:"呃,",kind:"filler"},{text:"把",kind:"keep"},{text:"那个",kind:"filler"},{text:"登录页面…不对不对,是",kind:"correction"},{text:"注册页面修一下",kind:"keep"},{text:"。然后",kind:"keep"},{text:"呢",kind:"filler"},{text:",把数据库迁移搞完",kind:"keep"},{text:"。最后,把测试覆盖率提到 80% 以上。",kind:"keep"}],polishedHeader:"本周任务 · 共 3 项",polishedList:["修改注册页面","完成数据库迁移","测试覆盖率提升至 80% 以上"],scratchPath:"~/scratch.md",scratchFooterPrompt:"输入 · 按一下快捷键开始 · 再按一下结束",charsUnit:"字",liveLabel:"实时",waiting:"// 等待按键",listening:"// 正在听..."},en:{raw:[{text:"Um, ",kind:"filler"},{text:"we've got three things to ship this week",kind:"keep"},{text:", uh",kind:"filler"},{text:". First, ",kind:"keep"},{text:"uh, ",kind:"filler"},{text:"fix the ",kind:"keep"},{text:"you know, ",kind:"filler"},{text:"login page... wait no, the ",kind:"correction"},{text:"signup page",kind:"keep"},{text:". Then ",kind:"keep"},{text:"well, ",kind:"filler"},{text:"finish the database migration",kind:"keep"},{text:". Finally, lift test coverage above 80%.",kind:"keep"}],polishedHeader:"This week · 3 items",polishedList:["Fix the signup page","Finish the database migration","Lift test coverage above 80%"],scratchPath:"~/scratch.md",scratchFooterPrompt:"input · press hotkey to start · press again to stop",charsUnit:"chars",liveLabel:"live",waiting:"// awaiting hotkey",listening:"// listening..."},"zh-TW":{raw:[{text:"嗯,",kind:"filler"},{text:"我們這週要做三件事",kind:"keep"},{text:"啊",kind:"filler"},{text:"。第一個,",kind:"keep"},{text:"呃,",kind:"filler"},{text:"把",kind:"keep"},{text:"那個",kind:"filler"},{text:"登入頁面…不對不對,是",kind:"correction"},{text:"註冊頁面修一下",kind:"keep"},{text:"。然後",kind:"keep"},{text:"呢",kind:"filler"},{text:",把資料庫遷移搞完",kind:"keep"},{text:"。最後,把測試覆蓋率提到 80% 以上。",kind:"keep"}],polishedHeader:"本週任務 · 共 3 項",polishedList:["修改註冊頁面","完成資料庫遷移","測試覆蓋率提升至 80% 以上"],scratchPath:"~/scratch.md",scratchFooterPrompt:"輸入 · 按一下快捷鍵開始 · 再按一下結束",charsUnit:"字",liveLabel:"即時",waiting:"// 等待按鍵",listening:"// 正在聽..."}};function K(){return x.useMemo(()=>{if(typeof window>"u")return I["zh-CN"];const e=new URLSearchParams(window.location.search).get("lang");return e==="en"?I.en:e==="zh-TW"||e==="zhTW"||e==="tw"?I["zh-TW"]:I["zh-CN"]},[])}const Ne={idle:1e3,recording:1500,transcribing:2400,polishing:1500,injecting:2200},Xt={idle:"recording",recording:"transcribing",transcribing:"polishing",polishing:"injecting",injecting:"idle"};function Yt(e){const[t,i]=x.useState("idle"),n=G();return x.useEffect(()=>{if(!e||n)return;const r=setTimeout(()=>i(Xt[t]),Ne[t]);return()=>clearTimeout(r)},[t,e,n]),x.useEffect(()=>{n&&i("injecting")},[n]),t}const $t={idle:"// 待机",recording:"// 收音中",transcribing:"// 转写中",polishing:"// 清洗中",injecting:"// 注入中"};function Ut({stage:e}){const t=K(),i=x.useMemo(()=>t.raw.map(a=>a.text).join(""),[t]),n=e==="injecting"?t.polishedList.join("").length+t.polishedHeader.length:e==="polishing"?i.length:0,r=e==="recording"||e==="transcribing";return s.jsx("div",{className:"border border-te-gray/30 p-px",children:s.jsxs("div",{className:"flex flex-col bg-te-surface",children:[s.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-te-gray/30 px-5 py-3",children:[s.jsxs("div",{className:"flex items-center gap-2 font-mono text-[11px] uppercase tracking-[0.25em] text-te-light-gray/70",children:[s.jsx("span",{className:"text-te-accent",children:"▍"}),s.jsx("span",{children:t.scratchPath})]}),s.jsx("span",{className:"font-mono text-[11px] uppercase tracking-[0.25em] text-te-accent",children:$t[e]})]}),s.jsx("div",{className:"px-8 py-7 md:px-12 md:py-9",children:s.jsx(qt,{stage:e})}),s.jsxs("div",{className:"flex items-center justify-between gap-3 border-t border-te-gray/30 px-5 py-2.5 font-mono text-[10px] uppercase tracking-[0.25em] text-te-light-gray/40",children:[s.jsx("span",{children:t.scratchFooterPrompt}),s.jsx("span",{className:"flex items-center gap-2",children:r?s.jsxs(s.Fragment,{children:[s.jsx(f.span,{className:"size-1.5 rounded-full bg-te-accent",animate:{opacity:[1,.3,1]},transition:{duration:1.4,repeat:1/0}}),t.liveLabel]}):s.jsxs("span",{children:[n," ",t.charsUnit]})})]})]})})}function qt({stage:e}){const t=e==="injecting";return s.jsx("div",{className:"relative h-[11rem]",children:s.jsxs(U,{mode:"wait",initial:!1,children:[!t&&s.jsx(f.div,{initial:{opacity:1},animate:{opacity:1},exit:{opacity:0,y:-6},transition:{duration:.35,ease:"easeOut"},children:s.jsx(Gt,{stage:e})},"raw"),t&&s.jsx(f.div,{initial:{opacity:0,y:8},animate:{opacity:1,y:0},exit:{opacity:0},transition:{duration:.5,ease:"easeOut",delay:.1},children:s.jsx(Kt,{})},"list")]})})}function Gt({stage:e}){const t=K(),i=x.useMemo(()=>t.raw.map(l=>l.text).join(""),[t]),[n,r]=x.useState(0),a=G();x.useEffect(()=>{if(e==="transcribing"){r(0);const l=i.length,d=Math.max(28,Math.floor(Ne.transcribing/l)),p=setInterval(()=>{r(m=>m>=l?(clearInterval(p),m):m+1)},d);return()=>clearInterval(p)}e==="polishing"&&r(i.length),(e==="idle"||e==="recording")&&r(0)},[e,i]),x.useEffect(()=>{a&&r(i.length)},[a,i]);const o=e==="recording"||e==="transcribing";if(e==="idle"||e==="recording")return s.jsxs("div",{className:"flex min-h-[1.6em] items-baseline",children:[s.jsx("span",{className:"font-mono text-sm text-te-light-gray/40",children:e==="recording"?t.listening:t.waiting}),s.jsx(f.span,{className:"ml-0.5 inline-block h-[1em] w-[2px] translate-y-[0.15em] bg-te-accent",animate:e==="recording"?{opacity:[1,.2,1]}:{opacity:.3},transition:{repeat:e==="recording"?1/0:0,duration:1,ease:"easeInOut"}})]});let h=0;return s.jsxs("div",{className:"text-lg leading-relaxed text-te-fg md:text-xl",children:[t.raw.map((l,d)=>{const p=h;h=p+l.text.length;const m=Math.max(0,Math.min(l.text.length,n-p));if(m===0)return null;const c=l.text.slice(0,m),g=e==="polishing"&&l.kind!=="keep";return s.jsx(f.span,{className:"inline align-baseline transition-colors",animate:{opacity:g?.45:1,color:g?l.kind==="correction"?"var(--te-accent)":"var(--te-light-gray)":"var(--te-fg)"},transition:{duration:.35},style:g?{textDecoration:"line-through"}:void 0,children:c},d)}),o&&s.jsx(f.span,{className:"ml-0.5 inline-block h-[1em] w-[2px] translate-y-[0.15em] bg-te-accent",animate:{opacity:[1,.2,1]},transition:{repeat:1/0,duration:1,ease:"easeInOut"}})]})}function Kt(){const e=K();return s.jsxs("div",{className:"flex flex-col gap-3 text-lg leading-relaxed text-te-fg md:text-xl",children:[s.jsx("div",{className:"font-mono text-lg text-te-accent md:text-xl",children:e.polishedHeader}),s.jsx("ol",{className:"flex flex-col gap-2",children:e.polishedList.map((t,i)=>s.jsxs(f.li,{className:"flex items-baseline gap-3",initial:{opacity:0,x:-6},animate:{opacity:1,x:0},transition:{duration:.35,delay:.15+i*.08},children:[s.jsxs("span",{className:"font-mono text-base text-te-accent md:text-lg",children:[i+1,"."]}),s.jsx("span",{children:t})]},t))})]})}function Qt(e){return e==="macos"?[{label:"Fn"},{glyph:"⌃",label:"Ctrl"}]:e==="windows"?[{label:"Alt"},{glyph:s.jsx(Ge,{size:13}),label:"Win"}]:[{glyph:"⌃",label:"Ctrl"},{glyph:s.jsx(Ke,{size:11,strokeWidth:2.5}),label:"Super"}]}function Jt({stage:e}){const t=x.useMemo(()=>$e(),[]),i=x.useMemo(()=>Qt(t),[t]),n=e==="recording";return s.jsx("div",{className:"flex h-[52px] items-center gap-2",children:i.map((r,a)=>s.jsxs(x.Fragment,{children:[a>0&&s.jsx("span",{className:"font-mono text-base text-te-light-gray/60",children:"+"}),s.jsx(Zt,{pressed:n,glyph:r.glyph,label:r.label})]},r.label))})}function Zt({pressed:e,glyph:t,label:i}){return s.jsxs(f.span,{animate:{y:e?2:0,scale:e?.97:1},transition:{duration:.12,ease:"easeOut"},className:"inline-flex h-[52px] min-w-[64px] items-center justify-center gap-1.5 border px-3 font-mono text-xs uppercase tracking-[0.15em] transition-colors "+(e?"border-te-accent bg-te-accent/15 text-te-accent shadow-[inset_0_-3px_0_0_var(--te-accent)]":"border-te-gray bg-te-bg text-te-fg shadow-[inset_0_-3px_0_0_var(--te-gray)]"),children:[t&&s.jsx("span",{className:"opacity-80",children:t}),s.jsx("span",{children:i})]})}function ei({stage:e}){const t=e==="recording",i=e==="recording";return s.jsxs("div",{className:"flex h-[52px] w-[340px] max-w-full items-center gap-2 border border-te-gray bg-te-bg px-2",children:[s.jsx("button",{type:"button",disabled:!i,"aria-label":"cancel",className:i?"flex size-9 shrink-0 items-center justify-center border border-te-gray text-te-fg transition-colors hover:border-te-accent hover:text-te-accent":"flex size-9 shrink-0 items-center justify-center border border-te-gray/40 text-te-light-gray/40",children:s.jsx(Ue,{className:"size-4"})}),s.jsx("div",{className:"flex min-w-0 flex-1 items-center justify-center",children:s.jsxs(U,{mode:"wait",initial:!1,children:[e==="recording"&&s.jsx(f.div,{className:"flex h-full w-full items-center justify-center",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.12},children:s.jsx(ti,{})},"wave"),e==="transcribing"&&s.jsx(V,{label:"// 转写中"},"transcribing"),e==="polishing"&&s.jsx(V,{label:"// 清洗中"},"polishing"),e==="injecting"&&s.jsx(V,{label:"// 注入中"},"injecting"),e==="idle"&&s.jsx(f.div,{className:"flex h-full w-full items-center justify-center",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.12},children:s.jsx("span",{className:"font-mono text-[11px] uppercase tracking-[0.15em] text-te-light-gray/50",children:"// 待机"})},"idle")]})}),s.jsx("button",{type:"button",disabled:!t,"aria-label":"confirm",className:t?"flex size-9 shrink-0 items-center justify-center border border-te-accent text-te-accent transition-colors hover:bg-te-accent hover:text-te-accent-fg":"flex size-9 shrink-0 items-center justify-center border border-te-gray/40 text-te-light-gray/40",children:s.jsx(qe,{className:"size-4"})})]})}function V({label:e}){return s.jsxs(f.div,{className:"flex h-full w-full flex-col items-center justify-center gap-1.5 px-2",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.12},children:[s.jsx("span",{className:"font-mono text-[11px] uppercase tracking-[0.15em] text-te-fg",children:e}),s.jsx(ii,{})]})}function ti(){return s.jsx("div",{className:"flex h-9 w-full items-center gap-[2px]",children:Array.from({length:36}).map((t,i)=>{const n=Math.abs(Math.sin(i*.7))*.7+.3;return s.jsx(f.span,{className:"block flex-1 rounded-[1px] bg-te-accent",style:{height:"100%",originY:.5},animate:{scaleY:[n*.3,n*1,n*.5,n*.85,n*.4]},transition:{repeat:1/0,duration:.7+i%5*.1,ease:"easeInOut",delay:i%7*.04}},i)})})}function ii(){return s.jsx("div",{className:"relative h-px w-24 overflow-hidden bg-te-gray/40",children:s.jsx(f.span,{className:"absolute inset-y-0 bg-te-accent",style:{width:"33%"},initial:{left:"-33%"},animate:{left:"100%"},transition:{repeat:1/0,duration:1.1,ease:"linear"}})})}const X={hidden:{opacity:0,y:24},visible:e=>({opacity:1,y:0,transition:{duration:.75,delay:.1+e*.12,ease:[.25,.4,.25,1]}})};function si(){const[e]=x.useState(!0),t=Yt(e);return s.jsxs("section",{"data-promo-section":!0,className:"relative flex min-h-screen w-full flex-col items-center justify-center overflow-hidden pt-24 pb-12",children:[s.jsx(Vt,{}),s.jsxs("div",{className:"relative z-10 mx-auto flex w-full max-w-6xl flex-col items-center gap-6 px-[4vw] text-center",children:[s.jsxs(f.h1,{custom:0,variants:X,initial:"hidden",animate:"visible",className:"whitespace-nowrap font-mono font-bold leading-[1] tracking-tighter text-[clamp(1.5rem,4.2vw,3.25rem)]",children:[s.jsx("span",{className:"bg-gradient-to-b from-te-fg to-te-fg/70 bg-clip-text text-transparent",children:"Open"}),s.jsxs("span",{className:"relative bg-gradient-to-r from-te-accent to-te-accent/80 bg-clip-text text-transparent",children:["Speech",s.jsx("span",{className:"absolute -inset-1 -z-10 blur-2xl bg-te-accent/30"})]}),s.jsx("span",{className:"mx-3 text-te-light-gray/40",children:"/"}),s.jsx("span",{className:"bg-gradient-to-b from-te-fg to-te-fg/70 bg-clip-text text-transparent",children:"动嘴说,让"}),s.jsxs("span",{className:"relative bg-gradient-to-r from-te-accent to-te-accent/80 bg-clip-text text-transparent",children:["键盘",s.jsx("span",{className:"absolute -inset-1 -z-10 blur-2xl bg-te-accent/30"})]}),s.jsx("span",{className:"bg-gradient-to-b from-te-fg to-te-fg/70 bg-clip-text text-transparent",children:"休息。"})]}),s.jsx(f.p,{custom:1,variants:X,initial:"hidden",animate:"visible",className:"max-w-xl text-balance text-sm leading-relaxed text-te-light-gray/70 md:text-base",children:"按下快捷键说话,AI 自动转写、清洗口误、注入到任意应用。"}),s.jsxs(f.div,{custom:2,variants:X,initial:"hidden",animate:"visible",className:"relative mt-2 w-full max-w-3xl",children:[s.jsx("div",{className:"absolute -inset-x-12 -inset-y-8 -z-10 opacity-70",style:{background:"radial-gradient(ellipse 60% 50% at 50% 50%, rgba(255,204,0,0.18), transparent 70%)",filter:"blur(40px)"}}),s.jsx("div",{className:"border border-te-gray/40 bg-te-bg/60 p-px shadow-[0_30px_120px_-20px_rgba(255,204,0,0.18)] backdrop-blur-sm",children:s.jsx(Ut,{stage:t})}),s.jsxs("div",{className:"mt-6 flex flex-wrap items-center justify-center gap-4",children:[s.jsx(Jt,{stage:t}),s.jsx(ei,{stage:t})]})]})]}),s.jsxs(f.a,{href:"#download",initial:{opacity:0,y:16},animate:{opacity:1,y:0},transition:{duration:.7,delay:.7,ease:[.25,.4,.25,1]},className:"group absolute bottom-8 left-1/2 z-20 inline-flex -translate-x-1/2 flex-col items-center gap-2",children:[s.jsxs("span",{className:"inline-flex items-center gap-2.5 border border-te-gray/50 bg-te-bg/30 px-6 py-2 font-mono text-[11px] uppercase tracking-[0.25em] text-te-fg/70 backdrop-blur-md transition-colors group-hover:border-te-accent group-hover:text-te-accent",children:["免费下载",s.jsx("span",{className:"text-te-light-gray/50 group-hover:text-te-accent/70",children:"macOS · Windows · Linux"})]}),s.jsx(f.span,{"aria-hidden":!0,animate:{y:[0,5,0]},transition:{duration:1.8,repeat:1/0,ease:"easeInOut"},className:"font-mono text-sm text-te-light-gray/40 group-hover:text-te-accent",children:"↓"})]}),s.jsx("div",{className:"pointer-events-none absolute inset-x-0 bottom-0 z-[5] h-32 bg-gradient-to-t from-te-bg to-transparent"})]})}const ni=[{icon:Qe,meta:"AI · Polish",title:"AI 自动清洗口误",body:"「嗯…那个…」「啊…对…」自我纠错全部抹平,再按你想要的风格——结构化清单、邮件、技术文档——重排输出。",span:"md:col-span-3 md:row-span-2",accent:!0},{icon:lt,meta:"Privacy",title:"本地优先 · 零追踪",body:"音频帧只发到你配置的 ASR endpoint,OpenSpeech 不存任何录音、不做任何埋点。",span:"md:col-span-3 md:row-span-1"},{icon:Je,meta:"Hotkey",title:"全局快捷键",body:"Fn+Ctrl / Alt+Win / Ctrl+Super 默认绑定,可改任意单键 PTT 或修饰键双击。",span:"md:col-span-3 md:row-span-1"},{icon:nt,meta:"ASR",title:"任意 ASR 后端",body:"OpenAI Whisper、Deepgram、火山引擎、阿里云 NLS、自部署 whisper.cpp / sherpa-onnx——只要给个 endpoint。",span:"md:col-span-2 md:row-span-1"},{icon:at,meta:"Cross-Platform",title:"全平台",body:"macOS · Windows · Linux 同一份 Tauri bundle,原生体感。",span:"md:col-span-2 md:row-span-1"},{icon:Ze,meta:"History",title:"可撤销历史",body:"最近 N 条注入历史,一键撤销 / 复制 / 重新转写。",span:"md:col-span-2 md:row-span-1"}];function ri(){return s.jsxs("section",{id:"features","data-promo-section":!0,className:"relative bg-te-bg px-[4vw] py-[clamp(5rem,11vw,9rem)]",children:[s.jsx("div",{className:"pointer-events-none absolute inset-0 opacity-[0.4]",style:{backgroundImage:"linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px)",backgroundSize:"80px 80px",maskImage:"radial-gradient(ellipse 80% 60% at 50% 50%, #000 30%, transparent 90%)",WebkitMaskImage:"radial-gradient(ellipse 80% 60% at 50% 50%, #000 30%, transparent 90%)"}}),s.jsxs("div",{className:"relative mx-auto max-w-6xl",children:[s.jsxs(f.div,{className:"mb-14 flex flex-col gap-6 border-b border-te-gray/30 pb-8 md:mb-20 md:flex-row md:items-end md:justify-between",initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.6},children:[s.jsxs("div",{className:"flex flex-col gap-3",children:[s.jsx("span",{className:"font-mono text-xs uppercase tracking-[0.3em] text-te-light-gray/50",children:"[03] · Features"}),s.jsxs("h2",{className:"max-w-2xl font-mono text-3xl font-bold leading-[1.05] tracking-tighter text-te-fg md:text-5xl",children:["不是又一个语音工具,",s.jsx("br",{}),s.jsx("span",{className:"text-te-accent",children:"是把说话变成生产力。"})]})]}),s.jsx("p",{className:"max-w-sm text-sm leading-relaxed text-te-light-gray/60 md:text-right",children:"围绕真实工作流设计——开会、写代码、写文档、记灵感——让说出来的话直接落到光标里成为可用的文本。"})]}),s.jsx("div",{className:"grid grid-cols-1 gap-3 md:auto-rows-[minmax(140px,auto)] md:grid-cols-6",children:ni.map((e,t)=>s.jsx(ai,{feature:e,index:t},e.title))})]})]})}function ai({feature:e,index:t}){const i=e.icon;return s.jsxs(f.article,{initial:{opacity:0,y:18},whileInView:{opacity:1,y:0},viewport:{once:!0,margin:"-10% 0px"},transition:{duration:.5,delay:t*.07},className:"group relative flex flex-col justify-between gap-6 overflow-hidden border border-te-gray/30 bg-te-surface/40 p-6 transition-colors hover:border-te-accent/50 md:p-8 "+e.span,children:[e.accent&&s.jsx("div",{className:"pointer-events-none absolute inset-0 opacity-60",style:{background:"radial-gradient(ellipse 80% 60% at 100% 0%, rgba(255,204,0,0.10), transparent 70%)"}}),s.jsxs("div",{className:"absolute right-5 top-5 flex items-center gap-1.5 font-mono text-[10px] uppercase tracking-[0.25em] text-te-light-gray/40",children:[s.jsx("span",{className:"size-1 rounded-full bg-te-light-gray/50"}),e.meta]}),s.jsxs("div",{className:"relative flex size-12 items-center justify-center border border-te-gray/40 bg-te-bg/60 text-te-accent transition-colors group-hover:border-te-accent/60",children:[s.jsx(i,{className:"size-5",strokeWidth:1.6}),s.jsx("span",{className:"absolute -inset-px -z-10 bg-te-accent/0 blur-xl transition-colors group-hover:bg-te-accent/10"})]}),s.jsxs("div",{className:"relative flex flex-col gap-2",children:[s.jsx("h3",{className:"font-mono text-xl font-bold tracking-tight text-te-fg md:text-2xl",children:e.title}),s.jsx("p",{className:"text-sm leading-relaxed text-te-light-gray/65",children:e.body})]}),s.jsx("div",{className:"absolute bottom-0 left-0 h-px w-0 bg-te-accent transition-all duration-500 group-hover:w-full"})]})}const oi=[{question:"OpenSpeech 是免费的吗?",answer:"客户端源码公开、个人非商业使用免费,你只需自备一个 ASR 服务(OpenAI Whisper API、自部署 whisper、第三方实时 ASR 等都行)。商业用途请联系作者获取授权。"},{question:"支持哪些操作系统?",answer:"macOS(Apple Silicon + Intel)、Windows 10/11、Linux x86_64。三平台同一份 Tauri bundle。"},{question:"语音数据会被上传到 OpenSpeech 吗?",answer:"不会。音频帧只发送到你自己配置的 ASR endpoint。OpenSpeech 不存任何录音、不做日志埋点。"},{question:"支持哪些 ASR 模型?",answer:"任何 REST/Realtime ASR endpoint:OpenAI Whisper、Deepgram、火山引擎 ASR、阿里云 NLS、自部署 whisper.cpp、自部署 sherpa-onnx。"},{question:"怎么唤起?快捷键能改吗?",answer:"默认 macOS 是 Fn + Control,Windows 是 Alt + Win,Linux 是 Ctrl + Super,按一下开始、再按一下结束。在设置里可以改成任意全局快捷键组合、单键 PTT 或修饰键双击。"},{question:"转写错了能撤销吗?",answer:"可以。每次注入文字后会保留历史记录,最近 N 条可一键撤销/复制/重新转写。"}];function li(){const[e,t]=x.useState(null);return s.jsx("section",{id:"faq","data-promo-section":!0,className:"bg-te-bg px-[4vw] py-[clamp(4rem,10vw,8rem)]",children:s.jsxs("div",{className:"mx-auto max-w-3xl",children:[s.jsxs(f.div,{className:"mb-12 md:mb-16",initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.6},children:[s.jsx("div",{className:"mb-3 font-mono text-xs uppercase tracking-[0.3em] text-te-light-gray/50",children:"[03] · FAQ"}),s.jsx("h2",{className:"font-mono text-3xl font-bold leading-[1.05] tracking-tighter text-te-fg md:text-5xl",children:"常见问题"}),s.jsxs("p",{className:"mt-4 max-w-xl text-sm leading-relaxed text-te-light-gray/60",children:["没找到答案?打开"," ",s.jsx("a",{href:"https://github.com/OpenLoaf/OpenSpeech/issues",target:"_blank",rel:"noreferrer",className:"text-te-accent underline-offset-4 hover:underline",children:"GitHub Issues"})," ","提问。"]})]}),s.jsx("div",{className:"divide-y divide-te-gray/30",children:oi.map((i,n)=>{const r=e===n;return s.jsxs(f.div,{initial:{opacity:0,y:12},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.4,delay:n*.05},children:[s.jsxs("button",{type:"button",className:"group flex w-full items-center justify-between gap-4 py-5 text-left",onClick:()=>t(r?null:n),"aria-expanded":r,children:[s.jsx("span",{className:"font-mono text-sm font-bold tracking-tight text-te-fg/90 transition-colors group-hover:text-te-accent",children:i.question}),s.jsx(f.span,{className:"ml-4 shrink-0 font-mono text-lg leading-none text-te-light-gray",animate:{rotate:r?45:0},transition:{duration:.2},children:"+"})]}),s.jsx(U,{initial:!1,children:r&&s.jsx(f.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.3},className:"overflow-hidden",children:s.jsx("p",{className:"pb-5 pr-8 text-sm leading-relaxed text-te-light-gray/60",children:i.answer})},"content")})]},i.question)})})]})})}var ke={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},pe=E.createContext&&E.createContext(ke),ci=["attr","size","title"];function hi(e,t){if(e==null)return{};var i,n,r=di(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)i=a[n],t.indexOf(i)===-1&&{}.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}function di(e,t){if(e==null)return{};var i={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.indexOf(n)!==-1)continue;i[n]=e[n]}return i}function C(){return C=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var n in i)({}).hasOwnProperty.call(i,n)&&(e[n]=i[n])}return e},C.apply(null,arguments)}function ue(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),i.push.apply(i,n)}return i}function H(e){for(var t=1;t<arguments.length;t++){var i=arguments[t]!=null?arguments[t]:{};t%2?ue(Object(i),!0).forEach(function(n){pi(e,n,i[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):ue(Object(i)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(i,n))})}return e}function pi(e,t,i){return(t=ui(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function ui(e){var t=mi(e,"string");return typeof t=="symbol"?t:t+""}function mi(e,t){if(typeof e!="object"||!e)return e;var i=e[Symbol.toPrimitive];if(i!==void 0){var n=i.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Ee(e){return e&&e.map((t,i)=>E.createElement(t.tag,H({key:i},t.attr),Ee(t.child)))}function D(e){return t=>E.createElement(fi,C({attr:H({},e.attr)},t),Ee(e.child))}function fi(e){var t=i=>{var{attr:n,size:r,title:a}=e,o=hi(e,ci),h=r||i.size||"1em",l;return i.className&&(l=i.className),e.className&&(l=(l?l+" ":"")+e.className),E.createElement("svg",C({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},i.attr,n,o,{className:l,style:H(H({color:e.color||i.color},i.style),e.style),height:h,width:h,xmlns:"http://www.w3.org/2000/svg"}),a&&E.createElement("title",null,a),e.children)};return pe!==void 0?E.createElement(pe.Consumer,null,i=>t(i)):t(ke)}function gi(e){return D({attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z"},child:[]}]})(e)}function xi(e){return D({attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4zM420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7zM223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8zM183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1zm-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3-1.4-4.9 0-9 4.2-12.3zm3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9zm-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2zm257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z"},child:[]}]})(e)}function vi(e){return D({attr:{viewBox:"0 0 384 512"},child:[{tag:"path",attr:{d:"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"},child:[]}]})(e)}function yi(e){return D({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"},child:[]}]})(e)}const bi="0.2.52",wi={version:bi},Oe="https://github.com/OpenLoaf/OpenSpeech/releases",ji="https://github.com/OpenLoaf/OpenSpeech",w=wi.version,z=e=>`${Oe}/download/v${w}/${e}`,Si=[{os:"macOS",icon:vi,tagline:"11 Big Sur+",variants:[{label:"Apple Silicon",arch:"arm64",ext:"DMG",href:z(`OpenSpeech-${w}-macOS-arm64.dmg`)},{label:"Intel",arch:"x86_64",ext:"DMG",href:z(`OpenSpeech-${w}-macOS-intel.dmg`)}]},{os:"Windows",icon:gi,tagline:"10 / 11",variants:[{label:"x64",arch:"x86_64",ext:"EXE",href:z(`OpenSpeech-${w}-Windows-x86_64-setup.exe`)},{label:"ARM64",arch:"arm64",ext:"EXE",href:z(`OpenSpeech-${w}-Windows-arm64-setup.exe`)}]},{os:"Linux",icon:xi,tagline:"Ubuntu / Fedora / Arch",variants:[{label:"AppImage",arch:"x86_64",ext:"APPIMAGE",href:z(`OpenSpeech-${w}-Linux-x86_64.AppImage`)},{label:"Debian",arch:"x86_64",ext:"DEB",href:z(`OpenSpeech-${w}-Linux-x86_64.deb`)},{label:"Red Hat",arch:"x86_64",ext:"RPM",href:z(`OpenSpeech-${w}-Linux-x86_64.rpm`)}]}];function Ni(){if(typeof navigator>"u")return null;const e=navigator.userAgent.toLowerCase();return/mac|iphone|ipad|ipod/.test(e)?"macOS":/win/.test(e)?"Windows":/linux|x11|cros/.test(e)?"Linux":null}function ki({platform:e,isDetected:t}){const[i,n]=x.useState(!1),r=e.icon,a=i||t,o=e.variants[0];return s.jsxs("div",{onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),onFocus:()=>n(!0),onBlur:()=>n(!1),className:`group relative flex flex-col overflow-hidden border bg-te-surface/30 backdrop-blur-sm transition-[border-color,box-shadow] duration-300 ${t?"border-te-accent/70 shadow-[0_0_60px_-20px_rgba(255,204,0,0.4)]":i?"border-te-accent/40":"border-te-gray/40"}`,children:[s.jsx("div",{className:"pointer-events-none absolute inset-x-0 top-0 -z-0 h-48 transition-opacity duration-500",style:{opacity:a?1:.3,background:t?"radial-gradient(ellipse 90% 70% at 50% 0%, rgba(255,204,0,0.22) 0%, transparent 70%)":"radial-gradient(ellipse 90% 70% at 50% 0%, rgba(255,204,0,0.12) 0%, transparent 70%)"}}),t&&s.jsxs("div",{className:"absolute right-3 top-3 z-10 inline-flex items-center gap-1.5 border border-te-accent/60 bg-te-bg/80 px-2 py-0.5 font-mono text-[9px] uppercase tracking-[0.25em] text-te-accent backdrop-blur",children:[s.jsx("span",{className:"size-1 rounded-full bg-te-accent"}),"当前系统"]}),s.jsxs("div",{className:"relative z-10 flex items-center gap-4 px-6 pt-7 pb-5",children:[s.jsx(r,{className:`size-10 shrink-0 transition-colors duration-300 ${t||i?"text-te-accent":"text-te-fg/85"}`}),s.jsxs("div",{className:"flex flex-col leading-tight",children:[s.jsx("div",{className:"font-mono text-xl font-bold tracking-tighter text-te-fg",children:e.os}),s.jsx("div",{className:"font-mono text-[10px] uppercase tracking-[0.25em] text-te-light-gray/50",children:e.tagline})]}),s.jsxs("div",{className:"ml-auto font-mono text-[10px] uppercase tracking-[0.2em] text-te-light-gray/40",children:[e.variants.length," 版本"]})]}),s.jsxs("div",{className:"relative z-10 px-5 pb-5",children:[s.jsxs("a",{href:o.href,download:!0,className:`flex items-center justify-between gap-3 border px-4 py-3 font-mono text-sm font-bold tracking-tight transition-colors duration-200 ${t?"border-te-accent bg-te-accent text-te-bg hover:bg-te-accent/90":"border-te-fg/50 text-te-fg hover:border-te-accent hover:bg-te-accent hover:text-te-bg"}`,children:[s.jsxs("span",{className:"flex flex-col items-start leading-tight",children:[s.jsxs("span",{children:["下载 · ",o.label]}),s.jsxs("span",{className:`mt-0.5 text-[9px] font-normal uppercase tracking-[0.2em] ${t?"text-te-bg/60":"text-te-light-gray/55"}`,children:[o.arch," · ",o.ext]})]}),s.jsx(it,{className:"size-4 shrink-0"})]}),e.variants.length>1&&s.jsx("div",{className:"grid transition-[grid-template-rows,opacity] duration-300 ease-out",style:{gridTemplateRows:a?"1fr":"0fr",opacity:a?1:0},children:s.jsx("div",{className:"overflow-hidden",children:s.jsx("div",{className:"flex flex-col gap-1.5 pt-2.5",children:e.variants.slice(1).map(h=>s.jsxs("a",{href:h.href,download:!0,className:"flex items-center justify-between gap-3 border border-te-gray/40 px-3 py-2 font-mono text-xs tracking-tight text-te-light-gray/80 transition-colors hover:border-te-accent hover:text-te-accent",children:[s.jsx("span",{children:h.label}),s.jsx("span",{className:"font-mono text-[9px] uppercase tracking-[0.2em] text-te-light-gray/40",children:h.ext})]},h.label))})})})]})]})}function Ei(){const e=x.useMemo(Ni,[]);return s.jsxs("section",{id:"download",className:"relative px-[4vw] py-[clamp(6rem,12vw,10rem)]",children:[s.jsx("div",{className:"pointer-events-none absolute inset-0",style:{backgroundImage:`
|
|
2
2
|
linear-gradient(var(--te-fg) 1px, transparent 1px),
|
|
3
3
|
linear-gradient(90deg, var(--te-fg) 1px, transparent 1px),
|
|
4
4
|
radial-gradient(circle at center, transparent 30%, var(--te-bg) 100%)
|
package/dist/index.html
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>OpenSpeech</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/main-
|
|
8
|
-
<link rel="modulepreload" crossorigin href="/assets/App-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/App-
|
|
7
|
+
<script type="module" crossorigin src="/assets/main-BTc7NyZo.js"></script>
|
|
8
|
+
<link rel="modulepreload" crossorigin href="/assets/App-BFpSUQKp.js">
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/App-CWEdoK1C.css">
|
|
10
10
|
</head>
|
|
11
11
|
|
|
12
12
|
<body>
|
package/dist/promo.html
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<meta name="description" content="OpenSpeech — 按住快捷键说话,松开即把文字写入当前应用。跨平台 AI 语音输入桌面应用。" />
|
|
8
8
|
<title>OpenSpeech · Voice Typing for Every App</title>
|
|
9
|
-
<script type="module" crossorigin src="/assets/promo-
|
|
10
|
-
<link rel="modulepreload" crossorigin href="/assets/App-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/App-
|
|
9
|
+
<script type="module" crossorigin src="/assets/promo-DgJRN6om.js"></script>
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/App-BFpSUQKp.js">
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/App-CWEdoK1C.css">
|
|
12
12
|
<link rel="stylesheet" crossorigin href="/assets/promo-BNWJ7Zcm.css">
|
|
13
13
|
</head>
|
|
14
14
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openloaf/openspeech-frontend",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.53",
|
|
4
4
|
"description": "OpenSpeech desktop app frontend (prebuilt assets). Source code is private; this package only exposes the built dist/ for Tauri to bundle.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|