uraniyum 1.2.6 → 1.2.8
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 +71 -82
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +70 -83
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/styles.d.ts +2 -4
- package/package.json +1 -1
- package/src/styles.ts +105 -113
package/dist/index.esm.js
CHANGED
|
@@ -245,19 +245,25 @@ function add(component) {
|
|
|
245
245
|
throw new Error("Invalid component passed to add()");
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
document.
|
|
257
|
-
|
|
248
|
+
const PRECEDENCE_LAYERS = 3;
|
|
249
|
+
/* -------------------------------------------------------------------------- */
|
|
250
|
+
/* Stylesheet management (one <style> per layer) */
|
|
251
|
+
/* -------------------------------------------------------------------------- */
|
|
252
|
+
const styleElements = Array(PRECEDENCE_LAYERS).fill(null);
|
|
253
|
+
const styleSheets = Array(PRECEDENCE_LAYERS).fill(null);
|
|
254
|
+
function ensureStyleSheet(layer) {
|
|
255
|
+
if (!styleSheets[layer]) {
|
|
256
|
+
const el = document.createElement("style");
|
|
257
|
+
el.id = `styles-layer-${layer}`;
|
|
258
|
+
document.head.appendChild(el);
|
|
259
|
+
styleElements[layer] = el;
|
|
260
|
+
styleSheets[layer] = el.sheet;
|
|
258
261
|
}
|
|
259
|
-
return
|
|
262
|
+
return styleSheets[layer];
|
|
260
263
|
}
|
|
264
|
+
/* -------------------------------------------------------------------------- */
|
|
265
|
+
/* Utilities */
|
|
266
|
+
/* -------------------------------------------------------------------------- */
|
|
261
267
|
const camelToKebabCache = new Map();
|
|
262
268
|
function camelToKebab(str) {
|
|
263
269
|
const cached = camelToKebabCache.get(str);
|
|
@@ -277,24 +283,33 @@ function hashString(str) {
|
|
|
277
283
|
}
|
|
278
284
|
return (hash >>> 0).toString(36);
|
|
279
285
|
}
|
|
280
|
-
|
|
286
|
+
/* -------------------------------------------------------------------------- */
|
|
287
|
+
/* Atomic rule generation */
|
|
288
|
+
/* -------------------------------------------------------------------------- */
|
|
281
289
|
const atomicCache = new Map();
|
|
282
290
|
function makeClassName(signature, layer) {
|
|
283
291
|
return `f${hashString(`${layer}|${signature}`)}`;
|
|
284
292
|
}
|
|
293
|
+
function prefixSelector(selector, className) {
|
|
294
|
+
// handles: "&", "&:hover", "&:hover,&:active"
|
|
295
|
+
return selector
|
|
296
|
+
.split(",")
|
|
297
|
+
.map(part => part.trim().replace(/&/g, `.${className}`))
|
|
298
|
+
.join(",");
|
|
299
|
+
}
|
|
285
300
|
function getAtomicClasses(selector, decl) {
|
|
286
301
|
const signature = `${selector}|${decl}`;
|
|
287
302
|
const cached = atomicCache.get(signature);
|
|
288
303
|
if (cached)
|
|
289
304
|
return cached;
|
|
290
305
|
const classes = [];
|
|
291
|
-
const sheet = ensureStyleSheet();
|
|
292
306
|
for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {
|
|
293
307
|
const className = makeClassName(signature, layer);
|
|
294
308
|
classes.push(className);
|
|
295
309
|
const rule = selector === "&"
|
|
296
310
|
? `.${className}{${decl}}`
|
|
297
|
-
: selector
|
|
311
|
+
: `${prefixSelector(selector, className)}{${decl}}`;
|
|
312
|
+
const sheet = ensureStyleSheet(layer);
|
|
298
313
|
sheet.insertRule(rule, sheet.cssRules.length);
|
|
299
314
|
}
|
|
300
315
|
atomicCache.set(signature, classes);
|
|
@@ -325,6 +340,27 @@ function buildAtomicEntries(rule) {
|
|
|
325
340
|
}
|
|
326
341
|
return entries;
|
|
327
342
|
}
|
|
343
|
+
/* -------------------------------------------------------------------------- */
|
|
344
|
+
/* makeStyles */
|
|
345
|
+
/* -------------------------------------------------------------------------- */
|
|
346
|
+
function makeStyles(styles, layer = 0) {
|
|
347
|
+
return () => {
|
|
348
|
+
const result = {};
|
|
349
|
+
for (const slot in styles) {
|
|
350
|
+
const rule = (styles[slot] ?? {});
|
|
351
|
+
const entries = buildAtomicEntries(rule);
|
|
352
|
+
const classes = entries
|
|
353
|
+
.map(e => e.classes[layer])
|
|
354
|
+
.join(" ");
|
|
355
|
+
result[slot] = classes;
|
|
356
|
+
}
|
|
357
|
+
return result;
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
/* -------------------------------------------------------------------------- */
|
|
361
|
+
/* makeResetStyles */
|
|
362
|
+
/* -------------------------------------------------------------------------- */
|
|
363
|
+
const resetCache = new Map();
|
|
328
364
|
function stringifyRule(selector, styles) {
|
|
329
365
|
const rules = [];
|
|
330
366
|
const decls = [];
|
|
@@ -336,11 +372,6 @@ function stringifyRule(selector, styles) {
|
|
|
336
372
|
rules.push(...stringifyRule(`${selector}${key}`, val));
|
|
337
373
|
continue;
|
|
338
374
|
}
|
|
339
|
-
if (key.startsWith("@") && typeof val === "object") {
|
|
340
|
-
const inner = stringifyRule(selector, val).join("");
|
|
341
|
-
rules.push(`${key}{${inner}}`);
|
|
342
|
-
continue;
|
|
343
|
-
}
|
|
344
375
|
if (typeof val !== "object") {
|
|
345
376
|
decls.push(`${camelToKebab(key)}:${resolveValue(val)}`);
|
|
346
377
|
}
|
|
@@ -350,67 +381,6 @@ function stringifyRule(selector, styles) {
|
|
|
350
381
|
}
|
|
351
382
|
return rules;
|
|
352
383
|
}
|
|
353
|
-
function mergeClasses(...inputs) {
|
|
354
|
-
const perLayer = [];
|
|
355
|
-
for (let i = 0; i < PRECEDENCE_LAYERS; i++) {
|
|
356
|
-
perLayer[i] = [];
|
|
357
|
-
}
|
|
358
|
-
inputs.forEach((input, index) => {
|
|
359
|
-
if (typeof input !== "string")
|
|
360
|
-
return;
|
|
361
|
-
const layer = Math.min(index, PRECEDENCE_LAYERS - 1);
|
|
362
|
-
const bucket = perLayer[layer];
|
|
363
|
-
if (!bucket)
|
|
364
|
-
return;
|
|
365
|
-
const parts = input.trim().split(/\s+/);
|
|
366
|
-
for (const cls of parts) {
|
|
367
|
-
if (cls)
|
|
368
|
-
bucket.push(cls);
|
|
369
|
-
}
|
|
370
|
-
});
|
|
371
|
-
return perLayer.flat().join(" ");
|
|
372
|
-
}
|
|
373
|
-
function makeStyles(styles) {
|
|
374
|
-
return () => {
|
|
375
|
-
const result = {};
|
|
376
|
-
for (const slot in styles) {
|
|
377
|
-
const rule = (styles[slot] ?? {});
|
|
378
|
-
const entries = buildAtomicEntries(rule);
|
|
379
|
-
const classes = entries
|
|
380
|
-
.map(e => e.classes[PRECEDENCE_LAYERS - 1])
|
|
381
|
-
.join(" ");
|
|
382
|
-
result[slot] = classes;
|
|
383
|
-
}
|
|
384
|
-
return result;
|
|
385
|
-
};
|
|
386
|
-
}
|
|
387
|
-
function mergeStyleSets(...sets) {
|
|
388
|
-
const merged = {};
|
|
389
|
-
for (const set of sets) {
|
|
390
|
-
if (!set)
|
|
391
|
-
continue;
|
|
392
|
-
for (const key in set) {
|
|
393
|
-
merged[key] = {
|
|
394
|
-
...merged[key],
|
|
395
|
-
...set[key],
|
|
396
|
-
};
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
return makeStyles(merged)();
|
|
400
|
-
}
|
|
401
|
-
function defineStaticStyles(styles) {
|
|
402
|
-
const signature = JSON.stringify(styles);
|
|
403
|
-
const cached = staticCache.get(signature);
|
|
404
|
-
if (cached)
|
|
405
|
-
return cached;
|
|
406
|
-
const className = `r${hashString(signature)}`;
|
|
407
|
-
const decls = Object.entries(styles)
|
|
408
|
-
.map(([k, v]) => `${camelToKebab(k)}:${v}`)
|
|
409
|
-
.join(";");
|
|
410
|
-
ensureStyleSheet().insertRule(`.${className}{${decls}}`, styleSheet.cssRules.length);
|
|
411
|
-
staticCache.set(signature, className);
|
|
412
|
-
return className;
|
|
413
|
-
}
|
|
414
384
|
function makeResetStyles(styles) {
|
|
415
385
|
const signature = JSON.stringify(styles);
|
|
416
386
|
return () => {
|
|
@@ -420,7 +390,7 @@ function makeResetStyles(styles) {
|
|
|
420
390
|
const className = `r${hashString(signature)}`;
|
|
421
391
|
const selector = `.${className}`;
|
|
422
392
|
const rules = stringifyRule(selector, styles);
|
|
423
|
-
const sheet = ensureStyleSheet();
|
|
393
|
+
const sheet = ensureStyleSheet(0);
|
|
424
394
|
for (const rule of rules) {
|
|
425
395
|
sheet.insertRule(rule, sheet.cssRules.length);
|
|
426
396
|
}
|
|
@@ -428,6 +398,25 @@ function makeResetStyles(styles) {
|
|
|
428
398
|
return className;
|
|
429
399
|
};
|
|
430
400
|
}
|
|
401
|
+
/* -------------------------------------------------------------------------- */
|
|
402
|
+
/* mergeClasses (NO precedence logic here) */
|
|
403
|
+
/* -------------------------------------------------------------------------- */
|
|
404
|
+
function mergeClasses(...inputs) {
|
|
405
|
+
const seen = new Set();
|
|
406
|
+
const result = [];
|
|
407
|
+
for (const input of inputs) {
|
|
408
|
+
if (typeof input !== "string")
|
|
409
|
+
continue;
|
|
410
|
+
const parts = input.trim().split(/\s+/);
|
|
411
|
+
for (const cls of parts) {
|
|
412
|
+
if (!seen.has(cls)) {
|
|
413
|
+
seen.add(cls);
|
|
414
|
+
result.push(cls);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return result.join(" ");
|
|
419
|
+
}
|
|
431
420
|
|
|
432
|
-
export { STATE, add,
|
|
421
|
+
export { STATE, add, derive, isState$1 as isState, makeResetStyles, makeStyles, mergeClasses, router, state, tags };
|
|
433
422
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -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","const staticCache = new Map();\nconst resetCache = new Map();\nlet 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}\nfunction hashString(str) {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i);\n }\n return (hash >>> 0).toString(36);\n}\nconst PRECEDENCE_LAYERS = 3;\nconst atomicCache = new Map();\nfunction makeClassName(signature, layer) {\n return `f${hashString(`${layer}|${signature}`)}`;\n}\nfunction getAtomicClasses(selector, decl) {\n const signature = `${selector}|${decl}`;\n const cached = atomicCache.get(signature);\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(signature, layer);\n classes.push(className);\n const rule = selector === \"&\"\n ? `.${className}{${decl}}`\n : selector.replace(/&/g, `.${className}`) + `{${decl}}`;\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n atomicCache.set(signature, 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 });\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 });\n }\n }\n return entries;\n}\nfunction stringifyRule(selector, styles) {\n const rules = [];\n const decls = [];\n for (const key in styles) {\n const val = styles[key];\n if (val == null)\n continue;\n if (key.startsWith(\":\") && typeof val === \"object\") {\n rules.push(...stringifyRule(`${selector}${key}`, val));\n continue;\n }\n if (key.startsWith(\"@\") && typeof val === \"object\") {\n const inner = stringifyRule(selector, val).join(\"\");\n rules.push(`${key}{${inner}}`);\n continue;\n }\n if (typeof val !== \"object\") {\n decls.push(`${camelToKebab(key)}:${resolveValue(val)}`);\n }\n }\n if (decls.length) {\n rules.unshift(`${selector}{${decls.join(\";\")}}`);\n }\n return rules;\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\n .map(e => e.classes[PRECEDENCE_LAYERS - 1])\n .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}\nexport function defineStaticStyles(styles) {\n const signature = JSON.stringify(styles);\n const cached = staticCache.get(signature);\n if (cached)\n return cached;\n const className = `r${hashString(signature)}`;\n const decls = Object.entries(styles)\n .map(([k, v]) => `${camelToKebab(k)}:${v}`)\n .join(\";\");\n ensureStyleSheet().insertRule(`.${className}{${decls}}`, styleSheet.cssRules.length);\n staticCache.set(signature, className);\n return className;\n}\nexport function makeResetStyles(styles) {\n const signature = JSON.stringify(styles);\n return () => {\n const cached = resetCache.get(signature);\n if (cached)\n return cached;\n const className = `r${hashString(signature)}`;\n const selector = `.${className}`;\n const rules = stringifyRule(selector, styles);\n const sheet = ensureStyleSheet();\n for (const rule of rules) {\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n resetCache.set(signature, className);\n return className;\n };\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","const PRECEDENCE_LAYERS = 3;\n/* -------------------------------------------------------------------------- */\n/* Stylesheet management (one <style> per layer) */\n/* -------------------------------------------------------------------------- */\nconst styleElements = Array(PRECEDENCE_LAYERS).fill(null);\nconst styleSheets = Array(PRECEDENCE_LAYERS).fill(null);\nfunction ensureStyleSheet(layer) {\n if (!styleSheets[layer]) {\n const el = document.createElement(\"style\");\n el.id = `styles-layer-${layer}`;\n document.head.appendChild(el);\n styleElements[layer] = el;\n styleSheets[layer] = el.sheet;\n }\n return styleSheets[layer];\n}\n/* -------------------------------------------------------------------------- */\n/* Utilities */\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}\nfunction hashString(str) {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i);\n }\n return (hash >>> 0).toString(36);\n}\n/* -------------------------------------------------------------------------- */\n/* Atomic rule generation */\n/* -------------------------------------------------------------------------- */\nconst atomicCache = new Map();\nfunction makeClassName(signature, layer) {\n return `f${hashString(`${layer}|${signature}`)}`;\n}\nfunction prefixSelector(selector, className) {\n // handles: \"&\", \"&:hover\", \"&:hover,&:active\"\n return selector\n .split(\",\")\n .map(part => part.trim().replace(/&/g, `.${className}`))\n .join(\",\");\n}\nfunction getAtomicClasses(selector, decl) {\n const signature = `${selector}|${decl}`;\n const cached = atomicCache.get(signature);\n if (cached)\n return cached;\n const classes = [];\n for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {\n const className = makeClassName(signature, layer);\n classes.push(className);\n const rule = selector === \"&\"\n ? `.${className}{${decl}}`\n : `${prefixSelector(selector, className)}{${decl}}`;\n const sheet = ensureStyleSheet(layer);\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n atomicCache.set(signature, 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 });\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 });\n }\n }\n return entries;\n}\n/* -------------------------------------------------------------------------- */\n/* makeStyles */\n/* -------------------------------------------------------------------------- */\nexport function makeStyles(styles, layer = 0) {\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\n .map(e => e.classes[layer])\n .join(\" \");\n result[slot] = classes;\n }\n return result;\n };\n}\n/* -------------------------------------------------------------------------- */\n/* makeResetStyles */\n/* -------------------------------------------------------------------------- */\nconst resetCache = new Map();\nfunction stringifyRule(selector, styles) {\n const rules = [];\n const decls = [];\n for (const key in styles) {\n const val = styles[key];\n if (val == null)\n continue;\n if (key.startsWith(\":\") && typeof val === \"object\") {\n rules.push(...stringifyRule(`${selector}${key}`, val));\n continue;\n }\n if (typeof val !== \"object\") {\n decls.push(`${camelToKebab(key)}:${resolveValue(val)}`);\n }\n }\n if (decls.length) {\n rules.unshift(`${selector}{${decls.join(\";\")}}`);\n }\n return rules;\n}\nexport function makeResetStyles(styles) {\n const signature = JSON.stringify(styles);\n return () => {\n const cached = resetCache.get(signature);\n if (cached)\n return cached;\n const className = `r${hashString(signature)}`;\n const selector = `.${className}`;\n const rules = stringifyRule(selector, styles);\n const sheet = ensureStyleSheet(0);\n for (const rule of rules) {\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n resetCache.set(signature, className);\n return className;\n };\n}\n/* -------------------------------------------------------------------------- */\n/* mergeClasses (NO precedence logic here) */\n/* -------------------------------------------------------------------------- */\nexport function mergeClasses(...inputs) {\n const seen = new Set();\n const result = [];\n for (const input of inputs) {\n if (typeof input !== \"string\")\n continue;\n const parts = input.trim().split(/\\s+/);\n for (const cls of parts) {\n if (!seen.has(cls)) {\n seen.add(cls);\n result.push(cls);\n }\n }\n }\n return result.join(\" \");\n}\n"],"names":["isState"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -249,19 +249,25 @@ function add(component) {
|
|
|
249
249
|
throw new Error("Invalid component passed to add()");
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
-
const
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
document.
|
|
261
|
-
|
|
252
|
+
const PRECEDENCE_LAYERS = 3;
|
|
253
|
+
/* -------------------------------------------------------------------------- */
|
|
254
|
+
/* Stylesheet management (one <style> per layer) */
|
|
255
|
+
/* -------------------------------------------------------------------------- */
|
|
256
|
+
const styleElements = Array(PRECEDENCE_LAYERS).fill(null);
|
|
257
|
+
const styleSheets = Array(PRECEDENCE_LAYERS).fill(null);
|
|
258
|
+
function ensureStyleSheet(layer) {
|
|
259
|
+
if (!styleSheets[layer]) {
|
|
260
|
+
const el = document.createElement("style");
|
|
261
|
+
el.id = `styles-layer-${layer}`;
|
|
262
|
+
document.head.appendChild(el);
|
|
263
|
+
styleElements[layer] = el;
|
|
264
|
+
styleSheets[layer] = el.sheet;
|
|
262
265
|
}
|
|
263
|
-
return
|
|
266
|
+
return styleSheets[layer];
|
|
264
267
|
}
|
|
268
|
+
/* -------------------------------------------------------------------------- */
|
|
269
|
+
/* Utilities */
|
|
270
|
+
/* -------------------------------------------------------------------------- */
|
|
265
271
|
const camelToKebabCache = new Map();
|
|
266
272
|
function camelToKebab(str) {
|
|
267
273
|
const cached = camelToKebabCache.get(str);
|
|
@@ -281,24 +287,33 @@ function hashString(str) {
|
|
|
281
287
|
}
|
|
282
288
|
return (hash >>> 0).toString(36);
|
|
283
289
|
}
|
|
284
|
-
|
|
290
|
+
/* -------------------------------------------------------------------------- */
|
|
291
|
+
/* Atomic rule generation */
|
|
292
|
+
/* -------------------------------------------------------------------------- */
|
|
285
293
|
const atomicCache = new Map();
|
|
286
294
|
function makeClassName(signature, layer) {
|
|
287
295
|
return `f${hashString(`${layer}|${signature}`)}`;
|
|
288
296
|
}
|
|
297
|
+
function prefixSelector(selector, className) {
|
|
298
|
+
// handles: "&", "&:hover", "&:hover,&:active"
|
|
299
|
+
return selector
|
|
300
|
+
.split(",")
|
|
301
|
+
.map(part => part.trim().replace(/&/g, `.${className}`))
|
|
302
|
+
.join(",");
|
|
303
|
+
}
|
|
289
304
|
function getAtomicClasses(selector, decl) {
|
|
290
305
|
const signature = `${selector}|${decl}`;
|
|
291
306
|
const cached = atomicCache.get(signature);
|
|
292
307
|
if (cached)
|
|
293
308
|
return cached;
|
|
294
309
|
const classes = [];
|
|
295
|
-
const sheet = ensureStyleSheet();
|
|
296
310
|
for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {
|
|
297
311
|
const className = makeClassName(signature, layer);
|
|
298
312
|
classes.push(className);
|
|
299
313
|
const rule = selector === "&"
|
|
300
314
|
? `.${className}{${decl}}`
|
|
301
|
-
: selector
|
|
315
|
+
: `${prefixSelector(selector, className)}{${decl}}`;
|
|
316
|
+
const sheet = ensureStyleSheet(layer);
|
|
302
317
|
sheet.insertRule(rule, sheet.cssRules.length);
|
|
303
318
|
}
|
|
304
319
|
atomicCache.set(signature, classes);
|
|
@@ -329,6 +344,27 @@ function buildAtomicEntries(rule) {
|
|
|
329
344
|
}
|
|
330
345
|
return entries;
|
|
331
346
|
}
|
|
347
|
+
/* -------------------------------------------------------------------------- */
|
|
348
|
+
/* makeStyles */
|
|
349
|
+
/* -------------------------------------------------------------------------- */
|
|
350
|
+
function makeStyles(styles, layer = 0) {
|
|
351
|
+
return () => {
|
|
352
|
+
const result = {};
|
|
353
|
+
for (const slot in styles) {
|
|
354
|
+
const rule = (styles[slot] ?? {});
|
|
355
|
+
const entries = buildAtomicEntries(rule);
|
|
356
|
+
const classes = entries
|
|
357
|
+
.map(e => e.classes[layer])
|
|
358
|
+
.join(" ");
|
|
359
|
+
result[slot] = classes;
|
|
360
|
+
}
|
|
361
|
+
return result;
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
/* -------------------------------------------------------------------------- */
|
|
365
|
+
/* makeResetStyles */
|
|
366
|
+
/* -------------------------------------------------------------------------- */
|
|
367
|
+
const resetCache = new Map();
|
|
332
368
|
function stringifyRule(selector, styles) {
|
|
333
369
|
const rules = [];
|
|
334
370
|
const decls = [];
|
|
@@ -340,11 +376,6 @@ function stringifyRule(selector, styles) {
|
|
|
340
376
|
rules.push(...stringifyRule(`${selector}${key}`, val));
|
|
341
377
|
continue;
|
|
342
378
|
}
|
|
343
|
-
if (key.startsWith("@") && typeof val === "object") {
|
|
344
|
-
const inner = stringifyRule(selector, val).join("");
|
|
345
|
-
rules.push(`${key}{${inner}}`);
|
|
346
|
-
continue;
|
|
347
|
-
}
|
|
348
379
|
if (typeof val !== "object") {
|
|
349
380
|
decls.push(`${camelToKebab(key)}:${resolveValue(val)}`);
|
|
350
381
|
}
|
|
@@ -354,67 +385,6 @@ function stringifyRule(selector, styles) {
|
|
|
354
385
|
}
|
|
355
386
|
return rules;
|
|
356
387
|
}
|
|
357
|
-
function mergeClasses(...inputs) {
|
|
358
|
-
const perLayer = [];
|
|
359
|
-
for (let i = 0; i < PRECEDENCE_LAYERS; i++) {
|
|
360
|
-
perLayer[i] = [];
|
|
361
|
-
}
|
|
362
|
-
inputs.forEach((input, index) => {
|
|
363
|
-
if (typeof input !== "string")
|
|
364
|
-
return;
|
|
365
|
-
const layer = Math.min(index, PRECEDENCE_LAYERS - 1);
|
|
366
|
-
const bucket = perLayer[layer];
|
|
367
|
-
if (!bucket)
|
|
368
|
-
return;
|
|
369
|
-
const parts = input.trim().split(/\s+/);
|
|
370
|
-
for (const cls of parts) {
|
|
371
|
-
if (cls)
|
|
372
|
-
bucket.push(cls);
|
|
373
|
-
}
|
|
374
|
-
});
|
|
375
|
-
return perLayer.flat().join(" ");
|
|
376
|
-
}
|
|
377
|
-
function makeStyles(styles) {
|
|
378
|
-
return () => {
|
|
379
|
-
const result = {};
|
|
380
|
-
for (const slot in styles) {
|
|
381
|
-
const rule = (styles[slot] ?? {});
|
|
382
|
-
const entries = buildAtomicEntries(rule);
|
|
383
|
-
const classes = entries
|
|
384
|
-
.map(e => e.classes[PRECEDENCE_LAYERS - 1])
|
|
385
|
-
.join(" ");
|
|
386
|
-
result[slot] = classes;
|
|
387
|
-
}
|
|
388
|
-
return result;
|
|
389
|
-
};
|
|
390
|
-
}
|
|
391
|
-
function mergeStyleSets(...sets) {
|
|
392
|
-
const merged = {};
|
|
393
|
-
for (const set of sets) {
|
|
394
|
-
if (!set)
|
|
395
|
-
continue;
|
|
396
|
-
for (const key in set) {
|
|
397
|
-
merged[key] = {
|
|
398
|
-
...merged[key],
|
|
399
|
-
...set[key],
|
|
400
|
-
};
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
return makeStyles(merged)();
|
|
404
|
-
}
|
|
405
|
-
function defineStaticStyles(styles) {
|
|
406
|
-
const signature = JSON.stringify(styles);
|
|
407
|
-
const cached = staticCache.get(signature);
|
|
408
|
-
if (cached)
|
|
409
|
-
return cached;
|
|
410
|
-
const className = `r${hashString(signature)}`;
|
|
411
|
-
const decls = Object.entries(styles)
|
|
412
|
-
.map(([k, v]) => `${camelToKebab(k)}:${v}`)
|
|
413
|
-
.join(";");
|
|
414
|
-
ensureStyleSheet().insertRule(`.${className}{${decls}}`, styleSheet.cssRules.length);
|
|
415
|
-
staticCache.set(signature, className);
|
|
416
|
-
return className;
|
|
417
|
-
}
|
|
418
388
|
function makeResetStyles(styles) {
|
|
419
389
|
const signature = JSON.stringify(styles);
|
|
420
390
|
return () => {
|
|
@@ -424,7 +394,7 @@ function makeResetStyles(styles) {
|
|
|
424
394
|
const className = `r${hashString(signature)}`;
|
|
425
395
|
const selector = `.${className}`;
|
|
426
396
|
const rules = stringifyRule(selector, styles);
|
|
427
|
-
const sheet = ensureStyleSheet();
|
|
397
|
+
const sheet = ensureStyleSheet(0);
|
|
428
398
|
for (const rule of rules) {
|
|
429
399
|
sheet.insertRule(rule, sheet.cssRules.length);
|
|
430
400
|
}
|
|
@@ -432,16 +402,33 @@ function makeResetStyles(styles) {
|
|
|
432
402
|
return className;
|
|
433
403
|
};
|
|
434
404
|
}
|
|
405
|
+
/* -------------------------------------------------------------------------- */
|
|
406
|
+
/* mergeClasses (NO precedence logic here) */
|
|
407
|
+
/* -------------------------------------------------------------------------- */
|
|
408
|
+
function mergeClasses(...inputs) {
|
|
409
|
+
const seen = new Set();
|
|
410
|
+
const result = [];
|
|
411
|
+
for (const input of inputs) {
|
|
412
|
+
if (typeof input !== "string")
|
|
413
|
+
continue;
|
|
414
|
+
const parts = input.trim().split(/\s+/);
|
|
415
|
+
for (const cls of parts) {
|
|
416
|
+
if (!seen.has(cls)) {
|
|
417
|
+
seen.add(cls);
|
|
418
|
+
result.push(cls);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
return result.join(" ");
|
|
423
|
+
}
|
|
435
424
|
|
|
436
425
|
exports.STATE = STATE;
|
|
437
426
|
exports.add = add;
|
|
438
|
-
exports.defineStaticStyles = defineStaticStyles;
|
|
439
427
|
exports.derive = derive;
|
|
440
428
|
exports.isState = isState$1;
|
|
441
429
|
exports.makeResetStyles = makeResetStyles;
|
|
442
430
|
exports.makeStyles = makeStyles;
|
|
443
431
|
exports.mergeClasses = mergeClasses;
|
|
444
|
-
exports.mergeStyleSets = mergeStyleSets;
|
|
445
432
|
exports.router = router;
|
|
446
433
|
exports.state = state;
|
|
447
434
|
exports.tags = tags;
|
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","const staticCache = new Map();\nconst resetCache = new Map();\nlet 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}\nfunction hashString(str) {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i);\n }\n return (hash >>> 0).toString(36);\n}\nconst PRECEDENCE_LAYERS = 3;\nconst atomicCache = new Map();\nfunction makeClassName(signature, layer) {\n return `f${hashString(`${layer}|${signature}`)}`;\n}\nfunction getAtomicClasses(selector, decl) {\n const signature = `${selector}|${decl}`;\n const cached = atomicCache.get(signature);\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(signature, layer);\n classes.push(className);\n const rule = selector === \"&\"\n ? `.${className}{${decl}}`\n : selector.replace(/&/g, `.${className}`) + `{${decl}}`;\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n atomicCache.set(signature, 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 });\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 });\n }\n }\n return entries;\n}\nfunction stringifyRule(selector, styles) {\n const rules = [];\n const decls = [];\n for (const key in styles) {\n const val = styles[key];\n if (val == null)\n continue;\n if (key.startsWith(\":\") && typeof val === \"object\") {\n rules.push(...stringifyRule(`${selector}${key}`, val));\n continue;\n }\n if (key.startsWith(\"@\") && typeof val === \"object\") {\n const inner = stringifyRule(selector, val).join(\"\");\n rules.push(`${key}{${inner}}`);\n continue;\n }\n if (typeof val !== \"object\") {\n decls.push(`${camelToKebab(key)}:${resolveValue(val)}`);\n }\n }\n if (decls.length) {\n rules.unshift(`${selector}{${decls.join(\";\")}}`);\n }\n return rules;\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\n .map(e => e.classes[PRECEDENCE_LAYERS - 1])\n .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}\nexport function defineStaticStyles(styles) {\n const signature = JSON.stringify(styles);\n const cached = staticCache.get(signature);\n if (cached)\n return cached;\n const className = `r${hashString(signature)}`;\n const decls = Object.entries(styles)\n .map(([k, v]) => `${camelToKebab(k)}:${v}`)\n .join(\";\");\n ensureStyleSheet().insertRule(`.${className}{${decls}}`, styleSheet.cssRules.length);\n staticCache.set(signature, className);\n return className;\n}\nexport function makeResetStyles(styles) {\n const signature = JSON.stringify(styles);\n return () => {\n const cached = resetCache.get(signature);\n if (cached)\n return cached;\n const className = `r${hashString(signature)}`;\n const selector = `.${className}`;\n const rules = stringifyRule(selector, styles);\n const sheet = ensureStyleSheet();\n for (const rule of rules) {\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n resetCache.set(signature, className);\n return className;\n };\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","const PRECEDENCE_LAYERS = 3;\n/* -------------------------------------------------------------------------- */\n/* Stylesheet management (one <style> per layer) */\n/* -------------------------------------------------------------------------- */\nconst styleElements = Array(PRECEDENCE_LAYERS).fill(null);\nconst styleSheets = Array(PRECEDENCE_LAYERS).fill(null);\nfunction ensureStyleSheet(layer) {\n if (!styleSheets[layer]) {\n const el = document.createElement(\"style\");\n el.id = `styles-layer-${layer}`;\n document.head.appendChild(el);\n styleElements[layer] = el;\n styleSheets[layer] = el.sheet;\n }\n return styleSheets[layer];\n}\n/* -------------------------------------------------------------------------- */\n/* Utilities */\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}\nfunction hashString(str) {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i);\n }\n return (hash >>> 0).toString(36);\n}\n/* -------------------------------------------------------------------------- */\n/* Atomic rule generation */\n/* -------------------------------------------------------------------------- */\nconst atomicCache = new Map();\nfunction makeClassName(signature, layer) {\n return `f${hashString(`${layer}|${signature}`)}`;\n}\nfunction prefixSelector(selector, className) {\n // handles: \"&\", \"&:hover\", \"&:hover,&:active\"\n return selector\n .split(\",\")\n .map(part => part.trim().replace(/&/g, `.${className}`))\n .join(\",\");\n}\nfunction getAtomicClasses(selector, decl) {\n const signature = `${selector}|${decl}`;\n const cached = atomicCache.get(signature);\n if (cached)\n return cached;\n const classes = [];\n for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {\n const className = makeClassName(signature, layer);\n classes.push(className);\n const rule = selector === \"&\"\n ? `.${className}{${decl}}`\n : `${prefixSelector(selector, className)}{${decl}}`;\n const sheet = ensureStyleSheet(layer);\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n atomicCache.set(signature, 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 });\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 });\n }\n }\n return entries;\n}\n/* -------------------------------------------------------------------------- */\n/* makeStyles */\n/* -------------------------------------------------------------------------- */\nexport function makeStyles(styles, layer = 0) {\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\n .map(e => e.classes[layer])\n .join(\" \");\n result[slot] = classes;\n }\n return result;\n };\n}\n/* -------------------------------------------------------------------------- */\n/* makeResetStyles */\n/* -------------------------------------------------------------------------- */\nconst resetCache = new Map();\nfunction stringifyRule(selector, styles) {\n const rules = [];\n const decls = [];\n for (const key in styles) {\n const val = styles[key];\n if (val == null)\n continue;\n if (key.startsWith(\":\") && typeof val === \"object\") {\n rules.push(...stringifyRule(`${selector}${key}`, val));\n continue;\n }\n if (typeof val !== \"object\") {\n decls.push(`${camelToKebab(key)}:${resolveValue(val)}`);\n }\n }\n if (decls.length) {\n rules.unshift(`${selector}{${decls.join(\";\")}}`);\n }\n return rules;\n}\nexport function makeResetStyles(styles) {\n const signature = JSON.stringify(styles);\n return () => {\n const cached = resetCache.get(signature);\n if (cached)\n return cached;\n const className = `r${hashString(signature)}`;\n const selector = `.${className}`;\n const rules = stringifyRule(selector, styles);\n const sheet = ensureStyleSheet(0);\n for (const rule of rules) {\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n resetCache.set(signature, className);\n return className;\n };\n}\n/* -------------------------------------------------------------------------- */\n/* mergeClasses (NO precedence logic here) */\n/* -------------------------------------------------------------------------- */\nexport function mergeClasses(...inputs) {\n const seen = new Set();\n const result = [];\n for (const input of inputs) {\n if (typeof input !== \"string\")\n continue;\n const parts = input.trim().split(/\\s+/);\n for (const cls of parts) {\n if (!seen.has(cls)) {\n seen.add(cls);\n result.push(cls);\n }\n }\n }\n return result.join(\" \");\n}\n"],"names":["isState"],"mappings":"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"}
|
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)})}const u=
|
|
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)})}const u=Array(3).fill(null),f=Array(3).fill(null);function a(t){if(!f[t]){const n=document.createElement("style");n.id=`styles-layer-${t}`,document.head.appendChild(n),u[t]=n,f[t]=n.sheet}return f[t]}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}function p(t){return"function"==typeof t?t():t}function h(t){let n=5381;for(let e=0;e<t.length;e++)n=33*n^t.charCodeAt(e);return(n>>>0).toString(36)}const y=new Map;function m(t,n){return`f${h(`${n}|${t}`)}`}function g(t,n){return t.split(",").map(t=>t.trim().replace(/&/g,`.${n}`)).join(",")}function b(t,n){const e=`${t}|${n}`,o=y.get(e);if(o)return o;const r=[];for(let o=0;o<3;o++){const s=m(e,o);r.push(s);const c="&"===t?`.${s}{${n}}`:`${g(t,s)}{${n}}`,i=a(o);i.insertRule(c,i.cssRules.length)}return y.set(e,r),r}function $(t){const n=[];for(const e in t){const o=t[e];if(null!=o)if(e.startsWith(":")&&"object"==typeof o)for(const t in o){const r=o[t];if(null==r||"object"==typeof r)continue;const s=b(`&${e}`,`${d(t)}:${p(r)}`);n.push({classes:s})}else if("object"!=typeof o){const t=b("&",`${d(e)}:${p(o)}`);n.push({classes:t})}}return n}const S=new Map;function w(t,n){const e=[],o=[];for(const r in n){const s=n[r];null!=s&&(r.startsWith(":")&&"object"==typeof s?e.push(...w(`${t}${r}`,s)):"object"!=typeof s&&o.push(`${d(r)}:${p(s)}`))}return o.length&&e.unshift(`${t}{${o.join(";")}}`),e}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.makeResetStyles=function(t){const n=JSON.stringify(t);return()=>{const e=S.get(n);if(e)return e;const o=`r${h(n)}`,r=w(`.${o}`,t),s=a(0);for(const t of r)s.insertRule(t,s.cssRules.length);return S.set(n,o),o}},t.makeStyles=function(t,n=0){return()=>{const e={};for(const o in t){const r=$(t[o]??{}).map(t=>t.classes[n]).join(" ");e[o]=r}return e}},t.mergeClasses=function(...t){const n=new Set,e=[];for(const o of t){if("string"!=typeof o)continue;const t=o.trim().split(/\s+/);for(const o of t)n.has(o)||(n.add(o),e.push(o))}return e.join(" ")},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})});
|
|
2
2
|
//# sourceMappingURL=index.min.js.map
|
package/dist/index.min.js.map
CHANGED
|
@@ -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","const staticCache = new Map();\nconst resetCache = new Map();\nlet 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}\nfunction hashString(str) {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i);\n }\n return (hash >>> 0).toString(36);\n}\nconst PRECEDENCE_LAYERS = 3;\nconst atomicCache = new Map();\nfunction makeClassName(signature, layer) {\n return `f${hashString(`${layer}|${signature}`)}`;\n}\nfunction getAtomicClasses(selector, decl) {\n const signature = `${selector}|${decl}`;\n const cached = atomicCache.get(signature);\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(signature, layer);\n classes.push(className);\n const rule = selector === \"&\"\n ? `.${className}{${decl}}`\n : selector.replace(/&/g, `.${className}`) + `{${decl}}`;\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n atomicCache.set(signature, 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 });\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 });\n }\n }\n return entries;\n}\nfunction stringifyRule(selector, styles) {\n const rules = [];\n const decls = [];\n for (const key in styles) {\n const val = styles[key];\n if (val == null)\n continue;\n if (key.startsWith(\":\") && typeof val === \"object\") {\n rules.push(...stringifyRule(`${selector}${key}`, val));\n continue;\n }\n if (key.startsWith(\"@\") && typeof val === \"object\") {\n const inner = stringifyRule(selector, val).join(\"\");\n rules.push(`${key}{${inner}}`);\n continue;\n }\n if (typeof val !== \"object\") {\n decls.push(`${camelToKebab(key)}:${resolveValue(val)}`);\n }\n }\n if (decls.length) {\n rules.unshift(`${selector}{${decls.join(\";\")}}`);\n }\n return rules;\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\n .map(e => e.classes[PRECEDENCE_LAYERS - 1])\n .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}\nexport function defineStaticStyles(styles) {\n const signature = JSON.stringify(styles);\n const cached = staticCache.get(signature);\n if (cached)\n return cached;\n const className = `r${hashString(signature)}`;\n const decls = Object.entries(styles)\n .map(([k, v]) => `${camelToKebab(k)}:${v}`)\n .join(\";\");\n ensureStyleSheet().insertRule(`.${className}{${decls}}`, styleSheet.cssRules.length);\n staticCache.set(signature, className);\n return className;\n}\nexport function makeResetStyles(styles) {\n const signature = JSON.stringify(styles);\n return () => {\n const cached = resetCache.get(signature);\n if (cached)\n return cached;\n const className = `r${hashString(signature)}`;\n const selector = `.${className}`;\n const rules = stringifyRule(selector, styles);\n const sheet = ensureStyleSheet();\n for (const rule of rules) {\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n resetCache.set(signature, className);\n return className;\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","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","staticCache","Map","resetCache","styleElement","styleSheet","ensureStyleSheet","id","head","sheet","camelToKebabCache","camelToKebab","str","cached","res","replace","m","toLowerCase","set","resolveValue","hashString","hash","i","length","charCodeAt","toString","atomicCache","makeClassName","signature","layer","getAtomicClasses","selector","decl","classes","className","rule","insertRule","cssRules","buildAtomicEntries","key","startsWith","prop","stringifyRule","styles","rules","decls","inner","join","makeStyles","result","slot","map","e","PRECEDENCE_LAYERS","component","HTMLElement","Error","body","render","JSON","stringify","inputs","perLayer","forEach","input","index","Math","min","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":"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"}
|
|
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","const PRECEDENCE_LAYERS = 3;\n/* -------------------------------------------------------------------------- */\n/* Stylesheet management (one <style> per layer) */\n/* -------------------------------------------------------------------------- */\nconst styleElements = Array(PRECEDENCE_LAYERS).fill(null);\nconst styleSheets = Array(PRECEDENCE_LAYERS).fill(null);\nfunction ensureStyleSheet(layer) {\n if (!styleSheets[layer]) {\n const el = document.createElement(\"style\");\n el.id = `styles-layer-${layer}`;\n document.head.appendChild(el);\n styleElements[layer] = el;\n styleSheets[layer] = el.sheet;\n }\n return styleSheets[layer];\n}\n/* -------------------------------------------------------------------------- */\n/* Utilities */\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}\nfunction hashString(str) {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i);\n }\n return (hash >>> 0).toString(36);\n}\n/* -------------------------------------------------------------------------- */\n/* Atomic rule generation */\n/* -------------------------------------------------------------------------- */\nconst atomicCache = new Map();\nfunction makeClassName(signature, layer) {\n return `f${hashString(`${layer}|${signature}`)}`;\n}\nfunction prefixSelector(selector, className) {\n // handles: \"&\", \"&:hover\", \"&:hover,&:active\"\n return selector\n .split(\",\")\n .map(part => part.trim().replace(/&/g, `.${className}`))\n .join(\",\");\n}\nfunction getAtomicClasses(selector, decl) {\n const signature = `${selector}|${decl}`;\n const cached = atomicCache.get(signature);\n if (cached)\n return cached;\n const classes = [];\n for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {\n const className = makeClassName(signature, layer);\n classes.push(className);\n const rule = selector === \"&\"\n ? `.${className}{${decl}}`\n : `${prefixSelector(selector, className)}{${decl}}`;\n const sheet = ensureStyleSheet(layer);\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n atomicCache.set(signature, 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 });\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 });\n }\n }\n return entries;\n}\n/* -------------------------------------------------------------------------- */\n/* makeStyles */\n/* -------------------------------------------------------------------------- */\nexport function makeStyles(styles, layer = 0) {\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\n .map(e => e.classes[layer])\n .join(\" \");\n result[slot] = classes;\n }\n return result;\n };\n}\n/* -------------------------------------------------------------------------- */\n/* makeResetStyles */\n/* -------------------------------------------------------------------------- */\nconst resetCache = new Map();\nfunction stringifyRule(selector, styles) {\n const rules = [];\n const decls = [];\n for (const key in styles) {\n const val = styles[key];\n if (val == null)\n continue;\n if (key.startsWith(\":\") && typeof val === \"object\") {\n rules.push(...stringifyRule(`${selector}${key}`, val));\n continue;\n }\n if (typeof val !== \"object\") {\n decls.push(`${camelToKebab(key)}:${resolveValue(val)}`);\n }\n }\n if (decls.length) {\n rules.unshift(`${selector}{${decls.join(\";\")}}`);\n }\n return rules;\n}\nexport function makeResetStyles(styles) {\n const signature = JSON.stringify(styles);\n return () => {\n const cached = resetCache.get(signature);\n if (cached)\n return cached;\n const className = `r${hashString(signature)}`;\n const selector = `.${className}`;\n const rules = stringifyRule(selector, styles);\n const sheet = ensureStyleSheet(0);\n for (const rule of rules) {\n sheet.insertRule(rule, sheet.cssRules.length);\n }\n resetCache.set(signature, className);\n return className;\n };\n}\n/* -------------------------------------------------------------------------- */\n/* mergeClasses (NO precedence logic here) */\n/* -------------------------------------------------------------------------- */\nexport function mergeClasses(...inputs) {\n const seen = new Set();\n const result = [];\n for (const input of inputs) {\n if (typeof input !== \"string\")\n continue;\n const parts = input.trim().split(/\\s+/);\n for (const cls of parts) {\n if (!seen.has(cls)) {\n seen.add(cls);\n result.push(cls);\n }\n }\n }\n return result.join(\" \");\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","styleElements","fill","styleSheets","ensureStyleSheet","layer","id","head","sheet","camelToKebabCache","Map","camelToKebab","str","cached","res","replace","m","toLowerCase","set","resolveValue","hashString","hash","i","length","charCodeAt","toString","atomicCache","makeClassName","signature","prefixSelector","selector","className","split","map","part","trim","join","getAtomicClasses","decl","classes","rule","insertRule","cssRules","buildAtomicEntries","key","startsWith","prop","resetCache","stringifyRule","styles","rules","decls","component","HTMLElement","Error","body","render","JSON","stringify","result","slot","e","inputs","seen","input","parts","cls","has","routes","patterns","wildcard","path","keys","handler","pattern","slice","regex","RegExp","currentEl","currentPath","parseQuery","search","params","URLSearchParams","newFullPath","location","pathname","match","forEach","decodeURIComponent","assign","matchRoute","window","addEventListener","history","pushState","replaceState","back","track","nv","from"],"mappings":"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"}
|
package/dist/styles.d.ts
CHANGED
|
@@ -6,8 +6,6 @@ export type StylesMap = Record<string, StyleRule>;
|
|
|
6
6
|
export type ClassNames<T extends StylesMap> = {
|
|
7
7
|
[K in keyof T]: string;
|
|
8
8
|
};
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function makeStyles<T extends StylesMap>(styles: T): () => ClassNames<T>;
|
|
11
|
-
export declare function mergeStyleSets<T extends StylesMap>(...sets: (Partial<T> | undefined)[]): ClassNames<T>;
|
|
12
|
-
export declare function defineStaticStyles(styles: Record<string, string | number>): string;
|
|
9
|
+
export declare function makeStyles<T extends StylesMap>(styles: T, layer?: number): () => ClassNames<T>;
|
|
13
10
|
export declare function makeResetStyles(styles: StyleRule): () => string;
|
|
11
|
+
export declare function mergeClasses(...inputs: (string | undefined | null | false)[]): string;
|
package/package.json
CHANGED
package/src/styles.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
export type CSSValue = string | number | (() => string | number);
|
|
2
|
-
const staticCache = new Map<string, string>();
|
|
3
|
-
const resetCache = new Map<string, string>();
|
|
4
2
|
|
|
5
3
|
export interface StyleRule {
|
|
6
4
|
[key: string]: CSSValue | StyleRule | undefined;
|
|
@@ -9,24 +7,41 @@ export interface StyleRule {
|
|
|
9
7
|
export type StylesMap = Record<string, StyleRule>;
|
|
10
8
|
export type ClassNames<T extends StylesMap> = { [K in keyof T]: string };
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
const PRECEDENCE_LAYERS = 3;
|
|
11
|
+
|
|
12
|
+
/* -------------------------------------------------------------------------- */
|
|
13
|
+
/* Stylesheet management (one <style> per layer) */
|
|
14
|
+
/* -------------------------------------------------------------------------- */
|
|
15
|
+
|
|
16
|
+
const styleElements: (HTMLStyleElement | null)[] =
|
|
17
|
+
Array(PRECEDENCE_LAYERS).fill(null);
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
const styleSheets: (CSSStyleSheet | null)[] =
|
|
20
|
+
Array(PRECEDENCE_LAYERS).fill(null);
|
|
21
|
+
|
|
22
|
+
function ensureStyleSheet(layer: number): CSSStyleSheet {
|
|
23
|
+
if (!styleSheets[layer]) {
|
|
24
|
+
const el = document.createElement("style");
|
|
25
|
+
el.id = `styles-layer-${layer}`;
|
|
26
|
+
document.head.appendChild(el);
|
|
27
|
+
|
|
28
|
+
styleElements[layer] = el;
|
|
29
|
+
styleSheets[layer] = el.sheet as CSSStyleSheet;
|
|
21
30
|
}
|
|
22
|
-
|
|
31
|
+
|
|
32
|
+
return styleSheets[layer]!;
|
|
23
33
|
}
|
|
24
34
|
|
|
35
|
+
/* -------------------------------------------------------------------------- */
|
|
36
|
+
/* Utilities */
|
|
37
|
+
/* -------------------------------------------------------------------------- */
|
|
38
|
+
|
|
25
39
|
const camelToKebabCache = new Map<string, string>();
|
|
26
40
|
|
|
27
41
|
function camelToKebab(str: string): string {
|
|
28
42
|
const cached = camelToKebabCache.get(str);
|
|
29
43
|
if (cached) return cached;
|
|
44
|
+
|
|
30
45
|
const res = str.replace(/[A-Z]/g, m => "-" + m.toLowerCase());
|
|
31
46
|
camelToKebabCache.set(str, res);
|
|
32
47
|
return res;
|
|
@@ -44,28 +59,35 @@ function hashString(str: string): string {
|
|
|
44
59
|
return (hash >>> 0).toString(36);
|
|
45
60
|
}
|
|
46
61
|
|
|
47
|
-
|
|
62
|
+
/* -------------------------------------------------------------------------- */
|
|
63
|
+
/* Atomic rule generation */
|
|
64
|
+
/* -------------------------------------------------------------------------- */
|
|
48
65
|
|
|
49
66
|
const atomicCache = new Map<string, string[]>();
|
|
50
67
|
|
|
51
|
-
function makeClassName(
|
|
52
|
-
signature: string,
|
|
53
|
-
layer: number,
|
|
54
|
-
): string {
|
|
68
|
+
function makeClassName(signature: string, layer: number): string {
|
|
55
69
|
return `f${hashString(`${layer}|${signature}`)}`;
|
|
56
70
|
}
|
|
57
71
|
|
|
72
|
+
function prefixSelector(selector: string, className: string): string {
|
|
73
|
+
// handles: "&", "&:hover", "&:hover,&:active"
|
|
74
|
+
return selector
|
|
75
|
+
.split(",")
|
|
76
|
+
.map(part =>
|
|
77
|
+
part.trim().replace(/&/g, `.${className}`)
|
|
78
|
+
)
|
|
79
|
+
.join(",");
|
|
80
|
+
}
|
|
81
|
+
|
|
58
82
|
function getAtomicClasses(
|
|
59
83
|
selector: string,
|
|
60
84
|
decl: string,
|
|
61
85
|
): string[] {
|
|
62
86
|
const signature = `${selector}|${decl}`;
|
|
63
|
-
|
|
64
87
|
const cached = atomicCache.get(signature);
|
|
65
88
|
if (cached) return cached;
|
|
66
89
|
|
|
67
90
|
const classes: string[] = [];
|
|
68
|
-
const sheet = ensureStyleSheet();
|
|
69
91
|
|
|
70
92
|
for (let layer = 0; layer < PRECEDENCE_LAYERS; layer++) {
|
|
71
93
|
const className = makeClassName(signature, layer);
|
|
@@ -74,8 +96,9 @@ function getAtomicClasses(
|
|
|
74
96
|
const rule =
|
|
75
97
|
selector === "&"
|
|
76
98
|
? `.${className}{${decl}}`
|
|
77
|
-
: selector
|
|
99
|
+
: `${prefixSelector(selector, className)}{${decl}}`;
|
|
78
100
|
|
|
101
|
+
const sheet = ensureStyleSheet(layer);
|
|
79
102
|
sheet.insertRule(rule, sheet.cssRules.length);
|
|
80
103
|
}
|
|
81
104
|
|
|
@@ -83,6 +106,10 @@ function getAtomicClasses(
|
|
|
83
106
|
return classes;
|
|
84
107
|
}
|
|
85
108
|
|
|
109
|
+
/* -------------------------------------------------------------------------- */
|
|
110
|
+
/* Atomic entry builder */
|
|
111
|
+
/* -------------------------------------------------------------------------- */
|
|
112
|
+
|
|
86
113
|
type AtomicEntry = {
|
|
87
114
|
classes: string[];
|
|
88
115
|
};
|
|
@@ -116,10 +143,39 @@ function buildAtomicEntries(rule: StyleRule): AtomicEntry[] {
|
|
|
116
143
|
return entries;
|
|
117
144
|
}
|
|
118
145
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
146
|
+
/* -------------------------------------------------------------------------- */
|
|
147
|
+
/* makeStyles */
|
|
148
|
+
/* -------------------------------------------------------------------------- */
|
|
149
|
+
|
|
150
|
+
export function makeStyles<T extends StylesMap>(
|
|
151
|
+
styles: T,
|
|
152
|
+
layer: number = 0,
|
|
153
|
+
) {
|
|
154
|
+
return (): ClassNames<T> => {
|
|
155
|
+
const result = {} as ClassNames<T>;
|
|
156
|
+
|
|
157
|
+
for (const slot in styles) {
|
|
158
|
+
const rule = (styles[slot] ?? {}) as StyleRule;
|
|
159
|
+
const entries = buildAtomicEntries(rule);
|
|
160
|
+
|
|
161
|
+
const classes = entries
|
|
162
|
+
.map(e => e.classes[layer])
|
|
163
|
+
.join(" ");
|
|
164
|
+
|
|
165
|
+
(result as any)[slot] = classes;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return result;
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* -------------------------------------------------------------------------- */
|
|
173
|
+
/* makeResetStyles */
|
|
174
|
+
/* -------------------------------------------------------------------------- */
|
|
175
|
+
|
|
176
|
+
const resetCache = new Map<string, string>();
|
|
177
|
+
|
|
178
|
+
function stringifyRule(selector: string, styles: StyleRule): string[] {
|
|
123
179
|
const rules: string[] = [];
|
|
124
180
|
const decls: string[] = [];
|
|
125
181
|
|
|
@@ -134,12 +190,6 @@ function stringifyRule(
|
|
|
134
190
|
continue;
|
|
135
191
|
}
|
|
136
192
|
|
|
137
|
-
if (key.startsWith("@") && typeof val === "object") {
|
|
138
|
-
const inner = stringifyRule(selector, val).join("");
|
|
139
|
-
rules.push(`${key}{${inner}}`);
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
193
|
if (typeof val !== "object") {
|
|
144
194
|
decls.push(
|
|
145
195
|
`${camelToKebab(key)}:${resolveValue(val)}`,
|
|
@@ -154,89 +204,6 @@ function stringifyRule(
|
|
|
154
204
|
return rules;
|
|
155
205
|
}
|
|
156
206
|
|
|
157
|
-
export function mergeClasses(
|
|
158
|
-
...inputs: (string | undefined | null | false)[]
|
|
159
|
-
): string {
|
|
160
|
-
const perLayer: string[][] = [];
|
|
161
|
-
|
|
162
|
-
for (let i = 0; i < PRECEDENCE_LAYERS; i++) {
|
|
163
|
-
perLayer[i] = [];
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
inputs.forEach((input, index) => {
|
|
167
|
-
if (typeof input !== "string") return;
|
|
168
|
-
|
|
169
|
-
const layer = Math.min(index, PRECEDENCE_LAYERS - 1);
|
|
170
|
-
const bucket = perLayer[layer];
|
|
171
|
-
if (!bucket) return;
|
|
172
|
-
|
|
173
|
-
const parts = input.trim().split(/\s+/);
|
|
174
|
-
for (const cls of parts) {
|
|
175
|
-
if (cls) bucket.push(cls);
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
return perLayer.flat().join(" ");
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
export function makeStyles<T extends StylesMap>(styles: T) {
|
|
183
|
-
return (): ClassNames<T> => {
|
|
184
|
-
const result = {} as ClassNames<T>;
|
|
185
|
-
|
|
186
|
-
for (const slot in styles) {
|
|
187
|
-
const rule = (styles[slot] ?? {}) as StyleRule;
|
|
188
|
-
const entries = buildAtomicEntries(rule);
|
|
189
|
-
|
|
190
|
-
const classes = entries
|
|
191
|
-
.map(e => e.classes[PRECEDENCE_LAYERS - 1])
|
|
192
|
-
.join(" ");
|
|
193
|
-
|
|
194
|
-
(result as any)[slot] = classes;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return result;
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
export function mergeStyleSets<T extends StylesMap>(
|
|
202
|
-
...sets: (Partial<T> | undefined)[]
|
|
203
|
-
): ClassNames<T> {
|
|
204
|
-
const merged: StylesMap = {};
|
|
205
|
-
|
|
206
|
-
for (const set of sets) {
|
|
207
|
-
if (!set) continue;
|
|
208
|
-
for (const key in set) {
|
|
209
|
-
merged[key] = {
|
|
210
|
-
...(merged[key] as StyleRule),
|
|
211
|
-
...(set[key] as StyleRule),
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
return makeStyles(merged as T)();
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
export function defineStaticStyles(
|
|
220
|
-
styles: Record<string, string | number>
|
|
221
|
-
): string {
|
|
222
|
-
const signature = JSON.stringify(styles);
|
|
223
|
-
const cached = staticCache.get(signature);
|
|
224
|
-
if (cached) return cached;
|
|
225
|
-
|
|
226
|
-
const className = `r${hashString(signature)}`;
|
|
227
|
-
const decls = Object.entries(styles)
|
|
228
|
-
.map(([k, v]) => `${camelToKebab(k)}:${v}`)
|
|
229
|
-
.join(";");
|
|
230
|
-
|
|
231
|
-
ensureStyleSheet().insertRule(
|
|
232
|
-
`.${className}{${decls}}`,
|
|
233
|
-
styleSheet!.cssRules.length,
|
|
234
|
-
);
|
|
235
|
-
|
|
236
|
-
staticCache.set(signature, className);
|
|
237
|
-
return className;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
207
|
export function makeResetStyles(styles: StyleRule) {
|
|
241
208
|
const signature = JSON.stringify(styles);
|
|
242
209
|
|
|
@@ -248,7 +215,7 @@ export function makeResetStyles(styles: StyleRule) {
|
|
|
248
215
|
const selector = `.${className}`;
|
|
249
216
|
|
|
250
217
|
const rules = stringifyRule(selector, styles);
|
|
251
|
-
const sheet = ensureStyleSheet();
|
|
218
|
+
const sheet = ensureStyleSheet(0);
|
|
252
219
|
|
|
253
220
|
for (const rule of rules) {
|
|
254
221
|
sheet.insertRule(rule, sheet.cssRules.length);
|
|
@@ -257,4 +224,29 @@ export function makeResetStyles(styles: StyleRule) {
|
|
|
257
224
|
resetCache.set(signature, className);
|
|
258
225
|
return className;
|
|
259
226
|
};
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/* -------------------------------------------------------------------------- */
|
|
230
|
+
/* mergeClasses (NO precedence logic here) */
|
|
231
|
+
/* -------------------------------------------------------------------------- */
|
|
232
|
+
|
|
233
|
+
export function mergeClasses(
|
|
234
|
+
...inputs: (string | undefined | null | false)[]
|
|
235
|
+
): string {
|
|
236
|
+
const seen = new Set<string>();
|
|
237
|
+
const result: string[] = [];
|
|
238
|
+
|
|
239
|
+
for (const input of inputs) {
|
|
240
|
+
if (typeof input !== "string") continue;
|
|
241
|
+
|
|
242
|
+
const parts = input.trim().split(/\s+/);
|
|
243
|
+
for (const cls of parts) {
|
|
244
|
+
if (!seen.has(cls)) {
|
|
245
|
+
seen.add(cls);
|
|
246
|
+
result.push(cls);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return result.join(" ");
|
|
260
252
|
}
|