diff --git a/sigpro/core.js b/sigpro/core.js deleted file mode 100644 index b1f6164..0000000 --- a/sigpro/core.js +++ /dev/null @@ -1,2 +0,0 @@ -// sigpro/core.js -export * from '../sigpro.js'; \ No newline at end of file diff --git a/sigpro/fx.js b/sigpro/fx.js deleted file mode 100644 index b50e3b7..0000000 --- a/sigpro/fx.js +++ /dev/null @@ -1,31 +0,0 @@ -const fx = ({ name, duration = 200, scale, slide, rotate, blur }, child) => { - const el = typeof child === "function" ? child() : child; - if (!(el instanceof Node)) return el; - if (name) { - el.style.animation = `${name}-in ${duration}ms`; - return el; - } - const hasTransform = scale || slide || rotate || blur; - const initialTransform = [ - scale ? "scale(0.95)" : "", - slide ? "translateY(-10px)" : "", - rotate ? "rotate(-2deg)" : "" - ].filter(Boolean).join(" "); - el.style.transition = `all ${duration}ms ease`; - el.style.opacity = "0"; - if (hasTransform) el.style.transform = initialTransform; - if (blur) el.style.filter = "blur(4px)"; - requestAnimationFrame(() => { - el.style.opacity = "1"; - if (hasTransform) el.style.transform = "none"; - if (blur) el.style.filter = "none"; - }); - return el; -}; - -// Side-effect global -if (typeof window !== "undefined") { - window.fx = fx; -} - -export { fx }; \ No newline at end of file diff --git a/sigpro/req.js b/sigpro/req.js deleted file mode 100644 index 647a1bf..0000000 --- a/sigpro/req.js +++ /dev/null @@ -1,51 +0,0 @@ -import { $ } from './core.js'; - -const req = ({ url, method = 'GET', headers = {} }) => { - const loading = $(false); - const error = $(null); - const data = $(null); - let controller = null; - let timeoutId = null; - - const run = async (body = null) => { - controller?.abort(); - clearTimeout(timeoutId); - controller = new AbortController(); - timeoutId = setTimeout(() => controller.abort(), 10000); - loading(true); - error(null); - try { - const isFormData = body instanceof FormData; - const res = await fetch(url, { - method, - headers: isFormData ? headers : { 'Content-Type': 'application/json', ...headers }, - body: isFormData ? body : (body ? JSON.stringify(body) : undefined), - signal: controller.signal - }); - const text = await res.text(); - const json = text ? JSON.parse(text) : null; - if (!res.ok) throw new Error(json?.message || res.statusText); - data(json); - return json; - } catch (e) { - if (e.name !== 'AbortError') error(e.message); - throw e; - } finally { - loading(false); - clearTimeout(timeoutId); - controller = null; - timeoutId = null; - } - }; - - const abort = () => controller?.abort(); - - return { run, abort, loading, error, data }; -}; - -// Side-effect global -if (typeof window !== "undefined") { - window.req = req; -} - -export { req }; \ No newline at end of file diff --git a/sigpro/router.js b/sigpro/router.js deleted file mode 100644 index 6f3c343..0000000 --- a/sigpro/router.js +++ /dev/null @@ -1,41 +0,0 @@ -import { $, watch, h, onUnmount, isFunc, render } from './core.js'; - -const router = routes => { - const getHash = () => window.location.hash.slice(1) || "/"; - const path = $(getHash()); - const handler = () => path(getHash()); - window.addEventListener("hashchange", handler); - onUnmount(() => window.removeEventListener("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(() => isFunc(route.component) ? route.component(params) : route.component); - hook.replaceChildren(currentView.container); - } - }); - return hook; -}; - -router.params = $({}); -router.to = p => (window.location.hash = p.replace(/^#?\/?/, "#/")); -router.back = () => window.history.back(); -router.path = () => window.location.hash.replace(/^#/, "") || "/"; - -if (typeof window !== "undefined") { - window.router = router; -} - -export { router }; \ No newline at end of file