remove IIFE

This commit is contained in:
2026-05-10 01:33:44 +02:00
parent 0a790de054
commit 8b2e67b3b0
7 changed files with 827 additions and 1448 deletions

395
dist/sigpro.esm.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,
$
};

248
dist/sigpro.js vendored
View File

@@ -1,62 +1,29 @@
(() => { // src/sigpro.js
var __defProp = Object.defineProperty; var isF = (f) => typeof f == "function";
var __returnValue = (v) => v; var isO = (o) => o && typeof o == "object";
function __exportSetter(name, newValue) { var isA = Array.isArray;
this[name] = __returnValue.bind(null, newValue); var doc = typeof document < "u" ? document : null;
} var txt = (s) => doc.createTextNode(s == null ? "" : String(s));
var __export = (target, all) => { var toNd = (n) => n?._rt ? n._cnt : n instanceof Node ? n : txt(n);
for (var name in all) var Fragment = (p) => p.children;
__defProp(target, name, { var val = (v) => isF(v) ? v() : v;
get: all[name], var aEff = null;
enumerable: true, var aOwn = null;
configurable: true, var isFlushing = 0;
set: __exportSetter.bind(all, name) var bDepth = 0;
}); var eQ = new Set;
}; var MOUNTED = new WeakMap;
var SVG_NS = "http://www.w3.org/2000/svg";
// src/sigpro.js var XLINK = "http://www.w3.org/1999/xlink";
var exports_sigpro = {}; var SVG_TAGS = new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(","));
__export(exports_sigpro, { var DANG_ATTR = new Set(["src", "href", "formaction", "action", "background", "code", "archive"]);
watch: () => watch, var clr = (s) => {
val: () => val,
render: () => render,
onUnmount: () => onUnmount,
mount: () => mount,
isO: () => isO,
isF: () => isF,
isA: () => isA,
h: () => h,
each: () => each,
batch: () => batch,
SigPro: () => SigPro,
Fragment: () => Fragment,
$: () => $
});
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) { if (s) {
s.forEach((f) => f()); s.forEach((f) => f());
s.clear(); s.clear();
} }
}; };
var dispose = (e) => { var dispose = (e) => {
if (!e || e._x) if (!e || e._x)
return; return;
e._x = 1; e._x = 1;
@@ -72,9 +39,9 @@
c._d.clear(); c._d.clear();
} }
} }
}; };
var onUnmount = (f) => aOwn && (aOwn._c ||= new Set).add(f); var onUnmount = (f) => aOwn && (aOwn._c ||= new Set).add(f);
var untrack = (f) => { var untrack = (f) => {
let p = aEff; let p = aEff;
aEff = null; aEff = null;
try { try {
@@ -82,8 +49,8 @@
} finally { } finally {
aEff = p; aEff = p;
} }
}; };
var createEffect = (f, isC = 0) => { var createEffect = (f, isC = 0) => {
const e = () => { const e = () => {
if (e._x) if (e._x)
return; return;
@@ -110,8 +77,8 @@
if (aOwn) if (aOwn)
(aOwn._ch ||= new Set).add(e); (aOwn._ch ||= new Set).add(e);
return e; return e;
}; };
var flush = () => { var flush = () => {
if (isFlushing) if (isFlushing)
return; return;
isFlushing = 1; isFlushing = 1;
@@ -121,8 +88,8 @@
if (!e._x) if (!e._x)
e(); e();
isFlushing = 0; isFlushing = 0;
}; };
var batch = (f) => { var batch = (f) => {
bDepth++; bDepth++;
try { try {
return f(); return f();
@@ -130,8 +97,8 @@
if (!--bDepth && eQ.size && !isFlushing) if (!--bDepth && eQ.size && !isFlushing)
flush(); flush();
} }
}; };
var trkUpd = (s, trg = 0) => { var trkUpd = (s, trg = 0) => {
if (!trg && aEff && !aEff._x) { if (!trg && aEff && !aEff._x) {
s.add(aEff); s.add(aEff);
(aEff._d ||= new Set).add(s); (aEff._d ||= new Set).add(s);
@@ -152,8 +119,8 @@
if (q && !isFlushing && !bDepth) if (q && !isFlushing && !bDepth)
queueMicrotask(flush); queueMicrotask(flush);
} }
}; };
var $ = (v, k = null) => { var $ = (v, k = null) => {
let s = new Set; let s = new Set;
if (isF(v)) { if (isF(v)) {
let c, cp = () => { let c, cp = () => {
@@ -197,16 +164,16 @@
trkUpd(s); trkUpd(s);
return v; return v;
}; };
}; };
var watch = (src, cb) => { var watch = (src, cb) => {
let e = createEffect(cb ? () => { let e = createEffect(cb ? () => {
let v = isA(src) ? src.map((s) => s()) : src(); let v = isA(src) ? src.map((s) => s()) : src();
untrack(() => cb(v)); untrack(() => cb(v));
} : src); } : src);
e(); e();
return () => dispose(e); return () => dispose(e);
}; };
var clnNd = (n) => { var clnNd = (n) => {
if (!n) if (!n)
return; return;
clr(n._c); clr(n._c);
@@ -214,9 +181,9 @@
dispose(n._oE); dispose(n._oE);
if (n.childNodes) if (n.childNodes)
n.childNodes.forEach(clnNd); 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 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 = []) => { var h = (tag, prp = {}, ch = []) => {
if (prp instanceof Node || isA(prp) || !isO(prp)) { if (prp instanceof Node || isA(prp) || !isO(prp)) {
ch = prp; ch = prp;
prp = {}; prp = {};
@@ -323,8 +290,8 @@
}; };
app(ch); app(ch);
return el; return el;
}; };
var render = (rFn) => { var render = (rFn) => {
let c = new Set, pO = aOwn, pE = aEff, cnt = doc.createElement("div"); let c = new Set, pO = aOwn, pE = aEff, cnt = doc.createElement("div");
cnt.style.display = "contents"; cnt.style.display = "contents";
cnt.setAttribute("role", "presentation"); cnt.setAttribute("role", "presentation");
@@ -352,8 +319,8 @@
clnNd(cnt); clnNd(cnt);
cnt.remove(); cnt.remove();
} }; } };
}; };
var when = (c, Y, N = null) => { var when = (c, Y, N = null) => {
let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), v; let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), v;
watch(() => !!val(c), (s) => { watch(() => !!val(c), (s) => {
if (v) { if (v) {
@@ -368,8 +335,8 @@
}); });
onUnmount(() => v?._del()); onUnmount(() => v?._del());
return rt; return rt;
}; };
var each = (s, fn, kF) => { var each = (s, fn, kF) => {
let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), cch = new Map; let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), cch = new Map;
watch(() => val(s) || [], (it) => { watch(() => val(s) || [], (it) => {
let nCc = new Map, nOd = []; let nCc = new Map, nOd = [];
@@ -393,8 +360,8 @@
cch = nCc; cch = nCc;
}); });
return rt; return rt;
}; };
var mount = (c, tgt) => { var mount = (c, tgt) => {
let t = typeof tgt == "string" ? doc.querySelector(tgt) : tgt; let t = typeof tgt == "string" ? doc.querySelector(tgt) : tgt;
if (!t) if (!t)
return; return;
@@ -404,100 +371,25 @@
t.replaceChildren(i._cnt); t.replaceChildren(i._cnt);
MOUNTED.set(t, i); MOUNTED.set(t, i);
return i; return i;
}; };
var SigPro = { $, watch, batch, h, Fragment, render, mount, when, each, onUnmount, val, isA, isF, isO }; var SigPro = { $, watch, batch, h, Fragment, render, mount, when, each, onUnmount, val, isA, isF, isO };
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
window.SigPro = SigPro; 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)); "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 {
// src/sigpro.utils.js watch,
var exports_sigpro_utils = {}; val,
__export(exports_sigpro_utils, { render,
t: () => t, onUnmount,
setLocale: () => setLocale, mount,
router: () => router, isO,
db: () => db, isF,
addLang: () => addLang isA,
}); h,
var router = (routes) => { each,
const getHash = () => window.location.hash.slice(1) || "/"; batch,
const path = $(getHash()); SigPro,
const handler = () => path(getHash()); Fragment,
window.addEventListener("hashchange", handler); $
const hook = h("div", { class: "router-hook" }); };
let currentView = null;
watch([path], () => {
const cur = path();
const route = routes.find((r) => {
const p1 = r.path.split("/").filter(Boolean);
const p2 = cur.split("/").filter(Boolean);
return p1.length === p2.length && p1.every((p, i) => p[0] === ":" || p === p2[i]);
}) || routes.find((r) => r.path === "*");
if (route) {
currentView?.destroy();
const params = {};
route.path.split("/").filter(Boolean).forEach((p, i) => {
if (p[0] === ":")
params[p.slice(1)] = cur.split("/").filter(Boolean)[i];
});
router.params(params);
currentView = render(() => isF(route.component) ? route.component(params) : route.component);
hook.replaceChildren(currentView.container);
}
});
hook.destroy = () => {
window.removeEventListener("hashchange", handler);
currentView?.destroy();
};
return hook;
};
router.params = $({});
router.to = (p) => window.location.hash = p.replace(/^#?\/?/, "#/");
router.back = () => window.history.back();
router.path = () => window.location.hash.replace(/^#/, "") || "/";
var db = async (url, data = {}, loading = null) => {
if (loading)
loading(true);
try {
const res = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
credentials: "include"
});
if (!res.ok) {
const errorText = await res.text();
throw new Error(`Error ${res.status}: ${errorText}`);
}
return await res.json();
} finally {
if (loading)
loading(false);
}
};
var currentLocale = $("en");
var translations = {};
var addLang = (obj) => {
for (const locale of Object.keys(obj)) {
if (!translations[locale])
translations[locale] = {};
Object.assign(translations[locale], obj[locale]);
}
};
var setLocale = (locale) => {
if (locale && translations[locale]) {
currentLocale(locale);
}
};
var t = (key) => {
return () => translations[currentLocale()]?.[key] ?? key;
};
// src/build_umd.js
if (typeof window !== "undefined") {
const SigPro2 = { ...exports_sigpro, ...exports_sigpro_utils };
window.SigPro = SigPro2;
Object.assign(window, SigPro2);
}
})();

View File

@@ -1,7 +1,6 @@
(() => { // src/convert.js
// src/convert.js import { $ } from "./sigpro.js";
var { $, div, h1, label, textarea, button, span } = window; function html2sigpro(h) {
function html2sigpro(h) {
const B = new Set(["allowfullscreen", "async", "autofocus", "autoplay", "checked", "controls", "default", "defer", "disabled", "formnovalidate", "hidden", "ismap", "itemscope", "loop", "multiple", "muted", "nomodule", "novalidate", "open", "playsinline", "readonly", "required", "reversed", "selected", "truespeed"]), esc = (v) => v.replace(/"/g, "\\\""), bP = (el) => { const B = new Set(["allowfullscreen", "async", "autofocus", "autoplay", "checked", "controls", "default", "defer", "disabled", "formnovalidate", "hidden", "ismap", "itemscope", "loop", "multiple", "muted", "nomodule", "novalidate", "open", "playsinline", "readonly", "required", "reversed", "selected", "truespeed"]), esc = (v) => v.replace(/"/g, "\\\""), bP = (el) => {
let a = [...el.attributes].map(({ name: n, value: v }) => /^on/i.test(n) ? `${n}: (e) => { ${v.replace(/\s+/g, " ").trim()} }` : B.has(n.toLowerCase()) && (!v || v == n) ? `${n}: true` : `${n}: "${esc(v)}"`); let a = [...el.attributes].map(({ name: n, value: v }) => /^on/i.test(n) ? `${n}: (e) => { ${v.replace(/\s+/g, " ").trim()} }` : B.has(n.toLowerCase()) && (!v || v == n) ? `${n}: true` : `${n}: "${esc(v)}"`);
return a.length ? `{ ${a.join(", ")} }` : ""; return a.length ? `{ ${a.join(", ")} }` : "";
@@ -29,13 +28,13 @@ ${s}])`;
${r.join(`, ${r.join(`,
`)} `)}
]`; ]`;
} }
var converter = () => { var converter = () => {
const inH = $(""); const inH = $("");
const setInH = (v) => inH(v); const setInH = (v) => inH(v);
const outS = $(""); const outS = $("");
const setOutS = (v) => outS(v); const setOutS = (v) => outS(v);
cnv = () => { const cnv = () => {
try { try {
setOutS(html2sigpro(inH())); setOutS(html2sigpro(inH()));
} catch (e) { } catch (e) {
@@ -70,7 +69,6 @@ ${r.join(`,
]), ]),
textarea({ style: txS + ";background:#f9fafb", readonly: true, value: outS, placeholder: "Result..." }) textarea({ style: txS + ";background:#f9fafb", readonly: true, value: outS, placeholder: "Result..." })
]); ]);
}; };
window.html2sigpro = html2sigpro; window.html2sigpro = html2sigpro;
window.converter = converter; window.converter = converter;
})();

View File

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

View File

@@ -1,62 +1,29 @@
(() => { // src/sigpro.js
var __defProp = Object.defineProperty; var isF = (f) => typeof f == "function";
var __returnValue = (v) => v; var isO = (o) => o && typeof o == "object";
function __exportSetter(name, newValue) { var isA = Array.isArray;
this[name] = __returnValue.bind(null, newValue); var doc = typeof document < "u" ? document : null;
} var txt = (s) => doc.createTextNode(s == null ? "" : String(s));
var __export = (target, all) => { var toNd = (n) => n?._rt ? n._cnt : n instanceof Node ? n : txt(n);
for (var name in all) var Fragment = (p) => p.children;
__defProp(target, name, { var val = (v) => isF(v) ? v() : v;
get: all[name], var aEff = null;
enumerable: true, var aOwn = null;
configurable: true, var isFlushing = 0;
set: __exportSetter.bind(all, name) var bDepth = 0;
}); var eQ = new Set;
}; var MOUNTED = new WeakMap;
var SVG_NS = "http://www.w3.org/2000/svg";
// src/sigpro.js var XLINK = "http://www.w3.org/1999/xlink";
var exports_sigpro = {}; var SVG_TAGS = new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(","));
__export(exports_sigpro, { var DANG_ATTR = new Set(["src", "href", "formaction", "action", "background", "code", "archive"]);
watch: () => watch, var clr = (s) => {
val: () => val,
render: () => render,
onUnmount: () => onUnmount,
mount: () => mount,
isO: () => isO,
isF: () => isF,
isA: () => isA,
h: () => h,
each: () => each,
batch: () => batch,
SigPro: () => SigPro,
Fragment: () => Fragment,
$: () => $
});
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) { if (s) {
s.forEach((f) => f()); s.forEach((f) => f());
s.clear(); s.clear();
} }
}; };
var dispose = (e) => { var dispose = (e) => {
if (!e || e._x) if (!e || e._x)
return; return;
e._x = 1; e._x = 1;
@@ -72,9 +39,9 @@
c._d.clear(); c._d.clear();
} }
} }
}; };
var onUnmount = (f) => aOwn && (aOwn._c ||= new Set).add(f); var onUnmount = (f) => aOwn && (aOwn._c ||= new Set).add(f);
var untrack = (f) => { var untrack = (f) => {
let p = aEff; let p = aEff;
aEff = null; aEff = null;
try { try {
@@ -82,8 +49,8 @@
} finally { } finally {
aEff = p; aEff = p;
} }
}; };
var createEffect = (f, isC = 0) => { var createEffect = (f, isC = 0) => {
const e = () => { const e = () => {
if (e._x) if (e._x)
return; return;
@@ -110,8 +77,8 @@
if (aOwn) if (aOwn)
(aOwn._ch ||= new Set).add(e); (aOwn._ch ||= new Set).add(e);
return e; return e;
}; };
var flush = () => { var flush = () => {
if (isFlushing) if (isFlushing)
return; return;
isFlushing = 1; isFlushing = 1;
@@ -121,8 +88,8 @@
if (!e._x) if (!e._x)
e(); e();
isFlushing = 0; isFlushing = 0;
}; };
var batch = (f) => { var batch = (f) => {
bDepth++; bDepth++;
try { try {
return f(); return f();
@@ -130,8 +97,8 @@
if (!--bDepth && eQ.size && !isFlushing) if (!--bDepth && eQ.size && !isFlushing)
flush(); flush();
} }
}; };
var trkUpd = (s, trg = 0) => { var trkUpd = (s, trg = 0) => {
if (!trg && aEff && !aEff._x) { if (!trg && aEff && !aEff._x) {
s.add(aEff); s.add(aEff);
(aEff._d ||= new Set).add(s); (aEff._d ||= new Set).add(s);
@@ -152,8 +119,8 @@
if (q && !isFlushing && !bDepth) if (q && !isFlushing && !bDepth)
queueMicrotask(flush); queueMicrotask(flush);
} }
}; };
var $ = (v, k = null) => { var $ = (v, k = null) => {
let s = new Set; let s = new Set;
if (isF(v)) { if (isF(v)) {
let c, cp = () => { let c, cp = () => {
@@ -197,16 +164,16 @@
trkUpd(s); trkUpd(s);
return v; return v;
}; };
}; };
var watch = (src, cb) => { var watch = (src, cb) => {
let e = createEffect(cb ? () => { let e = createEffect(cb ? () => {
let v = isA(src) ? src.map((s) => s()) : src(); let v = isA(src) ? src.map((s) => s()) : src();
untrack(() => cb(v)); untrack(() => cb(v));
} : src); } : src);
e(); e();
return () => dispose(e); return () => dispose(e);
}; };
var clnNd = (n) => { var clnNd = (n) => {
if (!n) if (!n)
return; return;
clr(n._c); clr(n._c);
@@ -214,9 +181,9 @@
dispose(n._oE); dispose(n._oE);
if (n.childNodes) if (n.childNodes)
n.childNodes.forEach(clnNd); 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 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 = []) => { var h = (tag, prp = {}, ch = []) => {
if (prp instanceof Node || isA(prp) || !isO(prp)) { if (prp instanceof Node || isA(prp) || !isO(prp)) {
ch = prp; ch = prp;
prp = {}; prp = {};
@@ -323,8 +290,8 @@
}; };
app(ch); app(ch);
return el; return el;
}; };
var render = (rFn) => { var render = (rFn) => {
let c = new Set, pO = aOwn, pE = aEff, cnt = doc.createElement("div"); let c = new Set, pO = aOwn, pE = aEff, cnt = doc.createElement("div");
cnt.style.display = "contents"; cnt.style.display = "contents";
cnt.setAttribute("role", "presentation"); cnt.setAttribute("role", "presentation");
@@ -352,8 +319,8 @@
clnNd(cnt); clnNd(cnt);
cnt.remove(); cnt.remove();
} }; } };
}; };
var when = (c, Y, N = null) => { var when = (c, Y, N = null) => {
let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), v; let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), v;
watch(() => !!val(c), (s) => { watch(() => !!val(c), (s) => {
if (v) { if (v) {
@@ -368,8 +335,8 @@
}); });
onUnmount(() => v?._del()); onUnmount(() => v?._del());
return rt; return rt;
}; };
var each = (s, fn, kF) => { var each = (s, fn, kF) => {
let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), cch = new Map; let anc = txt(""), rt = h("div", { style: "display:contents" }, [anc]), cch = new Map;
watch(() => val(s) || [], (it) => { watch(() => val(s) || [], (it) => {
let nCc = new Map, nOd = []; let nCc = new Map, nOd = [];
@@ -393,8 +360,8 @@
cch = nCc; cch = nCc;
}); });
return rt; return rt;
}; };
var mount = (c, tgt) => { var mount = (c, tgt) => {
let t = typeof tgt == "string" ? doc.querySelector(tgt) : tgt; let t = typeof tgt == "string" ? doc.querySelector(tgt) : tgt;
if (!t) if (!t)
return; return;
@@ -404,100 +371,25 @@
t.replaceChildren(i._cnt); t.replaceChildren(i._cnt);
MOUNTED.set(t, i); MOUNTED.set(t, i);
return i; return i;
}; };
var SigPro = { $, watch, batch, h, Fragment, render, mount, when, each, onUnmount, val, isA, isF, isO }; var SigPro = { $, watch, batch, h, Fragment, render, mount, when, each, onUnmount, val, isA, isF, isO };
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
window.SigPro = SigPro; 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)); "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 {
// src/sigpro.utils.js watch,
var exports_sigpro_utils = {}; val,
__export(exports_sigpro_utils, { render,
t: () => t, onUnmount,
setLocale: () => setLocale, mount,
router: () => router, isO,
db: () => db, isF,
addLang: () => addLang isA,
}); h,
var router = (routes) => { each,
const getHash = () => window.location.hash.slice(1) || "/"; batch,
const path = $(getHash()); SigPro,
const handler = () => path(getHash()); Fragment,
window.addEventListener("hashchange", handler); $
const hook = h("div", { class: "router-hook" }); };
let currentView = null;
watch([path], () => {
const cur = path();
const route = routes.find((r) => {
const p1 = r.path.split("/").filter(Boolean);
const p2 = cur.split("/").filter(Boolean);
return p1.length === p2.length && p1.every((p, i) => p[0] === ":" || p === p2[i]);
}) || routes.find((r) => r.path === "*");
if (route) {
currentView?.destroy();
const params = {};
route.path.split("/").filter(Boolean).forEach((p, i) => {
if (p[0] === ":")
params[p.slice(1)] = cur.split("/").filter(Boolean)[i];
});
router.params(params);
currentView = render(() => isF(route.component) ? route.component(params) : route.component);
hook.replaceChildren(currentView.container);
}
});
hook.destroy = () => {
window.removeEventListener("hashchange", handler);
currentView?.destroy();
};
return hook;
};
router.params = $({});
router.to = (p) => window.location.hash = p.replace(/^#?\/?/, "#/");
router.back = () => window.history.back();
router.path = () => window.location.hash.replace(/^#/, "") || "/";
var db = async (url, data = {}, loading = null) => {
if (loading)
loading(true);
try {
const res = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
credentials: "include"
});
if (!res.ok) {
const errorText = await res.text();
throw new Error(`Error ${res.status}: ${errorText}`);
}
return await res.json();
} finally {
if (loading)
loading(false);
}
};
var currentLocale = $("en");
var translations = {};
var addLang = (obj) => {
for (const locale of Object.keys(obj)) {
if (!translations[locale])
translations[locale] = {};
Object.assign(translations[locale], obj[locale]);
}
};
var setLocale = (locale) => {
if (locale && translations[locale]) {
currentLocale(locale);
}
};
var t = (key) => {
return () => translations[currentLocale()]?.[key] ?? key;
};
// src/build_umd.js
if (typeof window !== "undefined") {
const SigPro2 = { ...exports_sigpro, ...exports_sigpro_utils };
window.SigPro = SigPro2;
Object.assign(window, SigPro2);
}
})();

View File

@@ -8,15 +8,15 @@
"email": "sigpro@natxocc.com", "email": "sigpro@natxocc.com",
"url": "https://sigpro.natxocc.com" "url": "https://sigpro.natxocc.com"
}, },
"main": "./dist/sigpro.esm.js", "main": "./dist/sigpro.js",
"module": "./dist/sigpro.esm.js", "module": "./dist/sigpro.js",
"unpkg": "./dist/sigpro.js", "unpkg": "./dist/sigpro.js",
"jsdelivr": "./dist/sigpro.js", "jsdelivr": "./dist/sigpro.js",
"types": "./sigpro.d.ts", "types": "./sigpro.d.ts",
"exports": { "exports": {
".": { ".": {
"types": "./sigpro.d.ts", "types": "./sigpro.d.ts",
"import": "./dist/sigpro.esm.js", "import": "./dist/sigpro.js",
"default": "./dist/sigpro.js" "default": "./dist/sigpro.js"
}, },
"./utils": "./dist/sigpro.utils.js", "./utils": "./dist/sigpro.utils.js",
@@ -41,28 +41,15 @@
"del": "bun pm cache rm && rm -f bun.lockb && rm -f bun.lock", "del": "bun pm cache rm && rm -f bun.lockb && rm -f bun.lock",
"clean": "rm -rf dist", "clean": "rm -rf dist",
"prebuild": "npm run clean", "prebuild": "npm run clean",
"build:convert": "bun build ./src/convert.js --bundle --outfile=./docs/convert.js --format=iife", "build:core": "bun build ./src/sigpro.js --bundle --outfile=./dist/sigpro.js --format=esm",
"build:iife": "bun build ./src/build_umd.js --bundle --outfile=./dist/sigpro.js --format=iife --global-name=SigPro", "build:utils": "bun build ./src/sigpro.utils.js --bundle --outfile=./dist/sigpro.utils.js --format=esm --external ./src/sigpro.js",
"build:esm": "bun build ./src/sigpro.js --bundle --outfile=./dist/sigpro.esm.js --format=esm", "build:vite": "bun build ./src/sigpro.vite.js --bundle --outfile=./dist/sigpro.vite.js --format=esm --external fs --external path",
"build:utils": "bun build ./src/sigpro.utils.js --bundle --outfile=./dist/sigpro.utils.js --format=esm --external './src/sigpro.js'", "build:convert": "bun build ./src/convert.js --bundle --outfile=./docs/convert.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:copy": "cp ./dist/sigpro.js ./docs/sigpro.js", "build:copy": "cp ./dist/sigpro.js ./docs/sigpro.js",
"build": "bun run build:iife && bun run build:esm && bun run build:utils && bun run build:vite && bun run build:convert && bun run build:copy", "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" "docs": "bun x serve docs"
}, },
"keywords": [ "keywords": [
"signals", "signals", "reactivity", "reactive", "pure", "vanilla", "js", "ui", "dom", "state", "frontend", "spa", "lightweight", "sigpro"
"reactivity",
"reactive",
"pure",
"vanilla",
"js",
"ui",
"dom",
"state",
"frontend",
"spa",
"lightweight",
"sigpro"
] ]
} }

View File

@@ -1,4 +1,4 @@
const { $, div, h1, label, textarea, button, span } = window; import { $ } from "./sigpro.js";
function html2sigpro(h) { function html2sigpro(h) {
const B = new Set(['allowfullscreen', 'async', 'autofocus', 'autoplay', 'checked', 'controls', 'default', 'defer', 'disabled', 'formnovalidate', 'hidden', 'ismap', 'itemscope', 'loop', 'multiple', 'muted', 'nomodule', 'novalidate', 'open', 'playsinline', 'readonly', 'required', 'reversed', 'selected', 'truespeed']), const B = new Set(['allowfullscreen', 'async', 'autofocus', 'autoplay', 'checked', 'controls', 'default', 'defer', 'disabled', 'formnovalidate', 'hidden', 'ismap', 'itemscope', 'loop', 'multiple', 'muted', 'nomodule', 'novalidate', 'open', 'playsinline', 'readonly', 'required', 'reversed', 'selected', 'truespeed']),
@@ -34,7 +34,7 @@ const converter = () => {
const setInH = (v) => inH(v); const setInH = (v) => inH(v);
const outS = $(''); const outS = $('');
const setOutS = (v) => outS(v); const setOutS = (v) => outS(v);
cnv = () => { try { setOutS(html2sigpro(inH())) } catch (e) { setOutS('Error: ' + e.message) } }, const cnv = () => { try { setOutS(html2sigpro(inH())) } catch (e) { setOutS('Error: ' + e.message) } },
txS = "width:100%;height:200px;padding:10px;border:1px solid #ccc;border-radius:4px;font-family:monospace;font-size:14px;box-sizing:border-box;resize:vertical", txS = "width:100%;height:200px;padding:10px;border:1px solid #ccc;border-radius:4px;font-family:monospace;font-size:14px;box-sizing:border-box;resize:vertical",
btS = "padding:8px 16px;border:none;border-radius:4px;cursor:pointer;margin-right:8px;font-size:14px"; btS = "padding:8px 16px;border:none;border-radius:4px;cursor:pointer;margin-right:8px;font-size:14px";