solid-alive 0.1.6 → 0.1.7

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.js CHANGED
@@ -1 +1 @@
1
- import{createComponent as e}from"solid-js/web";import{createStore as l,produce as t}from"solid-js/store";import{createContext as o,createEffect as r,useContext as n,createRoot as i,onCleanup as a}from"solid-js";var s=o({elements:{},scrollDom:{current:null},closeSymbol:Symbol("close"),insertElement:()=>{},onDeactivated:()=>{},onActivated:()=>{},removeAliveElement:()=>{},setElement:()=>{},setCurrentComponentId:()=>{},saveElScroll:()=>{},resetElScroll:()=>!0,removeScrollEl:()=>!0});function c(o){var[n,i]=l(),a={current:null};let c=Symbol("close"),d=c,v=new Map,u=new Map,m=new Map;var f=e=>{let l=e.id,t=v.get(l),o=u.get(l),r=m.get(l);v.delete(l),u.delete(l),m.delete(l),i([l],Object.assign(Object.assign(Object.assign({},n[l]),e),{onActivated:t,onDeactivated:o,domList:r}))},p=e=>{var l;if(Reflect.has(n,e)){var t=null===(l=n[e])||void 0===l?void 0:l.children;null==t||t.forEach((l=>l!==e&&p(l))),i((l=>{var t,o;return l[e].onDeactivated=null,l[e].component=null,null===(o=(t=l[e]).dispose)||void 0===o||o.call(t),l[e].dispose=null,l[e].onActivated=null,l[e].onDeactivated=null,l[e].scroll=null,l[e].id="",l[e].children=null,l[e].domList=null,l[e].isTop=!1,l[e]=null,delete l[e],l}))}},E=e=>{if(null==e)for(const e of Object.values(n))p(e.id);else p(e)},L=e=>{d=e};const h=(e,l,o)=>{Reflect.has(n,e)&&i(t((t=>{t[e][l]=o})))};var S=(e,l)=>{var t={onActivated:v,onDeactivated:u}[e];if(d!==c){var o=t.get(d)||new Set;o.size<100&&o.add(l)&&t.set(d,o)}},b=e=>{S("onActivated",e)},D=e=>{S("onDeactivated",e)},A=(e,l)=>{var t,o;if(d!==c){var r=(null!==(t=m.get(d))&&void 0!==t?t:new Map([])).set(e,{top:0,left:0});m.set(d,r),null===(o=null==l?void 0:l())||void 0===o||o(e)}},_=e=>{var l;for(const t of Object.values(n))if(null===(l=t.domList)||void 0===l?void 0:l.has(e))return t.domList.delete(e),e.scrollTop=0,e.scrollLeft=0,!0;return!1},T=e=>{var l;for(const t of Object.values(n))if(null===(l=t.domList)||void 0===l?void 0:l.has(e))return t.domList.set(e,{top:0,left:0}),e.scrollTop=0,e.scrollLeft=0,!0;return!1};return r((()=>{o.scrollId&&(a.current=document.getElementById(o.scrollId),!a.current&&console.error(`[solid-alive] scrollId: ${o.scrollId} is null `))})),e(s.Provider,{get value(){return{scrollDom:a,behavior:o.behavior,transitionEnterName:o.transitionEnterName,elements:n,closeSymbol:c,onActivated:b,onDeactivated:D,insertElement:f,setElement:h,removeAliveElement:E,setCurrentComponentId:L,saveElScroll:A,resetElScroll:T,removeScrollEl:_}},get children(){return o.children}})}var d={appear:"index-module_appear__MaHzX",_appear:"index-module__appear__7KeRW",toLeft:"index-module_toLeft__s1PDL",_toLeft:"index-module__toLeft__SD-Zp"};let v=0;function u(l,t,o){var c,{behavior:u,elements:m,scrollDom:f,closeSymbol:p,transitionEnterName:E,insertElement:L,setElement:h,setCurrentComponentId:S}=n(s);Reflect.has(m,t)||(S(t),L({id:t,children:Array.isArray(o)?new Set(o):null}),i((o=>{var r;L({id:t,dispose:o,component:e(l,{}),onDeactivated:null,onActivated:null,scroll:{top:0,left:0},domList:null});let n=null===(r=Object.values(m).find((e=>{var l;return null===(l=e.children)||void 0===l?void 0:l.has(t)})))||void 0===r?void 0:r.id;n&&S(n)})));var b=e=>{var l;if(f.current)if("cacheScroll"===e){var o="alwaysTop"===u?{top:0,left:0}:{top:f.current.scrollTop,left:f.current.scrollLeft};h(t,"scroll",o)}else{var r=Date.now();if(r-v>200){const{top:e=0,left:o=0}=(null===(l=m[t])||void 0===l?void 0:l.scroll)||{};f.current.scrollTop=e,f.current.scrollLeft=o,v=r}}},D=e=>{var l;if(m[e].isTop)return e;var t=null===(l=Object.values(m).find((l=>{var t;return null===(t=l.children)||void 0===t?void 0:t.has(e)})))||void 0===l?void 0:l.id;return t&&(t=D(t)),t||e};if(E){let e,l=D(t);if(l&&(e=null===(c=m[l])||void 0===c?void 0:c.component,h(l,"isTop",!0)),"function"==typeof e&&(e=null==e?void 0:e()),e instanceof HTMLElement){var A=d[E]||E;e.classList.add(A);const l=()=>{e.classList.remove(A),e.removeEventListener("animationend",l)};e.addEventListener("animationend",l)}}return r((()=>{var e,l;null===(e=m[t].onActivated)||void 0===e||e.forEach((e=>e())),b("scrollTo"),null===(l=m[t].domList)||void 0===l||l.forEach(((e,l)=>{l.scrollTop=e.top,l.scrollLeft=e.left}))})),a((()=>{var e,l;S(p),null===(e=m[t].onDeactivated)||void 0===e||e.forEach((e=>e())),b("cacheScroll"),null===(l=m[t].domList)||void 0===l||l.forEach(((e,l,t)=>t.set(l,{top:l.scrollTop,left:l.scrollLeft})))})),m[t].component}function m(){var{onActivated:e,onDeactivated:l,removeAliveElement:t,saveElScroll:o,resetElScroll:r,removeScrollEl:i}=n(s);return{onActivated:e,onDeactivated:l,removeAliveElement:t,directiveSaveScroll:o,resetElScroll:r,removeScrollEl:i}}export{c as AliveProvider,u as AliveTransfer,m as useAlive};
1
+ import{createComponent as e}from"solid-js/web";import{createStore as l,produce as t}from"solid-js/store";import{createContext as o,createEffect as r,on as n,useContext as i,createRoot as a,onCleanup as s}from"solid-js";var c=o({elements:{},scrollDom:{current:null},closeSymbol:Symbol("close"),insertElement:()=>{},onDeactivated:()=>{},onActivated:()=>{},removeAliveElement:()=>{},setElement:()=>{},setCurrentComponentId:()=>{},saveElScroll:()=>{},resetElScroll:()=>!0,removeScrollEl:()=>!0});function d(o){var[i,a]=l(),s={current:null};let d=Symbol("close"),v=d,u=new Map,m=new Map,f=new Map;var p=e=>{let l=e.id,t=u.get(l),o=m.get(l),r=f.get(l);u.delete(l),m.delete(l),f.delete(l),a([l],Object.assign(Object.assign(Object.assign({},i[l]),e),{onActivated:t,onDeactivated:o,domList:r}))},E=e=>{var l;if(Reflect.has(i,e)){var t=null===(l=i[e])||void 0===l?void 0:l.children;null==t||t.forEach((l=>l!==e&&E(l))),a((l=>{var t,o;return l[e].onDeactivated=null,l[e].component=null,null===(o=(t=l[e]).dispose)||void 0===o||o.call(t),l[e].dispose=null,l[e].onActivated=null,l[e].onDeactivated=null,l[e].scroll=null,l[e].id="",l[e].children=null,l[e].domList=null,l[e].isTop=!1,l[e]=null,delete l[e],l}))}},L=e=>{if(null==e)for(const e of Object.values(i))E(e.id);else E(e)},h=e=>{v=e};const S=(e,l,o)=>{Reflect.has(i,e)&&a(t((t=>{t[e][l]=o})))};var b=(e,l)=>{var t={onActivated:u,onDeactivated:m}[e];if(v!==d){var o=t.get(v)||new Set;o.size<100&&o.add(l)&&t.set(v,o)}},D=e=>{b("onActivated",n([],e))},A=e=>{b("onDeactivated",n([],e))},_=(e,l)=>{var t,o;if(v!==d){var r=(null!==(t=f.get(v))&&void 0!==t?t:new Map([])).set(e,{top:0,left:0});f.set(v,r),null===(o=null==l?void 0:l())||void 0===o||o(e)}},T=e=>{var l;for(const t of Object.values(i))if(null===(l=t.domList)||void 0===l?void 0:l.has(e))return t.domList.delete(e),e.scrollTop=0,e.scrollLeft=0,!0;return!1},g=e=>{var l;for(const t of Object.values(i))if(null===(l=t.domList)||void 0===l?void 0:l.has(e))return t.domList.set(e,{top:0,left:0}),e.scrollTop=0,e.scrollLeft=0,!0;return!1};return r((()=>{o.scrollId&&(s.current=document.getElementById(o.scrollId),!s.current&&console.error(`[solid-alive] scrollId: ${o.scrollId} is null `))})),e(c.Provider,{get value(){return{scrollDom:s,behavior:o.behavior,transitionEnterName:o.transitionEnterName,elements:i,closeSymbol:d,onActivated:D,onDeactivated:A,insertElement:p,setElement:S,removeAliveElement:L,setCurrentComponentId:h,saveElScroll:_,resetElScroll:g,removeScrollEl:T}},get children(){return o.children}})}var v={appear:"index-module_appear__MaHzX",_appear:"index-module__appear__7KeRW",toLeft:"index-module_toLeft__s1PDL",_toLeft:"index-module__toLeft__SD-Zp"};let u=0;function m(l,t,o){var n,{behavior:d,elements:m,scrollDom:f,closeSymbol:p,transitionEnterName:E,insertElement:L,setElement:h,setCurrentComponentId:S}=i(c);Reflect.has(m,t)||(S(t),L({id:t,children:Array.isArray(o)?new Set(o):null}),a((o=>{var r;L({id:t,dispose:o,component:e(l,{}),onDeactivated:null,onActivated:null,scroll:{top:0,left:0},domList:null});let n=null===(r=Object.values(m).find((e=>{var l;return null===(l=e.children)||void 0===l?void 0:l.has(t)})))||void 0===r?void 0:r.id;n&&S(n)})));var b=e=>{var l;if(f.current)if("cacheScroll"===e){var o="alwaysTop"===d?{top:0,left:0}:{top:f.current.scrollTop,left:f.current.scrollLeft};h(t,"scroll",o)}else{var r=Date.now();if(r-u>200){const{top:e=0,left:o=0}=(null===(l=m[t])||void 0===l?void 0:l.scroll)||{};f.current.scrollTop=e,f.current.scrollLeft=o,u=r}}},D=e=>{var l;if(m[e].isTop)return e;var t=null===(l=Object.values(m).find((l=>{var t;return null===(t=l.children)||void 0===t?void 0:t.has(e)})))||void 0===l?void 0:l.id;return t&&(t=D(t)),t||e};if(E){let e,l=D(t);if(l&&(e=null===(n=m[l])||void 0===n?void 0:n.component,h(l,"isTop",!0)),"function"==typeof e&&(e=null==e?void 0:e()),e instanceof HTMLElement){var A=v[E]||E;e.classList.add(A);const l=()=>{e.classList.remove(A),e.removeEventListener("animationend",l)};e.addEventListener("animationend",l)}}return r((()=>{var e,l;null===(e=m[t].onActivated)||void 0===e||e.forEach((e=>e())),b("scrollTo"),null===(l=m[t].domList)||void 0===l||l.forEach(((e,l)=>{l.scrollTop=e.top,l.scrollLeft=e.left}))})),s((()=>{var e,l;S(p),null===(e=m[t].onDeactivated)||void 0===e||e.forEach((e=>e())),b("cacheScroll"),null===(l=m[t].domList)||void 0===l||l.forEach(((e,l,t)=>t.set(l,{top:l.scrollTop,left:l.scrollLeft})))})),m[t].component}function f(){var{onActivated:e,onDeactivated:l,removeAliveElement:t,saveElScroll:o,resetElScroll:r,removeScrollEl:n}=i(c);return{onActivated:e,onDeactivated:l,removeAliveElement:t,directiveSaveScroll:o,resetElScroll:r,removeScrollEl:n}}export{d as AliveProvider,m as AliveTransfer,f as useAlive};
@@ -3,7 +3,7 @@ import { ProveiderProps } from './default';
3
3
  * @description Alive
4
4
  * @param children jsx.element
5
5
  * @param { string } [scrollId] id,如 'root' 会在切换组件时的动作,默认saveScrollTop
6
- * @param { 'alwaysTop'|'saveScroll' } [behavior] dom元素滚动条会如何保持
7
- * @param { 'appear'|'toLeft' } [transitionEnterName] 路由切换动画, 可以自己加
6
+ * @param { 'alwaysTop'|'saveScroll' } [behavior] 'alwaysTop'|'saveScroll' dom元素滚动条会如何保持
7
+ * @param { 'appear'|'toLeft' } [transitionEnterName] 'appear'|'toLeft' 路由切换动画, 可以自己加,看dist 中的样式格式
8
8
  */
9
9
  export default function AliveProvider(props: ProveiderProps): import("solid-js").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-alive",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "author": "1iuxs",
5
5
  "description": "solid-alive",
6
6
  "type": "module",