From 9c99b33d6c01f98f08e05df22681621792489c0b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 24 May 2026 15:00:17 +0000 Subject: [PATCH 1/9] Initial plan From 7da44d530ee651b461ca0c95692ecd9e194934e0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 24 May 2026 15:14:33 +0000 Subject: [PATCH 2/9] perf: optimize morph hot path - text-only fast path, skip updateAttrs when attrs match, simplify noMorph Agent-Logs-Url: https://github.com/dadhi/dmax/sessions/90d6b16d-998a-4c9f-a856-a241dade6193 Co-authored-by: dadhi <39516+dadhi@users.noreply.github.com> --- dmax.js | 73 +++++++++++++++---------------------- tests/dmax.size.limits.json | 4 +- 2 files changed, 32 insertions(+), 45 deletions(-) diff --git a/dmax.js b/dmax.js index 798f1f9..2891ef3 100644 --- a/dmax.js +++ b/dmax.js @@ -567,7 +567,7 @@ } const noScan = (el) => el && el.hasAttribute && (el.hasAttribute(DM_NO) || el.hasAttribute(DM_NO_SCAN)) - const noMorph = (el) => el && el.hasAttribute && (el.hasAttribute(DM_NO) || el.hasAttribute(DM_NO_MORPH)) + const noMorph = (el) => el.hasAttribute(DM_NO) || el.hasAttribute(DM_NO_MORPH) const warn = (...a) => console.warn('[dmax]', ...a), logErr = (...a) => console.error('[dmax]', ...a) const wireItClone = (node) => { const stack = [node] @@ -1400,19 +1400,15 @@ const getPatchTars = (selector, simpleId = selector && getSimpleIdSelector(selector), el = simpleId && document.getElementById(simpleId)) => !selector ? NIL : simpleId ? el ? [el] : NIL : document.querySelectorAll(selector) const sameAttrs = (from, to) => { - const fromAttrs = from.attributes, toAttrs = to.attributes, len = toAttrs.length - if (fromAttrs.length !== len) return false - for (let i = 0; i < len; i++) { - const fromAttr = fromAttrs[i], toAttr = toAttrs[i] - if (fromAttr.name !== toAttr.name || fromAttr.value !== toAttr.value) return false - } + const fa = from.attributes, ta = to.attributes, len = ta.length + if (fa.length !== len) return false + for (let i = 0; i < len; i++) if (fa[i].name !== ta[i].name || fa[i].value !== ta[i].value) return false return true } - // Sync attributes from to onto from. + // Sync attributes from to onto from. Called only when attrs differ. const updateAttrs = (from, to) => { const toAttrs = to.attributes, fromAttrs = from.attributes, tl = toAttrs.length, fl = fromAttrs.length - if (!fl && !tl) return if (fl === tl) { let same = true, re = false for (let i = 0; i < tl; i++) { @@ -1430,14 +1426,8 @@ if (same) return } } - if (!tl) { - for (let i = fl - 1; i >= 0; i--) from.removeAttribute(fromAttrs[i].name) - return - } - for (let i = 0; i < tl; i++) { - const ta = toAttrs[i], fa = fromAttrs.getNamedItem(ta.name) - if (!fa || fa.value !== ta.value) from.setAttribute(ta.name, ta.value) - } + if (!tl) { for (let i = fl - 1; i >= 0; i--) from.removeAttribute(fromAttrs[i].name); return } + for (let i = 0; i < tl; i++) { const ta = toAttrs[i]; if (fromAttrs.getNamedItem(ta.name)?.value !== ta.value) from.setAttribute(ta.name, ta.value) } for (let i = fl - 1; i >= 0; i--) if (!to.hasAttribute(fromAttrs[i].name)) from.removeAttribute(fromAttrs[i].name) } @@ -1495,7 +1485,7 @@ } let _morphActiveEl = null - const doneMorph = (root) => root && (_morphActiveEl = null) + const _endMorph = (root) => root && (_morphActiveEl = null) // Update from in place without disturbing matched-node listeners or cleanup state. // Preserve caret, selection, and scroll across streamed updates. const morph = (from, to) => { @@ -1503,36 +1493,33 @@ if (root) _morphActiveEl = document.activeElement if (from.nodeType === 3 && to.nodeType === 3) { if (from.nodeValue !== to.nodeValue) from.nodeValue = to.nodeValue - return doneMorph(root) + return _endMorph(root) } - if (from.nodeType !== ELEMENT_NODE || to.nodeType !== ELEMENT_NODE || noMorph(from) || noMorph(to)) return doneMorph(root) + if (from.nodeType !== ELEMENT_NODE || to.nodeType !== ELEMENT_NODE || noMorph(from) || noMorph(to)) return _endMorph(root) if (from.tagName !== to.tagName) { if (from.parentNode) from.parentNode.replaceChild(to.cloneNode(true), from) - return doneMorph(root) + return _endMorph(root) } const fromFirst = from.firstChild, toFirst = to.firstChild, textOnly = fromFirst && toFirst && !fromFirst.nextSibling && !toFirst.nextSibling && fromFirst.nodeType === TEXT_NODE && toFirst.nodeType === TEXT_NODE - if (sameAttrs(from, to) && (!fromFirst && !toFirst || textOnly && fromFirst.nodeValue === toFirst.nodeValue)) return doneMorph(root) - const tag = from.tagName, isFocused = from === _morphActiveEl + const attrsMatch = sameAttrs(from, to) + if (attrsMatch && (!fromFirst && !toFirst || textOnly && fromFirst.nodeValue === toFirst.nodeValue)) return _endMorph(root) + if (textOnly && attrsMatch && from !== _morphActiveEl) { fromFirst.nodeValue = toFirst.nodeValue; return _endMorph(root) } + const isFocused = from === _morphActiveEl let selStart = -1, selEnd = -1, selDir = 'none', selVal = null, selIdx = -1 - if (isFocused && (tag === 'INPUT' || tag === 'TEXTAREA')) { - try { selStart = from.selectionStart; selEnd = from.selectionEnd; selDir = from.selectionDirection || 'none' } catch (_) {} - } else if (isFocused && tag === 'SELECT') selVal = from.value, selIdx = from.selectedIndex - const scrollTop = from.scrollTop, scrollLeft = from.scrollLeft, keepScroll = scrollTop || scrollLeft - updateAttrs(from, to) - if (textOnly) { - if (fromFirst.nodeValue !== toFirst.nodeValue) fromFirst.nodeValue = toFirst.nodeValue - } else if (fromFirst || toFirst) morphChildren(from, to) - if (keepScroll) { - if (from.scrollTop !== scrollTop) from.scrollTop = scrollTop - if (from.scrollLeft !== scrollLeft) from.scrollLeft = scrollLeft - } - if (isFocused && selStart >= 0) { - try { from.setSelectionRange(selStart, selEnd, selDir) } catch (_) {} - } else if (isFocused && tag === 'SELECT') { - from.value = selVal - if (from.value !== selVal && selIdx >= 0 && selIdx < from.options.length) from.selectedIndex = selIdx - } - doneMorph(root) + if (isFocused) { + const tag = from.tagName + if (tag === 'INPUT' || tag === 'TEXTAREA') { + try { selStart = from.selectionStart; selEnd = from.selectionEnd; selDir = from.selectionDirection || 'none' } catch (_) {} + } else if (tag === 'SELECT') selVal = from.value, selIdx = from.selectedIndex + } + const scrollTop = from.scrollTop, scrollLeft = from.scrollLeft + if (!attrsMatch) updateAttrs(from, to) + if (textOnly) { if (fromFirst.nodeValue !== toFirst.nodeValue) fromFirst.nodeValue = toFirst.nodeValue } + else if (fromFirst || toFirst) morphChildren(from, to) + if (scrollTop || scrollLeft) { if (from.scrollTop !== scrollTop) from.scrollTop = scrollTop; if (from.scrollLeft !== scrollLeft) from.scrollLeft = scrollLeft } + if (isFocused && selStart >= 0) { try { from.setSelectionRange(selStart, selEnd, selDir) } catch (_) {} } + else if (isFocused && selVal !== null) { from.value = selVal; if (from.value !== selVal && selIdx >= 0 && selIdx < from.options.length) from.selectedIndex = selIdx } + _endMorph(root) } const JSON_MERGE_DELETE = Symbol('json_merge_delete') @@ -1655,7 +1642,7 @@ st[0] = 'message', st[1] = null, st[2] = false } const consumeSseLine = (raw, st, applied, dKey) => { - const line = raw[raw.length - 1] === '\r' ? raw.slice(0, -1) : raw + const line = raw.length && raw[raw.length - 1] === '\r' ? raw.slice(0, -1) : raw if (!line) return flushSse(applied, st, dKey) if (line[0] === SSE_COMMENT) return const ci = line.indexOf(':'), field = ci < 0 ? line : line.slice(0, ci) diff --git a/tests/dmax.size.limits.json b/tests/dmax.size.limits.json index f6d6f98..8ab6db2 100644 --- a/tests/dmax.size.limits.json +++ b/tests/dmax.size.limits.json @@ -1,4 +1,4 @@ { - "lines": 1755, - "bytes": 89998 + "lines": 1742, + "bytes": 89941 } From 9f2fffe79d2d548ce625a9ffbfd1a4c5054a7f70 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 24 May 2026 15:16:49 +0000 Subject: [PATCH 3/9] perf: remove redundant empty-string guard in consumeSseLine Agent-Logs-Url: https://github.com/dadhi/dmax/sessions/90d6b16d-998a-4c9f-a856-a241dade6193 Co-authored-by: dadhi <39516+dadhi@users.noreply.github.com> --- dmax.js | 2 +- tests/dmax.size.limits.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dmax.js b/dmax.js index 2891ef3..1e01b45 100644 --- a/dmax.js +++ b/dmax.js @@ -1642,7 +1642,7 @@ st[0] = 'message', st[1] = null, st[2] = false } const consumeSseLine = (raw, st, applied, dKey) => { - const line = raw.length && raw[raw.length - 1] === '\r' ? raw.slice(0, -1) : raw + const line = raw[raw.length - 1] === '\r' ? raw.slice(0, -1) : raw if (!line) return flushSse(applied, st, dKey) if (line[0] === SSE_COMMENT) return const ci = line.indexOf(':'), field = ci < 0 ? line : line.slice(0, ci) diff --git a/tests/dmax.size.limits.json b/tests/dmax.size.limits.json index 8ab6db2..0cf125b 100644 --- a/tests/dmax.size.limits.json +++ b/tests/dmax.size.limits.json @@ -1,4 +1,4 @@ { "lines": 1742, - "bytes": 89941 + "bytes": 89927 } From 37d4609309b6624be929812d6d8e8b4b23648df6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 24 May 2026 15:56:00 +0000 Subject: [PATCH 4/9] =?UTF-8?q?perf:=20optimize=20dmEx/dmIt/dmAct=20hot=20?= =?UTF-8?q?paths=20=E2=80=94=20precompute=20targets,=20skip=20empty=20loop?= =?UTF-8?q?s,=20single-item=20fast=20path?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agent-Logs-Url: https://github.com/dadhi/dmax/sessions/7dd03f41-caf2-4108-bbe7-6c17dbdbc944 Co-authored-by: dadhi <39516+dadhi@users.noreply.github.com> --- dmax.js | 85 +++++++++++-------------------------- tests/dmax.size.limits.json | 4 +- 2 files changed, 26 insertions(+), 63 deletions(-) diff --git a/dmax.js b/dmax.js index 1e01b45..9c29850 100644 --- a/dmax.js +++ b/dmax.js @@ -595,25 +595,21 @@ if (!expected(Array.isArray(val), 'dmIt expected array value from:', tr, 'on:', el)) return const newLen = val.length, oldLen = itState.count || 0 if (newLen < oldLen) { - for (let i = 0; i < oldLen - newLen; i++) { - const node = itState.nodes.pop() - if (node && node.parentNode) node.parentNode.removeChild(node) - } + for (let i = 0; i < oldLen - newLen; i++) { const node = itState.nodes.pop(); if (node && node.parentNode) node.parentNode.removeChild(node) } itState.count = newLen } if (newLen > oldLen) { - const frag = document.createDocumentFragment() - for (let idx = oldLen; idx < newLen; idx++) { - try { - const node = tplFirst.cloneNode(true) - const idxText = '' + idx - rewriteItBindings(node, itemRefBase + '.' + idxText, itemExprBase + '[' + idxText + ']', idxText) - frag.appendChild(node) - itState.nodes.push(node) - } catch { } + const count = newLen - oldLen + if (count === 1) { + const node = tplFirst.cloneNode(true), idxText = '' + oldLen + rewriteItBindings(node, itemRefBase + '.' + idxText, itemExprBase + '[' + idxText + ']', idxText) + el.appendChild(node), itState.nodes.push(node) + } else { + const frag = document.createDocumentFragment() + for (let idx = oldLen; idx < newLen; idx++) { try { const node = tplFirst.cloneNode(true), idxText = '' + idx; rewriteItBindings(node, itemRefBase + '.' + idxText, itemExprBase + '[' + idxText + ']', idxText); frag.appendChild(node); itState.nodes.push(node) } catch { } } + el.appendChild(frag) } - el.appendChild(frag) - for (let i = itState.nodes.length - (newLen - oldLen); i < itState.nodes.length; ++i) wireItClone(itState.nodes[i]) + for (let i = itState.nodes.length - count; i < itState.nodes.length; ++i) wireItClone(itState.nodes[i]) itState.count = newLen } } @@ -976,19 +972,11 @@ } if (tars.length) { const rawFn = fn + for (const tar of tars) { tar._m = getWriteMode(tar.mods); tar._j = !!(tar.mods && tar.mods.some((m) => m.root === M_JSOS)); if (!tar.isSi) tar._el = tar.isSp ? tar.root === SP_WIN ? window : tar.root === SP_DOC ? document : tar.root === SP_HISTORY ? window.history : null : tar.root ? getElById(tar.root, dKey) : null } fn = (dm, el, trig, trigVal, detail) => { const exprVal = rawFn(dm, el, trig, trigVal, detail) - let failedTa = null - try { - for (const tar of tars) { - failedTa = tar - const mode = getWriteMode(tar.mods) - const outVal = tar.mods && tar.mods.some((m) => m.root === M_JSOS) ? dmJsos(exprVal) : exprVal - const nextVal = tar.isSi ? combineActResult(getSiVal(tar), outVal, mode) : combineActResult(getElPrVal(tar.isSp ? tar.root === SP_WIN ? window : tar.root === SP_DOC ? document : tar.root === SP_HISTORY ? window.history : null : tar.root ? getElById(tar.root, dKey) : el, tar.path), outVal, mode) - if (tar.isSi) setSiAndNotifySubsNDeep(dKey, tar, nextVal) - else setPr(el, dKey, tar, nextVal) - } - } catch (e) { logErr('Error: setting target', failedTa, 'in', dKey, 'ended with ex:', e) } + try { for (const tar of tars) { const outVal = tar._j ? dmJsos(exprVal) : exprVal; const nextVal = tar.isSi ? combineActResult(getSiVal(tar), outVal, tar._m) : combineActResult(getElPrVal(tar._el || el, tar.path), outVal, tar._m); if (tar.isSi) setSiAndNotifySubsNDeep(dKey, tar, nextVal); else setPr(el, dKey, tar, nextVal) } } + catch (e) { logErr('Error: setting target in', dKey, 'ended with ex:', e) } } } if (!trigs.length) { if (hasExpr) fn(DM, el, null, null, null); return } let ran = false @@ -1240,6 +1228,7 @@ else if (p && p.isSi) actHdrMods.push([camelToKebab(p.path ? p.path.at(-1) : p.root), null, p]) } const ss = (k, v) => actStats && setSiAndNotifySubsNDeep(dKey, actStats[k], v) + const hasAdds = adds.length > 0, hasRouteMods = actRouteMods.length > 0 const doRequest = async () => { const url = urlFn ? urlFn(DM, el, null, null, null) : '' if (!url) return logErr('Error: dmAct: URL is empty in:', dKey) @@ -1247,53 +1236,27 @@ try { const queryParams = noProto(), bodyFields = noProto(), addDst = isGetOrDelete ? queryParams : bodyFields if (sendAll) for (const [siName, siVal] of _dm.entries()) bodyFields[siName] = siVal - for (const add of adds) { + if (hasAdds) for (const add of adds) { const val = add.isEv ? getElPrVal(add.taEl || el, add.path) : getSiValOrIt(add) if (add.spread) { if (val && typeof val === 'object') for (const k in val) if (hasOwn(val, k)) addDst[k] = val[k] else addDst.value = val } else addDst[add.key] = val } - for (const [isBody, key, path, ref] of actRouteMods) (isBody ? bodyFields : queryParams)[key] = ref ? getSiValOrIt(ref) : _dm.get(path) + if (hasRouteMods) for (const [isBody, key, path, ref] of actRouteMods) (isBody ? bodyFields : queryParams)[key] = ref ? getSiValOrIt(ref) : _dm.get(path) let finalUrl = url, hasQ = finalUrl.includes('?') for (const k in queryParams) finalUrl += (hasQ ? '&' : '?') + encodeURIComponent(k) + '=' + encodeURIComponent('' + (queryParams[k] ?? '')), hasQ = true let hs = ACT_HS_EMPTY, sharedHs = 1 - if (hdrsPath) { - const hdrObj = resolveMPathVal(hdrsPath) - if (isPlainObj(hdrObj)) { - hs = noProto() - sharedHs = 0 - for (const hk in hdrObj) if (hasOwn(hdrObj, hk)) hs[hsNoKebab ? hk : camelToKebab(hk)] = '' + hdrObj[hk] - } - } - if (baseHs !== ACT_HS_EMPTY) { - if (hs === ACT_HS_EMPTY) hs = baseHs - else for (const hk in baseHs) if (hasOwn(baseHs, hk)) hs[hk] = baseHs[hk] - } - if (authPath != null) { - const authVal = resolveMPathVal(authPath) - if (authVal != null) { - if (sharedHs) hs = cloneOwnProps(hs), sharedHs = 0 - hs[H_AUTHORIZATION] = '' + authVal - } - } - for (const [kebabKey, path, ref] of actHdrMods) { - if (sharedHs) hs = cloneOwnProps(hs), sharedHs = 0 - const v = ref ? getSiValOrIt(ref) : _dm.get(path) - hs[kebabKey] = v != null ? '' + v : '' - } - let bodyCount = 0, firstBodyKey = null + if (hdrsPath) { const hdrObj = resolveMPathVal(hdrsPath); if (isPlainObj(hdrObj)) { hs = noProto(); sharedHs = 0; for (const hk in hdrObj) if (hasOwn(hdrObj, hk)) hs[hsNoKebab ? hk : camelToKebab(hk)] = '' + hdrObj[hk] } } + if (baseHs !== ACT_HS_EMPTY) { if (hs === ACT_HS_EMPTY) hs = baseHs; else for (const hk in baseHs) if (hasOwn(baseHs, hk)) hs[hk] = baseHs[hk] } + if (authPath != null) { const authVal = resolveMPathVal(authPath); if (authVal != null) { if (sharedHs) hs = cloneOwnProps(hs), sharedHs = 0; hs[H_AUTHORIZATION] = '' + authVal } } + for (const [kebabKey, path, ref] of actHdrMods) { if (sharedHs) hs = cloneOwnProps(hs), sharedHs = 0; const v = ref ? getSiValOrIt(ref) : _dm.get(path); hs[kebabKey] = v != null ? '' + v : '' } + let bodyCount = 0, firstBodyKey = null, body = null for (const bk in bodyFields) if (hasOwn(bodyFields, bk)) { if (!bodyCount) firstBodyKey = bk; bodyCount++ } - let body = null if (bodyCount) { const raw = bodyCount === 1 ? bodyFields[firstBodyKey] : bodyFields - if (isForm && (isPlainObj(raw) || Array.isArray(raw))) { - const params = new URLSearchParams() - if (Array.isArray(raw)) for (let i = 0; i < raw.length; i++) params.append('' + i, '' + (raw[i] ?? '')) - else for (const k in raw) if (hasOwn(raw, k)) params.append(k, '' + (raw[k] ?? '')) - body = params.toString() - } else if (isJson || isPlainObj(raw) || Array.isArray(raw)) body = JSON.stringify(raw) - else body = '' + raw + if (isForm && (isPlainObj(raw) || Array.isArray(raw))) { const params = new URLSearchParams(); if (Array.isArray(raw)) for (let i = 0; i < raw.length; i++) params.append('' + i, '' + (raw[i] ?? '')); else for (const k in raw) if (hasOwn(raw, k)) params.append(k, '' + (raw[k] ?? '')); body = params.toString() } + else body = isJson || isPlainObj(raw) || Array.isArray(raw) ? JSON.stringify(raw) : '' + raw } const ac = typeof AbortController !== 'undefined' ? new AbortController() : null activeAbort = ac ? () => ac.abort() : null diff --git a/tests/dmax.size.limits.json b/tests/dmax.size.limits.json index 0cf125b..2eefaa4 100644 --- a/tests/dmax.size.limits.json +++ b/tests/dmax.size.limits.json @@ -1,4 +1,4 @@ { - "lines": 1742, - "bytes": 89927 + "lines": 1705, + "bytes": 89850 } From 05096125b0a0d840bef6170af6bf57b9fbf8c11d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 24 May 2026 16:26:40 +0000 Subject: [PATCH 5/9] =?UTF-8?q?test:=20cover=20optimization=20fast=20paths?= =?UTF-8?q?=20=E2=80=94=20morph=20text-only,=20dmEx=20jsos/window=20target?= =?UTF-8?q?s,=20dmIt=20single/multi=20growth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agent-Logs-Url: https://github.com/dadhi/dmax/sessions/2ed391cb-0117-478d-9c1e-ad79385bc2b0 Co-authored-by: dadhi <39516+dadhi@users.noreply.github.com> --- asserts.js | 90 +++++++++++++++++++++++++++++++++++++ tests/fuzz.deterministic.js | 9 ++++ 2 files changed, 99 insertions(+) diff --git a/asserts.js b/asserts.js index 0da7d35..c9b9eee 100644 --- a/asserts.js +++ b/asserts.js @@ -735,6 +735,22 @@ return { inc, dec: DM['n'] }; } __assert(__tSubTarIncDec, [], { inc: 3, dec: 2 }, 'dmEx target ^inc/^dec updates current numeric target by one'); + function __tSubTarJsos() { + __reset(); + _dm.set('src', { a: 1, b: [2, 3] }); + const el = document.createElement('div'); + dmEx(el, 'data-m-ex:out^jsos@src', 'val'); + return DM['out']; + } + __assert(__tSubTarJsos, [], '{\n "a": 1,\n "b": [\n 2,\n 3\n ]\n}', 'dmEx target ^jsos precomputed flag applies JSON stringify to output'); + function __tSubTarWindowProp() { + __reset(); + _dm.set('title', 'dmax-test'); + const el = document.createElement('div'); + dmEx(el, 'data-m-ex:_window.document.title@title', 'val'); + return document.title; + } + __assert(__tSubTarWindowProp, [], 'dmax-test', 'dmEx target _window property written via precomputed _el'); function __tSubSignalSiModPathAndExpr() { __reset(); _dm.set('foo', { bar: 7 }); @@ -1369,6 +1385,42 @@ } finally { tplEl.remove(); el.remove() } } __assert(__tDumpExplicitTemplate, [], 2, 'dmIt +#tplId explicit template reference appends 2 clones') + function __tDumpSingleItemGrowth() { + __reset() + const el = document.createElement('ul') + const tpl = document.createElement('template') + tpl.innerHTML = '
  • item
  • ' + el.appendChild(tpl) + document.body.appendChild(el) + try { + _dm.set('items', ['a', 'b']) + dmIt(el, 'data-m-it@items') + const before = el.children.length + setSiAndNotifySubs('t', { root: 'items', path: null }, ['a', 'b', 'c']) + const after = el.children.length + const lastIdx = el.lastElementChild ? el.lastElementChild.getAttribute('data-idx') : null + return { before, after, lastIdx } + } finally { el.remove() } + } + __assert(__tDumpSingleItemGrowth, [], { before: 2, after: 3, lastIdx: '2' }, 'dmIt single-item growth fast path appends one node directly') + function __tDumpMultiItemGrowth() { + __reset() + const el = document.createElement('ul') + const tpl = document.createElement('template') + tpl.innerHTML = '
  • item
  • ' + el.appendChild(tpl) + document.body.appendChild(el) + try { + _dm.set('items', ['a']) + dmIt(el, 'data-m-it@items') + const before = el.children.length + setSiAndNotifySubs('t', { root: 'items', path: null }, ['a', 'b', 'c', 'd']) + const after = el.children.length + const idxs = Array.from(el.children).map(n => n.getAttribute('data-idx')) + return { before, after, idxs } + } finally { el.remove() } + } + __assert(__tDumpMultiItemGrowth, [], { before: 1, after: 4, idxs: ['0', '1', '2', '3'] }, 'dmIt multi-item growth uses fragment path') __assert(() => { __reset() _dm.set('user', { name: 'Ann' }) @@ -2189,6 +2241,44 @@ return { sameChild: from.firstElementChild === child, text: from.textContent } } __assert(__tMorphNoSkipsSubtree, [], { sameChild: true, text: 'keep2' }, 'data-m-no skips subtree morph') + function __tMorphTextOnlyFocused() { + const input = document.createElement('div') + input.setAttribute('class', 'cell') + input.textContent = 'old' + document.body.appendChild(input) + try { + input.focus() + const to = document.createElement('div') + to.setAttribute('class', 'cell') + to.textContent = 'new' + morph(input, to) + return { text: input.textContent, cls: input.getAttribute('class') } + } finally { input.remove() } + } + __assert(__tMorphTextOnlyFocused, [], { text: 'new', cls: 'cell' }, 'morph: text-only focused element still updates text via normal path') + function __tMorphTextOnlyAttrsDiffer() { + const from = document.createElement('span') + from.setAttribute('class', 'old') + from.textContent = 'old' + const to = document.createElement('span') + to.setAttribute('class', 'new') + to.textContent = 'new' + morph(from, to) + return { text: from.textContent, cls: from.getAttribute('class') } + } + __assert(__tMorphTextOnlyAttrsDiffer, [], { text: 'new', cls: 'new' }, 'morph: text-only with attr mismatch updates both attrs and text') + function __tMorphTextOnlyFastPath() { + const from = document.createElement('td') + from.setAttribute('class', 'cell') + from.textContent = '42' + const origText = from.firstChild + const to = document.createElement('td') + to.setAttribute('class', 'cell') + to.textContent = '99' + morph(from, to) + return { text: from.textContent, sameNode: from.firstChild === origText, cls: from.getAttribute('class') } + } + __assert(__tMorphTextOnlyFastPath, [], { text: '99', sameNode: true, cls: 'cell' }, 'morph: text-only fast path assigns nodeValue directly') function __tDmaxPatchElementsReplaceDiscardsFormState() { const container = document.createElement('div') container.innerHTML = '' diff --git a/tests/fuzz.deterministic.js b/tests/fuzz.deterministic.js index 224dbf9..3b1d29f 100644 --- a/tests/fuzz.deterministic.js +++ b/tests/fuzz.deterministic.js @@ -154,6 +154,12 @@ function* generateDataSubCombinations() { yield { attr: 'data-m-ex@posts^with_shape', valid: true, category: 'with-shape-sub' } yield { attr: 'data-m-ex@items[0]^with_shape', valid: true, category: 'indexed-shape-sub' } yield { attr: 'data-m-ex:user^merge@ui', valid: true, category: 'target-merge' } + yield { + attr: 'data-m-ex:.text-content^jsos@foo', valid: true, category: 'target-jsos', html: '
    ', exercise: async ({ document }) => { + const text = document.getElementById('fuzz-test').textContent + if (text !== '0') throw new Error('expected ^jsos to stringify signal value, got: ' + text) + } + } yield { attr: 'data-m-ex:.text-content^append@foo', valid: true, category: 'target-append', html: '
    old
    ', exercise: async ({ document }) => { if (document.getElementById('fuzz-test').textContent !== 'old0') throw new Error('expected ^append string write') @@ -260,6 +266,9 @@ function* generateDataDumpCombinations() { // Valid - dotted signal paths yield { attr: 'data-m-it+#tpl-post@user.posts', valid: true, category: 'dotted-signal' }; yield { attr: 'data-m-it+#tpl-item@app.data.items', valid: true, category: 'deep-dotted' }; + + // Valid - incremental growth (exercises single-item fast path) + yield { attr: 'data-m-it+#tpl-item@items', valid: true, category: 'single-item-growth' }; yield { attr: 'data-m-it+#tpl-post', valid: false, category: 'missing-trigger-error', expectedLog: 'warnOrError', logPattern: 'dmIt requires a signal trigger' }; } From 2203d6aa0e6b75ab41f7c524e3444698951433d8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 24 May 2026 16:27:11 +0000 Subject: [PATCH 6/9] style: remove trailing whitespace in fuzz test Agent-Logs-Url: https://github.com/dadhi/dmax/sessions/2ed391cb-0117-478d-9c1e-ad79385bc2b0 Co-authored-by: dadhi <39516+dadhi@users.noreply.github.com> --- tests/fuzz.deterministic.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fuzz.deterministic.js b/tests/fuzz.deterministic.js index 3b1d29f..5986ec4 100644 --- a/tests/fuzz.deterministic.js +++ b/tests/fuzz.deterministic.js @@ -266,7 +266,7 @@ function* generateDataDumpCombinations() { // Valid - dotted signal paths yield { attr: 'data-m-it+#tpl-post@user.posts', valid: true, category: 'dotted-signal' }; yield { attr: 'data-m-it+#tpl-item@app.data.items', valid: true, category: 'deep-dotted' }; - + // Valid - incremental growth (exercises single-item fast path) yield { attr: 'data-m-it+#tpl-item@items', valid: true, category: 'single-item-growth' }; yield { attr: 'data-m-it+#tpl-post', valid: false, category: 'missing-trigger-error', expectedLog: 'warnOrError', logPattern: 'dmIt requires a signal trigger' }; From 0511ed70d7a5c20a55ceac3fce1c3f16a763ea07 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 24 May 2026 17:15:12 +0000 Subject: [PATCH 7/9] Changes before error encountered Agent-Logs-Url: https://github.com/dadhi/dmax/sessions/fc97f7b9-e1a3-488a-9ac2-ba0863f63f0a Co-authored-by: dadhi <39516+dadhi@users.noreply.github.com> --- dist/dmax.min.js | 2 +- dist/dmax.min.js.br | Bin 14767 -> 15771 bytes dist/dmax.min.js.gz | Bin 16406 -> 17672 bytes package.json | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/dmax.min.js b/dist/dmax.min.js index ea3c2be..63ba546 100644 --- a/dist/dmax.min.js +++ b/dist/dmax.min.js @@ -1 +1 @@ -const indexFirst=(e,t,n=0)=>{let r,o=e.length;for(let l of t)(r=e.indexOf(l,n))>=0&&r{if(!e)return e;if(e.indexOf("-")<0)return CAMEL_NAMES.set(e,e),e;let t=CAMEL_NAMES.get(e);return t||(t=e.replace(/-+([a-zA-Z]?)/g,(e,t)=>t?t.toUpperCase():""),CAMEL_NAMES.set(e,t),KEBAB_NAMES.set(t,e),t)},camelToKebab=e=>{if(!e)return e;let t=KEBAB_NAMES.get(e);return t||(t=e.replace(/[A-Z]/g,e=>"-"+e.toLowerCase()),KEBAB_NAMES.set(e,t),CAMEL_NAMES.set(t,e),t)},MOD="^",TARG=":",TRIG="@",ADD="+",ALL=["^",":","@","+"],MODS=["^"],DOT=".",ID="#",NOT="!",BRACKET_OPEN="[",BRACKET_CLOSE="]",NAME_DELIMS=[".","["],SEL_LEADS="#.[*:",SSE_COMMENT=":",SI="s",EP=".",SP="_",M_WITH_SHAPE="with_shape",M_SHAPE_ONLY="shape_only",M_IMMEDIATE="immediate",M_NOTIMMEDIATE="notimmediate",M_ONCE="once",M_ALWAYS="always",M_DEBOUNCE="debounce",M_THROTTLE="throttle",M_PREVENT="prevent",M_AND="and",M_EQ="eq",M_NE="ne",M_LT="lt",M_GT="gt",M_LE="le",M_GE="ge",M_PR="pr",M_ATTRS="attrs",M_SI_V="si",M_EV_V="ev",M_RW="rw",M_NUM="num",M_JSOS="jsos",M_JSON="json",M_TEXT="text",M_HTML="html",M_FORM="form",M_SSE="sse",M_BUSY="busy",M_COMPLETE="complete",M_ERR="err",M_CODE="code",M_STAT="stat",M_NO_CACHE="noCache",M_HS="hs",M_HS_NO_KEBAB="hsNoKebab",M_AUTH="auth",M_BROTLI="brotli",M_BR="br",M_GZIP="gzip",M_DEFLATE="deflate",M_COMPRESS="compress",M_REPLACE="replace",M_MERGE="merge",M_APPEND="append",M_PREPEND="prepend",M_BEFORE="before",M_AFTER="after",M_INNER="inner",M_REMOVE="remove",M_OUTER="outer",M_SSE_OPEN="open",M_SSE_CLOSE="close",M_RETRY="retry",M_ABORT="abort",M_URL="url",M_BODY="body",M_HDR="header",M_SPREAD="spread",M_SEND_ALL="sendAll",M_PATCH_ALL="patchAll",M_SYNC_ALL="syncAll",M_DEBOUNCE_MS=500,M_THROTTLE_MS=500,M_RETRY_MS=1e3,H_ACCEPT="accept",H_ACCEPT_ENCODING="accept-encoding",H_AUTHORIZATION="authorization",H_CACHE_CONTROL="cache-control",H_CONTENT_TYPE="content-type",H_PRAGMA="pragma",noProto=()=>Object.create(null),ACT_HS_EMPTY=Object.freeze(noProto()),ACT_HS_JSON=Object.freeze({[H_CONTENT_TYPE]:"application/json",[H_ACCEPT]:"application/json"}),ACT_HS_HTML=Object.freeze({[H_ACCEPT]:"text/html"}),ACT_HS_FORM=Object.freeze({[H_CONTENT_TYPE]:"application/x-www-form-urlencoded"}),ACT_HS_TEXT=Object.freeze({[H_CONTENT_TYPE]:"text/plain;charset=UTF-8"}),ACT_HS_NO_CACHE=Object.freeze({[H_CACHE_CONTROL]:"no-cache",[H_PRAGMA]:"no-cache"}),ACT_HS_SSE=Object.freeze({[H_ACCEPT]:"text/event-stream",[H_CACHE_CONTROL]:"no-cache",[H_PRAGMA]:"no-cache"}),SP_WIN="window",SP_DOC="document",SP_FORM="form",SP_INTERVAL="interval",SP_TIMEOUT="timeout",SP_VIEWED="viewed",SP_INIT="init",SPS=[SP_WIN,SP_DOC,"form","interval","timeout","viewed","init"],SP_WIN_EV="resize",SP_DOC_EV="visibilitychange",SP_INTERVAL_MS=500,SP_TIMEOUT_MS=500,SP_TA_WIN=1,SP_TA_DOC=2,SP_TA_FORM=3,SP_DEFS=Object.assign(noProto(),{[SP_WIN]:{ta:1,ev:"resize"},[SP_DOC]:{ta:2,ev:SP_DOC_EV},[SP_FORM]:{ta:3,ev:"submit",immediate:1},[SP_INTERVAL]:{ms:500,repeat:1},[SP_TIMEOUT]:{ms:500},[SP_VIEWED]:{io:1},[SP_INIT]:{init:1,act:1}}),ACT_METHODS=Object.freeze({get:"GET",post:"POST",put:"PUT",patch:"PATCH",delete:"DELETE"}),DM_KEY="data-m-",DM_NO="data-m-no",DM_NO_SCAN=DM_NO+"^scan",DM_NO_MORPH=DM_NO+"^morph",E_RW_REQ="dmEx ^rw requires an element/property trigger in:",E_RW_EL="dmEx ^rw source element is not found in trigger:",E_RW_EV="dmEx ^rw event is not found in trigger:",E_TRIG_EL="Element is not found in trigger:",E_TRIG_EV="Event is not found in trigger:",E_FORM_EL="Form element is not found for trigger:",IT_STATES=new WeakMap,IT_ATTRS=new WeakMap,isSp=e=>{if(e.startsWith(SP))for(const t of SPS)if(e.startsWith(t,1))return!0;return!1},mkIt=(e,t,n,r,o=NIL)=>({kind:e,not:t,root:n,path:r,mods:o,sp:e===SP&&SP_DEFS[n]||null,isSi:e===SI,isEv:e===EP,isSp:e===SP,isImmediate:null}),mkMod=(e,t,n)=>({kind:"^",not:e,root:t,path:n,isImmediate:"immediate"===t||"notimmediate"!==t&&null}),DEFAULT_PR_TA=Object.freeze(mkIt(EP,null,"",null)),RE_DIGITS=/^\d+$/,parseRef=(e,t,n=0)=>{if(!t)return null;let r=n,o=t.length;for(;t.startsWith("!",r);)++r;let l=0==r?null:r%2!=0,s=indexFirst(t,NAME_DELIMS,r),i=s<0?0==r?t:t.slice(r):t.slice(r,s),a=EP;if(i&&i.length>0){const n=i[0]===ID;if(n||isSp(i)){if(a=n?EP:SP,i=i.slice(1),!i)return logErr("empty",a+":",t,e),null}else a=SI,i=kebabToCamel(i)}if(s<0&&!i&&null!==l)return logErr("bare","!:",t),null;if(s<0||"."===t[s]&&s+1==o)return mkIt(a,l,i,null);r=s;let u=[];for(;r>=0&&r{if(!t)return null;let n=0,r=t.length;for(;t.startsWith("!",n);)++n;let o=0==n?null:n%2!=0;const l=indexFirst(t,NAME_DELIMS,n);let s=l<0?0==n?t:t.slice(n):t.slice(n,l);if(s&&(s=kebabToCamel(s)),!s)return logErr("empty mod:",t,e),null;if("attrs"===s){if(l<0||l+1>=r)return mkMod(o,s,{r:"",v:""});const n=t.slice(l+1);if(n[0]!==ID)return mkMod(o,s,{r:"",v:n});const i=n.indexOf(".",1),a=n.slice(1,i<0?n.length:i);return a?mkMod(o,s,{r:a,v:i<0?"":n.slice(i+1)}):(logErr("empty attrs mod:",t,e),null)}return mkMod(o,s,l<0||l+1>=r?null:t.indexOf(".",n=l+1)<0?kebabToCamel(t.slice(n)):parseRef(e,t,n))},parse=(e,t)=>{t??=5;const n=e.length,r=noProto();for(r["^"]=r[":"]=r["@"]=r["+"]=NIL;t>=0&&t{let t=_parseCache.get(e);return t||_parseCache.set(e,t=parse(e)[0]),t},RETURN_THEN=[" ","(","{",";","[",'"',"'","\n","\r","\t"],FN_ARGS=["dm","el","trig","val","detail"],_compiledFnCache=new Map,compileFn=(e,t,n=FN_ARGS)=>{const r=n===FN_ARGS?e+"\0"+t:null;if(null!==r&&_compiledFnCache.has(r))return _compiledFnCache.get(r);let o=""+e;const l=o.indexOf("return");let s,i=l>=0&&(l+6>=o.length||indexFirst(o,RETURN_THEN,l+6)==l+6)?o:`return(${o})`;i=`try{ ${i} }catch(e){ console.error('[dmax]','eval ${t}:',e.message,${o}); return }`;try{s=Function(...n,i)}catch(e){return void logErr(`compile ${t}:`,e.message,o)}return null!==r&&_compiledFnCache.set(r,s),s},_dm=new Map,DM=new Proxy({},{get:(e,t)=>_dm.get(t),set:(e,t,n)=>(_dm.set(t,n),!0),has:(e,t)=>_dm.has(t),ownKeys:()=>Array.from(_dm.keys()),getOwnPropertyDescriptor:(e,t)=>_dm.has(t)?{value:_dm.get(t),enumerable:!0,configurable:!0}:void 0}),dmSi=(e,t,n)=>{const r=parseCached(t),o=r[":"];(r["^"].length||r["@"].length||r["+"].length)&&warn("targets only:",t);let l=compileFn(n,t);if(!l)return;let s=n?l(DM,e,null):null;if(o.length)for(const e of o)e.kind==SI?(e.mods.length&&warn("mods ignored:",e.mods,t),_dm.set(e.root,s)):logErr("signal targets only:",e,t);else{if(!s||"object"!=typeof s)return logErr("object value expected:",t,n);for(const e in s)_dm.set(kebabToCamel(e),s[e])}},dmDbg=e=>{e&&(_debugEls.add(e),updateDebug())},getElById=(e,t)=>{const n=document.getElementById(e);return n||logErr(`no #${e}:`,t),n},getDefaultPr=e=>{const t=e.type,n=e.tagName;return"checkbox"===t||"radio"===t?"checked":"DETAILS"===n?"open":"INPUT"===n||"SELECT"===n||"TEXTAREA"===n?"value":"textContent"},getDefaultEv=e=>{const t=e.tagName;return"FORM"===t?"submit":"DETAILS"===t?"toggle":"INPUT"===t||"SELECT"===t||"TEXTAREA"===t?"change":"click"},getElPrVal=(e,t)=>{if(!e)return null;const n=t&&t.length?t[0]:getDefaultPr(e);let r=e[n];return void 0===r&&e.getAttribute&&(r=e.getAttribute(camelToKebab(n))),t&&t.length>1?getPrValAndDepth(r,t,-1,1)[0]:r},isDefaultPrName=(e,t)=>t===getDefaultPr(e)||"value"===t||"checked"===t||"textContent"===t,mkEv=e=>{try{return new Event(e,{bubbles:!0})}catch(t){const n=document.createEvent("Event");return n.initEvent(e,!0,!0),n}},isNil=e=>null==e,getPrValAndDepth=(e,t,n=-1,r=0)=>{let o=e;if(isNil(o)||!t)return[o,0];let l=-1==n||n>t.length-r?t.length-r:n;for(let e=0;e{if(n>=32)return console.warn("[dmax] Warning: too deep to compare for signal value change, consider it changed, stopped at:",32),!0;const r=e,o=t;if(Array.isArray(r)){if(!Array.isArray(o)||r.length!=o.length)return!0;for(let e=0;e{if(!n.isEv)return null;let o=n.root?getElById(n.root,t):e;const l=n.path;let s=l?null:getDefaultPr(o);if(l&&l.length&&([o]=getPrValAndDepth(o,l,l.length-1),s=l.at(-1)),!o||!s)return logErr("Error setting non existing property for:",n,"in",t);try{if("style"===s&&isPlainObj(r)&&o[s])for(const e in r){const t=o[s],n=r[e],l="-"===e[0]?e:"--"+camelToKebab(e);e in t?valChangedDeep(t[e],n)&&(t[e]=n):t.getPropertyValue(l)!==""+n&&t.setProperty(l,n)}else if(o&&"function"==typeof o.setProperty&&!(s in o)){const e="-"===s[0]?s:"--"+camelToKebab(s);o.getPropertyValue(e)!==""+r&&o.setProperty(e,r)}else valChangedDeep(o[s],r)&&(o[s]=r)}catch(t){logErr("Error: Failed to set property:",t.message,">>>",n,"on",e)}return o[s]},getComputedDisplay=e=>"undefined"!=typeof window&&window.getComputedStyle?window.getComputedStyle(e).display:"",applyClVal=(e,t,n)=>{for(const r of e){const e=r.kb||(r.kb=camelToKebab(r.root));(r.not?!n:n)?t.classList.add(e):t.classList.remove(e)}},applyDisplayValue=(e,t,n,r)=>{const o=e.style.display;r?t||"none"===o||"none"===getComputedDisplay(e)?e.style.display=n:e.style.removeProperty("display"):"none"!==o&&(e.style.display="none")},diffShapeShallow=(e,t)=>{let n=e,r=t;if(n&&"object"==typeof n||(n=NIL),r&&"object"==typeof r||(r=NIL),Array.isArray(n)){if(Array.isArray(r)){const e=r.length,t=n.length;return e==t?null:e>t?{addedRange:[t,e-t]}:{removedRange:[e,t-e]}}let e=[];for(const t in r)hasOwn(r,t)&&e.push(t);return{added:e,removedRange:[0,n.length]}}if(Array.isArray(r)){let e=[];for(const t in n)hasOwn(n,t)&&e.push(t);return{removed:e,addedRange:[0,r.length]}}let o=[],l=[];for(const e in r)e in n||o.push(e);for(const e in n)e in r||l.push(e);return o.length?l.length?{added:o,removed:l}:{added:o}:l.length?{removed:l}:null},samePath=(e,t)=>{if(e.length!==t.length)return!1;for(let n=0;ne.length?e:t,modPath=e=>null==e?NIL:e.kind?e.root?e.path?.length?[e.root,...e.path]:[e.root]:e.path||NIL:Array.isArray(e)?e:[e],compileMods=(e,t)=>{const n=null!=e.sp?.ms;let r=0,o=0,l=0,s=null,i=NIL,a=0,u=0,c="",d=null;for(const e of t){const t=e.root;if("with_shape"===t)a=1;else if("shape_only"===t)a=2;else if("pr"===t){const t=e.path;u=1,c=t?.isEv&&t.root||"",i=t?.isEv?t.path||NIL:modPath(t)}else"attrs"===t?(u=4,c=e.path?.r||"",i=e.path?.v||""):"si"===t?(u=2,i=modPath(e.path)):"ev"===t?(u=3,i=modPath(e.path)):"once"===t?r|=1:"always"===t?r|=2:"prevent"===t?r|=4:"num"===t?r|=8:"jsos"===t?d=e.path??2:"rw"===t?r|=16:n||"debounce"!==t?n||"throttle"!==t?t in PERMIT_MODS&&(s=s?s.push?(s.push(e),s):[s,e]:e):l=+(resolveMPathVal(e.path)??500)||500:o=+(resolveMPathVal(e.path)??500)||500}return{f:r,d:o,t:l,p:s,v:i,c:a,s:u,r:c,j:d}},getTrPrTa=(e,t,n,r,o,l,s=!0)=>{const i=n.root?getElById(n.root,t):e;if(!i)return logErr("Error:",o,n,"in:",t),null;let a=n.path?n.path[0]:null,u=null;a&&isDefaultPrName(i,a)&&(u=n.path,a=getDefaultEv(i));const c=1!==r.s&&4!==r.s||!r.r?i:getElById(r.r,t),d=1===r.s?r.v.length?r.v:u:4===r.s?r.v:u;return s&&1===r.s&&!r.r&&r.v.length&&(u=r.v),a=a??getDefaultEv(i),a?c?{taEl:i,readEl:c,ev:a,prPath:u,readPath:d,tar:mkIt(EP,null,n.root,u,NIL)}:logErr("Error:",o,n,"in:",t):(logErr("Error:",l,n,"in:",t),null)},addNonSiTrSub=(e,t,n,r,o,l,s=null)=>{const i=t.sp,a=!!i;if(!a&&!expected(s,"Expected non-SP trigger target in addNonSiTrSub:",t,"on:",e))return null;const u=addTrSub(e,t,n,r,o,a?null:s.taEl,a?t.path?.[0]||i?.ev||null:s.ev,a?null:s.prPath,a?null:s.readPath,a?null:s.readEl);return i?.init?(u&&!l&&invokeSub(u,{type:"init"},1===n.s||4===n.s?getReadVal(n.r?getElById(n.r):e,n,1===n.s?n.v.length?n.v:null:n.v):"init",e,t),!0):!u||l||!t.isImmediate||i&&!i.immediate?l:(invokeSub(u,null,a?null:getReadVal(s.readEl,n,s.readPath),e,t),!0)},PERMIT_MODS=Object.assign(noProto(),{[M_AND]:1,[M_EQ]:1,[M_NE]:1,[M_LT]:1,[M_GT]:1,[M_LE]:1,[M_GE]:1}),getSiVal=e=>{const t=_dm.get(e.root),n=e.path;return n?getPrValAndDepth(t,n)[0]:t},getSiValOrIt=e=>{if(!e.kind)return e;const t=getSiVal(e);return e.not?!t:t},resolveMPathVal=e=>{if(e&&e.kind)return getSiValOrIt(e);if("string"!=typeof e)return e;if(_dm.has(e))return _dm.get(e);const t=parseRef("mod",e);return t&&t.kind&&(!t.isSi||t.path||_dm.has(t.root))?getSiValOrIt(t):e},dmJsos=(e,t=2)=>"string"==typeof e?e:JSON.stringify(e,null,+(resolveMPathVal(t)??2)||0),resolveHtmlSelector=e=>{const t=resolveMPathVal(e);return"string"==typeof t&&t?"#.[*:".includes(t[0])?t:"#"+t:""},mkOrStatSi=(e,t)=>{if(!e)return null;const n=e.path;return"string"==typeof n?mkIt(SI,null,n||t,null):n?.isSi?n:mkIt(SI,null,t,null)},mkStatTar=(e,t,n)=>({root:e,path:t?t.concat(n):[n]}),defStatSi=e=>{if(!e)return null;let t=_dm.get(e.root);t&&"object"==typeof t||_dm.set(e.root,t=noProto());let n=t;const r=e.path;if(r&&r.length)for(let e=0;e{const t=defStatSi(mkOrStatSi(e,"stat"));if(!t)return null;const{root:n,path:r}=t;return{[M_BUSY]:mkStatTar(n,r,"busy"),[M_COMPLETE]:mkStatTar(n,r,"complete"),[M_ERR]:mkStatTar(n,r,"err"),[M_CODE]:mkStatTar(n,r,"code"),[M_SSE_OPEN]:mkStatTar(n,r,"open"),[M_SSE_CLOSE]:mkStatTar(n,r,"close"),[M_ABORT]:mkStatTar(n,r,"abort")}},isJsonContentType=e=>{const t=(e||"").toLowerCase();if(t.indexOf("application/json")>=0)return!0;const n=t.indexOf("+json");if(n<0)return!1;const r=n+5;if(r>=t.length)return!0;const o=t[r];return";"===o||" "===o||"\t"===o},isPlainObj=e=>!!e&&"object"==typeof e&&!Array.isArray(e),hasOwn=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),cloneOwnProps=e=>{const t=noProto();for(const n in e)hasOwn(e,n)&&(t[n]=e[n]);return t},mergeActHs=(e,t)=>{if(!e||e===ACT_HS_EMPTY)return t||ACT_HS_EMPTY;if(!t||t===ACT_HS_EMPTY)return e;const n=cloneOwnProps(e);for(const e in t)hasOwn(t,e)&&(n[e]=t[e]);return Object.freeze(n)},buildActBaseHs=(e,t,n,r,o,l,s)=>{let i=e?ACT_HS_JSON:r?ACT_HS_FORM:t?ACT_HS_TEXT:ACT_HS_EMPTY;if(n&&(i=mergeActHs(i,ACT_HS_HTML)),i=o?mergeActHs(i,ACT_HS_SSE):l?mergeActHs(i,ACT_HS_NO_CACHE):i,!s)return i;const a=i===ACT_HS_EMPTY?noProto():cloneOwnProps(i);return a["accept-encoding"]=s,Object.freeze(a)},isDigitsOnly=e=>"string"==typeof e&&RE_DIGITS.test(e),buildItRefBase=(e,t)=>{let n=e;if(t)for(let e=0;e{let n="dm."+e;if(t)for(let e=0;ebuildItRefBase(e,t)+"."+n,buildItItemExpr=(e,t,n)=>buildItExprBase(e,t)+"["+n+"]",replaceItTokens=(e,t,n)=>{if("string"!=typeof e)return e;let r=e.indexOf("$");if(r<0)return e;const o=[];let l=0;for(;r>=0;){const s=e.startsWith("$it",r)?t:e.startsWith("$ix",r)?n:null;s?(o.push(e.slice(l,r),s),l=r+3,r=e.indexOf("$",l)):r=e.indexOf("$",r+1)}return o.length?o.join("")+e.slice(l):e},rewriteItBindings=(e,t,n,r)=>{const o=[e];for(;o.length;){const e=o.pop(),l=e.attributes;let s=null;for(let e=l.length-1;e>=0;--e){const o=l[e],i=replaceItTokens(o.name,t,r),a=replaceItTokens(o.value,n,r);if(i!==o.name||a!==o.value){if(!s){s=[];for(let t=l.length-1;t>e;--t)s.push([l[t].name,l[t].value])}i===o.name&&(o.value=a)}s&&s.push([i,a])}s&&IT_ATTRS.set(e,s);const i=e.children;for(let e=i.length-1;e>=0;--e)o.push(i[e])}},noScan=e=>e&&e.hasAttribute&&(e.hasAttribute(DM_NO)||e.hasAttribute(DM_NO_SCAN)),noMorph=e=>e&&e.hasAttribute&&(e.hasAttribute(DM_NO)||e.hasAttribute(DM_NO_MORPH)),warn=(...e)=>console.warn("[dmax]",...e),logErr=(...e)=>console.error("[dmax]",...e),wireItClone=e=>{const t=[e];for(;t.length;){const e=t.pop();if(noScan(e))continue;const n=IT_ATTRS.get(e);if(n&&n.length)for(let t=0;t=0;--e)t.push(r[e])}},expected=(e,...t)=>e||(warn(...t),null),renderItState=(e,t,n,r,o,l)=>{const s=getSiValOrIt(t);if(!expected(Array.isArray(s),"dmIt expected array value from:",t,"on:",e))return;const i=s.length,a=n.count||0;if(ia){const t=document.createDocumentFragment();for(let e=a;e{if(Array.isArray(e)&&Array.isArray(t))return e.concat(t);if(!isPlainObj(e)||!isPlainObj(t))return t;const n=noProto();for(const t in e)hasOwn(e,t)&&(n[t]=e[t]);for(const e in t)hasOwn(t,e)&&(n[e]=hasOwn(n,e)?mergeActVals(n[e],t[e]):t[e]);return n},combineActResult=(e,t,n)=>"merge"===n?mergeActVals(e,t):"append"===n?Array.isArray(e)&&Array.isArray(t)?e.concat(t):"string"==typeof e||"string"==typeof t?""+(e??"")+(t??""):t:"prepend"===n?Array.isArray(e)&&Array.isArray(t)?t.concat(e):"string"==typeof e||"string"==typeof t?""+(t??"")+(e??""):t:t,getWriteMode=e=>{for(const t of e||NIL)if("replace"===t.root||"merge"===t.root||"append"===t.root||"prepend"===t.root)return t.root;return"replace"},patchMatchingSis=(e,t,n)=>{if(isPlainObj(t))for(const r in t){if(!hasOwn(t,r))continue;const o=kebabToCamel(r);if(!_dm.has(o))continue;const l=_dm.get(o);setSiAndNotifySubsNDeep(e,mkIt(SI,null,o,null),combineActResult(l,t[r],n))}},applyActPayload=(e,t,n,r)=>{if(!t)return;const o=getSiValOrIt(t);setSiAndNotifySubsNDeep(e,t,combineActResult(o,n,r))},permitVal=(e,t,n=e.root,r=resolveMPathVal(e.path))=>"and"===n?!!r!=!!e.not:"eq"==n?t==r:"ne"==n?t!=r:"gt"==n?+t>+r:"lt"==n?+t<+r:"ge"==n?+t>=+r:+t<=+r,modsPermitVal=(e,t)=>e.push?!e.some(e=>!permitVal(e,t)):permitVal(e,t),_subs=new Map,_debugEls=new Set;let _debugQueued=!1;const upsert=(e,t)=>{let n=e.get(t);return n||e.set(t,n=[]),n},removeSiSub=e=>{const t=_subs.get(e.trig.root);if(t&&t.length)for(let n=0;n{const t=e.trig.sp;t?.io?e.clearId.disconnect():t?.repeat?clearInterval(e.clearId):clearTimeout(e.clearId),e.clearId=null},removeSubOrClearId=e=>{try{const t=e.ev;t?t.taEl.removeEventListener(t.evName,e.fn,t.opts):null!=e.clearId?clearSubId(e):removeSiSub(e)}catch(e){}},PASSIVE_LISTENER_OPTS=Object.freeze({passive:!0}),ELEMENT_NODE=1,invokeSub=(e,t,n,r,o)=>e(DM,r,o,o.isSi?getSiVal(o):n,t),invokeBoundSub=(e,t=null)=>e.fn(DM,e.el,e.trig,e.trig.isSi?getSiVal(e.trig):null,t),onIntervalSub=e=>{const t={tick:e.tick++,ms:e.ms,type:"interval"};try{invokeSub(e.fn,t,e.ms,e.el,e.trig)}catch(t){logErr(`Error: interval handler (${e.ms}ms) failed:`,t?.message??t)}},onTimeoutSub=e=>{try{invokeSub(e.fn,{tick:0,ms:e.ms,type:"timeout"},e.ms,e.el,e.trig)}catch(t){logErr(`timeout ${e.ms}ms:`,t?.message??t)}},getAttrs=(e,t="")=>{const n=[];if(!e)return n;const r=e.attributes||NIL;for(let e=0;e4===t.s?getAttrs(e,n):getElPrVal(e,n),addSpSub=(e,t,n,r,o,l,s)=>{if(null!=n.ms){const i=+s||n.ms,a={el:e,trig:t,fn:null,siChangeM:null,ev:null,clearId:null,ms:i,tick:0};return a.fn=applyTrMs(o,t,r,a),a.clearId=n.repeat?setInterval(onIntervalSub,i,a):setTimeout(onTimeoutSub,i,a),l.push(a),a.fn}if(n.io){if("undefined"==typeof IntersectionObserver)return warn("IntersectionObserver missing, skip _viewed:",e),null;const n={el:e,trig:t,fn:null,siChangeM:null,ev:null,clearId:null};n.fn=applyTrMs(o,t,r,n);const s=new IntersectionObserver(r=>{for(const o of r)if(o.isIntersecting)try{invokeSub(n.fn,{ratio:o.intersectionRatio,type:"viewed"},o.intersectionRatio,e,t)}catch(e){logErr("viewed handler:",e?.message??e)}});return s.observe(e),n.clearId=s,l.push(n),n.fn}if(n.init)return applyTrMs(o,t,r);const i=1===n.ta?window:2===n.ta?document:3===n.ta&&e&&e.closest?e.closest("form"):null,a=t.path?.[0]||n.ev||null;if(3===n.ta&&!i)return logErr("Error:",E_FORM_EL,t,"on:",e),null;if(!expected(i&&a,"Expected event target/name in addSpSub:",t,"on:",e))return null;const u=!(4&r.f)&&PASSIVE_LISTENER_OPTS,c={el:e,trig:t,fn:null,siChangeM:null,ev:{taEl:i,evName:a,opts:u},clearId:null},d=applyTrMs(o,t,r,c);return c.fn=n=>invokeSub(d,n,n?.type??null,e,t),i.addEventListener(a,c.fn,u),l.push(c),d},addTrSub=(e,t,n,r,o,l,s,i,a=i,u=l)=>{if(t.isSi){const l={el:e,trig:t,fn:r,siChangeM:n.c,ev:null,clearId:null};return l.fn=applyTrMs(r,t,n,l),upsert(_subs,t.root).push(l),(o||upsert(_cleanupBoundSubs,e)).push(l),l}const c=t.sp;if(c)return addSpSub(e,t,c,n,r,o,s);if(!expected(l&&s,"Expected event target/name in addTrSub:",t,"on:",e))return null;const d=!(4&n.f)&&PASSIVE_LISTENER_OPTS,p={el:e,trig:t,fn:null,siChangeM:null,ev:{taEl:l,evName:s,opts:d},clearId:null},f=applyTrMs(r,t,n,p);return p.fn=r=>invokeSub(f,r,getReadVal(u,n,a),e,t),l.addEventListener(s,p.fn,d),o.push(p),f},findFirstKind=(e,t)=>{for(let n=0;n{_debugEls.size&&!_debugQueued&&(_debugQueued=!0,queueMicrotask(()=>{_debugQueued=!1;const e=noProto();for(const[t,n]of _dm.entries())e[t]=n;const t=JSON.stringify(e,null,2);for(const e of _debugEls)e.textContent=t}))},setSiAndNotifySubs=(e,t,n)=>{const r=t?.root,o=t?.path;if(!r)return null;let l=_dm.get(r),s=l,i=l,a=0,u=null;if(o){if(!o.length)return null;for(i&&"object"==typeof i||_dm.set(r,i=l={});a{if(syncDepth++>MAX_SYNC_DEPTH)return logErr(`Error: Infinite loop detected for signal: ${t} (depth > ${MAX_SYNC_DEPTH}) in ${e}`);try{return setSiAndNotifySubs(0,t,n)}finally{syncDepth--}},applyTrMs=(e,t,n,r)=>{const o=t.isSi,l=n.v,s=n.d,i=n.t,a=n.p,u=n.f,c=1&u&&!(2&u)&&r,d=!o&&4&u,p=n.s,f=(2===p&&o||3===p&&!o)&&l.length,m=8&u,h=n.j;if(!(c||d||s||i||a||t.not||f||m||null!=h)&&(o||r||t.sp?.init))return e;let g=0,E=0,S=!1,_=null,T=null,M=null,b=null,A=null;const y=function(n,u,P,v,I){if(P=P||t,!S){if(d&&I?.preventDefault?.(),s)return A??=function(){S=!0;try{y(_,T,null,M,b)}finally{S=!1}},_=n,T=u,M=v,b=I,clearTimeout(g),void(g=setTimeout(A,s));if(i){const e=Date.now();if(e-E{const r=parseCached(t),o=r[":"],l=r["@"],s=r["^"];r["+"].length&&warn("targets/triggers/mods only:",t);const i=null!=n&&""+n;let a=i?compileFn(n,t):(e,t,n,r)=>r;if(i&&!a)return;const u=e?upsert(_cleanupBoundSubs,e):null;if(!o.length&&l.length){const n=[],r=[],o=[];for(const i of l){const l=pickMods(i.mods,s),a=compileMods(i,l);if(!(16&a.f)){n.push({tr:i,mod:a}),i.isSi&&o.push([i,getWriteMode(i.mods)]);continue}if(!i.isEv)return logErr("Error:",E_RW_REQ,t);const u=getTrPrTa(e,t,i,a,E_RW_EL,E_RW_EV);if(!u)return;r.push({tr:i,mod:a,w:getWriteMode(i.mods),taEl:u.taEl,readEl:u.readEl,ev:u.ev,prPath:u.prPath,readPath:u.readPath,tar:u.tar})}if(r.length&&n.length){let l=!1;const s=(n,o,l,s)=>{const i=a(n,e,o,l,s);for(const n of r)setPr(e,t,n.tar,combineActResult(getElPrVal(n.taEl,n.prPath),i,n.w))};for(const r of n){const n=r.tr,o=r.mod;if(n.isSi){const t=addTrSub(e,n,o,(e,t,n,r,o)=>s(e,n,r,o),u);l||0==n.isImmediate||(l=!0,invokeBoundSub(t))}else{if(!n.isEv&&!n.isSp)return logErr("Error: unsupported trigger kind",n.kind,"in",t);{const r=n.isEv?getTrPrTa(e,t,n,o,E_RW_EL,E_RW_EV):null;if(n.isEv&&!r)return;if(null==(l=addNonSiTrSub(e,n,o,(e,t,n,r,o)=>s(e,n,r,o),u,l,r)))return}}}if(o.length)for(const n of r){const r=addTrSub(e,n.tr,n.mod,(n,r,l,s,i)=>{const u=a(n,e,l,s,i);for(const e of o)setSiAndNotifySubsNDeep(t,e[0],combineActResult(getSiVal(e[0]),u,e[1]))},u,n.taEl,n.ev,n.prPath,n.readPath,n.readEl);0!=n.tr.isImmediate&&invokeSub(r,null,getReadVal(n.readEl,n.mod,n.readPath),e,n.tr)}return}}if(o.length){const e=a;a=(n,r,l,s,i)=>{const a=e(n,r,l,s,i);let u=null;try{for(const e of o){u=e;const n=getWriteMode(e.mods),o=e.mods&&e.mods.some(e=>"jsos"===e.root)?dmJsos(a):a,l=combineActResult(e.isSi?getSiVal(e):getElPrVal(e.root?getElById(e.root,t):r,e.path),o,n);e.isSi?setSiAndNotifySubsNDeep(t,e,l):setPr(r,t,e,l)}}catch(e){logErr("Error: setting target",u,"in",t,"ended with ex:",e)}}}if(!l.length)return void(i&&a(DM,e,null,null,null));let c=!1;for(const n of l){const r=pickMods(n.mods,s),o=compileMods(n,r);if(n.isSi){const t=addTrSub(e,n,o,a,u);c||0==n.isImmediate||(c=!0,invokeBoundSub(t));continue}if(!n.isEv&&!n.isSp)return logErr("Error: unsupported trigger kind",n.kind,"in",t);const l=n.isEv&&getTrPrTa(e,t,n,o,E_TRIG_EL,E_TRIG_EV,!1);if(n.isEv&&!l)return;if(null==(c=addNonSiTrSub(e,n,o,a,u,c,l)))return}},dmCl=(e,t,n)=>{const r=parseCached(t),o=r["+"],l=r[":"],s=r["@"],i=r["^"];if(!o.length)return logErr("Error: dmCl requires class names via + syntax in:",t);if(!s.length)return logErr("Error: dmCl requires at least one trigger in:",t);const a=findFirstKind(l,EP),u=a&&a.root?getElById(a.root,t):e;if(!u)return logErr("Error: dmCl target element not found in:",t);const c=n?compileFn(n,t):null;if(n&&!c)return;const d=upsert(_cleanupBoundSubs,e);for(const n of s){const r=pickMods(n.mods,i),l=compileMods(n,r);if(n.isSi){const t=addTrSub(e,n,l,(e,t,n,r,l)=>applyClVal(o,u,c?c(e,t,n,r,l):r),d);0!=n.isImmediate&&invokeBoundSub(t)}else{const r=n.isEv?getTrPrTa(e,t,n,l,E_TRIG_EL,E_TRIG_EV,!1):null;if(n.isEv&&!r)return;if(null==addNonSiTrSub(e,n,l,(t,r,l,s,i)=>applyClVal(o,u,!c||c(t,e,n,s,i)),d,!1,r))return}}},dmSh=(e,t,n)=>{const r=parseCached(t),o=r[":"],l=r["@"],s=r["^"];if(!l.length)return logErr("Error: dmSh requires at least one trigger in:",t);const i=findFirstKind(o,EP),a=i&&i.root?getElById(i.root,t):e;if(!a)return logErr("Error: dmSh target element not found in:",t);const u=a.style&&a.style.display||"",c=getComputedDisplay(a),d=u||("none"!==c&&c?c:"block"),p=n?compileFn(n,t):null;if(n&&!p)return;const f=upsert(_cleanupBoundSubs,e);for(const n of l){const r=pickMods(n.mods,s),o=compileMods(n,r);if(n.isSi){const t=addTrSub(e,n,o,(e,t,n,r,o)=>applyDisplayValue(a,u,d,p?p(e,t,n,r,o):r),f);0!=n.isImmediate&&invokeBoundSub(t)}else{const r=n.isEv?getTrPrTa(e,t,n,o,E_TRIG_EL,E_TRIG_EV,!1):null;if(n.isEv&&!r)return;if(null==addNonSiTrSub(e,n,o,(t,r,o,l,s)=>applyDisplayValue(a,u,d,!p||p(t,e,n,l,s)),f,!1,r))return}}},dataM={},wireNode=(e,t,n)=>{if(0!==t.indexOf(DM_KEY)||noScan(e))return;const r=t.slice(7),o=indexFirst(r,ALL,0),l=o>=0?r.slice(0,o):r,s=dataM[l];s&&s(e,t,n)},dmScan=(e=document.body)=>{const t=[e],n=[];for(let e=0;e{const n=parseCached(t),r=n["@"],o=n["+"],l=n["^"];if(!r.length)return logErr("Error: dmIt requires a signal trigger in:",t);const s=r[0];if(!s.isSi)return logErr("Error: dmIt trigger must be a signal in:",t);const i=pickMods(s.mods,l);let a=null;if(o.length&&o[0].isEv&&o[0].root&&(a=getElById(o[0].root,t)),a||(a=e.querySelector("template")),a&&a.parentNode===e&&a.parentNode.removeChild(a),!a)return logErr("Error: dmIt template not found for:",t);const u=a.content&&a.content.firstElementChild;if(!u)return logErr("Error: dmIt template root not found for:",t);let c=IT_STATES.get(e);c||IT_STATES.set(e,c={nodes:[],count:0});const d=buildItRefBase(s.root,s.path),p=buildItExprBase(s.root,s.path);addTrSub(e,s,compileMods(s,i),()=>renderItState(e,s,c,u,d,p),upsert(_cleanupBoundSubs,e)),(s.isImmediate??1)&&renderItState(e,s,c,u,d,p)},dmAct=(e,t,n)=>{const r=t.slice(7),o=indexFirst(r,ALL,0),l=ACT_METHODS[o>=0?r.slice(0,o):r];if(!l)return logErr("Error: dmAct: unrecognised method prefix in:",t);const s=parseCached(t),i=s[":"],a=s["@"],u=s["+"],c=s["^"],d=n?compileFn(n,t):null;if(n&&!d)return;const p=findFirstKind(i,SI);let f=null,m=!1,h=!1,g=!1,E=!1,S=!1,_=!1,T=!1,M=!1,b=!1,A=!1,y=null,P=null,v=!1,I=!1,N=!1,C="replace",O=null,D=null;const L=[],R=[],w=[];for(const e of c){const t=e.root;"json"===t?m=!0:"text"===t?h=!0:"html"===t?g=!0:"form"===t?E=!0:"sse"===t?_=S=!0:"noCache"===t?_=!0:"brotli"===t||"br"===t?T=!0:"gzip"===t?M=!0:"deflate"===t?b=!0:"compress"===t?A=!0:"hs"!==t||y?"hsNoKebab"===t?v=!0:"auth"!==t||P?"replace"===t||"merge"===t||"append"===t||"prepend"===t||"before"===t||"after"===t||"inner"===t||"remove"===t?(C=t,"merge"!==t&&(O=e)):"stat"!==t||f?"retry"!==t||D?"url"===t?L.push(e):"body"===t?R.push(e):t===M_HDR?w.push(e):"syncAll"===t?I=N=!0:I||"sendAll"!==t?N||"patchAll"!==t||(N=!0):I=!0:D=e:f=e:P=e:y=e}p&&p.mods&&(C=getWriteMode(p.mods));const x=mkActStats(f),k=y?.path,V=P?.path,H=D?+(resolveMPathVal(D.path)??1e3)||1e3:0;let B="";T&&(B="br"),M&&(B+=(B?", ":"")+"gzip"),b&&(B+=(B?", ":"")+"deflate"),A&&(B+=(B?", ":"")+"compress");const F=buildActBaseHs(m,h,g,E,S,_,B),j="GET"===l||"DELETE"===l;let W=null;for(const e of u){const n=e.path;e.key=(n?n.at(-1):e.root)||"value",e.isEv&&e.root&&(e.taEl=getElById(e.root,t));for(let t=0;tx&&setSiAndNotifySubsNDeep(t,x[e],n),U=async()=>{const n=d?d(DM,e,null,null,null):"";if(!n)return logErr("Error: dmAct: URL is empty in:",t);K("busy",!0),K("complete",!1),K("err",null),K("code",null);try{const r=noProto(),o=noProto(),s=j?r:o;if(I)for(const[e,t]of _dm.entries())o[e]=t;for(const t of u){const n=t.isEv?getElPrVal(t.taEl||e,t.path):getSiValOrIt(t);if(t.spread){if(n&&"object"==typeof n)for(const e in n)hasOwn(n,e)?s[e]=n[e]:s.value=n}else s[t.key]=n}for(const[e,t,n,l]of G)(e?o:r)[t]=l?getSiValOrIt(l):_dm.get(n);let a=n,c=a.includes("?");for(const e in r)a+=(c?"&":"?")+encodeURIComponent(e)+"="+encodeURIComponent(""+(r[e]??"")),c=!0;let d=ACT_HS_EMPTY,f=1;if(k){const e=resolveMPathVal(k);if(isPlainObj(e)){d=noProto(),f=0;for(const t in e)hasOwn(e,t)&&(d[v?t:camelToKebab(t)]=""+e[t])}}if(F!==ACT_HS_EMPTY)if(d===ACT_HS_EMPTY)d=F;else for(const e in F)hasOwn(F,e)&&(d[e]=F[e]);if(null!=V){const e=resolveMPathVal(V);null!=e&&(f&&(d=cloneOwnProps(d),f=0),d.authorization=""+e)}for(const[e,t,n]of Y){f&&(d=cloneOwnProps(d),f=0);const r=n?getSiValOrIt(n):_dm.get(t);d[e]=null!=r?""+r:""}let h=0,S=null;for(const e in o)hasOwn(o,e)&&(h||(S=e),h++);let _=null;if(h){const e=1===h?o[S]:o;if(E&&(isPlainObj(e)||Array.isArray(e))){const t=new URLSearchParams;if(Array.isArray(e))for(let n=0;nT.abort():null,K("abort",W);const M={method:l,headers:d};null!=_&&(M.body=_),T&&(M.signal=T.signal);const b=await window.fetch(a,M),A=b.headers?.get("content-type")||"",y=A.includes("text/event-stream");let P;if(y)b.body&&"function"==typeof b.body.getReader?P=await consumeSseStream(b.body,t,x):(K("open",!0),P=applySse(await b.text(),t),K("open",!1),K("close",!0));else if(g&&A.includes("text/html")){P=await b.text();const t=O?.root||"outer",n=O&&O.path,r=n?"":findFirstKind(i,EP)?.root??"",o=n?resolveHtmlSelector(n):"before"===t||"after"===t?e.id?"#"+e.id:"":"append"!==t&&"prepend"!==t||!r?"":"#"+r;applyPatchEls({[SSE_ELS]:P,selector:o,mode:t})}else P=isJsonContentType(A)?await b.json():await b.text(),applyActPayload(t,p,P,C),N&&patchMatchingSis(t,P,C);K("busy",!1),K("complete",!0),K("err",null),K("code",Number.isFinite(b.status)?b.status:null),K("abort",null),W=null,!(H>0&&y)||T&&T.signal.aborted||setTimeout(U,H)}catch(e){W=null;const t=e&&"AbortError"===e.name;K("abort",null),K("open",!1),K("busy",!1),K("complete",!0),t||(K("err",e&&e.message?e.message:""+e),K("code",Number.isFinite(e&&e.status)?e.status:null),logErr("dmAct fail:",e),H>0&&setTimeout(U,H))}};if(!a.length)return void U();const $=upsert(_cleanupBoundSubs,e);let J=!1;for(const n of a){if(!n.isSi&&!n.isEv&&!n.isSp)return logErr("dmAct bad trigger:",n.kind,t);if(n.isSp){if(!n.sp?.act)return logErr("Error: dmAct unsupported SP trigger",n.root,"in",t);J||(J=!0,U());continue}const r=pickMods(n.mods,c),o=compileMods(n,r);if(n.isSi){addTrSub(e,n,o,U,$),!J&&n.isImmediate&&(J=!0,U());continue}const l=n.root?getElById(n.root,t):e;if(!l)return logErr("Error: dmAct element not found in trigger:",n,"in:",t);const s=n.path?.[0]??getDefaultEv(l);if(!s)return logErr("Error: dmAct event not found in trigger:",n,"in:",t);const i=addTrSub(e,n,o,U,$,l,s,null,null,l);!J&&n.isImmediate&&(J=!0,invokeSub(i,null,getElPrVal(l,null),e,n))}},WC_TMPLS=new WeakSet,WC_INITS=new WeakSet,defWc=(e,t)=>{if(!t||t.indexOf("-")<0)return logErr("dmWc template expects custom-element name value:",t);if(customElements.get(t)||WC_TMPLS.has(e))return;WC_TMPLS.add(e);const n=(e.getAttribute("data-m-wc-props")||"").match(/[^,\s]+/g)||NIL,r=class extends HTMLElement{connectedCallback(){if(!WC_INITS.has(this)){WC_INITS.add(this),!this.firstElementChild&&e.content&&(this.appendChild(e.content.cloneNode(!0)),wireItClone(this));for(const e of n){let t=this["$"+e];hasOwn(this,e)&&(t=this[e],delete this[e]),void 0!==t&&(this[e]=t)}}}};for(const e of n)Object.defineProperty(r.prototype,e,{get(){return this["$"+e]},set(t){this["$"+e]=t,this.dispatchEvent(new CustomEvent(e,{detail:t})),this.firstElementChild&&this.firstElementChild.dispatchEvent(new CustomEvent(e,{detail:t}))}});customElements.define(t,r)},dmWc=(e,t,n)=>"TEMPLATE"===e.tagName?defWc(e,n&&n.trim()):logErr("Error: dmWc is template-only; use data-m-ex for WC host props in:",t),dmNo=()=>{};dataM.si=dmSi,dataM.ex=dmEx,dataM.it=dmIt,dataM.wc=dmWc,dataM.cl=dmCl,dataM.sh=dmSh,dataM.dbg=dmDbg,dataM.no=dmNo,dataM.get=dataM.post=dataM.put=dataM.patch=dataM.delete=dmAct;const sameKind=(e,t)=>e.nodeType===t.nodeType&&(1!==e.nodeType||(e.id&&t.id?e.id===t.id:e.tagName===t.tagName)),sameSlot=(e,t)=>e.nodeType===t.nodeType&&(1!==e.nodeType||(e.id||t.id?e.id===t.id:e.tagName===t.tagName)),_HTML_PARSE_TEMPLATE=document.createElement("template"),TEXT_NODE=3,_siSelCache=new Map,SI_BAD_SYMS=" \t\r\n#>+~:.[],|",getSimpleIdSelector=e=>{if(!e||"#"!==e[0])return null;const t=_siSelCache.get(e);if(void 0!==t)return t;for(let t=1;t1?e.slice(1):null;return _siSelCache.set(e,n),n},getPatchTars=(e,t=e&&getSimpleIdSelector(e),n=t&&document.getElementById(t))=>e?t?n?[n]:NIL:document.querySelectorAll(e):NIL,sameAttrs=(e,t)=>{const n=e.attributes,r=t.attributes,o=r.length;if(n.length!==o)return!1;for(let e=0;e{const n=t.attributes,r=e.attributes,o=n.length,l=r.length;if(l||o){if(l===o){let e=!0,t=!1;for(let l=0;l=0;n--)t.hasAttribute(r[n].name)||e.removeAttribute(r[n].name)}else for(let t=l-1;t>=0;t--)e.removeAttribute(r[t].name)}},morphChildren=(e,t)=>{let n=e.firstChild,r=t.firstChild;for(;n&&r&&sameSlot(n,r);){const e=n.nextSibling;morph(n,r),n=e,r=r.nextSibling}if(!n){for(;r;r=r.nextSibling)e.appendChild(r.cloneNode(!0));return}if(!r){for(;n;){const t=n.nextSibling;e.removeChild(n),n=t}return}let o=null,l=0;for(let e=n;e;e=e.nextSibling)1===e.nodeType&&e.id&&((o??=noProto())[e.id]=e,l=1);for(;r;r=r.nextSibling){let t=null,s=1===r.nodeType?r.id:"";if(s&&o&&(t=o[s]))delete o[s];else{for(;l&&n&&1===n.nodeType&&n.id&&o[n.id];)n=n.nextSibling;n&&sameKind(n,r)&&(t=n)}t?(t!==n?e.insertBefore(t,n||null):n=n.nextSibling,morph(t,r)):e.insertBefore(r.cloneNode(!0),n||null)}for(;n;){const t=n.nextSibling;e.removeChild(n),n=t}if(o)for(const t in o){const n=o[t];n.parentNode===e&&e.removeChild(n)}};let _morphActiveEl=null;const doneMorph=e=>e&&(_morphActiveEl=null),morph=(e,t)=>{const n=null===_morphActiveEl;if(n&&(_morphActiveEl=document.activeElement),3===e.nodeType&&3===t.nodeType)return e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue),doneMorph(n);if(1!==e.nodeType||1!==t.nodeType||noMorph(e)||noMorph(t))return doneMorph(n);if(e.tagName!==t.tagName)return e.parentNode&&e.parentNode.replaceChild(t.cloneNode(!0),e),doneMorph(n);const r=e.firstChild,o=t.firstChild,l=r&&o&&!r.nextSibling&&!o.nextSibling&&3===r.nodeType&&3===o.nodeType;if(sameAttrs(e,t)&&(!r&&!o||l&&r.nodeValue===o.nodeValue))return doneMorph(n);const s=e.tagName,i=e===_morphActiveEl;let a=-1,u=-1,c="none",d=null,p=-1;if(!i||"INPUT"!==s&&"TEXTAREA"!==s)i&&"SELECT"===s&&(d=e.value,p=e.selectedIndex);else try{a=e.selectionStart,u=e.selectionEnd,c=e.selectionDirection||"none"}catch(e){}const f=e.scrollTop,m=e.scrollLeft,h=f||m;if(updateAttrs(e,t),l?r.nodeValue!==o.nodeValue&&(r.nodeValue=o.nodeValue):(r||o)&&morphChildren(e,t),h&&(e.scrollTop!==f&&(e.scrollTop=f),e.scrollLeft!==m&&(e.scrollLeft=m)),i&&a>=0)try{e.setSelectionRange(a,u,c)}catch(e){}else i&&"SELECT"===s&&(e.value=d,e.value!==d&&p>=0&&p{if(!e)return NIL;const n=(t||"html").toLowerCase();if("html"===n){_HTML_PARSE_TEMPLATE.innerHTML=e;const t=_HTML_PARSE_TEMPLATE.content.firstElementChild;if(!t)return NIL;if(!t.nextElementSibling)return[t];const n=[t];for(let e=t.nextElementSibling;e;e=e.nextElementSibling)n.push(e);return n}const r="svg"===n?`${e}`:`${e}`,o=(new DOMParser).parseFromString(r,"svg"===n?"image/svg+xml":"application/xml").documentElement;return o?Array.from(o.children):[]},insertFragRelative=(e,t,n)=>{if(!e||!t||!t.length)return;const r=document.createDocumentFragment(),o="prepend"===n?e.firstChild||null:"before"===n?e:e.nextSibling;for(const e of t)r.appendChild(e.cloneNode(!0));"append"===n?e.appendChild(r):("prepend"===n?e:e.parentNode)?.insertBefore(r,o)},applyPatchPair=(e,t,n,r=!1)=>{if(e&&t)if("replace"===n)e.replaceWith(r?t:t.cloneNode(!0));else if("inner"===n){const n=e.cloneNode(!1);for(let e=t.firstChild;e;e=e.nextSibling)n.appendChild(e.cloneNode(!0));morphChildren(e,n)}else morph(e,t)},applyPatchEls=e=>{const t=(e.mode||"outer").toLowerCase(),n=e.selector?""+e.selector:"",r=e.namespace?""+e.namespace:"html",o=e[SSE_ELS]||"";if("replace"===t&&"html"===r&&o){const e=n&&getPatchTars(n),t=!n&&/^\s*<[^>]*\sid\s*=\s*(?:"([^"]+)"|'([^']+)')/i.exec(o),r=n?1===e.length&&e[0]:document.getElementById(t&&(t[1]||t[2]||""));if(r)return void(r.outerHTML=""+o)}const l=parseSseEls(o,r);if("remove"!==t)if("append"!==t&&"prepend"!==t&&"before"!==t&&"after"!==t){if(n){if(!l.length)return;const e=getPatchTars(n);if(1===e.length&&1===l.length)return void applyPatchPair(e[0],l[0],t,!0);const r=l[0];for(let n=0;n{if(null===t)return JSON_MERGE_DELETE;if(!isPlainObj(t))return t;const n=isPlainObj(e)?cloneOwnProps(e):noProto();for(const e in t)if(hasOwn(t,e)){const r=applyJsonMergePatch(n[e],t[e]);r===JSON_MERGE_DELETE?delete n[e]:n[e]=r}return n},applyPatchSigs=(e,t)=>{const n=t[SSE_SIS];if(!n)return;let r=null;try{r=JSON.parse(n)}catch(t){return logErr("Error: patch sigs in",e,"expect JSON but found invalid format")}if(!isPlainObj(r))return;const o="true"===(t.onlyIfMissing||"").toLowerCase();for(const t in r)if(hasOwn(r,t)){if(o&&_dm.has(t))continue;const n=applyJsonMergePatch(_dm.get(t),r[t]),l=mkIt(SI,null,t,null);n!==JSON_MERGE_DELETE?setSiAndNotifySubsNDeep(e,l,n):_dm.has(t)&&(setSiAndNotifySubsNDeep(e,l,void 0),_dm.delete(t),updateDebug())}},flushSse=(e,t,n)=>{const r=t[1],o=t[0];t[2]&&r&&("dm-elements"===o?(applyPatchEls(r),e.push({event:o,args:r})):"dm-signals"===o&&(applyPatchSigs(n,r),e.push({event:o,args:r}))),t[0]="message",t[1]=null,t[2]=!1},consumeSseLine=(e,t,n,r)=>{if(!e)return flushSse(n,t,r);if(":"===e[0])return;const o=e.indexOf(":"),l=o<0?e:e.slice(0,o);let s=o<0?"":e.slice(o+1);if(" "===s[0]&&(s=s.slice(1)),"event"===l)t[0]=s||"message";else if("data"===l){const e=s.indexOf(" ");if(e<0)return;const n=s.slice(0,e),r=s.slice(e+1),o=t[1]||(t[1]=noProto());t[2]=!0,o[n]?o[n]+="\n"+r:o[n]=r}},applySse=(e,t="dmax-sse")=>{if(!e)return NIL;const n=[],r=""+e,o=["message",null,!1],l=/\r$/;let s,i=0;for(;(s=r.indexOf("\n",i))>=0;)consumeSseLine(r.slice(i,s).replace(l,""),o,n,t),i=s+1;return i{if(!e||"function"!=typeof e.getReader)return NIL;const r=(e,r)=>n&&setSiAndNotifySubsNDeep(t,n[e],r),o=[],l=e.getReader(),s=new TextDecoder,i=["message",null,!1],a=/\r$/;let u="",c=!1;try{for(;;){const{done:e,value:n}=await l.read();if(e)break;let d;for(c||(c=!0,r("open",!0),r("close",!1)),u+=s.decode(n,{stream:!0});(d=u.indexOf("\n"))>=0;)consumeSseLine(u.slice(0,d).replace(a,""),i,o,t),u=u.slice(d+1)}const e=s.decode();e&&(u+=e),u&&consumeSseLine(u.replace(a,""),i,o,t),flushSse(o,i,t)}catch(e){return r("open",!1),r("err",e.message||""+e),logErr("SSE stream error:",e),o}return r("open",!1),r("close",!0),o};var applyDmaxPatchElements=applyPatchEls,applyDmaxPatchSigs=applyPatchSigs,applyDmaxSse=applySse,consumeDmaxSseStream=consumeSseStream;const cleanupBoundSubsDeep=e=>{if(!e||1!==e.nodeType)return;const t=[e];for(;t.length;){const e=t.pop(),n=_cleanupBoundSubs.get(e);if(n){for(const e of n)removeSubOrClearId(e);_cleanupBoundSubs.delete(e)}const r=e.children;for(let e=0;e{for(const t of e)for(const e of t.removedNodes)cleanupBoundSubsDeep(e)});observer.observe(document.body,{childList:!0,subtree:!0}); +const indexFirst=(e,t,n=0)=>{let r,o=e.length;for(let l of t)(r=e.indexOf(l,n))>=0&&r{if(!e)return e;if(e.indexOf("-")<0)return CAMEL_NAMES.set(e,e),e;let t=CAMEL_NAMES.get(e);return t||(t=e.replace(/-+([a-zA-Z]?)/g,(e,t)=>t?t.toUpperCase():""),CAMEL_NAMES.set(e,t),KEBAB_NAMES.set(t,e),t)},camelToKebab=e=>{if(!e)return e;let t=KEBAB_NAMES.get(e);return t||(t=e.replace(/[A-Z]/g,e=>"-"+e.toLowerCase()),KEBAB_NAMES.set(e,t),CAMEL_NAMES.set(t,e),t)},MOD="^",TARG=":",TRIG="@",ADD="+",ALL=["^",":","@","+"],MODS=["^"],DOT=".",ID="#",NOT="!",BRACKET_OPEN="[",BRACKET_CLOSE="]",NAME_DELIMS=[".","["],SEL_LEADS="#.[*:",SSE_COMMENT=":",SI="s",EP=".",SP="_",M_WITH_SHAPE="with_shape",M_SHAPE_ONLY="shape_only",M_IMMEDIATE="immediate",M_NOT_IMMEDIATE="notImmediate",M_ONCE="once",M_ALWAYS="always",M_DEBOUNCE="debounce",M_THROTTLE="throttle",M_RAF="raf",M_PREVENT="prevent",M_AND="and",M_EQ="eq",M_NE="ne",M_LT="lt",M_GT="gt",M_LE="le",M_GE="ge",M_PR="pr",M_ATTRS="attrs",M_SEL="sel",M_SEL_ALL="selAll",M_SI_V="si",M_EV_V="ev",M_RW="rw",M_NUM="num",M_JSOS="jsos",M_JSON="json",M_TEXT="text",M_HTML="html",M_FORM="form",M_SSE="sse",M_BUSY="busy",M_COMPLETE="complete",M_ERR="err",M_CODE="code",M_STAT="stat",M_NO_CACHE="noCache",M_HS="hs",M_HS_NO_KEBAB="hsNoKebab",M_AUTH="auth",M_BROTLI="brotli",M_BR="br",M_GZIP="gzip",M_DEFLATE="deflate",M_COMPRESS="compress",M_REPLACE="replace",M_MERGE="merge",M_APPEND="append",M_PREPEND="prepend",M_INC="inc",M_DEC="dec",M_BEFORE="before",M_AFTER="after",M_INNER="inner",M_REMOVE="remove",M_OUTER="outer",M_SSE_OPEN="open",M_SSE_CLOSE="close",M_RETRY="retry",M_ABORT="abort",M_URL="url",M_BODY="body",M_HDR="header",M_SPREAD="spread",M_SEND_ALL="sendAll",M_PATCH_ALL="patchAll",M_SYNC_ALL="syncAll",M_DEBOUNCE_MS=500,M_THROTTLE_MS=500,M_RETRY_MS=1e3,H_ACCEPT="accept",H_ACCEPT_ENCODING="accept-encoding",H_AUTHORIZATION="authorization",H_CACHE_CONTROL="cache-control",H_CONTENT_TYPE="content-type",H_PRAGMA="pragma",noProto=()=>Object.create(null),ACT_HS_EMPTY=Object.freeze(noProto()),ACT_HS_JSON=Object.freeze({[H_CONTENT_TYPE]:"application/json",[H_ACCEPT]:"application/json"}),ACT_HS_HTML=Object.freeze({[H_ACCEPT]:"text/html"}),ACT_HS_FORM=Object.freeze({[H_CONTENT_TYPE]:"application/x-www-form-urlencoded"}),ACT_HS_TEXT=Object.freeze({[H_CONTENT_TYPE]:"text/plain;charset=UTF-8"}),ACT_HS_NO_CACHE=Object.freeze({[H_CACHE_CONTROL]:"no-cache",[H_PRAGMA]:"no-cache"}),ACT_HS_SSE=Object.freeze({[H_ACCEPT]:"text/event-stream",[H_CACHE_CONTROL]:"no-cache",[H_PRAGMA]:"no-cache"}),SP_WIN="window",SP_DOC="document",SP_HISTORY="history",SP_FORM="form",SP_INTERVAL="interval",SP_TIMEOUT="timeout",SP_VIEWED="viewed",SP_INIT="init",SPS=[SP_WIN,SP_DOC,"history","form","interval","timeout","viewed","init"],SP_WIN_EV="resize",SP_DOC_EV="visibilitychange",SP_INTERVAL_MS=500,SP_TIMEOUT_MS=500,SP_TA_WIN=1,SP_TA_DOC=2,SP_TA_FORM=3,SP_DEFS=Object.assign(noProto(),{[SP_WIN]:{ta:1,ev:"resize"},[SP_DOC]:{ta:2,ev:SP_DOC_EV},[SP_HISTORY]:{ta:"history"},[SP_FORM]:{ta:3,ev:"submit",immediate:1},[SP_INTERVAL]:{ms:500,repeat:1},[SP_TIMEOUT]:{ms:500},[SP_VIEWED]:{io:1},[SP_INIT]:{init:1,act:1}}),ACT_METHODS=Object.freeze({get:"GET",post:"POST",put:"PUT",patch:"PATCH",delete:"DELETE"}),DM_KEY="data-m-",DM_NO="data-m-no",DM_NO_SCAN=DM_NO+"^scan",DM_NO_MORPH=DM_NO+"^morph",E_RW_REQ="dmEx ^rw requires an element/property trigger in:",E_RW_EL="dmEx ^rw source element is not found in trigger:",E_RW_EV="dmEx ^rw event is not found in trigger:",E_TRIG_EL="Element is not found in trigger:",E_TRIG_EV="Event is not found in trigger:",E_FORM_EL="Form element is not found for trigger:",IT_STATES=new WeakMap,IT_ATTRS=new WeakMap,isSp=e=>{if(e.startsWith(SP))for(const t of SPS)if(e.startsWith(t,1))return!0;return!1},mkIt=(e,t,n,r,o=NIL)=>({kind:e,not:t,root:n,path:r,mods:o,sp:e===SP&&SP_DEFS[n]||null,isSi:e===SI,isEv:e===EP,isSp:e===SP,isImmediate:null}),mkMod=(e,t,n)=>({kind:"^",not:e,root:t,path:n,isImmediate:"immediate"===t||"notImmediate"!==t&&null}),DEFAULT_PR_TA=Object.freeze(mkIt(EP,null,"",null)),RE_DIGITS=/^\d+$/,parseRef=(e,t,n=0)=>{if(!t)return null;let r=n,o=t.length;for(;t.startsWith("!",r);)++r;let l=0==r?null:r%2!=0,s=indexFirst(t,NAME_DELIMS,r),i=s<0?0==r?t:t.slice(r):t.slice(r,s),a=EP;if(i&&i.length>0){const n=i[0]===ID;if(n||isSp(i)){if(a=n?EP:SP,i=i.slice(1),!i)return logErr("empty",a+":",t,e),null}else a=SI,i=kebabToCamel(i)}if(s<0&&!i&&null!==l)return logErr("bare","!:",t),null;if(s<0||"."===t[s]&&s+1==o)return mkIt(a,l,i,null);r=s;let u=[];for(;r>=0&&r{if(!t)return null;let n=0,r=t.length;for(;t.startsWith("!",n);)++n;let o=0==n?null:n%2!=0;const l=indexFirst(t,NAME_DELIMS,n);let s=l<0?0==n?t:t.slice(n):t.slice(n,l);if(s&&(s=kebabToCamel(s)),!s)return logErr("empty mod:",t,e),null;if("attrs"===s){if(l<0||l+1>=r)return mkMod(o,s,{r:"",v:""});const n=t.slice(l+1);if(n[0]!==ID)return mkMod(o,s,{r:"",v:n});const i=n.indexOf(".",1),a=n.slice(1,i<0?n.length:i);return a?mkMod(o,s,{r:a,v:i<0?"":n.slice(i+1)}):(logErr("empty attrs mod:",t,e),null)}return mkMod(o,s,"sel"===s||"selAll"===s?l<0||l+1>=r?"":t.slice(l+1):l<0||l+1>=r?null:t.indexOf(".",n=l+1)<0?kebabToCamel(t.slice(n)):parseRef(e,t,n))},parse=(e,t)=>{t??=5;const n=e.length,r=noProto();for(r["^"]=r[":"]=r["@"]=r["+"]=NIL;t>=0&&t{let t=_parseCache.get(e);return t||_parseCache.set(e,t=parse(e)[0]),t},RETURN_THEN=[" ","(","{",";","[",'"',"'","\n","\r","\t"],FN_ARGS=["dm","el","trig","val","detail"],_compiledFnCache=new Map,compileFn=(e,t,n=FN_ARGS)=>{const r=n===FN_ARGS?e+"\0"+t:null;if(null!==r&&_compiledFnCache.has(r))return _compiledFnCache.get(r);let o=""+e;const l=o.indexOf("return");let s,i=l>=0&&(l+6>=o.length||indexFirst(o,RETURN_THEN,l+6)==l+6)?o:`return(${o})`;i=`try{ ${i} }catch(e){ console.error('[dmax]','eval ${t}:',e.message,${o}); return }`;try{s=Function(...n,i)}catch(e){return void logErr(`compile ${t}:`,e.message,o)}return null!==r&&_compiledFnCache.set(r,s),s},_dm=new Map,DM=new Proxy({},{get:(e,t)=>_dm.get(t),set:(e,t,n)=>(_dm.set(t,n),!0),has:(e,t)=>_dm.has(t),ownKeys:()=>Array.from(_dm.keys()),getOwnPropertyDescriptor:(e,t)=>_dm.has(t)?{value:_dm.get(t),enumerable:!0,configurable:!0}:void 0}),dmSi=(e,t,n)=>{const r=parseCached(t),o=r[":"];(r["^"].length||r["@"].length||r["+"].length)&&warn("targets only:",t);let l=compileFn(n,t);if(!l)return;let s=n?l(DM,e,null):null;if(o.length)for(const e of o)e.kind==SI?(e.mods.length&&warn("mods ignored:",e.mods,t),_dm.set(e.root,s)):logErr("signal targets only:",e,t);else{if(!s||"object"!=typeof s)return logErr("object value expected:",t,n);for(const e in s)_dm.set(kebabToCamel(e),s[e])}},dmDbg=e=>{e&&(_debugEls.add(e),updateDebug())},getElById=(e,t)=>{const n=document.getElementById(e);return n||logErr(`no #${e}:`,t),n},getDefaultPr=e=>{const t=e.type,n=e.tagName;return"checkbox"===t||"radio"===t?"checked":"DETAILS"===n?"open":"INPUT"===n||"SELECT"===n||"TEXTAREA"===n||n&&n.indexOf("-")>=0&&"value"in e?"value":"textContent"},getDefaultEv=e=>{const t=e.tagName;return"FORM"===t?"submit":"DETAILS"===t?"toggle":"INPUT"===t||"SELECT"===t||"TEXTAREA"===t?"change":"click"},getElPrVal=(e,t)=>{if(!e)return null;const n=t&&t.length?t[0]:getDefaultPr(e);let r=e[n];return void 0===r&&e.getAttribute&&(r=e.getAttribute(camelToKebab(n))),t&&t.length>1?getPrValAndDepth(r,t,-1,1)[0]:r},isDefaultPrName=(e,t)=>t===getDefaultPr(e)||"value"===t||"checked"===t||"textContent"===t,mkEv=e=>{try{return new Event(e,{bubbles:!0})}catch(t){const n=document.createEvent("Event");return n.initEvent(e,!0,!0),n}},isNil=e=>null==e,getPrValAndDepth=(e,t,n=-1,r=0)=>{let o=e;if(isNil(o)||!t)return[o,0];let l=-1==n||n>t.length-r?t.length-r:n;for(let e=0;e{if(n>=32)return console.warn("[dmax] Warning: too deep to compare for signal value change, consider it changed, stopped at:",32),!0;const r=e,o=t;if(Array.isArray(r)){if(!Array.isArray(o)||r.length!=o.length)return!0;for(let e=0;e{if(!n.isEv&&!n.isSp)return null;let o=n.isSp?n.root===SP_WIN?window:n.root===SP_DOC?document:"history"===n.root?window.history:null:n.root?getElById(n.root,t):e;const l=n.path;let s=l?null:getDefaultPr(o);if(l&&l.length&&([o]=getPrValAndDepth(o,l,l.length-1),s=l.at(-1)),!o||!s)return logErr("Error setting non existing property for:",n,"in",t);try{if("function"==typeof o[s])return Array.isArray(r)?o[s](...r):o[s](r);if("style"===s&&isPlainObj(r)&&o[s])for(const e in r){const t=o[s],n=r[e],l="-"===e[0]?e:"--"+camelToKebab(e);e in t?valChangedDeep(t[e],n)&&(t[e]=n):t.getPropertyValue(l)!==""+n&&t.setProperty(l,n)}else if(o&&"function"==typeof o.setProperty&&!(s in o)){const e="-"===s[0]?s:"--"+camelToKebab(s);o.getPropertyValue(e)!==""+r&&o.setProperty(e,r)}else valChangedDeep(o[s],r)&&(o[s]=r)}catch(t){logErr("Error: Failed to set property:",t.message,">>>",n,"on",e)}return o[s]},getComputedDisplay=e=>"undefined"!=typeof window&&window.getComputedStyle?window.getComputedStyle(e).display:"",applyClVal=(e,t,n)=>{for(const r of e){const e=r.kb||(r.kb=camelToKebab(r.root));(r.not?!n:n)?t.classList.add(e):t.classList.remove(e)}},applyDisplayValue=(e,t,n,r)=>{const o=e.style.display;r?t||"none"===o||"none"===getComputedDisplay(e)?e.style.display=n:e.style.removeProperty("display"):"none"!==o&&(e.style.display="none")},diffShapeShallow=(e,t)=>{let n=e,r=t;if(n&&"object"==typeof n||(n=NIL),r&&"object"==typeof r||(r=NIL),Array.isArray(n)){if(Array.isArray(r)){const e=r.length,t=n.length;return e==t?null:e>t?{addedRange:[t,e-t]}:{removedRange:[e,t-e]}}let e=[];for(const t in r)hasOwn(r,t)&&e.push(t);return{added:e,removedRange:[0,n.length]}}if(Array.isArray(r)){let e=[];for(const t in n)hasOwn(n,t)&&e.push(t);return{removed:e,addedRange:[0,r.length]}}let o=[],l=[];for(const e in r)e in n||o.push(e);for(const e in n)e in r||l.push(e);return o.length?l.length?{added:o,removed:l}:{added:o}:l.length?{removed:l}:null},samePath=(e,t)=>{if(e.length!==t.length)return!1;for(let n=0;ncompileMods(e,e.mods.length?e.mods:t),modPath=e=>null==e?NIL:e.kind?e.root?e.path?.length?[e.root,...e.path]:[e.root]:e.path||NIL:Array.isArray(e)?e:[e],compileMods=(e,t)=>{const n=null!=e.sp?.ms;let r=0,o=0,l=0,s=null,i=NIL,a=0,u=0,d="",c=null;for(const e of t){const t=e.root;if("with_shape"===t)a=1;else if("shape_only"===t)a=2;else if("pr"===t){const t=e.path;u=1,d=t?.isEv&&t.root||"",i=t?.isEv?t.path||NIL:modPath(t)}else"attrs"===t?(u=4,d=e.path?.r||"",i=e.path?.v||""):"sel"===t?(u=5,i=e.path||""):"selAll"===t?(u=6,i=e.path||""):"si"===t?(u=2,i=modPath(e.path)):"ev"===t?(u=3,i=modPath(e.path)):"once"===t?r|=1:"always"===t?r|=2:"prevent"===t?r|=4:"num"===t?r|=8:"raf"===t?r|=32:"jsos"===t?c=e.path??2:"rw"===t?r|=16:n||"debounce"!==t?n||"throttle"!==t?t in PERMIT_MODS&&(s=s?s.push?(s.push(e),s):[s,e]:e):l=+(resolveMPathVal(e.path)??500)||500:o=+(resolveMPathVal(e.path)??500)||500}return{f:r,d:o,t:l,p:s,v:i,c:a,s:u,r:d,j:c}},getTrPrTa=(e,t,n,r,o,l,s=!0)=>{const i=n.root?getElById(n.root,t):e;if(!i)return logErr("Error:",o,n,"in:",t),null;let a=n.path?n.path[0]:null,u=null;a&&isDefaultPrName(i,a)&&(u=n.path,a=getDefaultEv(i));const d=1!==r.s&&4!==r.s||!r.r?i:getElById(r.r,t),c=1===r.s||3===r.s?r.v.length?r.v:u:4===r.s||5===r.s||6===r.s?r.v:u;return s&&1===r.s&&!r.r&&r.v.length&&(u=r.v),a=a??getDefaultEv(i),a?d?{taEl:i,readEl:d,ev:a,prPath:u,readPath:c,tar:mkIt(EP,null,n.root,u,NIL)}:logErr("Error:",o,n,"in:",t):(logErr("Error:",l,n,"in:",t),null)},addNonSiTrSub=(e,t,n,r,o,l,s=null)=>{const i=t.sp,a=!!i;if(!a&&!expected(s,"Expected non-SP trigger target in addNonSiTrSub:",t,"on:",e))return null;const u=addTrSub(e,t,n,r,o,a?null:s.taEl,a?t.path?.[0]||i?.ev||null:s.ev,a?null:s.prPath,a?null:s.readPath,a?null:s.readEl);return i?.init?(u&&!l&&invokeSub(u,{type:"init"},1===n.s||4===n.s||5===n.s||6===n.s?getReadVal(n.r?getElById(n.r):e,n,1===n.s?n.v.length?n.v:null:n.v):"init",e,t),!0):!u||l||!t.isImmediate||i&&!i.immediate?l:(invokeSub(u,null,a?null:getReadVal(s.readEl,n,s.readPath),e,t),!0)},PERMIT_MODS=Object.assign(noProto(),{[M_AND]:1,[M_EQ]:1,[M_NE]:1,[M_LT]:1,[M_GT]:1,[M_LE]:1,[M_GE]:1}),getSiVal=e=>{const t=_dm.get(e.root),n=e.path;return n?getPrValAndDepth(t,n)[0]:t},getSiValOrIt=e=>{if(!e.kind)return e;const t=getSiVal(e);return e.not?!t:t},resolveMPathVal=e=>{if(e&&e.kind)return getSiValOrIt(e);if("string"!=typeof e)return e;if(_dm.has(e))return _dm.get(e);const t=parseRef("mod",e);return t&&t.kind&&(!t.isSi||t.path||_dm.has(t.root))?getSiValOrIt(t):e},dmJsos=(e,t=2)=>"string"==typeof e?e:JSON.stringify(e,null,+(resolveMPathVal(t)??2)||0),resolveHtmlSelector=e=>{const t=resolveMPathVal(e);return"string"==typeof t&&t?"#.[*:".includes(t[0])?t:"#"+t:""},mkOrStatSi=(e,t)=>{if(!e)return null;const n=e.path;return"string"==typeof n?mkIt(SI,null,n||t,null):n?.isSi?n:mkIt(SI,null,t,null)},mkStatTar=(e,t,n)=>({root:e,path:t?t.concat(n):[n]}),STAT_KEYS_F=["busy","complete","open","close"],STAT_KEYS_N=["err","code","abort"],defStatSi=e=>{if(!e)return null;let t=_dm.get(e.root);t&&"object"==typeof t||_dm.set(e.root,t=noProto());let n=t;const r=e.path;if(r&&r.length)for(let e=0;e{const t=defStatSi(mkOrStatSi(e,"stat"));if(!t)return null;const{root:n,path:r}=t,o=noProto();for(const e of STAT_KEYS_F)o[e]=mkStatTar(n,r,e);for(const e of STAT_KEYS_N)o[e]=mkStatTar(n,r,e);return o},isJsonContentType=e=>{const t=(e||"").toLowerCase();if(t.indexOf("application/json")>=0)return!0;const n=t.indexOf("+json");if(n<0)return!1;const r=n+5;if(r>=t.length)return!0;const o=t[r];return";"===o||" "===o||"\t"===o},isPlainObj=e=>!!e&&"object"==typeof e&&!Array.isArray(e),hasOwn=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),cloneOwnProps=e=>{const t=noProto();for(const n in e)hasOwn(e,n)&&(t[n]=e[n]);return t},mergeActHs=(e,t)=>{if(!e||e===ACT_HS_EMPTY)return t||ACT_HS_EMPTY;if(!t||t===ACT_HS_EMPTY)return e;const n=cloneOwnProps(e);for(const e in t)hasOwn(t,e)&&(n[e]=t[e]);return Object.freeze(n)},buildActBaseHs=(e,t,n,r,o,l,s)=>{let i=e?ACT_HS_JSON:r?ACT_HS_FORM:t?ACT_HS_TEXT:ACT_HS_EMPTY;if(n&&(i=mergeActHs(i,ACT_HS_HTML)),i=o?mergeActHs(i,ACT_HS_SSE):l?mergeActHs(i,ACT_HS_NO_CACHE):i,!s)return i;const a=i===ACT_HS_EMPTY?noProto():cloneOwnProps(i);return a["accept-encoding"]=s,Object.freeze(a)},isDigitsOnly=e=>"string"==typeof e&&RE_DIGITS.test(e),buildItRefBase=(e,t)=>{let n=e;if(t)for(let e=0;e{let n="dm."+e;if(t)for(let e=0;ebuildItRefBase(e,t)+"."+n,buildItItemExpr=(e,t,n)=>buildItExprBase(e,t)+"["+n+"]",replaceItTokens=(e,t,n)=>{if("string"!=typeof e)return e;let r=e.indexOf("$");if(r<0)return e;const o=[];let l=0;for(;r>=0;){const s=e.startsWith("$it",r)?t:e.startsWith("$ix",r)?n:null;s?(o.push(e.slice(l,r),s),l=r+3,r=e.indexOf("$",l)):r=e.indexOf("$",r+1)}return o.length?o.join("")+e.slice(l):e},rewriteItBindings=(e,t,n,r)=>{const o=[e];for(;o.length;){const e=o.pop(),l=e.attributes;let s=null;for(let e=l.length-1;e>=0;--e){const o=l[e],i=replaceItTokens(o.name,t,r),a=replaceItTokens(o.value,n,r);if(i!==o.name||a!==o.value){if(!s){s=[];for(let t=l.length-1;t>e;--t)s.push([l[t].name,l[t].value])}i===o.name&&(o.value=a)}s&&s.push([i,a])}s&&IT_ATTRS.set(e,s);const i=e.children;for(let e=i.length-1;e>=0;--e)o.push(i[e])}},noScan=e=>e&&e.hasAttribute&&(e.hasAttribute(DM_NO)||e.hasAttribute(DM_NO_SCAN)),noMorph=e=>e.hasAttribute(DM_NO)||e.hasAttribute(DM_NO_MORPH),warn=(...e)=>console.warn("[dmax]",...e),logErr=(...e)=>console.error("[dmax]",...e),wireItClone=e=>{const t=[e];for(;t.length;){const e=t.pop();if(noScan(e))continue;const n=IT_ATTRS.get(e);if(n&&n.length)for(let t=0;t=0;--e)t.push(r[e])}},expected=(e,...t)=>e||(warn(...t),null),renderItState=(e,t,n,r,o,l)=>{const s=getSiValOrIt(t);if(!expected(Array.isArray(s),"dmIt expected array value from:",t,"on:",e))return;const i=s.length,a=n.count||0;if(ia){const t=i-a;if(1===t){const t=r.cloneNode(!0),s=""+a;rewriteItBindings(t,o+"."+s,l+"["+s+"]",s),e.appendChild(t),n.nodes.push(t)}else{const t=document.createDocumentFragment();for(let e=a;e{if(Array.isArray(e)&&Array.isArray(t))return e.concat(t);if(!isPlainObj(e)||!isPlainObj(t))return t;const n=cloneOwnProps(e);for(const e in t)hasOwn(t,e)&&(n[e]=hasOwn(n,e)?mergeActVals(n[e],t[e]):t[e]);return n},combineActResult=(e,t,n)=>{if("merge"===n)return mergeActVals(e,t);if("inc"===n||"dec"===n)return(+e||0)+("inc"===n?1:-1);if("append"===n||"prepend"===n){if(Array.isArray(e)&&Array.isArray(t))return"append"===n?e.concat(t):t.concat(e);if("string"==typeof e||"string"==typeof t)return"append"===n?""+(e??"")+(t??""):""+(t??"")+(e??"")}return t},getWriteMode=e=>{for(const t of e||NIL)if("replace"===t.root||"merge"===t.root||"append"===t.root||"prepend"===t.root||"inc"===t.root||"dec"===t.root)return t.root;return"replace"},patchMatchingSis=(e,t,n)=>{if(isPlainObj(t))for(const r in t)if(hasOwn(t,r)){const o=kebabToCamel(r);if(!_dm.has(o))continue;setSiAndNotifySubsNDeep(e,mkIt(SI,null,o,null),combineActResult(_dm.get(o),t[r],n))}},applyActPayload=(e,t,n,r)=>{if(!t)return;const o=getSiValOrIt(t);setSiAndNotifySubsNDeep(e,t,combineActResult(o,n,r))},permitVal=(e,t,n=e.root,r=resolveMPathVal(e.path))=>"and"===n?!!r!=!!e.not:"eq"==n?t==r:"ne"==n?t!=r:"gt"==n?+t>+r:"lt"==n?+t<+r:"ge"==n?+t>=+r:+t<=+r,modsPermitVal=(e,t)=>e.push?!e.some(e=>!permitVal(e,t)):permitVal(e,t),_subs=new Map,_debugEls=new Set;let _debugQueued=!1;const upsert=(e,t)=>{let n=e.get(t);return n||e.set(t,n=[]),n},removeSiSub=e=>{const t=_subs.get(e.trig.root);if(t&&t.length)for(let n=0;n{const t=e.trig.sp;t?.io?e.clearId.disconnect():t?.repeat?clearInterval(e.clearId):clearTimeout(e.clearId),e.clearId=null},removeSubOrClearId=e=>{try{const t=e.ev;t?t.taEl.removeEventListener(t.evName,e.fn,t.opts):null!=e.clearId?clearSubId(e):removeSiSub(e)}catch(e){}},PASSIVE_LISTENER_OPTS=Object.freeze({passive:!0}),ELEMENT_NODE=1,invokeSub=(e,t,n,r,o)=>e(DM,r,o,o.isSi?getSiVal(o):n,t),invokeBoundSub=(e,t=null)=>e.fn(DM,e.el,e.trig,e.trig.isSi?getSiVal(e.trig):null,t),onIntervalSub=e=>{const t={tick:e.tick++,ms:e.ms,type:"interval"};try{invokeSub(e.fn,t,e.ms,e.el,e.trig)}catch(t){logErr(`Error: interval handler (${e.ms}ms) failed:`,t?.message??t)}},onTimeoutSub=e=>{try{invokeSub(e.fn,{tick:0,ms:e.ms,type:"timeout"},e.ms,e.el,e.trig)}catch(t){logErr(`timeout ${e.ms}ms:`,t?.message??t)}},getAttrs=(e,t="")=>{const n=[];if(!e)return n;const r=e.attributes||NIL;for(let e=0;e(t===e&&e?.ownerDocument&&(t=e.ownerDocument),t&&"function"==typeof t.querySelectorAll?t:document),dmSel=(e,t=document)=>t.querySelector(e||""),dmSelAll=(e,t=document)=>Array.from(t.querySelectorAll(e||"")),getReadVal=(e,t,n)=>4===t.s?getAttrs(e,n):5===t.s?dmSel(n,getQueryRoot(e)):6===t.s?dmSelAll(n,getQueryRoot(e)):getElPrVal(e,n),getTrVal=(e,t,n,r)=>3===n.s?r?.length?getElPrVal(e,r):getEvVal(e):getReadVal(t,n,r),addSpSub=(e,t,n,r,o,l,s)=>{if(null!=n.ms){const i=+s||n.ms,a={el:e,trig:t,fn:null,siChangeM:null,ev:null,clearId:null,ms:i,tick:0};return a.fn=applyTrMs(o,t,r,a),a.clearId=n.repeat?setInterval(onIntervalSub,i,a):setTimeout(onTimeoutSub,i,a),l.push(a),a.fn}if(n.io){if("undefined"==typeof IntersectionObserver)return warn("IntersectionObserver missing, skip _viewed:",e),null;const n={el:e,trig:t,fn:null,siChangeM:null,ev:null,clearId:null};n.fn=applyTrMs(o,t,r,n);const s=new IntersectionObserver(r=>{for(const o of r)if(o.isIntersecting)try{invokeSub(n.fn,{ratio:o.intersectionRatio,type:"viewed"},o.intersectionRatio,e,t)}catch(e){logErr("viewed handler:",e?.message??e)}});return s.observe(e),n.clearId=s,l.push(n),n.fn}if(n.init)return applyTrMs(o,t,r);const i=1===n.ta?window:2===n.ta?document:3===n.ta&&e&&e.closest?e.closest("form"):null,a=t.path?.[0]||n.ev||null,u=1===r.s?r.v.length?r.v:null:4===r.s||5===r.s||6===r.s?r.v:null;if(3===n.ta&&!i)return logErr("Error:",E_FORM_EL,t,"on:",e),null;if(!expected(i&&a,"Expected event target/name in addSpSub:",t,"on:",e))return null;const d=!(4&r.f)&&PASSIVE_LISTENER_OPTS,c={el:e,trig:t,fn:null,siChangeM:null,ev:{taEl:i,evName:a,opts:d},clearId:null},p=applyTrMs(o,t,r,c);return c.fn=n=>invokeSub(p,n,1===r.s||4===r.s||5===r.s||6===r.s||3===r.s?getTrVal(n,i,r,u):n?.type??null,e,t),i.addEventListener(a,c.fn,d),l.push(c),p},addTrSub=(e,t,n,r,o,l,s,i,a=i,u=l)=>{if(t.isSi){const l={el:e,trig:t,fn:r,siChangeM:n.c,ev:null,clearId:null};return l.fn=applyTrMs(r,t,n,l),upsert(_subs,t.root).push(l),(o||upsert(_cleanupBoundSubs,e)).push(l),l}const d=t.sp;if(d)return addSpSub(e,t,d,n,r,o,s);if(!expected(l&&s,"Expected event target/name in addTrSub:",t,"on:",e))return null;const c=!(4&n.f)&&PASSIVE_LISTENER_OPTS,p=l?.tagName&&l.tagName.indexOf("-")>=0,f=p?camelToKebab(s):s,m={el:e,trig:t,fn:null,siChangeM:null,ev:{taEl:l,evName:f,opts:c},clearId:null},g=applyTrMs(r,t,n,m),h=!n.s&&!a&&p;return m.fn=r=>invokeSub(g,r,h?getEvVal(r):getTrVal(r,u,n,a),e,t),l.addEventListener(f,m.fn,c),o.push(m),g},findFirstKind=(e,t)=>{for(let n=0;n{_debugEls.size&&!_debugQueued&&(_debugQueued=!0,queueMicrotask(()=>{_debugQueued=!1;const e=noProto();for(const[t,n]of _dm.entries())e[t]=n;const t=JSON.stringify(e,null,2);for(const e of _debugEls)e.textContent=t}))},setSiAndNotifySubs=(e,t,n)=>{const r=t?.root,o=t?.path;if(!r)return null;let l=_dm.get(r),s=l,i=l,a=0,u=null;if(o){if(!o.length)return null;for(i&&"object"==typeof i||_dm.set(r,i=l={});a{if(syncDepth++>MAX_SYNC_DEPTH)return logErr(`Error: Infinite loop detected for signal: ${t} (depth > ${MAX_SYNC_DEPTH}) in ${e}`);try{return setSiAndNotifySubs(0,t,n)}finally{syncDepth--}},onRaf=e=>("function"==typeof requestAnimationFrame?requestAnimationFrame:setTimeout)(e,16),getEvVal=(e,t=e&&e.detail)=>void 0===t?e:t&&"object"==typeof t?t.value??t.ms??t:t,applyTrMs=(e,t,n,r)=>{const o=t.isSi,l=n.v,s=n.d,i=n.t,a=n.p,u=n.f,d=1&u&&!(2&u)&&r,c=!o&&4&u,p=32&u,f=n.s,m=(2===f&&o||3===f&&!o)&&l.length,g=8&u,h=n.j;if(!(d||c||s||i||p||a||t.not||m||g||null!=h)&&(o||r||t.sp?.init))return e;let S=0,E=0,_=!1,T=!1,b=!1,A=null,M=null,y=null,P=null,v=null,I=null,N=null,C=null,O=null,D=null;const R=function(n,u,L,w,x){if(L=L||t,!_){if(c&&x?.preventDefault?.(),s)return O??=function(){_=!0;try{R(A,M,null,y,P)}finally{_=!1}},A=n,M=u,y=w,P=x,clearTimeout(S),void(S=setTimeout(O,s));if(i){const e=Date.now();if(e-E{b=!1,T=!0;try{R(v,I,null,N,C)}finally{T=!1}},void onRaf(D)}}let V=o?w??getSiVal(L):3===f?l.length?x:getEvVal(x):w??getEvVal(x);if(m&&(V=getPrValAndDepth(V,l)[0]),g&&(V=null==V||""===V?null:+V),L.not&&(V=!V),!a||modsPermitVal(a,V)){null!=h&&(V=dmJsos(V,h));try{e(n,u,L,V,x)}catch(e){logErr("handler:",e)}d&&removeSubOrClearId(r)}};return R},_cleanupBoundSubs=new WeakMap,dmEx=(e,t,n)=>{const r=parseCached(t),o=r[":"],l=r["@"],s=r["^"];r["+"].length&&warn("targets/triggers/mods only:",t);const i=null!=n&&""+n;let a=i?compileFn(n,t):(e,t,n,r)=>r;if(i&&!a)return;const u=e?upsert(_cleanupBoundSubs,e):null;if(!o.length&&l.length){const n=[],r=[],o=[];for(const i of l){const l=compileTrMods(i,s);if(!(16&l.f)){n.push({tr:i,mod:l}),i.isSi&&o.push([i,getWriteMode(i.mods)]);continue}if(!i.isEv)return logErr("Error:",E_RW_REQ,t);const a=getTrPrTa(e,t,i,l,E_RW_EL,E_RW_EV);if(!a)return;r.push({tr:i,mod:l,w:getWriteMode(i.mods),taEl:a.taEl,readEl:a.readEl,ev:a.ev,prPath:a.prPath,readPath:a.readPath,tar:a.tar})}if(r.length&&n.length){let l=!1;const s=(n,o,l,s)=>{const i=a(n,e,o,l,s);for(const n of r)setPr(e,t,n.tar,combineActResult(getElPrVal(n.taEl,n.prPath),i,n.w))};for(const r of n){const n=r.tr,o=r.mod;if(n.isSi){const t=addTrSub(e,n,o,(e,t,n,r,o)=>s(e,n,r,o),u);l||0==n.isImmediate||(l=!0,invokeBoundSub(t))}else{if(!n.isEv&&!n.isSp)return logErr("Error: unsupported trigger kind",n.kind,"in",t);{const r=n.isEv?getTrPrTa(e,t,n,o,E_RW_EL,E_RW_EV):null;if(n.isEv&&!r)return;if(null==(l=addNonSiTrSub(e,n,o,(e,t,n,r,o)=>s(e,n,r,o),u,l,r)))return}}}if(o.length)for(const n of r){const r=addTrSub(e,n.tr,n.mod,(n,r,l,s,i)=>{const u=a(n,e,l,s,i);for(const e of o)setSiAndNotifySubsNDeep(t,e[0],combineActResult(getSiVal(e[0]),u,e[1]))},u,n.taEl,n.ev,n.prPath,n.readPath,n.readEl);0!=n.tr.isImmediate&&invokeSub(r,null,getReadVal(n.readEl,n.mod,n.readPath),e,n.tr)}return}}if(o.length){const e=a;for(const e of o)e._m=getWriteMode(e.mods),e._j=!(!e.mods||!e.mods.some(e=>"jsos"===e.root)),e.isSi||(e._el=e.isSp?e.root===SP_WIN?window:e.root===SP_DOC?document:"history"===e.root?window.history:null:e.root?getElById(e.root,t):null);a=(n,r,l,s,i)=>{const a=e(n,r,l,s,i);try{for(const e of o){const n=e._j?dmJsos(a):a,o=combineActResult(e.isSi?getSiVal(e):getElPrVal(e._el||r,e.path),n,e._m);e.isSi?setSiAndNotifySubsNDeep(t,e,o):setPr(r,t,e,o)}}catch(e){logErr("Error: setting target in",t,"ended with ex:",e)}}}if(!l.length)return void(i&&a(DM,e,null,null,null));let d=!1;for(const n of l){const r=compileTrMods(n,s);if(n.isSi){const t=addTrSub(e,n,r,a,u);d||0==n.isImmediate||(d=!0,invokeBoundSub(t));continue}if(!n.isEv&&!n.isSp)return logErr("Error: unsupported trigger kind",n.kind,"in",t);const o=n.isEv&&getTrPrTa(e,t,n,r,E_TRIG_EL,E_TRIG_EV,!1);if(n.isEv&&!o)return;if(null==(d=addNonSiTrSub(e,n,r,a,u,d,o)))return}},dmCl=(e,t,n)=>{const r=parseCached(t),o=r["+"],l=r[":"],s=r["@"],i=r["^"];if(!o.length)return logErr("Error: dmCl requires class names via + syntax in:",t);if(!s.length)return logErr("Error: dmCl requires at least one trigger in:",t);const a=getTaFromTars(e,t,l);if(!a)return logErr("Error: dmCl target element not found in:",t);const u=n?compileFn(n,t):null;if(n&&!u)return;const d=upsert(_cleanupBoundSubs,e);for(const n of s){const r=compileTrMods(n,i);if(n.isSi){const t=addTrSub(e,n,r,(e,t,n,r,l)=>applyClVal(o,a,u?u(e,t,n,r,l):r),d);0!=n.isImmediate&&invokeBoundSub(t)}else{const l=n.isEv?getTrPrTa(e,t,n,r,E_TRIG_EL,E_TRIG_EV,!1):null;if(n.isEv&&!l)return;if(null==addNonSiTrSub(e,n,r,(t,r,l,s,i)=>applyClVal(o,a,!u||u(t,e,n,s,i)),d,!1,l))return}}},dmSh=(e,t,n)=>{const r=parseCached(t),o=r[":"],l=r["@"],s=r["^"];if(!l.length)return logErr("Error: dmSh requires at least one trigger in:",t);const i=getTaFromTars(e,t,o);if(!i)return logErr("Error: dmSh target element not found in:",t);const a=i.style&&i.style.display||"",u=getComputedDisplay(i),d=a||("none"!==u&&u?u:"block"),c=n?compileFn(n,t):null;if(n&&!c)return;const p=upsert(_cleanupBoundSubs,e);for(const n of l){const r=compileTrMods(n,s);if(n.isSi){const t=addTrSub(e,n,r,(e,t,n,r,o)=>applyDisplayValue(i,a,d,c?c(e,t,n,r,o):r),p);0!=n.isImmediate&&invokeBoundSub(t)}else{const o=n.isEv?getTrPrTa(e,t,n,r,E_TRIG_EL,E_TRIG_EV,!1):null;if(n.isEv&&!o)return;if(null==addNonSiTrSub(e,n,r,(t,r,o,l,s)=>applyDisplayValue(i,a,d,!c||c(t,e,n,l,s)),p,!1,o))return}}},dataM={},wireNode=(e,t,n)=>{if(0!==t.indexOf(DM_KEY)||noScan(e))return;const r=t.slice(7),o=indexFirst(r,ALL,0),l=o>=0?r.slice(0,o):r,s=dataM[l];s&&s(e,t,n)},noOp=()=>{};let observeCleanupRoot=noOp;const dmScan=(e=document.body)=>{const t=[e],n=[];observeCleanupRoot(e);for(let e=0;e0===e.indexOf(DM_KEY)?e:DM_KEY+t+e,bindAddedSubs=(e,t)=>{if(!e||1!==e.nodeType)return logErr("dm element expected:",e),noOp;const n=upsert(_cleanupBoundSubs,e),r=n.length;if(t(e,n),r>=n.length)return noOp;const o=n.slice(r);let l=1;return()=>{if(!l)return;l=0;for(let e=0;e=0;--e)o.includes(t[e])&&t.splice(e,1)}},getTaFromTars=(e,t,n)=>{const r=findFirstKind(n,EP);return r&&r.root?getElById(r.root,t):e},dmSet=(e,t,n="dmSet")=>{if(isPlainObj(e)){for(const t in e)hasOwn(e,t)&&dmSet(t,e[t],n);return e}if(e?.kind){if(e.kind!==SI)return logErr("dmSet signal target expected:",e,n),null}else{if("string"!=typeof e||!e)return logErr("dmSet signal target expected:",e,n),null;if(e=parseCached(getApiDKey(e,":"===e[0]?"si":"si:"))[":"][0],e?.kind!==SI)return logErr("dmSet signal target expected:",e,n),null}return setSiAndNotifySubsNDeep(n,e,t),t},dmSub=(e,t,n,r="string"==typeof e,o=(r?document.body:e),l=getApiDKey(r?e:t,"ex@"),s=(r?t:n))=>"function"!=typeof s?(logErr("dmSub function expected:",l),noOp):bindAddedSubs(o,(e,t)=>{const n=parseCached(l),r=n["@"],o=n["^"];if(!r.length||n[":"].length||n["+"].length)return logErr("dmSub triggers/mods only:",l);let i=!1;for(const n of r){const r=compileTrMods(n,o),a=(t,n,r,o,l)=>s(o,l,r,t,e);if(n.isSi){const o=addTrSub(e,n,r,a,t);0!=n.isImmediate&&invokeBoundSub(o)}else{const o=n.isEv?getTrPrTa(e,l,n,r,E_TRIG_EL,E_TRIG_EV,!1):null;if(n.isEv&&!o)return;if(null==(i=addNonSiTrSub(e,n,r,a,t,i,o)))return}}});globalThis.dm=DM,globalThis.dmJsos=dmJsos,globalThis.wireNode=wireNode,globalThis.dmScan=dmScan,globalThis.dmSet=dmSet,globalThis.dmSub=dmSub,globalThis.dmSel=dmSel,globalThis.dmSelAll=dmSelAll;const dmIt=(e,t)=>{const n=parseCached(t),r=n["@"],o=n["+"],l=n["^"];if(!r.length)return logErr("Error: dmIt requires a signal trigger in:",t);const s=r[0];if(!s.isSi)return logErr("Error: dmIt trigger must be a signal in:",t);const i=compileTrMods(s,l);let a=null;if(o.length&&o[0].isEv&&o[0].root&&(a=getElById(o[0].root,t)),a||(a=e.querySelector("template")),a&&a.parentNode===e&&a.parentNode.removeChild(a),!a)return logErr("Error: dmIt template not found for:",t);const u=a.content&&a.content.firstElementChild;if(!u)return logErr("Error: dmIt template root not found for:",t);let d=IT_STATES.get(e);d||IT_STATES.set(e,d={nodes:[],count:0});const c=buildItRefBase(s.root,s.path),p=buildItExprBase(s.root,s.path);addTrSub(e,s,i,()=>renderItState(e,s,d,u,c,p),upsert(_cleanupBoundSubs,e)),(s.isImmediate??1)&&renderItState(e,s,d,u,c,p)},dmAct=(e,t,n)=>{const r=t.slice(7),o=indexFirst(r,ALL,0),l=ACT_METHODS[o>=0?r.slice(0,o):r];if(!l)return logErr("Error: dmAct: unrecognised method prefix in:",t);const s=parseCached(t),i=s[":"],a=s["@"],u=s["+"],d=s["^"],c=n?compileFn(n,t):null;if(n&&!c)return;const p=findFirstKind(i,SI);let f=null,m=!1,g=!1,h=!1,S=!1,E=!1,_=!1,T=!1,b=!1,A=!1,M=!1,y=null,P=null,v=!1,I=!1,N=!1,C="replace",O=null,D=null;const R=[],L=[],w=[];for(const e of d){const t=e.root;"json"===t?m=!0:"text"===t?g=!0:"html"===t?h=!0:"form"===t?S=!0:"sse"===t?_=E=!0:"noCache"===t?_=!0:"brotli"===t||"br"===t?T=!0:"gzip"===t?b=!0:"deflate"===t?A=!0:"compress"===t?M=!0:"hs"!==t||y?"hsNoKebab"===t?v=!0:"auth"!==t||P?"replace"===t||"merge"===t||"append"===t||"prepend"===t||"before"===t||"after"===t||"inner"===t||"remove"===t?(C=t,"merge"!==t&&(O=e)):"stat"!==t||f?"retry"!==t||D?"url"===t?R.push(e):"body"===t?L.push(e):t===M_HDR?w.push(e):"syncAll"===t?I=N=!0:I||"sendAll"!==t?N||"patchAll"!==t||(N=!0):I=!0:D=e:f=e:P=e:y=e}p&&p.mods&&(C=getWriteMode(p.mods));const x=mkActStats(f),V=y?.path,k=P?.path,H=D?+(resolveMPathVal(D.path)??1e3)||1e3:0;let B="";T&&(B="br"),b&&(B+=(B?", ":"")+"gzip"),A&&(B+=(B?", ":"")+"deflate"),M&&(B+=(B?", ":"")+"compress");const F=buildActBaseHs(m,g,h,S,E,_,B),j="GET"===l||"DELETE"===l;let W=null;for(const e of u){const n=e.path;e.key=(n?n.at(-1):e.root)||"value",e.isEv&&e.root&&(e.taEl=getElById(e.root,t));for(let t=0;tx&&setSiAndNotifySubsNDeep(t,x[e],n),U=u.length>0,J=G.length>0,z=async()=>{const n=c?c(DM,e,null,null,null):"";if(!n)return logErr("Error: dmAct: URL is empty in:",t);K("busy",!0),K("complete",!1),K("err",null),K("code",null);try{const r=noProto(),o=noProto(),s=j?r:o;if(I)for(const[e,t]of _dm.entries())o[e]=t;if(U)for(const t of u){const n=t.isEv?getElPrVal(t.taEl||e,t.path):getSiValOrIt(t);if(t.spread){if(n&&"object"==typeof n)for(const e in n)hasOwn(n,e)?s[e]=n[e]:s.value=n}else s[t.key]=n}if(J)for(const[e,t,n,l]of G)(e?o:r)[t]=l?getSiValOrIt(l):_dm.get(n);let a=n,d=a.includes("?");for(const e in r)a+=(d?"&":"?")+encodeURIComponent(e)+"="+encodeURIComponent(""+(r[e]??"")),d=!0;let c=ACT_HS_EMPTY,f=1;if(V){const e=resolveMPathVal(V);if(isPlainObj(e)){c=noProto(),f=0;for(const t in e)hasOwn(e,t)&&(c[v?t:camelToKebab(t)]=""+e[t])}}if(F!==ACT_HS_EMPTY)if(c===ACT_HS_EMPTY)c=F;else for(const e in F)hasOwn(F,e)&&(c[e]=F[e]);if(null!=k){const e=resolveMPathVal(k);null!=e&&(f&&(c=cloneOwnProps(c),f=0),c.authorization=""+e)}for(const[e,t,n]of Y){f&&(c=cloneOwnProps(c),f=0);const r=n?getSiValOrIt(n):_dm.get(t);c[e]=null!=r?""+r:""}let g=0,E=null,_=null;for(const e in o)hasOwn(o,e)&&(g||(E=e),g++);if(g){const e=1===g?o[E]:o;if(S&&(isPlainObj(e)||Array.isArray(e))){const t=new URLSearchParams;if(Array.isArray(e))for(let n=0;nT.abort():null,K("abort",W);const b={method:l,headers:c};null!=_&&(b.body=_),T&&(b.signal=T.signal);const A=await window.fetch(a,b),M=A.headers?.get("content-type")||"",y=M.includes("text/event-stream");let P;if(y)A.body&&"function"==typeof A.body.getReader?P=await consumeSseStream(A.body,t,x):(K("open",!0),P=applySse(await A.text(),t),K("open",!1),K("close",!0));else if(h&&M.includes("text/html")){P=await A.text();const t=O?.root||"outer",n=O&&O.path,r=n?"":findFirstKind(i,EP)?.root??"",o=n?resolveHtmlSelector(n):"before"===t||"after"===t?e.id?"#"+e.id:"":"append"!==t&&"prepend"!==t||!r?"":"#"+r;applyPatchEls({[SSE_ELS]:P,selector:o,mode:t})}else P=isJsonContentType(M)?await A.json():await A.text(),applyActPayload(t,p,P,C),N&&patchMatchingSis(t,P,C);K("busy",!1),K("complete",!0),K("err",null),K("code",Number.isFinite(A.status)?A.status:null),K("abort",null),W=null,!(H>0&&y)||T&&T.signal.aborted||setTimeout(z,H)}catch(e){W=null;const t=e&&"AbortError"===e.name;K("abort",null),K("open",!1),K("busy",!1),K("complete",!0),t||(K("err",e&&e.message?e.message:""+e),K("code",Number.isFinite(e&&e.status)?e.status:null),logErr("dmAct fail:",e),H>0&&setTimeout(z,H))}};if(!a.length)return void z();const $=upsert(_cleanupBoundSubs,e);let q=!1;for(const n of a){if(!n.isSi&&!n.isEv&&!n.isSp)return logErr("dmAct bad trigger:",n.kind,t);if(n.isSp){if(!n.sp?.act)return logErr("Error: dmAct unsupported SP trigger",n.root,"in",t);q||(q=!0,z());continue}const r=compileTrMods(n,d);if(n.isSi){addTrSub(e,n,r,z,$),!q&&n.isImmediate&&(q=!0,z());continue}const o=n.root?getElById(n.root,t):e;if(!o)return logErr("Error: dmAct element not found in trigger:",n,"in:",t);const l=n.path?.[0]??getDefaultEv(o);if(!l)return logErr("Error: dmAct event not found in trigger:",n,"in:",t);const s=addTrSub(e,n,r,z,$,o,l,null,null,o);!q&&n.isImmediate&&(q=!0,invokeSub(s,null,getElPrVal(o,null),e,n))}},dmActApi=(e,t,n)=>bindAddedSubs(e,e=>dmAct(e,getApiDKey(t,""),n)),WC_TMPLS=new WeakSet,WC_INITS=new WeakSet,defWc=(e,t)=>{if(!t||t.indexOf("-")<0)return logErr("dmWc template expects custom-element name value:",t);if(customElements.get(t)||WC_TMPLS.has(e))return;WC_TMPLS.add(e);const n=(e.getAttribute("data-m-wc-props")||"").match(/[^,\s]+/g)||NIL,r=class extends HTMLElement{connectedCallback(){if(!WC_INITS.has(this)){WC_INITS.add(this),!this.firstElementChild&&e.content&&(this.appendChild(e.content.cloneNode(!0)),wireItClone(this));for(const e of n){let t=this["$"+e];hasOwn(this,e)&&(t=this[e],delete this[e]),void 0!==t&&(this[e]=t)}}}};for(const e of n)Object.defineProperty(r.prototype,e,{get(){return this["$"+e]},set(t){this["$"+e]=t,this.dispatchEvent(new CustomEvent(e,{detail:t})),this.firstElementChild&&this.firstElementChild.dispatchEvent(new CustomEvent(e,{detail:t}))}});customElements.define(t,r)},dmWc=(e,t,n)=>"TEMPLATE"===e.tagName?defWc(e,n&&n.trim()):logErr("Error: dmWc is template-only; use data-m-ex for WC host props in:",t),dmNo=()=>{};globalThis.dmAct=dmActApi,dataM.si=dmSi,dataM.ex=dmEx,dataM.it=dmIt,dataM.wc=dmWc,dataM.cl=dmCl,dataM.sh=dmSh,dataM.dbg=dmDbg,dataM.no=dmNo,dataM.get=dataM.post=dataM.put=dataM.patch=dataM.delete=dmAct;const sameKind=(e,t)=>e.nodeType===t.nodeType&&(1!==e.nodeType||(e.id&&t.id?e.id===t.id:e.tagName===t.tagName)),sameSlot=(e,t)=>e.nodeType===t.nodeType&&(1!==e.nodeType||(e.id||t.id?e.id===t.id:e.tagName===t.tagName)),_HTML_PARSE_TEMPLATE=document.createElement("template"),TEXT_NODE=3,_siSelCache=new Map,SI_BAD_SYMS=" \t\r\n#>+~:.[],|",getSimpleIdSelector=e=>{if(!e||"#"!==e[0])return null;const t=_siSelCache.get(e);if(void 0!==t)return t;for(let t=1;t1?e.slice(1):null;return _siSelCache.set(e,n),n},getPatchTars=(e,t=e&&getSimpleIdSelector(e),n=t&&document.getElementById(t))=>e?t?n?[n]:NIL:document.querySelectorAll(e):NIL,sameAttrs=(e,t)=>{const n=e.attributes,r=t.attributes,o=r.length;if(n.length!==o)return!1;for(let e=0;e{const n=t.attributes,r=e.attributes,o=n.length,l=r.length;if(l===o){let e=!0,t=!1;for(let l=0;l=0;n--)t.hasAttribute(r[n].name)||e.removeAttribute(r[n].name)}else for(let t=l-1;t>=0;t--)e.removeAttribute(r[t].name)},morphChildren=(e,t)=>{let n=e.firstChild,r=t.firstChild;for(;n&&r&&sameSlot(n,r);){const e=n.nextSibling;morph(n,r),n=e,r=r.nextSibling}if(!n){for(;r;r=r.nextSibling)e.appendChild(r.cloneNode(!0));return}if(!r){for(;n;){const t=n.nextSibling;e.removeChild(n),n=t}return}let o=null,l=0;for(let e=n;e;e=e.nextSibling)1===e.nodeType&&e.id&&((o??=noProto())[e.id]=e,l=1);for(;r;r=r.nextSibling){let t=null,s=1===r.nodeType?r.id:"";if(s&&o&&(t=o[s]))delete o[s];else{for(;l&&n&&1===n.nodeType&&n.id&&o[n.id];)n=n.nextSibling;n&&sameKind(n,r)&&(t=n)}t?(t!==n?e.insertBefore(t,n||null):n=n.nextSibling,morph(t,r)):e.insertBefore(r.cloneNode(!0),n||null)}for(;n;){const t=n.nextSibling;e.removeChild(n),n=t}if(o)for(const t in o){const n=o[t];n.parentNode===e&&e.removeChild(n)}};let _morphActiveEl=null;const _endMorph=e=>e&&(_morphActiveEl=null),morph=(e,t)=>{const n=null===_morphActiveEl;if(n&&(_morphActiveEl=document.activeElement),3===e.nodeType&&3===t.nodeType)return e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue),_endMorph(n);if(1!==e.nodeType||1!==t.nodeType||noMorph(e)||noMorph(t))return _endMorph(n);if(e.tagName!==t.tagName)return e.parentNode&&e.parentNode.replaceChild(t.cloneNode(!0),e),_endMorph(n);const r=e.firstChild,o=t.firstChild,l=r&&o&&!r.nextSibling&&!o.nextSibling&&3===r.nodeType&&3===o.nodeType,s=sameAttrs(e,t);if(s&&(!r&&!o||l&&r.nodeValue===o.nodeValue))return _endMorph(n);if(l&&s&&e!==_morphActiveEl)return r.nodeValue=o.nodeValue,_endMorph(n);const i=e===_morphActiveEl;let a=-1,u=-1,d="none",c=null,p=-1;if(i){const t=e.tagName;if("INPUT"===t||"TEXTAREA"===t)try{a=e.selectionStart,u=e.selectionEnd,d=e.selectionDirection||"none"}catch(e){}else"SELECT"===t&&(c=e.value,p=e.selectedIndex)}const f=e.scrollTop,m=e.scrollLeft;if(s||updateAttrs(e,t),l?r.nodeValue!==o.nodeValue&&(r.nodeValue=o.nodeValue):(r||o)&&morphChildren(e,t),(f||m)&&(e.scrollTop!==f&&(e.scrollTop=f),e.scrollLeft!==m&&(e.scrollLeft=m)),i&&a>=0)try{e.setSelectionRange(a,u,d)}catch(e){}else i&&null!==c&&(e.value=c,e.value!==c&&p>=0&&p{if(!e)return NIL;const n=(t||"html").toLowerCase();if("html"===n){_HTML_PARSE_TEMPLATE.innerHTML=e;const t=_HTML_PARSE_TEMPLATE.content.firstElementChild;if(!t)return NIL;if(!t.nextElementSibling)return[t];const n=[t];for(let e=t.nextElementSibling;e;e=e.nextElementSibling)n.push(e);return n}const r="svg"===n?`${e}`:`${e}`,o=(new DOMParser).parseFromString(r,"svg"===n?"image/svg+xml":"application/xml").documentElement;return o?Array.from(o.children):[]},insertFragRelative=(e,t,n)=>{if(!e||!t||!t.length)return;const r=document.createDocumentFragment(),o="prepend"===n?e.firstChild||null:"before"===n?e:e.nextSibling;for(const e of t)r.appendChild(e.cloneNode(!0));"append"===n?e.appendChild(r):("prepend"===n?e:e.parentNode)?.insertBefore(r,o)},applyPatchPair=(e,t,n,r=!1)=>{if(e&&t)if("replace"===n)e.replaceWith(r?t:t.cloneNode(!0));else if("inner"===n){const n=e.cloneNode(!1);for(let e=t.firstChild;e;e=e.nextSibling)n.appendChild(e.cloneNode(!0));morphChildren(e,n)}else morph(e,t)},applyPatchEls=e=>{const t=(e.mode||"outer").toLowerCase(),n=e.selector?""+e.selector:"",r=e.namespace?""+e.namespace:"html",o=e[SSE_ELS]||"";if("replace"===t&&"html"===r&&o){const e=n&&getPatchTars(n),t=!n&&/^\s*<[^>]*\sid\s*=\s*(?:"([^"]+)"|'([^']+)')/i.exec(o),r=n?1===e.length&&e[0]:document.getElementById(t&&(t[1]||t[2]||""));if(r)return void(r.outerHTML=""+o)}const l=parseSseEls(o,r);if("remove"!==t)if("append"!==t&&"prepend"!==t&&"before"!==t&&"after"!==t){if(n){if(!l.length)return;const e=getPatchTars(n);if(1===e.length&&1===l.length)return void applyPatchPair(e[0],l[0],t,!0);const r=l[0];for(let n=0;n{if(null===t)return JSON_MERGE_DELETE;if(!isPlainObj(t))return t;const n=isPlainObj(e)?cloneOwnProps(e):noProto();for(const e in t)if(hasOwn(t,e)){const r=applyJsonMergePatch(n[e],t[e]);r===JSON_MERGE_DELETE?delete n[e]:n[e]=r}return n},applyPatchSigs=(e,t)=>{const n=t[SSE_SIS];if(!n)return;let r=null;try{r=JSON.parse(n)}catch(t){return logErr("Error: patch sigs in",e,"expect JSON but found invalid format")}if(!isPlainObj(r))return;const o="true"===(t.onlyIfMissing||"").toLowerCase();for(const t in r)if(hasOwn(r,t)){if(o&&_dm.has(t))continue;const n=applyJsonMergePatch(_dm.get(t),r[t]),l=mkIt(SI,null,t,null);n!==JSON_MERGE_DELETE?setSiAndNotifySubsNDeep(e,l,n):_dm.has(t)&&(setSiAndNotifySubsNDeep(e,l,void 0),_dm.delete(t),updateDebug())}},flushSse=(e,t,n)=>{const r=t[1],o=t[0];t[2]&&r&&("dm-elements"===o?(applyPatchEls(r),e.push({event:o,args:r})):"dm-signals"===o&&(applyPatchSigs(n,r),e.push({event:o,args:r}))),t[0]="message",t[1]=null,t[2]=!1},consumeSseLine=(e,t,n,r)=>{const o="\r"===e[e.length-1]?e.slice(0,-1):e;if(!o)return flushSse(n,t,r);if(":"===o[0])return;const l=o.indexOf(":"),s=l<0?o:o.slice(0,l);let i=l<0?"":o.slice(l+1);if(" "===i[0]&&(i=i.slice(1)),"event"===s)t[0]=i||"message";else if("data"===s){const e=i.indexOf(" ");if(e<0)return;const n=i.slice(0,e),r=i.slice(e+1),o=t[1]||(t[1]=noProto());t[2]=!0,o[n]?o[n]+="\n"+r:o[n]=r}},applySse=(e,t="dmax-sse")=>{if(!e)return NIL;const n=[],r=""+e,o=["message",null,!1];let l,s=0;for(;(l=r.indexOf("\n",s))>=0;)consumeSseLine(r.slice(s,l),o,n,t),s=l+1;return s{if(!e||"function"!=typeof e.getReader)return NIL;const r=(e,r)=>n&&setSiAndNotifySubsNDeep(t,n[e],r),o=[],l=e.getReader(),s=new TextDecoder,i=["message",null,!1];let a="",u=!1;try{for(;;){const{done:e,value:n}=await l.read();if(e)break;let d;for(u||(u=!0,r("open",!0),r("close",!1)),a+=s.decode(n,{stream:!0});(d=a.indexOf("\n"))>=0;)consumeSseLine(a.slice(0,d),i,o,t),a=a.slice(d+1)}const e=s.decode();e&&(a+=e),a&&consumeSseLine(a,i,o,t),flushSse(o,i,t)}catch(e){return r("open",!1),r("err",e.message||""+e),logErr("SSE stream error:",e),o}return r("open",!1),r("close",!0),o};var applyDmaxPatchElements=applyPatchEls,applyDmaxPatchSigs=applyPatchSigs,applyDmaxSse=applySse,consumeDmaxSseStream=consumeSseStream;const cleanupBoundSubsDeep=e=>{if(!e||1!==e.nodeType&&11!==e.nodeType)return;const t=[e];for(;t.length;){const e=t.pop(),n=_cleanupBoundSubs.get(e);if(n){for(const e of n)removeSubOrClearId(e);_cleanupBoundSubs.delete(e)}const r=e.shadowRoot;r&&t.push(r);const o=e.children||NIL;for(let e=0;e{for(const t of e)for(const e of t.removedNodes)cleanupBoundSubsDeep(e)}),observedCleanupRoots=new WeakSet;observeCleanupRoot=e=>{!e||observedCleanupRoots.has(e)||1!==e.nodeType&&11!==e.nodeType||(observedCleanupRoots.add(e),observer.observe(1===e.nodeType?e:e===document?document.body:e,{childList:!0,subtree:!0}))},observeCleanupRoot(document.body); diff --git a/dist/dmax.min.js.br b/dist/dmax.min.js.br index 60237ba5af37a44bed619ca168ceeb5c682e8548..3a3ed257aa136ccf220f3edf06838963196be49f 100644 GIT binary patch literal 15771 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 ZtdTrSOqIHq=?= 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 Jr>3({y%L);S(^X= diff --git a/dist/dmax.min.js.gz b/dist/dmax.min.js.gz index 96dd36d9c24c3c5ed02196caf5d3c185918dcd08..20c47fda0da99489ac7d33555a9d967a32442344 100644 GIT binary patch literal 17672 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 HV!;3arnNfV literal 16406 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 m=~prhhzEimvth%O68ZWPMv4zU8T_yR2M>d+ Date: Mon, 25 May 2026 06:10:38 +0000 Subject: [PATCH 8/9] Changes before error encountered Agent-Logs-Url: https://github.com/dadhi/dmax/sessions/b1b54223-0210-4c22-abfd-2ae513f0c63b Co-authored-by: dadhi <39516+dadhi@users.noreply.github.com> --- dist/dmax.min.js | 2 +- dist/dmax.min.js.br | Bin 15771 -> 13789 bytes dist/dmax.min.js.gz | Bin 17672 -> 15380 bytes dmax.js | 152 +++++++++++++----------------------- tests/fuzz.deterministic.js | 8 +- tools/minify-dmax.js | 20 ++++- 6 files changed, 78 insertions(+), 104 deletions(-) diff --git a/dist/dmax.min.js b/dist/dmax.min.js index 63ba546..f58ebde 100644 --- a/dist/dmax.min.js +++ b/dist/dmax.min.js @@ -1 +1 @@ -const indexFirst=(e,t,n=0)=>{let r,o=e.length;for(let l of t)(r=e.indexOf(l,n))>=0&&r{if(!e)return e;if(e.indexOf("-")<0)return CAMEL_NAMES.set(e,e),e;let t=CAMEL_NAMES.get(e);return t||(t=e.replace(/-+([a-zA-Z]?)/g,(e,t)=>t?t.toUpperCase():""),CAMEL_NAMES.set(e,t),KEBAB_NAMES.set(t,e),t)},camelToKebab=e=>{if(!e)return e;let t=KEBAB_NAMES.get(e);return t||(t=e.replace(/[A-Z]/g,e=>"-"+e.toLowerCase()),KEBAB_NAMES.set(e,t),CAMEL_NAMES.set(t,e),t)},MOD="^",TARG=":",TRIG="@",ADD="+",ALL=["^",":","@","+"],MODS=["^"],DOT=".",ID="#",NOT="!",BRACKET_OPEN="[",BRACKET_CLOSE="]",NAME_DELIMS=[".","["],SEL_LEADS="#.[*:",SSE_COMMENT=":",SI="s",EP=".",SP="_",M_WITH_SHAPE="with_shape",M_SHAPE_ONLY="shape_only",M_IMMEDIATE="immediate",M_NOT_IMMEDIATE="notImmediate",M_ONCE="once",M_ALWAYS="always",M_DEBOUNCE="debounce",M_THROTTLE="throttle",M_RAF="raf",M_PREVENT="prevent",M_AND="and",M_EQ="eq",M_NE="ne",M_LT="lt",M_GT="gt",M_LE="le",M_GE="ge",M_PR="pr",M_ATTRS="attrs",M_SEL="sel",M_SEL_ALL="selAll",M_SI_V="si",M_EV_V="ev",M_RW="rw",M_NUM="num",M_JSOS="jsos",M_JSON="json",M_TEXT="text",M_HTML="html",M_FORM="form",M_SSE="sse",M_BUSY="busy",M_COMPLETE="complete",M_ERR="err",M_CODE="code",M_STAT="stat",M_NO_CACHE="noCache",M_HS="hs",M_HS_NO_KEBAB="hsNoKebab",M_AUTH="auth",M_BROTLI="brotli",M_BR="br",M_GZIP="gzip",M_DEFLATE="deflate",M_COMPRESS="compress",M_REPLACE="replace",M_MERGE="merge",M_APPEND="append",M_PREPEND="prepend",M_INC="inc",M_DEC="dec",M_BEFORE="before",M_AFTER="after",M_INNER="inner",M_REMOVE="remove",M_OUTER="outer",M_SSE_OPEN="open",M_SSE_CLOSE="close",M_RETRY="retry",M_ABORT="abort",M_URL="url",M_BODY="body",M_HDR="header",M_SPREAD="spread",M_SEND_ALL="sendAll",M_PATCH_ALL="patchAll",M_SYNC_ALL="syncAll",M_DEBOUNCE_MS=500,M_THROTTLE_MS=500,M_RETRY_MS=1e3,H_ACCEPT="accept",H_ACCEPT_ENCODING="accept-encoding",H_AUTHORIZATION="authorization",H_CACHE_CONTROL="cache-control",H_CONTENT_TYPE="content-type",H_PRAGMA="pragma",noProto=()=>Object.create(null),ACT_HS_EMPTY=Object.freeze(noProto()),ACT_HS_JSON=Object.freeze({[H_CONTENT_TYPE]:"application/json",[H_ACCEPT]:"application/json"}),ACT_HS_HTML=Object.freeze({[H_ACCEPT]:"text/html"}),ACT_HS_FORM=Object.freeze({[H_CONTENT_TYPE]:"application/x-www-form-urlencoded"}),ACT_HS_TEXT=Object.freeze({[H_CONTENT_TYPE]:"text/plain;charset=UTF-8"}),ACT_HS_NO_CACHE=Object.freeze({[H_CACHE_CONTROL]:"no-cache",[H_PRAGMA]:"no-cache"}),ACT_HS_SSE=Object.freeze({[H_ACCEPT]:"text/event-stream",[H_CACHE_CONTROL]:"no-cache",[H_PRAGMA]:"no-cache"}),SP_WIN="window",SP_DOC="document",SP_HISTORY="history",SP_FORM="form",SP_INTERVAL="interval",SP_TIMEOUT="timeout",SP_VIEWED="viewed",SP_INIT="init",SPS=[SP_WIN,SP_DOC,"history","form","interval","timeout","viewed","init"],SP_WIN_EV="resize",SP_DOC_EV="visibilitychange",SP_INTERVAL_MS=500,SP_TIMEOUT_MS=500,SP_TA_WIN=1,SP_TA_DOC=2,SP_TA_FORM=3,SP_DEFS=Object.assign(noProto(),{[SP_WIN]:{ta:1,ev:"resize"},[SP_DOC]:{ta:2,ev:SP_DOC_EV},[SP_HISTORY]:{ta:"history"},[SP_FORM]:{ta:3,ev:"submit",immediate:1},[SP_INTERVAL]:{ms:500,repeat:1},[SP_TIMEOUT]:{ms:500},[SP_VIEWED]:{io:1},[SP_INIT]:{init:1,act:1}}),ACT_METHODS=Object.freeze({get:"GET",post:"POST",put:"PUT",patch:"PATCH",delete:"DELETE"}),DM_KEY="data-m-",DM_NO="data-m-no",DM_NO_SCAN=DM_NO+"^scan",DM_NO_MORPH=DM_NO+"^morph",E_RW_REQ="dmEx ^rw requires an element/property trigger in:",E_RW_EL="dmEx ^rw source element is not found in trigger:",E_RW_EV="dmEx ^rw event is not found in trigger:",E_TRIG_EL="Element is not found in trigger:",E_TRIG_EV="Event is not found in trigger:",E_FORM_EL="Form element is not found for trigger:",IT_STATES=new WeakMap,IT_ATTRS=new WeakMap,isSp=e=>{if(e.startsWith(SP))for(const t of SPS)if(e.startsWith(t,1))return!0;return!1},mkIt=(e,t,n,r,o=NIL)=>({kind:e,not:t,root:n,path:r,mods:o,sp:e===SP&&SP_DEFS[n]||null,isSi:e===SI,isEv:e===EP,isSp:e===SP,isImmediate:null}),mkMod=(e,t,n)=>({kind:"^",not:e,root:t,path:n,isImmediate:"immediate"===t||"notImmediate"!==t&&null}),DEFAULT_PR_TA=Object.freeze(mkIt(EP,null,"",null)),RE_DIGITS=/^\d+$/,parseRef=(e,t,n=0)=>{if(!t)return null;let r=n,o=t.length;for(;t.startsWith("!",r);)++r;let l=0==r?null:r%2!=0,s=indexFirst(t,NAME_DELIMS,r),i=s<0?0==r?t:t.slice(r):t.slice(r,s),a=EP;if(i&&i.length>0){const n=i[0]===ID;if(n||isSp(i)){if(a=n?EP:SP,i=i.slice(1),!i)return logErr("empty",a+":",t,e),null}else a=SI,i=kebabToCamel(i)}if(s<0&&!i&&null!==l)return logErr("bare","!:",t),null;if(s<0||"."===t[s]&&s+1==o)return mkIt(a,l,i,null);r=s;let u=[];for(;r>=0&&r{if(!t)return null;let n=0,r=t.length;for(;t.startsWith("!",n);)++n;let o=0==n?null:n%2!=0;const l=indexFirst(t,NAME_DELIMS,n);let s=l<0?0==n?t:t.slice(n):t.slice(n,l);if(s&&(s=kebabToCamel(s)),!s)return logErr("empty mod:",t,e),null;if("attrs"===s){if(l<0||l+1>=r)return mkMod(o,s,{r:"",v:""});const n=t.slice(l+1);if(n[0]!==ID)return mkMod(o,s,{r:"",v:n});const i=n.indexOf(".",1),a=n.slice(1,i<0?n.length:i);return a?mkMod(o,s,{r:a,v:i<0?"":n.slice(i+1)}):(logErr("empty attrs mod:",t,e),null)}return mkMod(o,s,"sel"===s||"selAll"===s?l<0||l+1>=r?"":t.slice(l+1):l<0||l+1>=r?null:t.indexOf(".",n=l+1)<0?kebabToCamel(t.slice(n)):parseRef(e,t,n))},parse=(e,t)=>{t??=5;const n=e.length,r=noProto();for(r["^"]=r[":"]=r["@"]=r["+"]=NIL;t>=0&&t{let t=_parseCache.get(e);return t||_parseCache.set(e,t=parse(e)[0]),t},RETURN_THEN=[" ","(","{",";","[",'"',"'","\n","\r","\t"],FN_ARGS=["dm","el","trig","val","detail"],_compiledFnCache=new Map,compileFn=(e,t,n=FN_ARGS)=>{const r=n===FN_ARGS?e+"\0"+t:null;if(null!==r&&_compiledFnCache.has(r))return _compiledFnCache.get(r);let o=""+e;const l=o.indexOf("return");let s,i=l>=0&&(l+6>=o.length||indexFirst(o,RETURN_THEN,l+6)==l+6)?o:`return(${o})`;i=`try{ ${i} }catch(e){ console.error('[dmax]','eval ${t}:',e.message,${o}); return }`;try{s=Function(...n,i)}catch(e){return void logErr(`compile ${t}:`,e.message,o)}return null!==r&&_compiledFnCache.set(r,s),s},_dm=new Map,DM=new Proxy({},{get:(e,t)=>_dm.get(t),set:(e,t,n)=>(_dm.set(t,n),!0),has:(e,t)=>_dm.has(t),ownKeys:()=>Array.from(_dm.keys()),getOwnPropertyDescriptor:(e,t)=>_dm.has(t)?{value:_dm.get(t),enumerable:!0,configurable:!0}:void 0}),dmSi=(e,t,n)=>{const r=parseCached(t),o=r[":"];(r["^"].length||r["@"].length||r["+"].length)&&warn("targets only:",t);let l=compileFn(n,t);if(!l)return;let s=n?l(DM,e,null):null;if(o.length)for(const e of o)e.kind==SI?(e.mods.length&&warn("mods ignored:",e.mods,t),_dm.set(e.root,s)):logErr("signal targets only:",e,t);else{if(!s||"object"!=typeof s)return logErr("object value expected:",t,n);for(const e in s)_dm.set(kebabToCamel(e),s[e])}},dmDbg=e=>{e&&(_debugEls.add(e),updateDebug())},getElById=(e,t)=>{const n=document.getElementById(e);return n||logErr(`no #${e}:`,t),n},getDefaultPr=e=>{const t=e.type,n=e.tagName;return"checkbox"===t||"radio"===t?"checked":"DETAILS"===n?"open":"INPUT"===n||"SELECT"===n||"TEXTAREA"===n||n&&n.indexOf("-")>=0&&"value"in e?"value":"textContent"},getDefaultEv=e=>{const t=e.tagName;return"FORM"===t?"submit":"DETAILS"===t?"toggle":"INPUT"===t||"SELECT"===t||"TEXTAREA"===t?"change":"click"},getElPrVal=(e,t)=>{if(!e)return null;const n=t&&t.length?t[0]:getDefaultPr(e);let r=e[n];return void 0===r&&e.getAttribute&&(r=e.getAttribute(camelToKebab(n))),t&&t.length>1?getPrValAndDepth(r,t,-1,1)[0]:r},isDefaultPrName=(e,t)=>t===getDefaultPr(e)||"value"===t||"checked"===t||"textContent"===t,mkEv=e=>{try{return new Event(e,{bubbles:!0})}catch(t){const n=document.createEvent("Event");return n.initEvent(e,!0,!0),n}},isNil=e=>null==e,getPrValAndDepth=(e,t,n=-1,r=0)=>{let o=e;if(isNil(o)||!t)return[o,0];let l=-1==n||n>t.length-r?t.length-r:n;for(let e=0;e{if(n>=32)return console.warn("[dmax] Warning: too deep to compare for signal value change, consider it changed, stopped at:",32),!0;const r=e,o=t;if(Array.isArray(r)){if(!Array.isArray(o)||r.length!=o.length)return!0;for(let e=0;e{if(!n.isEv&&!n.isSp)return null;let o=n.isSp?n.root===SP_WIN?window:n.root===SP_DOC?document:"history"===n.root?window.history:null:n.root?getElById(n.root,t):e;const l=n.path;let s=l?null:getDefaultPr(o);if(l&&l.length&&([o]=getPrValAndDepth(o,l,l.length-1),s=l.at(-1)),!o||!s)return logErr("Error setting non existing property for:",n,"in",t);try{if("function"==typeof o[s])return Array.isArray(r)?o[s](...r):o[s](r);if("style"===s&&isPlainObj(r)&&o[s])for(const e in r){const t=o[s],n=r[e],l="-"===e[0]?e:"--"+camelToKebab(e);e in t?valChangedDeep(t[e],n)&&(t[e]=n):t.getPropertyValue(l)!==""+n&&t.setProperty(l,n)}else if(o&&"function"==typeof o.setProperty&&!(s in o)){const e="-"===s[0]?s:"--"+camelToKebab(s);o.getPropertyValue(e)!==""+r&&o.setProperty(e,r)}else valChangedDeep(o[s],r)&&(o[s]=r)}catch(t){logErr("Error: Failed to set property:",t.message,">>>",n,"on",e)}return o[s]},getComputedDisplay=e=>"undefined"!=typeof window&&window.getComputedStyle?window.getComputedStyle(e).display:"",applyClVal=(e,t,n)=>{for(const r of e){const e=r.kb||(r.kb=camelToKebab(r.root));(r.not?!n:n)?t.classList.add(e):t.classList.remove(e)}},applyDisplayValue=(e,t,n,r)=>{const o=e.style.display;r?t||"none"===o||"none"===getComputedDisplay(e)?e.style.display=n:e.style.removeProperty("display"):"none"!==o&&(e.style.display="none")},diffShapeShallow=(e,t)=>{let n=e,r=t;if(n&&"object"==typeof n||(n=NIL),r&&"object"==typeof r||(r=NIL),Array.isArray(n)){if(Array.isArray(r)){const e=r.length,t=n.length;return e==t?null:e>t?{addedRange:[t,e-t]}:{removedRange:[e,t-e]}}let e=[];for(const t in r)hasOwn(r,t)&&e.push(t);return{added:e,removedRange:[0,n.length]}}if(Array.isArray(r)){let e=[];for(const t in n)hasOwn(n,t)&&e.push(t);return{removed:e,addedRange:[0,r.length]}}let o=[],l=[];for(const e in r)e in n||o.push(e);for(const e in n)e in r||l.push(e);return o.length?l.length?{added:o,removed:l}:{added:o}:l.length?{removed:l}:null},samePath=(e,t)=>{if(e.length!==t.length)return!1;for(let n=0;ncompileMods(e,e.mods.length?e.mods:t),modPath=e=>null==e?NIL:e.kind?e.root?e.path?.length?[e.root,...e.path]:[e.root]:e.path||NIL:Array.isArray(e)?e:[e],compileMods=(e,t)=>{const n=null!=e.sp?.ms;let r=0,o=0,l=0,s=null,i=NIL,a=0,u=0,d="",c=null;for(const e of t){const t=e.root;if("with_shape"===t)a=1;else if("shape_only"===t)a=2;else if("pr"===t){const t=e.path;u=1,d=t?.isEv&&t.root||"",i=t?.isEv?t.path||NIL:modPath(t)}else"attrs"===t?(u=4,d=e.path?.r||"",i=e.path?.v||""):"sel"===t?(u=5,i=e.path||""):"selAll"===t?(u=6,i=e.path||""):"si"===t?(u=2,i=modPath(e.path)):"ev"===t?(u=3,i=modPath(e.path)):"once"===t?r|=1:"always"===t?r|=2:"prevent"===t?r|=4:"num"===t?r|=8:"raf"===t?r|=32:"jsos"===t?c=e.path??2:"rw"===t?r|=16:n||"debounce"!==t?n||"throttle"!==t?t in PERMIT_MODS&&(s=s?s.push?(s.push(e),s):[s,e]:e):l=+(resolveMPathVal(e.path)??500)||500:o=+(resolveMPathVal(e.path)??500)||500}return{f:r,d:o,t:l,p:s,v:i,c:a,s:u,r:d,j:c}},getTrPrTa=(e,t,n,r,o,l,s=!0)=>{const i=n.root?getElById(n.root,t):e;if(!i)return logErr("Error:",o,n,"in:",t),null;let a=n.path?n.path[0]:null,u=null;a&&isDefaultPrName(i,a)&&(u=n.path,a=getDefaultEv(i));const d=1!==r.s&&4!==r.s||!r.r?i:getElById(r.r,t),c=1===r.s||3===r.s?r.v.length?r.v:u:4===r.s||5===r.s||6===r.s?r.v:u;return s&&1===r.s&&!r.r&&r.v.length&&(u=r.v),a=a??getDefaultEv(i),a?d?{taEl:i,readEl:d,ev:a,prPath:u,readPath:c,tar:mkIt(EP,null,n.root,u,NIL)}:logErr("Error:",o,n,"in:",t):(logErr("Error:",l,n,"in:",t),null)},addNonSiTrSub=(e,t,n,r,o,l,s=null)=>{const i=t.sp,a=!!i;if(!a&&!expected(s,"Expected non-SP trigger target in addNonSiTrSub:",t,"on:",e))return null;const u=addTrSub(e,t,n,r,o,a?null:s.taEl,a?t.path?.[0]||i?.ev||null:s.ev,a?null:s.prPath,a?null:s.readPath,a?null:s.readEl);return i?.init?(u&&!l&&invokeSub(u,{type:"init"},1===n.s||4===n.s||5===n.s||6===n.s?getReadVal(n.r?getElById(n.r):e,n,1===n.s?n.v.length?n.v:null:n.v):"init",e,t),!0):!u||l||!t.isImmediate||i&&!i.immediate?l:(invokeSub(u,null,a?null:getReadVal(s.readEl,n,s.readPath),e,t),!0)},PERMIT_MODS=Object.assign(noProto(),{[M_AND]:1,[M_EQ]:1,[M_NE]:1,[M_LT]:1,[M_GT]:1,[M_LE]:1,[M_GE]:1}),getSiVal=e=>{const t=_dm.get(e.root),n=e.path;return n?getPrValAndDepth(t,n)[0]:t},getSiValOrIt=e=>{if(!e.kind)return e;const t=getSiVal(e);return e.not?!t:t},resolveMPathVal=e=>{if(e&&e.kind)return getSiValOrIt(e);if("string"!=typeof e)return e;if(_dm.has(e))return _dm.get(e);const t=parseRef("mod",e);return t&&t.kind&&(!t.isSi||t.path||_dm.has(t.root))?getSiValOrIt(t):e},dmJsos=(e,t=2)=>"string"==typeof e?e:JSON.stringify(e,null,+(resolveMPathVal(t)??2)||0),resolveHtmlSelector=e=>{const t=resolveMPathVal(e);return"string"==typeof t&&t?"#.[*:".includes(t[0])?t:"#"+t:""},mkOrStatSi=(e,t)=>{if(!e)return null;const n=e.path;return"string"==typeof n?mkIt(SI,null,n||t,null):n?.isSi?n:mkIt(SI,null,t,null)},mkStatTar=(e,t,n)=>({root:e,path:t?t.concat(n):[n]}),STAT_KEYS_F=["busy","complete","open","close"],STAT_KEYS_N=["err","code","abort"],defStatSi=e=>{if(!e)return null;let t=_dm.get(e.root);t&&"object"==typeof t||_dm.set(e.root,t=noProto());let n=t;const r=e.path;if(r&&r.length)for(let e=0;e{const t=defStatSi(mkOrStatSi(e,"stat"));if(!t)return null;const{root:n,path:r}=t,o=noProto();for(const e of STAT_KEYS_F)o[e]=mkStatTar(n,r,e);for(const e of STAT_KEYS_N)o[e]=mkStatTar(n,r,e);return o},isJsonContentType=e=>{const t=(e||"").toLowerCase();if(t.indexOf("application/json")>=0)return!0;const n=t.indexOf("+json");if(n<0)return!1;const r=n+5;if(r>=t.length)return!0;const o=t[r];return";"===o||" "===o||"\t"===o},isPlainObj=e=>!!e&&"object"==typeof e&&!Array.isArray(e),hasOwn=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),cloneOwnProps=e=>{const t=noProto();for(const n in e)hasOwn(e,n)&&(t[n]=e[n]);return t},mergeActHs=(e,t)=>{if(!e||e===ACT_HS_EMPTY)return t||ACT_HS_EMPTY;if(!t||t===ACT_HS_EMPTY)return e;const n=cloneOwnProps(e);for(const e in t)hasOwn(t,e)&&(n[e]=t[e]);return Object.freeze(n)},buildActBaseHs=(e,t,n,r,o,l,s)=>{let i=e?ACT_HS_JSON:r?ACT_HS_FORM:t?ACT_HS_TEXT:ACT_HS_EMPTY;if(n&&(i=mergeActHs(i,ACT_HS_HTML)),i=o?mergeActHs(i,ACT_HS_SSE):l?mergeActHs(i,ACT_HS_NO_CACHE):i,!s)return i;const a=i===ACT_HS_EMPTY?noProto():cloneOwnProps(i);return a["accept-encoding"]=s,Object.freeze(a)},isDigitsOnly=e=>"string"==typeof e&&RE_DIGITS.test(e),buildItRefBase=(e,t)=>{let n=e;if(t)for(let e=0;e{let n="dm."+e;if(t)for(let e=0;ebuildItRefBase(e,t)+"."+n,buildItItemExpr=(e,t,n)=>buildItExprBase(e,t)+"["+n+"]",replaceItTokens=(e,t,n)=>{if("string"!=typeof e)return e;let r=e.indexOf("$");if(r<0)return e;const o=[];let l=0;for(;r>=0;){const s=e.startsWith("$it",r)?t:e.startsWith("$ix",r)?n:null;s?(o.push(e.slice(l,r),s),l=r+3,r=e.indexOf("$",l)):r=e.indexOf("$",r+1)}return o.length?o.join("")+e.slice(l):e},rewriteItBindings=(e,t,n,r)=>{const o=[e];for(;o.length;){const e=o.pop(),l=e.attributes;let s=null;for(let e=l.length-1;e>=0;--e){const o=l[e],i=replaceItTokens(o.name,t,r),a=replaceItTokens(o.value,n,r);if(i!==o.name||a!==o.value){if(!s){s=[];for(let t=l.length-1;t>e;--t)s.push([l[t].name,l[t].value])}i===o.name&&(o.value=a)}s&&s.push([i,a])}s&&IT_ATTRS.set(e,s);const i=e.children;for(let e=i.length-1;e>=0;--e)o.push(i[e])}},noScan=e=>e&&e.hasAttribute&&(e.hasAttribute(DM_NO)||e.hasAttribute(DM_NO_SCAN)),noMorph=e=>e.hasAttribute(DM_NO)||e.hasAttribute(DM_NO_MORPH),warn=(...e)=>console.warn("[dmax]",...e),logErr=(...e)=>console.error("[dmax]",...e),wireItClone=e=>{const t=[e];for(;t.length;){const e=t.pop();if(noScan(e))continue;const n=IT_ATTRS.get(e);if(n&&n.length)for(let t=0;t=0;--e)t.push(r[e])}},expected=(e,...t)=>e||(warn(...t),null),renderItState=(e,t,n,r,o,l)=>{const s=getSiValOrIt(t);if(!expected(Array.isArray(s),"dmIt expected array value from:",t,"on:",e))return;const i=s.length,a=n.count||0;if(ia){const t=i-a;if(1===t){const t=r.cloneNode(!0),s=""+a;rewriteItBindings(t,o+"."+s,l+"["+s+"]",s),e.appendChild(t),n.nodes.push(t)}else{const t=document.createDocumentFragment();for(let e=a;e{if(Array.isArray(e)&&Array.isArray(t))return e.concat(t);if(!isPlainObj(e)||!isPlainObj(t))return t;const n=cloneOwnProps(e);for(const e in t)hasOwn(t,e)&&(n[e]=hasOwn(n,e)?mergeActVals(n[e],t[e]):t[e]);return n},combineActResult=(e,t,n)=>{if("merge"===n)return mergeActVals(e,t);if("inc"===n||"dec"===n)return(+e||0)+("inc"===n?1:-1);if("append"===n||"prepend"===n){if(Array.isArray(e)&&Array.isArray(t))return"append"===n?e.concat(t):t.concat(e);if("string"==typeof e||"string"==typeof t)return"append"===n?""+(e??"")+(t??""):""+(t??"")+(e??"")}return t},getWriteMode=e=>{for(const t of e||NIL)if("replace"===t.root||"merge"===t.root||"append"===t.root||"prepend"===t.root||"inc"===t.root||"dec"===t.root)return t.root;return"replace"},patchMatchingSis=(e,t,n)=>{if(isPlainObj(t))for(const r in t)if(hasOwn(t,r)){const o=kebabToCamel(r);if(!_dm.has(o))continue;setSiAndNotifySubsNDeep(e,mkIt(SI,null,o,null),combineActResult(_dm.get(o),t[r],n))}},applyActPayload=(e,t,n,r)=>{if(!t)return;const o=getSiValOrIt(t);setSiAndNotifySubsNDeep(e,t,combineActResult(o,n,r))},permitVal=(e,t,n=e.root,r=resolveMPathVal(e.path))=>"and"===n?!!r!=!!e.not:"eq"==n?t==r:"ne"==n?t!=r:"gt"==n?+t>+r:"lt"==n?+t<+r:"ge"==n?+t>=+r:+t<=+r,modsPermitVal=(e,t)=>e.push?!e.some(e=>!permitVal(e,t)):permitVal(e,t),_subs=new Map,_debugEls=new Set;let _debugQueued=!1;const upsert=(e,t)=>{let n=e.get(t);return n||e.set(t,n=[]),n},removeSiSub=e=>{const t=_subs.get(e.trig.root);if(t&&t.length)for(let n=0;n{const t=e.trig.sp;t?.io?e.clearId.disconnect():t?.repeat?clearInterval(e.clearId):clearTimeout(e.clearId),e.clearId=null},removeSubOrClearId=e=>{try{const t=e.ev;t?t.taEl.removeEventListener(t.evName,e.fn,t.opts):null!=e.clearId?clearSubId(e):removeSiSub(e)}catch(e){}},PASSIVE_LISTENER_OPTS=Object.freeze({passive:!0}),ELEMENT_NODE=1,invokeSub=(e,t,n,r,o)=>e(DM,r,o,o.isSi?getSiVal(o):n,t),invokeBoundSub=(e,t=null)=>e.fn(DM,e.el,e.trig,e.trig.isSi?getSiVal(e.trig):null,t),onIntervalSub=e=>{const t={tick:e.tick++,ms:e.ms,type:"interval"};try{invokeSub(e.fn,t,e.ms,e.el,e.trig)}catch(t){logErr(`Error: interval handler (${e.ms}ms) failed:`,t?.message??t)}},onTimeoutSub=e=>{try{invokeSub(e.fn,{tick:0,ms:e.ms,type:"timeout"},e.ms,e.el,e.trig)}catch(t){logErr(`timeout ${e.ms}ms:`,t?.message??t)}},getAttrs=(e,t="")=>{const n=[];if(!e)return n;const r=e.attributes||NIL;for(let e=0;e(t===e&&e?.ownerDocument&&(t=e.ownerDocument),t&&"function"==typeof t.querySelectorAll?t:document),dmSel=(e,t=document)=>t.querySelector(e||""),dmSelAll=(e,t=document)=>Array.from(t.querySelectorAll(e||"")),getReadVal=(e,t,n)=>4===t.s?getAttrs(e,n):5===t.s?dmSel(n,getQueryRoot(e)):6===t.s?dmSelAll(n,getQueryRoot(e)):getElPrVal(e,n),getTrVal=(e,t,n,r)=>3===n.s?r?.length?getElPrVal(e,r):getEvVal(e):getReadVal(t,n,r),addSpSub=(e,t,n,r,o,l,s)=>{if(null!=n.ms){const i=+s||n.ms,a={el:e,trig:t,fn:null,siChangeM:null,ev:null,clearId:null,ms:i,tick:0};return a.fn=applyTrMs(o,t,r,a),a.clearId=n.repeat?setInterval(onIntervalSub,i,a):setTimeout(onTimeoutSub,i,a),l.push(a),a.fn}if(n.io){if("undefined"==typeof IntersectionObserver)return warn("IntersectionObserver missing, skip _viewed:",e),null;const n={el:e,trig:t,fn:null,siChangeM:null,ev:null,clearId:null};n.fn=applyTrMs(o,t,r,n);const s=new IntersectionObserver(r=>{for(const o of r)if(o.isIntersecting)try{invokeSub(n.fn,{ratio:o.intersectionRatio,type:"viewed"},o.intersectionRatio,e,t)}catch(e){logErr("viewed handler:",e?.message??e)}});return s.observe(e),n.clearId=s,l.push(n),n.fn}if(n.init)return applyTrMs(o,t,r);const i=1===n.ta?window:2===n.ta?document:3===n.ta&&e&&e.closest?e.closest("form"):null,a=t.path?.[0]||n.ev||null,u=1===r.s?r.v.length?r.v:null:4===r.s||5===r.s||6===r.s?r.v:null;if(3===n.ta&&!i)return logErr("Error:",E_FORM_EL,t,"on:",e),null;if(!expected(i&&a,"Expected event target/name in addSpSub:",t,"on:",e))return null;const d=!(4&r.f)&&PASSIVE_LISTENER_OPTS,c={el:e,trig:t,fn:null,siChangeM:null,ev:{taEl:i,evName:a,opts:d},clearId:null},p=applyTrMs(o,t,r,c);return c.fn=n=>invokeSub(p,n,1===r.s||4===r.s||5===r.s||6===r.s||3===r.s?getTrVal(n,i,r,u):n?.type??null,e,t),i.addEventListener(a,c.fn,d),l.push(c),p},addTrSub=(e,t,n,r,o,l,s,i,a=i,u=l)=>{if(t.isSi){const l={el:e,trig:t,fn:r,siChangeM:n.c,ev:null,clearId:null};return l.fn=applyTrMs(r,t,n,l),upsert(_subs,t.root).push(l),(o||upsert(_cleanupBoundSubs,e)).push(l),l}const d=t.sp;if(d)return addSpSub(e,t,d,n,r,o,s);if(!expected(l&&s,"Expected event target/name in addTrSub:",t,"on:",e))return null;const c=!(4&n.f)&&PASSIVE_LISTENER_OPTS,p=l?.tagName&&l.tagName.indexOf("-")>=0,f=p?camelToKebab(s):s,m={el:e,trig:t,fn:null,siChangeM:null,ev:{taEl:l,evName:f,opts:c},clearId:null},g=applyTrMs(r,t,n,m),h=!n.s&&!a&&p;return m.fn=r=>invokeSub(g,r,h?getEvVal(r):getTrVal(r,u,n,a),e,t),l.addEventListener(f,m.fn,c),o.push(m),g},findFirstKind=(e,t)=>{for(let n=0;n{_debugEls.size&&!_debugQueued&&(_debugQueued=!0,queueMicrotask(()=>{_debugQueued=!1;const e=noProto();for(const[t,n]of _dm.entries())e[t]=n;const t=JSON.stringify(e,null,2);for(const e of _debugEls)e.textContent=t}))},setSiAndNotifySubs=(e,t,n)=>{const r=t?.root,o=t?.path;if(!r)return null;let l=_dm.get(r),s=l,i=l,a=0,u=null;if(o){if(!o.length)return null;for(i&&"object"==typeof i||_dm.set(r,i=l={});a{if(syncDepth++>MAX_SYNC_DEPTH)return logErr(`Error: Infinite loop detected for signal: ${t} (depth > ${MAX_SYNC_DEPTH}) in ${e}`);try{return setSiAndNotifySubs(0,t,n)}finally{syncDepth--}},onRaf=e=>("function"==typeof requestAnimationFrame?requestAnimationFrame:setTimeout)(e,16),getEvVal=(e,t=e&&e.detail)=>void 0===t?e:t&&"object"==typeof t?t.value??t.ms??t:t,applyTrMs=(e,t,n,r)=>{const o=t.isSi,l=n.v,s=n.d,i=n.t,a=n.p,u=n.f,d=1&u&&!(2&u)&&r,c=!o&&4&u,p=32&u,f=n.s,m=(2===f&&o||3===f&&!o)&&l.length,g=8&u,h=n.j;if(!(d||c||s||i||p||a||t.not||m||g||null!=h)&&(o||r||t.sp?.init))return e;let S=0,E=0,_=!1,T=!1,b=!1,A=null,M=null,y=null,P=null,v=null,I=null,N=null,C=null,O=null,D=null;const R=function(n,u,L,w,x){if(L=L||t,!_){if(c&&x?.preventDefault?.(),s)return O??=function(){_=!0;try{R(A,M,null,y,P)}finally{_=!1}},A=n,M=u,y=w,P=x,clearTimeout(S),void(S=setTimeout(O,s));if(i){const e=Date.now();if(e-E{b=!1,T=!0;try{R(v,I,null,N,C)}finally{T=!1}},void onRaf(D)}}let V=o?w??getSiVal(L):3===f?l.length?x:getEvVal(x):w??getEvVal(x);if(m&&(V=getPrValAndDepth(V,l)[0]),g&&(V=null==V||""===V?null:+V),L.not&&(V=!V),!a||modsPermitVal(a,V)){null!=h&&(V=dmJsos(V,h));try{e(n,u,L,V,x)}catch(e){logErr("handler:",e)}d&&removeSubOrClearId(r)}};return R},_cleanupBoundSubs=new WeakMap,dmEx=(e,t,n)=>{const r=parseCached(t),o=r[":"],l=r["@"],s=r["^"];r["+"].length&&warn("targets/triggers/mods only:",t);const i=null!=n&&""+n;let a=i?compileFn(n,t):(e,t,n,r)=>r;if(i&&!a)return;const u=e?upsert(_cleanupBoundSubs,e):null;if(!o.length&&l.length){const n=[],r=[],o=[];for(const i of l){const l=compileTrMods(i,s);if(!(16&l.f)){n.push({tr:i,mod:l}),i.isSi&&o.push([i,getWriteMode(i.mods)]);continue}if(!i.isEv)return logErr("Error:",E_RW_REQ,t);const a=getTrPrTa(e,t,i,l,E_RW_EL,E_RW_EV);if(!a)return;r.push({tr:i,mod:l,w:getWriteMode(i.mods),taEl:a.taEl,readEl:a.readEl,ev:a.ev,prPath:a.prPath,readPath:a.readPath,tar:a.tar})}if(r.length&&n.length){let l=!1;const s=(n,o,l,s)=>{const i=a(n,e,o,l,s);for(const n of r)setPr(e,t,n.tar,combineActResult(getElPrVal(n.taEl,n.prPath),i,n.w))};for(const r of n){const n=r.tr,o=r.mod;if(n.isSi){const t=addTrSub(e,n,o,(e,t,n,r,o)=>s(e,n,r,o),u);l||0==n.isImmediate||(l=!0,invokeBoundSub(t))}else{if(!n.isEv&&!n.isSp)return logErr("Error: unsupported trigger kind",n.kind,"in",t);{const r=n.isEv?getTrPrTa(e,t,n,o,E_RW_EL,E_RW_EV):null;if(n.isEv&&!r)return;if(null==(l=addNonSiTrSub(e,n,o,(e,t,n,r,o)=>s(e,n,r,o),u,l,r)))return}}}if(o.length)for(const n of r){const r=addTrSub(e,n.tr,n.mod,(n,r,l,s,i)=>{const u=a(n,e,l,s,i);for(const e of o)setSiAndNotifySubsNDeep(t,e[0],combineActResult(getSiVal(e[0]),u,e[1]))},u,n.taEl,n.ev,n.prPath,n.readPath,n.readEl);0!=n.tr.isImmediate&&invokeSub(r,null,getReadVal(n.readEl,n.mod,n.readPath),e,n.tr)}return}}if(o.length){const e=a;for(const e of o)e._m=getWriteMode(e.mods),e._j=!(!e.mods||!e.mods.some(e=>"jsos"===e.root)),e.isSi||(e._el=e.isSp?e.root===SP_WIN?window:e.root===SP_DOC?document:"history"===e.root?window.history:null:e.root?getElById(e.root,t):null);a=(n,r,l,s,i)=>{const a=e(n,r,l,s,i);try{for(const e of o){const n=e._j?dmJsos(a):a,o=combineActResult(e.isSi?getSiVal(e):getElPrVal(e._el||r,e.path),n,e._m);e.isSi?setSiAndNotifySubsNDeep(t,e,o):setPr(r,t,e,o)}}catch(e){logErr("Error: setting target in",t,"ended with ex:",e)}}}if(!l.length)return void(i&&a(DM,e,null,null,null));let d=!1;for(const n of l){const r=compileTrMods(n,s);if(n.isSi){const t=addTrSub(e,n,r,a,u);d||0==n.isImmediate||(d=!0,invokeBoundSub(t));continue}if(!n.isEv&&!n.isSp)return logErr("Error: unsupported trigger kind",n.kind,"in",t);const o=n.isEv&&getTrPrTa(e,t,n,r,E_TRIG_EL,E_TRIG_EV,!1);if(n.isEv&&!o)return;if(null==(d=addNonSiTrSub(e,n,r,a,u,d,o)))return}},dmCl=(e,t,n)=>{const r=parseCached(t),o=r["+"],l=r[":"],s=r["@"],i=r["^"];if(!o.length)return logErr("Error: dmCl requires class names via + syntax in:",t);if(!s.length)return logErr("Error: dmCl requires at least one trigger in:",t);const a=getTaFromTars(e,t,l);if(!a)return logErr("Error: dmCl target element not found in:",t);const u=n?compileFn(n,t):null;if(n&&!u)return;const d=upsert(_cleanupBoundSubs,e);for(const n of s){const r=compileTrMods(n,i);if(n.isSi){const t=addTrSub(e,n,r,(e,t,n,r,l)=>applyClVal(o,a,u?u(e,t,n,r,l):r),d);0!=n.isImmediate&&invokeBoundSub(t)}else{const l=n.isEv?getTrPrTa(e,t,n,r,E_TRIG_EL,E_TRIG_EV,!1):null;if(n.isEv&&!l)return;if(null==addNonSiTrSub(e,n,r,(t,r,l,s,i)=>applyClVal(o,a,!u||u(t,e,n,s,i)),d,!1,l))return}}},dmSh=(e,t,n)=>{const r=parseCached(t),o=r[":"],l=r["@"],s=r["^"];if(!l.length)return logErr("Error: dmSh requires at least one trigger in:",t);const i=getTaFromTars(e,t,o);if(!i)return logErr("Error: dmSh target element not found in:",t);const a=i.style&&i.style.display||"",u=getComputedDisplay(i),d=a||("none"!==u&&u?u:"block"),c=n?compileFn(n,t):null;if(n&&!c)return;const p=upsert(_cleanupBoundSubs,e);for(const n of l){const r=compileTrMods(n,s);if(n.isSi){const t=addTrSub(e,n,r,(e,t,n,r,o)=>applyDisplayValue(i,a,d,c?c(e,t,n,r,o):r),p);0!=n.isImmediate&&invokeBoundSub(t)}else{const o=n.isEv?getTrPrTa(e,t,n,r,E_TRIG_EL,E_TRIG_EV,!1):null;if(n.isEv&&!o)return;if(null==addNonSiTrSub(e,n,r,(t,r,o,l,s)=>applyDisplayValue(i,a,d,!c||c(t,e,n,l,s)),p,!1,o))return}}},dataM={},wireNode=(e,t,n)=>{if(0!==t.indexOf(DM_KEY)||noScan(e))return;const r=t.slice(7),o=indexFirst(r,ALL,0),l=o>=0?r.slice(0,o):r,s=dataM[l];s&&s(e,t,n)},noOp=()=>{};let observeCleanupRoot=noOp;const dmScan=(e=document.body)=>{const t=[e],n=[];observeCleanupRoot(e);for(let e=0;e0===e.indexOf(DM_KEY)?e:DM_KEY+t+e,bindAddedSubs=(e,t)=>{if(!e||1!==e.nodeType)return logErr("dm element expected:",e),noOp;const n=upsert(_cleanupBoundSubs,e),r=n.length;if(t(e,n),r>=n.length)return noOp;const o=n.slice(r);let l=1;return()=>{if(!l)return;l=0;for(let e=0;e=0;--e)o.includes(t[e])&&t.splice(e,1)}},getTaFromTars=(e,t,n)=>{const r=findFirstKind(n,EP);return r&&r.root?getElById(r.root,t):e},dmSet=(e,t,n="dmSet")=>{if(isPlainObj(e)){for(const t in e)hasOwn(e,t)&&dmSet(t,e[t],n);return e}if(e?.kind){if(e.kind!==SI)return logErr("dmSet signal target expected:",e,n),null}else{if("string"!=typeof e||!e)return logErr("dmSet signal target expected:",e,n),null;if(e=parseCached(getApiDKey(e,":"===e[0]?"si":"si:"))[":"][0],e?.kind!==SI)return logErr("dmSet signal target expected:",e,n),null}return setSiAndNotifySubsNDeep(n,e,t),t},dmSub=(e,t,n,r="string"==typeof e,o=(r?document.body:e),l=getApiDKey(r?e:t,"ex@"),s=(r?t:n))=>"function"!=typeof s?(logErr("dmSub function expected:",l),noOp):bindAddedSubs(o,(e,t)=>{const n=parseCached(l),r=n["@"],o=n["^"];if(!r.length||n[":"].length||n["+"].length)return logErr("dmSub triggers/mods only:",l);let i=!1;for(const n of r){const r=compileTrMods(n,o),a=(t,n,r,o,l)=>s(o,l,r,t,e);if(n.isSi){const o=addTrSub(e,n,r,a,t);0!=n.isImmediate&&invokeBoundSub(o)}else{const o=n.isEv?getTrPrTa(e,l,n,r,E_TRIG_EL,E_TRIG_EV,!1):null;if(n.isEv&&!o)return;if(null==(i=addNonSiTrSub(e,n,r,a,t,i,o)))return}}});globalThis.dm=DM,globalThis.dmJsos=dmJsos,globalThis.wireNode=wireNode,globalThis.dmScan=dmScan,globalThis.dmSet=dmSet,globalThis.dmSub=dmSub,globalThis.dmSel=dmSel,globalThis.dmSelAll=dmSelAll;const dmIt=(e,t)=>{const n=parseCached(t),r=n["@"],o=n["+"],l=n["^"];if(!r.length)return logErr("Error: dmIt requires a signal trigger in:",t);const s=r[0];if(!s.isSi)return logErr("Error: dmIt trigger must be a signal in:",t);const i=compileTrMods(s,l);let a=null;if(o.length&&o[0].isEv&&o[0].root&&(a=getElById(o[0].root,t)),a||(a=e.querySelector("template")),a&&a.parentNode===e&&a.parentNode.removeChild(a),!a)return logErr("Error: dmIt template not found for:",t);const u=a.content&&a.content.firstElementChild;if(!u)return logErr("Error: dmIt template root not found for:",t);let d=IT_STATES.get(e);d||IT_STATES.set(e,d={nodes:[],count:0});const c=buildItRefBase(s.root,s.path),p=buildItExprBase(s.root,s.path);addTrSub(e,s,i,()=>renderItState(e,s,d,u,c,p),upsert(_cleanupBoundSubs,e)),(s.isImmediate??1)&&renderItState(e,s,d,u,c,p)},dmAct=(e,t,n)=>{const r=t.slice(7),o=indexFirst(r,ALL,0),l=ACT_METHODS[o>=0?r.slice(0,o):r];if(!l)return logErr("Error: dmAct: unrecognised method prefix in:",t);const s=parseCached(t),i=s[":"],a=s["@"],u=s["+"],d=s["^"],c=n?compileFn(n,t):null;if(n&&!c)return;const p=findFirstKind(i,SI);let f=null,m=!1,g=!1,h=!1,S=!1,E=!1,_=!1,T=!1,b=!1,A=!1,M=!1,y=null,P=null,v=!1,I=!1,N=!1,C="replace",O=null,D=null;const R=[],L=[],w=[];for(const e of d){const t=e.root;"json"===t?m=!0:"text"===t?g=!0:"html"===t?h=!0:"form"===t?S=!0:"sse"===t?_=E=!0:"noCache"===t?_=!0:"brotli"===t||"br"===t?T=!0:"gzip"===t?b=!0:"deflate"===t?A=!0:"compress"===t?M=!0:"hs"!==t||y?"hsNoKebab"===t?v=!0:"auth"!==t||P?"replace"===t||"merge"===t||"append"===t||"prepend"===t||"before"===t||"after"===t||"inner"===t||"remove"===t?(C=t,"merge"!==t&&(O=e)):"stat"!==t||f?"retry"!==t||D?"url"===t?R.push(e):"body"===t?L.push(e):t===M_HDR?w.push(e):"syncAll"===t?I=N=!0:I||"sendAll"!==t?N||"patchAll"!==t||(N=!0):I=!0:D=e:f=e:P=e:y=e}p&&p.mods&&(C=getWriteMode(p.mods));const x=mkActStats(f),V=y?.path,k=P?.path,H=D?+(resolveMPathVal(D.path)??1e3)||1e3:0;let B="";T&&(B="br"),b&&(B+=(B?", ":"")+"gzip"),A&&(B+=(B?", ":"")+"deflate"),M&&(B+=(B?", ":"")+"compress");const F=buildActBaseHs(m,g,h,S,E,_,B),j="GET"===l||"DELETE"===l;let W=null;for(const e of u){const n=e.path;e.key=(n?n.at(-1):e.root)||"value",e.isEv&&e.root&&(e.taEl=getElById(e.root,t));for(let t=0;tx&&setSiAndNotifySubsNDeep(t,x[e],n),U=u.length>0,J=G.length>0,z=async()=>{const n=c?c(DM,e,null,null,null):"";if(!n)return logErr("Error: dmAct: URL is empty in:",t);K("busy",!0),K("complete",!1),K("err",null),K("code",null);try{const r=noProto(),o=noProto(),s=j?r:o;if(I)for(const[e,t]of _dm.entries())o[e]=t;if(U)for(const t of u){const n=t.isEv?getElPrVal(t.taEl||e,t.path):getSiValOrIt(t);if(t.spread){if(n&&"object"==typeof n)for(const e in n)hasOwn(n,e)?s[e]=n[e]:s.value=n}else s[t.key]=n}if(J)for(const[e,t,n,l]of G)(e?o:r)[t]=l?getSiValOrIt(l):_dm.get(n);let a=n,d=a.includes("?");for(const e in r)a+=(d?"&":"?")+encodeURIComponent(e)+"="+encodeURIComponent(""+(r[e]??"")),d=!0;let c=ACT_HS_EMPTY,f=1;if(V){const e=resolveMPathVal(V);if(isPlainObj(e)){c=noProto(),f=0;for(const t in e)hasOwn(e,t)&&(c[v?t:camelToKebab(t)]=""+e[t])}}if(F!==ACT_HS_EMPTY)if(c===ACT_HS_EMPTY)c=F;else for(const e in F)hasOwn(F,e)&&(c[e]=F[e]);if(null!=k){const e=resolveMPathVal(k);null!=e&&(f&&(c=cloneOwnProps(c),f=0),c.authorization=""+e)}for(const[e,t,n]of Y){f&&(c=cloneOwnProps(c),f=0);const r=n?getSiValOrIt(n):_dm.get(t);c[e]=null!=r?""+r:""}let g=0,E=null,_=null;for(const e in o)hasOwn(o,e)&&(g||(E=e),g++);if(g){const e=1===g?o[E]:o;if(S&&(isPlainObj(e)||Array.isArray(e))){const t=new URLSearchParams;if(Array.isArray(e))for(let n=0;nT.abort():null,K("abort",W);const b={method:l,headers:c};null!=_&&(b.body=_),T&&(b.signal=T.signal);const A=await window.fetch(a,b),M=A.headers?.get("content-type")||"",y=M.includes("text/event-stream");let P;if(y)A.body&&"function"==typeof A.body.getReader?P=await consumeSseStream(A.body,t,x):(K("open",!0),P=applySse(await A.text(),t),K("open",!1),K("close",!0));else if(h&&M.includes("text/html")){P=await A.text();const t=O?.root||"outer",n=O&&O.path,r=n?"":findFirstKind(i,EP)?.root??"",o=n?resolveHtmlSelector(n):"before"===t||"after"===t?e.id?"#"+e.id:"":"append"!==t&&"prepend"!==t||!r?"":"#"+r;applyPatchEls({[SSE_ELS]:P,selector:o,mode:t})}else P=isJsonContentType(M)?await A.json():await A.text(),applyActPayload(t,p,P,C),N&&patchMatchingSis(t,P,C);K("busy",!1),K("complete",!0),K("err",null),K("code",Number.isFinite(A.status)?A.status:null),K("abort",null),W=null,!(H>0&&y)||T&&T.signal.aborted||setTimeout(z,H)}catch(e){W=null;const t=e&&"AbortError"===e.name;K("abort",null),K("open",!1),K("busy",!1),K("complete",!0),t||(K("err",e&&e.message?e.message:""+e),K("code",Number.isFinite(e&&e.status)?e.status:null),logErr("dmAct fail:",e),H>0&&setTimeout(z,H))}};if(!a.length)return void z();const $=upsert(_cleanupBoundSubs,e);let q=!1;for(const n of a){if(!n.isSi&&!n.isEv&&!n.isSp)return logErr("dmAct bad trigger:",n.kind,t);if(n.isSp){if(!n.sp?.act)return logErr("Error: dmAct unsupported SP trigger",n.root,"in",t);q||(q=!0,z());continue}const r=compileTrMods(n,d);if(n.isSi){addTrSub(e,n,r,z,$),!q&&n.isImmediate&&(q=!0,z());continue}const o=n.root?getElById(n.root,t):e;if(!o)return logErr("Error: dmAct element not found in trigger:",n,"in:",t);const l=n.path?.[0]??getDefaultEv(o);if(!l)return logErr("Error: dmAct event not found in trigger:",n,"in:",t);const s=addTrSub(e,n,r,z,$,o,l,null,null,o);!q&&n.isImmediate&&(q=!0,invokeSub(s,null,getElPrVal(o,null),e,n))}},dmActApi=(e,t,n)=>bindAddedSubs(e,e=>dmAct(e,getApiDKey(t,""),n)),WC_TMPLS=new WeakSet,WC_INITS=new WeakSet,defWc=(e,t)=>{if(!t||t.indexOf("-")<0)return logErr("dmWc template expects custom-element name value:",t);if(customElements.get(t)||WC_TMPLS.has(e))return;WC_TMPLS.add(e);const n=(e.getAttribute("data-m-wc-props")||"").match(/[^,\s]+/g)||NIL,r=class extends HTMLElement{connectedCallback(){if(!WC_INITS.has(this)){WC_INITS.add(this),!this.firstElementChild&&e.content&&(this.appendChild(e.content.cloneNode(!0)),wireItClone(this));for(const e of n){let t=this["$"+e];hasOwn(this,e)&&(t=this[e],delete this[e]),void 0!==t&&(this[e]=t)}}}};for(const e of n)Object.defineProperty(r.prototype,e,{get(){return this["$"+e]},set(t){this["$"+e]=t,this.dispatchEvent(new CustomEvent(e,{detail:t})),this.firstElementChild&&this.firstElementChild.dispatchEvent(new CustomEvent(e,{detail:t}))}});customElements.define(t,r)},dmWc=(e,t,n)=>"TEMPLATE"===e.tagName?defWc(e,n&&n.trim()):logErr("Error: dmWc is template-only; use data-m-ex for WC host props in:",t),dmNo=()=>{};globalThis.dmAct=dmActApi,dataM.si=dmSi,dataM.ex=dmEx,dataM.it=dmIt,dataM.wc=dmWc,dataM.cl=dmCl,dataM.sh=dmSh,dataM.dbg=dmDbg,dataM.no=dmNo,dataM.get=dataM.post=dataM.put=dataM.patch=dataM.delete=dmAct;const sameKind=(e,t)=>e.nodeType===t.nodeType&&(1!==e.nodeType||(e.id&&t.id?e.id===t.id:e.tagName===t.tagName)),sameSlot=(e,t)=>e.nodeType===t.nodeType&&(1!==e.nodeType||(e.id||t.id?e.id===t.id:e.tagName===t.tagName)),_HTML_PARSE_TEMPLATE=document.createElement("template"),TEXT_NODE=3,_siSelCache=new Map,SI_BAD_SYMS=" \t\r\n#>+~:.[],|",getSimpleIdSelector=e=>{if(!e||"#"!==e[0])return null;const t=_siSelCache.get(e);if(void 0!==t)return t;for(let t=1;t1?e.slice(1):null;return _siSelCache.set(e,n),n},getPatchTars=(e,t=e&&getSimpleIdSelector(e),n=t&&document.getElementById(t))=>e?t?n?[n]:NIL:document.querySelectorAll(e):NIL,sameAttrs=(e,t)=>{const n=e.attributes,r=t.attributes,o=r.length;if(n.length!==o)return!1;for(let e=0;e{const n=t.attributes,r=e.attributes,o=n.length,l=r.length;if(l===o){let e=!0,t=!1;for(let l=0;l=0;n--)t.hasAttribute(r[n].name)||e.removeAttribute(r[n].name)}else for(let t=l-1;t>=0;t--)e.removeAttribute(r[t].name)},morphChildren=(e,t)=>{let n=e.firstChild,r=t.firstChild;for(;n&&r&&sameSlot(n,r);){const e=n.nextSibling;morph(n,r),n=e,r=r.nextSibling}if(!n){for(;r;r=r.nextSibling)e.appendChild(r.cloneNode(!0));return}if(!r){for(;n;){const t=n.nextSibling;e.removeChild(n),n=t}return}let o=null,l=0;for(let e=n;e;e=e.nextSibling)1===e.nodeType&&e.id&&((o??=noProto())[e.id]=e,l=1);for(;r;r=r.nextSibling){let t=null,s=1===r.nodeType?r.id:"";if(s&&o&&(t=o[s]))delete o[s];else{for(;l&&n&&1===n.nodeType&&n.id&&o[n.id];)n=n.nextSibling;n&&sameKind(n,r)&&(t=n)}t?(t!==n?e.insertBefore(t,n||null):n=n.nextSibling,morph(t,r)):e.insertBefore(r.cloneNode(!0),n||null)}for(;n;){const t=n.nextSibling;e.removeChild(n),n=t}if(o)for(const t in o){const n=o[t];n.parentNode===e&&e.removeChild(n)}};let _morphActiveEl=null;const _endMorph=e=>e&&(_morphActiveEl=null),morph=(e,t)=>{const n=null===_morphActiveEl;if(n&&(_morphActiveEl=document.activeElement),3===e.nodeType&&3===t.nodeType)return e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue),_endMorph(n);if(1!==e.nodeType||1!==t.nodeType||noMorph(e)||noMorph(t))return _endMorph(n);if(e.tagName!==t.tagName)return e.parentNode&&e.parentNode.replaceChild(t.cloneNode(!0),e),_endMorph(n);const r=e.firstChild,o=t.firstChild,l=r&&o&&!r.nextSibling&&!o.nextSibling&&3===r.nodeType&&3===o.nodeType,s=sameAttrs(e,t);if(s&&(!r&&!o||l&&r.nodeValue===o.nodeValue))return _endMorph(n);if(l&&s&&e!==_morphActiveEl)return r.nodeValue=o.nodeValue,_endMorph(n);const i=e===_morphActiveEl;let a=-1,u=-1,d="none",c=null,p=-1;if(i){const t=e.tagName;if("INPUT"===t||"TEXTAREA"===t)try{a=e.selectionStart,u=e.selectionEnd,d=e.selectionDirection||"none"}catch(e){}else"SELECT"===t&&(c=e.value,p=e.selectedIndex)}const f=e.scrollTop,m=e.scrollLeft;if(s||updateAttrs(e,t),l?r.nodeValue!==o.nodeValue&&(r.nodeValue=o.nodeValue):(r||o)&&morphChildren(e,t),(f||m)&&(e.scrollTop!==f&&(e.scrollTop=f),e.scrollLeft!==m&&(e.scrollLeft=m)),i&&a>=0)try{e.setSelectionRange(a,u,d)}catch(e){}else i&&null!==c&&(e.value=c,e.value!==c&&p>=0&&p{if(!e)return NIL;const n=(t||"html").toLowerCase();if("html"===n){_HTML_PARSE_TEMPLATE.innerHTML=e;const t=_HTML_PARSE_TEMPLATE.content.firstElementChild;if(!t)return NIL;if(!t.nextElementSibling)return[t];const n=[t];for(let e=t.nextElementSibling;e;e=e.nextElementSibling)n.push(e);return n}const r="svg"===n?`${e}`:`${e}`,o=(new DOMParser).parseFromString(r,"svg"===n?"image/svg+xml":"application/xml").documentElement;return o?Array.from(o.children):[]},insertFragRelative=(e,t,n)=>{if(!e||!t||!t.length)return;const r=document.createDocumentFragment(),o="prepend"===n?e.firstChild||null:"before"===n?e:e.nextSibling;for(const e of t)r.appendChild(e.cloneNode(!0));"append"===n?e.appendChild(r):("prepend"===n?e:e.parentNode)?.insertBefore(r,o)},applyPatchPair=(e,t,n,r=!1)=>{if(e&&t)if("replace"===n)e.replaceWith(r?t:t.cloneNode(!0));else if("inner"===n){const n=e.cloneNode(!1);for(let e=t.firstChild;e;e=e.nextSibling)n.appendChild(e.cloneNode(!0));morphChildren(e,n)}else morph(e,t)},applyPatchEls=e=>{const t=(e.mode||"outer").toLowerCase(),n=e.selector?""+e.selector:"",r=e.namespace?""+e.namespace:"html",o=e[SSE_ELS]||"";if("replace"===t&&"html"===r&&o){const e=n&&getPatchTars(n),t=!n&&/^\s*<[^>]*\sid\s*=\s*(?:"([^"]+)"|'([^']+)')/i.exec(o),r=n?1===e.length&&e[0]:document.getElementById(t&&(t[1]||t[2]||""));if(r)return void(r.outerHTML=""+o)}const l=parseSseEls(o,r);if("remove"!==t)if("append"!==t&&"prepend"!==t&&"before"!==t&&"after"!==t){if(n){if(!l.length)return;const e=getPatchTars(n);if(1===e.length&&1===l.length)return void applyPatchPair(e[0],l[0],t,!0);const r=l[0];for(let n=0;n{if(null===t)return JSON_MERGE_DELETE;if(!isPlainObj(t))return t;const n=isPlainObj(e)?cloneOwnProps(e):noProto();for(const e in t)if(hasOwn(t,e)){const r=applyJsonMergePatch(n[e],t[e]);r===JSON_MERGE_DELETE?delete n[e]:n[e]=r}return n},applyPatchSigs=(e,t)=>{const n=t[SSE_SIS];if(!n)return;let r=null;try{r=JSON.parse(n)}catch(t){return logErr("Error: patch sigs in",e,"expect JSON but found invalid format")}if(!isPlainObj(r))return;const o="true"===(t.onlyIfMissing||"").toLowerCase();for(const t in r)if(hasOwn(r,t)){if(o&&_dm.has(t))continue;const n=applyJsonMergePatch(_dm.get(t),r[t]),l=mkIt(SI,null,t,null);n!==JSON_MERGE_DELETE?setSiAndNotifySubsNDeep(e,l,n):_dm.has(t)&&(setSiAndNotifySubsNDeep(e,l,void 0),_dm.delete(t),updateDebug())}},flushSse=(e,t,n)=>{const r=t[1],o=t[0];t[2]&&r&&("dm-elements"===o?(applyPatchEls(r),e.push({event:o,args:r})):"dm-signals"===o&&(applyPatchSigs(n,r),e.push({event:o,args:r}))),t[0]="message",t[1]=null,t[2]=!1},consumeSseLine=(e,t,n,r)=>{const o="\r"===e[e.length-1]?e.slice(0,-1):e;if(!o)return flushSse(n,t,r);if(":"===o[0])return;const l=o.indexOf(":"),s=l<0?o:o.slice(0,l);let i=l<0?"":o.slice(l+1);if(" "===i[0]&&(i=i.slice(1)),"event"===s)t[0]=i||"message";else if("data"===s){const e=i.indexOf(" ");if(e<0)return;const n=i.slice(0,e),r=i.slice(e+1),o=t[1]||(t[1]=noProto());t[2]=!0,o[n]?o[n]+="\n"+r:o[n]=r}},applySse=(e,t="dmax-sse")=>{if(!e)return NIL;const n=[],r=""+e,o=["message",null,!1];let l,s=0;for(;(l=r.indexOf("\n",s))>=0;)consumeSseLine(r.slice(s,l),o,n,t),s=l+1;return s{if(!e||"function"!=typeof e.getReader)return NIL;const r=(e,r)=>n&&setSiAndNotifySubsNDeep(t,n[e],r),o=[],l=e.getReader(),s=new TextDecoder,i=["message",null,!1];let a="",u=!1;try{for(;;){const{done:e,value:n}=await l.read();if(e)break;let d;for(u||(u=!0,r("open",!0),r("close",!1)),a+=s.decode(n,{stream:!0});(d=a.indexOf("\n"))>=0;)consumeSseLine(a.slice(0,d),i,o,t),a=a.slice(d+1)}const e=s.decode();e&&(a+=e),a&&consumeSseLine(a,i,o,t),flushSse(o,i,t)}catch(e){return r("open",!1),r("err",e.message||""+e),logErr("SSE stream error:",e),o}return r("open",!1),r("close",!0),o};var applyDmaxPatchElements=applyPatchEls,applyDmaxPatchSigs=applyPatchSigs,applyDmaxSse=applySse,consumeDmaxSseStream=consumeSseStream;const cleanupBoundSubsDeep=e=>{if(!e||1!==e.nodeType&&11!==e.nodeType)return;const t=[e];for(;t.length;){const e=t.pop(),n=_cleanupBoundSubs.get(e);if(n){for(const e of n)removeSubOrClearId(e);_cleanupBoundSubs.delete(e)}const r=e.shadowRoot;r&&t.push(r);const o=e.children||NIL;for(let e=0;e{for(const t of e)for(const e of t.removedNodes)cleanupBoundSubsDeep(e)}),observedCleanupRoots=new WeakSet;observeCleanupRoot=e=>{!e||observedCleanupRoots.has(e)||1!==e.nodeType&&11!==e.nodeType||(observedCleanupRoots.add(e),observer.observe(1===e.nodeType?e:e===document?document.body:e,{childList:!0,subtree:!0}))},observeCleanupRoot(document.body); +const e=(e,t,n=0)=>{let r,o=e.length;for(let l of t)(r=e.indexOf(l,n))>=0&&r{if(!e)return e;if(e.indexOf("-")<0)return n.set(e,e),e;let t=n.get(e);return t||(t=e.replace(/-+([a-zA-Z]?)/g,(e,t)=>t?t.toUpperCase():""),n.set(e,t),r.set(t,e),t)},l=e=>{if(!e)return e;let t=r.get(e);return t||(t=e.replace(/[A-Z]/g,e=>"-"+e.toLowerCase()),r.set(e,t),n.set(t,e),t)},s="^",i=":",u="@",c="+",a=[s,i,u,c],f=".",d=[f,"["],h="s",m=f,p="_",g="and",y="eq",v="ne",b="lt",E="gt",S="le",w="ge",x="attrs",A="selAll",T="rw",I="jsos",C="busy",O="complete",N="err",k="code",j="stat",P="replace",M="merge",L="append",$="prepend",R="inc",z="before",D="after",W="inner",V="remove",q="outer",F="open",_="close",U="abort",B="accept",J="cache-control",H="content-type",X="pragma",G=()=>Object.create(null),K=Object.freeze(G()),Z=Object.freeze({[H]:"application/json",[B]:"application/json"}),Q=Object.freeze({[B]:"text/html"}),Y=Object.freeze({[H]:"application/x-www-form-urlencoded"}),ee=Object.freeze({[H]:"text/plain;charset=UTF-8"}),te=Object.freeze({[J]:"no-cache",[X]:"no-cache"}),ne=Object.freeze({[B]:"text/event-stream",[J]:"no-cache",[X]:"no-cache"}),re="window",oe="document",le="history",se="form",ie="interval",ue="timeout",ce="viewed",ae="init",fe=[re,oe,le,se,ie,ue,ce,ae],de=Object.assign(G(),{[re]:{ta:1,ev:"resize"},[oe]:{ta:2,ev:"visibilitychange"},[le]:{ta:"history"},[se]:{ta:3,ev:"submit",immediate:1},[ie]:{ms:500,repeat:1},[ue]:{ms:500},[ce]:{io:1},[ae]:{init:1,act:1}}),he=Object.freeze({get:"GET",post:"POST",put:"PUT",patch:"PATCH",delete:"DELETE"}),me="data-m-",pe=me+"no",ge=pe+"^scan",ye=pe+"^morph",ve=`dmEx ${s}${T} requires element/property trigger:`,be=`dmEx ${s}${T} element not found:`,Ee=`dmEx ${s}${T} event not found:`,Se="element not found:",we="event not found:",xe=new WeakMap,Ae=new WeakMap,Te=(e,n,r,o,l=t)=>({kind:e,not:n,root:r,path:o,mods:l,sp:e===p&&de[r]||null,isSi:e===h,isEv:e===m,isSp:e===p,isImmediate:null}),Ie=(e,t,n)=>({kind:s,not:e,root:t,path:n,isImmediate:"immediate"===t||"notImmediate"!==t&&null}),Ce=/^\d+$/,Oe=(t,n,r=0)=>{if(!n)return null;let l=r,s=n.length;for(;n.startsWith("!",l);)++l;let i=0==l?null:l%2!=0,u=e(n,d,l),c=u<0?0==l?n:n.slice(l):n.slice(l,u),a=m;if(c&&c.length>0){const e="#"===c[0];if(e||(e=>{if(e.startsWith(p))for(const t of fe)if(e.startsWith(t,1))return!0;return!1})(c)){if(a=e?m:p,c=c.slice(1),!c)return Et("empty",a+":",n,t),null}else a=h,c=o(c)}if(u<0&&!c&&null!==i)return Et("bare","!:",n),null;if(u<0||n[u]===f&&u+1==s)return Te(a,i,c,null);l=u;let g=[];for(;l>=0&&l{if(!n)return null;let r=0,l=n.length;for(;n.startsWith("!",r);)++r;let s=0==r?null:r%2!=0;const i=e(n,d,r);let u=i<0?0==r?n:n.slice(r):n.slice(r,i);if(u&&(u=o(u)),!u)return Et("empty mod:",n,t),null;if(u===x){if(i<0||i+1>=l)return Ie(s,u,{r:"",v:""});const e=n.slice(i+1);if("#"!==e[0])return Ie(s,u,{r:"",v:e});const r=e.indexOf(f,1),o=e.slice(1,r<0?e.length:r);return o?Ie(s,u,{r:o,v:r<0?"":e.slice(r+1)}):(Et("empty attrs mod:",n,t),null)}return Ie(s,u,"sel"===u||u===A?i<0||i+1>=l?"":n.slice(i+1):i<0||i+1>=l?null:n.indexOf(f,r=i+1)<0?o(n.slice(r)):Oe(t,n,r))},ke=new Map,je=n=>{let r=ke.get(n);return r||ke.set(n,r=((n,r)=>{r??=5;const o=n.length,l=G();for(l[s]=l[i]=l[u]=l[c]=t;r>=0&&r{const o=r===Me?t+"\0"+n:null;if(null!==o&&Le.has(o))return Le.get(o);let l=""+t;const s=l.indexOf("return");let i,u=s>=0&&(s+6>=l.length||e(l,Pe,s+6)==s+6)?l:`return(${l})`;u=`try{ ${u} }catch(e){ console.error('[dmax]','eval ${n}:',e.message,${l}); return }`;try{i=Function(...r,u)}catch(e){return void Et(`compile ${n}:`,e.message,l)}return null!==o&&Le.set(o,i),i},Re=new Map,ze=new Proxy({},{get:(e,t)=>Re.get(t),set:(e,t,n)=>(Re.set(t,n),!0),has:(e,t)=>Re.has(t),ownKeys:()=>Array.from(Re.keys()),getOwnPropertyDescriptor:(e,t)=>Re.has(t)?{value:Re.get(t),enumerable:!0,configurable:!0}:void 0}),De=(e,t)=>{const n=document.getElementById(e);return n||Et(`no #${e}:`,t),n},We=e=>{const t=e.type,n=e.tagName;return"checkbox"===t||"radio"===t?"checked":"DETAILS"===n?"open":"INPUT"===n||"SELECT"===n||"TEXTAREA"===n||n&&n.indexOf("-")>=0&&"value"in e?"value":"textContent"},Ve=e=>{const t=e.tagName;return"FORM"===t?"submit":"DETAILS"===t?"toggle":"INPUT"===t||"SELECT"===t||"TEXTAREA"===t?"change":"click"},qe=(e,t)=>{if(!e)return null;const n=t&&t.length?t[0]:We(e);let r=e[n];return void 0===r&&e.getAttribute&&(r=e.getAttribute(l(n))),t&&t.length>1?_e(r,t,-1,1)[0]:r},Fe=e=>null==e,_e=(e,t,n=-1,r=0)=>{let o=e;if(Fe(o)||!t)return[o,0];let l=-1==n||n>t.length-r?t.length-r:n;for(let e=0;e{if(n>=32)return console.warn("[dmax] deep compare limit:",32),!0;const r=e,o=t;if(Array.isArray(r)){if(!Array.isArray(o)||r.length!=o.length)return!0;for(let e=0;e{if(!n.isEv&&!n.isSp)return null;let o=n.isSp?n.root===re?window:n.root===oe?document:n.root===le?window.history:null:n.root?De(n.root,t):e;const s=n.path;let i=s?null:We(o);if(s&&s.length&&([o]=_e(o,s,s.length-1),i=s.at(-1)),!o||!i)return Et("setting non-existing prop:",n,"in",t);try{if("function"==typeof o[i])return Array.isArray(r)?o[i](...r):o[i](r);if("style"===i&&at(r)&&o[i])for(const e in r){const t=o[i],n=r[e],s="-"===e[0]?e:"--"+l(e);e in t?Ue(t[e],n)&&(t[e]=n):t.getPropertyValue(s)!==""+n&&t.setProperty(s,n)}else if(o&&"function"==typeof o.setProperty&&!(i in o)){const e="-"===i[0]?i:"--"+l(i);o.getPropertyValue(e)!==""+r&&o.setProperty(e,r)}else Ue(o[i],r)&&(o[i]=r)}catch(t){Et("Failed to set property:",t.message,">>>",n,"on",e)}return o[i]},Je=e=>"undefined"!=typeof window&&window.getComputedStyle?window.getComputedStyle(e).display:"",He=(e,t,n)=>{for(const r of e){const e=r.kb||(r.kb=l(r.root));(r.not?!n:n)?t.classList.add(e):t.classList.remove(e)}},Xe=(e,t,n,r)=>{const o=e.style.display;r?t||"none"===o||"none"===Je(e)?e.style.display=n:e.style.removeProperty("display"):"none"!==o&&(e.style.display="none")},Ge=(e,n)=>{let r=e,o=n;if(r&&"object"==typeof r||(r=t),o&&"object"==typeof o||(o=t),Array.isArray(r)){if(Array.isArray(o)){const e=o.length,t=r.length;return e==t?null:e>t?{addedRange:[t,e-t]}:{removedRange:[e,t-e]}}let e=[];for(const t in o)ft(o,t)&&e.push(t);return{added:e,removedRange:[0,r.length]}}if(Array.isArray(o)){let e=[];for(const t in r)ft(r,t)&&e.push(t);return{removed:e,addedRange:[0,o.length]}}let l=[],s=[];for(const e in o)e in r||l.push(e);for(const e in r)e in o||s.push(e);return l.length?s.length?{added:l,removed:s}:{added:l}:s.length?{removed:s}:null},Ke=(e,t)=>{if(e.length!==t.length)return!1;for(let n=0;nYe(e,e.mods.length?e.mods:t),Qe=e=>null==e?t:e.kind?e.root?e.path?.length?[e.root,...e.path]:[e.root]:e.path||t:Array.isArray(e)?e:[e],Ye=(e,n)=>{const r=null!=e.sp?.ms;let o=0,l=0,s=0,i=null,u=t,c=0,a=0,f="",d=null;for(const e of n){const n=e.root;if("with_shape"===n)c=1;else if("shape_only"===n)c=2;else if("pr"===n){const n=e.path;a=1,f=n?.isEv&&n.root||"",u=n?.isEv?n.path||t:Qe(n)}else n===x?(a=4,f=e.path?.r||"",u=e.path?.v||""):"sel"===n?(a=5,u=e.path||""):n===A?(a=6,u=e.path||""):"si"===n?(a=2,u=Qe(e.path)):"ev"===n?(a=3,u=Qe(e.path)):"once"===n?o|=1:"always"===n?o|=2:"prevent"===n?o|=4:"num"===n?o|=8:"raf"===n?o|=32:n===I?d=e.path??2:n===T?o|=16:r||"debounce"!==n?r||"throttle"!==n?n in nt&&(i=i?i.push?(i.push(e),i):[i,e]:e):s=+(lt(e.path)??500)||500:l=+(lt(e.path)??500)||500}return{f:o,d:l,t:s,p:i,v:u,c:c,s:a,r:f,j:d}},et=(e,n,r,o,l,s,i=!0)=>{const u=r.root?De(r.root,n):e;if(!u)return Et(l,r,"in:",n),null;let c=r.path?r.path[0]:null,a=null;c&&((e,t)=>t===We(e)||"value"===t||"checked"===t||"textContent"===t)(u,c)&&(a=r.path,c=Ve(u));const f=1!==o.s&&4!==o.s||!o.r?u:De(o.r,n),d=1===o.s||3===o.s?o.v.length?o.v:a:4===o.s||5===o.s||6===o.s?o.v:a;return i&&1===o.s&&!o.r&&o.v.length&&(a=o.v),c=c??Ve(u),c?f?{taEl:u,readEl:f,ev:c,prPath:a,readPath:d,tar:Te(m,null,r.root,a,t)}:Et(l,r,"in:",n):(Et(s,r,"in:",n),null)},tt=(e,t,n,r,o,l,s=null)=>{const i=t.sp,u=!!i;if(!u&&!wt(s,"Expected non-SP trigger target in addNonSiTrSub:",t,"on:",e))return null;const c=_t(e,t,n,r,o,u?null:s.taEl,u?t.path?.[0]||i?.ev||null:s.ev,u?null:s.prPath,u?null:s.readPath,u?null:s.readEl);return i?.init?(c&&!l&&Lt(c,{type:ae},1===n.s||4===n.s||5===n.s||6===n.s?qt(n.r?De(n.r):e,n,1===n.s?n.v.length?n.v:null:n.v):ae,e,t),!0):!c||l||!t.isImmediate||i&&!i.immediate?l:(Lt(c,null,u?null:qt(s.readEl,n,s.readPath),e,t),!0)},nt=Object.assign(G(),{[g]:1,[y]:1,[v]:1,[b]:1,[E]:1,[S]:1,[w]:1}),rt=e=>{const t=Re.get(e.root),n=e.path;return n?_e(t,n)[0]:t},ot=e=>{if(!e.kind)return e;const t=rt(e);return e.not?!t:t},lt=e=>{if(e&&e.kind)return ot(e);if("string"!=typeof e)return e;if(Re.has(e))return Re.get(e);const t=Oe("mod",e);return t&&t.kind&&(!t.isSi||t.path||Re.has(t.root))?ot(t):e},st=(e,t=2)=>"string"==typeof e?e:JSON.stringify(e,null,+(lt(t)??2)||0),it=(e,t,n)=>({root:e,path:t?t.concat(n):[n]}),ut=[C,O,F,_],ct=[N,k,U],at=e=>!!e&&"object"==typeof e&&!Array.isArray(e),ft=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),dt=e=>{const t=G();for(const n in e)ft(e,n)&&(t[n]=e[n]);return t},ht=(e,t)=>{if(!e||e===K)return t||K;if(!t||t===K)return e;const n=dt(e);for(const e in t)ft(t,e)&&(n[e]=t[e]);return Object.freeze(n)},mt=e=>"string"==typeof e&&Ce.test(e),pt=(e,t,n)=>{if("string"!=typeof e)return e;let r=e.indexOf("$");if(r<0)return e;const o=[];let l=0;for(;r>=0;){const s=e.startsWith("$it",r)?t:e.startsWith("$ix",r)?n:null;s?(o.push(e.slice(l,r),s),l=r+3,r=e.indexOf("$",l)):r=e.indexOf("$",r+1)}return o.length?o.join("")+e.slice(l):e},gt=(e,t,n,r)=>{const o=[e];for(;o.length;){const e=o.pop(),l=e.attributes;let s=null;for(let e=l.length-1;e>=0;--e){const o=l[e],i=pt(o.name,t,r),u=pt(o.value,n,r);if(i!==o.name||u!==o.value){if(!s){s=[];for(let t=l.length-1;t>e;--t)s.push([l[t].name,l[t].value])}i===o.name&&(o.value=u)}s&&s.push([i,u])}s&&Ae.set(e,s);const i=e.children;for(let e=i.length-1;e>=0;--e)o.push(i[e])}},yt=e=>e&&e.hasAttribute&&(e.hasAttribute(pe)||e.hasAttribute(ge)),vt=e=>e.hasAttribute(pe)||e.hasAttribute(ye),bt=(...e)=>console.warn("[dmax]",...e),Et=(...e)=>console.error("[dmax]",...e),St=e=>{const t=[e];for(;t.length;){const e=t.pop();if(yt(e))continue;const n=Ae.get(e);if(n&&n.length)for(let t=0;t=0;--e)t.push(r[e])}},wt=(e,...t)=>e||(bt(...t),null),xt=(e,t,n,r,o,l)=>{const s=ot(t);if(!wt(Array.isArray(s),"dmIt expected array value from:",t,"on:",e))return;const i=s.length,u=n.count||0;if(iu){const t=i-u;if(1===t){const t=r.cloneNode(!0),s=""+u;gt(t,o+"."+s,l+"["+s+"]",s),e.appendChild(t),n.nodes.push(t)}else{const t=document.createDocumentFragment();for(let e=u;e{if(Array.isArray(e)&&Array.isArray(t))return e.concat(t);if(!at(e)||!at(t))return t;const n=dt(e);for(const e in t)ft(t,e)&&(n[e]=ft(n,e)?At(n[e],t[e]):t[e]);return n},Tt=(e,t,n)=>{if(n===M)return At(e,t);if(n===R||"dec"===n)return(+e||0)+(n===R?1:-1);if(n===L||n===$){if(Array.isArray(e)&&Array.isArray(t))return n===L?e.concat(t):t.concat(e);if("string"==typeof e||"string"==typeof t)return n===L?""+(e??"")+(t??""):""+(t??"")+(e??"")}return t},It=e=>{for(const n of e||t)if(n.root===P||n.root===M||n.root===L||n.root===$||n.root===R||"dec"===n.root)return n.root;return P},Ct=(e,t,n=e.root,r=lt(e.path))=>"and"===n?!!r!=!!e.not:"eq"==n?t==r:"ne"==n?t!=r:"gt"==n?+t>+r:"lt"==n?+t<+r:"ge"==n?+t>=+r:+t<=+r,Ot=new Map,Nt=new Set;let kt=!1;const jt=(e,t)=>{let n=e.get(t);return n||e.set(t,n=[]),n},Pt=e=>{try{const t=e.ev;t?t.taEl.removeEventListener(t.evName,e.fn,t.opts):null!=e.clearId?(e=>{const t=e.trig.sp;t?.io?e.clearId.disconnect():t?.repeat?clearInterval(e.clearId):clearTimeout(e.clearId),e.clearId=null})(e):(e=>{const t=Ot.get(e.trig.root);if(t&&t.length)for(let n=0;ne(ze,r,o,o.isSi?rt(o):n,t),$t=(e,t=null)=>e.fn(ze,e.el,e.trig,e.trig.isSi?rt(e.trig):null,t),Rt=e=>{const t={tick:e.tick++,ms:e.ms,type:ie};try{Lt(e.fn,t,e.ms,e.el,e.trig)}catch(t){Et(`Error: interval handler (${e.ms}ms) failed:`,t?.message??t)}},zt=e=>{try{Lt(e.fn,{tick:0,ms:e.ms,type:ue},e.ms,e.el,e.trig)}catch(t){Et(`timeout ${e.ms}ms:`,t?.message??t)}},Dt=(e,t=e?.getRootNode?.()||e?.ownerDocument||document)=>(t===e&&e?.ownerDocument&&(t=e.ownerDocument),t&&"function"==typeof t.querySelectorAll?t:document),Wt=(e,t=document)=>t.querySelector(e||""),Vt=(e,t=document)=>Array.from(t.querySelectorAll(e||"")),qt=(e,n,r)=>4===n.s?((e,n="")=>{const r=[];if(!e)return r;const o=e.attributes||t;for(let e=0;e3===n.s?r?.length?qe(e,r):Xt(e):qt(t,n,r),_t=(e,t,n,r,o,s,i,u,c=u,a=s)=>{if(t.isSi){const l={el:e,trig:t,fn:r,siChangeM:n.c,ev:null,clearId:null};return l.fn=Gt(r,t,n,l),jt(Ot,t.root).push(l),(o||jt(Kt,e)).push(l),l}const f=t.sp;if(f)return((e,t,n,r,o,l,s)=>{if(null!=n.ms){const i=+s||n.ms,u={el:e,trig:t,fn:null,siChangeM:null,ev:null,clearId:null,ms:i,tick:0};return u.fn=Gt(o,t,r,u),u.clearId=n.repeat?setInterval(Rt,i,u):setTimeout(zt,i,u),l.push(u),u.fn}if(n.io){if("undefined"==typeof IntersectionObserver)return bt("no IntersectionObserver:",e),null;const n={el:e,trig:t,fn:null,siChangeM:null,ev:null,clearId:null};n.fn=Gt(o,t,r,n);const s=new IntersectionObserver(r=>{for(const o of r)if(o.isIntersecting)try{Lt(n.fn,{ratio:o.intersectionRatio,type:ce},o.intersectionRatio,e,t)}catch(e){Et("viewed handler:",e?.message??e)}});return s.observe(e),n.clearId=s,l.push(n),n.fn}if(n.init)return Gt(o,t,r);const i=1===n.ta?window:2===n.ta?document:3===n.ta&&e&&e.closest?e.closest("form"):null,u=t.path?.[0]||n.ev||null,c=1===r.s?r.v.length?r.v:null:4===r.s||5===r.s||6===r.s?r.v:null;if(3===n.ta&&!i)return Et("form element not found:",t,"on:",e),null;if(!wt(i&&u,"Expected event target/name in addSpSub:",t,"on:",e))return null;const a=!(4&r.f)&&Mt,f={el:e,trig:t,fn:null,siChangeM:null,ev:{taEl:i,evName:u,opts:a},clearId:null},d=Gt(o,t,r,f);return f.fn=n=>Lt(d,n,1===r.s||4===r.s||5===r.s||6===r.s||3===r.s?Ft(n,i,r,c):n?.type??null,e,t),i.addEventListener(u,f.fn,a),l.push(f),d})(e,t,f,n,r,o,i);if(!wt(s&&i,"Expected event target/name in addTrSub:",t,"on:",e))return null;const d=!(4&n.f)&&Mt,h=s?.tagName&&s.tagName.indexOf("-")>=0,m=h?l(i):i,p={el:e,trig:t,fn:null,siChangeM:null,ev:{taEl:s,evName:m,opts:d},clearId:null},g=Gt(r,t,n,p),y=!n.s&&!c&&h;return p.fn=r=>Lt(g,r,y?Xt(r):Ft(r,a,n,c),e,t),s.addEventListener(m,p.fn,d),o.push(p),g},Ut=(e,t)=>{for(let n=0;n{Nt.size&&!kt&&(kt=!0,queueMicrotask(()=>{kt=!1;const e=G();for(const[t,n]of Re.entries())e[t]=n;const t=JSON.stringify(e,null,2);for(const e of Nt)e.textContent=t}))};let Jt=0;const Ht=(e,t,n)=>{if(Jt++>32)return Et(`Error: Infinite loop detected for signal: ${t} (depth > 32) in ${e}`);try{return((e,t,n)=>{const r=t?.root,o=t?.path;if(!r)return null;let l=Re.get(r),s=l,i=l,u=0,c=null;if(o){if(!o.length)return null;for(i&&"object"==typeof i||Re.set(r,i=l={});uvoid 0===t?e:t&&"object"==typeof t?t.value??t.ms??t:t,Gt=(e,t,n,r)=>{const o=t.isSi,l=n.v,s=n.d,i=n.t,u=n.p,c=n.f,a=1&c&&!(2&c)&&r,f=!o&&4&c,d=32&c,h=n.s,m=(2===h&&o||3===h&&!o)&&l.length,p=8&c,g=n.j;if(!(a||f||s||i||d||u||t.not||m||p||null!=g)&&(o||r||t.sp?.init))return e;let y=0,v=0,b=!1,E=!1,S=!1,w=null,x=null,A=null,T=null,I=null,C=null,O=null,N=null,k=null,j=null;const P=function(n,c,M,L,$){if(M=M||t,!b){if(f&&$?.preventDefault?.(),s)return k??=function(){b=!0;try{P(w,x,null,A,T)}finally{b=!1}},w=n,x=c,A=L,T=$,clearTimeout(y),void(y=setTimeout(k,s));if(i){const e=Date.now();if(e-v{S=!1,E=!0;try{P(I,C,null,O,N)}finally{E=!1}},void(e=>{("function"==typeof requestAnimationFrame?requestAnimationFrame:setTimeout)(e,16)})(j)}}let R=o?L??rt(M):3===h?l.length?$:Xt($):L??Xt($);if(m&&(R=_e(R,l)[0]),p&&(R=null==R||""===R?null:+R),M.not&&(R=!R),!u||(D=R,(z=u).push?!z.some(e=>!Ct(e,D)):Ct(z,D))){var z,D;null!=g&&(R=st(R,g));try{e(n,c,M,R,$)}catch(e){Et("handler:",e)}a&&Pt(r)}};return P},Kt=new WeakMap,Zt={},Qt=(t,n,r)=>{if(0!==n.indexOf(me)||yt(t))return;const o=n.slice(7),l=e(o,a,0),s=l>=0?o.slice(0,l):o,i=Zt[s];i&&i(t,n,r)},Yt=()=>{};let en=Yt;const tn=(e,t)=>0===e.indexOf(me)?e:me+t+e,nn=(e,t)=>{if(!e||1!==e.nodeType)return Et("dm element expected:",e),Yt;const n=jt(Kt,e),r=n.length;if(t(e,n),r>=n.length)return Yt;const o=n.slice(r);let l=1;return()=>{if(!l)return;l=0;for(let e=0;e=0;--e)o.includes(t[e])&&t.splice(e,1)}},rn=(e,t,n)=>{const r=Ut(n,m);return r&&r.root?De(r.root,t):e},on=(e,t,n="dmSet")=>{if(at(e)){for(const t in e)ft(e,t)&&on(t,e[t],n);return e}if(e?.kind){if(e.kind!==h)return Et("dmSet target expected:",e,n),null}else{if("string"!=typeof e||!e)return Et("dmSet target expected:",e,n),null;if(e=je(tn(e,":"===e[0]?"si":"si:"))[i][0],e?.kind!==h)return Et("dmSet target expected:",e,n),null}return Ht(n,e,t),t};globalThis.dm=ze,globalThis.dmJsos=st,globalThis.wireNode=Qt,globalThis.dmScan=(e=document.body)=>{const n=[e],r=[];en(e);for(let e=0;e"function"!=typeof a?(Et("dmSub function expected:",l),Yt):nn(o,(e,t)=>{const n=je(l),r=n[u],o=n[s];if(!r.length||n[i].length||n[c].length)return Et("dmSub triggers/mods only:",l);let f=!1;for(const n of r){const r=Ze(n,o),s=(t,n,r,o,l)=>a(o,l,r,t,e);if(n.isSi){const o=_t(e,n,r,s,t);0!=n.isImmediate&&$t(o)}else{const o=n.isEv?et(e,l,n,r,Se,we,!1):null;if(n.isEv&&!o)return;if(null==(f=tt(e,n,r,s,t,f,o)))return}}}),globalThis.dmSel=Wt,globalThis.dmSelAll=Vt;const ln=(t,n,r)=>{const f=n.slice(7),d=e(f,a,0),p=he[d>=0?f.slice(0,d):f];if(!p)return Et("dmAct bad method:",n);const g=je(n),y=g[i],v=g[u],b=g[c],E=g[s],S=r?$e(r,n):null;if(r&&!S)return;const w=Ut(y,h);let x=null,A=!1,T=!1,I=!1,R=!1,B=!1,J=!1,H=!1,X=!1,re=!1,oe=!1,le=null,se=null,ie=!1,ue=!1,ce=!1,ae=P,fe=null,de=null;const me=[],pe=[],ge=[];for(const e of E){const t=e.root;"json"===t?A=!0:"text"===t?T=!0:"html"===t?I=!0:"form"===t?R=!0:"sse"===t?J=B=!0:"noCache"===t?J=!0:"brotli"===t||"br"===t?H=!0:"gzip"===t?X=!0:"deflate"===t?re=!0:"compress"===t?oe=!0:"hs"!==t||le?"hsNoKebab"===t?ie=!0:"auth"!==t||se?t===P||t===M||t===L||t===$||t===z||t===D||t===W||t===V?(ae=t,t!==M&&(fe=e)):t!==j||x?"retry"!==t||de?"url"===t?me.push(e):"body"===t?pe.push(e):"header"===t?ge.push(e):"syncAll"===t?ue=ce=!0:ue||"sendAll"!==t?ce||"patchAll"!==t||(ce=!0):ue=!0:de=e:x=e:se=e:le=e}w&&w.mods&&(ae=It(w.mods));const ye=(e=>{const t=((e,t)=>{if(!e)return null;const n=e.path;return"string"==typeof n?Te(h,null,n||t,null):n?.isSi?n:Te(h,null,t,null)})(e,j);if(!t)return null;let n=Re.get(t.root);n&&"object"==typeof n||Re.set(t.root,n=G());let r=n;const o=t.path;if(o&&o.length)for(let e=0;e{let i=e?Z:r?Y:t?ee:K;if(n&&(i=ht(i,Q)),i=o?ht(i,ne):l?ht(i,te):i,!s)return i;const u=i===K?G():dt(i);return u["accept-encoding"]=s,Object.freeze(u)})(A,T,I,R,B,J,Se),xe="GET"===p||"DELETE"===p;let Ae=null;for(const e of b){const t=e.path;e.key=(t?t.at(-1):e.root)||"value",e.isEv&&e.root&&(e.taEl=De(e.root,n));for(let t=0;tye&&Ht(n,ye[e],t),Ne=b.length>0,ke=Ie.length>0,Pe=async()=>{const e=S?S(ze,t,null,null,null):"";if(!e)return Et("dmAct empty URL:",n);Oe(C,!0),Oe(O,!1),Oe(N,null),Oe(k,null);try{const r=G(),s=G(),i=xe?r:s;if(ue)for(const[e,t]of Re.entries())s[e]=t;if(Ne)for(const e of b){const n=e.isEv?qe(e.taEl||t,e.path):ot(e);if(e.spread){if(n&&"object"==typeof n)for(const e in n)ft(n,e)?i[e]=n[e]:i.value=n}else i[e.key]=n}if(ke)for(const[e,t,n,o]of Ie)(e?s:r)[t]=o?ot(o):Re.get(n);let u=e,c=u.includes("?");for(const e in r)u+=(c?"&":"?")+encodeURIComponent(e)+"="+encodeURIComponent(""+(r[e]??"")),c=!0;let a=K,f=1;if(ve){const e=lt(ve);if(at(e)){a=G(),f=0;for(const t in e)ft(e,t)&&(a[ie?t:l(t)]=""+e[t])}}if(we!==K)if(a===K)a=we;else for(const e in we)ft(we,e)&&(a[e]=we[e]);if(null!=be){const e=lt(be);null!=e&&(f&&(a=dt(a),f=0),a.authorization=""+e)}for(const[e,t,n]of Ce){f&&(a=dt(a),f=0);const r=n?ot(n):Re.get(t);a[e]=null!=r?""+r:""}let d=0,g=null,v=null;for(const e in s)ft(s,e)&&(d||(g=e),d++);if(d){const e=1===d?s[g]:s;if(R&&(at(e)||Array.isArray(e))){const t=new URLSearchParams;if(Array.isArray(e))for(let n=0;nE.abort():null,Oe(U,Ae);const S={method:p,headers:a};null!=v&&(S.body=v),E&&(S.signal=E.signal);const x=await window.fetch(u,S),T=x.headers?.get("content-type")||"",j=T.includes("text/event-stream");let P;if(j)x.body&&"function"==typeof x.body.getReader?P=await Cn(x.body,n,ye):(Oe(F,!0),P=In(await x.text(),n),Oe(F,!1),Oe(_,!0));else if(I&&T.includes("text/html")){P=await x.text();const e=fe?.root||q,n=fe&&fe.path,r=n?"":Ut(y,m)?.root??"";let o="";if(n){const e=lt(n);"string"==typeof e&&e&&(o="#.[*:".includes(e[0])?e:"#"+e)}else o=e===z||e===D?t.id?"#"+t.id:"":e!==L&&e!==$||!r?"":"#"+r;wn({[En]:P,selector:o,mode:e})}else{if(P=(e=>{const t=(e||"").toLowerCase();if(t.indexOf("application/json")>=0)return!0;const n=t.indexOf("+json");if(n<0)return!1;const r=n+5;if(r>=t.length)return!0;const o=t[r];return";"===o||" "===o||"\t"===o})(T)?await x.json():await x.text(),w){const e=ot(w);Ht(n,w,Tt(e,P,ae))}if(ce&&at(P))for(const e in P)if(ft(P,e)){const t=o(e);Re.has(t)&&Ht(n,Te(h,null,t,null),Tt(Re.get(t),P[e],ae))}}Oe(C,!1),Oe(O,!0),Oe(N,null),Oe(k,Number.isFinite(x.status)?x.status:null),Oe(U,null),Ae=null,!(Ee>0&&j)||E&&E.signal.aborted||setTimeout(Pe,Ee)}catch(e){Ae=null;const t=e&&"AbortError"===e.name;Oe(U,null),Oe(F,!1),Oe(C,!1),Oe(O,!0),t||(Oe(N,e&&e.message?e.message:""+e),Oe(k,Number.isFinite(e&&e.status)?e.status:null),Et("dmAct fail:",e),Ee>0&&setTimeout(Pe,Ee))}};if(!v.length)return void Pe();const Me=jt(Kt,t);let Le=!1;for(const e of v){if(!e.isSi&&!e.isEv&&!e.isSp)return Et("dmAct bad trigger:",e.kind,n);if(e.isSp){if(!e.sp?.act)return Et("dmAct unsupported SP",e.root,"in",n);Le||(Le=!0,Pe());continue}const r=Ze(e,E);if(e.isSi){_t(t,e,r,Pe,Me),!Le&&e.isImmediate&&(Le=!0,Pe());continue}const o=e.root?De(e.root,n):t;if(!o)return Et("dmAct el not found:",e,"in:",n);const l=e.path?.[0]??Ve(o);if(!l)return Et("dmAct event not found:",e,"in:",n);const s=_t(t,e,r,Pe,Me,o,l,null,null,o);!Le&&e.isImmediate&&(Le=!0,Lt(s,null,qe(o,null),t,e))}},sn=new WeakSet,un=new WeakSet,cn=(e,n)=>{if(!n||n.indexOf("-")<0)return Et("dmWc needs custom-element name:",n);if(customElements.get(n)||sn.has(e))return;sn.add(e);const r=(e.getAttribute(me+"wc-props")||"").match(/[^,\s]+/g)||t,o=class extends HTMLElement{connectedCallback(){if(!un.has(this)){un.add(this),!this.firstElementChild&&e.content&&(this.appendChild(e.content.cloneNode(!0)),St(this));for(const e of r){let t=this["$"+e];ft(this,e)&&(t=this[e],delete this[e]),void 0!==t&&(this[e]=t)}}}};for(const e of r)Object.defineProperty(o.prototype,e,{get(){return this["$"+e]},set(t){this["$"+e]=t,this.dispatchEvent(new CustomEvent(e,{detail:t})),this.firstElementChild&&this.firstElementChild.dispatchEvent(new CustomEvent(e,{detail:t}))}});customElements.define(n,o)};globalThis.dmAct=(e,t,n)=>nn(e,e=>ln(e,tn(t,""),n)),Zt.si=(e,t,n)=>{const r=je(t),l=r[i];(r[s].length||r[u].length||r[c].length)&&bt("targets only:",t);let a=$e(n,t);if(!a)return;let f=n?a(ze,e,null):null;if(l.length)for(const e of l)e.kind==h?(e.mods.length&&bt("mods ignored:",e.mods,t),Re.set(e.root,f)):Et("signal targets only:",e,t);else{if(!f||"object"!=typeof f)return Et("object value expected:",t,n);for(const e in f)Re.set(o(e),f[e])}},Zt.ex=(e,t,n)=>{const r=je(t),o=r[i],l=r[u],a=r[s];r[c].length&&bt("targets/triggers/mods only:",t);const f=null!=n&&""+n;let d=f?$e(n,t):(e,t,n,r)=>r;if(f&&!d)return;const h=e?jt(Kt,e):null;if(!o.length&&l.length){const n=[],r=[],o=[];for(const s of l){const l=Ze(s,a);if(!(16&l.f)){n.push({tr:s,mod:l}),s.isSi&&o.push([s,It(s.mods)]);continue}if(!s.isEv)return Et(ve,t);const i=et(e,t,s,l,be,Ee);if(!i)return;r.push({tr:s,mod:l,w:It(s.mods),taEl:i.taEl,readEl:i.readEl,ev:i.ev,prPath:i.prPath,readPath:i.readPath,tar:i.tar})}if(r.length&&n.length){let l=!1;const s=(n,o,l,s)=>{const i=d(n,e,o,l,s);for(const n of r)Be(e,t,n.tar,Tt(qe(n.taEl,n.prPath),i,n.w))};for(const r of n){const n=r.tr,o=r.mod;if(n.isSi){const t=_t(e,n,o,(e,t,n,r,o)=>s(e,n,r,o),h);l||0==n.isImmediate||(l=!0,$t(t))}else{if(!n.isEv&&!n.isSp)return Et("bad trigger kind",n.kind,"in",t);{const r=n.isEv?et(e,t,n,o,be,Ee):null;if(n.isEv&&!r)return;if(null==(l=tt(e,n,o,(e,t,n,r,o)=>s(e,n,r,o),h,l,r)))return}}}if(o.length)for(const n of r){const r=_t(e,n.tr,n.mod,(n,r,l,s,i)=>{const u=d(n,e,l,s,i);for(const e of o)Ht(t,e[0],Tt(rt(e[0]),u,e[1]))},h,n.taEl,n.ev,n.prPath,n.readPath,n.readEl);0!=n.tr.isImmediate&&Lt(r,null,qt(n.readEl,n.mod,n.readPath),e,n.tr)}return}}if(o.length){const e=d;for(const e of o)e._m=It(e.mods),e._j=!(!e.mods||!e.mods.some(e=>e.root===I)),e.isSi||(e._el=e.isSp?e.root===re?window:e.root===oe?document:e.root===le?window.history:null:e.root?De(e.root,t):null);d=(n,r,l,s,i)=>{const u=e(n,r,l,s,i);try{for(const e of o){const n=e._j?st(u):u,o=Tt(e.isSi?rt(e):qe(e._el||r,e.path),n,e._m);e.isSi?Ht(t,e,o):Be(r,t,e,o)}}catch(e){Et("setting target in",t,"ended with ex:",e)}}}if(!l.length)return void(f&&d(ze,e,null,null,null));let m=!1;for(const n of l){const r=Ze(n,a);if(n.isSi){const t=_t(e,n,r,d,h);m||0==n.isImmediate||(m=!0,$t(t));continue}if(!n.isEv&&!n.isSp)return Et("bad trigger kind",n.kind,"in",t);const o=n.isEv&&et(e,t,n,r,Se,we,!1);if(n.isEv&&!o)return;if(null==(m=tt(e,n,r,d,h,m,o)))return}},Zt.it=(e,t)=>{const n=je(t),r=n[u],o=n[c],l=n[s];if(!r.length)return Et("dmIt needs signal trigger:",t);const i=r[0];if(!i.isSi)return Et("dmIt trigger must be signal:",t);const a=Ze(i,l);let f=null;if(o.length&&o[0].isEv&&o[0].root&&(f=De(o[0].root,t)),f||(f=e.querySelector("template")),f&&f.parentNode===e&&f.parentNode.removeChild(f),!f)return Et("dmIt tpl not found:",t);const d=f.content&&f.content.firstElementChild;if(!d)return Et("dmIt tpl root not found:",t);let h=xe.get(e);h||xe.set(e,h={nodes:[],count:0});const m=((e,t)=>{let n=e;if(t)for(let e=0;e{let n="dm."+e;if(t)for(let e=0;ext(e,i,h,d,m,p),jt(Kt,e)),(i.isImmediate??1)&&xt(e,i,h,d,m,p)},Zt.wc=(e,t,n)=>"TEMPLATE"===e.tagName?cn(e,n&&n.trim()):Et("dmWc template-only, use data-m-ex for host props:",t),Zt.cl=(e,t,n)=>{const r=je(t),o=r[c],l=r[i],a=r[u],f=r[s];if(!o.length)return Et("dmCl needs class names via +:",t);if(!a.length)return Et("dmCl needs trigger:",t);const d=rn(e,t,l);if(!d)return Et("dmCl target not found:",t);const h=n?$e(n,t):null;if(n&&!h)return;const m=jt(Kt,e);for(const n of a){const r=Ze(n,f);if(n.isSi){const t=_t(e,n,r,(e,t,n,r,l)=>He(o,d,h?h(e,t,n,r,l):r),m);0!=n.isImmediate&&$t(t)}else{const l=n.isEv?et(e,t,n,r,Se,we,!1):null;if(n.isEv&&!l)return;if(null==tt(e,n,r,(t,r,l,s,i)=>He(o,d,!h||h(t,e,n,s,i)),m,!1,l))return}}},Zt.sh=(e,t,n)=>{const r=je(t),o=r[i],l=r[u],c=r[s];if(!l.length)return Et("dmSh needs trigger:",t);const a=rn(e,t,o);if(!a)return Et("dmSh target not found:",t);const f=a.style&&a.style.display||"",d=Je(a),h=f||("none"!==d&&d?d:"block"),m=n?$e(n,t):null;if(n&&!m)return;const p=jt(Kt,e);for(const n of l){const r=Ze(n,c);if(n.isSi){const t=_t(e,n,r,(e,t,n,r,o)=>Xe(a,f,h,m?m(e,t,n,r,o):r),p);0!=n.isImmediate&&$t(t)}else{const o=n.isEv?et(e,t,n,r,Se,we,!1):null;if(n.isEv&&!o)return;if(null==tt(e,n,r,(t,r,o,l,s)=>Xe(a,f,h,!m||m(t,e,n,l,s)),p,!1,o))return}}},Zt.dbg=e=>{e&&(Nt.add(e),Bt())},Zt.no=()=>{},Zt.get=Zt.post=Zt.put=Zt.patch=Zt.delete=ln;const an=(e,t)=>e.nodeType===t.nodeType&&(1!==e.nodeType||(e.id&&t.id?e.id===t.id:e.tagName===t.tagName)),fn=(e,t)=>e.nodeType===t.nodeType&&(1!==e.nodeType||(e.id||t.id?e.id===t.id:e.tagName===t.tagName)),dn=document.createElement("template"),hn=new Map,mn=(e,n=e&&(e=>{if(!e||"#"!==e[0])return null;const t=hn.get(e);if(void 0!==t)return t;for(let t=1;t+~:.[],|".includes(e[t]))return null;const n=e.length>1?e.slice(1):null;return hn.set(e,n),n})(e),r=n&&document.getElementById(n))=>e?n?r?[r]:t:document.querySelectorAll(e):t,pn=(e,t)=>{let n=e.firstChild,r=t.firstChild;for(;n&&r&&fn(n,r);){const e=n.nextSibling;vn(n,r),n=e,r=r.nextSibling}if(!n){for(;r;r=r.nextSibling)e.appendChild(r.cloneNode(!0));return}if(!r){for(;n;){const t=n.nextSibling;e.removeChild(n),n=t}return}let o=null,l=0;for(let e=n;e;e=e.nextSibling)1===e.nodeType&&e.id&&((o??=G())[e.id]=e,l=1);for(;r;r=r.nextSibling){let t=null,s=1===r.nodeType?r.id:"";if(s&&o&&(t=o[s]))delete o[s];else{for(;l&&n&&1===n.nodeType&&n.id&&o[n.id];)n=n.nextSibling;n&&an(n,r)&&(t=n)}t?(t!==n?e.insertBefore(t,n||null):n=n.nextSibling,vn(t,r)):e.insertBefore(r.cloneNode(!0),n||null)}for(;n;){const t=n.nextSibling;e.removeChild(n),n=t}if(o)for(const t in o){const n=o[t];n.parentNode===e&&e.removeChild(n)}};let gn=null;const yn=e=>e&&(gn=null),vn=(e,t)=>{const n=null===gn;if(n&&(gn=document.activeElement),3===e.nodeType&&3===t.nodeType)return e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue),yn(n);if(1!==e.nodeType||1!==t.nodeType||vt(e)||vt(t))return yn(n);if(e.tagName!==t.tagName)return e.parentNode&&e.parentNode.replaceChild(t.cloneNode(!0),e),yn(n);const r=e.firstChild,o=t.firstChild,l=r&&o&&!r.nextSibling&&!o.nextSibling&&3===r.nodeType&&3===o.nodeType,s=((e,t)=>{const n=e.attributes,r=t.attributes,o=r.length;if(n.length!==o)return!1;for(let e=0;e{const n=t.attributes,r=e.attributes,o=n.length,l=r.length;if(l===o){let e=!0,t=!1;for(let l=0;l=0;n--)t.hasAttribute(r[n].name)||e.removeAttribute(r[n].name)}else for(let t=l-1;t>=0;t--)e.removeAttribute(r[t].name)})(e,t),l?r.nodeValue!==o.nodeValue&&(r.nodeValue=o.nodeValue):(r||o)&&pn(e,t),(h||m)&&(e.scrollTop!==h&&(e.scrollTop=h),e.scrollLeft!==m&&(e.scrollLeft=m)),i&&u>=0)try{e.setSelectionRange(u,c,a)}catch(e){}else i&&null!==f&&(e.value=f,e.value!==f&&d>=0&&d{if(e&&t)if(n===P)e.replaceWith(r?t:t.cloneNode(!0));else if(n===W){const n=e.cloneNode(!1);for(let e=t.firstChild;e;e=e.nextSibling)n.appendChild(e.cloneNode(!0));pn(e,n)}else vn(e,t)},wn=e=>{const n=(e.mode||q).toLowerCase(),r=e.selector?""+e.selector:"",o=e.namespace?""+e.namespace:"html",l=e[En]||"";if(n===P&&"html"===o&&l){const e=r&&mn(r),t=!r&&/^\s*<[^>]*\sid\s*=\s*(?:"([^"]+)"|'([^']+)')/i.exec(l),n=r?1===e.length&&e[0]:document.getElementById(t&&(t[1]||t[2]||""));if(n)return void(n.outerHTML=""+l)}const s=((e,n)=>{if(!e)return t;const r=(n||"html").toLowerCase();if("html"===r){dn.innerHTML=e;const n=dn.content.firstElementChild;if(!n)return t;if(!n.nextElementSibling)return[n];const r=[n];for(let e=n.nextElementSibling;e;e=e.nextElementSibling)r.push(e);return r}const o="svg"===r?`${e}`:`${e}`,l=(new DOMParser).parseFromString(o,"svg"===r?"image/svg+xml":"application/xml").documentElement;return l?Array.from(l.children):[]})(l,o);if(n!==V)if(n!==L&&n!==$&&n!==z&&n!==D){if(r){if(!s.length)return;const e=mn(r);if(1===e.length&&1===s.length)return void Sn(e[0],s[0],n,!0);const t=s[0];for(let r=0;r{if(null===t)return bn;if(!at(t))return t;const n=at(e)?dt(e):G();for(const e in t)if(ft(t,e)){const r=xn(n[e],t[e]);r===bn?delete n[e]:n[e]=r}return n},An=(e,t,n)=>{const r=t[1],o=t[0];t[2]&&r&&("dm-elements"===o?(wn(r),e.push({event:o,args:r})):"dm-signals"===o&&(((e,t)=>{const n=t.dmSignals;if(!n)return;let r=null;try{r=JSON.parse(n)}catch(t){return Et("patch sigs in",e,"expect JSON but found invalid format")}if(!at(r))return;const o="true"===(t.onlyIfMissing||"").toLowerCase();for(const t in r)if(ft(r,t)){if(o&&Re.has(t))continue;const n=xn(Re.get(t),r[t]),l=Te(h,null,t,null);n!==bn?Ht(e,l,n):Re.has(t)&&(Ht(e,l,void 0),Re.delete(t),Bt())}})(n,r),e.push({event:o,args:r}))),t[0]="message",t[1]=null,t[2]=!1},Tn=(e,t,n,r)=>{const o="\r"===e[e.length-1]?e.slice(0,-1):e;if(!o)return An(n,t,r);if(":"===o[0])return;const l=o.indexOf(":"),s=l<0?o:o.slice(0,l);let i=l<0?"":o.slice(l+1);if(" "===i[0]&&(i=i.slice(1)),"event"===s)t[0]=i||"message";else if("data"===s){const e=i.indexOf(" ");if(e<0)return;const n=i.slice(0,e),r=i.slice(e+1),o=t[1]||(t[1]=G());t[2]=!0,o[n]?o[n]+="\n"+r:o[n]=r}},In=(e,n="dmax-sse")=>{if(!e)return t;const r=[],o=""+e,l=["message",null,!1];let s,i=0;for(;(s=o.indexOf("\n",i))>=0;)Tn(o.slice(i,s),l,r,n),i=s+1;return i{if(!e||"function"!=typeof e.getReader)return t;const o=(e,t)=>r&&Ht(n,r[e],t),l=[],s=e.getReader(),i=new TextDecoder,u=["message",null,!1];let c="",a=!1;try{for(;;){const{done:e,value:t}=await s.read();if(e)break;let r;for(a||(a=!0,o(F,!0),o(_,!1)),c+=i.decode(t,{stream:!0});(r=c.indexOf("\n"))>=0;)Tn(c.slice(0,r),u,l,n),c=c.slice(r+1)}const e=i.decode();e&&(c+=e),c&&Tn(c,u,l,n),An(l,u,n)}catch(e){return o(F,!1),o(N,e.message||""+e),Et("SSE stream error:",e),l}return o(F,!1),o(_,!0),l},On=e=>{if(!e||1!==e.nodeType&&11!==e.nodeType)return;const n=[e];for(;n.length;){const e=n.pop(),r=Kt.get(e);if(r){for(const e of r)Pt(e);Kt.delete(e)}const o=e.shadowRoot;o&&n.push(o);const l=e.children||t;for(let e=0;e{for(const t of e)for(const e of t.removedNodes)On(e)}),kn=new WeakSet;en=e=>{!e||kn.has(e)||1!==e.nodeType&&11!==e.nodeType||(kn.add(e),Nn.observe(1===e.nodeType?e:e===document?document.body:e,{childList:!0,subtree:!0}))},en(document.body); diff --git a/dist/dmax.min.js.br b/dist/dmax.min.js.br index 3a3ed257aa136ccf220f3edf06838963196be49f..2d18c89efc69b3d0eb511582e9fcc2420f5bef73 100644 GIT binary patch literal 13789 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 ZtdTrSOqIHq6FQFP{~@9~4ZIspP7XVo)&V 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 literal 17672 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 HV!;3arnNfV diff --git a/dmax.js b/dmax.js index 9c29850..09cd408 100644 --- a/dmax.js +++ b/dmax.js @@ -30,7 +30,6 @@ const MOD = '^', TARG = ':', TRIG = '@', ADD = '+' const ALL = [MOD, TARG, TRIG, ADD] - const MODS = [MOD] const DOT = '.', ID = '#', NOT = '!', BRACKET_OPEN = '[', BRACKET_CLOSE = ']' const NAME_DELIMS = [DOT, BRACKET_OPEN] @@ -77,15 +76,15 @@ }) const ACT_METHODS = Object.freeze({ get: 'GET', post: 'POST', put: 'PUT', patch: 'PATCH', delete: 'DELETE' }), DM_KEY = 'data-m-' const DM_NO = DM_KEY + 'no', DM_NO_SCAN = DM_NO + '^scan', DM_NO_MORPH = DM_NO + '^morph' - const E_RW_REQ = `dmEx ${MOD}${M_RW} requires an element/property trigger in:` - const E_RW_EL = `dmEx ${MOD}${M_RW} source element is not found in trigger:` - const E_RW_EV = `dmEx ${MOD}${M_RW} event is not found in trigger:` - const E_TRIG_EL = 'Element is not found in trigger:', E_TRIG_EV = 'Event is not found in trigger:', E_FORM_EL = 'Form element is not found for trigger:' + const E_RW_REQ = `dmEx ${MOD}${M_RW} requires element/property trigger:` + const E_RW_EL = `dmEx ${MOD}${M_RW} element not found:` + const E_RW_EV = `dmEx ${MOD}${M_RW} event not found:` + const E_TRIG_EL = 'element not found:', E_TRIG_EV = 'event not found:', E_FORM_EL = 'form element not found:' const IT_STATES = new WeakMap(), IT_ATTRS = new WeakMap() const isSp = (n) => { if (n.startsWith(SP)) for (const s of SPS) if (n.startsWith(s, 1)) return true; return false } const mkIt = (kind, not, root, path, mods = NIL) => ({ kind, not, root, path, mods, sp: kind === SP ? SP_DEFS[root] || null : null, isSi: kind === SI, isEv: kind === EP, isSp: kind === SP, isImmediate: null }) const mkMod = (not, root, path) => ({ kind: MOD, not, root, path, isImmediate: root === M_IMMEDIATE ? true : root === M_NOT_IMMEDIATE ? false : null }) - const DEFAULT_PR_TA = Object.freeze(mkIt(EP, null, '', null)), RE_DIGITS = /^\d+$/ + const RE_DIGITS = /^\d+$/ const parseRef = (dKey, n, pos = 0) => { if (!n) return null let p = pos, l = n.length @@ -281,7 +280,7 @@ const VAL_CHANGE_DEPTH_MAX = 32 const valChangedDeep = (before, after, depth = 0) => { - if (depth >= VAL_CHANGE_DEPTH_MAX) { console.warn('[dmax] Warning: too deep to compare for signal value change, consider it changed, stopped at:', VAL_CHANGE_DEPTH_MAX); return true } + if (depth >= VAL_CHANGE_DEPTH_MAX) { console.warn('[dmax] deep compare limit:', VAL_CHANGE_DEPTH_MAX); return true } const b = before, a = after if (Array.isArray(b)) { // means b is also an array if (!Array.isArray(a) || b.length != a.length) return true @@ -302,7 +301,7 @@ let obj = tar.isSp ? tar.root === SP_WIN ? window : tar.root === SP_DOC ? document : tar.root === SP_HISTORY ? window.history : null : tar.root ? getElById(tar.root, dKey) : el const path = tar.path; let prop = !path ? getDefaultPr(obj) : null if (path && path.length) ([obj] = getPrValAndDepth(obj, path, path.length - 1), prop = path.at(-1)) - if (!obj || !prop) return logErr('Error setting non existing property for:', tar, 'in', dKey) + if (!obj || !prop) return logErr('setting non-existing prop:', tar, 'in', dKey) try { if (typeof obj[prop] === 'function') return Array.isArray(val) ? obj[prop](...val) : obj[prop](val) if (prop === 'style' && isPlainObj(val) && obj[prop]) for (const k in val) { @@ -313,7 +312,7 @@ const cssVar = prop[0] === '-' ? prop : '--' + camelToKebab(prop) if (obj.getPropertyValue(cssVar) !== '' + val) obj.setProperty(cssVar, val) } else if (valChangedDeep(obj[prop], val)) obj[prop] = val - } catch (e) { logErr('Error: Failed to set property:', e.message, '>>>', tar, 'on', el) } + } catch (e) { logErr('Failed to set property:', e.message, '>>>', tar, 'on', el) } return obj[prop] } const getComputedDisplay = (el) => (typeof window !== 'undefined' && window.getComputedStyle) ? window.getComputedStyle(el).display : '' @@ -404,15 +403,15 @@ } const getTrPrTa = (el, dKey, tr, mod, missElMsg, missEvMsg, usePrPath = true) => { const taEl = tr.root ? getElById(tr.root, dKey) : el - if (!taEl) return logErr('Error:', missElMsg, tr, 'in:', dKey), null + if (!taEl) return logErr(missElMsg, tr, 'in:', dKey), null let ev = tr.path ? tr.path[0] : null, prPath = null if (ev && isDefaultPrName(taEl, ev)) prPath = tr.path, ev = getDefaultEv(taEl) const readEl = (mod.s === MV_PR || mod.s === MV_ATTRS) && mod.r ? getElById(mod.r, dKey) : taEl const readPath = mod.s === MV_PR || mod.s === MV_EV ? mod.v.length ? mod.v : prPath : mod.s === MV_ATTRS || mod.s === MV_SEL || mod.s === MV_SEL_ALL ? mod.v : prPath if (usePrPath && mod.s === MV_PR && !mod.r && mod.v.length) prPath = mod.v ev = ev ?? getDefaultEv(taEl) - if (!ev) return logErr('Error:', missEvMsg, tr, 'in:', dKey), null - return readEl ? { taEl, readEl, ev, prPath, readPath, tar: mkIt(EP, null, tr.root, prPath, NIL) } : logErr('Error:', missElMsg, tr, 'in:', dKey) + if (!ev) return logErr(missEvMsg, tr, 'in:', dKey), null + return readEl ? { taEl, readEl, ev, prPath, readPath, tar: mkIt(EP, null, tr.root, prPath, NIL) } : logErr(missElMsg, tr, 'in:', dKey) } const addNonSiTrSub = (el, tr, mod, fn, elSubs, ran, prTa = null) => { const sp = tr.sp, isSp = !!sp @@ -447,13 +446,6 @@ } const dmJsos = (v, sp = 2) => typeof v === 'string' ? v : JSON.stringify(v, null, +(resolveMPathVal(sp) ?? 2) || 0) - const resolveHtmlSelector = (mPath) => { - const v = resolveMPathVal(mPath) - if (typeof v === 'string' && v) { - const c = v[0]; return SEL_LEADS.includes(c) ? v : '#' + v - } - return '' - } const mkOrStatSi = (mod, fallbackRoot) => { if (!mod) return null const p = mod.path @@ -461,23 +453,17 @@ } const mkStatTar = (root, path, key) => ({ root, path: path ? path.concat(key) : [key] }) const STAT_KEYS_F = [M_BUSY, M_COMPLETE, M_SSE_OPEN, M_SSE_CLOSE], STAT_KEYS_N = [M_ERR, M_CODE, M_ABORT] - const defStatSi = (stat) => { + const mkActStats = (mod) => { + const stat = mkOrStatSi(mod, M_STAT) if (!stat) return null - let cur = _dm.get(stat.root) - if (!cur || typeof cur !== 'object') _dm.set(stat.root, cur = noProto()) - let parent = cur - const path = stat.path + let cur = _dm.get(stat.root); if (!cur || typeof cur !== 'object') _dm.set(stat.root, cur = noProto()) + let parent = cur; const path = stat.path if (path && path.length) for (let i = 0; i < path.length; ++i) parent = parent[path[i]] && typeof parent[path[i]] === 'object' ? parent[path[i]] : (parent[path[i]] = noProto()) for (const k of STAT_KEYS_F) if (!hasOwn(parent, k)) parent[k] = false for (const k of STAT_KEYS_N) if (!hasOwn(parent, k)) parent[k] = null - return stat - } - const mkActStats = (mod) => { - const stat = defStatSi(mkOrStatSi(mod, M_STAT)) - if (!stat) return null - const { root, path } = stat, out = noProto() - for (const k of STAT_KEYS_F) out[k] = mkStatTar(root, path, k) - for (const k of STAT_KEYS_N) out[k] = mkStatTar(root, path, k) + const { root, path: sp } = stat, out = noProto() + for (const k of STAT_KEYS_F) out[k] = mkStatTar(root, sp, k) + for (const k of STAT_KEYS_N) out[k] = mkStatTar(root, sp, k) return out } @@ -633,21 +619,6 @@ } const getWriteMode = (mods) => { for (const m of mods || NIL) if (m.root === M_REPLACE || m.root === M_MERGE || m.root === M_APPEND || m.root === M_PREPEND || m.root === M_INC || m.root === M_DEC) return m.root; return M_REPLACE } - const patchMatchingSis = (dKey, payload, resultMode) => { - if (!isPlainObj(payload)) return - for (const key in payload) if (hasOwn(payload, key)) { - const root = kebabToCamel(key) - if (!_dm.has(root)) continue - setSiAndNotifySubsNDeep(dKey, mkIt(SI, null, root, null), combineActResult(_dm.get(root), payload[key], resultMode)) - } - } - - const applyActPayload = (dKey, resultTa, payload, resultMode) => { - if (!resultTa) return - const prev = getSiValOrIt(resultTa) - setSiAndNotifySubsNDeep(dKey, resultTa, combineActResult(prev, payload, resultMode)) - } - const permitVal = (m, val, n = m.root, v = resolveMPathVal(m.path)) => n === M_AND ? !!v != !!m.not : n == M_EQ ? val == v : n == M_NE ? val != v : n == M_GT ? +val > +v : n == M_LT ? +val < +v : n == M_GE ? +val >= +v : +val <= +v const modsPermitVal = (mods, val) => !mods.push ? permitVal(mods, val) : !mods.some((m) => !permitVal(m, val)) @@ -719,7 +690,7 @@ return sub.fn } if (sp.io) { - if (typeof IntersectionObserver === 'undefined') { warn('IntersectionObserver missing, skip _viewed:', el); return null } + if (typeof IntersectionObserver === 'undefined') { warn('no IntersectionObserver:', el); return null } const sub = { el, trig: tr, fn: null, siChangeM: null, ev: null, clearId: null } sub.fn = applyTrMs(fn, tr, mod, sub) const observer = new IntersectionObserver((entries) => { @@ -735,7 +706,7 @@ if (sp.init) return applyTrMs(fn, tr, mod) const taEl = sp.ta === SP_TA_WIN ? window : sp.ta === SP_TA_DOC ? document : sp.ta === SP_TA_FORM ? (el && el.closest ? el.closest('form') : null) : null const ev = tr.path?.[0] || sp.ev || null, readPath = mod.s === MV_PR ? mod.v.length ? mod.v : null : mod.s === MV_ATTRS || mod.s === MV_SEL || mod.s === MV_SEL_ALL ? mod.v : null - if (sp.ta === SP_TA_FORM && !taEl) return logErr('Error:', E_FORM_EL, tr, 'on:', el), null + if (sp.ta === SP_TA_FORM && !taEl) return logErr(E_FORM_EL, tr, 'on:', el), null if (!expected(taEl && ev, 'Expected event target/name in addSpSub:', tr, 'on:', el)) return null const opts = mod.f & MF_PREVENT ? false : PASSIVE_LISTENER_OPTS const sub = { el, trig: tr, fn: null, siChangeM: null, ev: { taEl, evName: ev, opts }, clearId: null } @@ -856,16 +827,6 @@ try { return setSiAndNotifySubs(dKey, tar, val) } finally { syncDepth-- } } - /** - * @typedef {(dm?: any, el?: any, trig?: any, trigVal?: any, detail?: any) => void} TriggerHandler - */ - - /** - * @param {TriggerHandler} fn - * @param {{ kind: string, root?: string, path?: any, not?: any }} trig - * @param {{ el?: any, trig: any, fn?: any, siChangeM?: any, ev?: { taEl: EventTarget, evName: string, opts: any } | null, clearId?: any } | undefined} [removeSub] - * @returns {TriggerHandler} - */ const onRaf = (fn) => (typeof requestAnimationFrame === 'function' ? requestAnimationFrame : setTimeout)(fn, 16) const getEvVal = (detail, dd = detail && detail.detail) => dd === undefined ? detail : dd && typeof dd === 'object' ? dd.value ?? dd.ms ?? dd : dd const applyTrMs = (fn, tr, mod, removeSub) => { @@ -936,7 +897,7 @@ if (tr.isSi) writeSiTrs.push([tr, getWriteMode(tr.mods)]) continue } - if (!tr.isEv) return logErr('Error:', E_RW_REQ, dKey) + if (!tr.isEv) return logErr(E_RW_REQ, dKey) const prTa = getTrPrTa(el, dKey, tr, mod, E_RW_EL, E_RW_EV) if (!prTa) return writePrTrs.push({ tr, mod, w: getWriteMode(tr.mods), taEl: prTa.taEl, readEl: prTa.readEl, ev: prTa.ev, prPath: prTa.prPath, readPath: prTa.readPath, tar: prTa.tar }) } @@ -955,7 +916,7 @@ const prTa = tr.isEv ? getTrPrTa(el, dKey, tr, mod, E_RW_EL, E_RW_EV) : null if (tr.isEv && !prTa) return if ((ran = addNonSiTrSub(el, tr, mod, (dm, _el, syncTr, trigVal, detail) => syncPrTas(dm, syncTr, trigVal, detail), elSubs, ran, prTa)) == null) return - } else return logErr('Error: unsupported trigger kind', tr.kind, 'in', dKey) + } else return logErr('bad trigger kind', tr.kind, 'in', dKey) } if (writeSiTrs.length) { for (const prTr of writePrTrs) { @@ -976,7 +937,7 @@ fn = (dm, el, trig, trigVal, detail) => { const exprVal = rawFn(dm, el, trig, trigVal, detail) try { for (const tar of tars) { const outVal = tar._j ? dmJsos(exprVal) : exprVal; const nextVal = tar.isSi ? combineActResult(getSiVal(tar), outVal, tar._m) : combineActResult(getElPrVal(tar._el || el, tar.path), outVal, tar._m); if (tar.isSi) setSiAndNotifySubsNDeep(dKey, tar, nextVal); else setPr(el, dKey, tar, nextVal) } } - catch (e) { logErr('Error: setting target in', dKey, 'ended with ex:', e) } + catch (e) { logErr('setting target in', dKey, 'ended with ex:', e) } } } if (!trigs.length) { if (hasExpr) fn(DM, el, null, null, null); return } let ran = false @@ -987,7 +948,7 @@ if (!ran && tr.isImmediate != false) ran = true, invokeBoundSub(sub) continue } - if (!tr.isEv && !tr.isSp) return logErr('Error: unsupported trigger kind', tr.kind, 'in', dKey) + if (!tr.isEv && !tr.isSp) return logErr('bad trigger kind', tr.kind, 'in', dKey) const prTa = tr.isEv && getTrPrTa(el, dKey, tr, mod, E_TRIG_EL, E_TRIG_EV, false) if (tr.isEv && !prTa) return if ((ran = addNonSiTrSub(el, tr, mod, fn, elSubs, ran, prTa)) == null) return @@ -997,10 +958,10 @@ // - data-m-cl+active+!inactive@is-active="dm.isActive" const dmCl = (el, dKey, dVal) => { const it = parseCached(dKey), adds = it[ADD], tars = it[TARG], trigs = it[TRIG], globMods = it[MOD] - if (!adds.length) return logErr('Error: dmCl requires class names via + syntax in:', dKey) - if (!trigs.length) return logErr('Error: dmCl requires at least one trigger in:', dKey) + if (!adds.length) return logErr('dmCl needs class names via +:', dKey) + if (!trigs.length) return logErr('dmCl needs trigger:', dKey) const taEl = getTaFromTars(el, dKey, tars) - if (!taEl) return logErr('Error: dmCl target element not found in:', dKey) + if (!taEl) return logErr('dmCl target not found:', dKey) const fn = dVal ? compileFn(dVal, dKey) : null if (dVal && !fn) return const elSubs = upsert(_cleanupBoundSubs, el) @@ -1020,9 +981,9 @@ // - data-m-sh:.@is-visible="!dm.isVisible" const dmSh = (el, dKey, dVal) => { const it = parseCached(dKey), tars = it[TARG], trigs = it[TRIG], globMods = it[MOD] - if (!trigs.length) return logErr('Error: dmSh requires at least one trigger in:', dKey) + if (!trigs.length) return logErr('dmSh needs trigger:', dKey) const taEl = getTaFromTars(el, dKey, tars) - if (!taEl) return logErr('Error: dmSh target element not found in:', dKey) + if (!taEl) return logErr('dmSh target not found:', dKey) const inline = (taEl.style && taEl.style.display) || '' const computed = getComputedDisplay(taEl) const origDisp = inline ? inline : (computed === 'none' || !computed ? 'block' : computed) @@ -1092,11 +1053,11 @@ for (const k in tar) if (hasOwn(tar, k)) dmSet(k, tar[k], dKey) return tar } - if (tar?.kind) { if (tar.kind !== SI) return logErr('dmSet signal target expected:', tar, dKey), null } + if (tar?.kind) { if (tar.kind !== SI) return logErr('dmSet target expected:', tar, dKey), null } else { - if (typeof tar !== 'string' || !tar) return logErr('dmSet signal target expected:', tar, dKey), null + if (typeof tar !== 'string' || !tar) return logErr('dmSet target expected:', tar, dKey), null tar = parseCached(getApiDKey(tar, tar[0] === ':' ? 'si' : 'si:'))[TARG][0] - if (tar?.kind !== SI) return logErr('dmSet signal target expected:', tar, dKey), null + if (tar?.kind !== SI) return logErr('dmSet target expected:', tar, dKey), null } setSiAndNotifySubsNDeep(dKey, tar, val) return val @@ -1134,17 +1095,17 @@ // - data-m-it+#tpl-post@posts const dmIt = (el, dKey) => { const it = parseCached(dKey), trigs = it[TRIG], adds = it[ADD], globMods = it[MOD] - if (!trigs.length) return logErr('Error: dmIt requires a signal trigger in:', dKey) + if (!trigs.length) return logErr('dmIt needs signal trigger:', dKey) const tr = trigs[0] - if (!tr.isSi) return logErr('Error: dmIt trigger must be a signal in:', dKey) + if (!tr.isSi) return logErr('dmIt trigger must be signal:', dKey) const mod = compileTrMods(tr, globMods) let tpl = null if (adds.length && adds[0].isEv && adds[0].root) tpl = getElById(adds[0].root, dKey) if (!tpl) tpl = el.querySelector('template') if (tpl && tpl.parentNode === el) tpl.parentNode.removeChild(tpl) - if (!tpl) return logErr('Error: dmIt template not found for:', dKey) + if (!tpl) return logErr('dmIt tpl not found:', dKey) const tplFirst = tpl.content && tpl.content.firstElementChild - if (!tplFirst) return logErr('Error: dmIt template root not found for:', dKey) + if (!tplFirst) return logErr('dmIt tpl root not found:', dKey) let itState = IT_STATES.get(el) if (!itState) IT_STATES.set(el, itState = { nodes: [], count: 0 }) const itemRefBase = buildItRefBase(tr.root, tr.path) @@ -1158,7 +1119,7 @@ const dmAct = (el, dKey, dVal) => { const afterData = dKey.slice(DM_KEY.length), methodEnd = indexFirst(afterData, ALL, 0) const method = ACT_METHODS[methodEnd >= 0 ? afterData.slice(0, methodEnd) : afterData] - if (!method) return logErr('Error: dmAct: unrecognised method prefix in:', dKey) + if (!method) return logErr('dmAct bad method:', dKey) const it = parseCached(dKey), tars = it[TARG], trigs = it[TRIG], adds = it[ADD], globMods = it[MOD] const urlFn = dVal ? compileFn(dVal, dKey) : null if (dVal && !urlFn) return @@ -1231,7 +1192,7 @@ const hasAdds = adds.length > 0, hasRouteMods = actRouteMods.length > 0 const doRequest = async () => { const url = urlFn ? urlFn(DM, el, null, null, null) : '' - if (!url) return logErr('Error: dmAct: URL is empty in:', dKey) + if (!url) return logErr('dmAct empty URL:', dKey) ss(M_BUSY, true), ss(M_COMPLETE, false), ss(M_ERR, null), ss(M_CODE, null) try { const queryParams = noProto(), bodyFields = noProto(), addDst = isGetOrDelete ? queryParams : bodyFields @@ -1278,12 +1239,14 @@ payload = await res.text() const mode = htmlDomMod?.root || M_OUTER const hp = htmlDomMod && htmlDomMod.path, elTaRoot = hp ? '' : (findFirstKind(tars, EP)?.root ?? '') - const selector = hp ? resolveHtmlSelector(hp) : (mode === M_BEFORE || mode === M_AFTER) ? (el.id ? '#' + el.id : '') : (mode === M_APPEND || mode === M_PREPEND) ? (elTaRoot ? '#' + elTaRoot : '') : '' + let selector = '' + if (hp) { const v = resolveMPathVal(hp); if (typeof v === 'string' && v) { selector = SEL_LEADS.includes(v[0]) ? v : '#' + v } } + else selector = (mode === M_BEFORE || mode === M_AFTER) ? (el.id ? '#' + el.id : '') : (mode === M_APPEND || mode === M_PREPEND) ? (elTaRoot ? '#' + elTaRoot : '') : '' applyPatchEls({ [SSE_ELS]: payload, selector, mode }) } else { payload = isJsonContentType(ct) ? await res.json() : await res.text() - applyActPayload(dKey, resultTa, payload, resultMode) - if (patchAll) patchMatchingSis(dKey, payload, resultMode) + if (resultTa) { const prev = getSiValOrIt(resultTa); setSiAndNotifySubsNDeep(dKey, resultTa, combineActResult(prev, payload, resultMode)) } + if (patchAll && isPlainObj(payload)) for (const key in payload) if (hasOwn(payload, key)) { const root = kebabToCamel(key); if (_dm.has(root)) setSiAndNotifySubsNDeep(dKey, mkIt(SI, null, root, null), combineActResult(_dm.get(root), payload[key], resultMode)) } } ss(M_BUSY, false), ss(M_COMPLETE, true), ss(M_ERR, null), ss(M_CODE, Number.isFinite(res.status) ? res.status : null), ss(M_ABORT, null) activeAbort = null @@ -1306,7 +1269,7 @@ for (const tr of trigs) { if (!tr.isSi && !tr.isEv && !tr.isSp) return logErr('dmAct bad trigger:', tr.kind, dKey) if (tr.isSp) { - if (!tr.sp?.act) return logErr('Error: dmAct unsupported SP trigger', tr.root, 'in', dKey) + if (!tr.sp?.act) return logErr('dmAct unsupported SP', tr.root, 'in', dKey) if (!ran) ran = true, doRequest() continue } @@ -1317,9 +1280,9 @@ continue } const evTaEl = tr.root ? getElById(tr.root, dKey) : el - if (!evTaEl) return logErr('Error: dmAct element not found in trigger:', tr, 'in:', dKey) + if (!evTaEl) return logErr('dmAct el not found:', tr, 'in:', dKey) const ev = tr.path?.[0] ?? getDefaultEv(evTaEl) - if (!ev) return logErr('Error: dmAct event not found in trigger:', tr, 'in:', dKey) + if (!ev) return logErr('dmAct event not found:', tr, 'in:', dKey) const moddedHandler = addTrSub(el, tr, mod, doRequest, elSubs, evTaEl, ev, null, null, evTaEl) if (!ran && tr.isImmediate) ran = true, invokeSub(moddedHandler, null, getElPrVal(evTaEl, null), el, tr) } @@ -1329,7 +1292,7 @@ const dmActApi = (el, dKey, dVal) => bindAddedSubs(el, (host) => dmAct(host, getApiDKey(dKey, ''), dVal)) const WC_TMPLS = new WeakSet(), WC_INITS = new WeakSet() const defWc = (tpl, name) => { - if (!name || name.indexOf('-') < 0) return logErr('dmWc template expects custom-element name value:', name) + if (!name || name.indexOf('-') < 0) return logErr('dmWc needs custom-element name:', name) if (customElements.get(name) || WC_TMPLS.has(tpl)) return WC_TMPLS.add(tpl) const props = (tpl.getAttribute(DM_KEY + 'wc-props') || '').match(/[^,\s]+/g) || NIL @@ -1338,7 +1301,7 @@ customElements.define(name, WC) } // - - const dmWc = (el, dKey, dVal) => el.tagName === 'TEMPLATE' ? defWc(el, dVal && dVal.trim()) : logErr('Error: dmWc is template-only; use data-m-ex for WC host props in:', dKey) + const dmWc = (el, dKey, dVal) => el.tagName === 'TEMPLATE' ? defWc(el, dVal && dVal.trim()) : logErr('dmWc template-only, use data-m-ex for host props:', dKey) const dmNo = () => {} globalThis.dmAct = dmActApi dataM.si = dmSi; dataM.ex = dmEx; dataM.it = dmIt; dataM.wc = dmWc; dataM.cl = dmCl; dataM.sh = dmSh; dataM.dbg = dmDbg; dataM.no = dmNo @@ -1509,13 +1472,6 @@ return root ? Array.from(root.children) : [] } - const insertFragRelative = (taEl, srcEls, mode) => { - if (!taEl || !srcEls || !srcEls.length) return - const frag = document.createDocumentFragment(), before = mode === M_PREPEND ? taEl.firstChild || null : mode === M_BEFORE ? taEl : taEl.nextSibling - for (const src of srcEls) frag.appendChild(src.cloneNode(true)) - if (mode === M_APPEND) taEl.appendChild(frag) - else (mode === M_PREPEND ? taEl : taEl.parentNode)?.insertBefore(frag, before) - } const applyPatchPair = (taEl, srcEl, mode, reuse = false) => { if (!taEl || !srcEl) return if (mode === M_REPLACE) taEl.replaceWith(reuse ? srcEl : srcEl.cloneNode(true)) @@ -1537,12 +1493,16 @@ const srcEls = parseSseEls(rawEls, ns) if (mode === M_REMOVE) { if (sel) for (const t of document.querySelectorAll(sel)) t.remove() - else for (const src of srcEls) src.id ? document.getElementById(src.id)?.remove() : warn('patch-elements remove needs ids without selector') + else for (const src of srcEls) src.id ? document.getElementById(src.id)?.remove() : warn('patch remove needs ids without selector') return } if (mode === M_APPEND || mode === M_PREPEND || mode === M_BEFORE || mode === M_AFTER) { if (!sel || !srcEls.length) return - for (const t of document.querySelectorAll(sel)) insertFragRelative(t, srcEls, mode) + for (const t of document.querySelectorAll(sel)) { + const frag = document.createDocumentFragment(), before = mode === M_PREPEND ? t.firstChild || null : mode === M_BEFORE ? t : t.nextSibling + for (const src of srcEls) frag.appendChild(src.cloneNode(true)) + if (mode === M_APPEND) t.appendChild(frag); else (mode === M_PREPEND ? t : t.parentNode)?.insertBefore(frag, before) + } return } @@ -1561,7 +1521,7 @@ if (!srcEls.length) return for (const src of srcEls) { if (src.id) applyPatchPair(document.getElementById(src.id), src, mode, true) - else warn('patch-elements needs ids without selector') + else warn('patch needs ids without selector') } } @@ -1581,7 +1541,7 @@ const raw = args[SSE_SIS] if (!raw) return let patchObj = null - try { patchObj = JSON.parse(raw) } catch (_) { return logErr('Error: patch sigs in', dKey, 'expect JSON but found invalid format') } + try { patchObj = JSON.parse(raw) } catch (_) { return logErr('patch sigs in', dKey, 'expect JSON but found invalid format') } if (!isPlainObj(patchObj)) return const onlyIfMissing = (args.onlyIfMissing || '').toLowerCase() === 'true' for (const root in patchObj) if (hasOwn(patchObj, root)) { diff --git a/tests/fuzz.deterministic.js b/tests/fuzz.deterministic.js index 5986ec4..0a2ffd8 100644 --- a/tests/fuzz.deterministic.js +++ b/tests/fuzz.deterministic.js @@ -196,7 +196,7 @@ function* generateDataSubCombinations() { for (const special of SPECIAL_EVENTS) yield { attr: `data-m-ex:foo@${special}`, valid: true, category: 'special-trigger' } for (const special of SPECIAL_EVENTS_WITH_IO) - yield { attr: `data-m-ex:foo@${special}`, valid: false, category: 'special-trigger-no-io', expectedLog: 'warn', logPattern: 'IntersectionObserver missing, skip _viewed' } + yield { attr: `data-m-ex:foo@${special}`, valid: false, category: 'special-trigger-no-io', expectedLog: 'warn', logPattern: 'no IntersectionObserver' } yield { attr: 'data-m-ex+extra@foo', valid: false, category: 'unsupported-add-warning', expectedLog: 'warn', logPattern: 'targets/triggers/mods only' } @@ -247,14 +247,14 @@ function* generateDataClassCombinations() { yield { attr: 'data-m-cl:+active@is-active', valid: true, category: 'single-class' }; yield { attr: 'data-m-cl+active+!inactive@is-active', valid: true, category: 'inverse-class' }; yield { attr: 'data-m-cl:+foo:+bar@baz', valid: true, category: 'multi-class' }; - yield { attr: 'data-m-cl:', valid: false, category: 'missing-class-error', expectedLog: 'warnOrError', logPattern: 'dmCl requires class names via + syntax' }; + yield { attr: 'data-m-cl:', valid: false, category: 'missing-class-error', expectedLog: 'warnOrError', logPattern: 'dmCl needs class names via +' }; } function* generateDataDispCombinations() { // Valid yield { attr: 'data-m-sh@is-visible', valid: true, category: 'display-signal' }; yield { attr: 'data-m-sh@flag', valid: true, category: 'display-flag' }; - yield { attr: 'data-m-sh:', valid: false, category: 'missing-trigger-error', expectedLog: 'warnOrError', logPattern: 'dmSh requires at least one trigger' }; + yield { attr: 'data-m-sh:', valid: false, category: 'missing-trigger-error', expectedLog: 'warnOrError', logPattern: 'dmSh needs trigger' }; } function* generateDataDumpCombinations() { @@ -269,7 +269,7 @@ function* generateDataDumpCombinations() { // Valid - incremental growth (exercises single-item fast path) yield { attr: 'data-m-it+#tpl-item@items', valid: true, category: 'single-item-growth' }; - yield { attr: 'data-m-it+#tpl-post', valid: false, category: 'missing-trigger-error', expectedLog: 'warnOrError', logPattern: 'dmIt requires a signal trigger' }; + yield { attr: 'data-m-it+#tpl-post', valid: false, category: 'missing-trigger-error', expectedLog: 'warnOrError', logPattern: 'dmIt needs signal trigger' }; } function* generateDataActionCombinations() { diff --git a/tools/minify-dmax.js b/tools/minify-dmax.js index 0cf112c..93e05d4 100644 --- a/tools/minify-dmax.js +++ b/tools/minify-dmax.js @@ -16,12 +16,26 @@ const OUT_BR = path.join(ROOT, 'dist', 'dmax.min.js.br') const src = fs.readFileSync(SRC, 'utf8') const out = await minify(src, { compress: { - passes: 2, + passes: 4, unsafe: true, unsafe_math: true, - pure_getters: true + pure_getters: true, + toplevel: true, + reduce_vars: true, + collapse_vars: true, + inline: 3, + join_vars: true, + hoist_funs: true, + dead_code: true, + sequences: true, + conditionals: true, + comparisons: true, + booleans: true, + loops: true, + if_return: true, + keep_fargs: false, }, - mangle: true, + mangle: { toplevel: true }, format: { comments: false } }) if (!out.code) throw new Error('Minifier returned empty output') From fa299f9d31b6634a4551d4f1820b0e7b9ac07629 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 4 Aug 2026 22:14:24 +0000 Subject: [PATCH 9/9] chore: tighten size limits to 1665 lines / 88035 bytes Co-authored-by: dadhi <39516+dadhi@users.noreply.github.com> --- tests/dmax.size.limits.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/dmax.size.limits.json b/tests/dmax.size.limits.json index 2eefaa4..cc01aa3 100644 --- a/tests/dmax.size.limits.json +++ b/tests/dmax.size.limits.json @@ -1,4 +1,4 @@ { - "lines": 1705, - "bytes": 89850 + "lines": 1665, + "bytes": 88035 }