weifuwu 0.65.0 → 0.65.1
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/README.md +3 -3
- package/dist/client/index.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/style.css +14 -8
- package/dist/layout/weifuwu-layout.css +2 -0
- package/docs/layout.md +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -305,7 +305,7 @@ cd apps/agent-platform && npm run seed && npm run dev
|
|
|
305
305
|
|------|---------|------|
|
|
306
306
|
| `weifuwu/client` | `https://unpkg.com/weifuwu@latest/dist/client/index.js` | 客户端核心(createApp, h, 路由, 状态管理等) |
|
|
307
307
|
| `weifuwu/components` | `https://unpkg.com/weifuwu@latest/dist/components/index.js` | 92 个 UI 组件(Button, Card, Table, Modal, Icon 等) |
|
|
308
|
-
| `weifuwu/components` | `https://unpkg.com/weifuwu@latest/dist/components/style.css` | 组件 CSS +
|
|
308
|
+
| `weifuwu/components` | `https://unpkg.com/weifuwu@latest/dist/components/style.css` | 组件 CSS + 143 个主题 Token + 70 个布局原语 |
|
|
309
309
|
| 独立布局系统 | `https://unpkg.com/weifuwu@latest/dist/layout/weifuwu-layout.css` | 仅 CSS 布局,不依赖 JS |
|
|
310
310
|
|
|
311
311
|
|
|
@@ -347,7 +347,7 @@ cd apps/agent-platform && npm run seed && npm run dev
|
|
|
347
347
|
| `weifuwu/client` | **popup** | 弹层 fixed 定位工具(`computeFixedPos` / `computeFixedPosRect` / `clampToViewport`) | — |
|
|
348
348
|
| `weifuwu/client` | **事件原语** | `usePopup` / `useDialog` / `usePresence` / `useInView` / `useScrollPosition` / `useGlobalKey` / `useDrag` / `useDragDrop` / `useAnimationEnd` / `useTween` / `useReducedMotion`(浏览器事件/动画统一入口,见 [docs/mobile.md](docs/mobile.md)) | — |
|
|
349
349
|
| `weifuwu/components` | **92 个组件** | Button/Table/Modal/Confirm/Toast/... + `confirm()` / `toast()` 命令式中间件 | weifuwu/client |
|
|
350
|
-
| `weifuwu/layout` | **CSS 布局** | 70 个布局原语 +
|
|
350
|
+
| `weifuwu/layout` | **CSS 布局** | 70 个布局原语 + 143 个主题 Token(也支持 `weifuwu/layout/style.css`) | — |
|
|
351
351
|
|
|
352
352
|
---
|
|
353
353
|
|
|
@@ -491,7 +491,7 @@ README 只保留入门内容(设计理念 / 快速开始 / 核心概念 / 模
|
|
|
491
491
|
| [docs/frontend.md](docs/frontend.md) | 前端核心:createApp / 组件模型 / 状态管理 / 条件与列表 / ref / 类型 |
|
|
492
492
|
| [docs/frontend-middleware.md](docs/frontend-middleware.md) | 前端中间件:router / api / auth / ws / i18n / ErrorBoundary / confirm / toast / ScrollLock / extendCtx |
|
|
493
493
|
| [docs/components.md](docs/components.md) | 组件库(92 个组件 + 使用示例 + 组件列表) |
|
|
494
|
-
| [docs/layout.md](docs/layout.md) | 布局系统:70 个布局原语 +
|
|
494
|
+
| [docs/layout.md](docs/layout.md) | 布局系统:70 个布局原语 + 143 个主题 Token |
|
|
495
495
|
| [docs/styling.md](docs/styling.md) | 样式定制指南:零自定义 CSS 模式 / 暗色 / 组件级覆盖 / 作用域主题 |
|
|
496
496
|
|
|
497
497
|
### 通用
|
package/dist/client/index.js
CHANGED
|
@@ -2,4 +2,4 @@ var Oe="__wfAsyncComponent";function cn(e){let n=e;return n[Oe]=!0,n}function z(
|
|
|
2
2
|
|
|
3
3
|
`);o=u.pop()??"";for(let f of u){let c="message",d="";for(let y of f.split(`
|
|
4
4
|
`))y.startsWith("event: ")?c=y.slice(7):y.startsWith("data: ")&&(d+=y.slice(6));if(d)try{yield{name:c,data:JSON.parse(d)}}catch{}}}}finally{n.releaseLock()}}function Nn(e,n,t){t&&(e.length>=1e3&&e.shift(),e.push(n))}function Ln(e){return e===401||e===403?"auth_failed":e===429?"rate_limited":e>=500?"provider_error":"invalid_request"}function Mn(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Je(e){return e.map(n=>({role:n.role,content:n.content}))}function Se(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`msg-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Qe(e,n,t){t.initialMessages?e.messages=structuredClone(t.initialMessages):e.messages===void 0&&(e.messages=[]),e.input===void 0&&(e.input=""),e.streaming===void 0&&(e.streaming=!1),e.error===void 0&&(e.error=null),e.usage===void 0&&(e.usage=null),e.step===void 0&&(e.step=null);let o=null;function s(){if(!e.streaming)return;let r=e.messages[e.messages.length-1];return r&&r.role==="assistant"&&r.status==="streaming"?r:void 0}function l(r,i,a){let p=s();switch(r){case"wf:token":p&&(p.content+=i.text);break;case"wf:tool_call":{p&&(p.toolCalls||(p.toolCalls=[]),p.toolCalls.push({call:i,status:"running"}));break}case"wf:tool_progress":{let m=i,h=p?.toolCalls?.find(w=>w.call.id===m.toolCallId);h&&(h.progress=m);break}case"wf:tool_result":{let m=i,h=p?.toolCalls?.find(w=>w.call.id===m.id);h&&(h.result=m,h.status=m.ok?"ok":"error");break}case"wf:approval_request":p&&(p.approval=i);break;case"wf:usage":p&&(p.usage=i);break;case"wf:step":e.step=i;break;case"wf:done":p&&(p.status="done",p.approval=void 0),e.streaming=!1,e.step=null;break;case"wf:error":p&&(p.status="error",p.error=i,p.approval=void 0),e.error=i,e.streaming=!1,e.step=null;break;default:a?.(r,i);break}}function u(){let r=t.body?t.body(e.messages):{messages:Je(e.messages)};o=n(t.url,r,{onToken:a=>l("wf:token",{text:a}),onToolCall:a=>l("wf:tool_call",a),onToolProgress:a=>l("wf:tool_progress",a),onToolResult:a=>l("wf:tool_result",a),onApproval:a=>l("wf:approval_request",a),onUsage:a=>l("wf:usage",a),onStep:a=>l("wf:step",a),onDone:a=>l("wf:done",a),onError:a=>l("wf:error",a),onEvent:(a,p)=>l(a,p,t.onEvent)},{signal:t.signal,headers:t.headers}),e.streaming=!0;let i=s();i&&o?.traceId&&(i.id=o.traceId)}function f(){if(e.streaming)return;let r=String(e.input??"").trim();r&&(e.input="",e.error=null,e.usage=null,e.step=null,e.messages.push({id:Se(),role:"user",content:r,status:"done"},{id:Se(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),u())}function c(){o?.abort(),e.streaming=!1,e.step=null;let r=e.messages[e.messages.length-1];r&&r.role==="assistant"&&r.status==="streaming"&&(!r.content&&(!r.toolCalls||r.toolCalls.length===0)?e.messages.pop():r.status="done")}function d(){if(e.streaming)return;let r=-1;for(let i=e.messages.length-1;i>=0;i--)if(e.messages[i].role==="user"){r=i;break}r!==-1&&(e.messages.splice(r+1),e.error=null,e.usage=null,e.step=null,e.messages.push({id:Se(),role:"assistant",content:"",status:"streaming",toolCalls:[]}),u())}function y(){o?.abort(),e.messages=[],e.input="",e.streaming=!1,e.error=null,e.usage=null,e.step=null}async function g(r,i){let a=e.messages[e.messages.length-1],p=a?.role==="assistant"?a.approval:void 0;if(p&&(a.approval=void 0,!!t.approveUrl))try{await fetch(t.approveUrl,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify({id:p.id,decision:r,note:i}),signal:t.signal})}catch(m){if(t.signal?.aborted)return;e.error={code:"provider_error",message:m instanceof Error?m.message:String(m)}}}function E(){o?.abort(),o=null}return{send:f,stop:c,retry:d,clear:y,approve:g,dispose:E}}function ue(e,n="bottom",t=6,o=!0){switch(n){case"bottom":return{top:e.bottom+t,left:o?e.left+e.width/2:e.left};case"top":return{top:e.top-t,left:o?e.left+e.width/2:e.left};case"left":return{top:o?e.top+e.height/2:e.top,left:e.left-t};case"right":return{top:o?e.top+e.height/2:e.top,left:e.right+t}}}function On(e,n="bottom",t=6,o=!0){return ue(e.getBoundingClientRect(),n,t,o)}function ce(e,n,t=8){if(!n)return e;let o=n.getBoundingClientRect();if(o.width===0&&o.height===0)return e;let s=Number.parseFloat(n.style.top)||o.top,l=Number.parseFloat(n.style.left)||o.left,u=e.top-s,f=e.left-l,c={top:o.top+u,bottom:o.bottom+u,left:o.left+f,right:o.right+f},d=window.innerWidth,y=window.innerHeight,g=e.top,E=e.left;return c.bottom>y-t&&(g=Math.max(t,g-(c.bottom-(y-t)))),c.top<t&&(g=Math.max(t,g+(t-c.top))),c.right>d-t&&(E=Math.max(t,E-(c.right-(d-t)))),c.left<t&&(E=Math.max(t,E+(t-c.left))),{top:g,left:E,width:e.width}}var Ze=new Set,ee=new Map;function en(e){let{ctx:n,renderByIds:t,getSelfId:o,dirtyBatch:s,dirtySet:l,mediaRegistry:u,popupTrackers:f,scrollTrackers:c,schedulePopupRecompute:d,ensurePopupListeners:y,isRendering:g}=e;return{_selfId:"_wf_root",_ctxVersion:0,_dirtySet:l,bumpCtxVersion:function(){this._ctxVersion++},render:function(r){if(!r||r.length===0){let i=o(this);if(i)r=[i];else return}t(r)},dirty:function(r){if(!g()){if(!r||r.length===0){let i=o(this);if(i)r=[i];else return}for(let i of r)i&&(s.add(i),l.add(i));this._dirtyScheduled||(this._dirtyScheduled=!0,queueMicrotask(()=>{this._dirtyScheduled=!1;let i=[...s];s.clear(),i.length>0&&t(i)}))}},$:function(){let r=this;if(!r._$cache){let i=o(this);r._$cache=le(()=>n.ui.dirty(i?[i]:void 0))}return r._$cache},useChat:function(r){let i=this.$(),a=Qe(i,Re,r);return Object.assign(i,{send:a.send,stop:a.stop,retry:a.retry,clear:a.clear,approve:a.approve,dispose:a.dispose}),i},useMedia:function(r,i){let p=`media:${o(this)}:${r}`;if(!u.has(p)){let m=window.matchMedia(r);i(m.matches);let h=w=>i(w.matches);m.addEventListener("change",h),u.set(p,{mql:m,handler:h})}},useBreakpoint:function(r,i){let a=typeof r=="function"?{mobile:"(max-width: 639px)",tablet:"(min-width: 640px) and (max-width: 1023px)",desktop:"(min-width: 1024px)"}:r,p=typeof r=="function"?r:i,h=`bp:${o(this)}`;function w(){for(let[v,b]of Object.entries(a))if(window.matchMedia(b).matches)return v;return Object.keys(a)[0]??""}if(!u.has(h)){p(w());let v=[];for(let b of Object.values(a)){let T=window.matchMedia(b),C=()=>p(w());T.addEventListener("change",C),v.push({mql:T,handler:C})}u.set(h,{mqls:v})}},usePopupPosition:function(r){let i=o(this),a={top:0,left:0,refresh:()=>{}};if(!i)return a;let p={pos:a,getEl:r.el,isOpen:r.isOpen,compute:r.compute,panel:r.panel,margin:r.margin??8};return f.set(i,p),y(),a.refresh=()=>{let m=p.getEl();if(!m)return;let h=p.compute(m.getBoundingClientRect());Object.assign(a,ce(h,p.panel?.(),p.margin))},a},useHoverCapable:function(){return typeof window<"u"&&!!window.matchMedia?.("(hover: hover)").matches},useStableRef:function(r,i){return p=>{p?r(p):i?.()}},useVisualViewport:function(){let r=o(this),i={height:window.innerHeight,offsetTop:0,keyboardOpen:!1},a=()=>{n.ui&&n.ui.dirty(r?[r]:void 0)},p=()=>{let h=window.visualViewport;i.height=h?.height??window.innerHeight,i.offsetTop=h?.offsetTop??0,i.keyboardOpen=i.height<window.innerHeight*.9,a()},m=window.visualViewport;return m?.addEventListener?(m.addEventListener("resize",p),m.addEventListener("scroll",p)):window.addEventListener("resize",p),r&&F(h=>{h===r&&(m?.removeEventListener?(m.removeEventListener("resize",p),m.removeEventListener("scroll",p)):window.removeEventListener("resize",p))}),i},usePopup:function(r){let i=o(this),a=this.useHoverCapable(),p=()=>typeof r.trigger=="function"?r.trigger():r.trigger,m=r.open!==void 0,h=()=>!!r.disabled?.(),w=()=>m?typeof r.open=="function"?!!r.open():!!r.open:r.isOpen(),v=P=>{h()||(m?r.onOpenChange?.(P):r.setOpen(P))},b=()=>{let P=r.placement;return typeof P=="function"?P():P??"bottom"},T=null,C=!1,x=n.ui.usePopupPosition({el:r.el,isOpen:()=>w(),compute:P=>{if(r.position){let M=r.position();return{top:M.y,left:M.x}}return ue(P,b(),r.gap??6,r.center!==!1)},panel:()=>T,margin:r.margin??8}),A=P=>{if(r.closeOnOutside===!1||!w())return;let M=P.target;if(!(M instanceof Node))return;let q=r.el();q&&q.contains(M)||T&&T.contains(M)||v(!1)},S=P=>{r.closeOnEscape!==!1&&(P.key!=="Escape"||!w()||v(!1))};document.addEventListener("mousedown",A),document.addEventListener("keydown",S),i&&F(P=>{P===i&&(document.removeEventListener("mousedown",A),document.removeEventListener("keydown",S))});let R={},_=P=>typeof P=="function"?P():P??0,k=()=>_(r.openDelay),j=()=>_(r.closeDelay),O,W,sn=()=>{clearTimeout(O),clearTimeout(W),O=void 0,W=void 0};if(p()==="hover")a?(R.onMouseEnter=()=>{h()||(clearTimeout(W),W=void 0,O=setTimeout(()=>{O=void 0,v(!0)},k()))},R.onMouseLeave=()=>{h()||(clearTimeout(O),O=void 0,W=setTimeout(()=>{W=void 0,v(!1)},j()))}):R.onClick=()=>v(!w()),R.onFocus=()=>{h()||(clearTimeout(W),W=void 0,O=setTimeout(()=>{O=void 0,v(!0)},k()))},R.onBlur=()=>{h()||(clearTimeout(O),O=void 0,W=setTimeout(()=>{W=void 0,v(!1)},j()))};else if(p()==="click")R.onClick=()=>v(!w());else if(p()==="longpress"){let P,M=0,q=0,U=()=>{clearTimeout(P),P=void 0};R.onPointerDown=I=>{h()||(M=I.clientX??0,q=I.clientY??0,U(),P=setTimeout(()=>{P=void 0,r.onTrigger?.({clientX:M,clientY:q}),v(!0)},r.longPressDuration??500))},R.onPointerUp=U,R.onPointerLeave=U,R.onPointerMove=I=>{let pe=Math.abs((I.clientX??0)-M),me=Math.abs((I.clientY??0)-q);(pe>10||me>10)&&U()},R.onContextMenu=I=>{I.preventDefault(),r.onTrigger?.({clientX:I.clientX??0,clientY:I.clientY??0}),v(!0)}}R.onKeyDown=P=>{P.key==="Escape"&&r.closeOnEscape!==!1&&v(!1)},i&&F(P=>{P===i&&sn()});let an=P=>{if(P){T=P;let M=()=>x.refresh();P.addEventListener("animationend",M,{once:!0})}else T=null},ln=(P,M="popover")=>{if(h())return null;if(!w())return C=!1,null;C||(x.refresh(),C=!0);let U=P.props??{},I=U.ref,pe=["wf-popup",U.class].filter(Boolean).join(" "),me={...U.style??{},position:"fixed",top:`${x.top}px`,left:`${x.left}px`,maxWidth:r.width!==void 0?`min(${r.width}px, calc(100vw - 32px))`:"calc(100vw - 32px)"},un={...P,props:{...U,class:pe,style:me,ref:Me=>{an(Me),I&&I(Me)}}};return ge(un,M)};return{open:w(),setOpen:v,wrapProps:R,portal:ln,refresh:()=>x.refresh()}},useLongPress:function(r){let{onLongPress:i,duration:a=500}=r,p,m=0,h=0,w=null,v=()=>{clearTimeout(p),p=void 0};return{onPointerDown:b=>{m=b.clientX??0,h=b.clientY??0,w=b,v(),p=setTimeout(()=>{p=void 0,i(w)},a)},onPointerUp:v,onPointerLeave:v,onPointerMove:b=>{let T=Math.abs((b.clientX??0)-m),C=Math.abs((b.clientY??0)-h);(T>10||C>10)&&v()},onContextMenu:b=>{b.preventDefault(),i(b)}}},useInView:function(r){let i=o(this),a={isIn:!1,ready:!1,observe:v,refresh:b,disconnect:T},p=null,m=null,h=()=>{n.ui&&n.ui.dirty(i?[i]:void 0)};function w(){if(m?.disconnect(),m=null,!p)return;let C=typeof r.rootMargin=="function"?r.rootMargin():r.rootMargin,x=typeof r.threshold=="function"?r.threshold():r.threshold;m=new IntersectionObserver(A=>{let S=A[A.length-1];if(!S)return;let R=S.isIntersecting,_=R!==a.isIn,k=!a.ready;a.isIn=R,a.ready=!0,r.onChange?.(S,R),(_||k)&&h()},{root:r.root?r.root():null,rootMargin:C??"0px",threshold:x??0}),m.observe(p)}function v(C){p=C,C?w():(m?.disconnect(),m=null,a.isIn=!1)}function b(){w()}function T(){m?.disconnect(),m=null}return a},useScrollPosition:function(r){let i=o(this),a={y:0,refresh(){let m=p.getScroller();a.y=m instanceof Window?document.scrollingElement?.scrollTop??m.scrollY??0:m.scrollTop??0}},p={handle:a,getScroller:r.getScroller??(()=>window)};return i?(c.set(i,p),y(),a.refresh(),a):(a.refresh(),a)},useAsync:function(r){let i=o(this),a=le(()=>{n.ui&&n.ui.dirty(i?[i]:void 0)});a.loading=!0;let p=0,m=()=>{let h=++p;a.loading=!0,a.error=null,Promise.resolve().then(()=>r()).then(w=>{p===h&&(a.data=w,a.loading=!1)}).catch(w=>{p===h&&(a.error=w,a.loading=!1)})};return m(),a.reload=m,a},useControlled:function(r){let i=o(this),a=r.value!==void 0;a&&!r.onChange&&r.name&&(Ze.has(r.name)||(Ze.add(r.name),console.warn(`[weifuwu/${r.name}] \u53D7\u63A7\u6A21\u5F0F\uFF08value \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onChange\uFF0C\u4EA4\u4E92\u65E0\u6CD5\u751F\u6548\u3002
|
|
5
|
-
\u975E\u53D7\u63A7\uFF1A\u53BB\u6389 value\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onChange={(v) => setValue(v)}`))),!a&&i&&!ee.has(i)&&(ee.set(i,r.value),F(m=>{ee.delete(m)}));let p=m=>{if(a){r.onChange?.(m);return}i&&ee.set(i,m),n.ui&&(i?n.ui.dirty([i]):n.ui.render())};return{value:a?r.value:i?ee.get(i):r.value,setValue:p,controlled:a}},usePresence:function(r){let i=o(this),a="closed",p,m=()=>{a="closed",n.ui&&(i?n.ui.dirty([i]):n.ui.render())};return{get phase(){return a},ref:w=>{w?p||(p=()=>{a==="exit"&&m()},w.addEventListener("animationend",p)):(w?.removeEventListener("animationend",p),p=void 0)},sync:w=>(w?a="open":a==="open"&&(a="exit"),a)}},useDialog:function(r){let i=o(this),a,p=null,m=this.usePresence(r);return{get phase(){return m.phase},rootRef:v=>{v?(Ae(),p&&(a=ae(p)),m.ref(v)):(_e(),a?.(),m.ref(null))},panelRef:v=>{p=v,v&&!a&&(a=ae(v))},sync:v=>m.sync(v)}},useGlobalKey:function(r){let i=o(this);return typeof window>"u"?()=>{}:(window.addEventListener("keydown",r),i&&F(a=>{a===i&&window.removeEventListener("keydown",r)}),()=>window.removeEventListener("keydown",r))},useDrag:function(r){let i=0,a=0,p=!1,m=v=>{p&&r.onMove(v,{x:v.clientX-i,y:v.clientY-a})},h=v=>{p&&(p=!1,window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",h),r.onEnd?.(v))};return{onPointerDown:v=>{p||(p=!0,i=v.clientX,a=v.clientY,window.addEventListener("pointermove",m),window.addEventListener("pointerup",h),r.onStart?.(v))}}},useDragDrop:function(r){let i={};return r.onDrop&&(i.onDrop=a=>{a.preventDefault(),r.onDrop(a)}),r.onDragOver&&(i.onDragOver=a=>{a.preventDefault(),r.onDragOver(a)}),r.onDragLeave&&(i.onDragLeave=a=>r.onDragLeave(a)),{dropProps:i}},useReducedMotion:function(){return typeof window<"u"&&!!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches},useAnimationEnd:function(r,i){let a=null,p=()=>{r(),i?.once&&a&&a.removeEventListener("animationend",p)};return h=>{h?(a=h,h.addEventListener("animationend",p)):a&&(a.removeEventListener("animationend",p),a=null)}},useTween:function(r,i){let a=o(this),p=this.useReducedMotion(),m=i?.duration??400,h=i?.ease==="linear"?x=>x:x=>1-Math.pow(1-x,3),w,v=r,b={value:p?r:0,reset:()=>{}},T=()=>{n.ui&&(a?n.ui.dirty([a]):n.ui.render())},C=x=>{if(v=x,p){b.value=x,T();return}if(x===b.value)return;w&&cancelAnimationFrame(w);let A=b.value,S=performance.now(),R=_=>{let k=Math.min(1,(_-S)/m);b.value=Math.round(A+(x-A)*h(k)),k<1?(w=requestAnimationFrame(R),T()):(w=void 0,T())};w=requestAnimationFrame(R)};return b.reset=x=>{x===v&&w||C(x)},queueMicrotask(()=>C(r)),b},selfId:function(r){if(typeof r!="string"||!r)throw new Error(`[weifuwu] selfId requires a non-empty string, got ${typeof r}`);if(L.has(r))throw new Error(`[weifuwu] Duplicate component ID: "${r}". Each component must have a unique custom ID.`);let i=this._selfVNode;i&&(i._customId=r,L.set(r,i))}}}function Wn(){let e=[],n={},t=null,o=null,s=null,l=!1,u=new Set,f=!1,c=new Map;function d(b){let T=c.get(b);T&&(T.mql&&T.handler&&T.mql.removeEventListener("change",T.handler),T.mqls?.forEach(({mql:C,handler:x})=>C.removeEventListener("change",x)),c.delete(b))}let y=new Map,g=!1,E=0;function r(){g||(g=!0,window.addEventListener("scroll",p,{capture:!0,passive:!0}),window.addEventListener("resize",p))}function i(){g&&(window.removeEventListener("scroll",p,{capture:!0}),window.removeEventListener("resize",p),g=!1)}let a=new Map;function p(){E||(E=requestAnimationFrame(()=>{E=0;let b=[];for(let[T,C]of y){if(!C.isOpen())continue;let x=C.getEl();if(!x)continue;let A=C.compute(x.getBoundingClientRect());Object.assign(C.pos,ce(A,C.panel?.(),C.margin)),b.push(T)}for(let[T,C]of a){let x=C.getScroller(),A=x instanceof Window?document.scrollingElement?.scrollTop??x.scrollY??0:x.scrollTop??0;A!==C.handle.y&&(C.handle.y=A,b.push(T))}b.length>0&&n.ui.render(b)}))}function m(b){if(!l){l=!0;for(let T of b){let C=L.get(T);if(!C||!C._render)continue;n.ui._dirtySet?.delete(T);let x=C._child,A=C._render(C.props);if(C._child=A,x&&x._placement==="remote"||A&&A._placement==="remote"){x&&A?Q(x,A,n):A?B(A,n):x&&N(x);continue}if(!C._parentNode&&C._refNode&&(C._parentNode=C._refNode.parentNode),C._parentNode){let S=$(C._parentNode,C._refNode??null,x,A,n);S&&S!==C._refNode?C._refNode=S:S||(C._refNode=null)}}l=!1,h()}}function h(){let b=n.ui;u.size>0&&!b._dirtyScheduled&&(b._dirtyScheduled=!0,queueMicrotask(()=>{b._dirtyScheduled=!1;let T=[...u];u.clear(),T.length>0&&m(T)}))}function w(b){return b?._selfId??n.ui?._selfId}let v={get ctx(){return n},use(b){return e.push(b),v},async mount(b,T,C){o=T;for(let _ of e)n=await _(n);let x=typeof b=="string"?document.querySelector(b):b;if(!x)throw new Error(`mount target not found: ${b}`);t=x;let A=!!C?.hydrate;A||(t.innerHTML="");let S=new Map,R=globalThis.__DATA__;if(R&&typeof R=="object")for(let[_,k]of Object.entries(R))S.set(_,{value:k});if(n.data={async get(_,k){let j=S.get(_);if(j&&"value"in j)return j.value;if(j?.promise)return j.promise;if(!k)return;let O=Promise.resolve().then(()=>k()).then(W=>(S.set(_,{value:W}),W));return S.set(_,{promise:O}),O},set(_,k){S.set(_,{value:k})},has(_){return S.has(_)}},F(_=>{for(let k of[...c.keys()])(k.startsWith(`media:${_}:`)||k===`bp:${_}`)&&d(k);y.delete(_),a.delete(_)}),n.ui=en({ctx:n,renderByIds:m,getSelfId:w,dirtyBatch:u,dirtySet:new Set,mediaRegistry:c,popupTrackers:y,scrollTrackers:a,schedulePopupRecompute:p,ensurePopupListeners:r,destroyPopupListeners:i,isRendering:()=>l}),l=!0,s=Vn(T,n),s._id="_wf_root",s._parentNode=t,s._refNode=A?t.firstChild:null,L.set("_wf_root",s),A)await Pe(t,s,n);else{let _=Ke(s,n);_ instanceof Node&&t.appendChild(_)}s._refNode=t.firstChild,l=!1,h()},destroy(){i(),y.clear(),a.clear();for(let b of[...c.keys()])d(b);L.clear(),t&&(t.innerHTML=""),t=null,n={}}};return v}function Vn(e,n){return{type:e,props:{},key:void 0}}function In(e,n){if(!n||n==="/")return e||"/";let t=e.endsWith("/")?e.slice(0,-1):e,o=n.startsWith("/")?n:"/"+n;return t+o}function Hn(e){let n=[],t=e.replace(/:(\w+)/g,(o,s)=>(n.push(s),"([^/]+)")).replace(/\*/g,".*");return{re:new RegExp(`^${t}$`),keys:n}}function ke(e,n="",t=[]){let o=[];for(let s of e){let l=In(n,s.path),{re:u,keys:f}=Hn(l),c=[...t,s];o.push({re:u,keys:f,def:s,chain:c}),s.children&&o.push(...ke(s.children,l,c))}return o}function nn(e,n){let t=null;for(let o of n)e.match(o.re)&&(!t||o.chain.length>t.chain.length)&&(t=o);return t}function tn(e,n){let t={},o=e.match(n.re);if(o)for(let s=0;s<n.keys.length;s++)t[n.keys[s]]=decodeURIComponent(o[s+1]);return t}function Un(e){let n=ke(e.routes),t=e.mode||"history";function o(){return t==="hash"?window.location.hash.replace(/^#/,"")||"/":window.location.pathname}function s(l){let u=nn(l,n);if(u){let f=u.chain[u.chain.length-1];return{path:u.def.path,params:tn(l,u),query:Object.fromEntries(new URLSearchParams(window.location.search)),chain:u.chain,title:f?.title??""}}return{path:l,params:{},query:Object.fromEntries(new URLSearchParams(window.location.search)),chain:e.notFound?[{component:e.notFound,title:"Not Found"}]:[],title:""}}return l=>{let u=s(o());l.route=u,u.title&&(document.title=u.title),l.app||(l.app={}),l.app.navigate=c=>{if(Y(),t==="hash"){window.location.hash="#"+c;let d=s(c);l.route=d}else{window.history.pushState({},"",c);let d=s(c);l.route=d}l.route?.title&&(document.title=l.route.title),l.ui?.bumpCtxVersion?.(),l.ui?.render()};let f=()=>{Y();let c=s(o());l.route=c,l.route?.title&&(document.title=l.route.title),l.ui?.bumpCtxVersion?.(),l.ui?.render()};return window.addEventListener("popstate",f),t==="hash"&&window.addEventListener("hashchange",f),l}}function Dn(e,n){let t=n.route?._rvDepth??0;return()=>{let o=n.route;if(!o?.chain?.length||t>=o.chain.length)return null;let s=o.chain[t],l=s.layout??s.component;return l?(s.layout&&(o._rvDepth=t+1),{type:l,props:{},key:void 0}):null}}function K(e,n){return Object.assign(Object.create(e),n)}function jn(e={}){let n=e.url??"/ws",t=e.reconnectInterval??3e3,o=e.maxReconnect??10,s=e.pingInterval??3e4,l=e.pingTimeout??1e4;return u=>{let f=new Set,c=null,d=0,y=null,g=null,E=null,r=!1,i={isConnected:!1,onMessage:w=>(f.add(w),()=>{f.delete(w)}),send:w=>{c?.readyState===WebSocket.OPEN&&c.send(JSON.stringify(w))},_connect:a,close:()=>{r=!0,h(),c?.close(),c=null,i.isConnected=!1}};async function a(){if(!r)try{c=new WebSocket(n),c.onopen=()=>{i.isConnected=!0,d=0,p()},c.onmessage=w=>{try{let v=JSON.parse(w.data);for(let b of f)b(v)}catch{}m()},c.onclose=()=>{i.isConnected=!1,h(),!r&&d<o&&(d++,y=setTimeout(a,t*Math.min(d,5)))},c.onerror=()=>{c?.close()}}catch{r||(y=setTimeout(a,t))}}function p(){s<=0||(g=setInterval(()=>{c?.readyState===WebSocket.OPEN&&c.send(JSON.stringify({type:"ping"})),E=setTimeout(()=>{c?.close()},l)},s))}function m(){clearTimeout(E)}function h(){clearInterval(g),clearTimeout(E),clearTimeout(y)}return a(),K(u,{ws:i})}}function Fn(e){let n={baseURL:e?.baseURL??"",headers:{"Content-Type":"application/json",...e?.headers}},t=e?.onRequest,o=e?.onResponse,s=e?.timeout??0;async function l(u,f,c,d){let y=n.baseURL+f,g={method:u,headers:{...n.headers,...d?.headers}},E=e?.token?.();E&&!g.headers.Authorization&&(g.headers.Authorization=`Bearer ${E}`);let r=s>0,i=!!d?.signal,a=null,p=null;(r||i)&&(a=new AbortController,g.signal=a.signal,r&&(p=setTimeout(()=>a.abort(new Error("Request timed out")),s)),i&&d.signal.addEventListener("abort",()=>a.abort())),c!==void 0&&u!=="GET"&&u!=="HEAD"&&(g.body=JSON.stringify(c));let m={url:y,init:g};t&&(m=t(m));try{let h=await fetch(m.url,m.init);if(o)return o(h);if(!h.ok){let b=await h.text().catch(()=>"");throw new fe(h.status,b||h.statusText)}let w=h.headers.get("content-length");if(h.status===204||w==="0")return;let v=(h.headers.get("content-type")||"").toLowerCase();return v.includes("application/json")||v.includes("json")?h.json():h.text()}finally{p&&clearTimeout(p)}}return u=>K(u,{api:{get:(c,d)=>l("GET",c,void 0,d),post:(c,d,y)=>l("POST",c,d,y),put:(c,d,y)=>l("PUT",c,d,y),patch:(c,d,y)=>l("PATCH",c,d,y),delete:(c,d)=>l("DELETE",c,void 0,d)}})}var fe=class extends Error{status;body;constructor(n,t){super(`API Error ${n}: ${t}`),this.name="ApiError",this.status=n,this.body=t}};function qn(e){try{let n=e.split(".");if(n.length!==3)return null;let t=n[1].replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(t))}catch{return null}}function $n(e){let n=qn(e);return n?.exp?n.exp*1e3-3e4<Date.now():!0}function Kn(e){let n=e?.storage??localStorage,t=e?.tokenKey??"weifuwu_token",o=e?.userKey??"weifuwu_user",s=e?.refreshTokenKey??"weifuwu_refresh",l=e?.refreshEndpoint??"/api/auth/refresh";return u=>{let f=n.getItem(t),c=n.getItem(o),d={token:f,user:c?JSON.parse(c):null,get isLoggedIn(){return this.token!==null},login(y,g,E){d.token=y,d.user=g,n.setItem(t,y),n.setItem(o,JSON.stringify(g)),E&&n.setItem(s,E)},logout(){d.token=null,d.user=null,n.removeItem(t),n.removeItem(o),n.removeItem(s)},setUser(y){d.user=y,n.setItem(o,JSON.stringify(y))},async refresh(){let y=n.getItem(s);if(!y)return!1;try{let g=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:y})});if(!g.ok)return d.logout(),!1;let E=await g.json();return d.token=E.token,n.setItem(t,E.token),E.refreshToken&&n.setItem(s,E.refreshToken),!0}catch{return!1}}};return f&&$n(f)&&d.refresh().catch(()=>{}),K(u,{auth:d})}}function Bn(e,n){let t=null;return o=>{if(t){let l=o.fallback;return typeof l=="function"?l({error:t}):l??null}n.ui._errorHandler=l=>{t=l,n.ui.render()};let s=o.children;try{return s??null}catch(l){t=l;let u=o.fallback;return typeof u=="function"?u({error:l}):u??null}}}var Ne={components:{Button:{loading:"\u52A0\u8F7D\u4E2D..."},FileUpload:{placeholder:"\u70B9\u51FB\u6216\u62D6\u62FD\u4E0A\u4F20\u6587\u4EF6",supportedFormats:"\u652F\u6301\u683C\u5F0F: ",maxSize:"\u6700\u5927 ",remove:"\u5220\u9664"},Pagination:{ariaLabel:"\u5206\u9875"},ProgressBar:{ariaLabel:"\u8FDB\u5EA6"},Switch:{ariaLabel:"\u5207\u6362"},Breadcrumb:{ariaLabel:"\u9762\u5305\u5C51"},Modal:{ariaLabel:"\u5F39\u7A97",closeAria:"\u5173\u95ED"},Confirm:{confirmText:"\u786E\u5B9A",cancelText:"\u53D6\u6D88"},Drawer:{ariaLabel:"\u4FA7\u8FB9\u9762\u677F",closeAria:"\u5173\u95ED"},DatePicker:{w0:"\u65E5",w1:"\u4E00",w2:"\u4E8C",w3:"\u4E09",w4:"\u56DB",w5:"\u4E94",w6:"\u516D",hour:"\u65F6",minute:"\u5206",time:"\u65F6\u95F4",confirm:"\u786E\u5B9A",cancel:"\u53D6\u6D88",placeholder:"\u9009\u62E9\u65E5\u671F"}}};var Le={components:{Button:{loading:"Loading..."},FileUpload:{placeholder:"Click or drag to upload",supportedFormats:"Supported formats: ",maxSize:"Max size: ",remove:"Remove"},Pagination:{ariaLabel:"Pagination"},ProgressBar:{ariaLabel:"Progress"},Switch:{ariaLabel:"Toggle"},Breadcrumb:{ariaLabel:"Breadcrumb"},Modal:{ariaLabel:"Dialog",closeAria:"Close"},Confirm:{confirmText:"OK",cancelText:"Cancel"},Drawer:{ariaLabel:"Panel",closeAria:"Close"},DatePicker:{w0:"Su",w1:"Mo",w2:"Tu",w3:"We",w4:"Th",w5:"Fr",w6:"Sa",hour:"Hour",minute:"Min",time:"Time",confirm:"OK",cancel:"Cancel",placeholder:"Pick a date"}}};var de={"zh-CN":Ne,"en-US":Le};function on(e){if(de[e])return e;let n=e.split("-")[0];return Object.keys(de).find(o=>o.startsWith(n))??"zh-CN"}function zn(e={}){let{locale:n="zh-CN",messages:t={},components:o={}}=e,s=on(n),l=de[s],u=rn(l,t,o),f={locale:s,t:(c,d)=>u.messages?.[c]??d??c,setLocale:()=>{},components:u.components};return c=>(c.i18n=f,f.setLocale=d=>{let y=on(d),g=de[y];g&&(u=rn(g,t,o),f.locale=y,f.components=u.components,c?.ui?.bumpCtxVersion?.(),c?.ui?.render())},c)}function rn(e,n,t){return{messages:{...e?.messages,...n},components:Yn(e?.components??{},t)}}function Yn(e,n){let t={...e};for(let o of Object.keys(n))typeof n[o]=="object"&&n[o]!==null&&typeof t[o]=="object"?t[o]={...t[o],...n[o]}:t[o]=n[o];return t}function Gn(e,n,t=400){let o=!1,s=()=>{o||(o=!0,e.removeEventListener("animationend",s),clearTimeout(l),n())};e.addEventListener("animationend",s);let l=setTimeout(s,t)}export{fe as ApiError,Bn as ErrorBoundary,D as Fragment,H as Portal,Dn as RouteView,Re as aiStream,Gn as animateOut,Fn as api,cn as asyncComponent,Kn as auth,N as callRefCleanup,Y as clearAsyncComponentCache,On as computeFixedPos,ue as computeFixedPosRect,Wn as createApp,ge as createPortal,le as createReactiveState,Le as enUS,K as extendCtx,pn as h,Pe as hydrateVNode,zn as i18n,z as isAsyncComponent,ye as jsx,dn as jsxDEV,fn as jsxs,Ae as lockScroll,En as mountVNode,$ as patchValue,Un as router,Je as toChatMessages,ae as trapFocus,_e as unlockScroll,jn as ws,Ne as zhCN};
|
|
5
|
+
\u975E\u53D7\u63A7\uFF1A\u53BB\u6389 value\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onChange={(v) => setValue(v)}`))),!a&&i&&!ee.has(i)&&(ee.set(i,r.value),F(m=>{ee.delete(m)}));let p=m=>{if(a){r.onChange?.(m);return}i&&ee.set(i,m),n.ui&&(i?n.ui.dirty([i]):n.ui.render())};return{value:a?r.value:i?ee.get(i):r.value,setValue:p,controlled:a}},usePresence:function(r){let i=o(this),a="closed",p,m=()=>{a="closed",n.ui&&(i?n.ui.dirty([i]):n.ui.render())};return{get phase(){return a},ref:w=>{w?p||(p=()=>{a==="exit"&&m()},w.addEventListener("animationend",p)):(w?.removeEventListener("animationend",p),p=void 0)},sync:w=>(w?a="open":a==="open"&&(a="exit"),a)}},useDialog:function(r){let i=o(this),a,p=null,m=this.usePresence(r);return{get phase(){return m.phase},rootRef:v=>{v?(Ae(),p&&(a=ae(p)),m.ref(v)):(_e(),a?.(),m.ref(null))},panelRef:v=>{p=v,v&&!a&&(a=ae(v))},sync:v=>m.sync(v)}},useGlobalKey:function(r){let i=o(this);return typeof window>"u"?()=>{}:(window.addEventListener("keydown",r),i&&F(a=>{a===i&&window.removeEventListener("keydown",r)}),()=>window.removeEventListener("keydown",r))},useDrag:function(r){let i=0,a=0,p=!1,m=v=>{p&&r.onMove(v,{x:v.clientX-i,y:v.clientY-a})},h=v=>{p&&(p=!1,window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",h),r.onEnd?.(v))};return{onPointerDown:v=>{p||(v.preventDefault(),p=!0,i=v.clientX,a=v.clientY,window.addEventListener("pointermove",m),window.addEventListener("pointerup",h),r.onStart?.(v))}}},useDragDrop:function(r){let i={};return r.onDrop&&(i.onDrop=a=>{a.preventDefault(),r.onDrop(a)}),r.onDragOver&&(i.onDragOver=a=>{a.preventDefault(),r.onDragOver(a)}),r.onDragLeave&&(i.onDragLeave=a=>r.onDragLeave(a)),{dropProps:i}},useReducedMotion:function(){return typeof window<"u"&&!!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches},useAnimationEnd:function(r,i){let a=null,p=()=>{r(),i?.once&&a&&a.removeEventListener("animationend",p)};return h=>{h?(a=h,h.addEventListener("animationend",p)):a&&(a.removeEventListener("animationend",p),a=null)}},useTween:function(r,i){let a=o(this),p=this.useReducedMotion(),m=i?.duration??400,h=i?.ease==="linear"?x=>x:x=>1-Math.pow(1-x,3),w,v=r,b={value:p?r:0,reset:()=>{}},T=()=>{n.ui&&(a?n.ui.dirty([a]):n.ui.render())},C=x=>{if(v=x,p){b.value=x,T();return}if(x===b.value)return;w&&cancelAnimationFrame(w);let A=b.value,S=performance.now(),R=_=>{let k=Math.min(1,(_-S)/m);b.value=Math.round(A+(x-A)*h(k)),k<1?(w=requestAnimationFrame(R),T()):(w=void 0,T())};w=requestAnimationFrame(R)};return b.reset=x=>{x===v&&w||C(x)},queueMicrotask(()=>C(r)),b},selfId:function(r){if(typeof r!="string"||!r)throw new Error(`[weifuwu] selfId requires a non-empty string, got ${typeof r}`);if(L.has(r))throw new Error(`[weifuwu] Duplicate component ID: "${r}". Each component must have a unique custom ID.`);let i=this._selfVNode;i&&(i._customId=r,L.set(r,i))}}}function Wn(){let e=[],n={},t=null,o=null,s=null,l=!1,u=new Set,f=!1,c=new Map;function d(b){let T=c.get(b);T&&(T.mql&&T.handler&&T.mql.removeEventListener("change",T.handler),T.mqls?.forEach(({mql:C,handler:x})=>C.removeEventListener("change",x)),c.delete(b))}let y=new Map,g=!1,E=0;function r(){g||(g=!0,window.addEventListener("scroll",p,{capture:!0,passive:!0}),window.addEventListener("resize",p))}function i(){g&&(window.removeEventListener("scroll",p,{capture:!0}),window.removeEventListener("resize",p),g=!1)}let a=new Map;function p(){E||(E=requestAnimationFrame(()=>{E=0;let b=[];for(let[T,C]of y){if(!C.isOpen())continue;let x=C.getEl();if(!x)continue;let A=C.compute(x.getBoundingClientRect());Object.assign(C.pos,ce(A,C.panel?.(),C.margin)),b.push(T)}for(let[T,C]of a){let x=C.getScroller(),A=x instanceof Window?document.scrollingElement?.scrollTop??x.scrollY??0:x.scrollTop??0;A!==C.handle.y&&(C.handle.y=A,b.push(T))}b.length>0&&n.ui.render(b)}))}function m(b){if(!l){l=!0;for(let T of b){let C=L.get(T);if(!C||!C._render)continue;n.ui._dirtySet?.delete(T);let x=C._child,A=C._render(C.props);if(C._child=A,x&&x._placement==="remote"||A&&A._placement==="remote"){x&&A?Q(x,A,n):A?B(A,n):x&&N(x);continue}if(!C._parentNode&&C._refNode&&(C._parentNode=C._refNode.parentNode),C._parentNode){let S=$(C._parentNode,C._refNode??null,x,A,n);S&&S!==C._refNode?C._refNode=S:S||(C._refNode=null)}}l=!1,h()}}function h(){let b=n.ui;u.size>0&&!b._dirtyScheduled&&(b._dirtyScheduled=!0,queueMicrotask(()=>{b._dirtyScheduled=!1;let T=[...u];u.clear(),T.length>0&&m(T)}))}function w(b){return b?._selfId??n.ui?._selfId}let v={get ctx(){return n},use(b){return e.push(b),v},async mount(b,T,C){o=T;for(let _ of e)n=await _(n);let x=typeof b=="string"?document.querySelector(b):b;if(!x)throw new Error(`mount target not found: ${b}`);t=x;let A=!!C?.hydrate;A||(t.innerHTML="");let S=new Map,R=globalThis.__DATA__;if(R&&typeof R=="object")for(let[_,k]of Object.entries(R))S.set(_,{value:k});if(n.data={async get(_,k){let j=S.get(_);if(j&&"value"in j)return j.value;if(j?.promise)return j.promise;if(!k)return;let O=Promise.resolve().then(()=>k()).then(W=>(S.set(_,{value:W}),W));return S.set(_,{promise:O}),O},set(_,k){S.set(_,{value:k})},has(_){return S.has(_)}},F(_=>{for(let k of[...c.keys()])(k.startsWith(`media:${_}:`)||k===`bp:${_}`)&&d(k);y.delete(_),a.delete(_)}),n.ui=en({ctx:n,renderByIds:m,getSelfId:w,dirtyBatch:u,dirtySet:new Set,mediaRegistry:c,popupTrackers:y,scrollTrackers:a,schedulePopupRecompute:p,ensurePopupListeners:r,destroyPopupListeners:i,isRendering:()=>l}),l=!0,s=Vn(T,n),s._id="_wf_root",s._parentNode=t,s._refNode=A?t.firstChild:null,L.set("_wf_root",s),A)await Pe(t,s,n);else{let _=Ke(s,n);_ instanceof Node&&t.appendChild(_)}s._refNode=t.firstChild,l=!1,h()},destroy(){i(),y.clear(),a.clear();for(let b of[...c.keys()])d(b);L.clear(),t&&(t.innerHTML=""),t=null,n={}}};return v}function Vn(e,n){return{type:e,props:{},key:void 0}}function In(e,n){if(!n||n==="/")return e||"/";let t=e.endsWith("/")?e.slice(0,-1):e,o=n.startsWith("/")?n:"/"+n;return t+o}function Hn(e){let n=[],t=e.replace(/:(\w+)/g,(o,s)=>(n.push(s),"([^/]+)")).replace(/\*/g,".*");return{re:new RegExp(`^${t}$`),keys:n}}function ke(e,n="",t=[]){let o=[];for(let s of e){let l=In(n,s.path),{re:u,keys:f}=Hn(l),c=[...t,s];o.push({re:u,keys:f,def:s,chain:c}),s.children&&o.push(...ke(s.children,l,c))}return o}function nn(e,n){let t=null;for(let o of n)e.match(o.re)&&(!t||o.chain.length>t.chain.length)&&(t=o);return t}function tn(e,n){let t={},o=e.match(n.re);if(o)for(let s=0;s<n.keys.length;s++)t[n.keys[s]]=decodeURIComponent(o[s+1]);return t}function Un(e){let n=ke(e.routes),t=e.mode||"history";function o(){return t==="hash"?window.location.hash.replace(/^#/,"")||"/":window.location.pathname}function s(l){let u=nn(l,n);if(u){let f=u.chain[u.chain.length-1];return{path:u.def.path,params:tn(l,u),query:Object.fromEntries(new URLSearchParams(window.location.search)),chain:u.chain,title:f?.title??""}}return{path:l,params:{},query:Object.fromEntries(new URLSearchParams(window.location.search)),chain:e.notFound?[{component:e.notFound,title:"Not Found"}]:[],title:""}}return l=>{let u=s(o());l.route=u,u.title&&(document.title=u.title),l.app||(l.app={}),l.app.navigate=c=>{if(Y(),t==="hash"){window.location.hash="#"+c;let d=s(c);l.route=d}else{window.history.pushState({},"",c);let d=s(c);l.route=d}l.route?.title&&(document.title=l.route.title),l.ui?.bumpCtxVersion?.(),l.ui?.render()};let f=()=>{Y();let c=s(o());l.route=c,l.route?.title&&(document.title=l.route.title),l.ui?.bumpCtxVersion?.(),l.ui?.render()};return window.addEventListener("popstate",f),t==="hash"&&window.addEventListener("hashchange",f),l}}function Dn(e,n){let t=n.route?._rvDepth??0;return()=>{let o=n.route;if(!o?.chain?.length||t>=o.chain.length)return null;let s=o.chain[t],l=s.layout??s.component;return l?(s.layout&&(o._rvDepth=t+1),{type:l,props:{},key:void 0}):null}}function K(e,n){return Object.assign(Object.create(e),n)}function jn(e={}){let n=e.url??"/ws",t=e.reconnectInterval??3e3,o=e.maxReconnect??10,s=e.pingInterval??3e4,l=e.pingTimeout??1e4;return u=>{let f=new Set,c=null,d=0,y=null,g=null,E=null,r=!1,i={isConnected:!1,onMessage:w=>(f.add(w),()=>{f.delete(w)}),send:w=>{c?.readyState===WebSocket.OPEN&&c.send(JSON.stringify(w))},_connect:a,close:()=>{r=!0,h(),c?.close(),c=null,i.isConnected=!1}};async function a(){if(!r)try{c=new WebSocket(n),c.onopen=()=>{i.isConnected=!0,d=0,p()},c.onmessage=w=>{try{let v=JSON.parse(w.data);for(let b of f)b(v)}catch{}m()},c.onclose=()=>{i.isConnected=!1,h(),!r&&d<o&&(d++,y=setTimeout(a,t*Math.min(d,5)))},c.onerror=()=>{c?.close()}}catch{r||(y=setTimeout(a,t))}}function p(){s<=0||(g=setInterval(()=>{c?.readyState===WebSocket.OPEN&&c.send(JSON.stringify({type:"ping"})),E=setTimeout(()=>{c?.close()},l)},s))}function m(){clearTimeout(E)}function h(){clearInterval(g),clearTimeout(E),clearTimeout(y)}return a(),K(u,{ws:i})}}function Fn(e){let n={baseURL:e?.baseURL??"",headers:{"Content-Type":"application/json",...e?.headers}},t=e?.onRequest,o=e?.onResponse,s=e?.timeout??0;async function l(u,f,c,d){let y=n.baseURL+f,g={method:u,headers:{...n.headers,...d?.headers}},E=e?.token?.();E&&!g.headers.Authorization&&(g.headers.Authorization=`Bearer ${E}`);let r=s>0,i=!!d?.signal,a=null,p=null;(r||i)&&(a=new AbortController,g.signal=a.signal,r&&(p=setTimeout(()=>a.abort(new Error("Request timed out")),s)),i&&d.signal.addEventListener("abort",()=>a.abort())),c!==void 0&&u!=="GET"&&u!=="HEAD"&&(g.body=JSON.stringify(c));let m={url:y,init:g};t&&(m=t(m));try{let h=await fetch(m.url,m.init);if(o)return o(h);if(!h.ok){let b=await h.text().catch(()=>"");throw new fe(h.status,b||h.statusText)}let w=h.headers.get("content-length");if(h.status===204||w==="0")return;let v=(h.headers.get("content-type")||"").toLowerCase();return v.includes("application/json")||v.includes("json")?h.json():h.text()}finally{p&&clearTimeout(p)}}return u=>K(u,{api:{get:(c,d)=>l("GET",c,void 0,d),post:(c,d,y)=>l("POST",c,d,y),put:(c,d,y)=>l("PUT",c,d,y),patch:(c,d,y)=>l("PATCH",c,d,y),delete:(c,d)=>l("DELETE",c,void 0,d)}})}var fe=class extends Error{status;body;constructor(n,t){super(`API Error ${n}: ${t}`),this.name="ApiError",this.status=n,this.body=t}};function qn(e){try{let n=e.split(".");if(n.length!==3)return null;let t=n[1].replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(t))}catch{return null}}function $n(e){let n=qn(e);return n?.exp?n.exp*1e3-3e4<Date.now():!0}function Kn(e){let n=e?.storage??localStorage,t=e?.tokenKey??"weifuwu_token",o=e?.userKey??"weifuwu_user",s=e?.refreshTokenKey??"weifuwu_refresh",l=e?.refreshEndpoint??"/api/auth/refresh";return u=>{let f=n.getItem(t),c=n.getItem(o),d={token:f,user:c?JSON.parse(c):null,get isLoggedIn(){return this.token!==null},login(y,g,E){d.token=y,d.user=g,n.setItem(t,y),n.setItem(o,JSON.stringify(g)),E&&n.setItem(s,E)},logout(){d.token=null,d.user=null,n.removeItem(t),n.removeItem(o),n.removeItem(s)},setUser(y){d.user=y,n.setItem(o,JSON.stringify(y))},async refresh(){let y=n.getItem(s);if(!y)return!1;try{let g=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:y})});if(!g.ok)return d.logout(),!1;let E=await g.json();return d.token=E.token,n.setItem(t,E.token),E.refreshToken&&n.setItem(s,E.refreshToken),!0}catch{return!1}}};return f&&$n(f)&&d.refresh().catch(()=>{}),K(u,{auth:d})}}function Bn(e,n){let t=null;return o=>{if(t){let l=o.fallback;return typeof l=="function"?l({error:t}):l??null}n.ui._errorHandler=l=>{t=l,n.ui.render()};let s=o.children;try{return s??null}catch(l){t=l;let u=o.fallback;return typeof u=="function"?u({error:l}):u??null}}}var Ne={components:{Button:{loading:"\u52A0\u8F7D\u4E2D..."},FileUpload:{placeholder:"\u70B9\u51FB\u6216\u62D6\u62FD\u4E0A\u4F20\u6587\u4EF6",supportedFormats:"\u652F\u6301\u683C\u5F0F: ",maxSize:"\u6700\u5927 ",remove:"\u5220\u9664"},Pagination:{ariaLabel:"\u5206\u9875"},ProgressBar:{ariaLabel:"\u8FDB\u5EA6"},Switch:{ariaLabel:"\u5207\u6362"},Breadcrumb:{ariaLabel:"\u9762\u5305\u5C51"},Modal:{ariaLabel:"\u5F39\u7A97",closeAria:"\u5173\u95ED"},Confirm:{confirmText:"\u786E\u5B9A",cancelText:"\u53D6\u6D88"},Drawer:{ariaLabel:"\u4FA7\u8FB9\u9762\u677F",closeAria:"\u5173\u95ED"},DatePicker:{w0:"\u65E5",w1:"\u4E00",w2:"\u4E8C",w3:"\u4E09",w4:"\u56DB",w5:"\u4E94",w6:"\u516D",hour:"\u65F6",minute:"\u5206",time:"\u65F6\u95F4",confirm:"\u786E\u5B9A",cancel:"\u53D6\u6D88",placeholder:"\u9009\u62E9\u65E5\u671F"}}};var Le={components:{Button:{loading:"Loading..."},FileUpload:{placeholder:"Click or drag to upload",supportedFormats:"Supported formats: ",maxSize:"Max size: ",remove:"Remove"},Pagination:{ariaLabel:"Pagination"},ProgressBar:{ariaLabel:"Progress"},Switch:{ariaLabel:"Toggle"},Breadcrumb:{ariaLabel:"Breadcrumb"},Modal:{ariaLabel:"Dialog",closeAria:"Close"},Confirm:{confirmText:"OK",cancelText:"Cancel"},Drawer:{ariaLabel:"Panel",closeAria:"Close"},DatePicker:{w0:"Su",w1:"Mo",w2:"Tu",w3:"We",w4:"Th",w5:"Fr",w6:"Sa",hour:"Hour",minute:"Min",time:"Time",confirm:"OK",cancel:"Cancel",placeholder:"Pick a date"}}};var de={"zh-CN":Ne,"en-US":Le};function on(e){if(de[e])return e;let n=e.split("-")[0];return Object.keys(de).find(o=>o.startsWith(n))??"zh-CN"}function zn(e={}){let{locale:n="zh-CN",messages:t={},components:o={}}=e,s=on(n),l=de[s],u=rn(l,t,o),f={locale:s,t:(c,d)=>u.messages?.[c]??d??c,setLocale:()=>{},components:u.components};return c=>(c.i18n=f,f.setLocale=d=>{let y=on(d),g=de[y];g&&(u=rn(g,t,o),f.locale=y,f.components=u.components,c?.ui?.bumpCtxVersion?.(),c?.ui?.render())},c)}function rn(e,n,t){return{messages:{...e?.messages,...n},components:Yn(e?.components??{},t)}}function Yn(e,n){let t={...e};for(let o of Object.keys(n))typeof n[o]=="object"&&n[o]!==null&&typeof t[o]=="object"?t[o]={...t[o],...n[o]}:t[o]=n[o];return t}function Gn(e,n,t=400){let o=!1,s=()=>{o||(o=!0,e.removeEventListener("animationend",s),clearTimeout(l),n())};e.addEventListener("animationend",s);let l=setTimeout(s,t)}export{fe as ApiError,Bn as ErrorBoundary,D as Fragment,H as Portal,Dn as RouteView,Re as aiStream,Gn as animateOut,Fn as api,cn as asyncComponent,Kn as auth,N as callRefCleanup,Y as clearAsyncComponentCache,On as computeFixedPos,ue as computeFixedPosRect,Wn as createApp,ge as createPortal,le as createReactiveState,Le as enUS,K as extendCtx,pn as h,Pe as hydrateVNode,zn as i18n,z as isAsyncComponent,ye as jsx,dn as jsxDEV,fn as jsxs,Ae as lockScroll,En as mountVNode,$ as patchValue,Un as router,Je as toChatMessages,ae as trapFocus,_e as unlockScroll,jn as ws,Ne as zhCN};
|
package/dist/components/index.js
CHANGED
|
@@ -9,5 +9,5 @@ import{h as rn}from"weifuwu/client";var Un={"chevron-down":["M6 9l6 6 6-6"],"che
|
|
|
9
9
|
`)){l();return}t=S,s=C,r=0,e=!0,o.ui.render()},I=t?m.filter(T=>T.value.toLowerCase().includes(t.toLowerCase())):m,$=T=>{if(!u)return;let v=d.slice(0,s),P=d.slice(s+1+t.length),C=`${v}${g}${T.value} ${P}`;e=!1,u(C)},M=T=>{let v=T.target.value;u?.(v),x(v,T.target.selectionStart??v.length)},B=T=>{if(e)if(T.key==="ArrowDown")T.preventDefault(),r=Math.min(r+1,Math.max(I.length-1,0)),o.ui.render();else if(T.key==="ArrowUp")T.preventDefault(),r=Math.max(r-1,0),o.ui.render();else if(T.key==="Enter"){T.preventDefault();let v=I[r];v&&$(v)}else T.key==="Escape"&&l()},R=e&&I.length>0?p.portal(Tt("div",{class:"wf-mentions-panel",role:"listbox"},I.map((T,v)=>Tt("button",{type:"button",class:`wf-mentions-option${r===v?" wf-mentions-option--hl":""}`,key:T.value,role:"option",onClick:()=>$(T),onMouseEnter:()=>{r=v}},T.label??T.value))),"popover"):null,L=Tt("textarea",{class:`wf-mentions-input wf-mentions-input--${h}`,rows:y,placeholder:b,value:d,disabled:w||void 0,ref:a,onInput:M,onKeyDown:B,onCompositionStart:()=>{n=!0,l()},onCompositionEnd:()=>{n=!1}});return Tt("div",{class:"wf-mentions"},[L,R].filter(Boolean))}};import{h as de}from"weifuwu/client";var ss=(c,o)=>{let e=[],t=s=>{if(!s)return;let r=Number(s.dataset.idx);Number.isNaN(r)||(e[r]=s)};return s=>{let{items:r=[],multiple:n=!0,className:i}=s,a=o.ui.useControlled({value:s.active,onChange:s.onChange,name:"Collapse"}),p=a.value??[],l=m=>p.includes(m),f=m=>{a.controlled&&!s.onChange||(l(m)?a.setValue(p.filter(g=>g!==m)):a.setValue(n?[...p,m]:[m]))},d=m=>{let g=document.activeElement,b=e.indexOf(g);if(b<0)return;let y=b;if(m.key==="ArrowDown"||m.key==="ArrowRight")y=(b+1)%r.length;else if(m.key==="ArrowUp"||m.key==="ArrowLeft")y=(b-1+r.length)%r.length;else return;m.preventDefault(),e[y]?.focus()},u=r.map((m,g)=>{let b=l(m.key),y=[de("span",{class:`wf-collapse-chevron${b?" wf-collapse-chevron--open":""}`},de(E,{name:"chevron-down",size:14})),m.icon,de("span",{class:"wf-collapse-title"},m.title)];m.extra&&y.push(de("span",{class:"wf-collapse-extra"},m.extra));let w=b?de("div",{class:"wf-collapse-content"},m.loading?de("div",{class:"wf-collapse-loading"},de(E,{name:"retry",size:14})):m.content??null):null;return de("div",{class:`wf-collapse-item${b?" wf-collapse-item--open":""}`,key:m.key},[de("button",{type:"button",class:"wf-collapse-header",ref:t,"data-idx":String(g),"aria-expanded":b?"true":"false",onClick:()=>f(m.key)},y),w].filter(Boolean))});return de("div",{class:["wf-collapse",i].filter(Boolean).join(" "),onKeyDown:d},u)}};import{h as he}from"weifuwu/client";function Wn(c){return[c.key,...(c.children??[]).flatMap(Wn)]}function Kn(c,o,e=null){for(let t of c)o.set(t.key,e),t.children&&Kn(t.children,o,t)}var as=(c,o)=>{let e=o.ui.$();e.internalExpanded=[];let t=[],s=[];return r=>{let{data:n=[],selectedKeys:i,onSelect:a,expandedKeys:p,onExpand:l,checkable:f,checkedKeys:d,onCheck:u,className:m}=r,g=new Map;Kn(n,g);let b=p!==void 0,y=b?p:e.internalExpanded,w=v=>y.includes(v),h=v=>{if(b&&!l){console.warn(`[weifuwu/Tree] \u53D7\u63A7\u6A21\u5F0F\uFF08expandedKeys \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onExpand\uFF0C\u5C55\u5F00/\u6298\u53E0\u65E0\u6CD5\u751F\u6548\u3002
|
|
10
10
|
\u975E\u53D7\u63A7\uFF1A\u53BB\u6389 expandedKeys\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onExpand={(keys) => setExpanded(keys)}`);return}let P=w(v)?y.filter(C=>C!==v):[...y,v];b?l?.(P):e.internalExpanded=P},x=v=>{if(!a)return;let P=(i??[]).includes(v)?[]:[v];a(P)},I=v=>{if(!u){d!==void 0&&console.warn(`[weifuwu/Tree] \u53D7\u63A7\u6A21\u5F0F\uFF08checkedKeys \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onCheck\uFF0C\u52FE\u9009\u65E0\u6CD5\u751F\u6548\u3002
|
|
11
11
|
\u975E\u53D7\u63A7\uFF1A\u53BB\u6389 checkedKeys\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onCheck={(keys) => setKeys(keys)}`);return}let P=new Set(d??[]),C=Wn(v);if(P.has(v.key)){for(let N of C)P.delete(N);let S=g.get(v.key);for(;S;)(S.children??[]).some(O=>P.has(O.key))||P.delete(S.key),S=g.get(S.key)}else{for(let N of C)P.add(N);let S=g.get(v.key);for(;S;)(S.children??[]).some(H=>P.has(H.key))&&P.add(S.key),S=g.get(S.key)}u(Array.from(P))},$=v=>{let P=v.children??[],C=d??[];if(!P.length)return C.includes(v.key)?"checked":"unchecked";let S=P.map($);return S.every(N=>N==="checked")?"checked":S.some(N=>N!=="unchecked")?"half":"unchecked"},M=v=>$(v)==="half",B=[],R=(v,P)=>{B.push(v);let C=B.length-1;s[C]||(s[C]=K=>{t[C]=K});let S=!!v.children?.length,N=w(v.key),H=(i??[]).includes(v.key),O=$(v)==="checked",j=S?he("button",{type:"button",class:`wf-tree-switcher${N?" wf-tree-switcher--open":""}`,"aria-label":N?"\u6298\u53E0":"\u5C55\u5F00",onClick:K=>{K.stopPropagation(),h(v.key)}},he(E,{name:"chevron-down",size:12})):he("span",{class:"wf-tree-switcher-placeholder"}),W=f?he("button",{type:"button",class:["wf-tree-checkbox",O?"wf-tree-checkbox--checked":"",M(v)?"wf-tree-checkbox--half":""].filter(Boolean).join(" "),role:"checkbox","aria-checked":M(v)?"mixed":O?"true":"false",onClick:K=>{K.stopPropagation(),I(v)}}):null,ne=[j,W,v.icon,he("span",{class:"wf-tree-label"},v.label)].filter(Boolean);return he("div",{class:"wf-tree-node",key:v.key},[he("div",{class:["wf-tree-row",H?"wf-tree-row--selected":"",v.disabled?"wf-tree-row--disabled":""].filter(Boolean).join(" "),style:{paddingLeft:`${P*20}px`},ref:s[C],tabIndex:v.disabled?void 0:0,"aria-selected":H?"true":"false",onClick:v.disabled?void 0:()=>x(v.key),onKeyDown:v.disabled?void 0:K=>{K.key==="Enter"?(K.preventDefault(),x(v.key)):K.key===" "&&f?(K.preventDefault(),I(v)):K.key==="ArrowRight"&&S?(K.preventDefault(),N||h(v.key)):K.key==="ArrowLeft"&&S&&(K.preventDefault(),N&&h(v.key))}},ne),N&&S?he("div",{class:"wf-tree-children"},v.children.map(K=>R(K,P+1))):null].filter(Boolean))},L=v=>{if(v.key!=="ArrowDown"&&v.key!=="ArrowUp")return;let P=document.activeElement,C=t.indexOf(P);if(C<0)return;v.preventDefault();let S=v.key==="ArrowDown"?Math.min(C+1,t.length-1):Math.max(C-1,0);t[S]?.focus()};B=[];let T=n.map(v=>R(v,0));return he("div",{class:["wf-tree",m].filter(Boolean).join(" "),role:"tree",onKeyDown:L},T)}};import{h as oe}from"weifuwu/client";function is(c,o,e=" / "){let t=c,s=[];for(let r of o){let n=t?.find(i=>i.value===r);if(!n)break;s.push(n.label),t=n.children}return s.join(e)}var ls=(c,o)=>{let e=o.ui.$();e.open=!1,e.activePath=[];let t=null,s=n=>{t=n},r=o.ui.usePopup({trigger:"click",placement:"bottom",center:!1,gap:6,el:()=>t,isOpen:()=>e.open,setOpen:n=>{e.open=n}});return n=>{let{options:i=[],value:a,onChange:p,placeholder:l="\u8BF7\u9009\u62E9",disabled:f,error:d,label:u,"aria-label":m}=n,g=e.open?e.activePath:[],b=()=>{f||(e.open=!e.open,e.activePath=Array.isArray(a)?[...a]:[])},y=L=>{let T=i;for(let v of L){let P=T.find(C=>C.value===v);if(!P?.children)return T;T=P.children}return T},w=(L,T)=>{if(L.disabled)return;let v=[...T,L.value];L.children?.length?e.activePath=v:(Array.isArray(a)&&!p&&console.warn(`[weifuwu/Cascader] \u53D7\u63A7\u6A21\u5F0F\uFF08value \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onChange\uFF0C\u9009\u62E9\u65E0\u6CD5\u751F\u6548\u3002
|
|
12
|
-
\u975E\u53D7\u63A7\uFF1A\u53BB\u6389 value\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onChange={(path) => setPath(path)}`),e.open=!1,p?.(v))},h=[],x=[],I=0;for(;;){let L=y(x),T=g[I]?L.find(P=>P.value===g[I]):void 0,v=[...x];if(h.push(oe("div",{class:"wf-cascader-col",key:I},L.map(P=>{let C=T?.value===P.value;return oe("button",{type:"button",class:["wf-cascader-opt",C?"wf-cascader-opt--active":"",P.disabled?"wf-cascader-opt--dis":""].filter(Boolean).join(" "),key:P.value,onClick:()=>w(P,v)},[oe("span",{class:"wf-cascader-opt-label"},P.label),P.children?.length?oe("span",{class:"wf-cascader-opt-arrow"},oe(E,{name:"chevron-right",size:12})):null].filter(Boolean))}))),!T?.children?.length)break;x=[...x,T.value],I++}let $=r.portal(oe("div",{class:"wf-cascader-panel",role:"listbox"},h),"popover"),M=Array.isArray(a)&&a.length?is(i,a):l,B=[];u&&B.push(oe("label",{class:"wf-cascader-label"},u));let R=oe("button",{type:"button",class:`wf-cascader-trigger${f?" wf-cascader-trigger--dis":""}${d?" wf-cascader-trigger--err":""}`,"aria-label":m,ref:s,onClick:f?void 0:b},[oe("span",{class:`wf-cascader-value${a?.length?"":" wf-cascader-value--placeholder"}`},M),oe("span",{class:`wf-cascader-arrow${e.open?" wf-cascader-arrow--open":""}`},oe(E,{name:"chevron-down",size:12}))]);return B.push(oe("div",{class:"wf-cascader"},[R,$].filter(Boolean))),d&&B.push(oe("div",{class:"wf-cascader-err"},d)),oe("div",{class:"wf-cascader-wrap"},B)}};import{h as le}from"weifuwu/client";var cs=(c,o)=>{let e=o.ui.$();return e.selLeft=[],e.selRight=[],t=>{let{data:s=[],targetKeys:r=[],onChange:n,titles:i=["\u6E90\u5217\u8868","\u76EE\u6807\u5217\u8868"],size:a="md",disabled:p}=t,l=s.filter(h=>!r.includes(h.key)),f=s.filter(h=>r.includes(h.key)),d=(h,x)=>{if(p)return;let I=h==="left"?e.selLeft:e.selRight,$=I.includes(x)?I.filter(M=>M!==x):[...I,x];h==="left"?e.selLeft=$:e.selRight=$},u=()=>{if(!n||e.selLeft.length===0)return;let h=[...r,...e.selLeft];e.selLeft=[],n(h)},m=()=>{if(!n||e.selRight.length===0)return;let h=r.filter(x=>!e.selRight.includes(x));e.selRight=[],n(h)},g=(h,x)=>{let I=h==="left"?e.selLeft:e.selRight;return le("div",{class:`wf-transfer-list wf-transfer-list--${h}`},[le("div",{class:"wf-transfer-title"},i[h==="left"?0:1]),le("div",{class:"wf-transfer-body"},x.length===0?[le("div",{class:"wf-transfer-empty"},"\u6682\u65E0\u6570\u636E")]:x.map($=>le("button",{type:"button",class:["wf-transfer-item",I.includes($.key)?"wf-transfer-item--sel":"",$.disabled?"wf-transfer-item--dis":""].filter(Boolean).join(" "),key:$.key,disabled:$.disabled||void 0,onClick:$.disabled?void 0:()=>d(h,$.key)},$.label)))])},b=e.selLeft.length===0||p,y=e.selRight.length===0||p,w=le("div",{class:"wf-transfer-actions"},[le("button",{type:"button",class:"wf-transfer-btn",disabled:y||void 0,"aria-label":"\u79FB\u56DE\u5DE6\u4FA7",onClick:y?void 0:m},le(E,{name:"arrow-left",size:14})),le("button",{type:"button",class:"wf-transfer-btn",disabled:b||void 0,"aria-label":"\u79FB\u81F3\u53F3\u4FA7",onClick:b?void 0:u},le(E,{name:"arrow-right",size:14}))]);return le("div",{class:`wf-transfer wf-transfer--${a}`},[g("left",l),w,g("right",f)])}};import{h as ae,createPortal as ps}from"weifuwu/client";var fs=(c,o)=>{let e="",t=0,s={},r=i=>{i&&queueMicrotask(()=>i.focus())};o.ui.useGlobalKey(i=>{let a=s.shortcut;if(!a)return;let p=a.split("+"),l=p.includes("mod"),f=p[p.length-1].toLowerCase();(!l||i.ctrlKey||i.metaKey)&&i.key.toLowerCase()===f&&(i.preventDefault(),s.onOpenChange?.(!s.open))});let n=i=>{};return i=>{let{open:a,onOpenChange:p,items:l=[],placeholder:f="\u8F93\u5165\u547D\u4EE4\u6216\u641C\u7D22...",emptyText:d="\u65E0\u5339\u914D\u7ED3\u679C",globalShortcut:u="mod+k"}=i;if(s={open:a,onOpenChange:p,shortcut:u},!a)return ae("div",{class:"wf-command-host",ref:n});let m=e?l.filter(h=>{let x=e.toLowerCase();return h.label.toLowerCase().includes(x)||(h.keywords??[]).some(I=>I.toLowerCase().includes(x))}):l;t>=m.length&&(t=Math.max(0,m.length-1));let g=()=>p?.(!1),b=h=>{if(h.key==="ArrowDown")h.preventDefault(),t=Math.min(t+1,Math.max(m.length-1,0)),o.ui.render();else if(h.key==="ArrowUp")h.preventDefault(),t=Math.max(t-1,0),o.ui.render();else if(h.key==="Enter"){h.preventDefault();let x=m[t];x&&(x.onSelect?.(),g())}else h.key==="Escape"&&g()},y=m.length>0?m.map((h,x)=>ae("button",{type:"button",class:`wf-command-item${t===x?" wf-command-item--hl":""}`,key:h.key,onClick:()=>{h.onSelect?.(),g()},onMouseEnter:()=>{t=x}},[h.icon??ae(E,{name:"search",size:14}),ae("span",{class:"wf-command-item-label"},h.label),h.shortcut?ae("kbd",{class:"wf-command-shortcut"},h.shortcut):null].filter(Boolean))):[ae("div",{class:"wf-command-empty"},d)],w=ae("div",{class:"wf-command-panel",role:"dialog","aria-label":"\u547D\u4EE4\u9762\u677F",ref:n},[ae("div",{class:"wf-command-input-wrap"},[ae(E,{name:"search",size:14}),ae("input",{class:"wf-command-input",type:"text",placeholder:f,value:e,onInput:h=>{e=h.target.value,t=0,o.ui.render()},onKeyDown:b,ref:r})]),ae("div",{class:"wf-command-list"},y)]);return ps(ae("div",{class:"wf-command-overlay",onMouseDown:h=>{h.target===h.currentTarget&&g()},onKeyDown:h=>{h.key==="Escape"&&g()}},w),"popover")}};import{h as We}from"weifuwu/client";var ds=(c,o)=>{let e=null,t=0,s=[],r=l=>{if(!l)return;let f=Number(l.dataset.idx);Number.isNaN(f)||(s[f]=l)},n=[],i=o.ui.usePopup({trigger:"click",placement:"bottom",center:!1,gap:4,el:()=>{let l=n.findIndex(f=>f.key===e);return l>=0?s[l]:null},isOpen:()=>e!==null,setOpen:l=>{l||a()}}),a=()=>{e!==null&&(e=null,o.ui.render())},p=l=>{e=e===l?null:l,t=0,o.ui.render()};return l=>{let{menus:f=[],"aria-label":d}=l;n=f;let u=y=>{if(y.key==="Escape"){a();return}if(y.key!=="ArrowRight"&&y.key!=="ArrowLeft")return;if(e){a();return}let w=document.activeElement,h=s.indexOf(w);if(h<0)return;y.preventDefault();let x=y.key==="ArrowRight"?(h+1)%n.length:(h-1+n.length)%n.length;s[x]?.focus()},m=n.map((y,w)=>{let h=e===y.key;return We("button",{type:"button",class:["wf-menubar-trigger",h?"wf-menubar-trigger--open":"",y.disabled?"wf-menubar-trigger--dis":""].filter(Boolean).join(" "),key:y.key,"data-idx":String(w),ref:r,"aria-haspopup":"menu","aria-expanded":h?"true":"false",onClick:y.disabled?void 0:()=>p(y.key),onKeyDown:x=>{(x.key==="ArrowDown"||x.key==="Enter")&&(x.preventDefault(),y.disabled||p(y.key))}},y.label)}),g=n.find(y=>y.key===e),b=g?i.portal(We("div",{class:"wf-menubar-panel",role:"menu"},(g.items??[]).map((y,w)=>We("button",{type:"button",class:["wf-menubar-item",t===w?"wf-menubar-item--hl":"",y.disabled?"wf-menubar-item--dis":""].filter(Boolean).join(" "),key:y.key,role:"menuitem",onClick:y.disabled?void 0:()=>{y.onSelect?.(),a()},onMouseEnter:()=>{y.disabled||(t=w)}},[We("span",{class:"wf-menubar-item-label"},y.label),y.shortcut?We("kbd",{class:"wf-menubar-shortcut"},y.shortcut):null].filter(Boolean)))),"popover"):null;return We("div",{class:"wf-menubar",role:"menubar","aria-label":d,onKeyDown:u},[...m,b].filter(Boolean))}};import{h as be}from"weifuwu/client";var us=(c,o)=>{let e=0,t,s=0,r=()=>{},n=!1,i=3e3,a=p=>{p?n&&(clearInterval(t),t=setInterval(()=>r(e+1),i)):(clearInterval(t),t=void 0)};return p=>{let{children:l=[],autoplay:f,interval:d=3e3,showArrows:u=!0,showDots:m=!0,loop:g=!0,"aria-label":b,className:y}=p,w=l.length;if(w===0)return null;let h=L=>{let T=g?(L+w)%w:Math.max(0,Math.min(L,w-1));T!==e&&(e=T,o.ui.render())};r=h,n=!!f,i=d;let x=()=>h(e+1),I=()=>h(e-1),$={onTouchStart:L=>{s=L.touches[0].clientX},onTouchEnd:L=>{let T=L.changedTouches[0].clientX-s;Math.abs(T)>40&&(T<0?x():I())}},M=be("div",{class:"wf-carousel-track",style:{transform:`translateX(-${e*100}%)`}},l),B=u?[be("button",{type:"button",class:"wf-carousel-arrow wf-carousel-arrow--prev","aria-label":"\u4E0A\u4E00\u5F20",onClick:I},be(E,{name:"chevron-left",size:18})),be("button",{type:"button",class:"wf-carousel-arrow wf-carousel-arrow--next","aria-label":"\u4E0B\u4E00\u5F20",onClick:x},be(E,{name:"chevron-right",size:18}))]:[],R=m?be("div",{class:"wf-carousel-dots"},l.map((L,T)=>be("button",{type:"button",class:`wf-carousel-dot${T===e?" wf-carousel-dot--active":""}`,key:T,"aria-label":`\u7B2C ${T+1} \u5F20`,onClick:()=>h(T)}))):null;return be("div",{class:["wf-carousel",y].filter(Boolean).join(" "),"aria-label":b,ref:a,...$},[be("div",{class:"wf-carousel-viewport"},M),...B,R].filter(Boolean))}};import{h as Mt}from"weifuwu/client";var ms=(c,o)=>{let e=0,t={...c},s=a=>Math.max(t.min??80,Math.min(a,t.max??600)),r=a=>{let p=s(a);p!==e&&(e=p,t.onResize?.(p),o.ui.render())},n=0,i=o.ui.useDrag({onStart:()=>{n=e},onMove:(a,p)=>{let l=t.direction==="horizontal"?p.x:p.y;r(n+l)}});return a=>{
|
|
12
|
+
\u975E\u53D7\u63A7\uFF1A\u53BB\u6389 value\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onChange={(path) => setPath(path)}`),e.open=!1,p?.(v))},h=[],x=[],I=0;for(;;){let L=y(x),T=g[I]?L.find(P=>P.value===g[I]):void 0,v=[...x];if(h.push(oe("div",{class:"wf-cascader-col",key:I},L.map(P=>{let C=T?.value===P.value;return oe("button",{type:"button",class:["wf-cascader-opt",C?"wf-cascader-opt--active":"",P.disabled?"wf-cascader-opt--dis":""].filter(Boolean).join(" "),key:P.value,onClick:()=>w(P,v)},[oe("span",{class:"wf-cascader-opt-label"},P.label),P.children?.length?oe("span",{class:"wf-cascader-opt-arrow"},oe(E,{name:"chevron-right",size:12})):null].filter(Boolean))}))),!T?.children?.length)break;x=[...x,T.value],I++}let $=r.portal(oe("div",{class:"wf-cascader-panel",role:"listbox"},h),"popover"),M=Array.isArray(a)&&a.length?is(i,a):l,B=[];u&&B.push(oe("label",{class:"wf-cascader-label"},u));let R=oe("button",{type:"button",class:`wf-cascader-trigger${f?" wf-cascader-trigger--dis":""}${d?" wf-cascader-trigger--err":""}`,"aria-label":m,ref:s,onClick:f?void 0:b},[oe("span",{class:`wf-cascader-value${a?.length?"":" wf-cascader-value--placeholder"}`},M),oe("span",{class:`wf-cascader-arrow${e.open?" wf-cascader-arrow--open":""}`},oe(E,{name:"chevron-down",size:12}))]);return B.push(oe("div",{class:"wf-cascader"},[R,$].filter(Boolean))),d&&B.push(oe("div",{class:"wf-cascader-err"},d)),oe("div",{class:"wf-cascader-wrap"},B)}};import{h as le}from"weifuwu/client";var cs=(c,o)=>{let e=o.ui.$();return e.selLeft=[],e.selRight=[],t=>{let{data:s=[],targetKeys:r=[],onChange:n,titles:i=["\u6E90\u5217\u8868","\u76EE\u6807\u5217\u8868"],size:a="md",disabled:p}=t,l=s.filter(h=>!r.includes(h.key)),f=s.filter(h=>r.includes(h.key)),d=(h,x)=>{if(p)return;let I=h==="left"?e.selLeft:e.selRight,$=I.includes(x)?I.filter(M=>M!==x):[...I,x];h==="left"?e.selLeft=$:e.selRight=$},u=()=>{if(!n||e.selLeft.length===0)return;let h=[...r,...e.selLeft];e.selLeft=[],n(h)},m=()=>{if(!n||e.selRight.length===0)return;let h=r.filter(x=>!e.selRight.includes(x));e.selRight=[],n(h)},g=(h,x)=>{let I=h==="left"?e.selLeft:e.selRight;return le("div",{class:`wf-transfer-list wf-transfer-list--${h}`},[le("div",{class:"wf-transfer-title"},i[h==="left"?0:1]),le("div",{class:"wf-transfer-body"},x.length===0?[le("div",{class:"wf-transfer-empty"},"\u6682\u65E0\u6570\u636E")]:x.map($=>le("button",{type:"button",class:["wf-transfer-item",I.includes($.key)?"wf-transfer-item--sel":"",$.disabled?"wf-transfer-item--dis":""].filter(Boolean).join(" "),key:$.key,disabled:$.disabled||void 0,onClick:$.disabled?void 0:()=>d(h,$.key)},$.label)))])},b=e.selLeft.length===0||p,y=e.selRight.length===0||p,w=le("div",{class:"wf-transfer-actions"},[le("button",{type:"button",class:"wf-transfer-btn",disabled:y||void 0,"aria-label":"\u79FB\u56DE\u5DE6\u4FA7",onClick:y?void 0:m},le(E,{name:"arrow-left",size:14})),le("button",{type:"button",class:"wf-transfer-btn",disabled:b||void 0,"aria-label":"\u79FB\u81F3\u53F3\u4FA7",onClick:b?void 0:u},le(E,{name:"arrow-right",size:14}))]);return le("div",{class:`wf-transfer wf-transfer--${a}`},[g("left",l),w,g("right",f)])}};import{h as ae,createPortal as ps}from"weifuwu/client";var fs=(c,o)=>{let e="",t=0,s={},r=i=>{i&&queueMicrotask(()=>i.focus())};o.ui.useGlobalKey(i=>{let a=s.shortcut;if(!a)return;let p=a.split("+"),l=p.includes("mod"),f=p[p.length-1].toLowerCase();(!l||i.ctrlKey||i.metaKey)&&i.key.toLowerCase()===f&&(i.preventDefault(),s.onOpenChange?.(!s.open))});let n=i=>{};return i=>{let{open:a,onOpenChange:p,items:l=[],placeholder:f="\u8F93\u5165\u547D\u4EE4\u6216\u641C\u7D22...",emptyText:d="\u65E0\u5339\u914D\u7ED3\u679C",globalShortcut:u="mod+k"}=i;if(s={open:a,onOpenChange:p,shortcut:u},!a)return ae("div",{class:"wf-command-host",ref:n});let m=e?l.filter(h=>{let x=e.toLowerCase();return h.label.toLowerCase().includes(x)||(h.keywords??[]).some(I=>I.toLowerCase().includes(x))}):l;t>=m.length&&(t=Math.max(0,m.length-1));let g=()=>p?.(!1),b=h=>{if(h.key==="ArrowDown")h.preventDefault(),t=Math.min(t+1,Math.max(m.length-1,0)),o.ui.render();else if(h.key==="ArrowUp")h.preventDefault(),t=Math.max(t-1,0),o.ui.render();else if(h.key==="Enter"){h.preventDefault();let x=m[t];x&&(x.onSelect?.(),g())}else h.key==="Escape"&&g()},y=m.length>0?m.map((h,x)=>ae("button",{type:"button",class:`wf-command-item${t===x?" wf-command-item--hl":""}`,key:h.key,onClick:()=>{h.onSelect?.(),g()},onMouseEnter:()=>{t=x}},[h.icon??ae(E,{name:"search",size:14}),ae("span",{class:"wf-command-item-label"},h.label),h.shortcut?ae("kbd",{class:"wf-command-shortcut"},h.shortcut):null].filter(Boolean))):[ae("div",{class:"wf-command-empty"},d)],w=ae("div",{class:"wf-command-panel",role:"dialog","aria-label":"\u547D\u4EE4\u9762\u677F",ref:n},[ae("div",{class:"wf-command-input-wrap"},[ae(E,{name:"search",size:14}),ae("input",{class:"wf-command-input",type:"text",placeholder:f,value:e,onInput:h=>{e=h.target.value,t=0,o.ui.render()},onKeyDown:b,ref:r})]),ae("div",{class:"wf-command-list"},y)]);return ps(ae("div",{class:"wf-command-overlay",onMouseDown:h=>{h.target===h.currentTarget&&g()},onKeyDown:h=>{h.key==="Escape"&&g()}},w),"popover")}};import{h as We}from"weifuwu/client";var ds=(c,o)=>{let e=null,t=0,s=[],r=l=>{if(!l)return;let f=Number(l.dataset.idx);Number.isNaN(f)||(s[f]=l)},n=[],i=o.ui.usePopup({trigger:"click",placement:"bottom",center:!1,gap:4,el:()=>{let l=n.findIndex(f=>f.key===e);return l>=0?s[l]:null},isOpen:()=>e!==null,setOpen:l=>{l||a()}}),a=()=>{e!==null&&(e=null,o.ui.render())},p=l=>{e=e===l?null:l,t=0,o.ui.render()};return l=>{let{menus:f=[],"aria-label":d}=l;n=f;let u=y=>{if(y.key==="Escape"){a();return}if(y.key!=="ArrowRight"&&y.key!=="ArrowLeft")return;if(e){a();return}let w=document.activeElement,h=s.indexOf(w);if(h<0)return;y.preventDefault();let x=y.key==="ArrowRight"?(h+1)%n.length:(h-1+n.length)%n.length;s[x]?.focus()},m=n.map((y,w)=>{let h=e===y.key;return We("button",{type:"button",class:["wf-menubar-trigger",h?"wf-menubar-trigger--open":"",y.disabled?"wf-menubar-trigger--dis":""].filter(Boolean).join(" "),key:y.key,"data-idx":String(w),ref:r,"aria-haspopup":"menu","aria-expanded":h?"true":"false",onClick:y.disabled?void 0:()=>p(y.key),onKeyDown:x=>{(x.key==="ArrowDown"||x.key==="Enter")&&(x.preventDefault(),y.disabled||p(y.key))}},y.label)}),g=n.find(y=>y.key===e),b=g?i.portal(We("div",{class:"wf-menubar-panel",role:"menu"},(g.items??[]).map((y,w)=>We("button",{type:"button",class:["wf-menubar-item",t===w?"wf-menubar-item--hl":"",y.disabled?"wf-menubar-item--dis":""].filter(Boolean).join(" "),key:y.key,role:"menuitem",onClick:y.disabled?void 0:()=>{y.onSelect?.(),a()},onMouseEnter:()=>{y.disabled||(t=w)}},[We("span",{class:"wf-menubar-item-label"},y.label),y.shortcut?We("kbd",{class:"wf-menubar-shortcut"},y.shortcut):null].filter(Boolean)))),"popover"):null;return We("div",{class:"wf-menubar",role:"menubar","aria-label":d,onKeyDown:u},[...m,b].filter(Boolean))}};import{h as be}from"weifuwu/client";var us=(c,o)=>{let e=0,t,s=0,r=()=>{},n=!1,i=3e3,a=p=>{p?n&&(clearInterval(t),t=setInterval(()=>r(e+1),i)):(clearInterval(t),t=void 0)};return p=>{let{children:l=[],autoplay:f,interval:d=3e3,showArrows:u=!0,showDots:m=!0,loop:g=!0,"aria-label":b,className:y}=p,w=l.length;if(w===0)return null;let h=L=>{let T=g?(L+w)%w:Math.max(0,Math.min(L,w-1));T!==e&&(e=T,o.ui.render())};r=h,n=!!f,i=d;let x=()=>h(e+1),I=()=>h(e-1),$={onTouchStart:L=>{s=L.touches[0].clientX},onTouchEnd:L=>{let T=L.changedTouches[0].clientX-s;Math.abs(T)>40&&(T<0?x():I())}},M=be("div",{class:"wf-carousel-track",style:{transform:`translateX(-${e*100}%)`}},l),B=u?[be("button",{type:"button",class:"wf-carousel-arrow wf-carousel-arrow--prev","aria-label":"\u4E0A\u4E00\u5F20",onClick:I},be(E,{name:"chevron-left",size:18})),be("button",{type:"button",class:"wf-carousel-arrow wf-carousel-arrow--next","aria-label":"\u4E0B\u4E00\u5F20",onClick:x},be(E,{name:"chevron-right",size:18}))]:[],R=m?be("div",{class:"wf-carousel-dots"},l.map((L,T)=>be("button",{type:"button",class:`wf-carousel-dot${T===e?" wf-carousel-dot--active":""}`,key:T,"aria-label":`\u7B2C ${T+1} \u5F20`,onClick:()=>h(T)}))):null;return be("div",{class:["wf-carousel",y].filter(Boolean).join(" "),"aria-label":b,ref:a,...$},[be("div",{class:"wf-carousel-viewport"},M),...B,R].filter(Boolean))}};import{h as Mt}from"weifuwu/client";var ms=(c,o)=>{let e=0,t={...c},s=a=>Math.max(t.min??80,Math.min(a,t.max??600)),r=a=>{let p=s(a);p!==e&&(e=p,t.onResize?.(p),o.ui.render())},n=0,i=o.ui.useDrag({onStart:()=>{n=e},onMove:(a,p)=>{let l=t.direction==="horizontal"?p.x:p.y;r(n+l)}});return a=>{let{direction:p="horizontal",defaultSize:l=300,min:f=80,max:d=600,step:u=20,children:m,onResize:g,className:b}=a;Object.assign(t,a,{direction:p,min:f,max:d,step:u,onResize:g}),e===0&&(e=l);let w=Mt("div",{class:"wf-resizable-handle",role:"separator","aria-orientation":p==="horizontal"?"vertical":"horizontal",tabIndex:0,...i,onKeyDown:h=>{let x=p==="horizontal"?h.key==="ArrowRight"?u:h.key==="ArrowLeft"?-u:0:h.key==="ArrowDown"?u:h.key==="ArrowUp"?-u:0;x!==0&&(h.preventDefault(),r(e+x))}});return Mt("div",{class:["wf-resizable",`wf-resizable--${p}`,b].filter(Boolean).join(" ")},[Mt("div",{class:"wf-resizable-panel",style:{flexBasis:`${e}px`}},m[0]),w,Mt("div",{class:"wf-resizable-panel wf-resizable-panel--fill"},m[1])])}};import{h as X}from"weifuwu/client";var gs=["1 \u6708","2 \u6708","3 \u6708","4 \u6708","5 \u6708","6 \u6708","7 \u6708","8 \u6708","9 \u6708","10 \u6708","11 \u6708","12 \u6708"],hs=(c,o)=>{let e=o.ui.$(),t=new Date;return e.viewMonth=t.getMonth(),e.viewYear=t.getFullYear(),s=>{let{events:r=[],month:n,year:i,onMonthChange:a,onSelectDate:p,selectedDate:l,"aria-label":f}=s,d=n!==void 0&&i!==void 0,u=d?n:e.viewMonth,m=d?i:e.viewYear,g=$=>{if(d&&!a){console.warn(`[weifuwu/Calendar] \u53D7\u63A7\u6A21\u5F0F\uFF08month/year \u5DF2\u4F20\uFF09\u4F46\u672A\u63D0\u4F9B onMonthChange\uFF0C\u6708\u4EFD\u5207\u6362\u65E0\u6CD5\u751F\u6548\u3002
|
|
13
13
|
\u975E\u53D7\u63A7\uFF1A\u53BB\u6389 month/year\uFF1B\u53D7\u63A7\uFF1A\u4F20\u5165 onMonthChange={(m, y) => setView(m, y)}`);return}let M=u+$,B=m;M<0?(M=11,B--):M>11&&(M=0,B++),d?a?.(M,B):(e.viewMonth=M,e.viewYear=B)},b=()=>{d?a?.(t.getMonth(),t.getFullYear()):(e.viewMonth=t.getMonth(),e.viewYear=t.getFullYear())},y=tt(m,u),w=wt(),h=X("div",{class:"wf-calendar-header"},[X("div",{class:"wf-calendar-title"},`${m} \u5E74 ${gs[u]}`),X("div",{class:"wf-calendar-nav"},[X("button",{type:"button",class:"wf-calendar-nav-btn","aria-label":"\u4E0A\u4E2A\u6708",onClick:()=>g(-1)},X(E,{name:"chevron-left",size:14})),X("button",{type:"button",class:"wf-calendar-nav-btn","aria-label":"\u4ECA\u5929",onClick:b},"\u4ECA\u5929"),X("button",{type:"button",class:"wf-calendar-nav-btn","aria-label":"\u4E0B\u4E2A\u6708",onClick:()=>g(1)},X(E,{name:"chevron-right",size:14}))])]),x=y.map(($,M)=>{let B=$.map(R=>{let L=me(R.year,R.month,R.day),T=r.filter(P=>P.date===L),v=l===L;return X("div",{class:["wf-calendar-cell",R.isOtherMonth?"wf-calendar-cell--other":"",R.isToday?"wf-calendar-cell--today":"",v?"wf-calendar-cell--selected":""].filter(Boolean).join(" "),key:`${R.year}-${R.month}-${R.day}`,onClick:()=>p?.(L)},[X("span",{class:"wf-calendar-day-num"},String(R.day)),...T.slice(0,3).map(P=>X("div",{class:"wf-calendar-event",style:P.color?{"--wf-event-color":P.color}:void 0,key:P.key},P.title)),T.length>3?X("div",{class:"wf-calendar-more"},`+${T.length-3} \u66F4\u591A`):null])});return X("div",{class:"wf-calendar-week",key:M},B)}),I=X("div",{class:"wf-calendar-grid"},[X("div",{class:"wf-calendar-weekdays"},w.map(($,M)=>X("div",{class:"wf-calendar-weekday",key:M},$))),...x]);return X("div",{class:"wf-calendar","aria-label":f},[h,I])}};import{h as jn}from"weifuwu/client";var bs=(c,o)=>{let e="",t=(s,r,n,i,a,p)=>{let l=document.createElement("canvas"),f=l.getContext("2d");if(!f)return;let{width:d}=f.measureText(s),u=Math.max(d+p,p),m=p;l.width=u,l.height=m,f.globalAlpha=i,f.font=`${r}px sans-serif`,f.fillStyle=n,f.translate(u/2,m/2),f.rotate(a*Math.PI/180),f.fillText(s,-d/2,0),e=l.toDataURL()};return s=>{let{text:r="weifuwu",fontSize:n=14,color:i="currentColor",opacity:a=.15,rotate:p=-25,gap:l=100,children:f,className:d}=s,u=m=>{m&&!e&&(t(r,n,i,a,p,l),e&&(m.style.backgroundImage=`url(${e})`))};return jn("div",{class:["wf-watermark",d].filter(Boolean).join(" ")},[f,jn("div",{class:"wf-watermark-overlay",style:{pointerEvents:"none",backgroundImage:e?`url(${e})`:void 0},ref:u})])}};import{h as It}from"weifuwu/client";var ys=(c,o)=>{let e={},t=o.ui.useInView({rootMargin:()=>`0px 0px ${e.threshold??100}px 0px`,onChange:(s,r)=>{r&&e.hasMore!==!1&&!e.loading&&e.onLoadMore?.()}});return s=>{Object.assign(e,s);let{hasMore:r=!0,loading:n,threshold:i=100,children:a,loadMoreText:p="\u52A0\u8F7D\u4E2D...",endText:l="\u6CA1\u6709\u66F4\u591A\u4E86",className:f}=s,d=null;return n?d=It("div",{class:"wf-infinite-scroll-loading"},p):r===!1?d=It("div",{class:"wf-infinite-scroll-end"},l):d=It("div",{class:"wf-infinite-scroll-sentinel",ref:t.observe}),It("div",{class:["wf-infinite-scroll",f].filter(Boolean).join(" ")},[a,d])}};import{h as Et}from"weifuwu/client";var ws=(c,o)=>{let e=null,t=o.ui.useScrollPosition({getScroller:()=>e??window}),s=r=>{r?(e=r,t.refresh()):e=null};return r=>{let{items:n=[],height:i=400,itemHeight:a=40,renderItem:p,overscan:l=5,keyBy:f,className:d}=r;e&&e.scrollTop!==t.y&&(t.y=e.scrollTop);let u=n.length,m=Math.max(0,Math.floor(t.y/a)-l),g=Math.min(u,Math.ceil((t.y+i)/a)+l),b=Et("div",{class:"wf-virtual-list-spacer",style:{height:`${u*a}px`}}),y=[];for(let h=m;h<g;h++){let x=n[h];y.push(Et("div",{class:"wf-virtual-list-item",style:{position:"absolute",top:`${h*a}px`,left:0,right:0,height:`${a}px`},key:f?f(x,h):h},p?p(x,h):String(x)))}let w=Et("div",{class:"wf-virtual-list-window"},y);return Et("div",{class:["wf-virtual-list",d].filter(Boolean).join(" "),style:{position:"relative",width:"100%",height:`${i}px`,overflowY:"auto"},ref:s},[b,w])}};import{h as nn}from"weifuwu/client";var en=new Array(256),Zt=new Array(256),it=1;for(let c=0;c<255;c++)en[c]=it,Zt[it]=c,it<<=1,it&256&&(it^=285);function Fn(c,o){return c===0||o===0?0:en[(Zt[c]+Zt[o])%255]}var Jt=[{total:26,ec:[7,10,13,17],blocks:[1,1,1,1]},{total:44,ec:[10,16,22,28],blocks:[1,1,1,1]},{total:70,ec:[15,26,18,22],blocks:[1,1,2,2]},{total:100,ec:[20,18,26,16],blocks:[1,2,2,4]},{total:134,ec:[26,24,18,22],blocks:[1,2,4,4]},{total:172,ec:[18,16,24,28],blocks:[2,4,4,4]}],vs={L:0,M:1,Q:2,H:3};function xs(c,o){for(let e=0;e<Jt.length;e++){let t=Jt[e],s=t.total-t.ec[o]*t.blocks[o];if(c<=s)return e+1}throw new Error("\u6570\u636E\u8D85\u51FA QR \u5BB9\u91CF\uFF08\u7248\u672C 1-6\uFF09")}function Cs(c){return en[c%255]}function ks(c,o){let e=[1];for(let s=0;s<o;s++){let r=new Array(e.length+1).fill(0);for(let n=0;n<e.length;n++)r[n]^=Fn(e[n],Cs(s)),r[n+1]^=e[n];e=r}let t=[...c,...new Array(o).fill(0)];for(let s=0;s<c.length;s++){let r=t[s];if(r!==0)for(let n=1;n<e.length;n++)t[s+n]^=Fn(e[n],r)}return t.slice(c.length)}function Ps(c,o){let e=[],t=(i,a)=>{for(let p=a-1;p>=0;p--)e.push(i>>p&1)};t(4,4),t(c.length,8);for(let i of c)t(i,8);for(t(0,Math.min(4,o*8-e.length));e.length%8!==0;)e.push(0);let s=[];for(let i=0;i<e.length;i+=8){let a=0;for(let p=0;p<8;p++)a=a<<1|e[i+p];s.push(a)}let r=[236,17],n=0;for(;s.length<o;)s.push(r[n++%2]);return s}var qn={1:[],2:[6,18],3:[6,22],4:[6,26],5:[6,30],6:[6,34]};function Vn(c,o,e,t){let s=17+4*c,r=Array.from({length:s},()=>new Array(s).fill(!1)),n=(u,m,g)=>{u>=0&&u<s&&m>=0&&m<s&&(r[u][m]=g)},i=(u,m)=>{for(let g=-1;g<=7;g++)for(let b=-1;b<=7;b++){let y=u+g,w=m+b;if(y<0||y>=s||w<0||w>=s||!(g>=0&&g<=6&&b>=0&&b<=6))continue;let x=g===0||g===6||b===0||b===6||g>=2&&g<=4&&b>=2&&b<=4;n(y,w,x)}};i(0,0),i(0,s-7),i(s-7,0);for(let u=8;u<s-8;u++)n(6,u,u%2===0),n(u,6,u%2===0);let a=qn[c];if(a.length>1)for(let u=0;u<a.length;u++)for(let m=0;m<a.length;m++){let g=a[u],b=a[m];if(!(g===6&&b===6||g===6&&b===s-7||g===s-7&&b===6))for(let y=-2;y<=2;y++)for(let w=-2;w<=2;w++)n(g+y,b+w,Math.max(Math.abs(y),Math.abs(w))!==1)}n(s-8,8,!0);let p=[];for(let u of o)for(let m=7;m>=0;m--)p.push((u>>m&1)===1);for(let u of e)for(let m=7;m>=0;m--)p.push((u>>m&1)===1);let l=(u,m)=>{if(u===6||m===6)return!0;for(let[b,y]of[[0,0],[0,s-7],[s-7,0]])if(u>=b-1&&u<=b+7&&m>=y-1&&m<=y+7)return!0;let g=qn[c];if(g.length>1){for(let b of g)for(let y of g)if(Math.abs(u-b)<=2&&Math.abs(m-y)<=2)return!0}return!1},f=0,d=!0;for(let u=s-1;u>0;u-=2){u===6&&u--;for(let m=0;m<s;m++){let g=d?s-1-m:m;for(let b=0;b<2;b++){let y=u-b;if(!l(g,y)&&f<p.length){let w=p[f++],h=Ts(t,g,y);n(g,y,w!==h)}}}d=!d}return r}function Ts(c,o,e){switch(c){case 0:return(o+e)%2===0;case 1:return o%2===0;case 2:return e%3===0;case 3:return(o+e)%3===0;case 4:return(Math.floor(o/2)+Math.floor(e/3))%2===0;case 5:return o*e%2+o*e%3===0;case 6:return(o*e%2+o*e%3)%2===0;case 7:return((o+e)%2+o*e%3)%2===0;default:return!1}}function Ms(c,o){let t=[1,0,3,2][c]<<3|o,s=t<<10,r=1335;for(;Math.clz32(s)>Math.clz32(r);){let n=Math.clz32(s)-Math.clz32(r);s^=r<<n}s=t<<10;for(let n=14;n>=10;n--)s>>n&1&&(s^=r<<n-10);return(t<<10|s)^21522}function Gn(c,o,e){let t=c.length,s=Ms(o,e),r=a=>(s>>14-a&1)===1;[[8,0],[8,1],[8,2],[8,3],[8,4],[8,5],[8,7],[8,8],[7,8],[5,8],[4,8],[3,8],[2,8],[1,8],[0,8]].forEach(([a,p],l)=>{c[a][p]=r(l)}),[[8,t-8],[8,t-7],[7,t-8],[5,t-8],[4,t-8],[3,t-8],[2,t-8],[1,t-8],[0,t-8],[t-1,8],[t-2,8],[t-3,8],[t-4,8],[t-5,8],[t-6,8],[t-7,8]].forEach(([a,p],l)=>{c[a][p]=r(l)})}function Is(c){let o=c.length,e=0,t=n=>{let i=1;for(let a=1;a<=n.length;a++){if(a<n.length&&n[a]===n[a-1]){i++;continue}i>=5&&(e+=3+(i-5)),i=1}};for(let n=0;n<o;n++)t(c[n]);for(let n=0;n<o;n++)t(c.map(i=>i[n]));for(let n=0;n<o-1;n++)for(let i=0;i<o-1;i++)c[n][i]===c[n][i+1]&&c[n][i]===c[n+1][i]&&c[n][i]===c[n+1][i+1]&&(e+=3);let r=c.flat().filter(Boolean).length*100/(o*o);return e+=Math.floor(Math.abs(r-50)/5)*10,e}function tn(c,o="M"){let e=new TextEncoder().encode(c),t=vs[o],s=xs(e.length,t),r=Jt[s-1],n=r.ec[t],i=r.blocks[t],a=r.total-n*i,p=Ps(e,a),l=Math.floor(p.length/i),f=[],d=[];for(let h=0;h<i;h++){let x=p.slice(h*l,(h+1)*l);f.push(x),d.push(ks(x,n))}let u=[];for(let h=0;h<l;h++)for(let x of f)u.push(x[h]);for(let h=0;h<n;h++)for(let x of d)u.push(x[h]);let m=u.slice(0,a),g=u.slice(a),b=0,y=1/0;for(let h=0;h<8;h++){let x=Vn(s,m,g,h);Gn(x,t,h);let I=Is(x);I<y&&(y=I,b=h)}let w=Vn(s,m,g,b);return Gn(w,t,b),{size:17+4*s,version:s,level:o,mask:b,matrix:w}}var Es=(c,o)=>e=>{let{value:t,ecLevel:s="M",size:r=128,quietZone:n=4,color:i="currentColor",bgColor:a,className:p}=e,l=tn(t,s),f=n,d=[];a&&d.push(nn("rect",{class:"wf-qr-bg",x:0,y:0,width:l.size+f*2,height:l.size+f*2,fill:a}));for(let m=0;m<l.size;m++)for(let g=0;g<l.size;g++)l.matrix[m][g]&&d.push(nn("rect",{x:g+f,y:m+f,width:1,height:1,fill:i}));let u=l.size+f*2;return nn("svg",{class:["wf-qr",p].filter(Boolean).join(" "),width:r,height:r,viewBox:`0 0 ${u} ${u}`,role:"img","aria-label":`\u4E8C\u7EF4\u7801\uFF1A${t}`,shapeRendering:"crispEdges"},d)};export{_o as Accordion,Qr as Affix,hr as AiChat,ho as Alert,jt as ApprovalCard,Wr as AspectRatio,At as Avatar,Mr as AvatarGroup,Yr as BackTop,Mo as Badge,Wo as Breadcrumb,ft as Button,hs as Calendar,To as Card,us as Carousel,ls as Cascader,or as Chart,St as Checkbox,jr as CheckboxGroup,qt as CodeBlock,ss as Collapse,Ur as ColorPicker,fs as Command,ln as Confirm,os as ContextMenu,qr as CopyButton,er as DatePicker,Tr as Descriptions,Ko as Divider,qo as Drawer,xo as Dropdown,cr as Editor,wo as EmptyState,Ro as Field,Bt as FileUpload,Ao as Form,Lr as Highlight,Xr as HoverCard,E as Icon,Yo as Img,Qo as InView,ys as InfiniteScroll,Yn as Input,Pr as InputNumber,_r as Label,Dr as List,yo as Loading,xr as Markdown,rs as Mentions,Er as Menu,ds as Menubar,Ir as MessageBubble,Re as Modal,zn as Notification,zo as PageHeader,Co as Pagination,Hr as Paragraph,$r as PasswordInput,Fr as PinInput,et as Popover,Ho as ProgressBar,Es as QRCode,to as RadioGroup,Br as Rate,ms as Resizable,Rr as Result,No as SearchInput,Oo as SegmentedControl,Jn as Select,Go as Skeleton,Bo as Slider,$o as StatCard,So as Steps,eo as Switch,oo as Table,vo as Tabs,Eo as Tag,Sr as TagsInput,Or as Text,Qn as Textarea,dr as ThemeSwitch,kr as Timeline,Nr as Title,cn as Toast,Nn as Toggle,Kr as ToggleGroup,Kt as ToolCallCard,jo as Tooltip,cs as Transfer,as as Tree,ws as VirtualList,bs as Watermark,Wt as applyTheme,io as confirm,tn as generateQr,fr as getTheme,ns as notification,ie as parseInline,Ft as parseMarkdown,go as toast};
|
|
@@ -68,6 +68,7 @@
|
|
|
68
68
|
--wf-space-2xl: 40px;
|
|
69
69
|
|
|
70
70
|
/* ── 圆角 ── */
|
|
71
|
+
--wf-radius-xs: 2px; /* 内联代码/小元素圆角 */
|
|
71
72
|
--wf-radius-sm: 4px;
|
|
72
73
|
--wf-radius: 6px;
|
|
73
74
|
--wf-radius-md: 8px;
|
|
@@ -175,6 +176,7 @@
|
|
|
175
176
|
|
|
176
177
|
--wf-ease-out: cubic-bezier(0.16, 1, 0.3, 1); /* 入场:快出缓停 */
|
|
177
178
|
--wf-ease-in: cubic-bezier(0.4, 0, 1, 1); /* 退场:渐入加速 */
|
|
179
|
+
--wf-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); /* 往返/闪烁动画 */
|
|
178
180
|
--wf-ease-snap: cubic-bezier(0.34, 1.56, 0.64, 1); /* 选中/弹跳 */
|
|
179
181
|
|
|
180
182
|
--wf-motion-sm: 4px;
|
|
@@ -1850,7 +1852,7 @@ code {
|
|
|
1850
1852
|
font-family: var(--wf-font-sans);
|
|
1851
1853
|
font-size: var(--wf-font-size-sm);
|
|
1852
1854
|
color: var(--wf-color-text-secondary);
|
|
1853
|
-
line-height: var(--wf-line-height
|
|
1855
|
+
line-height: var(--wf-line-height);
|
|
1854
1856
|
}
|
|
1855
1857
|
|
|
1856
1858
|
.wf-breadcrumb-link {
|
|
@@ -1949,6 +1951,10 @@ code {
|
|
|
1949
1951
|
border: var(--wf-border-width) solid var(--wf-color-border);
|
|
1950
1952
|
border-radius: var(--wf-radius);
|
|
1951
1953
|
overflow: hidden;
|
|
1954
|
+
/* flex 容器中宽度稳定:grid 1fr 列在内容驱动宽度下会被事件 nowrap 撑宽/
|
|
1955
|
+
无事件塌缩——固定 min-width 防塌缩(定制 Token,默认 280px = 7 列 × 40px) */
|
|
1956
|
+
width: 100%;
|
|
1957
|
+
min-width: var(--wf-calendar-min-width, 280px);
|
|
1952
1958
|
}
|
|
1953
1959
|
|
|
1954
1960
|
.wf-calendar-header {
|
|
@@ -6071,8 +6077,8 @@ code {
|
|
|
6071
6077
|
border-radius: 50%;
|
|
6072
6078
|
background: var(--wf-color-primary);
|
|
6073
6079
|
cursor: pointer;
|
|
6074
|
-
border: 2px solid
|
|
6075
|
-
box-shadow: 0 1px 3px rgba(0,0,0,0.2);
|
|
6080
|
+
border: 2px solid var(--wf-color-on-brand);
|
|
6081
|
+
box-shadow: var(--wf-slider-thumb-shadow, 0 1px 3px rgba(0,0,0,0.2));
|
|
6076
6082
|
}
|
|
6077
6083
|
|
|
6078
6084
|
/* Firefox 同款 thumb(跨浏览器一致) */
|
|
@@ -6082,8 +6088,8 @@ code {
|
|
|
6082
6088
|
border-radius: 50%;
|
|
6083
6089
|
background: var(--wf-color-primary);
|
|
6084
6090
|
cursor: pointer;
|
|
6085
|
-
border: 2px solid
|
|
6086
|
-
box-shadow: 0 1px 3px rgba(0,0,0,0.2);
|
|
6091
|
+
border: 2px solid var(--wf-color-on-brand);
|
|
6092
|
+
box-shadow: var(--wf-slider-thumb-shadow, 0 1px 3px rgba(0,0,0,0.2));
|
|
6087
6093
|
}
|
|
6088
6094
|
|
|
6089
6095
|
.wf-slider-input::-moz-range-track {
|
|
@@ -6265,10 +6271,10 @@ code {
|
|
|
6265
6271
|
left: 2px;
|
|
6266
6272
|
width: 16px;
|
|
6267
6273
|
height: 16px;
|
|
6268
|
-
background:
|
|
6274
|
+
background: var(--wf-color-on-brand);
|
|
6269
6275
|
border-radius: 50%;
|
|
6270
6276
|
transition: transform var(--wf-transition);
|
|
6271
|
-
box-shadow: 0 1px 2px rgba(0,0,0,0.15);
|
|
6277
|
+
box-shadow: var(--wf-switch-knob-shadow, 0 1px 2px rgba(0,0,0,0.15));
|
|
6272
6278
|
}
|
|
6273
6279
|
|
|
6274
6280
|
.wf-switch-input:checked + .wf-switch-track {
|
|
@@ -6623,7 +6629,7 @@ code {
|
|
|
6623
6629
|
border-radius: var(--wf-radius-md);
|
|
6624
6630
|
background: var(--wf-color-bg-secondary);
|
|
6625
6631
|
font-family: var(--wf-font-sans);
|
|
6626
|
-
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.04);
|
|
6632
|
+
box-shadow: var(--wf-theme-switch-inset, inset 0 1px 2px rgba(0, 0, 0, 0.04));
|
|
6627
6633
|
}
|
|
6628
6634
|
|
|
6629
6635
|
.wf-theme-seg {
|
|
@@ -68,6 +68,7 @@
|
|
|
68
68
|
--wf-space-2xl: 40px;
|
|
69
69
|
|
|
70
70
|
/* ── 圆角 ── */
|
|
71
|
+
--wf-radius-xs: 2px; /* 内联代码/小元素圆角 */
|
|
71
72
|
--wf-radius-sm: 4px;
|
|
72
73
|
--wf-radius: 6px;
|
|
73
74
|
--wf-radius-md: 8px;
|
|
@@ -175,6 +176,7 @@
|
|
|
175
176
|
|
|
176
177
|
--wf-ease-out: cubic-bezier(0.16, 1, 0.3, 1); /* 入场:快出缓停 */
|
|
177
178
|
--wf-ease-in: cubic-bezier(0.4, 0, 1, 1); /* 退场:渐入加速 */
|
|
179
|
+
--wf-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); /* 往返/闪烁动画 */
|
|
178
180
|
--wf-ease-snap: cubic-bezier(0.34, 1.56, 0.64, 1); /* 选中/弹跳 */
|
|
179
181
|
|
|
180
182
|
--wf-motion-sm: 4px;
|
package/docs/layout.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 本页为 weifuwu 官方文档拆分页 · [返回 README](../README.md)
|
|
4
4
|
|
|
5
|
-
纯 CSS 布局原语 + 工具类 +
|
|
5
|
+
纯 CSS 布局原语 + 工具类 + 143 个主题 Token。不绑定任何 JS 框架。
|
|
6
6
|
|
|
7
7
|
> **学习路径与命名规范**:见 [`design/style-guide.md`](../design/style-guide.md)——统一语法 `wf-<域>-<名>`、三档学习(组件 → 10 核心原语 → 完整速查)、场景速查、变量定制。
|
|
8
8
|
|
|
@@ -101,7 +101,7 @@ app.get('/layout.css', (req, ctx) => ctx.ui.css('weifuwu/layout'))
|
|
|
101
101
|
| `wf-truncate` | 单行省略(ellipsis) |
|
|
102
102
|
| `wf-line-clamp-2/3` | 多行截断 |
|
|
103
103
|
|
|
104
|
-
##
|
|
104
|
+
## 143 个主题 Token
|
|
105
105
|
|
|
106
106
|
**双层结构**:原始层(Primitive,色值只定义一次,品牌/暗色调校改这里)+ 语义层(Semantic,组件消费)。
|
|
107
107
|
|