@lytjs/component 3.1.0
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/index.cjs +1 -0
- package/dist/index.mjs +1 -0
- package/dist/types/builtins/async-component.d.ts +61 -0
- package/dist/types/builtins/async-component.d.ts.map +1 -0
- package/dist/types/builtins/error-boundary.d.ts +28 -0
- package/dist/types/builtins/error-boundary.d.ts.map +1 -0
- package/dist/types/builtins/index.d.ts +19 -0
- package/dist/types/builtins/index.d.ts.map +1 -0
- package/dist/types/builtins/keep-alive.d.ts +118 -0
- package/dist/types/builtins/keep-alive.d.ts.map +1 -0
- package/dist/types/builtins/suspense.d.ts +51 -0
- package/dist/types/builtins/suspense.d.ts.map +1 -0
- package/dist/types/builtins/transition-group.d.ts +40 -0
- package/dist/types/builtins/transition-group.d.ts.map +1 -0
- package/dist/types/builtins/transition.d.ts +136 -0
- package/dist/types/builtins/transition.d.ts.map +1 -0
- package/dist/types/composition-api.d.ts +116 -0
- package/dist/types/composition-api.d.ts.map +1 -0
- package/dist/types/define-component.d.ts +265 -0
- package/dist/types/define-component.d.ts.map +1 -0
- package/dist/types/emit.d.ts +79 -0
- package/dist/types/emit.d.ts.map +1 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lifecycle.d.ts +92 -0
- package/dist/types/lifecycle.d.ts.map +1 -0
- package/dist/types/props.d.ts +85 -0
- package/dist/types/props.d.ts.map +1 -0
- package/dist/types/signal-state.d.ts +58 -0
- package/dist/types/signal-state.d.ts.map +1 -0
- package/dist/types/slots.d.ts +80 -0
- package/dist/types/slots.d.ts.map +1 -0
- package/dist/types/src/builtins/async-component.d.ts +61 -0
- package/dist/types/src/builtins/async-component.d.ts.map +1 -0
- package/dist/types/src/builtins/error-boundary.d.ts +28 -0
- package/dist/types/src/builtins/error-boundary.d.ts.map +1 -0
- package/dist/types/src/builtins/index.d.ts +19 -0
- package/dist/types/src/builtins/index.d.ts.map +1 -0
- package/dist/types/src/builtins/keep-alive.d.ts +118 -0
- package/dist/types/src/builtins/keep-alive.d.ts.map +1 -0
- package/dist/types/src/builtins/suspense.d.ts +51 -0
- package/dist/types/src/builtins/suspense.d.ts.map +1 -0
- package/dist/types/src/builtins/transition-group.d.ts +40 -0
- package/dist/types/src/builtins/transition-group.d.ts.map +1 -0
- package/dist/types/src/builtins/transition.d.ts +136 -0
- package/dist/types/src/builtins/transition.d.ts.map +1 -0
- package/dist/types/src/composition-api.d.ts +116 -0
- package/dist/types/src/composition-api.d.ts.map +1 -0
- package/dist/types/src/define-component.d.ts +265 -0
- package/dist/types/src/define-component.d.ts.map +1 -0
- package/dist/types/src/emit.d.ts +79 -0
- package/dist/types/src/emit.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +23 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/lifecycle.d.ts +92 -0
- package/dist/types/src/lifecycle.d.ts.map +1 -0
- package/dist/types/src/props.d.ts +85 -0
- package/dist/types/src/props.d.ts.map +1 -0
- package/dist/types/src/signal-state.d.ts +58 -0
- package/dist/types/src/signal-state.d.ts.map +1 -0
- package/dist/types/src/slots.d.ts +80 -0
- package/dist/types/src/slots.d.ts.map +1 -0
- package/package.json +44 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var Q=Object.defineProperty;var ze=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var We=Object.prototype.hasOwnProperty;var Ge=(e,t)=>{for(var n in t)Q(e,n,{get:t[n],enumerable:!0})},qe=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Ve(t))!We.call(e,s)&&s!==n&&Q(e,s,{get:()=>t[s],enumerable:!(o=ze(t,s))||o.enumerable});return e};var Ze=e=>qe(Q({},"__esModule",{value:!0}),e);var gn={};Ge(gn,{KeepAlive:()=>pe,LifecycleHook:()=>F,Suspense:()=>ce,Transition:()=>ie,TransitionGroup:()=>ae,callLifecycleHook:()=>S,camelizeToHyphen:()=>R,compositionOnBeforeMount:()=>Ie,compositionOnBeforeUnmount:()=>Fe,compositionOnMounted:()=>_e,compositionOnUnmounted:()=>we,compositionOnUpdated:()=>Re,createComponentInstance:()=>Ne,createLifecycleHook:()=>h,createSignalState:()=>N,createSignalStateProxy:()=>M,currentInstance:()=>I,defineAsyncComponent:()=>de,defineComponent:()=>v,disposeSignalState:()=>ge,emit:()=>B,getCurrentInstance:()=>Ue,getPropDefaultValue:()=>Y,getSignalStateSnapshot:()=>me,hasSlot:()=>Oe,hyphenToCamel:()=>he,initProps:()=>w,initSlots:()=>z,inject:()=>Le,mountComponent:()=>He,normalizeEmits:()=>K,normalizePropsOptions:()=>$,normalizeSlotValue:()=>T,onBeforeUnmount:()=>Ee,onBeforeUpdate:()=>xe,onInit:()=>be,onMounted:()=>Pe,onUnmounted:()=>Te,onUpdated:()=>ke,patchSignalState:()=>H,provide:()=>De,renderSlot:()=>Ae,runSetup:()=>V,setCurrentInstance:()=>D,setupComponent:()=>Me,setupFunctionComponent:()=>re,setupStatefulComponent:()=>oe,unmountComponent:()=>se,updateComponent:()=>je,validateProp:()=>X});module.exports=Ze(gn);var k=require("@lytjs/reactivity"),G=require("@lytjs/reactivity/signal");var ye=require("@lytjs/reactivity/signal");function N(e){let t={},n=Object.keys(e);for(let o=0;o<n.length;o++){let s=n[o];t[s]=(0,ye.signal)(e[s])}return t}function E(e){return typeof e=="function"&&e!==null&&"set"in e}function M(e){return new Proxy(e,{get(t,n){if(typeof n=="symbol")return t[n];let o=t[n];return E(o)?o():t[n]},set(t,n,o){if(typeof n=="symbol")return t[n]=o,!0;let s=t[n];return E(s)?s.set(o):t[n]=o,!0},has(t,n){return n in t},ownKeys(t){return Object.keys(t)},getOwnPropertyDescriptor(t,n){if(typeof n=="string"&&n in t)return{configurable:!0,enumerable:!0,get:()=>{let o=t[n];return E(o)?o():o},set:o=>{let s=t[n];E(s)?s.set(o):t[n]=o}}}})}function me(e){let t={},n=Object.keys(e);for(let o=0;o<n.length;o++){let s=n[o],l=e[s];t[s]=E(l)?l():l}return t}function H(e,t){let n=Object.keys(t);for(let o=0;o<n.length;o++){let s=n[o],l=e[s];E(l)&&l.set(t[s])}}function ge(e){}function Je(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function j(e){return typeof e=="function"}function Ce(e){return typeof e=="string"}function ve(e){return typeof e=="boolean"}function Se(e){return typeof e=="number"&&!isNaN(e)}function x(e){return Array.isArray(e)}function Qe(e){return e!==null&&typeof e=="object"}function Xe(e){return e===null?"null":e===void 0?"undefined":x(e)?"array":ve(e)?"boolean":Se(e)?"number":Ce(e)?"string":j(e)?"function":"object"}function Ye(e){return e===String?"String":e===Number?"Number":e===Boolean?"Boolean":e===Array?"Array":e===Object?"Object":e===Function?"Function":"unknown"}function $(e){if(!e)return{options:{},keys:[]};if(x(e)){let s={},l=[];for(let r=0;r<e.length;r++){let a=e[r];s[a]={type:null},l.push(a)}return{options:s,keys:l}}let t={},n=[],o=Object.keys(e);for(let s=0;s<o.length;s++){let l=o[s],r=e[l];r==null?t[l]={type:null}:r===String||r===Number||r===Boolean||r===Array||r===Object||r===Function?t[l]={type:r}:Je(r)?t[l]={...r}:x(r)?t[l]={type:r}:t[l]={type:null},n.push(l)}return{options:t,keys:n}}function X(e,t,n){let{type:o,required:s,validator:l}=t;if(n==null)return s?(console.warn(`[Lyt Props] \u7F3A\u5C11\u5FC5\u586B prop: "${e}"`),!1):!0;if(o!=null){let r=x(o)?o:[o],a=!1;for(let u=0;u<r.length;u++){let p=r[u],i=!1;if(p===String?i=Ce(n):p===Number?i=Se(n):p===Boolean?i=ve(n):p===Function?i=j(n):p===Array?i=x(n):p===Object&&(i=Qe(n)),i){a=!0;break}}if(!a){let u=r.map(Ye).join(" | ");return console.warn(`[Lyt Props] \u65E0\u6548\u7684 prop: "${e}"\u3002\u671F\u671B\u7C7B\u578B ${u}\uFF0C\u5B9E\u9645\u5F97\u5230 ${Xe(n)}\u3002`),!1}}if(l&&j(l))try{if(!l(n))return console.warn(`[Lyt Props] \u81EA\u5B9A\u4E49\u9A8C\u8BC1\u5931\u8D25: prop "${e}" \u7684\u503C\u672A\u901A\u8FC7 validator \u6821\u9A8C\u3002`),!1}catch(r){return console.warn(`[Lyt Props] validator \u6267\u884C\u51FA\u9519: prop "${e}"`,r),!1}return!0}function Y(e,t){let{default:n}=e;if(n!==void 0){if(j(n)){let o=e.type;if(!(o===Function||x(o)&&o.indexOf(Function)!==-1))return n()}return n}}function w(e,t){let{options:n,keys:o}=e.propsOptions,s={};for(let l=0;l<o.length;l++){let r=o[l],a=n[r],u=t?t[r]:void 0;u===void 0&&(u=Y(a,r)),a.type!==null&&a.type!==void 0&&(x(a.type)?a.type:[a.type]).indexOf(Boolean)!==-1&&u===void 0&&(u=!1),X(r,a,u),s[r]=u}return e.props=s,s}function R(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function he(e){return e.replace(/-(\w)/g,(t,n)=>n.toUpperCase())}function ee(e){return typeof e=="function"}function en(e){return Array.isArray(e)}function K(e){if(!e)return{keys:[],validators:{}};let t=[],n={};if(en(e)){for(let s=0;s<e.length;s++){let l=R(e[s]);t.push(l),n[l]=null}return{keys:t,validators:n}}let o=Object.keys(e);for(let s=0;s<o.length;s++){let l=o[s],r=R(l),a=e[l];t.push(r),ee(a)?n[r]=a:n[r]=null}return{keys:t,validators:n}}function B(e,t,...n){let o=R(t),s=e.emitsOptions;if(s&&s.keys.length>0){s.keys.indexOf(o)!==-1||console.warn(`[Lyt Emit] \u7EC4\u4EF6\u89E6\u53D1\u4E86\u672A\u58F0\u660E\u7684\u4E8B\u4EF6: "${o}"\u3002\u8BF7\u5728 emits \u9009\u9879\u4E2D\u58F0\u660E\u8BE5\u4E8B\u4EF6\u3002`);let i=s.validators[o];if(ee(i))try{if(!i(...n))return console.warn(`[Lyt Emit] \u4E8B\u4EF6 "${o}" \u7684\u53C2\u6570\u672A\u901A\u8FC7\u9A8C\u8BC1\u3002`),!1}catch(c){return console.warn(`[Lyt Emit] \u4E8B\u4EF6 "${o}" \u7684\u9A8C\u8BC1\u5668\u6267\u884C\u51FA\u9519:`,c),!1}}let l="on"+o.charAt(0).toUpperCase()+o.slice(1),r=l.replace(/-([a-z])/g,(p,i)=>i.toUpperCase()),a=e.props||{},u=a[r]||a[l];return ee(u)?(u(...n),!0):!1}var F=(r=>(r.INIT="init",r.MOUNTED="mounted",r.BEFORE_UPDATE="beforeUpdate",r.UPDATED="updated",r.BEFORE_UNMOUNT="beforeUnmount",r.UNMOUNTED="unmounted",r))(F||{}),I=null;function nn(e){return typeof e=="function"}function D(e){let t=I;return I=e,t}function h(e){return function(n,o){if(!nn(n)){console.warn(`[Lyt Lifecycle] \u751F\u547D\u5468\u671F\u94A9\u5B50\u5FC5\u987B\u662F\u4E00\u4E2A\u51FD\u6570\uFF0C\u6536\u5230: ${typeof n}`);return}let s=o||I;if(!s){console.warn(`[Lyt Lifecycle] \u65E0\u6CD5\u6CE8\u518C ${e} \u94A9\u5B50\uFF1A\u6CA1\u6709\u5F53\u524D\u7EC4\u4EF6\u5B9E\u4F8B\u3002\u8BF7\u786E\u4FDD\u5728 setup \u6216\u7EC4\u4EF6\u521D\u59CB\u5316\u9636\u6BB5\u8C03\u7528\u3002`);return}s[e]||(s[e]=[]),s[e].push(n)}}function S(e,t,...n){let o=e[t];if(!(!o||o.length===0))for(let s=0;s<o.length;s++)try{o[s](...n)}catch(l){console.error(`[Lyt Lifecycle] ${t} \u94A9\u5B50\u6267\u884C\u51FA\u9519\uFF08\u7B2C ${s+1} \u4E2A\u56DE\u8C03\uFF09:`,l)}}var be=h("init"),Pe=h("mounted"),xe=h("beforeUpdate"),ke=h("updated"),Ee=h("beforeUnmount"),Te=h("unmounted");function ne(e){return typeof e=="function"}function tn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function T(e){return e==null?null:ne(e)?e:Array.isArray(e)?e.length>0?e:null:e}function z(e,t){let n={};if(t==null)return e.slots=n,n;if(ne(t)||Array.isArray(t))return n.default=T(t),e.slots=n,n;if(tn(t)){let o=Object.keys(t);for(let s=0;s<o.length;s++){let l=o[s],r=t[l];r!==void 0&&(n[l]=T(r))}return e.slots=n,n}return n.default=T(t),e.slots=n,n}function Ae(e,t="default",n){let o=e[t];return o==null?null:ne(o)?o(n):o}function Oe(e,t="default"){let n=e[t];return n!=null}var g=null;function _e(e){if(g){let t=g._lifecycleHooks||(g._lifecycleHooks={});(t.mounted||(t.mounted=[])).push(e)}}function we(e){if(g){let t=g._lifecycleHooks||(g._lifecycleHooks={});(t.unmounted||(t.unmounted=[])).push(e)}}function Re(e){if(g){let t=g._lifecycleHooks||(g._lifecycleHooks={});(t.updated||(t.updated=[])).push(e)}}function Ie(e){if(g){let t=g._lifecycleHooks||(g._lifecycleHooks={});(t.beforeMount||(t.beforeMount=[])).push(e)}}function Fe(e){if(g){let t=g._lifecycleHooks||(g._lifecycleHooks={});(t.beforeUnmount||(t.beforeUnmount=[])).push(e)}}var te=new WeakMap;function De(e,t){if(g){let n=te.get(g);n||(n=new Map,te.set(g,n)),n.set(e,t)}}function Le(e,t){if(g){let n=g;for(;n;){let o=te.get(n);if(o&&o.has(e))return o.get(e);n=n._parent}}return t}function V(e,t,n,o){g=t;try{return e(n,o)}finally{g=null}}function Ue(){return g}function b(e){return typeof e=="function"}function W(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function on(e,t){let n=Object.keys(t);for(let o=0;o<n.length;o++){let s=n[o];e[s]=t[s]}}function v(e){return{name:e.name,options:e,_isComponentDefine:!0}}function Ne(e){let t=e.options,n=$(t.props),o=K(t.emits),s={_isComponent:!0,type:t,name:e.name||t.name,propsOptions:n,emitsOptions:o,props:{},state:{},setupState:{},computedRefs:{},subTree:null,isMounted:!1,isUnmounted:!1,slots:{},watchStopHandles:[],renderProxy:null,emit:null};return s.emit=(l,...r)=>B(s,l,...r),s.renderProxy=rn(s),s}function rn(e){return{get $name(){return e.name},get $props(){return e.props},get $state(){return e.state},get $slots(){return e.slots},get $isMounted(){return e.isMounted},$emit:e.emit,$forceUpdate(){e.update&&e.update()},$unmount(){se(e)},$setState(n){e._signalState?H(e._signalState,n):on(e.state,n),e.update&&e.update()}}}function Me(e,t,n){w(e,t||null),z(e,n||null);let o=e.type;b(o)&&!o._isComponentDefine?re(e):oe(e)}function oe(e){let{type:t}=e,n=t.reactivityMode==="signal",o=D(e);try{if(b(t.setup)){let r={attrs:e.props,slots:e.slots,emit:e.emit},a=V(t.setup,e,e.props,r);if(b(a))t.render=a;else if(W(a)){e.setupState={...a};let u=Object.keys(a);for(let p=0;p<u.length;p++)Object.defineProperty(e.renderProxy,u[p],{get(){return e.setupState[u[p]]},set(i){e.setupState[u[p]]=i},enumerable:!0})}}if(b(t.state)){let r=t.state();if(W(r))if(n){let a=N(r);e._signalState=a,e.state=M(a)}else e.state=(0,k.shallowReactive)({...r})}if(t.computed){let r=Object.keys(t.computed);for(let a=0;a<r.length;a++){let u=r[a],p=t.computed[u],i=typeof p=="function"?()=>p.call(e.renderProxy):()=>p.get.call(e.renderProxy),c=typeof p=="function"?void 0:d=>p.set.call(e.renderProxy,d),m;n?m=(0,G.computed)(i):c?m=(0,k.computed)({get:i,set:c}):m=(0,k.computed)(i),e.computedRefs[u]=m}}let s=t.methods;if(W(s)){let r=Object.keys(s);for(let a=0;a<r.length;a++){let u=r[a],p=s[u];b(p)&&(e.renderProxy[u]=p.bind(e.renderProxy))}}if(b(t.init)){let r=t.init.call(e.renderProxy,e.props,e.state);if(W(r)){e.setupState={...e.setupState,...r};let a=Object.keys(r);for(let u=0;u<a.length;u++)Object.defineProperty(e.renderProxy,a[u],{get(){return e.setupState[a[u]]},set(p){e.setupState[a[u]]=p},enumerable:!0})}}let l=Object.keys(e.state);for(let r=0;r<l.length;r++){let a=l[r];Object.defineProperty(e.renderProxy,a,{get(){return e.state[a]},set(u){e.state[a]=u},enumerable:!0})}if(t.computed){let r=Object.keys(t.computed);for(let a=0;a<r.length;a++){let u=r[a],p=e.computedRefs[u];n?Object.defineProperty(e.renderProxy,u,{get(){return p()},enumerable:!0}):Object.defineProperty(e.renderProxy,u,{get(){return p.value},set(i){p.value=i},enumerable:!0})}}if(t.watch){let r=Object.keys(t.watch);for(let a=0;a<r.length;a++){let u=r[a],p=t.watch[u],i=()=>{let c=e.state[u];if(c!==void 0)return c;let m=e.props[u];return m!==void 0?m:e.renderProxy[u]};if(n){let c=(0,G.effect)(m=>{let d=i();p.handler.call(e.renderProxy,d,void 0)});e.watchStopHandles.push(c)}else{let c=(0,k.watch)(i,(m,d)=>{p.handler.call(e.renderProxy,m,d)},{immediate:!!p.immediate,deep:!!p.deep});e.watchStopHandles.push(c)}}}S(e,"init")}finally{D(o)}}function re(e){let t=e.type,n={slots:e.slots,emit:e.emit},o=t(e.props,n);e.subTree=o}function L(e,t){let n=e._lifecycleHooks;if(!n||!n[t])return;let o=n[t];for(let s=0;s<o.length;s++)try{o[s]()}catch(l){console.error(`[Lyt Composition API] ${t} \u94A9\u5B50\u6267\u884C\u51FA\u9519\uFF08\u7B2C ${s+1} \u4E2A\u56DE\u8C03\uFF09:`,l)}}function He(e,t){if(e.isMounted)return;L(e,"beforeMount");let{type:n}=e;b(n.render)&&t&&(e.subTree=n.render(t,e)),e.isMounted=!0,S(e,"mounted"),L(e,"mounted")}function je(e,t,n){if(e.isUnmounted)return;n&&w(e,n),S(e,"beforeUpdate");let{type:o}=e;b(o.render)&&t&&(e.subTree=o.render(t,e)),S(e,"updated"),L(e,"updated")}function se(e){if(e.isUnmounted)return;S(e,"beforeUnmount"),L(e,"beforeUnmount"),e.isUnmounted=!0,e.isMounted=!1,e.subTree=null;for(let n of e.watchStopHandles)n();e.watchStopHandles=[],S(e,"unmounted"),L(e,"unmounted");let t=["init","mounted","beforeUpdate","updated","beforeUnmount","unmounted"];for(let n=0;n<t.length;n++)e[t[n]]=void 0;e._lifecycleHooks=void 0}var ie=v({name:"Transition",props:{name:{type:String,default:""},appear:{type:Boolean,default:!1},mode:{type:String,default:"default"},duration:{type:Number,default:void 0},enterFromClass:{type:String,default:void 0},enterActiveClass:{type:String,default:void 0},enterToClass:{type:String,default:void 0},leaveFromClass:{type:String,default:void 0},leaveActiveClass:{type:String,default:void 0},leaveToClass:{type:String,default:void 0}},state(){return{isTransitioning:!1,currentKey:null,hasAppeared:!1,oldChild:null,newChild:null}},init(e,t){t.hasAppeared=!1,t.isTransitioning=!1},render(e,t){let n=t.props,o=t.state,s=t.slots,l=s.default?s.default():null,r=Array.isArray(l)?l[0]:l;if(!r)return null;let a=r.key||"",u=o.currentKey!==null&&o.currentKey!==a;!o.hasAppeared&&n.appear&&(o.hasAppeared=!0,r.__transition_appear=!0),o.currentKey=a,u&&n.mode!=="default"&&(o.isTransitioning=!0);let p=r;return p&&typeof p=="object"&&(p.__transition={name:n.name,appear:n.appear,mode:n.mode,duration:n.duration,enterFromClass:n.enterFromClass,enterActiveClass:n.enterActiveClass,enterToClass:n.enterToClass,leaveFromClass:n.leaveFromClass,leaveActiveClass:n.leaveActiveClass,leaveToClass:n.leaveToClass,onBeforeEnter:n.onBeforeEnter,onEnter:n.onEnter,onAfterEnter:n.onAfterEnter,onEnterCancelled:n.onEnterCancelled,onBeforeLeave:n.onBeforeLeave,onLeave:n.onLeave,onAfterLeave:n.onAfterLeave,onLeaveCancelled:n.onLeaveCancelled}),p}});var ae=v({name:"TransitionGroup",props:{name:{type:String,default:""},appear:{type:Boolean,default:!1},mode:{type:String,default:"default"},duration:{type:Number,default:void 0},enterFromClass:{type:String,default:void 0},enterActiveClass:{type:String,default:void 0},enterToClass:{type:String,default:void 0},leaveFromClass:{type:String,default:void 0},leaveActiveClass:{type:String,default:void 0},leaveToClass:{type:String,default:void 0},tag:{type:String,default:void 0},moveClass:{type:String,default:void 0}},state(){return{prevChildrenKeys:new Set,currentChildrenKeys:new Set,positions:[],hasAppeared:!1}},init(e,t){t.hasAppeared=!1,t.prevChildrenKeys=new Set,t.currentChildrenKeys=new Set,t.positions=[]},render(e,t){let n=t.props,o=t.state,s=t.slots,l=s.default?s.default():null,r=Array.isArray(l)?l:l!=null?[l]:[],a=new Set;for(let f=0;f<r.length;f++){let y=r[f];if(y&&typeof y=="object"){let C=y.key!=null?String(y.key):`__tg_${f}`;a.add(C)}}let u=new Set,p=new Set;o.prevChildrenKeys.forEach(f=>{a.has(f)||u.add(f)}),a.forEach(f=>{o.prevChildrenKeys.has(f)||p.add(f)}),o.prevChildrenKeys=new Set(a);let i=n.name||"",c=n.moveClass||(i?`${i}-move`:""),m=r.map((f,y)=>{if(!f||typeof f!="object")return f;let C=f.key!=null?String(f.key):`__tg_${y}`,P=p.has(C),Z=u.has(C),U={...f};return U.__transition_group={name:i,appear:n.appear,duration:n.duration,enterFromClass:n.enterFromClass||(i?`${i}-enter-from`:""),enterActiveClass:n.enterActiveClass||(i?`${i}-enter-active`:""),enterToClass:n.enterToClass||(i?`${i}-enter-to`:""),leaveFromClass:n.leaveFromClass||(i?`${i}-leave-from`:""),leaveActiveClass:n.leaveActiveClass||(i?`${i}-leave-active`:""),leaveToClass:n.leaveToClass||(i?`${i}-leave-to`:""),moveClass:c,isEntering:P,isLeaving:Z,onBeforeEnter:n.onBeforeEnter,onEnter:n.onEnter,onAfterEnter:n.onAfterEnter,onEnterCancelled:n.onEnterCancelled,onBeforeLeave:n.onBeforeLeave,onLeave:n.onLeave,onAfterLeave:n.onAfterLeave,onLeaveCancelled:n.onLeaveCancelled},U}),d=n.tag;return d?{tag:d,children:m,__transition_group_wrapper:!0}:m}});function sn(e){return typeof e=="string"}function an(e){return e instanceof RegExp}function le(e,t){if(!t)return!1;if(sn(t))return e===t;if(an(t))return t.test(e);if(Array.isArray(t)){for(let n=0;n<t.length;n++)if(le(e,t[n]))return!0;return!1}return!1}function A(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>A(n));let t={};for(let n of Object.keys(e))t[n]=A(e[n]);return t}function $e(e){let t=["init","mounted","beforeUpdate","updated","beforeUnmount","unmounted"],n={};for(let o of t){let s=e[o];s&&s.length>0&&(n[o]=[...s])}return{state:A(e.state),setupState:A(e.setupState),computedRefs:e.computedRefs,subTree:e.subTree,isMounted:e.isMounted,watchStopHandles:e.watchStopHandles,lifecycleHooks:n}}function ln(e,t){e.state=A(t.state),e.setupState=A(t.setupState),e.computedRefs=t.computedRefs,e.subTree=t.subTree,e.isMounted=t.isMounted,e.watchStopHandles=t.watchStopHandles;let n=["init","mounted","beforeUpdate","updated","beforeUnmount","unmounted"];for(let o of n){let s=t.lifecycleHooks[o];s&&(e[o]=[...s])}e.isUnmounted=!1}var pe=v({name:"KeepAlive",props:{include:{type:[String,Array],default:void 0},exclude:{type:[String,Array],default:void 0},max:{type:Number,default:void 0}},state(){return{cache:new Map,activeKey:null}},init(e,t){t.cache=new Map,t.activeKey=null},render(e,t){let n=t.props,o=t.state,s=t.slots,l=s.default?s.default():null,r=Array.isArray(l)?l[0]:l;if(!r||typeof r!="object")return null;let a=r.name||r.type&&r.type.name||r.type&&r.type.options&&r.type.options.name||"",u=r.key!=null?String(r.key):a||"__default__",p=un(a,n),i=o.cache.get(u);if(i&&p){if(o.activeKey&&o.activeKey!==u){let c=o.cache.get(o.activeKey);c&&c.component&&(c.savedState=$e(c.component),ue(c.component))}return o.cache.delete(u),o.cache.set(u,i),o.activeKey=u,i.component&&i.savedState&&(ln(i.component,i.savedState),i.savedState=null),i.component&&cn(i.component),i.vnode}if(o.activeKey){let c=o.cache.get(o.activeKey);c&&c.component&&(c.savedState=$e(c.component),ue(c.component))}return r.__keepalive={cacheKey:u,shouldCache:p},o.activeKey=u,p&&(n.max&&o.cache.size>=n.max&&pn(o.cache),o.cache.set(u,{vnode:r,component:null,key:u,savedState:null})),r}});function un(e,t){let{include:n,exclude:o}=t;return!(o&&le(e,o)||n&&!le(e,n))}function pn(e){let t=e.keys().next().value;t!==void 0&&Ke(e,t)}function Ke(e,t){let n=e.get(t);n&&(n.component&&!n.component.isUnmounted&&ue(n.component),e.delete(t))}function cn(e){S(e,"activated"),e.renderProxy&&typeof e.renderProxy.onActivated=="function"&&e.renderProxy.onActivated()}function ue(e){S(e,"deactivated"),e.renderProxy&&typeof e.renderProxy.onDeactivated=="function"&&e.renderProxy.onDeactivated()}function O(e){return typeof e=="function"}function fn(e){if(!e||typeof e!="object")return!1;if(e.__asyncSetup||e.__suspense)return!0;let t=e.type;return!!(t&&(t.__asyncSetup||t.__suspense||t._isAsyncComponent)||t&&t.options&&O(t.options.setup)&&t.options.setup.__isAsync)}function dn(e){if(!e)return null;if(e.__asyncPromise)return e.__asyncPromise;let t=e.type;return t&&t.__asyncPromise?t.__asyncPromise:e.__suspense&&e.__suspense.promise?e.__suspense.promise:null}var ce=v({name:"Suspense",props:{fallback:{type:[Object,Function,Array],default:null},timeout:{type:Number,default:void 0},onPending:{type:Function,default:void 0},onResolve:{type:Function,default:void 0},onFallback:{type:Function,default:void 0}},state(){return{isPending:!1,isTimedOut:!1,isShowingFallback:!1,dependencies:new Map,timeoutId:null,mounted:!1,pendingDescendants:0}},init(e,t){t.isPending=!1,t.isTimedOut=!1,t.isShowingFallback=!1,t.dependencies=new Map,t.timeoutId=null,t.mounted=!1,t.pendingDescendants=0},render(e,t){let n=t.props,o=t.state,s=t.slots,l=s.default?s.default():null,r=Array.isArray(l)?l:l!=null?[l]:[],a=s.fallback?s.fallback():null,u=a!=null?Array.isArray(a)?a[0]:a:n.fallback,p=[],i=[];for(let d=0;d<r.length;d++){let f=r[d];fn(f)?p.push(f):i.push(f)}if(p.length===0)return o.isPending&&(o.isPending=!1,o.isShowingFallback=!1,o.pendingDescendants=0,q(o,n)),r.length===1?r[0]:r;o.isPending||(o.isPending=!0,o.isTimedOut=!1,o.pendingDescendants=p.length,O(n.onPending)&&n.onPending(),n.timeout&&n.timeout>0&&(o.timeoutId=window.setTimeout(()=>{o.isPending&&(o.isTimedOut=!0,o.isShowingFallback||(o.isShowingFallback=!0,O(n.onFallback)&&n.onFallback()))},n.timeout)));let c=!0,m=[];for(let d=0;d<p.length;d++){let f=p[d],y=f.key||`__async_${d}`,C=o.dependencies.get(y);if(C&&C.isResolved){i.push(f);continue}c=!1;let P=dn(f);if(P){let Z=new Promise((U,Be)=>{P.then(()=>{let _=o.dependencies.get(y);_&&(_.isResolved=!0),o.pendingDescendants=Math.max(0,o.pendingDescendants-1),U()}).catch(_=>{let J=o.dependencies.get(y);J&&(J.isRejected=!0,J.error=_),o.pendingDescendants=Math.max(0,o.pendingDescendants-1),Be(_)})});o.dependencies.has(y)||o.dependencies.set(y,{key:y,isResolved:!1,isRejected:!1,resolve:()=>{},reject:()=>{}}),m.push(Z)}}return c?(o.isPending=!1,o.isShowingFallback=!1,o.pendingDescendants=0,q(o,n),O(n.onResolve)&&n.onResolve(),r.length===1?r[0]:r):(m.length>0&&Promise.all(m).then(()=>{o.isPending=!1,o.isShowingFallback=!1,o.pendingDescendants=0,q(o,n),O(n.onResolve)&&n.onResolve(),t.renderProxy&&t.renderProxy.$forceUpdate&&t.renderProxy.$forceUpdate()}).catch(d=>{o.isPending=!1,o.isShowingFallback=!1,o.pendingDescendants=0,q(o,n),console.error("[Lyt Suspense] \u5F02\u6B65\u7EC4\u4EF6\u52A0\u8F7D\u5931\u8D25:",d)}),o.isShowingFallback=!0,O(n.onFallback)&&n.onFallback(),u!=null?u:null)}});function q(e,t){e.timeoutId!==null&&(window.clearTimeout(e.timeoutId),e.timeoutId=null),e.dependencies.forEach((n,o)=>{(n.isResolved||n.isRejected)&&e.dependencies.delete(o)})}function fe(e){return typeof e=="function"}function yn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function mn(e){return e&&e._isComponentDefine?e:yn(e)&&!fe(e)?v(e):fe(e)?e._isComponentDefine?e:v({render(t,n){return e(n.props,{slots:n.slots,emit:n.emit})}}):(console.warn("[Lyt AsyncComponent] loader \u8FD4\u56DE\u4E86\u65E0\u6548\u7684\u7EC4\u4EF6\u7C7B\u578B:",typeof e),v({render(){return null}}))}function de(e){let t;fe(e)?t={loader:e}:t=e;let{loader:n,loadingComponent:o,errorComponent:s,delay:l=200,timeout:r,onError:a,suspensible:u=!0,retryCount:p=3}=t,i={status:"pending",resolvedComponent:null,error:null,isRetrying:!1,retryAttempts:0,loadingDelayId:null,timeoutId:null,loadPromise:null};function c(){if(i.loadPromise)return i.loadPromise;i.status="loading",i.isRetrying=!1;let f=n().then(y=>(i.status="resolved",i.resolvedComponent=mn(y),i.error=null,m(),i.resolvedComponent)).catch(y=>{if(i.error=y,a&&i.retryAttempts<p)return i.retryAttempts++,i.isRetrying=!0,i.loadPromise=null,a(y,()=>{c()},()=>{i.status="error",m()}),new Promise(()=>{});throw i.status="error",m(),y});return i.loadPromise=f,r&&r>0&&(i.timeoutId=window.setTimeout(()=>{(i.status==="loading"||i.status==="pending")&&(i.status="timeout",i.error=new Error(`[Lyt AsyncComponent] \u52A0\u8F7D\u8D85\u65F6 (${r}ms)`),m())},r)),f}function m(){i.loadingDelayId!==null&&(window.clearTimeout(i.loadingDelayId),i.loadingDelayId=null),i.timeoutId!==null&&(window.clearTimeout(i.timeoutId),i.timeoutId=null)}let d=v({name:"AsyncComponent",state(){return{...i}},init(f,y){Object.assign(y,i)},render(f,y){let C=y.state;if(C.status==="resolved"&&C.resolvedComponent){let P=C.resolvedComponent;return{tag:P,__asyncResolved:!0,__asyncComponent:P}}return(C.status==="error"||C.status==="timeout")&&s?{tag:s,__asyncError:!0,__asyncErrorInfo:{error:C.error,retry:()=>{i.status="pending",i.loadPromise=null,c()},isTimeout:C.status==="timeout"}}:C.status==="loading"||C.status==="pending"?u?(i.loadPromise||c(),{__suspense:!0,__asyncPromise:i.loadPromise,__asyncSetup:!0,_isAsyncComponent:!0}):(i.loadPromise||c(),o&&(l>0&&i.loadingDelayId===null&&(i.loadingDelayId=window.setTimeout(()=>{y.renderProxy&&y.renderProxy.$forceUpdate&&y.renderProxy.$forceUpdate()},l)),l<=0||i.loadingDelayId===null)?{tag:o,__asyncLoading:!0}:null):C.isRetrying&&o?{tag:o,__asyncRetrying:!0}:null}});return d._isAsyncComponent=!0,d.__asyncSetup=!0,d.__suspense=!0,d._asyncState=i,d._load=c,d._clearTimers=m,d}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{shallowReactive as Ve,computed as ie,watch as We}from"@lytjs/reactivity";import{computed as Ge,effect as qe}from"@lytjs/reactivity/signal";import{signal as ve}from"@lytjs/reactivity/signal";function $(e){let t={},n=Object.keys(e);for(let o=0;o<n.length;o++){let s=n[o];t[s]=ve(e[s])}return t}function k(e){return typeof e=="function"&&e!==null&&"set"in e}function K(e){return new Proxy(e,{get(t,n){if(typeof n=="symbol")return t[n];let o=t[n];return k(o)?o():t[n]},set(t,n,o){if(typeof n=="symbol")return t[n]=o,!0;let s=t[n];return k(s)?s.set(o):t[n]=o,!0},has(t,n){return n in t},ownKeys(t){return Object.keys(t)},getOwnPropertyDescriptor(t,n){if(typeof n=="string"&&n in t)return{configurable:!0,enumerable:!0,get:()=>{let o=t[n];return k(o)?o():o},set:o=>{let s=t[n];k(s)?s.set(o):t[n]=o}}}})}function Se(e){let t={},n=Object.keys(e);for(let o=0;o<n.length;o++){let s=n[o],l=e[s];t[s]=k(l)?l():l}return t}function B(e,t){let n=Object.keys(t);for(let o=0;o<n.length;o++){let s=n[o],l=e[s];k(l)&&l.set(t[s])}}function he(e){}function be(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function R(e){return typeof e=="function"}function ne(e){return typeof e=="string"}function te(e){return typeof e=="boolean"}function oe(e){return typeof e=="number"&&!isNaN(e)}function P(e){return Array.isArray(e)}function Pe(e){return e!==null&&typeof e=="object"}function xe(e){return e===null?"null":e===void 0?"undefined":P(e)?"array":te(e)?"boolean":oe(e)?"number":ne(e)?"string":R(e)?"function":"object"}function ke(e){return e===String?"String":e===Number?"Number":e===Boolean?"Boolean":e===Array?"Array":e===Object?"Object":e===Function?"Function":"unknown"}function z(e){if(!e)return{options:{},keys:[]};if(P(e)){let s={},l=[];for(let r=0;r<e.length;r++){let a=e[r];s[a]={type:null},l.push(a)}return{options:s,keys:l}}let t={},n=[],o=Object.keys(e);for(let s=0;s<o.length;s++){let l=o[s],r=e[l];r==null?t[l]={type:null}:r===String||r===Number||r===Boolean||r===Array||r===Object||r===Function?t[l]={type:r}:be(r)?t[l]={...r}:P(r)?t[l]={type:r}:t[l]={type:null},n.push(l)}return{options:t,keys:n}}function re(e,t,n){let{type:o,required:s,validator:l}=t;if(n==null)return s?(console.warn(`[Lyt Props] \u7F3A\u5C11\u5FC5\u586B prop: "${e}"`),!1):!0;if(o!=null){let r=P(o)?o:[o],a=!1;for(let u=0;u<r.length;u++){let p=r[u],i=!1;if(p===String?i=ne(n):p===Number?i=oe(n):p===Boolean?i=te(n):p===Function?i=R(n):p===Array?i=P(n):p===Object&&(i=Pe(n)),i){a=!0;break}}if(!a){let u=r.map(ke).join(" | ");return console.warn(`[Lyt Props] \u65E0\u6548\u7684 prop: "${e}"\u3002\u671F\u671B\u7C7B\u578B ${u}\uFF0C\u5B9E\u9645\u5F97\u5230 ${xe(n)}\u3002`),!1}}if(l&&R(l))try{if(!l(n))return console.warn(`[Lyt Props] \u81EA\u5B9A\u4E49\u9A8C\u8BC1\u5931\u8D25: prop "${e}" \u7684\u503C\u672A\u901A\u8FC7 validator \u6821\u9A8C\u3002`),!1}catch(r){return console.warn(`[Lyt Props] validator \u6267\u884C\u51FA\u9519: prop "${e}"`,r),!1}return!0}function se(e,t){let{default:n}=e;if(n!==void 0){if(R(n)){let o=e.type;if(!(o===Function||P(o)&&o.indexOf(Function)!==-1))return n()}return n}}function I(e,t){let{options:n,keys:o}=e.propsOptions,s={};for(let l=0;l<o.length;l++){let r=o[l],a=n[r],u=t?t[r]:void 0;u===void 0&&(u=se(a,r)),a.type!==null&&a.type!==void 0&&(P(a.type)?a.type:[a.type]).indexOf(Boolean)!==-1&&u===void 0&&(u=!1),re(r,a,u),s[r]=u}return e.props=s,s}function F(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function Ee(e){return e.replace(/-(\w)/g,(t,n)=>n.toUpperCase())}function V(e){return typeof e=="function"}function Te(e){return Array.isArray(e)}function W(e){if(!e)return{keys:[],validators:{}};let t=[],n={};if(Te(e)){for(let s=0;s<e.length;s++){let l=F(e[s]);t.push(l),n[l]=null}return{keys:t,validators:n}}let o=Object.keys(e);for(let s=0;s<o.length;s++){let l=o[s],r=F(l),a=e[l];t.push(r),V(a)?n[r]=a:n[r]=null}return{keys:t,validators:n}}function G(e,t,...n){let o=F(t),s=e.emitsOptions;if(s&&s.keys.length>0){s.keys.indexOf(o)!==-1||console.warn(`[Lyt Emit] \u7EC4\u4EF6\u89E6\u53D1\u4E86\u672A\u58F0\u660E\u7684\u4E8B\u4EF6: "${o}"\u3002\u8BF7\u5728 emits \u9009\u9879\u4E2D\u58F0\u660E\u8BE5\u4E8B\u4EF6\u3002`);let i=s.validators[o];if(V(i))try{if(!i(...n))return console.warn(`[Lyt Emit] \u4E8B\u4EF6 "${o}" \u7684\u53C2\u6570\u672A\u901A\u8FC7\u9A8C\u8BC1\u3002`),!1}catch(c){return console.warn(`[Lyt Emit] \u4E8B\u4EF6 "${o}" \u7684\u9A8C\u8BC1\u5668\u6267\u884C\u51FA\u9519:`,c),!1}}let l="on"+o.charAt(0).toUpperCase()+o.slice(1),r=l.replace(/-([a-z])/g,(p,i)=>i.toUpperCase()),a=e.props||{},u=a[r]||a[l];return V(u)?(u(...n),!0):!1}var L=(r=>(r.INIT="init",r.MOUNTED="mounted",r.BEFORE_UPDATE="beforeUpdate",r.UPDATED="updated",r.BEFORE_UNMOUNT="beforeUnmount",r.UNMOUNTED="unmounted",r))(L||{}),D=null;function Ae(e){return typeof e=="function"}function U(e){let t=D;return D=e,t}function x(e){return function(n,o){if(!Ae(n)){console.warn(`[Lyt Lifecycle] \u751F\u547D\u5468\u671F\u94A9\u5B50\u5FC5\u987B\u662F\u4E00\u4E2A\u51FD\u6570\uFF0C\u6536\u5230: ${typeof n}`);return}let s=o||D;if(!s){console.warn(`[Lyt Lifecycle] \u65E0\u6CD5\u6CE8\u518C ${e} \u94A9\u5B50\uFF1A\u6CA1\u6709\u5F53\u524D\u7EC4\u4EF6\u5B9E\u4F8B\u3002\u8BF7\u786E\u4FDD\u5728 setup \u6216\u7EC4\u4EF6\u521D\u59CB\u5316\u9636\u6BB5\u8C03\u7528\u3002`);return}s[e]||(s[e]=[]),s[e].push(n)}}function S(e,t,...n){let o=e[t];if(!(!o||o.length===0))for(let s=0;s<o.length;s++)try{o[s](...n)}catch(l){console.error(`[Lyt Lifecycle] ${t} \u94A9\u5B50\u6267\u884C\u51FA\u9519\uFF08\u7B2C ${s+1} \u4E2A\u56DE\u8C03\uFF09:`,l)}}var Oe=x("init"),_e=x("mounted"),we=x("beforeUpdate"),Re=x("updated"),Ie=x("beforeUnmount"),Fe=x("unmounted");function q(e){return typeof e=="function"}function De(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function O(e){return e==null?null:q(e)?e:Array.isArray(e)?e.length>0?e:null:e}function Z(e,t){let n={};if(t==null)return e.slots=n,n;if(q(t)||Array.isArray(t))return n.default=O(t),e.slots=n,n;if(De(t)){let o=Object.keys(t);for(let s=0;s<o.length;s++){let l=o[s],r=t[l];r!==void 0&&(n[l]=O(r))}return e.slots=n,n}return n.default=O(t),e.slots=n,n}function Le(e,t="default",n){let o=e[t];return o==null?null:q(o)?o(n):o}function Ue(e,t="default"){let n=e[t];return n!=null}var g=null;function Ne(e){if(g){let t=g._lifecycleHooks||(g._lifecycleHooks={});(t.mounted||(t.mounted=[])).push(e)}}function Me(e){if(g){let t=g._lifecycleHooks||(g._lifecycleHooks={});(t.unmounted||(t.unmounted=[])).push(e)}}function He(e){if(g){let t=g._lifecycleHooks||(g._lifecycleHooks={});(t.updated||(t.updated=[])).push(e)}}function je(e){if(g){let t=g._lifecycleHooks||(g._lifecycleHooks={});(t.beforeMount||(t.beforeMount=[])).push(e)}}function $e(e){if(g){let t=g._lifecycleHooks||(g._lifecycleHooks={});(t.beforeUnmount||(t.beforeUnmount=[])).push(e)}}var J=new WeakMap;function Ke(e,t){if(g){let n=J.get(g);n||(n=new Map,J.set(g,n)),n.set(e,t)}}function Be(e,t){if(g){let n=g;for(;n;){let o=J.get(n);if(o&&o.has(e))return o.get(e);n=n._parent}}return t}function Q(e,t,n,o){g=t;try{return e(n,o)}finally{g=null}}function ze(){return g}function h(e){return typeof e=="function"}function N(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ze(e,t){let n=Object.keys(t);for(let o=0;o<n.length;o++){let s=n[o];e[s]=t[s]}}function v(e){return{name:e.name,options:e,_isComponentDefine:!0}}function Je(e){let t=e.options,n=z(t.props),o=W(t.emits),s={_isComponent:!0,type:t,name:e.name||t.name,propsOptions:n,emitsOptions:o,props:{},state:{},setupState:{},computedRefs:{},subTree:null,isMounted:!1,isUnmounted:!1,slots:{},watchStopHandles:[],renderProxy:null,emit:null};return s.emit=(l,...r)=>G(s,l,...r),s.renderProxy=Qe(s),s}function Qe(e){return{get $name(){return e.name},get $props(){return e.props},get $state(){return e.state},get $slots(){return e.slots},get $isMounted(){return e.isMounted},$emit:e.emit,$forceUpdate(){e.update&&e.update()},$unmount(){ue(e)},$setState(n){e._signalState?B(e._signalState,n):Ze(e.state,n),e.update&&e.update()}}}function Xe(e,t,n){I(e,t||null),Z(e,n||null);let o=e.type;h(o)&&!o._isComponentDefine?le(e):ae(e)}function ae(e){let{type:t}=e,n=t.reactivityMode==="signal",o=U(e);try{if(h(t.setup)){let r={attrs:e.props,slots:e.slots,emit:e.emit},a=Q(t.setup,e,e.props,r);if(h(a))t.render=a;else if(N(a)){e.setupState={...a};let u=Object.keys(a);for(let p=0;p<u.length;p++)Object.defineProperty(e.renderProxy,u[p],{get(){return e.setupState[u[p]]},set(i){e.setupState[u[p]]=i},enumerable:!0})}}if(h(t.state)){let r=t.state();if(N(r))if(n){let a=$(r);e._signalState=a,e.state=K(a)}else e.state=Ve({...r})}if(t.computed){let r=Object.keys(t.computed);for(let a=0;a<r.length;a++){let u=r[a],p=t.computed[u],i=typeof p=="function"?()=>p.call(e.renderProxy):()=>p.get.call(e.renderProxy),c=typeof p=="function"?void 0:d=>p.set.call(e.renderProxy,d),m;n?m=Ge(i):c?m=ie({get:i,set:c}):m=ie(i),e.computedRefs[u]=m}}let s=t.methods;if(N(s)){let r=Object.keys(s);for(let a=0;a<r.length;a++){let u=r[a],p=s[u];h(p)&&(e.renderProxy[u]=p.bind(e.renderProxy))}}if(h(t.init)){let r=t.init.call(e.renderProxy,e.props,e.state);if(N(r)){e.setupState={...e.setupState,...r};let a=Object.keys(r);for(let u=0;u<a.length;u++)Object.defineProperty(e.renderProxy,a[u],{get(){return e.setupState[a[u]]},set(p){e.setupState[a[u]]=p},enumerable:!0})}}let l=Object.keys(e.state);for(let r=0;r<l.length;r++){let a=l[r];Object.defineProperty(e.renderProxy,a,{get(){return e.state[a]},set(u){e.state[a]=u},enumerable:!0})}if(t.computed){let r=Object.keys(t.computed);for(let a=0;a<r.length;a++){let u=r[a],p=e.computedRefs[u];n?Object.defineProperty(e.renderProxy,u,{get(){return p()},enumerable:!0}):Object.defineProperty(e.renderProxy,u,{get(){return p.value},set(i){p.value=i},enumerable:!0})}}if(t.watch){let r=Object.keys(t.watch);for(let a=0;a<r.length;a++){let u=r[a],p=t.watch[u],i=()=>{let c=e.state[u];if(c!==void 0)return c;let m=e.props[u];return m!==void 0?m:e.renderProxy[u]};if(n){let c=qe(m=>{let d=i();p.handler.call(e.renderProxy,d,void 0)});e.watchStopHandles.push(c)}else{let c=We(i,(m,d)=>{p.handler.call(e.renderProxy,m,d)},{immediate:!!p.immediate,deep:!!p.deep});e.watchStopHandles.push(c)}}}S(e,"init")}finally{U(o)}}function le(e){let t=e.type,n={slots:e.slots,emit:e.emit},o=t(e.props,n);e.subTree=o}function _(e,t){let n=e._lifecycleHooks;if(!n||!n[t])return;let o=n[t];for(let s=0;s<o.length;s++)try{o[s]()}catch(l){console.error(`[Lyt Composition API] ${t} \u94A9\u5B50\u6267\u884C\u51FA\u9519\uFF08\u7B2C ${s+1} \u4E2A\u56DE\u8C03\uFF09:`,l)}}function Ye(e,t){if(e.isMounted)return;_(e,"beforeMount");let{type:n}=e;h(n.render)&&t&&(e.subTree=n.render(t,e)),e.isMounted=!0,S(e,"mounted"),_(e,"mounted")}function en(e,t,n){if(e.isUnmounted)return;n&&I(e,n),S(e,"beforeUpdate");let{type:o}=e;h(o.render)&&t&&(e.subTree=o.render(t,e)),S(e,"updated"),_(e,"updated")}function ue(e){if(e.isUnmounted)return;S(e,"beforeUnmount"),_(e,"beforeUnmount"),e.isUnmounted=!0,e.isMounted=!1,e.subTree=null;for(let n of e.watchStopHandles)n();e.watchStopHandles=[],S(e,"unmounted"),_(e,"unmounted");let t=["init","mounted","beforeUpdate","updated","beforeUnmount","unmounted"];for(let n=0;n<t.length;n++)e[t[n]]=void 0;e._lifecycleHooks=void 0}var pe=v({name:"Transition",props:{name:{type:String,default:""},appear:{type:Boolean,default:!1},mode:{type:String,default:"default"},duration:{type:Number,default:void 0},enterFromClass:{type:String,default:void 0},enterActiveClass:{type:String,default:void 0},enterToClass:{type:String,default:void 0},leaveFromClass:{type:String,default:void 0},leaveActiveClass:{type:String,default:void 0},leaveToClass:{type:String,default:void 0}},state(){return{isTransitioning:!1,currentKey:null,hasAppeared:!1,oldChild:null,newChild:null}},init(e,t){t.hasAppeared=!1,t.isTransitioning=!1},render(e,t){let n=t.props,o=t.state,s=t.slots,l=s.default?s.default():null,r=Array.isArray(l)?l[0]:l;if(!r)return null;let a=r.key||"",u=o.currentKey!==null&&o.currentKey!==a;!o.hasAppeared&&n.appear&&(o.hasAppeared=!0,r.__transition_appear=!0),o.currentKey=a,u&&n.mode!=="default"&&(o.isTransitioning=!0);let p=r;return p&&typeof p=="object"&&(p.__transition={name:n.name,appear:n.appear,mode:n.mode,duration:n.duration,enterFromClass:n.enterFromClass,enterActiveClass:n.enterActiveClass,enterToClass:n.enterToClass,leaveFromClass:n.leaveFromClass,leaveActiveClass:n.leaveActiveClass,leaveToClass:n.leaveToClass,onBeforeEnter:n.onBeforeEnter,onEnter:n.onEnter,onAfterEnter:n.onAfterEnter,onEnterCancelled:n.onEnterCancelled,onBeforeLeave:n.onBeforeLeave,onLeave:n.onLeave,onAfterLeave:n.onAfterLeave,onLeaveCancelled:n.onLeaveCancelled}),p}});var ce=v({name:"TransitionGroup",props:{name:{type:String,default:""},appear:{type:Boolean,default:!1},mode:{type:String,default:"default"},duration:{type:Number,default:void 0},enterFromClass:{type:String,default:void 0},enterActiveClass:{type:String,default:void 0},enterToClass:{type:String,default:void 0},leaveFromClass:{type:String,default:void 0},leaveActiveClass:{type:String,default:void 0},leaveToClass:{type:String,default:void 0},tag:{type:String,default:void 0},moveClass:{type:String,default:void 0}},state(){return{prevChildrenKeys:new Set,currentChildrenKeys:new Set,positions:[],hasAppeared:!1}},init(e,t){t.hasAppeared=!1,t.prevChildrenKeys=new Set,t.currentChildrenKeys=new Set,t.positions=[]},render(e,t){let n=t.props,o=t.state,s=t.slots,l=s.default?s.default():null,r=Array.isArray(l)?l:l!=null?[l]:[],a=new Set;for(let f=0;f<r.length;f++){let y=r[f];if(y&&typeof y=="object"){let C=y.key!=null?String(y.key):`__tg_${f}`;a.add(C)}}let u=new Set,p=new Set;o.prevChildrenKeys.forEach(f=>{a.has(f)||u.add(f)}),a.forEach(f=>{o.prevChildrenKeys.has(f)||p.add(f)}),o.prevChildrenKeys=new Set(a);let i=n.name||"",c=n.moveClass||(i?`${i}-move`:""),m=r.map((f,y)=>{if(!f||typeof f!="object")return f;let C=f.key!=null?String(f.key):`__tg_${y}`,b=p.has(C),H=u.has(C),w={...f};return w.__transition_group={name:i,appear:n.appear,duration:n.duration,enterFromClass:n.enterFromClass||(i?`${i}-enter-from`:""),enterActiveClass:n.enterActiveClass||(i?`${i}-enter-active`:""),enterToClass:n.enterToClass||(i?`${i}-enter-to`:""),leaveFromClass:n.leaveFromClass||(i?`${i}-leave-from`:""),leaveActiveClass:n.leaveActiveClass||(i?`${i}-leave-active`:""),leaveToClass:n.leaveToClass||(i?`${i}-leave-to`:""),moveClass:c,isEntering:b,isLeaving:H,onBeforeEnter:n.onBeforeEnter,onEnter:n.onEnter,onAfterEnter:n.onAfterEnter,onEnterCancelled:n.onEnterCancelled,onBeforeLeave:n.onBeforeLeave,onLeave:n.onLeave,onAfterLeave:n.onAfterLeave,onLeaveCancelled:n.onLeaveCancelled},w}),d=n.tag;return d?{tag:d,children:m,__transition_group_wrapper:!0}:m}});function nn(e){return typeof e=="string"}function tn(e){return e instanceof RegExp}function X(e,t){if(!t)return!1;if(nn(t))return e===t;if(tn(t))return t.test(e);if(Array.isArray(t)){for(let n=0;n<t.length;n++)if(X(e,t[n]))return!0;return!1}return!1}function E(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>E(n));let t={};for(let n of Object.keys(e))t[n]=E(e[n]);return t}function fe(e){let t=["init","mounted","beforeUpdate","updated","beforeUnmount","unmounted"],n={};for(let o of t){let s=e[o];s&&s.length>0&&(n[o]=[...s])}return{state:E(e.state),setupState:E(e.setupState),computedRefs:e.computedRefs,subTree:e.subTree,isMounted:e.isMounted,watchStopHandles:e.watchStopHandles,lifecycleHooks:n}}function on(e,t){e.state=E(t.state),e.setupState=E(t.setupState),e.computedRefs=t.computedRefs,e.subTree=t.subTree,e.isMounted=t.isMounted,e.watchStopHandles=t.watchStopHandles;let n=["init","mounted","beforeUpdate","updated","beforeUnmount","unmounted"];for(let o of n){let s=t.lifecycleHooks[o];s&&(e[o]=[...s])}e.isUnmounted=!1}var de=v({name:"KeepAlive",props:{include:{type:[String,Array],default:void 0},exclude:{type:[String,Array],default:void 0},max:{type:Number,default:void 0}},state(){return{cache:new Map,activeKey:null}},init(e,t){t.cache=new Map,t.activeKey=null},render(e,t){let n=t.props,o=t.state,s=t.slots,l=s.default?s.default():null,r=Array.isArray(l)?l[0]:l;if(!r||typeof r!="object")return null;let a=r.name||r.type&&r.type.name||r.type&&r.type.options&&r.type.options.name||"",u=r.key!=null?String(r.key):a||"__default__",p=rn(a,n),i=o.cache.get(u);if(i&&p){if(o.activeKey&&o.activeKey!==u){let c=o.cache.get(o.activeKey);c&&c.component&&(c.savedState=fe(c.component),Y(c.component))}return o.cache.delete(u),o.cache.set(u,i),o.activeKey=u,i.component&&i.savedState&&(on(i.component,i.savedState),i.savedState=null),i.component&&an(i.component),i.vnode}if(o.activeKey){let c=o.cache.get(o.activeKey);c&&c.component&&(c.savedState=fe(c.component),Y(c.component))}return r.__keepalive={cacheKey:u,shouldCache:p},o.activeKey=u,p&&(n.max&&o.cache.size>=n.max&&sn(o.cache),o.cache.set(u,{vnode:r,component:null,key:u,savedState:null})),r}});function rn(e,t){let{include:n,exclude:o}=t;return!(o&&X(e,o)||n&&!X(e,n))}function sn(e){let t=e.keys().next().value;t!==void 0&&ye(e,t)}function ye(e,t){let n=e.get(t);n&&(n.component&&!n.component.isUnmounted&&Y(n.component),e.delete(t))}function an(e){S(e,"activated"),e.renderProxy&&typeof e.renderProxy.onActivated=="function"&&e.renderProxy.onActivated()}function Y(e){S(e,"deactivated"),e.renderProxy&&typeof e.renderProxy.onDeactivated=="function"&&e.renderProxy.onDeactivated()}function T(e){return typeof e=="function"}function ln(e){if(!e||typeof e!="object")return!1;if(e.__asyncSetup||e.__suspense)return!0;let t=e.type;return!!(t&&(t.__asyncSetup||t.__suspense||t._isAsyncComponent)||t&&t.options&&T(t.options.setup)&&t.options.setup.__isAsync)}function un(e){if(!e)return null;if(e.__asyncPromise)return e.__asyncPromise;let t=e.type;return t&&t.__asyncPromise?t.__asyncPromise:e.__suspense&&e.__suspense.promise?e.__suspense.promise:null}var me=v({name:"Suspense",props:{fallback:{type:[Object,Function,Array],default:null},timeout:{type:Number,default:void 0},onPending:{type:Function,default:void 0},onResolve:{type:Function,default:void 0},onFallback:{type:Function,default:void 0}},state(){return{isPending:!1,isTimedOut:!1,isShowingFallback:!1,dependencies:new Map,timeoutId:null,mounted:!1,pendingDescendants:0}},init(e,t){t.isPending=!1,t.isTimedOut=!1,t.isShowingFallback=!1,t.dependencies=new Map,t.timeoutId=null,t.mounted=!1,t.pendingDescendants=0},render(e,t){let n=t.props,o=t.state,s=t.slots,l=s.default?s.default():null,r=Array.isArray(l)?l:l!=null?[l]:[],a=s.fallback?s.fallback():null,u=a!=null?Array.isArray(a)?a[0]:a:n.fallback,p=[],i=[];for(let d=0;d<r.length;d++){let f=r[d];ln(f)?p.push(f):i.push(f)}if(p.length===0)return o.isPending&&(o.isPending=!1,o.isShowingFallback=!1,o.pendingDescendants=0,M(o,n)),r.length===1?r[0]:r;o.isPending||(o.isPending=!0,o.isTimedOut=!1,o.pendingDescendants=p.length,T(n.onPending)&&n.onPending(),n.timeout&&n.timeout>0&&(o.timeoutId=window.setTimeout(()=>{o.isPending&&(o.isTimedOut=!0,o.isShowingFallback||(o.isShowingFallback=!0,T(n.onFallback)&&n.onFallback()))},n.timeout)));let c=!0,m=[];for(let d=0;d<p.length;d++){let f=p[d],y=f.key||`__async_${d}`,C=o.dependencies.get(y);if(C&&C.isResolved){i.push(f);continue}c=!1;let b=un(f);if(b){let H=new Promise((w,Ce)=>{b.then(()=>{let A=o.dependencies.get(y);A&&(A.isResolved=!0),o.pendingDescendants=Math.max(0,o.pendingDescendants-1),w()}).catch(A=>{let j=o.dependencies.get(y);j&&(j.isRejected=!0,j.error=A),o.pendingDescendants=Math.max(0,o.pendingDescendants-1),Ce(A)})});o.dependencies.has(y)||o.dependencies.set(y,{key:y,isResolved:!1,isRejected:!1,resolve:()=>{},reject:()=>{}}),m.push(H)}}return c?(o.isPending=!1,o.isShowingFallback=!1,o.pendingDescendants=0,M(o,n),T(n.onResolve)&&n.onResolve(),r.length===1?r[0]:r):(m.length>0&&Promise.all(m).then(()=>{o.isPending=!1,o.isShowingFallback=!1,o.pendingDescendants=0,M(o,n),T(n.onResolve)&&n.onResolve(),t.renderProxy&&t.renderProxy.$forceUpdate&&t.renderProxy.$forceUpdate()}).catch(d=>{o.isPending=!1,o.isShowingFallback=!1,o.pendingDescendants=0,M(o,n),console.error("[Lyt Suspense] \u5F02\u6B65\u7EC4\u4EF6\u52A0\u8F7D\u5931\u8D25:",d)}),o.isShowingFallback=!0,T(n.onFallback)&&n.onFallback(),u!=null?u:null)}});function M(e,t){e.timeoutId!==null&&(window.clearTimeout(e.timeoutId),e.timeoutId=null),e.dependencies.forEach((n,o)=>{(n.isResolved||n.isRejected)&&e.dependencies.delete(o)})}function ee(e){return typeof e=="function"}function pn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function cn(e){return e&&e._isComponentDefine?e:pn(e)&&!ee(e)?v(e):ee(e)?e._isComponentDefine?e:v({render(t,n){return e(n.props,{slots:n.slots,emit:n.emit})}}):(console.warn("[Lyt AsyncComponent] loader \u8FD4\u56DE\u4E86\u65E0\u6548\u7684\u7EC4\u4EF6\u7C7B\u578B:",typeof e),v({render(){return null}}))}function ge(e){let t;ee(e)?t={loader:e}:t=e;let{loader:n,loadingComponent:o,errorComponent:s,delay:l=200,timeout:r,onError:a,suspensible:u=!0,retryCount:p=3}=t,i={status:"pending",resolvedComponent:null,error:null,isRetrying:!1,retryAttempts:0,loadingDelayId:null,timeoutId:null,loadPromise:null};function c(){if(i.loadPromise)return i.loadPromise;i.status="loading",i.isRetrying=!1;let f=n().then(y=>(i.status="resolved",i.resolvedComponent=cn(y),i.error=null,m(),i.resolvedComponent)).catch(y=>{if(i.error=y,a&&i.retryAttempts<p)return i.retryAttempts++,i.isRetrying=!0,i.loadPromise=null,a(y,()=>{c()},()=>{i.status="error",m()}),new Promise(()=>{});throw i.status="error",m(),y});return i.loadPromise=f,r&&r>0&&(i.timeoutId=window.setTimeout(()=>{(i.status==="loading"||i.status==="pending")&&(i.status="timeout",i.error=new Error(`[Lyt AsyncComponent] \u52A0\u8F7D\u8D85\u65F6 (${r}ms)`),m())},r)),f}function m(){i.loadingDelayId!==null&&(window.clearTimeout(i.loadingDelayId),i.loadingDelayId=null),i.timeoutId!==null&&(window.clearTimeout(i.timeoutId),i.timeoutId=null)}let d=v({name:"AsyncComponent",state(){return{...i}},init(f,y){Object.assign(y,i)},render(f,y){let C=y.state;if(C.status==="resolved"&&C.resolvedComponent){let b=C.resolvedComponent;return{tag:b,__asyncResolved:!0,__asyncComponent:b}}return(C.status==="error"||C.status==="timeout")&&s?{tag:s,__asyncError:!0,__asyncErrorInfo:{error:C.error,retry:()=>{i.status="pending",i.loadPromise=null,c()},isTimeout:C.status==="timeout"}}:C.status==="loading"||C.status==="pending"?u?(i.loadPromise||c(),{__suspense:!0,__asyncPromise:i.loadPromise,__asyncSetup:!0,_isAsyncComponent:!0}):(i.loadPromise||c(),o&&(l>0&&i.loadingDelayId===null&&(i.loadingDelayId=window.setTimeout(()=>{y.renderProxy&&y.renderProxy.$forceUpdate&&y.renderProxy.$forceUpdate()},l)),l<=0||i.loadingDelayId===null)?{tag:o,__asyncLoading:!0}:null):C.isRetrying&&o?{tag:o,__asyncRetrying:!0}:null}});return d._isAsyncComponent=!0,d.__asyncSetup=!0,d.__suspense=!0,d._asyncState=i,d._load=c,d._clearTimers=m,d}export{de as KeepAlive,L as LifecycleHook,me as Suspense,pe as Transition,ce as TransitionGroup,S as callLifecycleHook,F as camelizeToHyphen,je as compositionOnBeforeMount,$e as compositionOnBeforeUnmount,Ne as compositionOnMounted,Me as compositionOnUnmounted,He as compositionOnUpdated,Je as createComponentInstance,x as createLifecycleHook,$ as createSignalState,K as createSignalStateProxy,D as currentInstance,ge as defineAsyncComponent,v as defineComponent,he as disposeSignalState,G as emit,ze as getCurrentInstance,se as getPropDefaultValue,Se as getSignalStateSnapshot,Ue as hasSlot,Ee as hyphenToCamel,I as initProps,Z as initSlots,Be as inject,Ye as mountComponent,W as normalizeEmits,z as normalizePropsOptions,O as normalizeSlotValue,Ie as onBeforeUnmount,we as onBeforeUpdate,Oe as onInit,_e as onMounted,Fe as onUnmounted,Re as onUpdated,B as patchSignalState,Ke as provide,Le as renderSlot,Q as runSetup,U as setCurrentInstance,Xe as setupComponent,le as setupFunctionComponent,ae as setupStatefulComponent,ue as unmountComponent,en as updateComponent,re as validateProp};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js defineAsyncComponent - 异步组件定义
|
|
3
|
+
*
|
|
4
|
+
* 定义异步加载的组件,支持加载状态、错误处理、超时和重试。
|
|
5
|
+
* 可配合 Suspense 组件使用(suspensible 模式)。
|
|
6
|
+
* 纯原生实现,零外部依赖。
|
|
7
|
+
*/
|
|
8
|
+
import { type ComponentDefine } from '../define-component';
|
|
9
|
+
/** 异步组件配置选项 */
|
|
10
|
+
export interface AsyncComponentOptions {
|
|
11
|
+
/** 异步加载函数,返回 Promise<ComponentDefine | ComponentOptions> */
|
|
12
|
+
loader: () => Promise<any>;
|
|
13
|
+
/** 加载中显示的组件 */
|
|
14
|
+
loadingComponent?: any;
|
|
15
|
+
/** 加载失败显示的组件 */
|
|
16
|
+
errorComponent?: any;
|
|
17
|
+
/** 延迟显示 loading 的时间(ms),默认 200 */
|
|
18
|
+
delay?: number;
|
|
19
|
+
/** 超时时间(ms),超时后显示 errorComponent */
|
|
20
|
+
timeout?: number;
|
|
21
|
+
/** 错误回调 */
|
|
22
|
+
onError?: (error: Error, retry: () => void, fail: () => void) => void;
|
|
23
|
+
/** 是否配合 Suspense 使用,默认 true */
|
|
24
|
+
suspensible?: boolean;
|
|
25
|
+
/** 重试次数上限,默认 3 */
|
|
26
|
+
retryCount?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 定义异步组件
|
|
30
|
+
*
|
|
31
|
+
* 返回一个包装组件,首次渲染时调用 loader 异步加载真实组件。
|
|
32
|
+
* 加载过程中可显示 loadingComponent,加载失败显示 errorComponent。
|
|
33
|
+
*
|
|
34
|
+
* @param options - 异步组件配置选项,或直接传入 loader 函数
|
|
35
|
+
* @returns 异步组件定义(ComponentDefine)
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* // 简单用法:传入 loader 函数
|
|
40
|
+
* const AsyncComp = defineAsyncComponent(() => import('./MyComponent'));
|
|
41
|
+
*
|
|
42
|
+
* // 完整配置
|
|
43
|
+
* const AsyncComp = defineAsyncComponent({
|
|
44
|
+
* loader: () => import('./MyComponent'),
|
|
45
|
+
* loadingComponent: LoadingSpinner,
|
|
46
|
+
* errorComponent: ErrorDisplay,
|
|
47
|
+
* delay: 200, // 200ms 后才显示 loading
|
|
48
|
+
* timeout: 10000, // 10s 超时
|
|
49
|
+
* onError(error, retry, fail) {
|
|
50
|
+
* if (error.message.includes('network')) {
|
|
51
|
+
* retry(); // 网络错误时重试
|
|
52
|
+
* } else {
|
|
53
|
+
* fail(); // 其他错误直接失败
|
|
54
|
+
* }
|
|
55
|
+
* },
|
|
56
|
+
* suspensible: true, // 配合 Suspense 使用
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function defineAsyncComponent(options: AsyncComponentOptions | (() => Promise<any>)): ComponentDefine;
|
|
61
|
+
//# sourceMappingURL=async-component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-component.d.ts","sourceRoot":"","sources":["../../../src/builtins/async-component.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAM7B,eAAe;AACf,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,eAAe;IACf,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,gBAAgB;IAChB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACtE,+BAA+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAuFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GACpD,eAAe,CAiQjB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js ErrorBoundary 内置错误边界组件
|
|
3
|
+
*
|
|
4
|
+
* 捕获子组件渲染错误,显示降级 UI(fallback slot),
|
|
5
|
+
* 支持 onError 回调和错误状态管理。
|
|
6
|
+
* 支持同步和异步错误捕获、错误计数自动禁用、开发模式错误详情。
|
|
7
|
+
* 纯原生实现,零外部依赖。
|
|
8
|
+
*/
|
|
9
|
+
import { type ComponentDefine } from '../define-component';
|
|
10
|
+
/** ErrorBoundary 组件的 Props 接口 */
|
|
11
|
+
export interface ErrorBoundaryProps {
|
|
12
|
+
/** 降级 UI 内容(错误时显示) */
|
|
13
|
+
fallback?: any;
|
|
14
|
+
/** 最大错误记录数,默认 100 */
|
|
15
|
+
maxErrors?: number;
|
|
16
|
+
/** 错误回调 */
|
|
17
|
+
onError?: (error: Error, vm: any, info: string) => void;
|
|
18
|
+
/** 错误捕获回调,返回 true 阻止传播 */
|
|
19
|
+
onErrorCaptured?: (error: Error, vm: any, info: string) => boolean | void;
|
|
20
|
+
/** 错误状态变化回调 */
|
|
21
|
+
onErrorChange?: (hasError: boolean, error: Error | null) => void;
|
|
22
|
+
/** 重置回调(用户触发重置时调用) */
|
|
23
|
+
onReset?: () => void;
|
|
24
|
+
/** 自动禁用的最大错误次数,默认 Infinity(不自动禁用) */
|
|
25
|
+
maxErrorCount?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare const ErrorBoundaryComponent: ComponentDefine;
|
|
28
|
+
//# sourceMappingURL=error-boundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-boundary.d.ts","sourceRoot":"","sources":["../../../src/builtins/error-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAA;AAM5B,iCAAiC;AACjC,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW;IACX,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,0BAA0B;IAC1B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAA;IACzE,eAAe;IACf,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;IAChE,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAcD,eAAO,MAAM,sBAAsB,EAAE,eAuNnC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js 内置组件 — 统一导出入口
|
|
3
|
+
*
|
|
4
|
+
* 导出所有内置组件和工具函数。
|
|
5
|
+
* 纯原生实现,零外部依赖。
|
|
6
|
+
*/
|
|
7
|
+
export { Transition, TransitionPropsKeys } from './transition';
|
|
8
|
+
export type { TransitionProps } from './transition';
|
|
9
|
+
export { TransitionGroup } from './transition-group';
|
|
10
|
+
export type { TransitionGroupProps } from './transition-group';
|
|
11
|
+
export { KeepAlive, pruneCacheEntry, pruneCache, registerKeepAliveInstance, attachCacheRef } from './keep-alive';
|
|
12
|
+
export type { KeepAliveProps } from './keep-alive';
|
|
13
|
+
export { Suspense } from './suspense';
|
|
14
|
+
export type { SuspenseProps } from './suspense';
|
|
15
|
+
export { ErrorBoundaryComponent } from './error-boundary';
|
|
16
|
+
export type { ErrorBoundaryProps } from './error-boundary';
|
|
17
|
+
export { defineAsyncComponent } from './async-component';
|
|
18
|
+
export type { AsyncComponentOptions } from './async-component';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builtins/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjH,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js KeepAlive 内置缓存组件
|
|
3
|
+
*
|
|
4
|
+
* 缓存组件实例,避免重复渲染和销毁。
|
|
5
|
+
* 支持 include/exclude 匹配规则和 max LRU 淘汰策略。
|
|
6
|
+
* 提供 activated/deactivated 生命周期钩子。
|
|
7
|
+
* 纯原生实现,零外部依赖。
|
|
8
|
+
*/
|
|
9
|
+
import { type ComponentDefine, type ComponentInternalInstance } from '../define-component';
|
|
10
|
+
/** KeepAlive 组件的 Props 接口 */
|
|
11
|
+
export interface KeepAliveProps {
|
|
12
|
+
/** 匹配的组件名缓存(字符串精确匹配或 RegExp 正则匹配) */
|
|
13
|
+
include?: string | RegExp | (string | RegExp)[];
|
|
14
|
+
/** 匹配的组件名不缓存 */
|
|
15
|
+
exclude?: string | RegExp | (string | RegExp)[];
|
|
16
|
+
/** 最大缓存数量,超过时使用 LRU 淘汰策略 */
|
|
17
|
+
max?: number;
|
|
18
|
+
}
|
|
19
|
+
/** 缓存条目 */
|
|
20
|
+
interface CacheEntry {
|
|
21
|
+
/** 缓存的 VNode(原始引用,非拷贝) */
|
|
22
|
+
vnode: any;
|
|
23
|
+
/** 缓存的组件实例 */
|
|
24
|
+
component: ComponentInternalInstance | null;
|
|
25
|
+
/** 缓存的 key(组件名) */
|
|
26
|
+
key: string;
|
|
27
|
+
/** 组件实例的完整状态快照(deactivate 时保存) */
|
|
28
|
+
savedState: SavedComponentState | null;
|
|
29
|
+
}
|
|
30
|
+
/** 组件实例状态快照 */
|
|
31
|
+
interface SavedComponentState {
|
|
32
|
+
/** 组件内部 state(reactive 对象的原始值) */
|
|
33
|
+
state: Record<string, any>;
|
|
34
|
+
/** 组件 setupState */
|
|
35
|
+
setupState: Record<string, any>;
|
|
36
|
+
/** 计算属性引用(@lytjs/reactivity ComputedRef) */
|
|
37
|
+
computedRefs: Record<string, {
|
|
38
|
+
value: any;
|
|
39
|
+
} | (() => any)>;
|
|
40
|
+
/** 子树 */
|
|
41
|
+
subTree: any;
|
|
42
|
+
/** 是否已挂载 */
|
|
43
|
+
isMounted: boolean;
|
|
44
|
+
/** watch 停止句柄列表 */
|
|
45
|
+
watchStopHandles: any[];
|
|
46
|
+
/** 生命周期钩子快照 */
|
|
47
|
+
lifecycleHooks: Partial<Record<string, any[]>>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* KeepAlive 内置缓存组件
|
|
51
|
+
*
|
|
52
|
+
* 缓存包裹的组件实例,切换时不会销毁组件而是移入缓存,
|
|
53
|
+
* 再次切换回来时从缓存恢复,避免重复创建和销毁。
|
|
54
|
+
*
|
|
55
|
+
* 缓存策略:
|
|
56
|
+
* - include:只有匹配的组件会被缓存
|
|
57
|
+
* - exclude:匹配的组件不会被缓存
|
|
58
|
+
* - max:最大缓存数量,使用 LRU(最近最少使用)策略淘汰
|
|
59
|
+
*
|
|
60
|
+
* 生命周期:
|
|
61
|
+
* - activated:从缓存恢复时触发
|
|
62
|
+
* - deactivated:移入缓存时触发
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* // 基本用法
|
|
67
|
+
* <keep-alive>
|
|
68
|
+
* <component :is="currentComponent" />
|
|
69
|
+
* </keep-alive>
|
|
70
|
+
*
|
|
71
|
+
* // 配置 include/exclude
|
|
72
|
+
* <keep-alive include="Home" exclude="Login" :max="10">
|
|
73
|
+
* <component :is="currentComponent" />
|
|
74
|
+
* </keep-alive>
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare const KeepAlive: ComponentDefine;
|
|
78
|
+
/**
|
|
79
|
+
* 注册组件实例到 KeepAlive 缓存
|
|
80
|
+
*
|
|
81
|
+
* 当 KeepAlive 包裹的子组件完成挂载后,
|
|
82
|
+
* 渲染器应调用此方法将组件实例关联到对应的缓存条目。
|
|
83
|
+
*
|
|
84
|
+
* @param vnode - 子组件的 VNode
|
|
85
|
+
* @param component - 子组件的内部实例
|
|
86
|
+
*/
|
|
87
|
+
export declare function registerKeepAliveInstance(vnode: any, component: ComponentInternalInstance): void;
|
|
88
|
+
/**
|
|
89
|
+
* 将缓存 Map 引用关联到 VNode
|
|
90
|
+
*
|
|
91
|
+
* 在 KeepAlive render 时调用,使 registerKeepAliveInstance
|
|
92
|
+
* 能找到正确的缓存 Map。
|
|
93
|
+
*
|
|
94
|
+
* @param vnode - 子组件 VNode
|
|
95
|
+
* @param cache - KeepAlive 的缓存 Map
|
|
96
|
+
*/
|
|
97
|
+
export declare function attachCacheRef(vnode: any, cache: Map<string, CacheEntry>): void;
|
|
98
|
+
/**
|
|
99
|
+
* 淘汰指定缓存条目
|
|
100
|
+
*
|
|
101
|
+
* 从缓存中移除指定 key 的条目,
|
|
102
|
+
* 并触发该组件的 deactivated 钩子。
|
|
103
|
+
*
|
|
104
|
+
* @param cache - 缓存 Map
|
|
105
|
+
* @param key - 要淘汰的缓存 key
|
|
106
|
+
*/
|
|
107
|
+
export declare function pruneCacheEntry(cache: Map<string, CacheEntry>, key: string): void;
|
|
108
|
+
/**
|
|
109
|
+
* 根据 include/exclude 规则清理缓存
|
|
110
|
+
*
|
|
111
|
+
* 遍历所有缓存条目,移除不满足条件的条目。
|
|
112
|
+
*
|
|
113
|
+
* @param cache - 缓存 Map
|
|
114
|
+
* @param props - KeepAlive props
|
|
115
|
+
*/
|
|
116
|
+
export declare function pruneCache(cache: Map<string, CacheEntry>, props: KeepAliveProps): void;
|
|
117
|
+
export {};
|
|
118
|
+
//# sourceMappingURL=keep-alive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keep-alive.d.ts","sourceRoot":"","sources":["../../../src/builtins/keep-alive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC/B,MAAM,qBAAqB,CAAC;AAa7B,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAChD,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAChD,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,WAAW;AACX,UAAU,UAAU;IAClB,0BAA0B;IAC1B,KAAK,EAAE,GAAG,CAAC;IACX,cAAc;IACd,SAAS,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC5C,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACxC;AAED,eAAe;AACf,UAAU,mBAAmB;IAC3B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,oBAAoB;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,GAAG,CAAA;KAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3D,SAAS;IACT,OAAO,EAAE,GAAG,CAAC;IACb,YAAY;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB;IACnB,gBAAgB,EAAE,GAAG,EAAE,CAAC;IACxB,eAAe;IACf,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;CAChD;AA0KD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,SAAS,EAAE,eAiItB,CAAC;AAMH;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,yBAAyB,GACnC,IAAI,CAgBN;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAC7B,IAAI,CAIN;AAiDD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9B,GAAG,EAAE,MAAM,GACV,IAAI,CAWN;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9B,KAAK,EAAE,cAAc,GACpB,IAAI,CAaN"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js Suspense 内置异步依赖等待组件
|
|
3
|
+
*
|
|
4
|
+
* 等待异步子组件加载完成后再显示真实内容,
|
|
5
|
+
* 加载过程中显示 fallback 占位内容。
|
|
6
|
+
* 支持多个异步子组件(全部完成后才切换),
|
|
7
|
+
* 支持超时处理和事件回调。
|
|
8
|
+
* 纯原生实现,零外部依赖。
|
|
9
|
+
*/
|
|
10
|
+
import { type ComponentDefine } from '../define-component';
|
|
11
|
+
/** Suspense 组件的 Props 接口 */
|
|
12
|
+
export interface SuspenseProps {
|
|
13
|
+
/** 异步加载时显示的占位内容 */
|
|
14
|
+
fallback?: any;
|
|
15
|
+
/** 超时时间(ms),超时后显示 fallback */
|
|
16
|
+
timeout?: number;
|
|
17
|
+
/** 等待开始回调 */
|
|
18
|
+
onPending?: () => void;
|
|
19
|
+
/** 异步组件全部加载完成回调 */
|
|
20
|
+
onResolve?: () => void;
|
|
21
|
+
/** 显示 fallback 回调 */
|
|
22
|
+
onFallback?: () => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Suspense 内置异步依赖等待组件
|
|
26
|
+
*
|
|
27
|
+
* 等待所有异步子组件加载完成后再显示真实内容。
|
|
28
|
+
* 加载过程中显示 fallback 占位内容。
|
|
29
|
+
*
|
|
30
|
+
* 工作流程:
|
|
31
|
+
* 1. 检测子组件是否为异步组件
|
|
32
|
+
* 2. 如果有异步组件,显示 fallback
|
|
33
|
+
* 3. 等待所有异步组件加载完成
|
|
34
|
+
* 4. 全部完成后切换为真实内容
|
|
35
|
+
* 5. 如果超时,显示 fallback 并触发超时处理
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* // 基本用法
|
|
40
|
+
* <suspense :fallback="LoadingSpinner">
|
|
41
|
+
* <async-component />
|
|
42
|
+
* </suspense>
|
|
43
|
+
*
|
|
44
|
+
* // 带超时
|
|
45
|
+
* <suspense :fallback="LoadingSpinner" :timeout="3000" :onResolve="handleLoaded">
|
|
46
|
+
* <async-component />
|
|
47
|
+
* </suspense>
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare const Suspense: ComponentDefine;
|
|
51
|
+
//# sourceMappingURL=suspense.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suspense.d.ts","sourceRoot":"","sources":["../../../src/builtins/suspense.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAM7B,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAiHD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,QAAQ,EAAE,eAgOrB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js TransitionGroup 内置列表过渡组件
|
|
3
|
+
*
|
|
4
|
+
* 继承 Transition 的所有功能,额外处理列表中元素的移动过渡(FLIP 动画技术)。
|
|
5
|
+
* 使用 getBoundingClientRect 记录元素位置,在 DOM 更新后计算位移并应用 transform 动画。
|
|
6
|
+
* 纯原生实现,零外部依赖。
|
|
7
|
+
*/
|
|
8
|
+
import { type ComponentDefine } from '../define-component';
|
|
9
|
+
import { type TransitionProps } from './transition';
|
|
10
|
+
/** TransitionGroup 组件的 Props 接口 */
|
|
11
|
+
export interface TransitionGroupProps extends TransitionProps {
|
|
12
|
+
/** 包裹标签名,默认不渲染包裹元素(Fragment) */
|
|
13
|
+
tag?: string;
|
|
14
|
+
/** 移动过渡类名 */
|
|
15
|
+
moveClass?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* TransitionGroup 内置列表过渡组件
|
|
19
|
+
*
|
|
20
|
+
* 处理列表中多个子元素的进入、离开和移动过渡。
|
|
21
|
+
* 继承 Transition 的 CSS 类名和 JS 钩子功能,
|
|
22
|
+
* 额外使用 FLIP 技术实现元素移动动画。
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* // 列表过渡
|
|
27
|
+
* <transition-group name="list" tag="ul">
|
|
28
|
+
* <li v-for="item in items" :key="item.id">
|
|
29
|
+
* {{ item.text }}
|
|
30
|
+
* </li>
|
|
31
|
+
* </transition-group>
|
|
32
|
+
*
|
|
33
|
+
* // CSS 示例
|
|
34
|
+
* // .list-enter-active, .list-leave-active { transition: all 0.3s; }
|
|
35
|
+
* // .list-enter-from, .list-leave-to { opacity: 0; transform: translateX(30px); }
|
|
36
|
+
* // .list-move { transition: transform 0.3s; }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare const TransitionGroup: ComponentDefine;
|
|
40
|
+
//# sourceMappingURL=transition-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition-group.d.ts","sourceRoot":"","sources":["../../../src/builtins/transition-group.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,KAAK,eAAe,EAMrB,MAAM,cAAc,CAAC;AAMtB,mCAAmC;AACnC,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwFD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,eAAe,EAAE,eAwI5B,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lyt.js Transition 内置过渡组件
|
|
3
|
+
*
|
|
4
|
+
* 控制 Vue 风格的进入/离开过渡效果。
|
|
5
|
+
* 支持 CSS 类名模式和 JS 钩子模式,支持 appear 首次挂载过渡,
|
|
6
|
+
* 支持 mode 过渡模式(in-out / out-in)。
|
|
7
|
+
* 纯原生实现,零外部依赖。
|
|
8
|
+
*/
|
|
9
|
+
import { type ComponentDefine } from '../define-component';
|
|
10
|
+
/** Transition 组件的 Props 接口 */
|
|
11
|
+
export interface TransitionProps {
|
|
12
|
+
/** CSS 类名前缀,如 "fade" → fade-enter-active/fade-leave-active */
|
|
13
|
+
name?: string;
|
|
14
|
+
/** 初始渲染时是否应用过渡 */
|
|
15
|
+
appear?: boolean;
|
|
16
|
+
/** 过渡模式:'in-out' 先进入再离开,'out-in' 先离开再进入 */
|
|
17
|
+
mode?: 'in-out' | 'out-in' | 'default';
|
|
18
|
+
/** 过渡持续时间(ms),用于超时回退 */
|
|
19
|
+
duration?: number;
|
|
20
|
+
/** 进入起始类名 */
|
|
21
|
+
enterFromClass?: string;
|
|
22
|
+
/** 进入激活类名 */
|
|
23
|
+
enterActiveClass?: string;
|
|
24
|
+
/** 进入结束类名 */
|
|
25
|
+
enterToClass?: string;
|
|
26
|
+
/** 离开起始类名 */
|
|
27
|
+
leaveFromClass?: string;
|
|
28
|
+
/** 离开激活类名 */
|
|
29
|
+
leaveActiveClass?: string;
|
|
30
|
+
/** 离开结束类名 */
|
|
31
|
+
leaveToClass?: string;
|
|
32
|
+
/** 进入前钩子 */
|
|
33
|
+
onBeforeEnter?: (el: any) => void;
|
|
34
|
+
/** 进入钩子(需调用 done 表示完成) */
|
|
35
|
+
onEnter?: (el: any, done: () => void) => void;
|
|
36
|
+
/** 进入完成钩子 */
|
|
37
|
+
onAfterEnter?: (el: any) => void;
|
|
38
|
+
/** 进入取消钩子 */
|
|
39
|
+
onEnterCancelled?: (el: any) => void;
|
|
40
|
+
/** 离开前钩子 */
|
|
41
|
+
onBeforeLeave?: (el: any) => void;
|
|
42
|
+
/** 离开钩子(需调用 done 表示完成) */
|
|
43
|
+
onLeave?: (el: any, done: () => void) => void;
|
|
44
|
+
/** 离开完成钩子 */
|
|
45
|
+
onAfterLeave?: (el: any) => void;
|
|
46
|
+
/** 离开取消钩子 */
|
|
47
|
+
onLeaveCancelled?: (el: any) => void;
|
|
48
|
+
}
|
|
49
|
+
/** 过渡信息 */
|
|
50
|
+
interface TransitionInfo {
|
|
51
|
+
/** 过渡类型:transition 或 animation */
|
|
52
|
+
type: string | null;
|
|
53
|
+
/** 过渡属性数量 */
|
|
54
|
+
propCount: number;
|
|
55
|
+
/** 过渡结束时间(ms) */
|
|
56
|
+
timeout: number;
|
|
57
|
+
/** 是否有过渡属性 */
|
|
58
|
+
hasTransform: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 下一帧工具函数
|
|
62
|
+
*
|
|
63
|
+
* 使用 requestAnimationFrame 双帧确保浏览器完成重排。
|
|
64
|
+
* 第一帧:浏览器将 pending 的样式变更应用到 DOM
|
|
65
|
+
* 第二帧:确保样式已生效,可以安全地添加下一组类名
|
|
66
|
+
*
|
|
67
|
+
* @param fn - 在下一帧执行的回调函数
|
|
68
|
+
*/
|
|
69
|
+
export declare function nextFrame(fn: () => void): void;
|
|
70
|
+
/**
|
|
71
|
+
* 给元素添加过渡类名
|
|
72
|
+
*
|
|
73
|
+
* @param el - 目标 DOM 元素
|
|
74
|
+
* @param cls - 要添加的 CSS 类名
|
|
75
|
+
*/
|
|
76
|
+
export declare function addTransitionClass(el: Element, cls: string): void;
|
|
77
|
+
/**
|
|
78
|
+
* 移除元素的过渡类名
|
|
79
|
+
*
|
|
80
|
+
* @param el - 目标 DOM 元素
|
|
81
|
+
* @param cls - 要移除的 CSS 类名
|
|
82
|
+
*/
|
|
83
|
+
export declare function removeTransitionClass(el: Element, cls: string): void;
|
|
84
|
+
/**
|
|
85
|
+
* 获取元素的过渡属性信息
|
|
86
|
+
*
|
|
87
|
+
* 检测元素上 transition-duration 和 animation-duration,
|
|
88
|
+
* 返回最长的持续时间作为过渡结束时间。
|
|
89
|
+
*
|
|
90
|
+
* @param el - 目标 DOM 元素
|
|
91
|
+
* @param expectedType - 期望的过渡类型('transition' 或 'animation'),不指定则自动检测
|
|
92
|
+
* @returns 过渡信息对象
|
|
93
|
+
*/
|
|
94
|
+
export declare function getTransitionInfo(el: Element, expectedType?: string): TransitionInfo;
|
|
95
|
+
/**
|
|
96
|
+
* 等待过渡/动画结束
|
|
97
|
+
*
|
|
98
|
+
* 监听 transitionend / animationend 事件,或超时后强制完成。
|
|
99
|
+
* 处理了多属性过渡的情况(需要等待所有属性完成)。
|
|
100
|
+
*
|
|
101
|
+
* @param el - 目标 DOM 元素
|
|
102
|
+
* @param expectedType - 期望的过渡类型
|
|
103
|
+
* @param timeout - 超时时间(ms)
|
|
104
|
+
* @param cb - 过渡完成回调
|
|
105
|
+
*/
|
|
106
|
+
export declare function whenTransitionEnds(el: Element, expectedType: string | undefined, timeout: number, cb: () => void): void;
|
|
107
|
+
/**
|
|
108
|
+
* Transition 组件识别的 prop 键列表
|
|
109
|
+
*
|
|
110
|
+
* 用于框架在处理 Transition 组件时,识别哪些属性是 Transition 专有的,
|
|
111
|
+
* 不应传递给子组件。
|
|
112
|
+
*/
|
|
113
|
+
export declare const TransitionPropsKeys: string[];
|
|
114
|
+
/**
|
|
115
|
+
* Transition 内置过渡组件
|
|
116
|
+
*
|
|
117
|
+
* 控制单个子元素的进入/离开过渡效果。
|
|
118
|
+
* 必须只有一个子元素作为内容。
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```ts
|
|
122
|
+
* // CSS 类名模式
|
|
123
|
+
* const FadeTransition = Transition;
|
|
124
|
+
* // 使用时传入 name="fade",CSS 中定义 .fade-enter-active, .fade-leave-active 等
|
|
125
|
+
*
|
|
126
|
+
* // JS 钩子模式
|
|
127
|
+
* <transition
|
|
128
|
+
* :onBeforeEnter="el => el.style.opacity = '0'"
|
|
129
|
+
* :onEnter="(el, done) => { el.style.transition = 'opacity 0.3s'; el.style.opacity = '1'; done(); }"
|
|
130
|
+
* :onLeave="(el, done) => { el.style.transition = 'opacity 0.3s'; el.style.opacity = '0'; done(); }"
|
|
131
|
+
* />
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export declare const Transition: ComponentDefine;
|
|
135
|
+
export {};
|
|
136
|
+
//# sourceMappingURL=transition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition.d.ts","sourceRoot":"","sources":["../../../src/builtins/transition.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAM7B,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY;IACZ,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,0BAA0B;IAC1B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC9C,aAAa;IACb,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IACjC,aAAa;IACb,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IACrC,YAAY;IACZ,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,0BAA0B;IAC1B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC9C,aAAa;IACb,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IACjC,aAAa;IACb,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;CACtC;AAED,WAAW;AACX,UAAU,cAAc;IACtB,kCAAkC;IAClC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,YAAY,EAAE,OAAO,CAAC;CACvB;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAI9C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIjE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,OAAO,EACX,YAAY,CAAC,EAAE,MAAM,GACpB,cAAc,CA6ChB;AAwCD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,OAAO,EACX,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,IAAI,GACb,IAAI,CAsCN;AAMD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAmBvC,CAAC;AA6IF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,UAAU,EAAE,eAqGvB,CAAC"}
|