uraniyum 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -249,11 +249,9 @@ let styleElement = null;
249
249
  let styleSheet = null;
250
250
  function ensureStyleSheet() {
251
251
  if (!styleSheet) {
252
- if (!styleElement) {
253
- styleElement = document.createElement("style");
254
- styleElement.id = "styles";
255
- document.head.appendChild(styleElement);
256
- }
252
+ styleElement = document.createElement("style");
253
+ styleElement.id = "styles";
254
+ document.head.appendChild(styleElement);
257
255
  styleSheet = styleElement.sheet;
258
256
  }
259
257
  return styleSheet;
@@ -263,127 +261,108 @@ function camelToKebab(str) {
263
261
  const cached = camelToKebabCache.get(str);
264
262
  if (cached)
265
263
  return cached;
266
- const result = str.replace(/[A-Z]/g, m => "-" + m.toLowerCase());
267
- camelToKebabCache.set(str, result);
268
- return result;
264
+ const res = str.replace(/[A-Z]/g, m => "-" + m.toLowerCase());
265
+ camelToKebabCache.set(str, res);
266
+ return res;
267
+ }
268
+ function resolveValue(v) {
269
+ return typeof v === "function" ? v() : v;
269
270
  }
270
- const atomicClassCache = new Map();
271
+ const PRECEDENCE_LAYERS = 3;
271
272
  let atomicCounter = 0;
272
- function nextAtomicClass() {
273
- return `a-${atomicCounter++}`;
273
+ function encode(n) {
274
+ return n.toString(36);
274
275
  }
275
- function registerAtomicRule(selector, decl) {
276
- const key = `${selector}|${decl}`;
277
- const cached = atomicClassCache.get(key);
278
- if (cached)
279
- return cached;
280
- const className = nextAtomicClass();
281
- atomicClassCache.set(key, className);
282
- ensureStyleSheet().insertRule(`${selector.replace(/&/g, `.${className}`)}{${decl}}`, styleSheet.cssRules.length);
283
- return className;
276
+ function makeClassName(layer) {
277
+ // looks like f1phragk
278
+ return `f${layer}${encode(atomicCounter++).padStart(5, "0")}`;
284
279
  }
285
- const KEYFRAMES_PREFIX = "@keyframes ";
286
- const keyframeCache = new Map();
287
- let keyframeCounter = 0;
288
- function registerKeyframes(name, frames) {
289
- const signature = name + JSON.stringify(frames);
290
- const cached = keyframeCache.get(signature);
280
+ const atomicCache = new Map();
281
+ function getAtomicClasses(selector, decl) {
282
+ const key = `${selector}|${decl}`;
283
+ const cached = atomicCache.get(key);
291
284
  if (cached)
292
285
  return cached;
293
- const unique = `${name}-${keyframeCounter++}`;
294
- const steps = [];
295
- for (const step in frames) {
296
- const decls = stringifyDecls(frames[step] ?? {}, new Map());
297
- steps.push(`${step}{${decls}}`);
298
- }
299
- ensureStyleSheet().insertRule(`@keyframes ${unique}{${steps.join("")}}`, styleSheet.cssRules.length);
300
- keyframeCache.set(signature, unique);
301
- return unique;
302
- }
303
- function stringifyDecls(props, keyframes) {
304
- const out = [];
305
- for (const key in props) {
306
- const raw = props[key];
307
- if (raw == null || typeof raw === "object")
308
- continue;
309
- let val = typeof raw === "function" ? raw() : raw;
310
- if (typeof val === "string") {
311
- for (const [orig, uniq] of keyframes) {
312
- val = val.replaceAll(`$${orig}`, uniq);
313
- }
314
- }
315
- out.push(`${camelToKebab(key)}:${val}`);
286
+ const classes = [];
287
+ const sheet = ensureStyleSheet();
288
+ for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {
289
+ const className = makeClassName(layer);
290
+ classes.push(className);
291
+ const css = selector === "&"
292
+ ? `.${className}{${decl}}`
293
+ : selector.replace(/&/g, `.${className}`) + `{${decl}}`;
294
+ sheet.insertRule(css, sheet.cssRules.length);
316
295
  }
317
- return out.join(";");
296
+ atomicCache.set(key, classes);
297
+ return classes;
318
298
  }
319
- function buildAtomicClasses(rule, keyframes) {
320
- const classes = [];
299
+ function buildAtomicEntries(rule) {
300
+ const entries = [];
321
301
  for (const key in rule) {
322
302
  const val = rule[key];
323
- if (!val)
324
- continue;
325
- if (key[0] === ":" && typeof val === "object") {
326
- const decls = stringifyDecls(val, keyframes);
327
- if (!decls)
328
- continue;
329
- classes.push(registerAtomicRule(`&${key}`, decls));
303
+ if (val == null)
330
304
  continue;
331
- }
332
- if (key.startsWith("@media") && typeof val === "object") {
333
- const decls = stringifyDecls(val, keyframes);
334
- if (!decls)
335
- continue;
336
- const className = nextAtomicClass();
337
- atomicClassCache.set(`${key}|${decls}`, className);
338
- ensureStyleSheet().insertRule(`${key}{.${className}{${decls}}}`, styleSheet.cssRules.length);
339
- classes.push(className);
305
+ if (key.startsWith(":") && typeof val === "object") {
306
+ for (const prop in val) {
307
+ const v = val[prop];
308
+ if (v == null || typeof v === "object")
309
+ continue;
310
+ const decl = `${camelToKebab(prop)}:${resolveValue(v)}`;
311
+ const classes = getAtomicClasses(`&${key}`, decl);
312
+ entries.push({ classes, prop });
313
+ }
340
314
  continue;
341
315
  }
342
316
  if (typeof val !== "object") {
343
- let resolved = typeof val === "function" ? val() : val;
344
- if (typeof resolved === "string") {
345
- for (const [orig, uniq] of keyframes) {
346
- resolved = resolved.replaceAll(`$${orig}`, uniq);
347
- }
348
- }
349
- const decl = `${camelToKebab(key)}:${resolved}`;
350
- classes.push(registerAtomicRule("&", decl));
317
+ const decl = `${camelToKebab(key)}:${resolveValue(val)}`;
318
+ const classes = getAtomicClasses("&", decl);
319
+ entries.push({ classes, prop: key });
351
320
  }
352
321
  }
353
- return classes;
322
+ return entries;
323
+ }
324
+ function mergeClasses(...inputs) {
325
+ const perLayer = [];
326
+ for (let i = 0; i < PRECEDENCE_LAYERS; i++) {
327
+ perLayer[i] = [];
328
+ }
329
+ inputs.forEach((input, index) => {
330
+ if (typeof input !== "string")
331
+ return;
332
+ const layer = Math.min(index, PRECEDENCE_LAYERS - 1);
333
+ const bucket = perLayer[layer];
334
+ if (!bucket)
335
+ return;
336
+ const parts = input.trim().split(/\s+/);
337
+ for (const cls of parts) {
338
+ if (cls)
339
+ bucket.push(cls);
340
+ }
341
+ });
342
+ return perLayer.flat().join(" ");
354
343
  }
355
344
  function makeStyles(styles) {
356
345
  return () => {
357
- const classNames = {};
358
- const keyframesMap = new Map();
359
- for (const key in styles) {
360
- if (!key.startsWith(KEYFRAMES_PREFIX))
361
- continue;
362
- const name = key.slice(KEYFRAMES_PREFIX.length);
363
- const frames = styles[key];
364
- const unique = registerKeyframes(name, frames);
365
- keyframesMap.set(name, unique);
366
- }
346
+ const result = {};
367
347
  for (const slot in styles) {
368
- if (slot.startsWith(KEYFRAMES_PREFIX))
369
- continue;
370
348
  const rule = (styles[slot] ?? {});
371
- const classes = buildAtomicClasses(rule, keyframesMap);
372
- classNames[slot] = classes.join(" ");
349
+ const entries = buildAtomicEntries(rule);
350
+ const classes = entries.map(e => e.classes[0]).join(" ");
351
+ result[slot] = classes;
373
352
  }
374
- return classNames;
353
+ return result;
375
354
  };
376
355
  }
377
- const mergeClasses = (...classes) => classes.filter(Boolean).join(" ");
378
356
  function mergeStyleSets(...sets) {
379
357
  const merged = {};
380
358
  for (const set of sets) {
381
359
  if (!set)
382
360
  continue;
383
361
  for (const key in set) {
384
- const prev = merged[key] ?? {};
385
- const cur = set[key] ?? {};
386
- merged[key] = { ...prev, ...cur };
362
+ merged[key] = {
363
+ ...merged[key],
364
+ ...set[key],
365
+ };
387
366
  }
388
367
  }
389
368
  return makeStyles(merged)();
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/state.ts","../src/tags.ts","../src/router.ts","../src/helpers.ts","../src/styles.ts"],"sourcesContent":["export const STATE = Symbol(\"STATE\");\nexport function isState(x) {\n return typeof x === \"object\" && x !== null && x[STATE] === true;\n}\nlet currentEffect = null;\nfunction track(st) {\n if (currentEffect) {\n st.subs.add(currentEffect);\n currentEffect.deps.add(st);\n }\n}\nfunction cleanup(effect) {\n for (const st of effect.deps)\n st.subs.delete(effect);\n effect.deps.clear();\n}\nexport function state(v) {\n const st = {\n [STATE]: true,\n subs: new Set(),\n get val() {\n track(st);\n return v;\n },\n set val(nv) {\n if (nv === v)\n return;\n v = nv;\n for (const fn of Array.from(st.subs)) {\n fn();\n }\n }\n };\n return st;\n}\nexport function derive(fn) {\n const effect = (() => {\n cleanup(effect);\n currentEffect = effect;\n try {\n fn();\n }\n finally {\n currentEffect = null;\n }\n });\n effect.deps = new Set();\n effect();\n return effect;\n}\n","import { derive } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\n// --- Attribute detection (fix for TypeScript narrowing) ---\nfunction isAttrs(x) {\n return (x &&\n typeof x === \"object\" &&\n !(x instanceof Node) &&\n !isState(x) &&\n typeof x !== \"function\" &&\n !Array.isArray(x));\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (attrsOrChild, ...children) => {\n const el = document.createElement(tag);\n // Handle attributes safely\n if (isAttrs(attrsOrChild)) {\n for (const [k, v] of Object.entries(attrsOrChild)) {\n el.setAttribute(k, String(v));\n }\n }\n else if (attrsOrChild != null) {\n // Now TypeScript knows it's ChildLike, not Attrs\n children.unshift(attrsOrChild);\n }\n processChildren(el, children);\n return el;\n };\n }\n});\nfunction processChildren(el, children) {\n for (const child of children.flat()) {\n if (child == null || child === false)\n continue;\n if (typeof child === \"function\") {\n mountReactiveFunction(el, child);\n continue;\n }\n if (isState(child)) {\n mountReactiveState(el, child);\n continue;\n }\n if (child instanceof Node) {\n el.appendChild(child);\n continue;\n }\n el.appendChild(document.createTextNode(String(child)));\n }\n}\nfunction mountReactiveFunction(parent, fn) {\n const marker = document.createTextNode(\"\");\n parent.appendChild(marker);\n let mounted = [];\n const cleanup = () => {\n for (const n of mounted) {\n if (n.parentNode === parent)\n parent.removeChild(n);\n }\n mounted = [];\n };\n derive(() => {\n cleanup();\n const value = fn();\n const values = Array.isArray(value) ? value.flat() : [value];\n for (const v of values) {\n if (v == null || v === false)\n continue;\n if (typeof v === \"function\") {\n mountReactiveFunction(parent, v);\n continue;\n }\n if (isState(v)) {\n const node = document.createTextNode(String(v.val));\n parent.insertBefore(node, marker);\n v.subs.add(() => {\n const next = String(v.val);\n if (node.data !== next)\n node.data = next;\n });\n mounted.push(node);\n continue;\n }\n if (v instanceof Node) {\n parent.insertBefore(v, marker);\n mounted.push(v);\n continue;\n }\n const text = document.createTextNode(String(v));\n parent.insertBefore(text, marker);\n mounted.push(text);\n }\n });\n}\nfunction mountReactiveState(parent, st) {\n const node = document.createTextNode(String(st.val));\n parent.appendChild(node);\n st.subs.add(() => {\n const next = String(st.val);\n if (node.data !== next)\n node.data = next;\n });\n}\n","export function router(routes) {\n const patterns = [];\n let wildcard = null;\n for (const path of Object.keys(routes)) {\n const handler = routes[path];\n if (!handler)\n continue;\n if (path === \"*\") {\n wildcard = handler;\n continue;\n }\n const keys = [];\n const pattern = path.replace(/:[^/]+/g, (m) => {\n keys.push(m.slice(1));\n return \"([^/]+)\";\n });\n patterns.push({\n regex: new RegExp(`^${pattern}$`),\n keys,\n handler\n });\n }\n let currentEl = null;\n let currentPath = \"\";\n function parseQuery(search) {\n const params = {};\n if (!search)\n return params;\n for (const [k, v] of new URLSearchParams(search))\n params[k] = v;\n return params;\n }\n function matchRoute(pathname) {\n for (const { regex, keys, handler } of patterns) {\n const match = pathname.match(regex);\n if (!match)\n continue;\n const params = {};\n keys.forEach((key, i) => {\n params[key] = decodeURIComponent(match[i + 1]);\n });\n Object.assign(params, parseQuery(location.search));\n return handler(params);\n }\n if (wildcard)\n return wildcard({});\n throw new Error(`No route matches \"${pathname}\"`);\n }\n function render() {\n const newFullPath = location.pathname + location.search;\n if (newFullPath === currentPath)\n return;\n currentPath = newFullPath;\n const next = matchRoute(location.pathname);\n if (currentEl && currentEl.parentNode) {\n document.body.removeChild(currentEl);\n }\n document.body.appendChild(next);\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n return {\n render,\n push(path) {\n history.pushState(null, \"\", path);\n render();\n },\n replace(path) {\n history.replaceState(null, \"\", path);\n render();\n },\n back: () => history.back()\n };\n}\n","export function add(component) {\n if (typeof component === \"function\") {\n const el = component();\n if (!(el instanceof HTMLElement)) {\n throw new Error(\"Component function must return an HTMLElement\");\n }\n document.body.appendChild(el);\n return;\n }\n if (\"render\" in component && typeof component.render === \"function\") {\n component.render();\n return;\n }\n throw new Error(\"Invalid component passed to add()\");\n}\n","let styleElement = null;\nlet styleSheet = null;\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n }\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\nconst camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const result = str.replace(/[A-Z]/g, m => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, result);\n return result;\n}\nconst atomicClassCache = new Map();\nlet atomicCounter = 0;\nfunction nextAtomicClass() {\n return `a-${atomicCounter++}`;\n}\nfunction registerAtomicRule(selector, decl) {\n const key = `${selector}|${decl}`;\n const cached = atomicClassCache.get(key);\n if (cached)\n return cached;\n const className = nextAtomicClass();\n atomicClassCache.set(key, className);\n ensureStyleSheet().insertRule(`${selector.replace(/&/g, `.${className}`)}{${decl}}`, styleSheet.cssRules.length);\n return className;\n}\nconst KEYFRAMES_PREFIX = \"@keyframes \";\nconst keyframeCache = new Map();\nlet keyframeCounter = 0;\nfunction registerKeyframes(name, frames) {\n const signature = name + JSON.stringify(frames);\n const cached = keyframeCache.get(signature);\n if (cached)\n return cached;\n const unique = `${name}-${keyframeCounter++}`;\n const steps = [];\n for (const step in frames) {\n const decls = stringifyDecls(frames[step] ?? {}, new Map());\n steps.push(`${step}{${decls}}`);\n }\n ensureStyleSheet().insertRule(`@keyframes ${unique}{${steps.join(\"\")}}`, styleSheet.cssRules.length);\n keyframeCache.set(signature, unique);\n return unique;\n}\nfunction stringifyDecls(props, keyframes) {\n const out = [];\n for (const key in props) {\n const raw = props[key];\n if (raw == null || typeof raw === \"object\")\n continue;\n let val = typeof raw === \"function\" ? raw() : raw;\n if (typeof val === \"string\") {\n for (const [orig, uniq] of keyframes) {\n val = val.replaceAll(`$${orig}`, uniq);\n }\n }\n out.push(`${camelToKebab(key)}:${val}`);\n }\n return out.join(\";\");\n}\nfunction buildAtomicClasses(rule, keyframes) {\n const classes = [];\n for (const key in rule) {\n const val = rule[key];\n if (!val)\n continue;\n if (key[0] === \":\" && typeof val === \"object\") {\n const decls = stringifyDecls(val, keyframes);\n if (!decls)\n continue;\n classes.push(registerAtomicRule(`&${key}`, decls));\n continue;\n }\n if (key.startsWith(\"@media\") && typeof val === \"object\") {\n const decls = stringifyDecls(val, keyframes);\n if (!decls)\n continue;\n const className = nextAtomicClass();\n atomicClassCache.set(`${key}|${decls}`, className);\n ensureStyleSheet().insertRule(`${key}{.${className}{${decls}}}`, styleSheet.cssRules.length);\n classes.push(className);\n continue;\n }\n if (typeof val !== \"object\") {\n let resolved = typeof val === \"function\" ? val() : val;\n if (typeof resolved === \"string\") {\n for (const [orig, uniq] of keyframes) {\n resolved = resolved.replaceAll(`$${orig}`, uniq);\n }\n }\n const decl = `${camelToKebab(key)}:${resolved}`;\n classes.push(registerAtomicRule(\"&\", decl));\n }\n }\n return classes;\n}\nexport function makeStyles(styles) {\n return () => {\n const classNames = {};\n const keyframesMap = new Map();\n for (const key in styles) {\n if (!key.startsWith(KEYFRAMES_PREFIX))\n continue;\n const name = key.slice(KEYFRAMES_PREFIX.length);\n const frames = styles[key];\n const unique = registerKeyframes(name, frames);\n keyframesMap.set(name, unique);\n }\n for (const slot in styles) {\n if (slot.startsWith(KEYFRAMES_PREFIX))\n continue;\n const rule = (styles[slot] ?? {});\n const classes = buildAtomicClasses(rule, keyframesMap);\n classNames[slot] = classes.join(\" \");\n }\n return classNames;\n };\n}\nexport const mergeClasses = (...classes) => classes.filter(Boolean).join(\" \");\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n const prev = merged[key] ?? {};\n const cur = set[key] ?? {};\n merged[key] = { ...prev, ...cur };\n }\n }\n return makeStyles(merged)();\n}\n"],"names":["isState"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/state.ts","../src/tags.ts","../src/router.ts","../src/helpers.ts","../src/styles.ts"],"sourcesContent":["export const STATE = Symbol(\"STATE\");\nexport function isState(x) {\n return typeof x === \"object\" && x !== null && x[STATE] === true;\n}\nlet currentEffect = null;\nfunction track(st) {\n if (currentEffect) {\n st.subs.add(currentEffect);\n currentEffect.deps.add(st);\n }\n}\nfunction cleanup(effect) {\n for (const st of effect.deps)\n st.subs.delete(effect);\n effect.deps.clear();\n}\nexport function state(v) {\n const st = {\n [STATE]: true,\n subs: new Set(),\n get val() {\n track(st);\n return v;\n },\n set val(nv) {\n if (nv === v)\n return;\n v = nv;\n for (const fn of Array.from(st.subs)) {\n fn();\n }\n }\n };\n return st;\n}\nexport function derive(fn) {\n const effect = (() => {\n cleanup(effect);\n currentEffect = effect;\n try {\n fn();\n }\n finally {\n currentEffect = null;\n }\n });\n effect.deps = new Set();\n effect();\n return effect;\n}\n","import { derive } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\n// --- Attribute detection (fix for TypeScript narrowing) ---\nfunction isAttrs(x) {\n return (x &&\n typeof x === \"object\" &&\n !(x instanceof Node) &&\n !isState(x) &&\n typeof x !== \"function\" &&\n !Array.isArray(x));\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (attrsOrChild, ...children) => {\n const el = document.createElement(tag);\n // Handle attributes safely\n if (isAttrs(attrsOrChild)) {\n for (const [k, v] of Object.entries(attrsOrChild)) {\n el.setAttribute(k, String(v));\n }\n }\n else if (attrsOrChild != null) {\n // Now TypeScript knows it's ChildLike, not Attrs\n children.unshift(attrsOrChild);\n }\n processChildren(el, children);\n return el;\n };\n }\n});\nfunction processChildren(el, children) {\n for (const child of children.flat()) {\n if (child == null || child === false)\n continue;\n if (typeof child === \"function\") {\n mountReactiveFunction(el, child);\n continue;\n }\n if (isState(child)) {\n mountReactiveState(el, child);\n continue;\n }\n if (child instanceof Node) {\n el.appendChild(child);\n continue;\n }\n el.appendChild(document.createTextNode(String(child)));\n }\n}\nfunction mountReactiveFunction(parent, fn) {\n const marker = document.createTextNode(\"\");\n parent.appendChild(marker);\n let mounted = [];\n const cleanup = () => {\n for (const n of mounted) {\n if (n.parentNode === parent)\n parent.removeChild(n);\n }\n mounted = [];\n };\n derive(() => {\n cleanup();\n const value = fn();\n const values = Array.isArray(value) ? value.flat() : [value];\n for (const v of values) {\n if (v == null || v === false)\n continue;\n if (typeof v === \"function\") {\n mountReactiveFunction(parent, v);\n continue;\n }\n if (isState(v)) {\n const node = document.createTextNode(String(v.val));\n parent.insertBefore(node, marker);\n v.subs.add(() => {\n const next = String(v.val);\n if (node.data !== next)\n node.data = next;\n });\n mounted.push(node);\n continue;\n }\n if (v instanceof Node) {\n parent.insertBefore(v, marker);\n mounted.push(v);\n continue;\n }\n const text = document.createTextNode(String(v));\n parent.insertBefore(text, marker);\n mounted.push(text);\n }\n });\n}\nfunction mountReactiveState(parent, st) {\n const node = document.createTextNode(String(st.val));\n parent.appendChild(node);\n st.subs.add(() => {\n const next = String(st.val);\n if (node.data !== next)\n node.data = next;\n });\n}\n","export function router(routes) {\n const patterns = [];\n let wildcard = null;\n for (const path of Object.keys(routes)) {\n const handler = routes[path];\n if (!handler)\n continue;\n if (path === \"*\") {\n wildcard = handler;\n continue;\n }\n const keys = [];\n const pattern = path.replace(/:[^/]+/g, (m) => {\n keys.push(m.slice(1));\n return \"([^/]+)\";\n });\n patterns.push({\n regex: new RegExp(`^${pattern}$`),\n keys,\n handler\n });\n }\n let currentEl = null;\n let currentPath = \"\";\n function parseQuery(search) {\n const params = {};\n if (!search)\n return params;\n for (const [k, v] of new URLSearchParams(search))\n params[k] = v;\n return params;\n }\n function matchRoute(pathname) {\n for (const { regex, keys, handler } of patterns) {\n const match = pathname.match(regex);\n if (!match)\n continue;\n const params = {};\n keys.forEach((key, i) => {\n params[key] = decodeURIComponent(match[i + 1]);\n });\n Object.assign(params, parseQuery(location.search));\n return handler(params);\n }\n if (wildcard)\n return wildcard({});\n throw new Error(`No route matches \"${pathname}\"`);\n }\n function render() {\n const newFullPath = location.pathname + location.search;\n if (newFullPath === currentPath)\n return;\n currentPath = newFullPath;\n const next = matchRoute(location.pathname);\n if (currentEl && currentEl.parentNode) {\n document.body.removeChild(currentEl);\n }\n document.body.appendChild(next);\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n return {\n render,\n push(path) {\n history.pushState(null, \"\", path);\n render();\n },\n replace(path) {\n history.replaceState(null, \"\", path);\n render();\n },\n back: () => history.back()\n };\n}\n","export function add(component) {\n if (typeof component === \"function\") {\n const el = component();\n if (!(el instanceof HTMLElement)) {\n throw new Error(\"Component function must return an HTMLElement\");\n }\n document.body.appendChild(el);\n return;\n }\n if (\"render\" in component && typeof component.render === \"function\") {\n component.render();\n return;\n }\n throw new Error(\"Invalid component passed to add()\");\n}\n","let styleElement = null;\nlet styleSheet = null;\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\nconst camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const res = str.replace(/[A-Z]/g, m => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, res);\n return res;\n}\nfunction resolveValue(v) {\n return typeof v === \"function\" ? v() : v;\n}\nconst PRECEDENCE_LAYERS = 3;\nlet atomicCounter = 0;\nfunction encode(n) {\n return n.toString(36);\n}\nfunction makeClassName(layer) {\n // looks like f1phragk\n return `f${layer}${encode(atomicCounter++).padStart(5, \"0\")}`;\n}\nconst atomicCache = new Map();\nfunction getAtomicClasses(selector, decl) {\n const key = `${selector}|${decl}`;\n const cached = atomicCache.get(key);\n if (cached)\n return cached;\n const classes = [];\n const sheet = ensureStyleSheet();\n for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {\n const className = makeClassName(layer);\n classes.push(className);\n const css = selector === \"&\"\n ? `.${className}{${decl}}`\n : selector.replace(/&/g, `.${className}`) + `{${decl}}`;\n sheet.insertRule(css, sheet.cssRules.length);\n }\n atomicCache.set(key, classes);\n return classes;\n}\nfunction buildAtomicEntries(rule) {\n const entries = [];\n for (const key in rule) {\n const val = rule[key];\n if (val == null)\n continue;\n if (key.startsWith(\":\") && typeof val === \"object\") {\n for (const prop in val) {\n const v = val[prop];\n if (v == null || typeof v === \"object\")\n continue;\n const decl = `${camelToKebab(prop)}:${resolveValue(v)}`;\n const classes = getAtomicClasses(`&${key}`, decl);\n entries.push({ classes, prop });\n }\n continue;\n }\n if (typeof val !== \"object\") {\n const decl = `${camelToKebab(key)}:${resolveValue(val)}`;\n const classes = getAtomicClasses(\"&\", decl);\n entries.push({ classes, prop: key });\n }\n }\n return entries;\n}\nexport function mergeClasses(...inputs) {\n const perLayer = [];\n for (let i = 0; i < PRECEDENCE_LAYERS; i++) {\n perLayer[i] = [];\n }\n inputs.forEach((input, index) => {\n if (typeof input !== \"string\")\n return;\n const layer = Math.min(index, PRECEDENCE_LAYERS - 1);\n const bucket = perLayer[layer];\n if (!bucket)\n return;\n const parts = input.trim().split(/\\s+/);\n for (const cls of parts) {\n if (cls)\n bucket.push(cls);\n }\n });\n return perLayer.flat().join(\" \");\n}\nexport function makeStyles(styles) {\n return () => {\n const result = {};\n for (const slot in styles) {\n const rule = (styles[slot] ?? {});\n const entries = buildAtomicEntries(rule);\n const classes = entries.map(e => e.classes[0]).join(\" \");\n result[slot] = classes;\n }\n return result;\n };\n}\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n merged[key] = {\n ...merged[key],\n ...set[key],\n };\n }\n }\n return makeStyles(merged)();\n}\n"],"names":["isState"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -253,11 +253,9 @@ let styleElement = null;
253
253
  let styleSheet = null;
254
254
  function ensureStyleSheet() {
255
255
  if (!styleSheet) {
256
- if (!styleElement) {
257
- styleElement = document.createElement("style");
258
- styleElement.id = "styles";
259
- document.head.appendChild(styleElement);
260
- }
256
+ styleElement = document.createElement("style");
257
+ styleElement.id = "styles";
258
+ document.head.appendChild(styleElement);
261
259
  styleSheet = styleElement.sheet;
262
260
  }
263
261
  return styleSheet;
@@ -267,127 +265,108 @@ function camelToKebab(str) {
267
265
  const cached = camelToKebabCache.get(str);
268
266
  if (cached)
269
267
  return cached;
270
- const result = str.replace(/[A-Z]/g, m => "-" + m.toLowerCase());
271
- camelToKebabCache.set(str, result);
272
- return result;
268
+ const res = str.replace(/[A-Z]/g, m => "-" + m.toLowerCase());
269
+ camelToKebabCache.set(str, res);
270
+ return res;
271
+ }
272
+ function resolveValue(v) {
273
+ return typeof v === "function" ? v() : v;
273
274
  }
274
- const atomicClassCache = new Map();
275
+ const PRECEDENCE_LAYERS = 3;
275
276
  let atomicCounter = 0;
276
- function nextAtomicClass() {
277
- return `a-${atomicCounter++}`;
277
+ function encode(n) {
278
+ return n.toString(36);
278
279
  }
279
- function registerAtomicRule(selector, decl) {
280
- const key = `${selector}|${decl}`;
281
- const cached = atomicClassCache.get(key);
282
- if (cached)
283
- return cached;
284
- const className = nextAtomicClass();
285
- atomicClassCache.set(key, className);
286
- ensureStyleSheet().insertRule(`${selector.replace(/&/g, `.${className}`)}{${decl}}`, styleSheet.cssRules.length);
287
- return className;
280
+ function makeClassName(layer) {
281
+ // looks like f1phragk
282
+ return `f${layer}${encode(atomicCounter++).padStart(5, "0")}`;
288
283
  }
289
- const KEYFRAMES_PREFIX = "@keyframes ";
290
- const keyframeCache = new Map();
291
- let keyframeCounter = 0;
292
- function registerKeyframes(name, frames) {
293
- const signature = name + JSON.stringify(frames);
294
- const cached = keyframeCache.get(signature);
284
+ const atomicCache = new Map();
285
+ function getAtomicClasses(selector, decl) {
286
+ const key = `${selector}|${decl}`;
287
+ const cached = atomicCache.get(key);
295
288
  if (cached)
296
289
  return cached;
297
- const unique = `${name}-${keyframeCounter++}`;
298
- const steps = [];
299
- for (const step in frames) {
300
- const decls = stringifyDecls(frames[step] ?? {}, new Map());
301
- steps.push(`${step}{${decls}}`);
302
- }
303
- ensureStyleSheet().insertRule(`@keyframes ${unique}{${steps.join("")}}`, styleSheet.cssRules.length);
304
- keyframeCache.set(signature, unique);
305
- return unique;
306
- }
307
- function stringifyDecls(props, keyframes) {
308
- const out = [];
309
- for (const key in props) {
310
- const raw = props[key];
311
- if (raw == null || typeof raw === "object")
312
- continue;
313
- let val = typeof raw === "function" ? raw() : raw;
314
- if (typeof val === "string") {
315
- for (const [orig, uniq] of keyframes) {
316
- val = val.replaceAll(`$${orig}`, uniq);
317
- }
318
- }
319
- out.push(`${camelToKebab(key)}:${val}`);
290
+ const classes = [];
291
+ const sheet = ensureStyleSheet();
292
+ for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {
293
+ const className = makeClassName(layer);
294
+ classes.push(className);
295
+ const css = selector === "&"
296
+ ? `.${className}{${decl}}`
297
+ : selector.replace(/&/g, `.${className}`) + `{${decl}}`;
298
+ sheet.insertRule(css, sheet.cssRules.length);
320
299
  }
321
- return out.join(";");
300
+ atomicCache.set(key, classes);
301
+ return classes;
322
302
  }
323
- function buildAtomicClasses(rule, keyframes) {
324
- const classes = [];
303
+ function buildAtomicEntries(rule) {
304
+ const entries = [];
325
305
  for (const key in rule) {
326
306
  const val = rule[key];
327
- if (!val)
328
- continue;
329
- if (key[0] === ":" && typeof val === "object") {
330
- const decls = stringifyDecls(val, keyframes);
331
- if (!decls)
332
- continue;
333
- classes.push(registerAtomicRule(`&${key}`, decls));
307
+ if (val == null)
334
308
  continue;
335
- }
336
- if (key.startsWith("@media") && typeof val === "object") {
337
- const decls = stringifyDecls(val, keyframes);
338
- if (!decls)
339
- continue;
340
- const className = nextAtomicClass();
341
- atomicClassCache.set(`${key}|${decls}`, className);
342
- ensureStyleSheet().insertRule(`${key}{.${className}{${decls}}}`, styleSheet.cssRules.length);
343
- classes.push(className);
309
+ if (key.startsWith(":") && typeof val === "object") {
310
+ for (const prop in val) {
311
+ const v = val[prop];
312
+ if (v == null || typeof v === "object")
313
+ continue;
314
+ const decl = `${camelToKebab(prop)}:${resolveValue(v)}`;
315
+ const classes = getAtomicClasses(`&${key}`, decl);
316
+ entries.push({ classes, prop });
317
+ }
344
318
  continue;
345
319
  }
346
320
  if (typeof val !== "object") {
347
- let resolved = typeof val === "function" ? val() : val;
348
- if (typeof resolved === "string") {
349
- for (const [orig, uniq] of keyframes) {
350
- resolved = resolved.replaceAll(`$${orig}`, uniq);
351
- }
352
- }
353
- const decl = `${camelToKebab(key)}:${resolved}`;
354
- classes.push(registerAtomicRule("&", decl));
321
+ const decl = `${camelToKebab(key)}:${resolveValue(val)}`;
322
+ const classes = getAtomicClasses("&", decl);
323
+ entries.push({ classes, prop: key });
355
324
  }
356
325
  }
357
- return classes;
326
+ return entries;
327
+ }
328
+ function mergeClasses(...inputs) {
329
+ const perLayer = [];
330
+ for (let i = 0; i < PRECEDENCE_LAYERS; i++) {
331
+ perLayer[i] = [];
332
+ }
333
+ inputs.forEach((input, index) => {
334
+ if (typeof input !== "string")
335
+ return;
336
+ const layer = Math.min(index, PRECEDENCE_LAYERS - 1);
337
+ const bucket = perLayer[layer];
338
+ if (!bucket)
339
+ return;
340
+ const parts = input.trim().split(/\s+/);
341
+ for (const cls of parts) {
342
+ if (cls)
343
+ bucket.push(cls);
344
+ }
345
+ });
346
+ return perLayer.flat().join(" ");
358
347
  }
359
348
  function makeStyles(styles) {
360
349
  return () => {
361
- const classNames = {};
362
- const keyframesMap = new Map();
363
- for (const key in styles) {
364
- if (!key.startsWith(KEYFRAMES_PREFIX))
365
- continue;
366
- const name = key.slice(KEYFRAMES_PREFIX.length);
367
- const frames = styles[key];
368
- const unique = registerKeyframes(name, frames);
369
- keyframesMap.set(name, unique);
370
- }
350
+ const result = {};
371
351
  for (const slot in styles) {
372
- if (slot.startsWith(KEYFRAMES_PREFIX))
373
- continue;
374
352
  const rule = (styles[slot] ?? {});
375
- const classes = buildAtomicClasses(rule, keyframesMap);
376
- classNames[slot] = classes.join(" ");
353
+ const entries = buildAtomicEntries(rule);
354
+ const classes = entries.map(e => e.classes[0]).join(" ");
355
+ result[slot] = classes;
377
356
  }
378
- return classNames;
357
+ return result;
379
358
  };
380
359
  }
381
- const mergeClasses = (...classes) => classes.filter(Boolean).join(" ");
382
360
  function mergeStyleSets(...sets) {
383
361
  const merged = {};
384
362
  for (const set of sets) {
385
363
  if (!set)
386
364
  continue;
387
365
  for (const key in set) {
388
- const prev = merged[key] ?? {};
389
- const cur = set[key] ?? {};
390
- merged[key] = { ...prev, ...cur };
366
+ merged[key] = {
367
+ ...merged[key],
368
+ ...set[key],
369
+ };
391
370
  }
392
371
  }
393
372
  return makeStyles(merged)();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/state.ts","../src/tags.ts","../src/router.ts","../src/helpers.ts","../src/styles.ts"],"sourcesContent":["export const STATE = Symbol(\"STATE\");\nexport function isState(x) {\n return typeof x === \"object\" && x !== null && x[STATE] === true;\n}\nlet currentEffect = null;\nfunction track(st) {\n if (currentEffect) {\n st.subs.add(currentEffect);\n currentEffect.deps.add(st);\n }\n}\nfunction cleanup(effect) {\n for (const st of effect.deps)\n st.subs.delete(effect);\n effect.deps.clear();\n}\nexport function state(v) {\n const st = {\n [STATE]: true,\n subs: new Set(),\n get val() {\n track(st);\n return v;\n },\n set val(nv) {\n if (nv === v)\n return;\n v = nv;\n for (const fn of Array.from(st.subs)) {\n fn();\n }\n }\n };\n return st;\n}\nexport function derive(fn) {\n const effect = (() => {\n cleanup(effect);\n currentEffect = effect;\n try {\n fn();\n }\n finally {\n currentEffect = null;\n }\n });\n effect.deps = new Set();\n effect();\n return effect;\n}\n","import { derive } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\n// --- Attribute detection (fix for TypeScript narrowing) ---\nfunction isAttrs(x) {\n return (x &&\n typeof x === \"object\" &&\n !(x instanceof Node) &&\n !isState(x) &&\n typeof x !== \"function\" &&\n !Array.isArray(x));\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (attrsOrChild, ...children) => {\n const el = document.createElement(tag);\n // Handle attributes safely\n if (isAttrs(attrsOrChild)) {\n for (const [k, v] of Object.entries(attrsOrChild)) {\n el.setAttribute(k, String(v));\n }\n }\n else if (attrsOrChild != null) {\n // Now TypeScript knows it's ChildLike, not Attrs\n children.unshift(attrsOrChild);\n }\n processChildren(el, children);\n return el;\n };\n }\n});\nfunction processChildren(el, children) {\n for (const child of children.flat()) {\n if (child == null || child === false)\n continue;\n if (typeof child === \"function\") {\n mountReactiveFunction(el, child);\n continue;\n }\n if (isState(child)) {\n mountReactiveState(el, child);\n continue;\n }\n if (child instanceof Node) {\n el.appendChild(child);\n continue;\n }\n el.appendChild(document.createTextNode(String(child)));\n }\n}\nfunction mountReactiveFunction(parent, fn) {\n const marker = document.createTextNode(\"\");\n parent.appendChild(marker);\n let mounted = [];\n const cleanup = () => {\n for (const n of mounted) {\n if (n.parentNode === parent)\n parent.removeChild(n);\n }\n mounted = [];\n };\n derive(() => {\n cleanup();\n const value = fn();\n const values = Array.isArray(value) ? value.flat() : [value];\n for (const v of values) {\n if (v == null || v === false)\n continue;\n if (typeof v === \"function\") {\n mountReactiveFunction(parent, v);\n continue;\n }\n if (isState(v)) {\n const node = document.createTextNode(String(v.val));\n parent.insertBefore(node, marker);\n v.subs.add(() => {\n const next = String(v.val);\n if (node.data !== next)\n node.data = next;\n });\n mounted.push(node);\n continue;\n }\n if (v instanceof Node) {\n parent.insertBefore(v, marker);\n mounted.push(v);\n continue;\n }\n const text = document.createTextNode(String(v));\n parent.insertBefore(text, marker);\n mounted.push(text);\n }\n });\n}\nfunction mountReactiveState(parent, st) {\n const node = document.createTextNode(String(st.val));\n parent.appendChild(node);\n st.subs.add(() => {\n const next = String(st.val);\n if (node.data !== next)\n node.data = next;\n });\n}\n","export function router(routes) {\n const patterns = [];\n let wildcard = null;\n for (const path of Object.keys(routes)) {\n const handler = routes[path];\n if (!handler)\n continue;\n if (path === \"*\") {\n wildcard = handler;\n continue;\n }\n const keys = [];\n const pattern = path.replace(/:[^/]+/g, (m) => {\n keys.push(m.slice(1));\n return \"([^/]+)\";\n });\n patterns.push({\n regex: new RegExp(`^${pattern}$`),\n keys,\n handler\n });\n }\n let currentEl = null;\n let currentPath = \"\";\n function parseQuery(search) {\n const params = {};\n if (!search)\n return params;\n for (const [k, v] of new URLSearchParams(search))\n params[k] = v;\n return params;\n }\n function matchRoute(pathname) {\n for (const { regex, keys, handler } of patterns) {\n const match = pathname.match(regex);\n if (!match)\n continue;\n const params = {};\n keys.forEach((key, i) => {\n params[key] = decodeURIComponent(match[i + 1]);\n });\n Object.assign(params, parseQuery(location.search));\n return handler(params);\n }\n if (wildcard)\n return wildcard({});\n throw new Error(`No route matches \"${pathname}\"`);\n }\n function render() {\n const newFullPath = location.pathname + location.search;\n if (newFullPath === currentPath)\n return;\n currentPath = newFullPath;\n const next = matchRoute(location.pathname);\n if (currentEl && currentEl.parentNode) {\n document.body.removeChild(currentEl);\n }\n document.body.appendChild(next);\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n return {\n render,\n push(path) {\n history.pushState(null, \"\", path);\n render();\n },\n replace(path) {\n history.replaceState(null, \"\", path);\n render();\n },\n back: () => history.back()\n };\n}\n","export function add(component) {\n if (typeof component === \"function\") {\n const el = component();\n if (!(el instanceof HTMLElement)) {\n throw new Error(\"Component function must return an HTMLElement\");\n }\n document.body.appendChild(el);\n return;\n }\n if (\"render\" in component && typeof component.render === \"function\") {\n component.render();\n return;\n }\n throw new Error(\"Invalid component passed to add()\");\n}\n","let styleElement = null;\nlet styleSheet = null;\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n }\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\nconst camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const result = str.replace(/[A-Z]/g, m => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, result);\n return result;\n}\nconst atomicClassCache = new Map();\nlet atomicCounter = 0;\nfunction nextAtomicClass() {\n return `a-${atomicCounter++}`;\n}\nfunction registerAtomicRule(selector, decl) {\n const key = `${selector}|${decl}`;\n const cached = atomicClassCache.get(key);\n if (cached)\n return cached;\n const className = nextAtomicClass();\n atomicClassCache.set(key, className);\n ensureStyleSheet().insertRule(`${selector.replace(/&/g, `.${className}`)}{${decl}}`, styleSheet.cssRules.length);\n return className;\n}\nconst KEYFRAMES_PREFIX = \"@keyframes \";\nconst keyframeCache = new Map();\nlet keyframeCounter = 0;\nfunction registerKeyframes(name, frames) {\n const signature = name + JSON.stringify(frames);\n const cached = keyframeCache.get(signature);\n if (cached)\n return cached;\n const unique = `${name}-${keyframeCounter++}`;\n const steps = [];\n for (const step in frames) {\n const decls = stringifyDecls(frames[step] ?? {}, new Map());\n steps.push(`${step}{${decls}}`);\n }\n ensureStyleSheet().insertRule(`@keyframes ${unique}{${steps.join(\"\")}}`, styleSheet.cssRules.length);\n keyframeCache.set(signature, unique);\n return unique;\n}\nfunction stringifyDecls(props, keyframes) {\n const out = [];\n for (const key in props) {\n const raw = props[key];\n if (raw == null || typeof raw === \"object\")\n continue;\n let val = typeof raw === \"function\" ? raw() : raw;\n if (typeof val === \"string\") {\n for (const [orig, uniq] of keyframes) {\n val = val.replaceAll(`$${orig}`, uniq);\n }\n }\n out.push(`${camelToKebab(key)}:${val}`);\n }\n return out.join(\";\");\n}\nfunction buildAtomicClasses(rule, keyframes) {\n const classes = [];\n for (const key in rule) {\n const val = rule[key];\n if (!val)\n continue;\n if (key[0] === \":\" && typeof val === \"object\") {\n const decls = stringifyDecls(val, keyframes);\n if (!decls)\n continue;\n classes.push(registerAtomicRule(`&${key}`, decls));\n continue;\n }\n if (key.startsWith(\"@media\") && typeof val === \"object\") {\n const decls = stringifyDecls(val, keyframes);\n if (!decls)\n continue;\n const className = nextAtomicClass();\n atomicClassCache.set(`${key}|${decls}`, className);\n ensureStyleSheet().insertRule(`${key}{.${className}{${decls}}}`, styleSheet.cssRules.length);\n classes.push(className);\n continue;\n }\n if (typeof val !== \"object\") {\n let resolved = typeof val === \"function\" ? val() : val;\n if (typeof resolved === \"string\") {\n for (const [orig, uniq] of keyframes) {\n resolved = resolved.replaceAll(`$${orig}`, uniq);\n }\n }\n const decl = `${camelToKebab(key)}:${resolved}`;\n classes.push(registerAtomicRule(\"&\", decl));\n }\n }\n return classes;\n}\nexport function makeStyles(styles) {\n return () => {\n const classNames = {};\n const keyframesMap = new Map();\n for (const key in styles) {\n if (!key.startsWith(KEYFRAMES_PREFIX))\n continue;\n const name = key.slice(KEYFRAMES_PREFIX.length);\n const frames = styles[key];\n const unique = registerKeyframes(name, frames);\n keyframesMap.set(name, unique);\n }\n for (const slot in styles) {\n if (slot.startsWith(KEYFRAMES_PREFIX))\n continue;\n const rule = (styles[slot] ?? {});\n const classes = buildAtomicClasses(rule, keyframesMap);\n classNames[slot] = classes.join(\" \");\n }\n return classNames;\n };\n}\nexport const mergeClasses = (...classes) => classes.filter(Boolean).join(\" \");\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n const prev = merged[key] ?? {};\n const cur = set[key] ?? {};\n merged[key] = { ...prev, ...cur };\n }\n }\n return makeStyles(merged)();\n}\n"],"names":["isState"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/state.ts","../src/tags.ts","../src/router.ts","../src/helpers.ts","../src/styles.ts"],"sourcesContent":["export const STATE = Symbol(\"STATE\");\nexport function isState(x) {\n return typeof x === \"object\" && x !== null && x[STATE] === true;\n}\nlet currentEffect = null;\nfunction track(st) {\n if (currentEffect) {\n st.subs.add(currentEffect);\n currentEffect.deps.add(st);\n }\n}\nfunction cleanup(effect) {\n for (const st of effect.deps)\n st.subs.delete(effect);\n effect.deps.clear();\n}\nexport function state(v) {\n const st = {\n [STATE]: true,\n subs: new Set(),\n get val() {\n track(st);\n return v;\n },\n set val(nv) {\n if (nv === v)\n return;\n v = nv;\n for (const fn of Array.from(st.subs)) {\n fn();\n }\n }\n };\n return st;\n}\nexport function derive(fn) {\n const effect = (() => {\n cleanup(effect);\n currentEffect = effect;\n try {\n fn();\n }\n finally {\n currentEffect = null;\n }\n });\n effect.deps = new Set();\n effect();\n return effect;\n}\n","import { derive } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\n// --- Attribute detection (fix for TypeScript narrowing) ---\nfunction isAttrs(x) {\n return (x &&\n typeof x === \"object\" &&\n !(x instanceof Node) &&\n !isState(x) &&\n typeof x !== \"function\" &&\n !Array.isArray(x));\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (attrsOrChild, ...children) => {\n const el = document.createElement(tag);\n // Handle attributes safely\n if (isAttrs(attrsOrChild)) {\n for (const [k, v] of Object.entries(attrsOrChild)) {\n el.setAttribute(k, String(v));\n }\n }\n else if (attrsOrChild != null) {\n // Now TypeScript knows it's ChildLike, not Attrs\n children.unshift(attrsOrChild);\n }\n processChildren(el, children);\n return el;\n };\n }\n});\nfunction processChildren(el, children) {\n for (const child of children.flat()) {\n if (child == null || child === false)\n continue;\n if (typeof child === \"function\") {\n mountReactiveFunction(el, child);\n continue;\n }\n if (isState(child)) {\n mountReactiveState(el, child);\n continue;\n }\n if (child instanceof Node) {\n el.appendChild(child);\n continue;\n }\n el.appendChild(document.createTextNode(String(child)));\n }\n}\nfunction mountReactiveFunction(parent, fn) {\n const marker = document.createTextNode(\"\");\n parent.appendChild(marker);\n let mounted = [];\n const cleanup = () => {\n for (const n of mounted) {\n if (n.parentNode === parent)\n parent.removeChild(n);\n }\n mounted = [];\n };\n derive(() => {\n cleanup();\n const value = fn();\n const values = Array.isArray(value) ? value.flat() : [value];\n for (const v of values) {\n if (v == null || v === false)\n continue;\n if (typeof v === \"function\") {\n mountReactiveFunction(parent, v);\n continue;\n }\n if (isState(v)) {\n const node = document.createTextNode(String(v.val));\n parent.insertBefore(node, marker);\n v.subs.add(() => {\n const next = String(v.val);\n if (node.data !== next)\n node.data = next;\n });\n mounted.push(node);\n continue;\n }\n if (v instanceof Node) {\n parent.insertBefore(v, marker);\n mounted.push(v);\n continue;\n }\n const text = document.createTextNode(String(v));\n parent.insertBefore(text, marker);\n mounted.push(text);\n }\n });\n}\nfunction mountReactiveState(parent, st) {\n const node = document.createTextNode(String(st.val));\n parent.appendChild(node);\n st.subs.add(() => {\n const next = String(st.val);\n if (node.data !== next)\n node.data = next;\n });\n}\n","export function router(routes) {\n const patterns = [];\n let wildcard = null;\n for (const path of Object.keys(routes)) {\n const handler = routes[path];\n if (!handler)\n continue;\n if (path === \"*\") {\n wildcard = handler;\n continue;\n }\n const keys = [];\n const pattern = path.replace(/:[^/]+/g, (m) => {\n keys.push(m.slice(1));\n return \"([^/]+)\";\n });\n patterns.push({\n regex: new RegExp(`^${pattern}$`),\n keys,\n handler\n });\n }\n let currentEl = null;\n let currentPath = \"\";\n function parseQuery(search) {\n const params = {};\n if (!search)\n return params;\n for (const [k, v] of new URLSearchParams(search))\n params[k] = v;\n return params;\n }\n function matchRoute(pathname) {\n for (const { regex, keys, handler } of patterns) {\n const match = pathname.match(regex);\n if (!match)\n continue;\n const params = {};\n keys.forEach((key, i) => {\n params[key] = decodeURIComponent(match[i + 1]);\n });\n Object.assign(params, parseQuery(location.search));\n return handler(params);\n }\n if (wildcard)\n return wildcard({});\n throw new Error(`No route matches \"${pathname}\"`);\n }\n function render() {\n const newFullPath = location.pathname + location.search;\n if (newFullPath === currentPath)\n return;\n currentPath = newFullPath;\n const next = matchRoute(location.pathname);\n if (currentEl && currentEl.parentNode) {\n document.body.removeChild(currentEl);\n }\n document.body.appendChild(next);\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n return {\n render,\n push(path) {\n history.pushState(null, \"\", path);\n render();\n },\n replace(path) {\n history.replaceState(null, \"\", path);\n render();\n },\n back: () => history.back()\n };\n}\n","export function add(component) {\n if (typeof component === \"function\") {\n const el = component();\n if (!(el instanceof HTMLElement)) {\n throw new Error(\"Component function must return an HTMLElement\");\n }\n document.body.appendChild(el);\n return;\n }\n if (\"render\" in component && typeof component.render === \"function\") {\n component.render();\n return;\n }\n throw new Error(\"Invalid component passed to add()\");\n}\n","let styleElement = null;\nlet styleSheet = null;\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\nconst camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const res = str.replace(/[A-Z]/g, m => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, res);\n return res;\n}\nfunction resolveValue(v) {\n return typeof v === \"function\" ? v() : v;\n}\nconst PRECEDENCE_LAYERS = 3;\nlet atomicCounter = 0;\nfunction encode(n) {\n return n.toString(36);\n}\nfunction makeClassName(layer) {\n // looks like f1phragk\n return `f${layer}${encode(atomicCounter++).padStart(5, \"0\")}`;\n}\nconst atomicCache = new Map();\nfunction getAtomicClasses(selector, decl) {\n const key = `${selector}|${decl}`;\n const cached = atomicCache.get(key);\n if (cached)\n return cached;\n const classes = [];\n const sheet = ensureStyleSheet();\n for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {\n const className = makeClassName(layer);\n classes.push(className);\n const css = selector === \"&\"\n ? `.${className}{${decl}}`\n : selector.replace(/&/g, `.${className}`) + `{${decl}}`;\n sheet.insertRule(css, sheet.cssRules.length);\n }\n atomicCache.set(key, classes);\n return classes;\n}\nfunction buildAtomicEntries(rule) {\n const entries = [];\n for (const key in rule) {\n const val = rule[key];\n if (val == null)\n continue;\n if (key.startsWith(\":\") && typeof val === \"object\") {\n for (const prop in val) {\n const v = val[prop];\n if (v == null || typeof v === \"object\")\n continue;\n const decl = `${camelToKebab(prop)}:${resolveValue(v)}`;\n const classes = getAtomicClasses(`&${key}`, decl);\n entries.push({ classes, prop });\n }\n continue;\n }\n if (typeof val !== \"object\") {\n const decl = `${camelToKebab(key)}:${resolveValue(val)}`;\n const classes = getAtomicClasses(\"&\", decl);\n entries.push({ classes, prop: key });\n }\n }\n return entries;\n}\nexport function mergeClasses(...inputs) {\n const perLayer = [];\n for (let i = 0; i < PRECEDENCE_LAYERS; i++) {\n perLayer[i] = [];\n }\n inputs.forEach((input, index) => {\n if (typeof input !== \"string\")\n return;\n const layer = Math.min(index, PRECEDENCE_LAYERS - 1);\n const bucket = perLayer[layer];\n if (!bucket)\n return;\n const parts = input.trim().split(/\\s+/);\n for (const cls of parts) {\n if (cls)\n bucket.push(cls);\n }\n });\n return perLayer.flat().join(\" \");\n}\nexport function makeStyles(styles) {\n return () => {\n const result = {};\n for (const slot in styles) {\n const rule = (styles[slot] ?? {});\n const entries = buildAtomicEntries(rule);\n const classes = entries.map(e => e.classes[0]).join(\" \");\n result[slot] = classes;\n }\n return result;\n };\n}\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n merged[key] = {\n ...merged[key],\n ...set[key],\n };\n }\n }\n return makeStyles(merged)();\n}\n"],"names":["isState"],"mappings":";;;;AAAY,MAAC,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE;AAC9B,SAASA,SAAO,CAAC,CAAC,EAAE;AAC3B,IAAI,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AACpE,CAAC;AACD,IAAI,aAAa,GAAG,IAAI,CAAC;AACzB,SAAS,KAAK,CAAC,EAAE,EAAE;AACnB,IAAI,IAAI,aAAa,EAAE;AACvB,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACnC,QAAQ,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACnC,KAAK;AACL,CAAC;AACD,SAAS,OAAO,CAAC,MAAM,EAAE;AACzB,IAAI,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI;AAChC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AACM,SAAS,KAAK,CAAC,CAAC,EAAE;AACzB,IAAI,MAAM,EAAE,GAAG;AACf,QAAQ,CAAC,KAAK,GAAG,IAAI;AACrB,QAAQ,IAAI,EAAE,IAAI,GAAG,EAAE;AACvB,QAAQ,IAAI,GAAG,GAAG;AAClB,YAAY,KAAK,CAAC,EAAE,CAAC,CAAC;AACtB,YAAY,OAAO,CAAC,CAAC;AACrB,SAAS;AACT,QAAQ,IAAI,GAAG,CAAC,EAAE,EAAE;AACpB,YAAY,IAAI,EAAE,KAAK,CAAC;AACxB,gBAAgB,OAAO;AACvB,YAAY,CAAC,GAAG,EAAE,CAAC;AACnB,YAAY,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAClD,gBAAgB,EAAE,EAAE,CAAC;AACrB,aAAa;AACb,SAAS;AACT,KAAK,CAAC;AACN,IAAI,OAAO,EAAE,CAAC;AACd,CAAC;AACM,SAAS,MAAM,CAAC,EAAE,EAAE;AAC3B,IAAI,MAAM,MAAM,IAAI,MAAM;AAC1B,QAAQ,OAAO,CAAC,MAAM,CAAC,CAAC;AACxB,QAAQ,aAAa,GAAG,MAAM,CAAC;AAC/B,QAAQ,IAAI;AACZ,YAAY,EAAE,EAAE,CAAC;AACjB,SAAS;AACT,gBAAgB;AAChB,YAAY,aAAa,GAAG,IAAI,CAAC;AACjC,SAAS;AACT,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,IAAI,MAAM,EAAE,CAAC;AACb,IAAI,OAAO,MAAM,CAAC;AAClB;;AChDA,SAAS,OAAO,CAAC,CAAC,EAAE;AACpB,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACnE,CAAC;AACD;AACA,SAAS,OAAO,CAAC,CAAC,EAAE;AACpB,IAAI,QAAQ,CAAC;AACb,QAAQ,OAAO,CAAC,KAAK,QAAQ;AAC7B,QAAQ,EAAE,CAAC,YAAY,IAAI,CAAC;AAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACnB,QAAQ,OAAO,CAAC,KAAK,UAAU;AAC/B,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC3B,CAAC;AACW,MAAC,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE;AAClC,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE;AAChB,QAAQ,OAAO,CAAC,YAAY,EAAE,GAAG,QAAQ,KAAK;AAC9C,YAAY,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACnD;AACA,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;AACvC,gBAAgB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACnE,oBAAoB,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,iBAAiB;AACjB,aAAa;AACb,iBAAiB,IAAI,YAAY,IAAI,IAAI,EAAE;AAC3C;AACA,gBAAgB,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAC/C,aAAa;AACb,YAAY,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC1C,YAAY,OAAO,EAAE,CAAC;AACtB,SAAS,CAAC;AACV,KAAK;AACL,CAAC,EAAE;AACH,SAAS,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAE;AACvC,IAAI,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE;AACzC,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK;AAC5C,YAAY,SAAS;AACrB,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;AACzC,YAAY,qBAAqB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC7C,YAAY,SAAS;AACrB,SAAS;AACT,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AAC5B,YAAY,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC1C,YAAY,SAAS;AACrB,SAAS;AACT,QAAQ,IAAI,KAAK,YAAY,IAAI,EAAE;AACnC,YAAY,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAClC,YAAY,SAAS;AACrB,SAAS;AACT,QAAQ,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/D,KAAK;AACL,CAAC;AACD,SAAS,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE;AAC3C,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AAC/C,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/B,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB,IAAI,MAAM,OAAO,GAAG,MAAM;AAC1B,QAAQ,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;AACjC,YAAY,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM;AACvC,gBAAgB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACtC,SAAS;AACT,QAAQ,OAAO,GAAG,EAAE,CAAC;AACrB,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,MAAM;AACjB,QAAQ,OAAO,EAAE,CAAC;AAClB,QAAQ,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;AAC3B,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;AACrE,QAAQ,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AAChC,YAAY,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK;AACxC,gBAAgB,SAAS;AACzB,YAAY,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;AACzC,gBAAgB,qBAAqB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACjD,gBAAgB,SAAS;AACzB,aAAa;AACb,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;AAC5B,gBAAgB,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,gBAAgB,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClD,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;AACjC,oBAAoB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/C,oBAAoB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;AAC1C,wBAAwB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzC,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,gBAAgB,SAAS;AACzB,aAAa;AACb,YAAY,IAAI,CAAC,YAAY,IAAI,EAAE;AACnC,gBAAgB,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/C,gBAAgB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAgB,SAAS;AACzB,aAAa;AACb,YAAY,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,YAAY,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9C,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,SAAS;AACT,KAAK,CAAC,CAAC;AACP,CAAC;AACD,SAAS,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE;AACxC,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7B,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;AACtB,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACpC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;AAC9B,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B,KAAK,CAAC,CAAC;AACP;;ACvGO,SAAS,MAAM,CAAC,MAAM,EAAE;AAC/B,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC;AACxB,IAAI,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC5C,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC,QAAQ,IAAI,CAAC,OAAO;AACpB,YAAY,SAAS;AACrB,QAAQ,IAAI,IAAI,KAAK,GAAG,EAAE;AAC1B,YAAY,QAAQ,GAAG,OAAO,CAAC;AAC/B,YAAY,SAAS;AACrB,SAAS;AACT,QAAQ,MAAM,IAAI,GAAG,EAAE,CAAC;AACxB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK;AACvD,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,YAAY,OAAO,SAAS,CAAC;AAC7B,SAAS,CAAC,CAAC;AACX,QAAQ,QAAQ,CAAC,IAAI,CAAC;AACtB,YAAY,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7C,YAAY,IAAI;AAChB,YAAY,OAAO;AACnB,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC;AACzB,IAAI,IAAI,WAAW,GAAG,EAAE,CAAC;AACzB,IAAI,SAAS,UAAU,CAAC,MAAM,EAAE;AAChC,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;AAC1B,QAAQ,IAAI,CAAC,MAAM;AACnB,YAAY,OAAO,MAAM,CAAC;AAC1B,QAAQ,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC;AACxD,YAAY,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1B,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,SAAS,UAAU,CAAC,QAAQ,EAAE;AAClC,QAAQ,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,QAAQ,EAAE;AACzD,YAAY,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChD,YAAY,IAAI,CAAC,KAAK;AACtB,gBAAgB,SAAS;AACzB,YAAY,MAAM,MAAM,GAAG,EAAE,CAAC;AAC9B,YAAY,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AACrC,gBAAgB,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/D,aAAa,CAAC,CAAC;AACf,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/D,YAAY,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACnC,SAAS;AACT,QAAQ,IAAI,QAAQ;AACpB,YAAY,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,KAAK;AACL,IAAI,SAAS,MAAM,GAAG;AACtB,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;AAChE,QAAQ,IAAI,WAAW,KAAK,WAAW;AACvC,YAAY,OAAO;AACnB,QAAQ,WAAW,GAAG,WAAW,CAAC;AAClC,QAAQ,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnD,QAAQ,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE;AAC/C,YAAY,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACjD,SAAS;AACT,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACxC,QAAQ,SAAS,GAAG,IAAI,CAAC;AACzB,KAAK;AACL,IAAI,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAChD,IAAI,MAAM,EAAE,CAAC;AACb,IAAI,OAAO;AACX,QAAQ,MAAM;AACd,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,YAAY,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9C,YAAY,MAAM,EAAE,CAAC;AACrB,SAAS;AACT,QAAQ,OAAO,CAAC,IAAI,EAAE;AACtB,YAAY,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACjD,YAAY,MAAM,EAAE,CAAC;AACrB,SAAS;AACT,QAAQ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE;AAClC,KAAK,CAAC;AACN;;AC1EO,SAAS,GAAG,CAAC,SAAS,EAAE;AAC/B,IAAI,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;AACzC,QAAQ,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;AAC/B,QAAQ,IAAI,EAAE,EAAE,YAAY,WAAW,CAAC,EAAE;AAC1C,YAAY,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;AAC7E,SAAS;AACT,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACtC,QAAQ,OAAO;AACf,KAAK;AACL,IAAI,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,UAAU,EAAE;AACzE,QAAQ,SAAS,CAAC,MAAM,EAAE,CAAC;AAC3B,QAAQ,OAAO;AACf,KAAK;AACL,IAAI,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACzD;;ACdA,IAAI,YAAY,GAAG,IAAI,CAAC;AACxB,IAAI,UAAU,GAAG,IAAI,CAAC;AACtB,SAAS,gBAAgB,GAAG;AAC5B,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,QAAQ,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACvD,QAAQ,YAAY,CAAC,EAAE,GAAG,QAAQ,CAAC;AACnC,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAChD,QAAQ,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC;AACxC,KAAK;AACL,IAAI,OAAO,UAAU,CAAC;AACtB,CAAC;AACD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;AACpC,SAAS,YAAY,CAAC,GAAG,EAAE;AAC3B,IAAI,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C,IAAI,IAAI,MAAM;AACd,QAAQ,OAAO,MAAM,CAAC;AACtB,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAClE,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpC,IAAI,OAAO,GAAG,CAAC;AACf,CAAC;AACD,SAAS,YAAY,CAAC,CAAC,EAAE;AACzB,IAAI,OAAO,OAAO,CAAC,KAAK,UAAU,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AACD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,SAAS,MAAM,CAAC,CAAC,EAAE;AACnB,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AACD,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B;AACA,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AACD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;AAC9B,SAAS,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE;AAC1C,IAAI,MAAM,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACtC,IAAI,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC,IAAI,IAAI,MAAM;AACd,QAAQ,OAAO,MAAM,CAAC;AACtB,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;AACrC,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,iBAAiB,EAAE,KAAK,EAAE,EAAE;AAC5D,QAAQ,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAQ,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAChC,QAAQ,MAAM,GAAG,GAAG,QAAQ,KAAK,GAAG;AACpC,cAAc,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACtC,cAAc,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACpE,QAAQ,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrD,KAAK;AACL,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAClC,IAAI,OAAO,OAAO,CAAC;AACnB,CAAC;AACD,SAAS,kBAAkB,CAAC,IAAI,EAAE;AAClC,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AAC5B,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAQ,IAAI,GAAG,IAAI,IAAI;AACvB,YAAY,SAAS;AACrB,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC5D,YAAY,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;AACpC,gBAAgB,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,gBAAgB,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;AACtD,oBAAoB,SAAS;AAC7B,gBAAgB,MAAM,IAAI,GAAG,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,gBAAgB,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAClE,gBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,aAAa;AACb,YAAY,SAAS;AACrB,SAAS;AACT,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AACrC,YAAY,MAAM,IAAI,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,YAAY,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxD,YAAY,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AACjD,SAAS;AACT,KAAK;AACL,IAAI,OAAO,OAAO,CAAC;AACnB,CAAC;AACM,SAAS,YAAY,CAAC,GAAG,MAAM,EAAE;AACxC,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,EAAE,CAAC,EAAE,EAAE;AAChD,QAAQ,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACzB,KAAK;AACL,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AACrC,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;AACrC,YAAY,OAAO;AACnB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;AAC7D,QAAQ,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,QAAQ,IAAI,CAAC,MAAM;AACnB,YAAY,OAAO;AACnB,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChD,QAAQ,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AACjC,YAAY,IAAI,GAAG;AACnB,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,SAAS;AACT,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AACM,SAAS,UAAU,CAAC,MAAM,EAAE;AACnC,IAAI,OAAO,MAAM;AACjB,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;AAC1B,QAAQ,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AACnC,YAAY,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C,YAAY,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACrD,YAAY,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrE,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AACnC,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK,CAAC;AACN,CAAC;AACM,SAAS,cAAc,CAAC,GAAG,IAAI,EAAE;AACxC,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AAC5B,QAAQ,IAAI,CAAC,GAAG;AAChB,YAAY,SAAS;AACrB,QAAQ,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;AAC/B,YAAY,MAAM,CAAC,GAAG,CAAC,GAAG;AAC1B,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC;AAC9B,gBAAgB,GAAG,GAAG,CAAC,GAAG,CAAC;AAC3B,aAAa,CAAC;AACd,SAAS;AACT,KAAK;AACL,IAAI,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;AAChC;;;;;;;;;;;;;"}
package/dist/index.min.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).MiniUI={})}(this,function(t){"use strict";const n=Symbol("STATE");let e=null;function o(t){const n=()=>{!function(t){for(const n of t.deps)n.subs.delete(t);t.deps.clear()}(n),e=n;try{t()}finally{e=null}};return n.deps=new Set,n(),n}function r(t){return t&&"object"==typeof t&&"subs"in t&&"val"in t}const s=new Proxy({},{get:(t,n)=>(t,...e)=>{const o=document.createElement(n);if(!(s=t)||"object"!=typeof s||s instanceof Node||r(s)||"function"==typeof s||Array.isArray(s))null!=t&&e.unshift(t);else for(const[n,e]of Object.entries(t))o.setAttribute(n,String(e));var s;return function(t,n){for(const e of n.flat())null!=e&&!1!==e&&("function"!=typeof e?r(e)?i(t,e):e instanceof Node?t.appendChild(e):t.appendChild(document.createTextNode(String(e))):c(t,e))}(o,e),o}});function c(t,n){const e=document.createTextNode("");t.appendChild(e);let s=[];o(()=>{(()=>{for(const n of s)n.parentNode===t&&t.removeChild(n);s=[]})();const o=n(),i=Array.isArray(o)?o.flat():[o];for(const n of i){if(null==n||!1===n)continue;if("function"==typeof n){c(t,n);continue}if(r(n)){const o=document.createTextNode(String(n.val));t.insertBefore(o,e),n.subs.add(()=>{const t=String(n.val);o.data!==t&&(o.data=t)}),s.push(o);continue}if(n instanceof Node){t.insertBefore(n,e),s.push(n);continue}const o=document.createTextNode(String(n));t.insertBefore(o,e),s.push(o)}})}function i(t,n){const e=document.createTextNode(String(n.val));t.appendChild(e),n.subs.add(()=>{const t=String(n.val);e.data!==t&&(e.data=t)})}let f=null,u=null;function a(){return u||(f||(f=document.createElement("style"),f.id="styles",document.head.appendChild(f)),u=f.sheet),u}const l=new Map;function d(t){const n=l.get(t);if(n)return n;const e=t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase());return l.set(t,e),e}const p=new Map;let h=0;function y(){return"a-"+h++}function m(t,n){const e=`${t}|${n}`,o=p.get(e);if(o)return o;const r=y();return p.set(e,r),a().insertRule(`${t.replace(/&/g,`.${r}`)}{${n}}`,u.cssRules.length),r}const g="@keyframes ",b=new Map;let $=0;function S(t,n){const e=t+JSON.stringify(n),o=b.get(e);if(o)return o;const r=`${t}-${$++}`,s=[];for(const t in n){const e=w(n[t]??{},new Map);s.push(`${t}{${e}}`)}return a().insertRule(`@keyframes ${r}{${s.join("")}}`,u.cssRules.length),b.set(e,r),r}function w(t,n){const e=[];for(const o in t){const r=t[o];if(null==r||"object"==typeof r)continue;let s="function"==typeof r?r():r;if("string"==typeof s)for(const[t,e]of n)s=s.replaceAll(`$${t}`,e);e.push(`${d(o)}:${s}`)}return e.join(";")}function j(t,n){const e=[];for(const o in t){const r=t[o];if(r){if(":"===o[0]&&"object"==typeof r){const t=w(r,n);if(!t)continue;e.push(m(`&${o}`,t));continue}if(o.startsWith("@media")&&"object"==typeof r){const t=w(r,n);if(!t)continue;const s=y();p.set(`${o}|${t}`,s),a().insertRule(`${o}{.${s}{${t}}}`,u.cssRules.length),e.push(s);continue}if("object"!=typeof r){let t="function"==typeof r?r():r;if("string"==typeof t)for(const[e,o]of n)t=t.replaceAll(`$${e}`,o);const s=`${d(o)}:${t}`;e.push(m("&",s))}}}return e}function v(t){return()=>{const n={},e=new Map;for(const n in t){if(!n.startsWith(g))continue;const o=n.slice(11),r=S(o,t[n]);e.set(o,r)}for(const o in t){if(o.startsWith(g))continue;const r=j(t[o]??{},e);n[o]=r.join(" ")}return n}}t.STATE=n,t.add=function(t){if("function"==typeof t){const n=t();if(!(n instanceof HTMLElement))throw new Error("Component function must return an HTMLElement");return void document.body.appendChild(n)}if(!("render"in t)||"function"!=typeof t.render)throw new Error("Invalid component passed to add()");t.render()},t.derive=o,t.isState=function(t){return"object"==typeof t&&null!==t&&!0===t[n]},t.makeStyles=v,t.mergeClasses=(...t)=>t.filter(Boolean).join(" "),t.mergeStyleSets=function(...t){const n={};for(const e of t)if(e)for(const t in e){const o=n[t]??{},r=e[t]??{};n[t]={...o,...r}}return v(n)()},t.router=function(t){const n=[];let e=null;for(const o of Object.keys(t)){const r=t[o];if(!r)continue;if("*"===o){e=r;continue}const s=[],c=o.replace(/:[^/]+/g,t=>(s.push(t.slice(1)),"([^/]+)"));n.push({regex:new RegExp(`^${c}$`),keys:s,handler:r})}let o=null,r="";function s(t){const n={};if(!t)return n;for(const[e,o]of new URLSearchParams(t))n[e]=o;return n}function c(){const t=location.pathname+location.search;if(t===r)return;r=t;const c=function(t){for(const{regex:e,keys:o,handler:r}of n){const n=t.match(e);if(!n)continue;const c={};return o.forEach((t,e)=>{c[t]=decodeURIComponent(n[e+1])}),Object.assign(c,s(location.search)),r(c)}if(e)return e({});throw new Error(`No route matches "${t}"`)}(location.pathname);o&&o.parentNode&&document.body.removeChild(o),document.body.appendChild(c),o=c}return window.addEventListener("popstate",c),c(),{render:c,push(t){history.pushState(null,"",t),c()},replace(t){history.replaceState(null,"",t),c()},back:()=>history.back()}},t.state=function(t){const o={[n]:!0,subs:new Set,get val(){return function(t){e&&(t.subs.add(e),e.deps.add(t))}(o),t},set val(n){if(n!==t){t=n;for(const t of Array.from(o.subs))t()}}};return o},t.tags=s,Object.defineProperty(t,"__esModule",{value:!0})});
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).MiniUI={})}(this,function(t){"use strict";const e=Symbol("STATE");let n=null;function o(t){const e=()=>{!function(t){for(const e of t.deps)e.subs.delete(t);t.deps.clear()}(e),n=e;try{t()}finally{n=null}};return e.deps=new Set,e(),e}function r(t){return t&&"object"==typeof t&&"subs"in t&&"val"in t}const s=new Proxy({},{get:(t,e)=>(t,...n)=>{const o=document.createElement(e);if(!(s=t)||"object"!=typeof s||s instanceof Node||r(s)||"function"==typeof s||Array.isArray(s))null!=t&&n.unshift(t);else for(const[e,n]of Object.entries(t))o.setAttribute(e,String(n));var s;return function(t,e){for(const n of e.flat())null!=n&&!1!==n&&("function"!=typeof n?r(n)?i(t,n):n instanceof Node?t.appendChild(n):t.appendChild(document.createTextNode(String(n))):c(t,n))}(o,n),o}});function c(t,e){const n=document.createTextNode("");t.appendChild(n);let s=[];o(()=>{(()=>{for(const e of s)e.parentNode===t&&t.removeChild(e);s=[]})();const o=e(),i=Array.isArray(o)?o.flat():[o];for(const e of i){if(null==e||!1===e)continue;if("function"==typeof e){c(t,e);continue}if(r(e)){const o=document.createTextNode(String(e.val));t.insertBefore(o,n),e.subs.add(()=>{const t=String(e.val);o.data!==t&&(o.data=t)}),s.push(o);continue}if(e instanceof Node){t.insertBefore(e,n),s.push(e);continue}const o=document.createTextNode(String(e));t.insertBefore(o,n),s.push(o)}})}function i(t,e){const n=document.createTextNode(String(e.val));t.appendChild(n),e.subs.add(()=>{const t=String(e.val);n.data!==t&&(n.data=t)})}let f=null,u=null;const a=new Map;function l(t){const e=a.get(t);if(e)return e;const n=t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase());return a.set(t,n),n}function d(t){return"function"==typeof t?t():t}let p=0;function h(t){return`f${t}${(e=p++,e.toString(36)).padStart(5,"0")}`;var e}const y=new Map;function m(t,e){const n=`${t}|${e}`,o=y.get(n);if(o)return o;const r=[],s=(u||(f=document.createElement("style"),f.id="styles",document.head.appendChild(f),u=f.sheet),u);for(let n=0;n<3;n++){const o=h(n);r.push(o);const c="&"===t?`.${o}{${e}}`:t.replace(/&/g,`.${o}`)+`{${e}}`;s.insertRule(c,s.cssRules.length)}return y.set(n,r),r}function b(t){const e=[];for(const n in t){const o=t[n];if(null!=o)if(n.startsWith(":")&&"object"==typeof o)for(const t in o){const r=o[t];if(null==r||"object"==typeof r)continue;const s=m(`&${n}`,`${l(t)}:${d(r)}`);e.push({classes:s,prop:t})}else if("object"!=typeof o){const t=m("&",`${l(n)}:${d(o)}`);e.push({classes:t,prop:n})}}return e}function g(t){return()=>{const e={};for(const n in t){const o=b(t[n]??{}).map(t=>t.classes[0]).join(" ");e[n]=o}return e}}t.STATE=e,t.add=function(t){if("function"==typeof t){const e=t();if(!(e instanceof HTMLElement))throw new Error("Component function must return an HTMLElement");return void document.body.appendChild(e)}if(!("render"in t)||"function"!=typeof t.render)throw new Error("Invalid component passed to add()");t.render()},t.derive=o,t.isState=function(t){return"object"==typeof t&&null!==t&&!0===t[e]},t.makeStyles=g,t.mergeClasses=function(...t){const e=[];for(let t=0;t<3;t++)e[t]=[];return t.forEach((t,n)=>{if("string"!=typeof t)return;const o=Math.min(n,2),r=e[o];if(!r)return;const s=t.trim().split(/\s+/);for(const t of s)t&&r.push(t)}),e.flat().join(" ")},t.mergeStyleSets=function(...t){const e={};for(const n of t)if(n)for(const t in n)e[t]={...e[t],...n[t]};return g(e)()},t.router=function(t){const e=[];let n=null;for(const o of Object.keys(t)){const r=t[o];if(!r)continue;if("*"===o){n=r;continue}const s=[],c=o.replace(/:[^/]+/g,t=>(s.push(t.slice(1)),"([^/]+)"));e.push({regex:new RegExp(`^${c}$`),keys:s,handler:r})}let o=null,r="";function s(t){const e={};if(!t)return e;for(const[n,o]of new URLSearchParams(t))e[n]=o;return e}function c(){const t=location.pathname+location.search;if(t===r)return;r=t;const c=function(t){for(const{regex:n,keys:o,handler:r}of e){const e=t.match(n);if(!e)continue;const c={};return o.forEach((t,n)=>{c[t]=decodeURIComponent(e[n+1])}),Object.assign(c,s(location.search)),r(c)}if(n)return n({});throw new Error(`No route matches "${t}"`)}(location.pathname);o&&o.parentNode&&document.body.removeChild(o),document.body.appendChild(c),o=c}return window.addEventListener("popstate",c),c(),{render:c,push(t){history.pushState(null,"",t),c()},replace(t){history.replaceState(null,"",t),c()},back:()=>history.back()}},t.state=function(t){const o={[e]:!0,subs:new Set,get val(){return function(t){n&&(t.subs.add(n),n.deps.add(t))}(o),t},set val(e){if(e!==t){t=e;for(const t of Array.from(o.subs))t()}}};return o},t.tags=s,Object.defineProperty(t,"__esModule",{value:!0})});
2
2
  //# sourceMappingURL=index.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":["../src/state.ts","../src/tags.ts","../src/styles.ts","../src/helpers.ts","../src/router.ts"],"sourcesContent":["export const STATE = Symbol(\"STATE\");\nexport function isState(x) {\n return typeof x === \"object\" && x !== null && x[STATE] === true;\n}\nlet currentEffect = null;\nfunction track(st) {\n if (currentEffect) {\n st.subs.add(currentEffect);\n currentEffect.deps.add(st);\n }\n}\nfunction cleanup(effect) {\n for (const st of effect.deps)\n st.subs.delete(effect);\n effect.deps.clear();\n}\nexport function state(v) {\n const st = {\n [STATE]: true,\n subs: new Set(),\n get val() {\n track(st);\n return v;\n },\n set val(nv) {\n if (nv === v)\n return;\n v = nv;\n for (const fn of Array.from(st.subs)) {\n fn();\n }\n }\n };\n return st;\n}\nexport function derive(fn) {\n const effect = (() => {\n cleanup(effect);\n currentEffect = effect;\n try {\n fn();\n }\n finally {\n currentEffect = null;\n }\n });\n effect.deps = new Set();\n effect();\n return effect;\n}\n","import { derive } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\n// --- Attribute detection (fix for TypeScript narrowing) ---\nfunction isAttrs(x) {\n return (x &&\n typeof x === \"object\" &&\n !(x instanceof Node) &&\n !isState(x) &&\n typeof x !== \"function\" &&\n !Array.isArray(x));\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (attrsOrChild, ...children) => {\n const el = document.createElement(tag);\n // Handle attributes safely\n if (isAttrs(attrsOrChild)) {\n for (const [k, v] of Object.entries(attrsOrChild)) {\n el.setAttribute(k, String(v));\n }\n }\n else if (attrsOrChild != null) {\n // Now TypeScript knows it's ChildLike, not Attrs\n children.unshift(attrsOrChild);\n }\n processChildren(el, children);\n return el;\n };\n }\n});\nfunction processChildren(el, children) {\n for (const child of children.flat()) {\n if (child == null || child === false)\n continue;\n if (typeof child === \"function\") {\n mountReactiveFunction(el, child);\n continue;\n }\n if (isState(child)) {\n mountReactiveState(el, child);\n continue;\n }\n if (child instanceof Node) {\n el.appendChild(child);\n continue;\n }\n el.appendChild(document.createTextNode(String(child)));\n }\n}\nfunction mountReactiveFunction(parent, fn) {\n const marker = document.createTextNode(\"\");\n parent.appendChild(marker);\n let mounted = [];\n const cleanup = () => {\n for (const n of mounted) {\n if (n.parentNode === parent)\n parent.removeChild(n);\n }\n mounted = [];\n };\n derive(() => {\n cleanup();\n const value = fn();\n const values = Array.isArray(value) ? value.flat() : [value];\n for (const v of values) {\n if (v == null || v === false)\n continue;\n if (typeof v === \"function\") {\n mountReactiveFunction(parent, v);\n continue;\n }\n if (isState(v)) {\n const node = document.createTextNode(String(v.val));\n parent.insertBefore(node, marker);\n v.subs.add(() => {\n const next = String(v.val);\n if (node.data !== next)\n node.data = next;\n });\n mounted.push(node);\n continue;\n }\n if (v instanceof Node) {\n parent.insertBefore(v, marker);\n mounted.push(v);\n continue;\n }\n const text = document.createTextNode(String(v));\n parent.insertBefore(text, marker);\n mounted.push(text);\n }\n });\n}\nfunction mountReactiveState(parent, st) {\n const node = document.createTextNode(String(st.val));\n parent.appendChild(node);\n st.subs.add(() => {\n const next = String(st.val);\n if (node.data !== next)\n node.data = next;\n });\n}\n","let styleElement = null;\nlet styleSheet = null;\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n }\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\nconst camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const result = str.replace(/[A-Z]/g, m => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, result);\n return result;\n}\nconst atomicClassCache = new Map();\nlet atomicCounter = 0;\nfunction nextAtomicClass() {\n return `a-${atomicCounter++}`;\n}\nfunction registerAtomicRule(selector, decl) {\n const key = `${selector}|${decl}`;\n const cached = atomicClassCache.get(key);\n if (cached)\n return cached;\n const className = nextAtomicClass();\n atomicClassCache.set(key, className);\n ensureStyleSheet().insertRule(`${selector.replace(/&/g, `.${className}`)}{${decl}}`, styleSheet.cssRules.length);\n return className;\n}\nconst KEYFRAMES_PREFIX = \"@keyframes \";\nconst keyframeCache = new Map();\nlet keyframeCounter = 0;\nfunction registerKeyframes(name, frames) {\n const signature = name + JSON.stringify(frames);\n const cached = keyframeCache.get(signature);\n if (cached)\n return cached;\n const unique = `${name}-${keyframeCounter++}`;\n const steps = [];\n for (const step in frames) {\n const decls = stringifyDecls(frames[step] ?? {}, new Map());\n steps.push(`${step}{${decls}}`);\n }\n ensureStyleSheet().insertRule(`@keyframes ${unique}{${steps.join(\"\")}}`, styleSheet.cssRules.length);\n keyframeCache.set(signature, unique);\n return unique;\n}\nfunction stringifyDecls(props, keyframes) {\n const out = [];\n for (const key in props) {\n const raw = props[key];\n if (raw == null || typeof raw === \"object\")\n continue;\n let val = typeof raw === \"function\" ? raw() : raw;\n if (typeof val === \"string\") {\n for (const [orig, uniq] of keyframes) {\n val = val.replaceAll(`$${orig}`, uniq);\n }\n }\n out.push(`${camelToKebab(key)}:${val}`);\n }\n return out.join(\";\");\n}\nfunction buildAtomicClasses(rule, keyframes) {\n const classes = [];\n for (const key in rule) {\n const val = rule[key];\n if (!val)\n continue;\n if (key[0] === \":\" && typeof val === \"object\") {\n const decls = stringifyDecls(val, keyframes);\n if (!decls)\n continue;\n classes.push(registerAtomicRule(`&${key}`, decls));\n continue;\n }\n if (key.startsWith(\"@media\") && typeof val === \"object\") {\n const decls = stringifyDecls(val, keyframes);\n if (!decls)\n continue;\n const className = nextAtomicClass();\n atomicClassCache.set(`${key}|${decls}`, className);\n ensureStyleSheet().insertRule(`${key}{.${className}{${decls}}}`, styleSheet.cssRules.length);\n classes.push(className);\n continue;\n }\n if (typeof val !== \"object\") {\n let resolved = typeof val === \"function\" ? val() : val;\n if (typeof resolved === \"string\") {\n for (const [orig, uniq] of keyframes) {\n resolved = resolved.replaceAll(`$${orig}`, uniq);\n }\n }\n const decl = `${camelToKebab(key)}:${resolved}`;\n classes.push(registerAtomicRule(\"&\", decl));\n }\n }\n return classes;\n}\nexport function makeStyles(styles) {\n return () => {\n const classNames = {};\n const keyframesMap = new Map();\n for (const key in styles) {\n if (!key.startsWith(KEYFRAMES_PREFIX))\n continue;\n const name = key.slice(KEYFRAMES_PREFIX.length);\n const frames = styles[key];\n const unique = registerKeyframes(name, frames);\n keyframesMap.set(name, unique);\n }\n for (const slot in styles) {\n if (slot.startsWith(KEYFRAMES_PREFIX))\n continue;\n const rule = (styles[slot] ?? {});\n const classes = buildAtomicClasses(rule, keyframesMap);\n classNames[slot] = classes.join(\" \");\n }\n return classNames;\n };\n}\nexport const mergeClasses = (...classes) => classes.filter(Boolean).join(\" \");\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n const prev = merged[key] ?? {};\n const cur = set[key] ?? {};\n merged[key] = { ...prev, ...cur };\n }\n }\n return makeStyles(merged)();\n}\n","export function add(component) {\n if (typeof component === \"function\") {\n const el = component();\n if (!(el instanceof HTMLElement)) {\n throw new Error(\"Component function must return an HTMLElement\");\n }\n document.body.appendChild(el);\n return;\n }\n if (\"render\" in component && typeof component.render === \"function\") {\n component.render();\n return;\n }\n throw new Error(\"Invalid component passed to add()\");\n}\n","export function router(routes) {\n const patterns = [];\n let wildcard = null;\n for (const path of Object.keys(routes)) {\n const handler = routes[path];\n if (!handler)\n continue;\n if (path === \"*\") {\n wildcard = handler;\n continue;\n }\n const keys = [];\n const pattern = path.replace(/:[^/]+/g, (m) => {\n keys.push(m.slice(1));\n return \"([^/]+)\";\n });\n patterns.push({\n regex: new RegExp(`^${pattern}$`),\n keys,\n handler\n });\n }\n let currentEl = null;\n let currentPath = \"\";\n function parseQuery(search) {\n const params = {};\n if (!search)\n return params;\n for (const [k, v] of new URLSearchParams(search))\n params[k] = v;\n return params;\n }\n function matchRoute(pathname) {\n for (const { regex, keys, handler } of patterns) {\n const match = pathname.match(regex);\n if (!match)\n continue;\n const params = {};\n keys.forEach((key, i) => {\n params[key] = decodeURIComponent(match[i + 1]);\n });\n Object.assign(params, parseQuery(location.search));\n return handler(params);\n }\n if (wildcard)\n return wildcard({});\n throw new Error(`No route matches \"${pathname}\"`);\n }\n function render() {\n const newFullPath = location.pathname + location.search;\n if (newFullPath === currentPath)\n return;\n currentPath = newFullPath;\n const next = matchRoute(location.pathname);\n if (currentEl && currentEl.parentNode) {\n document.body.removeChild(currentEl);\n }\n document.body.appendChild(next);\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n return {\n render,\n push(path) {\n history.pushState(null, \"\", path);\n render();\n },\n replace(path) {\n history.replaceState(null, \"\", path);\n render();\n },\n back: () => history.back()\n };\n}\n"],"names":["STATE","Symbol","currentEffect","derive","fn","effect","st","deps","subs","delete","clear","cleanup","Set","isState","x","tags","Proxy","get","_","tag","attrsOrChild","children","el","document","createElement","Node","Array","isArray","unshift","k","v","Object","entries","setAttribute","String","child","flat","mountReactiveState","appendChild","createTextNode","mountReactiveFunction","processChildren","parent","marker","mounted","n","parentNode","removeChild","value","values","node","val","insertBefore","add","next","data","push","text","styleElement","styleSheet","ensureStyleSheet","id","head","sheet","camelToKebabCache","Map","camelToKebab","str","cached","result","replace","m","toLowerCase","set","atomicClassCache","atomicCounter","nextAtomicClass","registerAtomicRule","selector","decl","key","className","insertRule","cssRules","length","KEYFRAMES_PREFIX","keyframeCache","keyframeCounter","registerKeyframes","name","frames","signature","JSON","stringify","unique","steps","step","decls","stringifyDecls","join","props","keyframes","out","raw","orig","uniq","replaceAll","buildAtomicClasses","rule","classes","startsWith","resolved","makeStyles","styles","classNames","keyframesMap","slice","slot","component","HTMLElement","Error","body","render","filter","Boolean","sets","merged","prev","cur","routes","patterns","wildcard","path","keys","handler","pattern","regex","RegExp","currentEl","currentPath","parseQuery","search","params","URLSearchParams","newFullPath","location","pathname","match","forEach","i","decodeURIComponent","assign","matchRoute","window","addEventListener","history","pushState","replaceState","back","track","nv","from"],"mappings":"6OAAY,MAACA,EAAQC,OAAO,SAI5B,IAAIC,EAAgB,KA+Bb,SAASC,EAAOC,GACnB,MAAMC,EAAM,MAzBhB,SAAiBA,GACb,IAAK,MAAMC,KAAMD,EAAOE,KACpBD,EAAGE,KAAKC,OAAOJ,GACnBA,EAAOE,KAAKG,OAChB,CAsBQC,CAAQN,GACRH,EAAgBG,EAChB,IACID,GACH,CACO,QACJF,EAAgB,IACnB,CACJ,EAGD,OAFAG,EAAOE,KAAO,IAAIK,IAClBP,IACOA,CACX,CChDA,SAASQ,EAAQC,GACb,OAAOA,GAAkB,iBAANA,GAAkB,SAAUA,GAAK,QAASA,CACjE,CAUY,MAACC,EAAO,IAAIC,MAAM,GAAI,CAC9BC,IAAG,CAACC,EAAGC,IACI,CAACC,KAAiBC,KACrB,MAAMC,EAAKC,SAASC,cAAcL,GAElC,KAbKL,EAaOM,IAXH,iBAANN,GACLA,aAAaW,MACdZ,EAAQC,IACI,mBAANA,GACNY,MAAMC,QAAQb,GAYc,MAAhBM,GAELC,EAASO,QAAQR,QANjB,IAAK,MAAOS,EAAGC,KAAMC,OAAOC,QAAQZ,GAChCE,EAAGW,aAAaJ,EAAGK,OAAOJ,IAf9C,IAAiBhB,EAuBL,OAIZ,SAAyBQ,EAAID,GACzB,IAAK,MAAMc,KAASd,EAASe,OACZ,MAATD,IAA2B,IAAVA,IAEA,mBAAVA,EAIPtB,EAAQsB,GACRE,EAAmBf,EAAIa,GAGvBA,aAAiBV,KACjBH,EAAGgB,YAAYH,GAGnBb,EAAGgB,YAAYf,SAASgB,eAAeL,OAAOC,KAX1CK,EAAsBlB,EAAIa,GAatC,CAvBYM,CAAgBnB,EAAID,GACbC,KAuBnB,SAASkB,EAAsBE,EAAQtC,GACnC,MAAMuC,EAASpB,SAASgB,eAAe,IACvCG,EAAOJ,YAAYK,GACnB,IAAIC,EAAU,GAQdzC,EAAO,KAPS,MACZ,IAAK,MAAM0C,KAAKD,EACRC,EAAEC,aAAeJ,GACjBA,EAAOK,YAAYF,GAE3BD,EAAU,IAGVjC,GACA,MAAMqC,EAAQ5C,IACR6C,EAASvB,MAAMC,QAAQqB,GAASA,EAAMZ,OAAS,CAACY,GACtD,IAAK,MAAMlB,KAAKmB,EAAQ,CACpB,GAAS,MAALnB,IAAmB,IAANA,EACb,SACJ,GAAiB,mBAANA,EAAkB,CACzBU,EAAsBE,EAAQZ,GAC9B,QACH,CACD,GAAIjB,EAAQiB,GAAI,CACZ,MAAMoB,EAAO3B,SAASgB,eAAeL,OAAOJ,EAAEqB,MAC9CT,EAAOU,aAAaF,EAAMP,GAC1Bb,EAAEtB,KAAK6C,IAAI,KACP,MAAMC,EAAOpB,OAAOJ,EAAEqB,KAClBD,EAAKK,OAASD,IACdJ,EAAKK,KAAOD,KAEpBV,EAAQY,KAAKN,GACb,QACH,CACD,GAAIpB,aAAaL,KAAM,CACnBiB,EAAOU,aAAatB,EAAGa,GACvBC,EAAQY,KAAK1B,GACb,QACH,CACD,MAAM2B,EAAOlC,SAASgB,eAAeL,OAAOJ,IAC5CY,EAAOU,aAAaK,EAAMd,GAC1BC,EAAQY,KAAKC,EAChB,GAET,CACA,SAASpB,EAAmBK,EAAQpC,GAChC,MAAM4C,EAAO3B,SAASgB,eAAeL,OAAO5B,EAAG6C,MAC/CT,EAAOJ,YAAYY,GACnB5C,EAAGE,KAAK6C,IAAI,KACR,MAAMC,EAAOpB,OAAO5B,EAAG6C,KACnBD,EAAKK,OAASD,IACdJ,EAAKK,KAAOD,IAExB,CCvGA,IAAII,EAAe,KACfC,EAAa,KACjB,SAASC,IASL,OARKD,IACID,IACDA,EAAenC,SAASC,cAAc,SACtCkC,EAAaG,GAAK,SAClBtC,SAASuC,KAAKxB,YAAYoB,IAE9BC,EAAaD,EAAaK,OAEvBJ,CACX,CACA,MAAMK,EAAoB,IAAIC,IAC9B,SAASC,EAAaC,GAClB,MAAMC,EAASJ,EAAkB/C,IAAIkD,GACrC,GAAIC,EACA,OAAOA,EACX,MAAMC,EAASF,EAAIG,QAAQ,SAAUC,GAAK,IAAMA,EAAEC,eAElD,OADAR,EAAkBS,IAAIN,EAAKE,GACpBA,CACX,CACA,MAAMK,EAAmB,IAAIT,IAC7B,IAAIU,EAAgB,EACpB,SAASC,IACL,MAAO,KAAKD,GAChB,CACA,SAASE,EAAmBC,EAAUC,GAClC,MAAMC,EAAM,GAAGF,KAAYC,IACrBX,EAASM,EAAiBzD,IAAI+D,GACpC,GAAIZ,EACA,OAAOA,EACX,MAAMa,EAAYL,IAGlB,OAFAF,EAAiBD,IAAIO,EAAKC,GAC1BrB,IAAmBsB,WAAW,GAAGJ,EAASR,QAAQ,KAAM,IAAIW,QAAgBF,KAASpB,EAAWwB,SAASC,QAClGH,CACX,CACA,MAAMI,EAAmB,cACnBC,EAAgB,IAAIrB,IAC1B,IAAIsB,EAAkB,EACtB,SAASC,EAAkBC,EAAMC,GAC7B,MAAMC,EAAYF,EAAOG,KAAKC,UAAUH,GAClCtB,EAASkB,EAAcrE,IAAI0E,GACjC,GAAIvB,EACA,OAAOA,EACX,MAAM0B,EAAS,GAAGL,KAAQF,MACpBQ,EAAQ,GACd,IAAK,MAAMC,KAAQN,EAAQ,CACvB,MAAMO,EAAQC,EAAeR,EAAOM,IAAS,GAAI,IAAI/B,KACrD8B,EAAMvC,KAAK,GAAGwC,KAAQC,KACzB,CAGD,OAFArC,IAAmBsB,WAAW,cAAcY,KAAUC,EAAMI,KAAK,OAAQxC,EAAWwB,SAASC,QAC7FE,EAAcb,IAAIkB,EAAWG,GACtBA,CACX,CACA,SAASI,EAAeE,EAAOC,GAC3B,MAAMC,EAAM,GACZ,IAAK,MAAMtB,KAAOoB,EAAO,CACrB,MAAMG,EAAMH,EAAMpB,GAClB,GAAW,MAAPuB,GAA8B,iBAARA,EACtB,SACJ,IAAIpD,EAAqB,mBAARoD,EAAqBA,IAAQA,EAC9C,GAAmB,iBAARpD,EACP,IAAK,MAAOqD,EAAMC,KAASJ,EACvBlD,EAAMA,EAAIuD,WAAW,IAAIF,IAAQC,GAGzCH,EAAI9C,KAAK,GAAGU,EAAac,MAAQ7B,IACpC,CACD,OAAOmD,EAAIH,KAAK,IACpB,CACA,SAASQ,EAAmBC,EAAMP,GAC9B,MAAMQ,EAAU,GAChB,IAAK,MAAM7B,KAAO4B,EAAM,CACpB,MAAMzD,EAAMyD,EAAK5B,GACjB,GAAK7B,EAAL,CAEA,GAAe,MAAX6B,EAAI,IAA6B,iBAAR7B,EAAkB,CAC3C,MAAM8C,EAAQC,EAAe/C,EAAKkD,GAClC,IAAKJ,EACD,SACJY,EAAQrD,KAAKqB,EAAmB,IAAIG,IAAOiB,IAC3C,QACH,CACD,GAAIjB,EAAI8B,WAAW,WAA4B,iBAAR3D,EAAkB,CACrD,MAAM8C,EAAQC,EAAe/C,EAAKkD,GAClC,IAAKJ,EACD,SACJ,MAAMhB,EAAYL,IAClBF,EAAiBD,IAAI,GAAGO,KAAOiB,IAAShB,GACxCrB,IAAmBsB,WAAW,GAAGF,MAAQC,KAAagB,MAAWtC,EAAWwB,SAASC,QACrFyB,EAAQrD,KAAKyB,GACb,QACH,CACD,GAAmB,iBAAR9B,EAAkB,CACzB,IAAI4D,EAA0B,mBAAR5D,EAAqBA,IAAQA,EACnD,GAAwB,iBAAb4D,EACP,IAAK,MAAOP,EAAMC,KAASJ,EACvBU,EAAWA,EAASL,WAAW,IAAIF,IAAQC,GAGnD,MAAM1B,EAAO,GAAGb,EAAac,MAAQ+B,IACrCF,EAAQrD,KAAKqB,EAAmB,IAAKE,GACxC,CA3BY,CA4BhB,CACD,OAAO8B,CACX,CACO,SAASG,EAAWC,GACvB,MAAO,KACH,MAAMC,EAAa,CAAA,EACbC,EAAe,IAAIlD,IACzB,IAAK,MAAMe,KAAOiC,EAAQ,CACtB,IAAKjC,EAAI8B,WAAWzB,GAChB,SACJ,MAAMI,EAAOT,EAAIoC,MAAM/B,IAEjBS,EAASN,EAAkBC,EADlBwB,EAAOjC,IAEtBmC,EAAa1C,IAAIgB,EAAMK,EAC1B,CACD,IAAK,MAAMuB,KAAQJ,EAAQ,CACvB,GAAII,EAAKP,WAAWzB,GAChB,SACJ,MACMwB,EAAUF,EADFM,EAAOI,IAAS,CAAE,EACSF,GACzCD,EAAWG,GAAQR,EAAQV,KAAK,IACnC,CACD,OAAOe,EAEf,iBChIO,SAAaI,GAChB,GAAyB,mBAAdA,EAA0B,CACjC,MAAMhG,EAAKgG,IACX,KAAMhG,aAAciG,aAChB,MAAM,IAAIC,MAAM,iDAGpB,YADAjG,SAASkG,KAAKnF,YAAYhB,EAE7B,CACD,KAAI,WAAYgG,IAAyC,mBAArBA,EAAUI,OAI9C,MAAM,IAAIF,MAAM,qCAHZF,EAAUI,QAIlB,uBHbO,SAAiB5G,GACpB,MAAoB,iBAANA,GAAwB,OAANA,IAA2B,IAAbA,EAAEd,EACpD,gCE8H4B,IAAI6G,IAAYA,EAAQc,OAAOC,SAASzB,KAAK,sBAClE,YAA2B0B,GAC9B,MAAMC,EAAS,CAAA,EACf,IAAK,MAAMrD,KAAOoD,EACd,GAAKpD,EAEL,IAAK,MAAMO,KAAOP,EAAK,CACnB,MAAMsD,EAAOD,EAAO9C,IAAQ,CAAA,EACtBgD,EAAMvD,EAAIO,IAAQ,CAAA,EACxB8C,EAAO9C,GAAO,IAAK+C,KAASC,EAC/B,CAEL,OAAOhB,EAAWc,EAAXd,EACX,WE9IO,SAAgBiB,GACnB,MAAMC,EAAW,GACjB,IAAIC,EAAW,KACf,IAAK,MAAMC,KAAQrG,OAAOsG,KAAKJ,GAAS,CACpC,MAAMK,EAAUL,EAAOG,GACvB,IAAKE,EACD,SACJ,GAAa,MAATF,EAAc,CACdD,EAAWG,EACX,QACH,CACD,MAAMD,EAAO,GACPE,EAAUH,EAAK9D,QAAQ,UAAYC,IACrC8D,EAAK7E,KAAKe,EAAE6C,MAAM,IACX,YAEXc,EAAS1E,KAAK,CACVgF,MAAO,IAAIC,OAAO,IAAIF,MACtBF,OACAC,WAEP,CACD,IAAII,EAAY,KACZC,EAAc,GAClB,SAASC,EAAWC,GAChB,MAAMC,EAAS,CAAA,EACf,IAAKD,EACD,OAAOC,EACX,IAAK,MAAOjH,EAAGC,KAAM,IAAIiH,gBAAgBF,GACrCC,EAAOjH,GAAKC,EAChB,OAAOgH,CACV,CAiBD,SAASpB,IACL,MAAMsB,EAAcC,SAASC,SAAWD,SAASJ,OACjD,GAAIG,IAAgBL,EAChB,OACJA,EAAcK,EACd,MAAM1F,EArBV,SAAoB4F,GAChB,IAAK,MAAMV,MAAEA,EAAKH,KAAEA,EAAIC,QAAEA,KAAaJ,EAAU,CAC7C,MAAMiB,EAAQD,EAASC,MAAMX,GAC7B,IAAKW,EACD,SACJ,MAAML,EAAS,CAAA,EAKf,OAJAT,EAAKe,QAAQ,CAACpE,EAAKqE,KACfP,EAAO9D,GAAOsE,mBAAmBH,EAAME,EAAI,MAE/CtH,OAAOwH,OAAOT,EAAQF,EAAWK,SAASJ,SACnCP,EAAQQ,EAClB,CACD,GAAIX,EACA,OAAOA,EAAS,CAAA,GACpB,MAAM,IAAIX,MAAM,qBAAqB0B,KACxC,CAMgBM,CAAWP,SAASC,UAC7BR,GAAaA,EAAU5F,YACvBvB,SAASkG,KAAK1E,YAAY2F,GAE9BnH,SAASkG,KAAKnF,YAAYgB,GAC1BoF,EAAYpF,CACf,CAGD,OAFAmG,OAAOC,iBAAiB,WAAYhC,GACpCA,IACO,CACHA,SACA,IAAAlE,CAAK4E,GACDuB,QAAQC,UAAU,KAAM,GAAIxB,GAC5BV,GACH,EACD,OAAApD,CAAQ8D,GACJuB,QAAQE,aAAa,KAAM,GAAIzB,GAC/BV,GACH,EACDoC,KAAM,IAAMH,QAAQG,OAE5B,UJ1DO,SAAehI,GAClB,MAAMxB,EAAK,CACPN,CAACA,IAAQ,EACTQ,KAAM,IAAII,IACV,OAAIuC,GAEA,OAjBZ,SAAe7C,GACPJ,IACAI,EAAGE,KAAK6C,IAAInD,GACZA,EAAcK,KAAK8C,IAAI/C,GAE/B,CAWYyJ,CAAMzJ,GACCwB,CACV,EACD,OAAIqB,CAAI6G,GACJ,GAAIA,IAAOlI,EAAX,CAEAA,EAAIkI,EACJ,IAAK,MAAM5J,KAAMsB,MAAMuI,KAAK3J,EAAGE,MAC3BJ,GAHO,CAKd,GAEL,OAAOE,CACX"}
1
+ {"version":3,"file":"index.min.js","sources":["../src/state.ts","../src/tags.ts","../src/styles.ts","../src/helpers.ts","../src/router.ts"],"sourcesContent":["export const STATE = Symbol(\"STATE\");\nexport function isState(x) {\n return typeof x === \"object\" && x !== null && x[STATE] === true;\n}\nlet currentEffect = null;\nfunction track(st) {\n if (currentEffect) {\n st.subs.add(currentEffect);\n currentEffect.deps.add(st);\n }\n}\nfunction cleanup(effect) {\n for (const st of effect.deps)\n st.subs.delete(effect);\n effect.deps.clear();\n}\nexport function state(v) {\n const st = {\n [STATE]: true,\n subs: new Set(),\n get val() {\n track(st);\n return v;\n },\n set val(nv) {\n if (nv === v)\n return;\n v = nv;\n for (const fn of Array.from(st.subs)) {\n fn();\n }\n }\n };\n return st;\n}\nexport function derive(fn) {\n const effect = (() => {\n cleanup(effect);\n currentEffect = effect;\n try {\n fn();\n }\n finally {\n currentEffect = null;\n }\n });\n effect.deps = new Set();\n effect();\n return effect;\n}\n","import { derive } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\n// --- Attribute detection (fix for TypeScript narrowing) ---\nfunction isAttrs(x) {\n return (x &&\n typeof x === \"object\" &&\n !(x instanceof Node) &&\n !isState(x) &&\n typeof x !== \"function\" &&\n !Array.isArray(x));\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (attrsOrChild, ...children) => {\n const el = document.createElement(tag);\n // Handle attributes safely\n if (isAttrs(attrsOrChild)) {\n for (const [k, v] of Object.entries(attrsOrChild)) {\n el.setAttribute(k, String(v));\n }\n }\n else if (attrsOrChild != null) {\n // Now TypeScript knows it's ChildLike, not Attrs\n children.unshift(attrsOrChild);\n }\n processChildren(el, children);\n return el;\n };\n }\n});\nfunction processChildren(el, children) {\n for (const child of children.flat()) {\n if (child == null || child === false)\n continue;\n if (typeof child === \"function\") {\n mountReactiveFunction(el, child);\n continue;\n }\n if (isState(child)) {\n mountReactiveState(el, child);\n continue;\n }\n if (child instanceof Node) {\n el.appendChild(child);\n continue;\n }\n el.appendChild(document.createTextNode(String(child)));\n }\n}\nfunction mountReactiveFunction(parent, fn) {\n const marker = document.createTextNode(\"\");\n parent.appendChild(marker);\n let mounted = [];\n const cleanup = () => {\n for (const n of mounted) {\n if (n.parentNode === parent)\n parent.removeChild(n);\n }\n mounted = [];\n };\n derive(() => {\n cleanup();\n const value = fn();\n const values = Array.isArray(value) ? value.flat() : [value];\n for (const v of values) {\n if (v == null || v === false)\n continue;\n if (typeof v === \"function\") {\n mountReactiveFunction(parent, v);\n continue;\n }\n if (isState(v)) {\n const node = document.createTextNode(String(v.val));\n parent.insertBefore(node, marker);\n v.subs.add(() => {\n const next = String(v.val);\n if (node.data !== next)\n node.data = next;\n });\n mounted.push(node);\n continue;\n }\n if (v instanceof Node) {\n parent.insertBefore(v, marker);\n mounted.push(v);\n continue;\n }\n const text = document.createTextNode(String(v));\n parent.insertBefore(text, marker);\n mounted.push(text);\n }\n });\n}\nfunction mountReactiveState(parent, st) {\n const node = document.createTextNode(String(st.val));\n parent.appendChild(node);\n st.subs.add(() => {\n const next = String(st.val);\n if (node.data !== next)\n node.data = next;\n });\n}\n","let styleElement = null;\nlet styleSheet = null;\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\nconst camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const res = str.replace(/[A-Z]/g, m => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, res);\n return res;\n}\nfunction resolveValue(v) {\n return typeof v === \"function\" ? v() : v;\n}\nconst PRECEDENCE_LAYERS = 3;\nlet atomicCounter = 0;\nfunction encode(n) {\n return n.toString(36);\n}\nfunction makeClassName(layer) {\n // looks like f1phragk\n return `f${layer}${encode(atomicCounter++).padStart(5, \"0\")}`;\n}\nconst atomicCache = new Map();\nfunction getAtomicClasses(selector, decl) {\n const key = `${selector}|${decl}`;\n const cached = atomicCache.get(key);\n if (cached)\n return cached;\n const classes = [];\n const sheet = ensureStyleSheet();\n for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {\n const className = makeClassName(layer);\n classes.push(className);\n const css = selector === \"&\"\n ? `.${className}{${decl}}`\n : selector.replace(/&/g, `.${className}`) + `{${decl}}`;\n sheet.insertRule(css, sheet.cssRules.length);\n }\n atomicCache.set(key, classes);\n return classes;\n}\nfunction buildAtomicEntries(rule) {\n const entries = [];\n for (const key in rule) {\n const val = rule[key];\n if (val == null)\n continue;\n if (key.startsWith(\":\") && typeof val === \"object\") {\n for (const prop in val) {\n const v = val[prop];\n if (v == null || typeof v === \"object\")\n continue;\n const decl = `${camelToKebab(prop)}:${resolveValue(v)}`;\n const classes = getAtomicClasses(`&${key}`, decl);\n entries.push({ classes, prop });\n }\n continue;\n }\n if (typeof val !== \"object\") {\n const decl = `${camelToKebab(key)}:${resolveValue(val)}`;\n const classes = getAtomicClasses(\"&\", decl);\n entries.push({ classes, prop: key });\n }\n }\n return entries;\n}\nexport function mergeClasses(...inputs) {\n const perLayer = [];\n for (let i = 0; i < PRECEDENCE_LAYERS; i++) {\n perLayer[i] = [];\n }\n inputs.forEach((input, index) => {\n if (typeof input !== \"string\")\n return;\n const layer = Math.min(index, PRECEDENCE_LAYERS - 1);\n const bucket = perLayer[layer];\n if (!bucket)\n return;\n const parts = input.trim().split(/\\s+/);\n for (const cls of parts) {\n if (cls)\n bucket.push(cls);\n }\n });\n return perLayer.flat().join(\" \");\n}\nexport function makeStyles(styles) {\n return () => {\n const result = {};\n for (const slot in styles) {\n const rule = (styles[slot] ?? {});\n const entries = buildAtomicEntries(rule);\n const classes = entries.map(e => e.classes[0]).join(\" \");\n result[slot] = classes;\n }\n return result;\n };\n}\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n merged[key] = {\n ...merged[key],\n ...set[key],\n };\n }\n }\n return makeStyles(merged)();\n}\n","export function add(component) {\n if (typeof component === \"function\") {\n const el = component();\n if (!(el instanceof HTMLElement)) {\n throw new Error(\"Component function must return an HTMLElement\");\n }\n document.body.appendChild(el);\n return;\n }\n if (\"render\" in component && typeof component.render === \"function\") {\n component.render();\n return;\n }\n throw new Error(\"Invalid component passed to add()\");\n}\n","export function router(routes) {\n const patterns = [];\n let wildcard = null;\n for (const path of Object.keys(routes)) {\n const handler = routes[path];\n if (!handler)\n continue;\n if (path === \"*\") {\n wildcard = handler;\n continue;\n }\n const keys = [];\n const pattern = path.replace(/:[^/]+/g, (m) => {\n keys.push(m.slice(1));\n return \"([^/]+)\";\n });\n patterns.push({\n regex: new RegExp(`^${pattern}$`),\n keys,\n handler\n });\n }\n let currentEl = null;\n let currentPath = \"\";\n function parseQuery(search) {\n const params = {};\n if (!search)\n return params;\n for (const [k, v] of new URLSearchParams(search))\n params[k] = v;\n return params;\n }\n function matchRoute(pathname) {\n for (const { regex, keys, handler } of patterns) {\n const match = pathname.match(regex);\n if (!match)\n continue;\n const params = {};\n keys.forEach((key, i) => {\n params[key] = decodeURIComponent(match[i + 1]);\n });\n Object.assign(params, parseQuery(location.search));\n return handler(params);\n }\n if (wildcard)\n return wildcard({});\n throw new Error(`No route matches \"${pathname}\"`);\n }\n function render() {\n const newFullPath = location.pathname + location.search;\n if (newFullPath === currentPath)\n return;\n currentPath = newFullPath;\n const next = matchRoute(location.pathname);\n if (currentEl && currentEl.parentNode) {\n document.body.removeChild(currentEl);\n }\n document.body.appendChild(next);\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n return {\n render,\n push(path) {\n history.pushState(null, \"\", path);\n render();\n },\n replace(path) {\n history.replaceState(null, \"\", path);\n render();\n },\n back: () => history.back()\n };\n}\n"],"names":["STATE","Symbol","currentEffect","derive","fn","effect","st","deps","subs","delete","clear","cleanup","Set","isState","x","tags","Proxy","get","_","tag","attrsOrChild","children","el","document","createElement","Node","Array","isArray","unshift","k","v","Object","entries","setAttribute","String","child","flat","mountReactiveState","appendChild","createTextNode","mountReactiveFunction","processChildren","parent","marker","mounted","n","parentNode","removeChild","value","values","node","val","insertBefore","add","next","data","push","text","styleElement","styleSheet","camelToKebabCache","Map","camelToKebab","str","cached","res","replace","m","toLowerCase","set","resolveValue","atomicCounter","makeClassName","layer","toString","padStart","atomicCache","getAtomicClasses","selector","decl","key","classes","sheet","id","head","className","css","insertRule","cssRules","length","buildAtomicEntries","rule","startsWith","prop","makeStyles","styles","result","slot","map","e","join","component","HTMLElement","Error","body","render","inputs","perLayer","i","forEach","input","index","Math","min","PRECEDENCE_LAYERS","bucket","parts","trim","split","cls","sets","merged","routes","patterns","wildcard","path","keys","handler","pattern","slice","regex","RegExp","currentEl","currentPath","parseQuery","search","params","URLSearchParams","newFullPath","location","pathname","match","decodeURIComponent","assign","matchRoute","window","addEventListener","history","pushState","replaceState","back","track","nv","from"],"mappings":"6OAAY,MAACA,EAAQC,OAAO,SAI5B,IAAIC,EAAgB,KA+Bb,SAASC,EAAOC,GACnB,MAAMC,EAAM,MAzBhB,SAAiBA,GACb,IAAK,MAAMC,KAAMD,EAAOE,KACpBD,EAAGE,KAAKC,OAAOJ,GACnBA,EAAOE,KAAKG,OAChB,CAsBQC,CAAQN,GACRH,EAAgBG,EAChB,IACID,GACH,CACO,QACJF,EAAgB,IACnB,CACJ,EAGD,OAFAG,EAAOE,KAAO,IAAIK,IAClBP,IACOA,CACX,CChDA,SAASQ,EAAQC,GACb,OAAOA,GAAkB,iBAANA,GAAkB,SAAUA,GAAK,QAASA,CACjE,CAUY,MAACC,EAAO,IAAIC,MAAM,GAAI,CAC9BC,IAAG,CAACC,EAAGC,IACI,CAACC,KAAiBC,KACrB,MAAMC,EAAKC,SAASC,cAAcL,GAElC,KAbKL,EAaOM,IAXH,iBAANN,GACLA,aAAaW,MACdZ,EAAQC,IACI,mBAANA,GACNY,MAAMC,QAAQb,GAYc,MAAhBM,GAELC,EAASO,QAAQR,QANjB,IAAK,MAAOS,EAAGC,KAAMC,OAAOC,QAAQZ,GAChCE,EAAGW,aAAaJ,EAAGK,OAAOJ,IAf9C,IAAiBhB,EAuBL,OAIZ,SAAyBQ,EAAID,GACzB,IAAK,MAAMc,KAASd,EAASe,OACZ,MAATD,IAA2B,IAAVA,IAEA,mBAAVA,EAIPtB,EAAQsB,GACRE,EAAmBf,EAAIa,GAGvBA,aAAiBV,KACjBH,EAAGgB,YAAYH,GAGnBb,EAAGgB,YAAYf,SAASgB,eAAeL,OAAOC,KAX1CK,EAAsBlB,EAAIa,GAatC,CAvBYM,CAAgBnB,EAAID,GACbC,KAuBnB,SAASkB,EAAsBE,EAAQtC,GACnC,MAAMuC,EAASpB,SAASgB,eAAe,IACvCG,EAAOJ,YAAYK,GACnB,IAAIC,EAAU,GAQdzC,EAAO,KAPS,MACZ,IAAK,MAAM0C,KAAKD,EACRC,EAAEC,aAAeJ,GACjBA,EAAOK,YAAYF,GAE3BD,EAAU,IAGVjC,GACA,MAAMqC,EAAQ5C,IACR6C,EAASvB,MAAMC,QAAQqB,GAASA,EAAMZ,OAAS,CAACY,GACtD,IAAK,MAAMlB,KAAKmB,EAAQ,CACpB,GAAS,MAALnB,IAAmB,IAANA,EACb,SACJ,GAAiB,mBAANA,EAAkB,CACzBU,EAAsBE,EAAQZ,GAC9B,QACH,CACD,GAAIjB,EAAQiB,GAAI,CACZ,MAAMoB,EAAO3B,SAASgB,eAAeL,OAAOJ,EAAEqB,MAC9CT,EAAOU,aAAaF,EAAMP,GAC1Bb,EAAEtB,KAAK6C,IAAI,KACP,MAAMC,EAAOpB,OAAOJ,EAAEqB,KAClBD,EAAKK,OAASD,IACdJ,EAAKK,KAAOD,KAEpBV,EAAQY,KAAKN,GACb,QACH,CACD,GAAIpB,aAAaL,KAAM,CACnBiB,EAAOU,aAAatB,EAAGa,GACvBC,EAAQY,KAAK1B,GACb,QACH,CACD,MAAM2B,EAAOlC,SAASgB,eAAeL,OAAOJ,IAC5CY,EAAOU,aAAaK,EAAMd,GAC1BC,EAAQY,KAAKC,EAChB,GAET,CACA,SAASpB,EAAmBK,EAAQpC,GAChC,MAAM4C,EAAO3B,SAASgB,eAAeL,OAAO5B,EAAG6C,MAC/CT,EAAOJ,YAAYY,GACnB5C,EAAGE,KAAK6C,IAAI,KACR,MAAMC,EAAOpB,OAAO5B,EAAG6C,KACnBD,EAAKK,OAASD,IACdJ,EAAKK,KAAOD,IAExB,CCvGA,IAAII,EAAe,KACfC,EAAa,KAUjB,MAAMC,EAAoB,IAAIC,IAC9B,SAASC,EAAaC,GAClB,MAAMC,EAASJ,EAAkB3C,IAAI8C,GACrC,GAAIC,EACA,OAAOA,EACX,MAAMC,EAAMF,EAAIG,QAAQ,SAAUC,GAAK,IAAMA,EAAEC,eAE/C,OADAR,EAAkBS,IAAIN,EAAKE,GACpBA,CACX,CACA,SAASK,EAAaxC,GAClB,MAAoB,mBAANA,EAAmBA,IAAMA,CAC3C,CAEA,IAAIyC,EAAgB,EAIpB,SAASC,EAAcC,GAEnB,MAAO,IAAIA,KALC5B,EAKc0B,IAJnB1B,EAAE6B,SAAS,KAIyBC,SAAS,EAAG,OAL3D,IAAgB9B,CAMhB,CACA,MAAM+B,EAAc,IAAIf,IACxB,SAASgB,EAAiBC,EAAUC,GAChC,MAAMC,EAAM,GAAGF,KAAYC,IACrBf,EAASY,EAAY3D,IAAI+D,GAC/B,GAAIhB,EACA,OAAOA,EACX,MAAMiB,EAAU,GACVC,GApCDvB,IACDD,EAAenC,SAASC,cAAc,SACtCkC,EAAayB,GAAK,SAClB5D,SAAS6D,KAAK9C,YAAYoB,GAC1BC,EAAaD,EAAawB,OAEvBvB,GA+BP,IAAK,IAAIc,EAAQ,EAAGA,EAjBE,EAiByBA,IAAS,CACpD,MAAMY,EAAYb,EAAcC,GAChCQ,EAAQzB,KAAK6B,GACb,MAAMC,EAAmB,MAAbR,EACN,IAAIO,KAAaN,KACjBD,EAASZ,QAAQ,KAAM,IAAImB,KAAe,IAAIN,KACpDG,EAAMK,WAAWD,EAAKJ,EAAMM,SAASC,OACxC,CAED,OADAb,EAAYP,IAAIW,EAAKC,GACdA,CACX,CACA,SAASS,EAAmBC,GACxB,MAAM3D,EAAU,GAChB,IAAK,MAAMgD,KAAOW,EAAM,CACpB,MAAMxC,EAAMwC,EAAKX,GACjB,GAAW,MAAP7B,EAEJ,GAAI6B,EAAIY,WAAW,MAAuB,iBAARzC,EAC9B,IAAK,MAAM0C,KAAQ1C,EAAK,CACpB,MAAMrB,EAAIqB,EAAI0C,GACd,GAAS,MAAL/D,GAA0B,iBAANA,EACpB,SACJ,MACMmD,EAAUJ,EAAiB,IAAIG,IADxB,GAAGlB,EAAa+B,MAASvB,EAAaxC,MAEnDE,EAAQwB,KAAK,CAAEyB,UAASY,QAC3B,MAGL,GAAmB,iBAAR1C,EAAkB,CACzB,MACM8B,EAAUJ,EAAiB,IADpB,GAAGf,EAAakB,MAAQV,EAAanB,MAElDnB,EAAQwB,KAAK,CAAEyB,UAASY,KAAMb,GACjC,CACJ,CACD,OAAOhD,CACX,CAqBO,SAAS8D,EAAWC,GACvB,MAAO,KACH,MAAMC,EAAS,CAAA,EACf,IAAK,MAAMC,KAAQF,EAAQ,CACvB,MAEMd,EADUS,EADFK,EAAOE,IAAS,CAAE,GAERC,IAAIC,GAAKA,EAAElB,QAAQ,IAAImB,KAAK,KACpDJ,EAAOC,GAAQhB,CAClB,CACD,OAAOe,EAEf,iBC3GO,SAAaK,GAChB,GAAyB,mBAAdA,EAA0B,CACjC,MAAM/E,EAAK+E,IACX,KAAM/E,aAAcgF,aAChB,MAAM,IAAIC,MAAM,iDAGpB,YADAhF,SAASiF,KAAKlE,YAAYhB,EAE7B,CACD,KAAI,WAAY+E,IAAyC,mBAArBA,EAAUI,OAI9C,MAAM,IAAIF,MAAM,qCAHZF,EAAUI,QAIlB,uBHbO,SAAiB3F,GACpB,MAAoB,iBAANA,GAAwB,OAANA,IAA2B,IAAbA,EAAEd,EACpD,gCEyEO,YAAyB0G,GAC5B,MAAMC,EAAW,GACjB,IAAK,IAAIC,EAAI,EAAGA,EAvDM,EAuDiBA,IACnCD,EAASC,GAAK,GAelB,OAbAF,EAAOG,QAAQ,CAACC,EAAOC,KACnB,GAAqB,iBAAVD,EACP,OACJ,MAAMrC,EAAQuC,KAAKC,IAAIF,EAAOG,GACxBC,EAASR,EAASlC,GACxB,IAAK0C,EACD,OACJ,MAAMC,EAAQN,EAAMO,OAAOC,MAAM,OACjC,IAAK,MAAMC,KAAOH,EACVG,GACAJ,EAAO3D,KAAK+D,KAGjBZ,EAASvE,OAAOgE,KAAK,IAChC,mBAaO,YAA2BoB,GAC9B,MAAMC,EAAS,CAAA,EACf,IAAK,MAAMpD,KAAOmD,EACd,GAAKnD,EAEL,IAAK,MAAMW,KAAOX,EACdoD,EAAOzC,GAAO,IACPyC,EAAOzC,MACPX,EAAIW,IAInB,OAAOc,EAAW2B,EAAX3B,EACX,WEzHO,SAAgB4B,GACnB,MAAMC,EAAW,GACjB,IAAIC,EAAW,KACf,IAAK,MAAMC,KAAQ9F,OAAO+F,KAAKJ,GAAS,CACpC,MAAMK,EAAUL,EAAOG,GACvB,IAAKE,EACD,SACJ,GAAa,MAATF,EAAc,CACdD,EAAWG,EACX,QACH,CACD,MAAMD,EAAO,GACPE,EAAUH,EAAK3D,QAAQ,UAAYC,IACrC2D,EAAKtE,KAAKW,EAAE8D,MAAM,IACX,YAEXN,EAASnE,KAAK,CACV0E,MAAO,IAAIC,OAAO,IAAIH,MACtBF,OACAC,WAEP,CACD,IAAIK,EAAY,KACZC,EAAc,GAClB,SAASC,EAAWC,GAChB,MAAMC,EAAS,CAAA,EACf,IAAKD,EACD,OAAOC,EACX,IAAK,MAAO3G,EAAGC,KAAM,IAAI2G,gBAAgBF,GACrCC,EAAO3G,GAAKC,EAChB,OAAO0G,CACV,CAiBD,SAAS/B,IACL,MAAMiC,EAAcC,SAASC,SAAWD,SAASJ,OACjD,GAAIG,IAAgBL,EAChB,OACJA,EAAcK,EACd,MAAMpF,EArBV,SAAoBsF,GAChB,IAAK,MAAMV,MAAEA,EAAKJ,KAAEA,EAAIC,QAAEA,KAAaJ,EAAU,CAC7C,MAAMkB,EAAQD,EAASC,MAAMX,GAC7B,IAAKW,EACD,SACJ,MAAML,EAAS,CAAA,EAKf,OAJAV,EAAKjB,QAAQ,CAAC7B,EAAK4B,KACf4B,EAAOxD,GAAO8D,mBAAmBD,EAAMjC,EAAI,MAE/C7E,OAAOgH,OAAOP,EAAQF,EAAWK,SAASJ,SACnCR,EAAQS,EAClB,CACD,GAAIZ,EACA,OAAOA,EAAS,CAAA,GACpB,MAAM,IAAIrB,MAAM,qBAAqBqC,KACxC,CAMgBI,CAAWL,SAASC,UAC7BR,GAAaA,EAAUtF,YACvBvB,SAASiF,KAAKzD,YAAYqF,GAE9B7G,SAASiF,KAAKlE,YAAYgB,GAC1B8E,EAAY9E,CACf,CAGD,OAFA2F,OAAOC,iBAAiB,WAAYzC,GACpCA,IACO,CACHA,SACA,IAAAjD,CAAKqE,GACDsB,QAAQC,UAAU,KAAM,GAAIvB,GAC5BpB,GACH,EACD,OAAAvC,CAAQ2D,GACJsB,QAAQE,aAAa,KAAM,GAAIxB,GAC/BpB,GACH,EACD6C,KAAM,IAAMH,QAAQG,OAE5B,UJ1DO,SAAexH,GAClB,MAAMxB,EAAK,CACPN,CAACA,IAAQ,EACTQ,KAAM,IAAII,IACV,OAAIuC,GAEA,OAjBZ,SAAe7C,GACPJ,IACAI,EAAGE,KAAK6C,IAAInD,GACZA,EAAcK,KAAK8C,IAAI/C,GAE/B,CAWYiJ,CAAMjJ,GACCwB,CACV,EACD,OAAIqB,CAAIqG,GACJ,GAAIA,IAAO1H,EAAX,CAEAA,EAAI0H,EACJ,IAAK,MAAMpJ,KAAMsB,MAAM+H,KAAKnJ,EAAGE,MAC3BJ,GAHO,CAKd,GAEL,OAAOE,CACX"}
package/dist/styles.d.ts CHANGED
@@ -1,14 +1,11 @@
1
1
  export type CSSValue = string | number | (() => string | number);
2
- export interface CSSProperties {
3
- [key: string]: CSSValue | CSSProperties | undefined;
4
- }
5
2
  export interface StyleRule {
6
- [key: string]: CSSValue | CSSProperties | undefined;
3
+ [key: string]: CSSValue | StyleRule | undefined;
7
4
  }
8
5
  export type StylesMap = Record<string, StyleRule>;
9
6
  export type ClassNames<T extends StylesMap> = {
10
7
  [K in keyof T]: string;
11
8
  };
9
+ export declare function mergeClasses(...inputs: (string | undefined | null | false)[]): string;
12
10
  export declare function makeStyles<T extends StylesMap>(styles: T): () => ClassNames<T>;
13
- export declare const mergeClasses: (...classes: (string | undefined | null | false)[]) => string;
14
11
  export declare function mergeStyleSets<T extends StylesMap>(...sets: (Partial<T> | undefined)[]): ClassNames<T>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uraniyum",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.esm.js",
6
6
  "browser": "dist/index.min.js",
package/src/styles.ts CHANGED
@@ -1,11 +1,7 @@
1
1
  export type CSSValue = string | number | (() => string | number);
2
2
 
3
- export interface CSSProperties {
4
- [key: string]: CSSValue | CSSProperties | undefined;
5
- }
6
-
7
3
  export interface StyleRule {
8
- [key: string]: CSSValue | CSSProperties | undefined;
4
+ [key: string]: CSSValue | StyleRule | undefined;
9
5
  }
10
6
 
11
7
  export type StylesMap = Record<string, StyleRule>;
@@ -16,11 +12,9 @@ let styleSheet: CSSStyleSheet | null = null;
16
12
 
17
13
  function ensureStyleSheet(): CSSStyleSheet {
18
14
  if (!styleSheet) {
19
- if (!styleElement) {
20
- styleElement = document.createElement("style");
21
- styleElement.id = "styles";
22
- document.head.appendChild(styleElement);
23
- }
15
+ styleElement = document.createElement("style");
16
+ styleElement.id = "styles";
17
+ document.head.appendChild(styleElement);
24
18
  styleSheet = styleElement.sheet as CSSStyleSheet;
25
19
  }
26
20
  return styleSheet;
@@ -31,182 +25,135 @@ const camelToKebabCache = new Map<string, string>();
31
25
  function camelToKebab(str: string): string {
32
26
  const cached = camelToKebabCache.get(str);
33
27
  if (cached) return cached;
34
-
35
- const result = str.replace(/[A-Z]/g, m => "-" + m.toLowerCase());
36
- camelToKebabCache.set(str, result);
37
- return result;
28
+ const res = str.replace(/[A-Z]/g, m => "-" + m.toLowerCase());
29
+ camelToKebabCache.set(str, res);
30
+ return res;
38
31
  }
39
32
 
40
- type AtomicKey = string;
33
+ function resolveValue(v: CSSValue): string | number {
34
+ return typeof v === "function" ? v() : v;
35
+ }
41
36
 
42
- const atomicClassCache = new Map<AtomicKey, string>();
37
+ const PRECEDENCE_LAYERS = 3;
43
38
  let atomicCounter = 0;
44
39
 
45
- function nextAtomicClass(): string {
46
- return `a-${atomicCounter++}`;
40
+ function encode(n: number): string {
41
+ return n.toString(36);
42
+ }
43
+
44
+ function makeClassName(layer: number): string {
45
+ // looks like f1phragk
46
+ return `f${layer}${encode(atomicCounter++).padStart(5, "0")}`;
47
47
  }
48
48
 
49
- function registerAtomicRule(
49
+ type AtomicSignature = string;
50
+
51
+ const atomicCache = new Map<AtomicSignature, string[]>();
52
+
53
+ function getAtomicClasses(
50
54
  selector: string,
51
55
  decl: string,
52
- ): string {
56
+ ): string[] {
53
57
  const key = `${selector}|${decl}`;
54
58
 
55
- const cached = atomicClassCache.get(key);
59
+ const cached = atomicCache.get(key);
56
60
  if (cached) return cached;
57
61
 
58
- const className = nextAtomicClass();
59
- atomicClassCache.set(key, className);
60
-
61
- ensureStyleSheet().insertRule(
62
- `${selector.replace(/&/g, `.${className}`)}{${decl}}`,
63
- styleSheet!.cssRules.length,
64
- );
65
-
66
- return className;
67
- }
62
+ const classes: string[] = [];
63
+ const sheet = ensureStyleSheet();
68
64
 
69
- const KEYFRAMES_PREFIX = "@keyframes ";
70
- const keyframeCache = new Map<string, string>();
71
- let keyframeCounter = 0;
65
+ for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {
66
+ const className = makeClassName(layer);
67
+ classes.push(className);
72
68
 
73
- function registerKeyframes(
74
- name: string,
75
- frames: Record<string, any>,
76
- ): string {
77
- const signature = name + JSON.stringify(frames);
78
- const cached = keyframeCache.get(signature);
79
- if (cached) return cached;
69
+ const css =
70
+ selector === "&"
71
+ ? `.${className}{${decl}}`
72
+ : selector.replace(/&/g, `.${className}`) + `{${decl}}`;
80
73
 
81
- const unique = `${name}-${keyframeCounter++}`;
82
-
83
- const steps: string[] = [];
84
- for (const step in frames) {
85
- const decls = stringifyDecls(frames[step] ?? {}, new Map());
86
- steps.push(`${step}{${decls}}`);
74
+ sheet.insertRule(css, sheet.cssRules.length);
87
75
  }
88
76
 
89
- ensureStyleSheet().insertRule(
90
- `@keyframes ${unique}{${steps.join("")}}`,
91
- styleSheet!.cssRules.length,
92
- );
93
-
94
- keyframeCache.set(signature, unique);
95
- return unique;
77
+ atomicCache.set(key, classes);
78
+ return classes;
96
79
  }
97
80
 
98
- function stringifyDecls(
99
- props: Record<string, any>,
100
- keyframes: Map<string, string>,
101
- ): string {
102
- const out: string[] = [];
103
-
104
- for (const key in props) {
105
- const raw = props[key];
106
- if (raw == null || typeof raw === "object") continue;
107
-
108
- let val =
109
- typeof raw === "function" ? raw() : raw;
81
+ type AtomicEntry = {
82
+ classes: string[];
83
+ prop: string;
84
+ };
110
85
 
111
- if (typeof val === "string") {
112
- for (const [orig, uniq] of keyframes) {
113
- val = val.replaceAll(`$${orig}`, uniq);
114
- }
115
- }
116
-
117
- out.push(`${camelToKebab(key)}:${val}`);
118
- }
119
-
120
- return out.join(";");
121
- }
122
-
123
- function buildAtomicClasses(
124
- rule: StyleRule,
125
- keyframes: Map<string, string>,
126
- ): string[] {
127
- const classes: string[] = [];
86
+ function buildAtomicEntries(rule: StyleRule): AtomicEntry[] {
87
+ const entries: AtomicEntry[] = [];
128
88
 
129
89
  for (const key in rule) {
130
90
  const val = rule[key];
131
- if (!val) continue;
91
+ if (val == null) continue;
132
92
 
133
- if (key[0] === ":" && typeof val === "object") {
134
- const decls = stringifyDecls(val, keyframes);
135
- if (!decls) continue;
93
+ if (key.startsWith(":") && typeof val === "object") {
94
+ for (const prop in val) {
95
+ const v = val[prop];
96
+ if (v == null || typeof v === "object") continue;
136
97
 
137
- classes.push(
138
- registerAtomicRule(`&${key}`, decls),
139
- );
98
+ const decl = `${camelToKebab(prop)}:${resolveValue(v)}`;
99
+ const classes = getAtomicClasses(`&${key}`, decl);
100
+ entries.push({ classes, prop });
101
+ }
140
102
  continue;
141
103
  }
142
104
 
143
- if (key.startsWith("@media") && typeof val === "object") {
144
- const decls = stringifyDecls(val, keyframes);
145
- if (!decls) continue;
105
+ if (typeof val !== "object") {
106
+ const decl = `${camelToKebab(key)}:${resolveValue(val)}`;
107
+ const classes = getAtomicClasses("&", decl);
108
+ entries.push({ classes, prop: key });
109
+ }
110
+ }
146
111
 
147
- const className = nextAtomicClass();
148
- atomicClassCache.set(`${key}|${decls}`, className);
112
+ return entries;
113
+ }
149
114
 
150
- ensureStyleSheet().insertRule(
151
- `${key}{.${className}{${decls}}}`,
152
- styleSheet!.cssRules.length,
153
- );
115
+ export function mergeClasses(
116
+ ...inputs: (string | undefined | null | false)[]
117
+ ): string {
118
+ const perLayer: string[][] = [];
154
119
 
155
- classes.push(className);
156
- continue;
157
- }
120
+ for (let i = 0; i < PRECEDENCE_LAYERS; i++) {
121
+ perLayer[i] = [];
122
+ }
158
123
 
159
- if (typeof val !== "object") {
160
- let resolved =
161
- typeof val === "function" ? val() : val;
124
+ inputs.forEach((input, index) => {
125
+ if (typeof input !== "string") return;
162
126
 
163
- if (typeof resolved === "string") {
164
- for (const [orig, uniq] of keyframes) {
165
- resolved = resolved.replaceAll(`$${orig}`, uniq);
166
- }
167
- }
127
+ const layer = Math.min(index, PRECEDENCE_LAYERS - 1);
128
+
129
+ const bucket = perLayer[layer];
130
+ if (!bucket) return;
168
131
 
169
- const decl = `${camelToKebab(key)}:${resolved}`;
170
- classes.push(
171
- registerAtomicRule("&", decl),
172
- );
132
+ const parts = input.trim().split(/\s+/);
133
+ for (const cls of parts) {
134
+ if (cls) bucket.push(cls);
173
135
  }
174
- }
136
+ });
175
137
 
176
- return classes;
138
+ return perLayer.flat().join(" ");
177
139
  }
178
140
 
179
141
  export function makeStyles<T extends StylesMap>(styles: T) {
180
142
  return (): ClassNames<T> => {
181
- const classNames = {} as ClassNames<T>;
182
- const keyframesMap = new Map<string, string>();
183
-
184
- for (const key in styles) {
185
- if (!key.startsWith(KEYFRAMES_PREFIX)) continue;
186
-
187
- const name = key.slice(KEYFRAMES_PREFIX.length);
188
- const frames = styles[key] as any;
189
- const unique = registerKeyframes(name, frames);
190
- keyframesMap.set(name, unique);
191
- }
143
+ const result = {} as ClassNames<T>;
192
144
 
193
145
  for (const slot in styles) {
194
- if (slot.startsWith(KEYFRAMES_PREFIX)) continue;
195
-
196
146
  const rule = (styles[slot] ?? {}) as StyleRule;
197
- const classes = buildAtomicClasses(rule, keyframesMap);
147
+ const entries = buildAtomicEntries(rule);
198
148
 
199
- (classNames as any)[slot] = classes.join(" ");
149
+ const classes = entries.map(e => e.classes[0]).join(" ");
150
+ (result as any)[slot] = classes;
200
151
  }
201
152
 
202
- return classNames;
153
+ return result;
203
154
  };
204
155
  }
205
156
 
206
- export const mergeClasses = (
207
- ...classes: (string | undefined | null | false)[]
208
- ) => classes.filter(Boolean).join(" ");
209
-
210
157
  export function mergeStyleSets<T extends StylesMap>(
211
158
  ...sets: (Partial<T> | undefined)[]
212
159
  ): ClassNames<T> {
@@ -215,9 +162,10 @@ export function mergeStyleSets<T extends StylesMap>(
215
162
  for (const set of sets) {
216
163
  if (!set) continue;
217
164
  for (const key in set) {
218
- const prev = (merged[key] as StyleRule) ?? {};
219
- const cur = (set[key] as StyleRule) ?? {};
220
- merged[key] = { ...prev, ...cur };
165
+ merged[key] = {
166
+ ...(merged[key] as StyleRule),
167
+ ...(set[key] as StyleRule),
168
+ };
221
169
  }
222
170
  }
223
171