From 1101549ac1351ea5206068385de73b90b49d8fee Mon Sep 17 00:00:00 2001 From: Natxo <1172351+natxocc@users.noreply.github.com> Date: Sat, 21 Mar 2026 01:28:00 +0100 Subject: [PATCH] Update sigpro2.js --- packages/sigpro/sigpro2.js | 39 ++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/packages/sigpro/sigpro2.js b/packages/sigpro/sigpro2.js index 99eeeed..7098767 100644 --- a/packages/sigpro/sigpro2.js +++ b/packages/sigpro/sigpro2.js @@ -99,16 +99,35 @@ }; window._router = (routes) => { - const path = $(window.location.hash.replace(/^#/, "") || "/"); - window.addEventListener("hashchange", () => path(window.location.hash.replace(/^#/, "") || "/")); - return _div({ class: "router-container" }, [ - () => { - const current = path(); - const route = routes.find(r => r.path === current) || routes.find(r => r.path === "*"); - return route ? route.component() : _h1("404"); - } - ]); - }; + const path = $(window.location.hash.replace(/^#/, "") || "/"); + window.addEventListener("hashchange", () => path(window.location.hash.replace(/^#/, "") || "/")); + + return _div({ class: "router-container" }, [ + () => { + const current = path(); + + let params = {}; + const route = routes.find(r => { + const routeParts = r.path.split('/').filter(Boolean); + const currentParts = current.split('/').filter(Boolean); + if (routeParts.length !== currentParts.length) return false; + + return routeParts.every((part, i) => { + if (part.startsWith(':')) { + params[part.slice(1)] = currentParts[i]; + return true; + } + return part === currentParts[i]; + }); + }) || routes.find(r => r.path === "*"); + + if (!route) return _h1("404"); + return typeof route.component === 'function' + ? route.component(params) + : route.component; + } + ]); +}; window._render = (node, target = document.body) => { target.innerHTML = '';