This commit is contained in:
2026-05-10 02:37:57 +02:00
parent 8b2e67b3b0
commit 1800b16940
5 changed files with 11 additions and 404 deletions

395
dist/sigpro.js vendored
View File

@@ -1,395 +0,0 @@
// src/sigpro.js
var isF = (f) => typeof f == "function";
var isO = (o) => o && typeof o == "object";
var isA = Array.isArray;
var doc = typeof document < "u" ? document : null;
var txt = (s) => doc.createTextNode(s == null ? "" : String(s));
var toNd = (n) => n?._rt ? n._cnt : n instanceof Node ? n : txt(n);
var Fragment = (p) => p.children;
var val = (v) => isF(v) ? v() : v;
var aEff = null;
var aOwn = null;
var isFlushing = 0;
var bDepth = 0;
var eQ = new Set;
var MOUNTED = new WeakMap;
var SVG_NS = "http://www.w3.org/2000/svg";
var XLINK = "http://www.w3.org/1999/xlink";
var SVG_TAGS = new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(","));
var DANG_ATTR = new Set(["src", "href", "formaction", "action", "background", "code", "archive"]);
var clr = (s) => {
if (s) {
s.forEach((f) => f());
s.clear();
}
};
var dispose = (e) => {
if (!e || e._x)
return;
e._x = 1;
let st = [e], c;
while (c = st.pop()) {
clr(c._c);
if (c._ch) {
c._ch.forEach((x) => st.push(x));
c._ch.clear();
}
if (c._d) {
c._d.forEach((d) => d.delete(c));
c._d.clear();
}
}
};
var onUnmount = (f) => aOwn && (aOwn._c ||= new Set).add(f);
var untrack = (f) => {
let p = aEff;
aEff = null;
try {
return f();
} finally {
aEff = p;
}
};
var createEffect = (f, isC = 0) => {
const e = () => {
if (e._x)
return;
if (e._d)
e._d.forEach((s) => s.delete(e));
clr(e._c);
let pE = aEff, pO = aOwn;
aEff = aOwn = e;
try {
return e._res = f();
} catch (err) {
console.error("[SigPro]", err);
} finally {
aEff = pE;
aOwn = pO;
}
};
e._d = e._c = e._ch = null;
e._x = 0;
e._iC = isC;
e._dp = aEff ? aEff._dp + 1 : 0;
e._m = [];
e._p = aOwn;
if (aOwn)
(aOwn._ch ||= new Set).add(e);
return e;
};
var flush = () => {
if (isFlushing)
return;
isFlushing = 1;
let q = [...eQ].sort((a, b) => a._dp - b._dp);
eQ.clear();
for (let e of q)
if (!e._x)
e();
isFlushing = 0;
};
var batch = (f) => {
bDepth++;
try {
return f();
} finally {
if (!--bDepth && eQ.size && !isFlushing)
flush();
}
};
var trkUpd = (s, trg = 0) => {
if (!trg && aEff && !aEff._x) {
s.add(aEff);
(aEff._d ||= new Set).add(s);
} else if (trg && s.size) {
let q = 0;
for (let e of s) {
if (e === aEff || e._x)
continue;
if (e._iC) {
e._dt = 1;
if (e._sb)
trkUpd(e._sb, 1);
} else {
eQ.add(e);
q = 1;
}
}
if (q && !isFlushing && !bDepth)
queueMicrotask(flush);
}
};
var $ = (v, k = null) => {
let s = new Set;
if (isF(v)) {
let c, cp = () => {
if (cp._dt) {
let p = aEff;
aEff = cp;
try {
let n = v();
if (!Object.is(c, n)) {
c = n;
trkUpd(s, 1);
}
} finally {
aEff = p;
}
cp._dt = 0;
}
trkUpd(s);
return c;
};
cp._iC = cp._dt = 1;
cp._sb = s;
cp._d = null;
cp._x = 0;
return cp;
}
if (k)
try {
v = JSON.parse(localStorage.getItem(k)) ?? v;
} catch (e) {}
return (...a) => {
if (a.length) {
let n = isF(a[0]) ? a[0](v) : a[0];
if (!Object.is(v, n)) {
v = n;
if (k)
localStorage.setItem(k, JSON.stringify(v));
trkUpd(s, 1);
}
}
trkUpd(s);
return v;
};
};
var watch = (src, cb) => {
let e = createEffect(cb ? () => {
let v = isA(src) ? src.map((s) => s()) : src();
untrack(() => cb(v));
} : src);
e();
return () => dispose(e);
};
var clnNd = (n) => {
if (!n)
return;
clr(n._c);
if (n._oE)
dispose(n._oE);
if (n.childNodes)
n.childNodes.forEach(clnNd);
};
var valAtt = (k, v) => v == null || v === false ? null : (DANG_ATTR.has(k) || k.startsWith("on")) && /^\s*(javascript|data|vbscript):/i.test(String(v)) ? "#" : v;
var h = (tag, prp = {}, ch = []) => {
if (prp instanceof Node || isA(prp) || !isO(prp)) {
ch = prp;
prp = {};
}
if (isF(tag)) {
let e = createEffect(() => e._res = tag(prp, { children: ch, emit: (ev, ...a) => prp[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...a) }));
e();
if (e._res == null)
return null;
let nd = e._res instanceof Node || isA(e._res) && e._res.every((n) => n instanceof Node) ? e._res : txt(e._res);
let att = (n) => {
if (isO(n) && !n._rt) {
n._m = e._m || [];
n._c = e._c || new Set;
n._oE = e;
}
};
isA(nd) ? nd.forEach(att) : att(nd);
return nd;
}
let isS = SVG_TAGS.has(tag), el = isS ? doc.createElementNS(SVG_NS, tag) : doc.createElement(tag);
el._c = new Set;
for (let k in prp) {
let v = prp[k];
if (k === "ref") {
isF(v) ? v(el) : v.current = el;
continue;
}
if (isS && k.startsWith("xlink:")) {
let cv = valAtt(k.slice(6), v);
cv == null ? el.removeAttributeNS(XLINK, k.slice(6)) : el.setAttributeNS(XLINK, k.slice(6), cv);
continue;
}
if (k.startsWith("on")) {
let ev = k.slice(2).toLowerCase();
el.addEventListener(ev, v);
let off = () => el.removeEventListener(ev, v);
el._c.add(off);
onUnmount(off);
} else if (isF(v)) {
let e = createEffect(() => {
let r = valAtt(k, v());
if (k === "class")
el.className = r || "";
else if (r == null)
el.removeAttribute(k);
else if (k === "style" && typeof r == "string")
el.setAttribute("style", r);
else if (k in el && !isS)
el[k] = r;
else
el.setAttribute(k, r === true ? "" : r);
});
e();
el._c.add(() => dispose(e));
onUnmount(() => dispose(e));
if (/^(INPUT|TEXTAREA|SELECT)$/.test(el.tagName) && (k === "value" || k === "checked")) {
el.addEventListener(k === "checked" ? "change" : "input", (ev) => v(ev.target[k]));
}
} else {
let r = valAtt(k, v);
if (r != null) {
if (k === "style" && typeof r == "string")
el.setAttribute("style", r);
else if (k in el && !isS)
el[k] = r;
else
el.setAttribute(k, r === true ? "" : r);
}
}
}
const app = (c) => {
if (isA(c))
return c.forEach(app);
if (isF(c)) {
let anc = txt(""), cur = [];
el.appendChild(anc);
let e = createEffect(() => {
let r = c(), nxt = (isA(r) ? r : [r]).map(toNd), ref = anc;
cur.forEach((n) => {
n._rt ? n._del() : clnNd(n);
if (n.parentNode)
n.remove();
});
for (let i = nxt.length - 1;i >= 0; i--) {
let nd = nxt[i];
if (nd.parentNode !== ref.parentNode)
ref.parentNode?.insertBefore(nd, ref);
if (nd._m)
nd._m.forEach((f) => f());
ref = nd;
}
cur = nxt;
});
e();
el._c.add(() => dispose(e));
onUnmount(() => dispose(e));
} else {
let nd = toNd(c);
el.appendChild(nd);
if (nd._m)
nd._m.forEach((f) => f());
}
};
app(ch);
return el;
};
var render = (rFn) => {
let c = new Set, pO = aOwn, pE = aEff, cnt = doc.createElement("div");
cnt.style.display = "contents";
cnt.setAttribute("role", "presentation");
aOwn = { _c: c };
aEff = null;
const pRes = (r) => {
if (!r)
return;
if (r._rt) {
c.add(r._del);
cnt.appendChild(r._cnt);
} else if (isA(r))
r.forEach(pRes);
else
cnt.appendChild(r instanceof Node ? r : txt(r));
};
try {
pRes(rFn({ onCleanup: (f) => c.add(f) }));
} finally {
aOwn = pO;
aEff = pE;
}
return { _rt: 1, _cnt: cnt, _del: () => {
clr(c);
clnNd(cnt);
cnt.remove();
} };
};
var when = (c, Y, N = null) => {
let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), v;
watch(() => !!val(c), (s) => {
if (v) {
v._del();
v = null;
}
let ct = s ? Y : N;
if (ct) {
v = render(() => val(ct));
rt.insertBefore(v._cnt, anc);
}
});
onUnmount(() => v?._del());
return rt;
};
var each = (s, fn, kF) => {
let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), cch = new Map;
watch(() => val(s) || [], (it) => {
let nCc = new Map, nOd = [];
for (let i = 0, l = (it || []).length;i < l; i++) {
let t = it[i], k = kF ? t?.[kF] ?? i : t?.id ?? i, v = cch.get(k);
if (!v)
v = render(() => fn(t, i));
else
cch.delete(k);
nCc.set(k, v);
nOd.push(v);
}
cch.forEach((v) => v._del());
let ref = anc;
for (let i = nOd.length - 1;i >= 0; i--) {
let nd = nOd[i]._cnt;
if (nd.nextSibling !== ref)
rt.insertBefore(nd, ref);
ref = nd;
}
cch = nCc;
});
return rt;
};
var mount = (c, tgt) => {
let t = typeof tgt == "string" ? doc.querySelector(tgt) : tgt;
if (!t)
return;
if (MOUNTED.has(t))
MOUNTED.get(t)._del();
let i = render(isF(c) ? c : () => c);
t.replaceChildren(i._cnt);
MOUNTED.set(t, i);
return i;
};
var SigPro = { $, watch, batch, h, Fragment, render, mount, when, each, onUnmount, val, isA, isF, isO };
if (typeof window !== "undefined") {
window.SigPro = SigPro;
"a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video".split(" ").forEach((t) => window[t] = (p, c) => h(t, p, c));
}
export {
watch,
val,
render,
onUnmount,
mount,
isO,
isF,
isA,
h,
each,
batch,
SigPro,
Fragment,
$
};

1
dist/sigpro.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -65,7 +65,7 @@
</script>
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script>
<script type="module">
import * as SigPro from "./sigpro.js";
import * as SigPro from "./sigpro.min.js";
Object.assign(window, SigPro);
import("./convert.js").then(() => {
console.log("SigPro y Convert cargados correctamente.");

1
docs/sigpro.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -8,16 +8,16 @@
"email": "sigpro@natxocc.com",
"url": "https://sigpro.natxocc.com"
},
"main": "./dist/sigpro.js",
"module": "./dist/sigpro.js",
"unpkg": "./dist/sigpro.js",
"jsdelivr": "./dist/sigpro.js",
"main": "./dist/sigpro.min.js",
"module": "./dist/sigpro.min.js",
"unpkg": "./dist/sigpro.min.js",
"jsdelivr": "./dist/sigpro.min.js",
"types": "./sigpro.d.ts",
"exports": {
".": {
"types": "./sigpro.d.ts",
"import": "./dist/sigpro.js",
"default": "./dist/sigpro.js"
"import": "./dist/sigpro.min.js",
"default": "./dist/sigpro.min.js"
},
"./utils": "./dist/sigpro.utils.js",
"./vite": "./dist/sigpro.vite.js"
@@ -41,11 +41,11 @@
"del": "bun pm cache rm && rm -f bun.lockb && rm -f bun.lock",
"clean": "rm -rf dist",
"prebuild": "npm run clean",
"build:core": "bun build ./src/sigpro.js --bundle --outfile=./dist/sigpro.js --format=esm",
"build:core": "bun build ./src/sigpro.js --bundle --outfile=./dist/sigpro.min.js --format=esm --minify",
"build:utils": "bun build ./src/sigpro.utils.js --bundle --outfile=./dist/sigpro.utils.js --format=esm --external ./src/sigpro.js",
"build:vite": "bun build ./src/sigpro.vite.js --bundle --outfile=./dist/sigpro.vite.js --format=esm --external fs --external path",
"build:convert": "bun build ./src/convert.js --bundle --outfile=./docs/convert.js --format=esm --external ./src/sigpro.js",
"build:copy": "cp ./dist/sigpro.js ./docs/sigpro.js",
"build:copy": "cp ./dist/sigpro.min.js ./docs/sigpro.min.js",
"build": "bun run build:core && bun run build:utils && bun run build:vite && bun run build:convert && bun run build:copy",
"docs": "bun x serve docs"
},