SigPro 1.2.1
This commit is contained in:
23
sigpro2.js
23
sigpro2.js
@@ -1,4 +1,4 @@
|
|||||||
// sigpro 1.2.0
|
// sigpro 1.2.1
|
||||||
const isFunc = f => typeof f === "function"
|
const isFunc = f => typeof f === "function"
|
||||||
const isObj = o => o && typeof o === "object"
|
const isObj = o => o && typeof o === "object"
|
||||||
const isArr = Array.isArray
|
const isArr = Array.isArray
|
||||||
@@ -106,7 +106,6 @@ const trackUpdate = (subs, trigger = false) => {
|
|||||||
; (activeEffect._deps ||= new Set()).add(subs)
|
; (activeEffect._deps ||= new Set()).add(subs)
|
||||||
} else if (trigger && subs.size > 0) {
|
} else if (trigger && subs.size > 0) {
|
||||||
let hasQueue = false
|
let hasQueue = false
|
||||||
// Optimización: for...of evita el overhead de crear callbacks
|
|
||||||
for (const e of subs) {
|
for (const e of subs) {
|
||||||
if (e === activeEffect || e._disposed) continue
|
if (e === activeEffect || e._disposed) continue
|
||||||
if (e._isComputed) {
|
if (e._isComputed) {
|
||||||
@@ -188,9 +187,7 @@ const $$ = (target) => {
|
|||||||
|
|
||||||
proxy = new Proxy(target, {
|
proxy = new Proxy(target, {
|
||||||
get(t, k, receiver) {
|
get(t, k, receiver) {
|
||||||
// Ignoramos symbols internos de JS para evitar fugas/ciclos
|
|
||||||
if (typeof k !== 'symbol') trackUpdate(getSubs(k))
|
if (typeof k !== 'symbol') trackUpdate(getSubs(k))
|
||||||
// Reflect y receiver preservan el 'this' si el target tiene getters
|
|
||||||
return $$(Reflect.get(t, k, receiver))
|
return $$(Reflect.get(t, k, receiver))
|
||||||
},
|
},
|
||||||
set(t, k, v, receiver) {
|
set(t, k, v, receiver) {
|
||||||
@@ -506,20 +503,18 @@ const Anim = (show, render, { enter, leave } = {}) => {
|
|||||||
const wrap = Tag('div', { style: 'display:contents' })
|
const wrap = Tag('div', { style: 'display:contents' })
|
||||||
let view = null
|
let view = null
|
||||||
|
|
||||||
const wait = (el, callback) => {
|
const wait = (el, cb) => {
|
||||||
let done = false
|
let done = false
|
||||||
const finish = () => !done && (done = true, callback())
|
const finish = () => !done && (done = true, cb())
|
||||||
if (!el) return finish()
|
if (!el) return finish()
|
||||||
;['transitionend', 'animationend'].forEach(ev => el.addEventListener(ev, finish, { once: true }))
|
'transitionend animationend'.split(' ').map(e => el.addEventListener(e, finish, { once: true }))
|
||||||
setTimeout(finish, 500)
|
setTimeout(finish, 500)
|
||||||
}
|
}
|
||||||
|
|
||||||
Watch(show, on => {
|
Watch(show, on => {
|
||||||
if (on && !view) {
|
if (on && !view) {
|
||||||
view = Render(render)
|
const el = (view = Render(render)).container.firstChild
|
||||||
const el = view.container.firstChild
|
|
||||||
wrap.appendChild(view.container)
|
wrap.appendChild(view.container)
|
||||||
|
|
||||||
if (enter && el) {
|
if (enter && el) {
|
||||||
el.classList.add(enter); el.clientTop
|
el.classList.add(enter); el.clientTop
|
||||||
el.classList.add(enter + '-active')
|
el.classList.add(enter + '-active')
|
||||||
@@ -527,12 +522,8 @@ const Anim = (show, render, { enter, leave } = {}) => {
|
|||||||
}
|
}
|
||||||
} else if (!on && view) {
|
} else if (!on && view) {
|
||||||
const el = view.container.firstChild
|
const el = view.container.firstChild
|
||||||
const destroy = () => { view?.destroy(); view = null }
|
const del = () => (view?.destroy(), view = null)
|
||||||
|
leave && el ? (el.classList.add(leave), wait(el, del)) : del()
|
||||||
if (leave && el) {
|
|
||||||
el.classList.add(leave)
|
|
||||||
wait(el, destroy)
|
|
||||||
} else destroy()
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user