uraniyum 1.2.7 → 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 -78
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +70 -79
- 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 -109
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,63 +381,6 @@ function stringifyRule(selector, styles) {
|
|
|
350
381
|
}
|
|
351
382
|
return rules;
|
|
352
383
|
}
|
|
353
|
-
function mergeClasses(...inputs) {
|
|
354
|
-
const seen = new Set();
|
|
355
|
-
const result = [];
|
|
356
|
-
for (const input of inputs) {
|
|
357
|
-
if (typeof input !== "string")
|
|
358
|
-
continue;
|
|
359
|
-
const parts = input.trim().split(/\s+/);
|
|
360
|
-
for (const cls of parts) {
|
|
361
|
-
if (!seen.has(cls)) {
|
|
362
|
-
seen.add(cls);
|
|
363
|
-
result.push(cls);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
return result.join(" ");
|
|
368
|
-
}
|
|
369
|
-
function makeStyles(styles) {
|
|
370
|
-
return () => {
|
|
371
|
-
const result = {};
|
|
372
|
-
for (const slot in styles) {
|
|
373
|
-
const rule = (styles[slot] ?? {});
|
|
374
|
-
const entries = buildAtomicEntries(rule);
|
|
375
|
-
const classes = entries
|
|
376
|
-
.map(e => e.classes[PRECEDENCE_LAYERS - 1])
|
|
377
|
-
.join(" ");
|
|
378
|
-
result[slot] = classes;
|
|
379
|
-
}
|
|
380
|
-
return result;
|
|
381
|
-
};
|
|
382
|
-
}
|
|
383
|
-
function mergeStyleSets(...sets) {
|
|
384
|
-
const merged = {};
|
|
385
|
-
for (const set of sets) {
|
|
386
|
-
if (!set)
|
|
387
|
-
continue;
|
|
388
|
-
for (const key in set) {
|
|
389
|
-
merged[key] = {
|
|
390
|
-
...merged[key],
|
|
391
|
-
...set[key],
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
return makeStyles(merged)();
|
|
396
|
-
}
|
|
397
|
-
function defineStaticStyles(styles) {
|
|
398
|
-
const signature = JSON.stringify(styles);
|
|
399
|
-
const cached = staticCache.get(signature);
|
|
400
|
-
if (cached)
|
|
401
|
-
return cached;
|
|
402
|
-
const className = `r${hashString(signature)}`;
|
|
403
|
-
const decls = Object.entries(styles)
|
|
404
|
-
.map(([k, v]) => `${camelToKebab(k)}:${v}`)
|
|
405
|
-
.join(";");
|
|
406
|
-
ensureStyleSheet().insertRule(`.${className}{${decls}}`, styleSheet.cssRules.length);
|
|
407
|
-
staticCache.set(signature, className);
|
|
408
|
-
return className;
|
|
409
|
-
}
|
|
410
384
|
function makeResetStyles(styles) {
|
|
411
385
|
const signature = JSON.stringify(styles);
|
|
412
386
|
return () => {
|
|
@@ -416,7 +390,7 @@ function makeResetStyles(styles) {
|
|
|
416
390
|
const className = `r${hashString(signature)}`;
|
|
417
391
|
const selector = `.${className}`;
|
|
418
392
|
const rules = stringifyRule(selector, styles);
|
|
419
|
-
const sheet = ensureStyleSheet();
|
|
393
|
+
const sheet = ensureStyleSheet(0);
|
|
420
394
|
for (const rule of rules) {
|
|
421
395
|
sheet.insertRule(rule, sheet.cssRules.length);
|
|
422
396
|
}
|
|
@@ -424,6 +398,25 @@ function makeResetStyles(styles) {
|
|
|
424
398
|
return className;
|
|
425
399
|
};
|
|
426
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
|
+
}
|
|
427
420
|
|
|
428
|
-
export { STATE, add,
|
|
421
|
+
export { STATE, add, derive, isState$1 as isState, makeResetStyles, makeStyles, mergeClasses, router, state, tags };
|
|
429
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 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}\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,63 +385,6 @@ function stringifyRule(selector, styles) {
|
|
|
354
385
|
}
|
|
355
386
|
return rules;
|
|
356
387
|
}
|
|
357
|
-
function mergeClasses(...inputs) {
|
|
358
|
-
const seen = new Set();
|
|
359
|
-
const result = [];
|
|
360
|
-
for (const input of inputs) {
|
|
361
|
-
if (typeof input !== "string")
|
|
362
|
-
continue;
|
|
363
|
-
const parts = input.trim().split(/\s+/);
|
|
364
|
-
for (const cls of parts) {
|
|
365
|
-
if (!seen.has(cls)) {
|
|
366
|
-
seen.add(cls);
|
|
367
|
-
result.push(cls);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
return result.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
388
|
function makeResetStyles(styles) {
|
|
415
389
|
const signature = JSON.stringify(styles);
|
|
416
390
|
return () => {
|
|
@@ -420,7 +394,7 @@ function makeResetStyles(styles) {
|
|
|
420
394
|
const className = `r${hashString(signature)}`;
|
|
421
395
|
const selector = `.${className}`;
|
|
422
396
|
const rules = stringifyRule(selector, styles);
|
|
423
|
-
const sheet = ensureStyleSheet();
|
|
397
|
+
const sheet = ensureStyleSheet(0);
|
|
424
398
|
for (const rule of rules) {
|
|
425
399
|
sheet.insertRule(rule, sheet.cssRules.length);
|
|
426
400
|
}
|
|
@@ -428,16 +402,33 @@ function makeResetStyles(styles) {
|
|
|
428
402
|
return className;
|
|
429
403
|
};
|
|
430
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
|
+
}
|
|
431
424
|
|
|
432
425
|
exports.STATE = STATE;
|
|
433
426
|
exports.add = add;
|
|
434
|
-
exports.defineStaticStyles = defineStaticStyles;
|
|
435
427
|
exports.derive = derive;
|
|
436
428
|
exports.isState = isState$1;
|
|
437
429
|
exports.makeResetStyles = makeResetStyles;
|
|
438
430
|
exports.makeStyles = makeStyles;
|
|
439
431
|
exports.mergeClasses = mergeClasses;
|
|
440
|
-
exports.mergeStyleSets = mergeStyleSets;
|
|
441
432
|
exports.router = router;
|
|
442
433
|
exports.state = state;
|
|
443
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 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}\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
|
|
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 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}\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","seen","input","parts","trim","split","cls","has","sets","merged","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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"}
|
|
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,85 +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 seen = new Set<string>();
|
|
161
|
-
const result: string[] = [];
|
|
162
|
-
|
|
163
|
-
for (const input of inputs) {
|
|
164
|
-
if (typeof input !== "string") continue;
|
|
165
|
-
|
|
166
|
-
const parts = input.trim().split(/\s+/);
|
|
167
|
-
for (const cls of parts) {
|
|
168
|
-
if (!seen.has(cls)) {
|
|
169
|
-
seen.add(cls);
|
|
170
|
-
result.push(cls);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
return result.join(" ");
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
export function makeStyles<T extends StylesMap>(styles: T) {
|
|
179
|
-
return (): ClassNames<T> => {
|
|
180
|
-
const result = {} as ClassNames<T>;
|
|
181
|
-
|
|
182
|
-
for (const slot in styles) {
|
|
183
|
-
const rule = (styles[slot] ?? {}) as StyleRule;
|
|
184
|
-
const entries = buildAtomicEntries(rule);
|
|
185
|
-
|
|
186
|
-
const classes = entries
|
|
187
|
-
.map(e => e.classes[PRECEDENCE_LAYERS - 1])
|
|
188
|
-
.join(" ");
|
|
189
|
-
|
|
190
|
-
(result as any)[slot] = classes;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
return result;
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
export function mergeStyleSets<T extends StylesMap>(
|
|
198
|
-
...sets: (Partial<T> | undefined)[]
|
|
199
|
-
): ClassNames<T> {
|
|
200
|
-
const merged: StylesMap = {};
|
|
201
|
-
|
|
202
|
-
for (const set of sets) {
|
|
203
|
-
if (!set) continue;
|
|
204
|
-
for (const key in set) {
|
|
205
|
-
merged[key] = {
|
|
206
|
-
...(merged[key] as StyleRule),
|
|
207
|
-
...(set[key] as StyleRule),
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
return makeStyles(merged as T)();
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
export function defineStaticStyles(
|
|
216
|
-
styles: Record<string, string | number>
|
|
217
|
-
): string {
|
|
218
|
-
const signature = JSON.stringify(styles);
|
|
219
|
-
const cached = staticCache.get(signature);
|
|
220
|
-
if (cached) return cached;
|
|
221
|
-
|
|
222
|
-
const className = `r${hashString(signature)}`;
|
|
223
|
-
const decls = Object.entries(styles)
|
|
224
|
-
.map(([k, v]) => `${camelToKebab(k)}:${v}`)
|
|
225
|
-
.join(";");
|
|
226
|
-
|
|
227
|
-
ensureStyleSheet().insertRule(
|
|
228
|
-
`.${className}{${decls}}`,
|
|
229
|
-
styleSheet!.cssRules.length,
|
|
230
|
-
);
|
|
231
|
-
|
|
232
|
-
staticCache.set(signature, className);
|
|
233
|
-
return className;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
207
|
export function makeResetStyles(styles: StyleRule) {
|
|
237
208
|
const signature = JSON.stringify(styles);
|
|
238
209
|
|
|
@@ -244,7 +215,7 @@ export function makeResetStyles(styles: StyleRule) {
|
|
|
244
215
|
const selector = `.${className}`;
|
|
245
216
|
|
|
246
217
|
const rules = stringifyRule(selector, styles);
|
|
247
|
-
const sheet = ensureStyleSheet();
|
|
218
|
+
const sheet = ensureStyleSheet(0);
|
|
248
219
|
|
|
249
220
|
for (const rule of rules) {
|
|
250
221
|
sheet.insertRule(rule, sheet.cssRules.length);
|
|
@@ -253,4 +224,29 @@ export function makeResetStyles(styles: StyleRule) {
|
|
|
253
224
|
resetCache.set(signature, className);
|
|
254
225
|
return className;
|
|
255
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(" ");
|
|
256
252
|
}
|