uraniyum 1.1.2 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -65,44 +65,69 @@ function processChildren(el, children) {
65
65
  for (const child of children.flat()) {
66
66
  if (child == null || child === false)
67
67
  continue;
68
+ // Reactive function child
68
69
  if (typeof child === "function") {
69
70
  mountReactiveFunction(el, child);
70
71
  continue;
71
72
  }
73
+ // Reactive state child (text)
72
74
  if (isState(child)) {
73
75
  mountReactiveState(el, child);
74
76
  continue;
75
77
  }
78
+ // DOM Node
76
79
  if (child instanceof Node) {
77
80
  el.appendChild(child);
78
81
  continue;
79
82
  }
83
+ // Fallback to text
80
84
  el.appendChild(document.createTextNode(String(child)));
81
85
  }
82
86
  }
83
- function mountReactiveFunction(el, fn) {
84
- let node = document.createTextNode("");
85
- el.appendChild(node);
87
+ function mountReactiveFunction(parent, fn) {
88
+ // Marker node to know where this reactive block lives
89
+ const marker = document.createTextNode("");
90
+ parent.appendChild(marker);
91
+ let mounted = [];
92
+ const cleanup = () => {
93
+ for (const n of mounted) {
94
+ if (n.parentNode === parent) {
95
+ parent.removeChild(n);
96
+ }
97
+ }
98
+ mounted = [];
99
+ };
86
100
  derive(() => {
101
+ cleanup();
87
102
  const value = fn();
88
- let newNode;
89
- if (value instanceof Node) {
90
- newNode = value;
91
- processChildren(newNode, []);
92
- }
93
- else if (Array.isArray(value)) {
94
- const fragment = document.createDocumentFragment();
95
- for (const v of value.flat()) {
96
- fragment.appendChild(v instanceof Node ? v : document.createTextNode(String(v ?? "")));
103
+ const values = Array.isArray(value) ? value.flat() : [value];
104
+ for (const v of values) {
105
+ if (v == null || v === false)
106
+ continue;
107
+ // nested function inside reactive
108
+ if (typeof v === "function") {
109
+ mountReactiveFunction(parent, v);
110
+ continue;
97
111
  }
98
- newNode = fragment;
99
- }
100
- else {
101
- newNode = document.createTextNode(String(value ?? ""));
102
- }
103
- if (node !== newNode) {
104
- node.parentNode?.replaceChild(newNode, node);
105
- node = newNode;
112
+ if (isState(v)) {
113
+ const node = document.createTextNode(String(v.val));
114
+ parent.insertBefore(node, marker);
115
+ v.subs.add(() => {
116
+ const next = String(v.val);
117
+ if (node.data !== next)
118
+ node.data = next;
119
+ });
120
+ mounted.push(node);
121
+ continue;
122
+ }
123
+ if (v instanceof Node) {
124
+ parent.insertBefore(v, marker);
125
+ mounted.push(v);
126
+ continue;
127
+ }
128
+ const text = document.createTextNode(String(v));
129
+ parent.insertBefore(text, marker);
130
+ mounted.push(text);
106
131
  }
107
132
  });
108
133
  }
@@ -110,9 +135,9 @@ function mountReactiveState(el, st) {
110
135
  const node = document.createTextNode(String(st.val));
111
136
  el.appendChild(node);
112
137
  st.subs.add(() => {
113
- const newVal = String(st.val);
114
- if (node.data !== newVal) {
115
- node.data = newVal;
138
+ const next = String(st.val);
139
+ if (node.data !== next) {
140
+ node.data = next;
116
141
  }
117
142
  });
118
143
  }
@@ -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, state } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (...children) => {\n const el = document.createElement(tag);\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(el, fn) {\n let node = document.createTextNode(\"\");\n el.appendChild(node);\n derive(() => {\n const value = fn();\n let newNode;\n if (value instanceof Node) {\n newNode = value;\n processChildren(newNode, []);\n }\n else if (Array.isArray(value)) {\n const fragment = document.createDocumentFragment();\n for (const v of value.flat()) {\n fragment.appendChild(v instanceof Node ? v : document.createTextNode(String(v ?? \"\")));\n }\n newNode = fragment;\n }\n else {\n newNode = document.createTextNode(String(value ?? \"\"));\n }\n if (node !== newNode) {\n node.parentNode?.replaceChild(newNode, node);\n node = newNode;\n }\n });\n}\nfunction mountReactiveState(el, st) {\n const node = document.createTextNode(String(st.val));\n el.appendChild(node);\n st.subs.add(() => {\n const newVal = String(st.val);\n if (node.data !== newVal) {\n node.data = newVal;\n }\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 const root = document.createElement(\"div\");\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 path = location.pathname + location.search;\n if (path === currentPath)\n return;\n currentPath = path;\n const next = matchRoute(location.pathname);\n if (currentEl) {\n root.replaceChild(next, currentEl);\n }\n else {\n root.appendChild(next);\n }\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n function push(path) {\n history.pushState(null, \"\", path);\n render();\n }\n function replace(path) {\n history.replaceState(null, \"\", path);\n render();\n }\n return {\n element: root,\n render,\n push,\n replace,\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 if (!(component.element instanceof HTMLElement)) {\n throw new Error(\"Component object must have an HTMLElement in .element\");\n }\n document.body.appendChild(component.element);\n component.render();\n return;\n }\n throw new Error(\"Invalid component passed to add()\");\n}\n","const styleCache = new Map();\nconst keyframeCache = new Map();\nlet styleElement = null;\nlet styleSheet = null;\nconst ALLOWED_PREFIXES = [\n \"root\",\n \"button\",\n \"icon\",\n \"text\",\n \"container\",\n \"wrapper\",\n \"card\",\n \"header\",\n \"section\",\n];\nconst KEYFRAMES_PREFIX = \"@keyframes \";\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n }\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\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 camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const result = str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, result);\n return result;\n}\nfunction stableHashRule(rule) {\n const parts = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@\") || typeof val === \"object\" || val == null)\n continue;\n let v;\n if (typeof val === \"function\")\n v = val.toString();\n else\n v = String(val);\n parts.push(`${key}:${v}`);\n }\n parts.sort();\n return hashString(parts.join(\"|\"));\n}\nfunction stringifyDecls(props, keyframes) {\n const out = [];\n for (const key in props) {\n if (!Object.prototype.hasOwnProperty.call(props, key))\n continue;\n const raw = props[key];\n if (raw == null || typeof raw === \"object\")\n continue;\n let val = typeof raw === \"function\" ? raw() : raw;\n if (typeof val === \"string\" && keyframes.size > 0) {\n for (const [orig, uniq] of keyframes) {\n if (val.includes(`$${orig}`)) {\n val = val.replaceAll(`$${orig}`, uniq);\n }\n }\n }\n out.push(`${camelToKebab(key)}:${val}`);\n }\n return out.join(\";\");\n}\nfunction registerKeyframes(name, frames) {\n const hash = hashString(name + JSON.stringify(frames));\n const unique = `${name}-${hash}`;\n const cached = keyframeCache.get(unique);\n if (cached)\n return cached;\n const sheet = ensureStyleSheet();\n const steps = [];\n for (const step in frames) {\n if (!Object.prototype.hasOwnProperty.call(frames, step))\n continue;\n const decls = stringifyDecls(frames[step] ?? {}, new Map());\n steps.push(`${step}{${decls}}`);\n }\n const ruleText = `@keyframes ${unique}{${steps.join(\"\")}}`;\n sheet.insertRule(ruleText, sheet.cssRules.length);\n keyframeCache.set(unique, unique);\n return unique;\n}\nfunction buildRules(className, rule, keyframes) {\n const rules = [];\n const baseDecls = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@keyframes\")) {\n continue;\n }\n if (!val)\n continue;\n if (key[0] === \":\" && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`.${className}${key}{${decls}}`);\n }\n continue;\n }\n if (key.startsWith(\"@media\") && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${key}{.${className}{${decls}}}`);\n }\n continue;\n }\n if (key.includes(\"&\") && typeof val === \"object\") {\n const selector = key.replace(/&/g, `.${className}`);\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${selector}{${decls}}`);\n }\n continue;\n }\n if (!key.startsWith(\"@\") && typeof val !== \"object\") {\n const raw = typeof val === \"function\" ? val() : val;\n baseDecls.push(`${camelToKebab(key)}:${raw}`);\n }\n }\n if (baseDecls.length > 0) {\n rules.push(`.${className}{${baseDecls.join(\";\")}}`);\n }\n return rules;\n}\nexport function makeStyles(styles) {\n return () => {\n const classNames = {};\n const keyframesMap = new Map();\n const sheet = ensureStyleSheet();\n for (const key in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, key))\n continue;\n if (!key.startsWith(KEYFRAMES_PREFIX))\n continue;\n const name = key.slice(KEYFRAMES_PREFIX.length);\n const frames = styles[key];\n const unique = registerKeyframes(name, frames);\n keyframesMap.set(name, unique);\n }\n for (const slot in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, slot))\n continue;\n if (slot.startsWith(KEYFRAMES_PREFIX))\n continue;\n const rule = styles[slot];\n const hash = stableHashRule(rule);\n const className = ALLOWED_PREFIXES.includes(slot)\n ? `${slot}-${hash}`\n : `css-${hash}`;\n if (!styleCache.has(className)) {\n const rules = buildRules(className, rule, keyframesMap);\n for (const r of rules) {\n sheet.insertRule(r, sheet.cssRules.length);\n }\n styleCache.set(className, true);\n }\n classNames[slot] = className;\n }\n return classNames;\n };\n}\nexport const mergeClasses = (...classes) => classes.filter(Boolean).join(\" \");\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n if (!Object.prototype.hasOwnProperty.call(set, key))\n continue;\n const prev = merged[key] ?? {};\n const cur = set[key] ?? {};\n merged[key] = { ...prev, ...cur };\n }\n }\n return makeStyles(merged)();\n}\n"],"names":["isState"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/state.ts","../src/tags.ts","../src/router.ts","../src/helpers.ts","../src/styles.ts"],"sourcesContent":["export const STATE = Symbol(\"STATE\");\nexport function isState(x) {\n return typeof x === \"object\" && x !== null && x[STATE] === true;\n}\nlet currentEffect = null;\nfunction track(st) {\n if (currentEffect) {\n st.subs.add(currentEffect);\n currentEffect.deps.add(st);\n }\n}\nfunction cleanup(effect) {\n for (const st of effect.deps)\n st.subs.delete(effect);\n effect.deps.clear();\n}\nexport function state(v) {\n const st = {\n [STATE]: true,\n subs: new Set(),\n get val() {\n track(st);\n return v;\n },\n set val(nv) {\n if (nv === v)\n return;\n v = nv;\n for (const fn of Array.from(st.subs)) {\n fn();\n }\n }\n };\n return st;\n}\nexport function derive(fn) {\n const effect = (() => {\n cleanup(effect);\n currentEffect = effect;\n try {\n fn();\n }\n finally {\n currentEffect = null;\n }\n });\n effect.deps = new Set();\n effect();\n return effect;\n}\n","import { derive } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (...children) => {\n const el = document.createElement(tag);\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 // Reactive function child\n if (typeof child === \"function\") {\n mountReactiveFunction(el, child);\n continue;\n }\n // Reactive state child (text)\n if (isState(child)) {\n mountReactiveState(el, child);\n continue;\n }\n // DOM Node\n if (child instanceof Node) {\n el.appendChild(child);\n continue;\n }\n // Fallback to text\n el.appendChild(document.createTextNode(String(child)));\n }\n}\nfunction mountReactiveFunction(parent, fn) {\n // Marker node to know where this reactive block lives\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 }\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 // nested function inside reactive\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(el, st) {\n const node = document.createTextNode(String(st.val));\n el.appendChild(node);\n st.subs.add(() => {\n const next = String(st.val);\n if (node.data !== next) {\n node.data = next;\n }\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 const root = document.createElement(\"div\");\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 path = location.pathname + location.search;\n if (path === currentPath)\n return;\n currentPath = path;\n const next = matchRoute(location.pathname);\n if (currentEl) {\n root.replaceChild(next, currentEl);\n }\n else {\n root.appendChild(next);\n }\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n function push(path) {\n history.pushState(null, \"\", path);\n render();\n }\n function replace(path) {\n history.replaceState(null, \"\", path);\n render();\n }\n return {\n element: root,\n render,\n push,\n replace,\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 if (!(component.element instanceof HTMLElement)) {\n throw new Error(\"Component object must have an HTMLElement in .element\");\n }\n document.body.appendChild(component.element);\n component.render();\n return;\n }\n throw new Error(\"Invalid component passed to add()\");\n}\n","const styleCache = new Map();\nconst keyframeCache = new Map();\nlet styleElement = null;\nlet styleSheet = null;\nconst ALLOWED_PREFIXES = [\n \"root\",\n \"button\",\n \"icon\",\n \"text\",\n \"container\",\n \"wrapper\",\n \"card\",\n \"header\",\n \"section\",\n];\nconst KEYFRAMES_PREFIX = \"@keyframes \";\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n }\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\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 camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const result = str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, result);\n return result;\n}\nfunction stableHashRule(rule) {\n const parts = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@\") || typeof val === \"object\" || val == null)\n continue;\n let v;\n if (typeof val === \"function\")\n v = val.toString();\n else\n v = String(val);\n parts.push(`${key}:${v}`);\n }\n parts.sort();\n return hashString(parts.join(\"|\"));\n}\nfunction stringifyDecls(props, keyframes) {\n const out = [];\n for (const key in props) {\n if (!Object.prototype.hasOwnProperty.call(props, key))\n continue;\n const raw = props[key];\n if (raw == null || typeof raw === \"object\")\n continue;\n let val = typeof raw === \"function\" ? raw() : raw;\n if (typeof val === \"string\" && keyframes.size > 0) {\n for (const [orig, uniq] of keyframes) {\n if (val.includes(`$${orig}`)) {\n val = val.replaceAll(`$${orig}`, uniq);\n }\n }\n }\n out.push(`${camelToKebab(key)}:${val}`);\n }\n return out.join(\";\");\n}\nfunction registerKeyframes(name, frames) {\n const hash = hashString(name + JSON.stringify(frames));\n const unique = `${name}-${hash}`;\n const cached = keyframeCache.get(unique);\n if (cached)\n return cached;\n const sheet = ensureStyleSheet();\n const steps = [];\n for (const step in frames) {\n if (!Object.prototype.hasOwnProperty.call(frames, step))\n continue;\n const decls = stringifyDecls(frames[step] ?? {}, new Map());\n steps.push(`${step}{${decls}}`);\n }\n const ruleText = `@keyframes ${unique}{${steps.join(\"\")}}`;\n sheet.insertRule(ruleText, sheet.cssRules.length);\n keyframeCache.set(unique, unique);\n return unique;\n}\nfunction buildRules(className, rule, keyframes) {\n const rules = [];\n const baseDecls = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@keyframes\")) {\n continue;\n }\n if (!val)\n continue;\n if (key[0] === \":\" && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`.${className}${key}{${decls}}`);\n }\n continue;\n }\n if (key.startsWith(\"@media\") && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${key}{.${className}{${decls}}}`);\n }\n continue;\n }\n if (key.includes(\"&\") && typeof val === \"object\") {\n const selector = key.replace(/&/g, `.${className}`);\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${selector}{${decls}}`);\n }\n continue;\n }\n if (!key.startsWith(\"@\") && typeof val !== \"object\") {\n const raw = typeof val === \"function\" ? val() : val;\n baseDecls.push(`${camelToKebab(key)}:${raw}`);\n }\n }\n if (baseDecls.length > 0) {\n rules.push(`.${className}{${baseDecls.join(\";\")}}`);\n }\n return rules;\n}\nexport function makeStyles(styles) {\n return () => {\n const classNames = {};\n const keyframesMap = new Map();\n const sheet = ensureStyleSheet();\n for (const key in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, key))\n continue;\n if (!key.startsWith(KEYFRAMES_PREFIX))\n continue;\n const name = key.slice(KEYFRAMES_PREFIX.length);\n const frames = styles[key];\n const unique = registerKeyframes(name, frames);\n keyframesMap.set(name, unique);\n }\n for (const slot in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, slot))\n continue;\n if (slot.startsWith(KEYFRAMES_PREFIX))\n continue;\n const rule = styles[slot];\n const hash = stableHashRule(rule);\n const className = ALLOWED_PREFIXES.includes(slot)\n ? `${slot}-${hash}`\n : `css-${hash}`;\n if (!styleCache.has(className)) {\n const rules = buildRules(className, rule, keyframesMap);\n for (const r of rules) {\n sheet.insertRule(r, sheet.cssRules.length);\n }\n styleCache.set(className, true);\n }\n classNames[slot] = className;\n }\n return classNames;\n };\n}\nexport const mergeClasses = (...classes) => classes.filter(Boolean).join(\" \");\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n if (!Object.prototype.hasOwnProperty.call(set, key))\n continue;\n const prev = merged[key] ?? {};\n const cur = set[key] ?? {};\n merged[key] = { ...prev, ...cur };\n }\n }\n return makeStyles(merged)();\n}\n"],"names":["isState"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -69,44 +69,69 @@ function processChildren(el, children) {
69
69
  for (const child of children.flat()) {
70
70
  if (child == null || child === false)
71
71
  continue;
72
+ // Reactive function child
72
73
  if (typeof child === "function") {
73
74
  mountReactiveFunction(el, child);
74
75
  continue;
75
76
  }
77
+ // Reactive state child (text)
76
78
  if (isState(child)) {
77
79
  mountReactiveState(el, child);
78
80
  continue;
79
81
  }
82
+ // DOM Node
80
83
  if (child instanceof Node) {
81
84
  el.appendChild(child);
82
85
  continue;
83
86
  }
87
+ // Fallback to text
84
88
  el.appendChild(document.createTextNode(String(child)));
85
89
  }
86
90
  }
87
- function mountReactiveFunction(el, fn) {
88
- let node = document.createTextNode("");
89
- el.appendChild(node);
91
+ function mountReactiveFunction(parent, fn) {
92
+ // Marker node to know where this reactive block lives
93
+ const marker = document.createTextNode("");
94
+ parent.appendChild(marker);
95
+ let mounted = [];
96
+ const cleanup = () => {
97
+ for (const n of mounted) {
98
+ if (n.parentNode === parent) {
99
+ parent.removeChild(n);
100
+ }
101
+ }
102
+ mounted = [];
103
+ };
90
104
  derive(() => {
105
+ cleanup();
91
106
  const value = fn();
92
- let newNode;
93
- if (value instanceof Node) {
94
- newNode = value;
95
- processChildren(newNode, []);
96
- }
97
- else if (Array.isArray(value)) {
98
- const fragment = document.createDocumentFragment();
99
- for (const v of value.flat()) {
100
- fragment.appendChild(v instanceof Node ? v : document.createTextNode(String(v ?? "")));
107
+ const values = Array.isArray(value) ? value.flat() : [value];
108
+ for (const v of values) {
109
+ if (v == null || v === false)
110
+ continue;
111
+ // nested function inside reactive
112
+ if (typeof v === "function") {
113
+ mountReactiveFunction(parent, v);
114
+ continue;
101
115
  }
102
- newNode = fragment;
103
- }
104
- else {
105
- newNode = document.createTextNode(String(value ?? ""));
106
- }
107
- if (node !== newNode) {
108
- node.parentNode?.replaceChild(newNode, node);
109
- node = newNode;
116
+ if (isState(v)) {
117
+ const node = document.createTextNode(String(v.val));
118
+ parent.insertBefore(node, marker);
119
+ v.subs.add(() => {
120
+ const next = String(v.val);
121
+ if (node.data !== next)
122
+ node.data = next;
123
+ });
124
+ mounted.push(node);
125
+ continue;
126
+ }
127
+ if (v instanceof Node) {
128
+ parent.insertBefore(v, marker);
129
+ mounted.push(v);
130
+ continue;
131
+ }
132
+ const text = document.createTextNode(String(v));
133
+ parent.insertBefore(text, marker);
134
+ mounted.push(text);
110
135
  }
111
136
  });
112
137
  }
@@ -114,9 +139,9 @@ function mountReactiveState(el, st) {
114
139
  const node = document.createTextNode(String(st.val));
115
140
  el.appendChild(node);
116
141
  st.subs.add(() => {
117
- const newVal = String(st.val);
118
- if (node.data !== newVal) {
119
- node.data = newVal;
142
+ const next = String(st.val);
143
+ if (node.data !== next) {
144
+ node.data = next;
120
145
  }
121
146
  });
122
147
  }
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, state } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (...children) => {\n const el = document.createElement(tag);\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(el, fn) {\n let node = document.createTextNode(\"\");\n el.appendChild(node);\n derive(() => {\n const value = fn();\n let newNode;\n if (value instanceof Node) {\n newNode = value;\n processChildren(newNode, []);\n }\n else if (Array.isArray(value)) {\n const fragment = document.createDocumentFragment();\n for (const v of value.flat()) {\n fragment.appendChild(v instanceof Node ? v : document.createTextNode(String(v ?? \"\")));\n }\n newNode = fragment;\n }\n else {\n newNode = document.createTextNode(String(value ?? \"\"));\n }\n if (node !== newNode) {\n node.parentNode?.replaceChild(newNode, node);\n node = newNode;\n }\n });\n}\nfunction mountReactiveState(el, st) {\n const node = document.createTextNode(String(st.val));\n el.appendChild(node);\n st.subs.add(() => {\n const newVal = String(st.val);\n if (node.data !== newVal) {\n node.data = newVal;\n }\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 const root = document.createElement(\"div\");\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 path = location.pathname + location.search;\n if (path === currentPath)\n return;\n currentPath = path;\n const next = matchRoute(location.pathname);\n if (currentEl) {\n root.replaceChild(next, currentEl);\n }\n else {\n root.appendChild(next);\n }\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n function push(path) {\n history.pushState(null, \"\", path);\n render();\n }\n function replace(path) {\n history.replaceState(null, \"\", path);\n render();\n }\n return {\n element: root,\n render,\n push,\n replace,\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 if (!(component.element instanceof HTMLElement)) {\n throw new Error(\"Component object must have an HTMLElement in .element\");\n }\n document.body.appendChild(component.element);\n component.render();\n return;\n }\n throw new Error(\"Invalid component passed to add()\");\n}\n","const styleCache = new Map();\nconst keyframeCache = new Map();\nlet styleElement = null;\nlet styleSheet = null;\nconst ALLOWED_PREFIXES = [\n \"root\",\n \"button\",\n \"icon\",\n \"text\",\n \"container\",\n \"wrapper\",\n \"card\",\n \"header\",\n \"section\",\n];\nconst KEYFRAMES_PREFIX = \"@keyframes \";\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n }\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\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 camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const result = str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, result);\n return result;\n}\nfunction stableHashRule(rule) {\n const parts = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@\") || typeof val === \"object\" || val == null)\n continue;\n let v;\n if (typeof val === \"function\")\n v = val.toString();\n else\n v = String(val);\n parts.push(`${key}:${v}`);\n }\n parts.sort();\n return hashString(parts.join(\"|\"));\n}\nfunction stringifyDecls(props, keyframes) {\n const out = [];\n for (const key in props) {\n if (!Object.prototype.hasOwnProperty.call(props, key))\n continue;\n const raw = props[key];\n if (raw == null || typeof raw === \"object\")\n continue;\n let val = typeof raw === \"function\" ? raw() : raw;\n if (typeof val === \"string\" && keyframes.size > 0) {\n for (const [orig, uniq] of keyframes) {\n if (val.includes(`$${orig}`)) {\n val = val.replaceAll(`$${orig}`, uniq);\n }\n }\n }\n out.push(`${camelToKebab(key)}:${val}`);\n }\n return out.join(\";\");\n}\nfunction registerKeyframes(name, frames) {\n const hash = hashString(name + JSON.stringify(frames));\n const unique = `${name}-${hash}`;\n const cached = keyframeCache.get(unique);\n if (cached)\n return cached;\n const sheet = ensureStyleSheet();\n const steps = [];\n for (const step in frames) {\n if (!Object.prototype.hasOwnProperty.call(frames, step))\n continue;\n const decls = stringifyDecls(frames[step] ?? {}, new Map());\n steps.push(`${step}{${decls}}`);\n }\n const ruleText = `@keyframes ${unique}{${steps.join(\"\")}}`;\n sheet.insertRule(ruleText, sheet.cssRules.length);\n keyframeCache.set(unique, unique);\n return unique;\n}\nfunction buildRules(className, rule, keyframes) {\n const rules = [];\n const baseDecls = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@keyframes\")) {\n continue;\n }\n if (!val)\n continue;\n if (key[0] === \":\" && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`.${className}${key}{${decls}}`);\n }\n continue;\n }\n if (key.startsWith(\"@media\") && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${key}{.${className}{${decls}}}`);\n }\n continue;\n }\n if (key.includes(\"&\") && typeof val === \"object\") {\n const selector = key.replace(/&/g, `.${className}`);\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${selector}{${decls}}`);\n }\n continue;\n }\n if (!key.startsWith(\"@\") && typeof val !== \"object\") {\n const raw = typeof val === \"function\" ? val() : val;\n baseDecls.push(`${camelToKebab(key)}:${raw}`);\n }\n }\n if (baseDecls.length > 0) {\n rules.push(`.${className}{${baseDecls.join(\";\")}}`);\n }\n return rules;\n}\nexport function makeStyles(styles) {\n return () => {\n const classNames = {};\n const keyframesMap = new Map();\n const sheet = ensureStyleSheet();\n for (const key in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, key))\n continue;\n if (!key.startsWith(KEYFRAMES_PREFIX))\n continue;\n const name = key.slice(KEYFRAMES_PREFIX.length);\n const frames = styles[key];\n const unique = registerKeyframes(name, frames);\n keyframesMap.set(name, unique);\n }\n for (const slot in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, slot))\n continue;\n if (slot.startsWith(KEYFRAMES_PREFIX))\n continue;\n const rule = styles[slot];\n const hash = stableHashRule(rule);\n const className = ALLOWED_PREFIXES.includes(slot)\n ? `${slot}-${hash}`\n : `css-${hash}`;\n if (!styleCache.has(className)) {\n const rules = buildRules(className, rule, keyframesMap);\n for (const r of rules) {\n sheet.insertRule(r, sheet.cssRules.length);\n }\n styleCache.set(className, true);\n }\n classNames[slot] = className;\n }\n return classNames;\n };\n}\nexport const mergeClasses = (...classes) => classes.filter(Boolean).join(\" \");\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n if (!Object.prototype.hasOwnProperty.call(set, key))\n continue;\n const prev = merged[key] ?? {};\n const cur = set[key] ?? {};\n merged[key] = { ...prev, ...cur };\n }\n }\n return makeStyles(merged)();\n}\n"],"names":["isState"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/state.ts","../src/tags.ts","../src/router.ts","../src/helpers.ts","../src/styles.ts"],"sourcesContent":["export const STATE = Symbol(\"STATE\");\nexport function isState(x) {\n return typeof x === \"object\" && x !== null && x[STATE] === true;\n}\nlet currentEffect = null;\nfunction track(st) {\n if (currentEffect) {\n st.subs.add(currentEffect);\n currentEffect.deps.add(st);\n }\n}\nfunction cleanup(effect) {\n for (const st of effect.deps)\n st.subs.delete(effect);\n effect.deps.clear();\n}\nexport function state(v) {\n const st = {\n [STATE]: true,\n subs: new Set(),\n get val() {\n track(st);\n return v;\n },\n set val(nv) {\n if (nv === v)\n return;\n v = nv;\n for (const fn of Array.from(st.subs)) {\n fn();\n }\n }\n };\n return st;\n}\nexport function derive(fn) {\n const effect = (() => {\n cleanup(effect);\n currentEffect = effect;\n try {\n fn();\n }\n finally {\n currentEffect = null;\n }\n });\n effect.deps = new Set();\n effect();\n return effect;\n}\n","import { derive } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (...children) => {\n const el = document.createElement(tag);\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 // Reactive function child\n if (typeof child === \"function\") {\n mountReactiveFunction(el, child);\n continue;\n }\n // Reactive state child (text)\n if (isState(child)) {\n mountReactiveState(el, child);\n continue;\n }\n // DOM Node\n if (child instanceof Node) {\n el.appendChild(child);\n continue;\n }\n // Fallback to text\n el.appendChild(document.createTextNode(String(child)));\n }\n}\nfunction mountReactiveFunction(parent, fn) {\n // Marker node to know where this reactive block lives\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 }\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 // nested function inside reactive\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(el, st) {\n const node = document.createTextNode(String(st.val));\n el.appendChild(node);\n st.subs.add(() => {\n const next = String(st.val);\n if (node.data !== next) {\n node.data = next;\n }\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 const root = document.createElement(\"div\");\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 path = location.pathname + location.search;\n if (path === currentPath)\n return;\n currentPath = path;\n const next = matchRoute(location.pathname);\n if (currentEl) {\n root.replaceChild(next, currentEl);\n }\n else {\n root.appendChild(next);\n }\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n function push(path) {\n history.pushState(null, \"\", path);\n render();\n }\n function replace(path) {\n history.replaceState(null, \"\", path);\n render();\n }\n return {\n element: root,\n render,\n push,\n replace,\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 if (!(component.element instanceof HTMLElement)) {\n throw new Error(\"Component object must have an HTMLElement in .element\");\n }\n document.body.appendChild(component.element);\n component.render();\n return;\n }\n throw new Error(\"Invalid component passed to add()\");\n}\n","const styleCache = new Map();\nconst keyframeCache = new Map();\nlet styleElement = null;\nlet styleSheet = null;\nconst ALLOWED_PREFIXES = [\n \"root\",\n \"button\",\n \"icon\",\n \"text\",\n \"container\",\n \"wrapper\",\n \"card\",\n \"header\",\n \"section\",\n];\nconst KEYFRAMES_PREFIX = \"@keyframes \";\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n }\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\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 camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const result = str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, result);\n return result;\n}\nfunction stableHashRule(rule) {\n const parts = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@\") || typeof val === \"object\" || val == null)\n continue;\n let v;\n if (typeof val === \"function\")\n v = val.toString();\n else\n v = String(val);\n parts.push(`${key}:${v}`);\n }\n parts.sort();\n return hashString(parts.join(\"|\"));\n}\nfunction stringifyDecls(props, keyframes) {\n const out = [];\n for (const key in props) {\n if (!Object.prototype.hasOwnProperty.call(props, key))\n continue;\n const raw = props[key];\n if (raw == null || typeof raw === \"object\")\n continue;\n let val = typeof raw === \"function\" ? raw() : raw;\n if (typeof val === \"string\" && keyframes.size > 0) {\n for (const [orig, uniq] of keyframes) {\n if (val.includes(`$${orig}`)) {\n val = val.replaceAll(`$${orig}`, uniq);\n }\n }\n }\n out.push(`${camelToKebab(key)}:${val}`);\n }\n return out.join(\";\");\n}\nfunction registerKeyframes(name, frames) {\n const hash = hashString(name + JSON.stringify(frames));\n const unique = `${name}-${hash}`;\n const cached = keyframeCache.get(unique);\n if (cached)\n return cached;\n const sheet = ensureStyleSheet();\n const steps = [];\n for (const step in frames) {\n if (!Object.prototype.hasOwnProperty.call(frames, step))\n continue;\n const decls = stringifyDecls(frames[step] ?? {}, new Map());\n steps.push(`${step}{${decls}}`);\n }\n const ruleText = `@keyframes ${unique}{${steps.join(\"\")}}`;\n sheet.insertRule(ruleText, sheet.cssRules.length);\n keyframeCache.set(unique, unique);\n return unique;\n}\nfunction buildRules(className, rule, keyframes) {\n const rules = [];\n const baseDecls = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@keyframes\")) {\n continue;\n }\n if (!val)\n continue;\n if (key[0] === \":\" && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`.${className}${key}{${decls}}`);\n }\n continue;\n }\n if (key.startsWith(\"@media\") && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${key}{.${className}{${decls}}}`);\n }\n continue;\n }\n if (key.includes(\"&\") && typeof val === \"object\") {\n const selector = key.replace(/&/g, `.${className}`);\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${selector}{${decls}}`);\n }\n continue;\n }\n if (!key.startsWith(\"@\") && typeof val !== \"object\") {\n const raw = typeof val === \"function\" ? val() : val;\n baseDecls.push(`${camelToKebab(key)}:${raw}`);\n }\n }\n if (baseDecls.length > 0) {\n rules.push(`.${className}{${baseDecls.join(\";\")}}`);\n }\n return rules;\n}\nexport function makeStyles(styles) {\n return () => {\n const classNames = {};\n const keyframesMap = new Map();\n const sheet = ensureStyleSheet();\n for (const key in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, key))\n continue;\n if (!key.startsWith(KEYFRAMES_PREFIX))\n continue;\n const name = key.slice(KEYFRAMES_PREFIX.length);\n const frames = styles[key];\n const unique = registerKeyframes(name, frames);\n keyframesMap.set(name, unique);\n }\n for (const slot in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, slot))\n continue;\n if (slot.startsWith(KEYFRAMES_PREFIX))\n continue;\n const rule = styles[slot];\n const hash = stableHashRule(rule);\n const className = ALLOWED_PREFIXES.includes(slot)\n ? `${slot}-${hash}`\n : `css-${hash}`;\n if (!styleCache.has(className)) {\n const rules = buildRules(className, rule, keyframesMap);\n for (const r of rules) {\n sheet.insertRule(r, sheet.cssRules.length);\n }\n styleCache.set(className, true);\n }\n classNames[slot] = className;\n }\n return classNames;\n };\n}\nexport const mergeClasses = (...classes) => classes.filter(Boolean).join(\" \");\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n if (!Object.prototype.hasOwnProperty.call(set, key))\n continue;\n const prev = merged[key] ?? {};\n const cur = set[key] ?? {};\n merged[key] = { ...prev, ...cur };\n }\n }\n return makeStyles(merged)();\n}\n"],"names":["isState"],"mappings":"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"}
package/dist/index.min.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).MiniUI={})}(this,function(t){"use strict";const e=Symbol("STATE");let n=null;function o(t){const e=()=>{!function(t){for(const e of t.deps)e.subs.delete(t);t.deps.clear()}(e),n=e;try{t()}finally{n=null}};return e.deps=new Set,e(),e}function c(t){return t&&"object"==typeof t&&"subs"in t&&"val"in t}const r=new Proxy({},{get:(t,e)=>(...t)=>{const n=document.createElement(e);return s(n,t),n}});function s(t,e){for(const n of e.flat())null!=n&&!1!==n&&("function"!=typeof n?c(n)?u(t,n):n instanceof Node?t.appendChild(n):t.appendChild(document.createTextNode(String(n))):i(t,n))}function i(t,e){let n=document.createTextNode("");t.appendChild(n),o(()=>{const t=e();let o;if(t instanceof Node)o=t,s(o,[]);else if(Array.isArray(t)){const e=document.createDocumentFragment();for(const n of t.flat())e.appendChild(n instanceof Node?n:document.createTextNode(String(n??"")));o=e}else o=document.createTextNode(String(t??""));n!==o&&(n.parentNode?.replaceChild(o,n),n=o)})}function u(t,e){const n=document.createTextNode(String(e.val));t.appendChild(n),e.subs.add(()=>{const t=String(e.val);n.data!==t&&(n.data=t)})}const f=new Map,a=new Map;let l=null,p=null;const d=["root","button","icon","text","container","wrapper","card","header","section"],h="@keyframes ";function y(){return p||(l||(l=document.createElement("style"),l.id="styles",document.head.appendChild(l)),p=l.sheet),p}function m(t){let e=5381;for(let n=0;n<t.length;n++)e=33*e^t.charCodeAt(n);return(e>>>0).toString(36)}const b=new Map;function $(t){const e=b.get(t);if(e)return e;const n=t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase());return b.set(t,n),n}function g(t){const e=[];for(const n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const o=t[n];if(n.startsWith("@")||"object"==typeof o||null==o)continue;let c;c="function"==typeof o?o.toString():String(o),e.push(`${n}:${c}`)}return e.sort(),m(e.join("|"))}function w(t,e){const n=[];for(const o in t){if(!Object.prototype.hasOwnProperty.call(t,o))continue;const c=t[o];if(null==c||"object"==typeof c)continue;let r="function"==typeof c?c():c;if("string"==typeof r&&e.size>0)for(const[t,n]of e)r.includes(`$${t}`)&&(r=r.replaceAll(`$${t}`,n));n.push(`${$(o)}:${r}`)}return n.join(";")}function j(t,e){const n=`${t}-${m(t+JSON.stringify(e))}`,o=a.get(n);if(o)return o;const c=y(),r=[];for(const t in e){if(!Object.prototype.hasOwnProperty.call(e,t))continue;const n=w(e[t]??{},new Map);r.push(`${t}{${n}}`)}const s=`@keyframes ${n}{${r.join("")}}`;return c.insertRule(s,c.cssRules.length),a.set(n,n),n}function S(t,e,n){const o=[],c=[];for(const r in e){if(!Object.prototype.hasOwnProperty.call(e,r))continue;const s=e[r];if(!r.startsWith("@keyframes")&&s){if(":"===r[0]&&"object"==typeof s){const e=w(s??{},n);e&&o.push(`.${t}${r}{${e}}`);continue}if(r.startsWith("@media")&&"object"==typeof s){const e=w(s??{},n);e&&o.push(`${r}{.${t}{${e}}}`);continue}if(r.includes("&")&&"object"==typeof s){const e=r.replace(/&/g,`.${t}`),c=w(s??{},n);c&&o.push(`${e}{${c}}`);continue}if(!r.startsWith("@")&&"object"!=typeof s){const t="function"==typeof s?s():s;c.push(`${$(r)}:${t}`)}}}return c.length>0&&o.push(`.${t}{${c.join(";")}}`),o}function O(t){return()=>{const e={},n=new Map,o=y();for(const e in t){if(!Object.prototype.hasOwnProperty.call(t,e))continue;if(!e.startsWith(h))continue;const o=e.slice(11),c=j(o,t[e]);n.set(o,c)}for(const c in t){if(!Object.prototype.hasOwnProperty.call(t,c))continue;if(c.startsWith(h))continue;const r=t[c],s=g(r),i=d.includes(c)?`${c}-${s}`:`css-${s}`;if(!f.has(i)){const t=S(i,r,n);for(const e of t)o.insertRule(e,o.cssRules.length);f.set(i,!0)}e[c]=i}return e}}t.STATE=e,t.add=function(t){if("function"==typeof t){const e=t();if(!(e instanceof HTMLElement))throw new Error("Component function must return an HTMLElement");return void document.body.appendChild(e)}if("render"in t&&"function"==typeof t.render){if(!(t.element instanceof HTMLElement))throw new Error("Component object must have an HTMLElement in .element");return document.body.appendChild(t.element),void t.render()}throw new Error("Invalid component passed to add()")},t.derive=o,t.isState=function(t){return"object"==typeof t&&null!==t&&!0===t[e]},t.makeStyles=O,t.mergeClasses=(...t)=>t.filter(Boolean).join(" "),t.mergeStyleSets=function(...t){const e={};for(const n of t)if(n)for(const t in n){if(!Object.prototype.hasOwnProperty.call(n,t))continue;const o=e[t]??{},c=n[t]??{};e[t]={...o,...c}}return O(e)()},t.router=function(t){const e=[];let n=null;for(const o of Object.keys(t)){const c=t[o];if(!c)continue;if("*"===o){n=c;continue}const r=[],s=o.replace(/:[^/]+/g,t=>(r.push(t.slice(1)),"([^/]+)"));e.push({regex:new RegExp(`^${s}$`),keys:r,handler:c})}const o=document.createElement("div");let c=null,r="";function s(t){const e={};if(!t)return e;for(const[n,o]of new URLSearchParams(t))e[n]=o;return e}function i(){const t=location.pathname+location.search;if(t===r)return;r=t;const i=function(t){for(const{regex:n,keys:o,handler:c}of e){const e=t.match(n);if(!e)continue;const r={};return o.forEach((t,n)=>{r[t]=decodeURIComponent(e[n+1])}),Object.assign(r,s(location.search)),c(r)}if(n)return n({});throw new Error(`No route matches "${t}"`)}(location.pathname);c?o.replaceChild(i,c):o.appendChild(i),c=i}return window.addEventListener("popstate",i),i(),{element:o,render:i,push:function(t){history.pushState(null,"",t),i()},replace:function(t){history.replaceState(null,"",t),i()},back:()=>history.back()}},t.state=function(t){const o={[e]:!0,subs:new Set,get val(){return function(t){n&&(t.subs.add(n),n.deps.add(t))}(o),t},set val(e){if(e!==t){t=e;for(const t of Array.from(o.subs))t()}}};return o},t.tags=r,Object.defineProperty(t,"__esModule",{value:!0})});
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).MiniUI={})}(this,function(t){"use strict";const e=Symbol("STATE");let n=null;function o(t){const e=()=>{!function(t){for(const e of t.deps)e.subs.delete(t);t.deps.clear()}(e),n=e;try{t()}finally{n=null}};return e.deps=new Set,e(),e}function c(t){return t&&"object"==typeof t&&"subs"in t&&"val"in t}const r=new Proxy({},{get:(t,e)=>(...t)=>{const n=document.createElement(e);return function(t,e){for(const n of e.flat())null!=n&&!1!==n&&("function"!=typeof n?c(n)?i(t,n):n instanceof Node?t.appendChild(n):t.appendChild(document.createTextNode(String(n))):s(t,n))}(n,t),n}});function s(t,e){const n=document.createTextNode("");t.appendChild(n);let r=[];o(()=>{(()=>{for(const e of r)e.parentNode===t&&t.removeChild(e);r=[]})();const o=e(),i=Array.isArray(o)?o.flat():[o];for(const e of i){if(null==e||!1===e)continue;if("function"==typeof e){s(t,e);continue}if(c(e)){const o=document.createTextNode(String(e.val));t.insertBefore(o,n),e.subs.add(()=>{const t=String(e.val);o.data!==t&&(o.data=t)}),r.push(o);continue}if(e instanceof Node){t.insertBefore(e,n),r.push(e);continue}const o=document.createTextNode(String(e));t.insertBefore(o,n),r.push(o)}})}function i(t,e){const n=document.createTextNode(String(e.val));t.appendChild(n),e.subs.add(()=>{const t=String(e.val);n.data!==t&&(n.data=t)})}const u=new Map,f=new Map;let a=null,l=null;const p=["root","button","icon","text","container","wrapper","card","header","section"],d="@keyframes ";function h(){return l||(a||(a=document.createElement("style"),a.id="styles",document.head.appendChild(a)),l=a.sheet),l}function y(t){let e=5381;for(let n=0;n<t.length;n++)e=33*e^t.charCodeAt(n);return(e>>>0).toString(36)}const m=new Map;function b(t){const e=m.get(t);if(e)return e;const n=t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase());return m.set(t,n),n}function $(t){const e=[];for(const n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const o=t[n];if(n.startsWith("@")||"object"==typeof o||null==o)continue;let c;c="function"==typeof o?o.toString():String(o),e.push(`${n}:${c}`)}return e.sort(),y(e.join("|"))}function g(t,e){const n=[];for(const o in t){if(!Object.prototype.hasOwnProperty.call(t,o))continue;const c=t[o];if(null==c||"object"==typeof c)continue;let r="function"==typeof c?c():c;if("string"==typeof r&&e.size>0)for(const[t,n]of e)r.includes(`$${t}`)&&(r=r.replaceAll(`$${t}`,n));n.push(`${b(o)}:${r}`)}return n.join(";")}function w(t,e){const n=`${t}-${y(t+JSON.stringify(e))}`,o=f.get(n);if(o)return o;const c=h(),r=[];for(const t in e){if(!Object.prototype.hasOwnProperty.call(e,t))continue;const n=g(e[t]??{},new Map);r.push(`${t}{${n}}`)}const s=`@keyframes ${n}{${r.join("")}}`;return c.insertRule(s,c.cssRules.length),f.set(n,n),n}function j(t,e,n){const o=[],c=[];for(const r in e){if(!Object.prototype.hasOwnProperty.call(e,r))continue;const s=e[r];if(!r.startsWith("@keyframes")&&s){if(":"===r[0]&&"object"==typeof s){const e=g(s??{},n);e&&o.push(`.${t}${r}{${e}}`);continue}if(r.startsWith("@media")&&"object"==typeof s){const e=g(s??{},n);e&&o.push(`${r}{.${t}{${e}}}`);continue}if(r.includes("&")&&"object"==typeof s){const e=r.replace(/&/g,`.${t}`),c=g(s??{},n);c&&o.push(`${e}{${c}}`);continue}if(!r.startsWith("@")&&"object"!=typeof s){const t="function"==typeof s?s():s;c.push(`${b(r)}:${t}`)}}}return c.length>0&&o.push(`.${t}{${c.join(";")}}`),o}function S(t){return()=>{const e={},n=new Map,o=h();for(const e in t){if(!Object.prototype.hasOwnProperty.call(t,e))continue;if(!e.startsWith(d))continue;const o=e.slice(11),c=w(o,t[e]);n.set(o,c)}for(const c in t){if(!Object.prototype.hasOwnProperty.call(t,c))continue;if(c.startsWith(d))continue;const r=t[c],s=$(r),i=p.includes(c)?`${c}-${s}`:`css-${s}`;if(!u.has(i)){const t=j(i,r,n);for(const e of t)o.insertRule(e,o.cssRules.length);u.set(i,!0)}e[c]=i}return e}}t.STATE=e,t.add=function(t){if("function"==typeof t){const e=t();if(!(e instanceof HTMLElement))throw new Error("Component function must return an HTMLElement");return void document.body.appendChild(e)}if("render"in t&&"function"==typeof t.render){if(!(t.element instanceof HTMLElement))throw new Error("Component object must have an HTMLElement in .element");return document.body.appendChild(t.element),void t.render()}throw new Error("Invalid component passed to add()")},t.derive=o,t.isState=function(t){return"object"==typeof t&&null!==t&&!0===t[e]},t.makeStyles=S,t.mergeClasses=(...t)=>t.filter(Boolean).join(" "),t.mergeStyleSets=function(...t){const e={};for(const n of t)if(n)for(const t in n){if(!Object.prototype.hasOwnProperty.call(n,t))continue;const o=e[t]??{},c=n[t]??{};e[t]={...o,...c}}return S(e)()},t.router=function(t){const e=[];let n=null;for(const o of Object.keys(t)){const c=t[o];if(!c)continue;if("*"===o){n=c;continue}const r=[],s=o.replace(/:[^/]+/g,t=>(r.push(t.slice(1)),"([^/]+)"));e.push({regex:new RegExp(`^${s}$`),keys:r,handler:c})}const o=document.createElement("div");let c=null,r="";function s(t){const e={};if(!t)return e;for(const[n,o]of new URLSearchParams(t))e[n]=o;return e}function i(){const t=location.pathname+location.search;if(t===r)return;r=t;const i=function(t){for(const{regex:n,keys:o,handler:c}of e){const e=t.match(n);if(!e)continue;const r={};return o.forEach((t,n)=>{r[t]=decodeURIComponent(e[n+1])}),Object.assign(r,s(location.search)),c(r)}if(n)return n({});throw new Error(`No route matches "${t}"`)}(location.pathname);c?o.replaceChild(i,c):o.appendChild(i),c=i}return window.addEventListener("popstate",i),i(),{element:o,render:i,push:function(t){history.pushState(null,"",t),i()},replace:function(t){history.replaceState(null,"",t),i()},back:()=>history.back()}},t.state=function(t){const o={[e]:!0,subs:new Set,get val(){return function(t){n&&(t.subs.add(n),n.deps.add(t))}(o),t},set val(e){if(e!==t){t=e;for(const t of Array.from(o.subs))t()}}};return o},t.tags=r,Object.defineProperty(t,"__esModule",{value:!0})});
2
2
  //# sourceMappingURL=index.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":["../src/state.ts","../src/tags.ts","../src/styles.ts","../src/helpers.ts","../src/router.ts"],"sourcesContent":["export const STATE = Symbol(\"STATE\");\nexport function isState(x) {\n return typeof x === \"object\" && x !== null && x[STATE] === true;\n}\nlet currentEffect = null;\nfunction track(st) {\n if (currentEffect) {\n st.subs.add(currentEffect);\n currentEffect.deps.add(st);\n }\n}\nfunction cleanup(effect) {\n for (const st of effect.deps)\n st.subs.delete(effect);\n effect.deps.clear();\n}\nexport function state(v) {\n const st = {\n [STATE]: true,\n subs: new Set(),\n get val() {\n track(st);\n return v;\n },\n set val(nv) {\n if (nv === v)\n return;\n v = nv;\n for (const fn of Array.from(st.subs)) {\n fn();\n }\n }\n };\n return st;\n}\nexport function derive(fn) {\n const effect = (() => {\n cleanup(effect);\n currentEffect = effect;\n try {\n fn();\n }\n finally {\n currentEffect = null;\n }\n });\n effect.deps = new Set();\n effect();\n return effect;\n}\n","import { derive, state } from \"./state\";\nfunction isState(x) {\n return x && typeof x === \"object\" && \"subs\" in x && \"val\" in x;\n}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (...children) => {\n const el = document.createElement(tag);\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(el, fn) {\n let node = document.createTextNode(\"\");\n el.appendChild(node);\n derive(() => {\n const value = fn();\n let newNode;\n if (value instanceof Node) {\n newNode = value;\n processChildren(newNode, []);\n }\n else if (Array.isArray(value)) {\n const fragment = document.createDocumentFragment();\n for (const v of value.flat()) {\n fragment.appendChild(v instanceof Node ? v : document.createTextNode(String(v ?? \"\")));\n }\n newNode = fragment;\n }\n else {\n newNode = document.createTextNode(String(value ?? \"\"));\n }\n if (node !== newNode) {\n node.parentNode?.replaceChild(newNode, node);\n node = newNode;\n }\n });\n}\nfunction mountReactiveState(el, st) {\n const node = document.createTextNode(String(st.val));\n el.appendChild(node);\n st.subs.add(() => {\n const newVal = String(st.val);\n if (node.data !== newVal) {\n node.data = newVal;\n }\n });\n}\n","const styleCache = new Map();\nconst keyframeCache = new Map();\nlet styleElement = null;\nlet styleSheet = null;\nconst ALLOWED_PREFIXES = [\n \"root\",\n \"button\",\n \"icon\",\n \"text\",\n \"container\",\n \"wrapper\",\n \"card\",\n \"header\",\n \"section\",\n];\nconst KEYFRAMES_PREFIX = \"@keyframes \";\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n }\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\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 camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const result = str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, result);\n return result;\n}\nfunction stableHashRule(rule) {\n const parts = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@\") || typeof val === \"object\" || val == null)\n continue;\n let v;\n if (typeof val === \"function\")\n v = val.toString();\n else\n v = String(val);\n parts.push(`${key}:${v}`);\n }\n parts.sort();\n return hashString(parts.join(\"|\"));\n}\nfunction stringifyDecls(props, keyframes) {\n const out = [];\n for (const key in props) {\n if (!Object.prototype.hasOwnProperty.call(props, key))\n continue;\n const raw = props[key];\n if (raw == null || typeof raw === \"object\")\n continue;\n let val = typeof raw === \"function\" ? raw() : raw;\n if (typeof val === \"string\" && keyframes.size > 0) {\n for (const [orig, uniq] of keyframes) {\n if (val.includes(`$${orig}`)) {\n val = val.replaceAll(`$${orig}`, uniq);\n }\n }\n }\n out.push(`${camelToKebab(key)}:${val}`);\n }\n return out.join(\";\");\n}\nfunction registerKeyframes(name, frames) {\n const hash = hashString(name + JSON.stringify(frames));\n const unique = `${name}-${hash}`;\n const cached = keyframeCache.get(unique);\n if (cached)\n return cached;\n const sheet = ensureStyleSheet();\n const steps = [];\n for (const step in frames) {\n if (!Object.prototype.hasOwnProperty.call(frames, step))\n continue;\n const decls = stringifyDecls(frames[step] ?? {}, new Map());\n steps.push(`${step}{${decls}}`);\n }\n const ruleText = `@keyframes ${unique}{${steps.join(\"\")}}`;\n sheet.insertRule(ruleText, sheet.cssRules.length);\n keyframeCache.set(unique, unique);\n return unique;\n}\nfunction buildRules(className, rule, keyframes) {\n const rules = [];\n const baseDecls = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@keyframes\")) {\n continue;\n }\n if (!val)\n continue;\n if (key[0] === \":\" && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`.${className}${key}{${decls}}`);\n }\n continue;\n }\n if (key.startsWith(\"@media\") && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${key}{.${className}{${decls}}}`);\n }\n continue;\n }\n if (key.includes(\"&\") && typeof val === \"object\") {\n const selector = key.replace(/&/g, `.${className}`);\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${selector}{${decls}}`);\n }\n continue;\n }\n if (!key.startsWith(\"@\") && typeof val !== \"object\") {\n const raw = typeof val === \"function\" ? val() : val;\n baseDecls.push(`${camelToKebab(key)}:${raw}`);\n }\n }\n if (baseDecls.length > 0) {\n rules.push(`.${className}{${baseDecls.join(\";\")}}`);\n }\n return rules;\n}\nexport function makeStyles(styles) {\n return () => {\n const classNames = {};\n const keyframesMap = new Map();\n const sheet = ensureStyleSheet();\n for (const key in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, key))\n continue;\n if (!key.startsWith(KEYFRAMES_PREFIX))\n continue;\n const name = key.slice(KEYFRAMES_PREFIX.length);\n const frames = styles[key];\n const unique = registerKeyframes(name, frames);\n keyframesMap.set(name, unique);\n }\n for (const slot in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, slot))\n continue;\n if (slot.startsWith(KEYFRAMES_PREFIX))\n continue;\n const rule = styles[slot];\n const hash = stableHashRule(rule);\n const className = ALLOWED_PREFIXES.includes(slot)\n ? `${slot}-${hash}`\n : `css-${hash}`;\n if (!styleCache.has(className)) {\n const rules = buildRules(className, rule, keyframesMap);\n for (const r of rules) {\n sheet.insertRule(r, sheet.cssRules.length);\n }\n styleCache.set(className, true);\n }\n classNames[slot] = className;\n }\n return classNames;\n };\n}\nexport const mergeClasses = (...classes) => classes.filter(Boolean).join(\" \");\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n if (!Object.prototype.hasOwnProperty.call(set, key))\n continue;\n const prev = merged[key] ?? {};\n const cur = set[key] ?? {};\n merged[key] = { ...prev, ...cur };\n }\n }\n return makeStyles(merged)();\n}\n","export function add(component) {\n if (typeof component === \"function\") {\n const el = component();\n if (!(el instanceof HTMLElement)) {\n throw new Error(\"Component function must return an HTMLElement\");\n }\n document.body.appendChild(el);\n return;\n }\n if (\"render\" in component && typeof component.render === \"function\") {\n if (!(component.element instanceof HTMLElement)) {\n throw new Error(\"Component object must have an HTMLElement in .element\");\n }\n document.body.appendChild(component.element);\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 const root = document.createElement(\"div\");\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 path = location.pathname + location.search;\n if (path === currentPath)\n return;\n currentPath = path;\n const next = matchRoute(location.pathname);\n if (currentEl) {\n root.replaceChild(next, currentEl);\n }\n else {\n root.appendChild(next);\n }\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n function push(path) {\n history.pushState(null, \"\", path);\n render();\n }\n function replace(path) {\n history.replaceState(null, \"\", path);\n render();\n }\n return {\n element: root,\n render,\n push,\n replace,\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","children","el","document","createElement","processChildren","child","flat","mountReactiveState","Node","appendChild","createTextNode","String","mountReactiveFunction","node","value","newNode","Array","isArray","fragment","createDocumentFragment","v","parentNode","replaceChild","val","add","newVal","data","styleCache","Map","keyframeCache","styleElement","styleSheet","ALLOWED_PREFIXES","KEYFRAMES_PREFIX","ensureStyleSheet","id","head","sheet","hashString","str","hash","i","length","charCodeAt","toString","camelToKebabCache","camelToKebab","cached","result","replace","m","toLowerCase","set","stableHashRule","rule","parts","key","Object","prototype","hasOwnProperty","call","startsWith","push","sort","join","stringifyDecls","props","keyframes","out","raw","size","orig","uniq","includes","replaceAll","registerKeyframes","name","frames","unique","JSON","stringify","steps","step","decls","ruleText","insertRule","cssRules","buildRules","className","rules","baseDecls","selector","makeStyles","styles","classNames","keyframesMap","slice","slot","has","r","component","HTMLElement","Error","body","render","element","classes","filter","Boolean","sets","merged","prev","cur","routes","patterns","wildcard","path","keys","handler","pattern","regex","RegExp","root","currentEl","currentPath","parseQuery","search","params","k","URLSearchParams","location","pathname","next","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}\nexport const tags = new Proxy({}, {\n get(_, tag) {\n return (...children) => {\n const el = document.createElement(tag);\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 // Reactive function child\n if (typeof child === \"function\") {\n mountReactiveFunction(el, child);\n continue;\n }\n // Reactive state child (text)\n if (isState(child)) {\n mountReactiveState(el, child);\n continue;\n }\n // DOM Node\n if (child instanceof Node) {\n el.appendChild(child);\n continue;\n }\n // Fallback to text\n el.appendChild(document.createTextNode(String(child)));\n }\n}\nfunction mountReactiveFunction(parent, fn) {\n // Marker node to know where this reactive block lives\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 }\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 // nested function inside reactive\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(el, st) {\n const node = document.createTextNode(String(st.val));\n el.appendChild(node);\n st.subs.add(() => {\n const next = String(st.val);\n if (node.data !== next) {\n node.data = next;\n }\n });\n}\n","const styleCache = new Map();\nconst keyframeCache = new Map();\nlet styleElement = null;\nlet styleSheet = null;\nconst ALLOWED_PREFIXES = [\n \"root\",\n \"button\",\n \"icon\",\n \"text\",\n \"container\",\n \"wrapper\",\n \"card\",\n \"header\",\n \"section\",\n];\nconst KEYFRAMES_PREFIX = \"@keyframes \";\nfunction ensureStyleSheet() {\n if (!styleSheet) {\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = \"styles\";\n document.head.appendChild(styleElement);\n }\n styleSheet = styleElement.sheet;\n }\n return styleSheet;\n}\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 camelToKebabCache = new Map();\nfunction camelToKebab(str) {\n const cached = camelToKebabCache.get(str);\n if (cached)\n return cached;\n const result = str.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n camelToKebabCache.set(str, result);\n return result;\n}\nfunction stableHashRule(rule) {\n const parts = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@\") || typeof val === \"object\" || val == null)\n continue;\n let v;\n if (typeof val === \"function\")\n v = val.toString();\n else\n v = String(val);\n parts.push(`${key}:${v}`);\n }\n parts.sort();\n return hashString(parts.join(\"|\"));\n}\nfunction stringifyDecls(props, keyframes) {\n const out = [];\n for (const key in props) {\n if (!Object.prototype.hasOwnProperty.call(props, key))\n continue;\n const raw = props[key];\n if (raw == null || typeof raw === \"object\")\n continue;\n let val = typeof raw === \"function\" ? raw() : raw;\n if (typeof val === \"string\" && keyframes.size > 0) {\n for (const [orig, uniq] of keyframes) {\n if (val.includes(`$${orig}`)) {\n val = val.replaceAll(`$${orig}`, uniq);\n }\n }\n }\n out.push(`${camelToKebab(key)}:${val}`);\n }\n return out.join(\";\");\n}\nfunction registerKeyframes(name, frames) {\n const hash = hashString(name + JSON.stringify(frames));\n const unique = `${name}-${hash}`;\n const cached = keyframeCache.get(unique);\n if (cached)\n return cached;\n const sheet = ensureStyleSheet();\n const steps = [];\n for (const step in frames) {\n if (!Object.prototype.hasOwnProperty.call(frames, step))\n continue;\n const decls = stringifyDecls(frames[step] ?? {}, new Map());\n steps.push(`${step}{${decls}}`);\n }\n const ruleText = `@keyframes ${unique}{${steps.join(\"\")}}`;\n sheet.insertRule(ruleText, sheet.cssRules.length);\n keyframeCache.set(unique, unique);\n return unique;\n}\nfunction buildRules(className, rule, keyframes) {\n const rules = [];\n const baseDecls = [];\n for (const key in rule) {\n if (!Object.prototype.hasOwnProperty.call(rule, key))\n continue;\n const val = rule[key];\n if (key.startsWith(\"@keyframes\")) {\n continue;\n }\n if (!val)\n continue;\n if (key[0] === \":\" && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`.${className}${key}{${decls}}`);\n }\n continue;\n }\n if (key.startsWith(\"@media\") && typeof val === \"object\") {\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${key}{.${className}{${decls}}}`);\n }\n continue;\n }\n if (key.includes(\"&\") && typeof val === \"object\") {\n const selector = key.replace(/&/g, `.${className}`);\n const decls = stringifyDecls(val ?? {}, keyframes);\n if (decls) {\n rules.push(`${selector}{${decls}}`);\n }\n continue;\n }\n if (!key.startsWith(\"@\") && typeof val !== \"object\") {\n const raw = typeof val === \"function\" ? val() : val;\n baseDecls.push(`${camelToKebab(key)}:${raw}`);\n }\n }\n if (baseDecls.length > 0) {\n rules.push(`.${className}{${baseDecls.join(\";\")}}`);\n }\n return rules;\n}\nexport function makeStyles(styles) {\n return () => {\n const classNames = {};\n const keyframesMap = new Map();\n const sheet = ensureStyleSheet();\n for (const key in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, key))\n continue;\n if (!key.startsWith(KEYFRAMES_PREFIX))\n continue;\n const name = key.slice(KEYFRAMES_PREFIX.length);\n const frames = styles[key];\n const unique = registerKeyframes(name, frames);\n keyframesMap.set(name, unique);\n }\n for (const slot in styles) {\n if (!Object.prototype.hasOwnProperty.call(styles, slot))\n continue;\n if (slot.startsWith(KEYFRAMES_PREFIX))\n continue;\n const rule = styles[slot];\n const hash = stableHashRule(rule);\n const className = ALLOWED_PREFIXES.includes(slot)\n ? `${slot}-${hash}`\n : `css-${hash}`;\n if (!styleCache.has(className)) {\n const rules = buildRules(className, rule, keyframesMap);\n for (const r of rules) {\n sheet.insertRule(r, sheet.cssRules.length);\n }\n styleCache.set(className, true);\n }\n classNames[slot] = className;\n }\n return classNames;\n };\n}\nexport const mergeClasses = (...classes) => classes.filter(Boolean).join(\" \");\nexport function mergeStyleSets(...sets) {\n const merged = {};\n for (const set of sets) {\n if (!set)\n continue;\n for (const key in set) {\n if (!Object.prototype.hasOwnProperty.call(set, key))\n continue;\n const prev = merged[key] ?? {};\n const cur = set[key] ?? {};\n merged[key] = { ...prev, ...cur };\n }\n }\n return makeStyles(merged)();\n}\n","export function add(component) {\n if (typeof component === \"function\") {\n const el = component();\n if (!(el instanceof HTMLElement)) {\n throw new Error(\"Component function must return an HTMLElement\");\n }\n document.body.appendChild(el);\n return;\n }\n if (\"render\" in component && typeof component.render === \"function\") {\n if (!(component.element instanceof HTMLElement)) {\n throw new Error(\"Component object must have an HTMLElement in .element\");\n }\n document.body.appendChild(component.element);\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 const root = document.createElement(\"div\");\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 path = location.pathname + location.search;\n if (path === currentPath)\n return;\n currentPath = path;\n const next = matchRoute(location.pathname);\n if (currentEl) {\n root.replaceChild(next, currentEl);\n }\n else {\n root.appendChild(next);\n }\n currentEl = next;\n }\n window.addEventListener(\"popstate\", render);\n render();\n function push(path) {\n history.pushState(null, \"\", path);\n render();\n }\n function replace(path) {\n history.replaceState(null, \"\", path);\n render();\n }\n return {\n element: root,\n render,\n push,\n replace,\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","children","el","document","createElement","child","flat","mountReactiveState","Node","appendChild","createTextNode","String","mountReactiveFunction","processChildren","parent","marker","mounted","n","parentNode","removeChild","value","values","Array","isArray","v","node","val","insertBefore","add","next","data","push","text","styleCache","Map","keyframeCache","styleElement","styleSheet","ALLOWED_PREFIXES","KEYFRAMES_PREFIX","ensureStyleSheet","id","head","sheet","hashString","str","hash","i","length","charCodeAt","toString","camelToKebabCache","camelToKebab","cached","result","replace","m","toLowerCase","set","stableHashRule","rule","parts","key","Object","prototype","hasOwnProperty","call","startsWith","sort","join","stringifyDecls","props","keyframes","out","raw","size","orig","uniq","includes","replaceAll","registerKeyframes","name","frames","unique","JSON","stringify","steps","step","decls","ruleText","insertRule","cssRules","buildRules","className","rules","baseDecls","selector","makeStyles","styles","classNames","keyframesMap","slice","slot","has","r","component","HTMLElement","Error","body","render","element","classes","filter","Boolean","sets","merged","prev","cur","routes","patterns","wildcard","path","keys","handler","pattern","regex","RegExp","root","currentEl","currentPath","parseQuery","search","params","k","URLSearchParams","location","pathname","match","forEach","decodeURIComponent","assign","matchRoute","replaceChild","window","addEventListener","history","pushState","replaceState","back","track","nv","from"],"mappings":"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"}
package/dist/tags.d.ts CHANGED
@@ -1 +1,4 @@
1
- export declare const tags: Record<string, (...children: any[]) => HTMLElement>;
1
+ import type { State } from "./state";
2
+ type Child = Node | string | number | boolean | null | undefined | State<any> | (() => any) | Child[];
3
+ export declare const tags: Record<string, (...children: Child[]) => HTMLElement>;
4
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uraniyum",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.esm.js",
6
6
  "browser": "dist/index.min.js",
package/src/tags.ts CHANGED
@@ -1,78 +1,110 @@
1
- import { derive, state } from "./state";
1
+ import { derive } from "./state";
2
2
  import type { State } from "./state";
3
3
 
4
4
  function isState(x: any): x is State<any> {
5
5
  return x && typeof x === "object" && "subs" in x && "val" in x;
6
6
  }
7
7
 
8
- type Child = Node | string | number | null | undefined | State<any> | (() => any) | Child[];
9
-
10
- export const tags: Record<string, (...children: any[]) => HTMLElement> =
8
+ type Child =
9
+ | Node
10
+ | string
11
+ | number
12
+ | boolean
13
+ | null
14
+ | undefined
15
+ | State<any>
16
+ | (() => any)
17
+ | Child[];
18
+
19
+ export const tags: Record<string, (...children: Child[]) => HTMLElement> =
11
20
  new Proxy({}, {
12
21
  get(_, tag: string) {
13
- return (...children: any[]): HTMLElement => {
22
+ return (...children: Child[]): HTMLElement => {
14
23
  const el = document.createElement(tag);
15
-
16
24
  processChildren(el, children);
17
-
18
25
  return el;
19
26
  };
20
27
  }
21
28
  });
22
29
 
23
- function processChildren(el: HTMLElement, children: any[]) {
30
+ function processChildren(el: HTMLElement, children: Child[]) {
24
31
  for (const child of children.flat()) {
25
32
  if (child == null || child === false) continue;
26
33
 
34
+ // Reactive function child
27
35
  if (typeof child === "function") {
28
36
  mountReactiveFunction(el, child);
29
37
  continue;
30
38
  }
31
39
 
40
+ // Reactive state child (text)
32
41
  if (isState(child)) {
33
42
  mountReactiveState(el, child);
34
43
  continue;
35
44
  }
36
45
 
46
+ // DOM Node
37
47
  if (child instanceof Node) {
38
48
  el.appendChild(child);
39
49
  continue;
40
50
  }
41
51
 
52
+ // Fallback to text
42
53
  el.appendChild(document.createTextNode(String(child)));
43
54
  }
44
55
  }
45
56
 
46
- function mountReactiveFunction(el: HTMLElement, fn: () => any) {
47
- let node: Node = document.createTextNode("");
48
- el.appendChild(node);
57
+ function mountReactiveFunction(parent: HTMLElement, fn: () => any) {
58
+ // Marker node to know where this reactive block lives
59
+ const marker = document.createTextNode("");
60
+ parent.appendChild(marker);
61
+
62
+ let mounted: Node[] = [];
63
+
64
+ const cleanup = () => {
65
+ for (const n of mounted) {
66
+ if (n.parentNode === parent) {
67
+ parent.removeChild(n);
68
+ }
69
+ }
70
+ mounted = [];
71
+ };
49
72
 
50
73
  derive(() => {
74
+ cleanup();
75
+
51
76
  const value = fn();
77
+ const values = Array.isArray(value) ? value.flat() : [value];
52
78
 
53
- let newNode: Node;
79
+ for (const v of values) {
80
+ if (v == null || v === false) continue;
54
81
 
55
- if (value instanceof Node) {
56
- newNode = value;
57
- processChildren(newNode as HTMLElement, []);
58
- }
82
+ // nested function inside reactive
83
+ if (typeof v === "function") {
84
+ mountReactiveFunction(parent, v);
85
+ continue;
86
+ }
59
87
 
60
- else if (Array.isArray(value)) {
61
- const fragment = document.createDocumentFragment();
62
- for (const v of value.flat()) {
63
- fragment.appendChild(
64
- v instanceof Node ? v : document.createTextNode(String(v ?? ""))
65
- );
88
+ if (isState(v)) {
89
+ const node = document.createTextNode(String(v.val));
90
+ parent.insertBefore(node, marker);
91
+ v.subs.add(() => {
92
+ const next = String(v.val);
93
+ if (node.data !== next) node.data = next;
94
+ });
95
+ mounted.push(node);
96
+ continue;
97
+ }
98
+
99
+ if (v instanceof Node) {
100
+ parent.insertBefore(v, marker);
101
+ mounted.push(v);
102
+ continue;
66
103
  }
67
- newNode = fragment;
68
- }
69
- else {
70
- newNode = document.createTextNode(String(value ?? ""));
71
- }
72
104
 
73
- if (node !== newNode) {
74
- node.parentNode?.replaceChild(newNode, node);
75
- node = newNode;
105
+ const text = document.createTextNode(String(v));
106
+ parent.insertBefore(text, marker);
107
+ mounted.push(text);
76
108
  }
77
109
  });
78
110
  }
@@ -82,9 +114,9 @@ function mountReactiveState(el: HTMLElement, st: State<any>) {
82
114
  el.appendChild(node);
83
115
 
84
116
  st.subs.add(() => {
85
- const newVal = String(st.val);
86
- if (node.data !== newVal) {
87
- node.data = newVal;
117
+ const next = String(st.val);
118
+ if (node.data !== next) {
119
+ node.data = next;
88
120
  }
89
121
  });
90
122
  }