nodality 1.1.13 → 1.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/mcp-server.mjs +13 -3
- package/dist/animator.cjs.js.LICENSE.txt +1 -1
- package/dist/animator.esm.js.LICENSE.txt +1 -1
- package/dist/audionew.cjs.js.LICENSE.txt +1 -1
- package/dist/audionew.esm.js.LICENSE.txt +1 -1
- package/dist/base.cjs.js.LICENSE.txt +1 -1
- package/dist/base.esm.js.LICENSE.txt +1 -1
- package/dist/beta-desktop-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/beta-desktop-bar.esm.js.LICENSE.txt +1 -1
- package/dist/beta-mobile-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/beta-mobile-bar.esm.js.LICENSE.txt +1 -1
- package/dist/bundle.umd.js +1 -1
- package/dist/bundle.umd.js.LICENSE.txt +1 -1
- package/dist/button.cjs.js.LICENSE.txt +1 -1
- package/dist/button.esm.js.LICENSE.txt +1 -1
- package/dist/card-getter.cjs.js.LICENSE.txt +1 -1
- package/dist/card-getter.esm.js.LICENSE.txt +1 -1
- package/dist/center.cjs.js.LICENSE.txt +1 -1
- package/dist/center.esm.js.LICENSE.txt +1 -1
- package/dist/checkbox.cjs.js.LICENSE.txt +1 -1
- package/dist/checkbox.esm.js.LICENSE.txt +1 -1
- package/dist/code.cjs.js.LICENSE.txt +1 -1
- package/dist/code.esm.js.LICENSE.txt +1 -1
- package/dist/container.cjs.js.LICENSE.txt +1 -1
- package/dist/container.esm.js.LICENSE.txt +1 -1
- package/dist/data-list.cjs.js.LICENSE.txt +1 -1
- package/dist/data-list.esm.js.LICENSE.txt +1 -1
- package/dist/designer.cjs.js +1 -1
- package/dist/designer.cjs.js.LICENSE.txt +1 -1
- package/dist/designer.esm.js +1 -1
- package/dist/designer.esm.js.LICENSE.txt +1 -1
- package/dist/element-mapper.cjs.js.LICENSE.txt +1 -1
- package/dist/element-mapper.esm.js.LICENSE.txt +1 -1
- package/dist/finalresult.esm.js +1 -1
- package/dist/finalresult.esm.js.LICENSE.txt +1 -1
- package/dist/flex-card.cjs.js.LICENSE.txt +1 -1
- package/dist/flex-card.esm.js.LICENSE.txt +1 -1
- package/dist/flex-grid.cjs.js.LICENSE.txt +1 -1
- package/dist/flex-grid.esm.js.LICENSE.txt +1 -1
- package/dist/flex-row.cjs.js.LICENSE.txt +1 -1
- package/dist/flex-row.esm.js.LICENSE.txt +1 -1
- package/dist/floating-input.cjs.js.LICENSE.txt +1 -1
- package/dist/floating-input.esm.js.LICENSE.txt +1 -1
- package/dist/free.cjs.js.LICENSE.txt +1 -1
- package/dist/free.esm.js.LICENSE.txt +1 -1
- package/dist/horizontal-scroller.cjs.js.LICENSE.txt +1 -1
- package/dist/horizontal-scroller.esm.js.LICENSE.txt +1 -1
- package/dist/image-picker.cjs.js.LICENSE.txt +1 -1
- package/dist/image-picker.esm.js.LICENSE.txt +1 -1
- package/dist/image.cjs.js.LICENSE.txt +1 -1
- package/dist/image.esm.js.LICENSE.txt +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.LICENSE.txt +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.LICENSE.txt +1 -1
- package/dist/keyframe-animation.cjs.js.LICENSE.txt +1 -1
- package/dist/keyframe-animation.esm.js.LICENSE.txt +1 -1
- package/dist/link-getter.cjs.js.LICENSE.txt +1 -1
- package/dist/link-getter.esm.js.LICENSE.txt +1 -1
- package/dist/link.cjs.js.LICENSE.txt +1 -1
- package/dist/link.esm.js.LICENSE.txt +1 -1
- package/dist/meta-adder.cjs.js.LICENSE.txt +1 -1
- package/dist/meta-adder.esm.js.LICENSE.txt +1 -1
- package/dist/modal-2025.cjs.js.LICENSE.txt +1 -1
- package/dist/modal-2025.esm.js.LICENSE.txt +1 -1
- package/dist/multiswitcher.cjs.js.LICENSE.txt +1 -1
- package/dist/multiswitcher.esm.js.LICENSE.txt +1 -1
- package/dist/new-nav-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/new-nav-bar.esm.js.LICENSE.txt +1 -1
- package/dist/picker.cjs.js.LICENSE.txt +1 -1
- package/dist/picker.esm.js.LICENSE.txt +1 -1
- package/dist/progress.cjs.js.LICENSE.txt +1 -1
- package/dist/progress.esm.js.LICENSE.txt +1 -1
- package/dist/radio.cjs.js.LICENSE.txt +1 -1
- package/dist/radio.esm.js.LICENSE.txt +1 -1
- package/dist/range.cjs.js.LICENSE.txt +1 -1
- package/dist/range.esm.js.LICENSE.txt +1 -1
- package/dist/scroll-video.cjs.js.LICENSE.txt +1 -1
- package/dist/scroll-video.esm.js.LICENSE.txt +1 -1
- package/dist/side-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/side-bar.esm.js.LICENSE.txt +1 -1
- package/dist/side-nav-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/side-nav-bar.esm.js.LICENSE.txt +1 -1
- package/dist/simple-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/simple-bar.esm.js.LICENSE.txt +1 -1
- package/dist/slider-2025.cjs.js.LICENSE.txt +1 -1
- package/dist/slider-2025.esm.js.LICENSE.txt +1 -1
- package/dist/spacer.cjs.js.LICENSE.txt +1 -1
- package/dist/spacer.esm.js.LICENSE.txt +1 -1
- package/dist/stack.cjs.js.LICENSE.txt +1 -1
- package/dist/stack.esm.js.LICENSE.txt +1 -1
- package/dist/stacker.cjs.js.LICENSE.txt +1 -1
- package/dist/stacker.esm.js.LICENSE.txt +1 -1
- package/dist/table.cjs.js.LICENSE.txt +1 -1
- package/dist/table.esm.js.LICENSE.txt +1 -1
- package/dist/text-field.cjs.js.LICENSE.txt +1 -1
- package/dist/text-field.esm.js.LICENSE.txt +1 -1
- package/dist/text.cjs.js.LICENSE.txt +1 -1
- package/dist/text.esm.js.LICENSE.txt +1 -1
- package/dist/theme.cjs.js.LICENSE.txt +1 -1
- package/dist/theme.esm.js.LICENSE.txt +1 -1
- package/dist/transform-anim.cjs.js.LICENSE.txt +1 -1
- package/dist/transform-anim.esm.js.LICENSE.txt +1 -1
- package/dist/ulist.cjs.js.LICENSE.txt +1 -1
- package/dist/ulist.esm.js.LICENSE.txt +1 -1
- package/dist/video.cjs.js.LICENSE.txt +1 -1
- package/dist/video.esm.js.LICENSE.txt +1 -1
- package/dist/wrap.cjs.js.LICENSE.txt +1 -1
- package/dist/wrap.esm.js.LICENSE.txt +1 -1
- package/dist/zoom-card.cjs.js.LICENSE.txt +1 -1
- package/dist/zoom-card.esm.js.LICENSE.txt +1 -1
- package/layout/animator.js +1 -1
- package/layout/audio.js +1 -1
- package/layout/audionew.js +1 -1
- package/layout/base.js +1 -1
- package/layout/beta-desktop-bar.js +1 -1
- package/layout/beta-mobile-bar.js +1 -1
- package/layout/button.js +1 -1
- package/layout/center.js +1 -1
- package/layout/checkbox.js +1 -1
- package/layout/circle.js +1 -1
- package/layout/code.js +1 -1
- package/layout/container.js +1 -1
- package/layout/dropdown-2025.js +1 -1
- package/layout/flex-card.js +1 -1
- package/layout/flex-grid.js +1 -1
- package/layout/flex-row.js +1 -1
- package/layout/form-components/custom.js +1 -1
- package/layout/form-components/data-list.js +1 -1
- package/layout/form-components/floating-input.js +1 -1
- package/layout/form-components/form-all.js +1 -1
- package/layout/form-components/form.js +1 -1
- package/layout/form-components/image-picker.js +1 -1
- package/layout/form-components/picker.js +1 -1
- package/layout/form-components/radio.js +1 -1
- package/layout/form-components/radiogroup.js +1 -1
- package/layout/form-components/range.js +1 -1
- package/layout/free.js +1 -1
- package/layout/grid-switcher.js +1 -1
- package/layout/grid.js +1 -1
- package/layout/horizontal-scroller.js +1 -1
- package/layout/image.js +1 -1
- package/layout/index.js +1 -1
- package/layout/link.js +1 -1
- package/layout/list.js +1 -1
- package/layout/meta-adder.js +1 -1
- package/layout/modal-2025.js +1 -1
- package/layout/morph.js +1 -1
- package/layout/multiswitcher.js +1 -1
- package/layout/nav-bar.js +1 -1
- package/layout/nav-factor/custom-div.js +1 -1
- package/layout/new-nav-bar.js +1 -1
- package/layout/polygon.js +1 -1
- package/layout/prerender-site.js +1 -1
- package/layout/prerender.js +1 -1
- package/layout/progress.js +1 -1
- package/layout/row.js +1 -1
- package/layout/scroll-video.js +1 -1
- package/layout/side-bar.js +1 -1
- package/layout/side-nav-bar.js +1 -1
- package/layout/simple-bar.js +1 -1
- package/layout/slider-2025.js +1 -1
- package/layout/spacer.js +1 -1
- package/layout/stack.js +1 -1
- package/layout/svg.js +1 -1
- package/layout/switcher.js +1 -1
- package/layout/table.js +1 -1
- package/layout/text-field.js +1 -1
- package/layout/text.js +1 -1
- package/layout/ulist.js +1 -1
- package/layout/video.js +1 -1
- package/layout/wrap.js +1 -1
- package/layout/zoom-card.js +1 -1
- package/lib/card-getter.js +1 -1
- package/lib/codegen.js +1 -1
- package/lib/data.js +1 -1
- package/lib/designer.js +1 -1
- package/lib/element-mapper.js +1 -1
- package/lib/keyframe-animation.js +1 -1
- package/lib/link-getter.js +1 -1
- package/lib/morph-node.js +53 -7
- package/lib/raster-inspect.js +1 -1
- package/lib/raster-ops.js +1 -1
- package/lib/raster-presets.js +1 -1
- package/lib/scroll-video.js +1 -1
- package/lib/seo.js +1 -1
- package/lib/stacker.js +1 -1
- package/lib/suggest.js +1 -1
- package/lib/theme.js +1 -1
- package/lib/transform-anim.js +1 -1
- package/lib/transition.js +1 -1
- package/lib/validate-nodes.js +118 -31
- package/package.json +1 -1
package/layout/free.js
CHANGED
package/layout/grid-switcher.js
CHANGED
package/layout/grid.js
CHANGED
package/layout/image.js
CHANGED
package/layout/index.js
CHANGED
package/layout/link.js
CHANGED
package/layout/list.js
CHANGED
package/layout/meta-adder.js
CHANGED
package/layout/modal-2025.js
CHANGED
package/layout/morph.js
CHANGED
package/layout/multiswitcher.js
CHANGED
package/layout/nav-bar.js
CHANGED
package/layout/new-nav-bar.js
CHANGED
package/layout/polygon.js
CHANGED
package/layout/prerender-site.js
CHANGED
package/layout/prerender.js
CHANGED
package/layout/progress.js
CHANGED
package/layout/row.js
CHANGED
package/layout/scroll-video.js
CHANGED
package/layout/side-bar.js
CHANGED
package/layout/side-nav-bar.js
CHANGED
package/layout/simple-bar.js
CHANGED
package/layout/slider-2025.js
CHANGED
package/layout/spacer.js
CHANGED
package/layout/stack.js
CHANGED
package/layout/svg.js
CHANGED
package/layout/switcher.js
CHANGED
package/layout/table.js
CHANGED
package/layout/text-field.js
CHANGED
package/layout/text.js
CHANGED
package/layout/ulist.js
CHANGED
package/layout/video.js
CHANGED
package/layout/wrap.js
CHANGED
package/layout/zoom-card.js
CHANGED
package/lib/card-getter.js
CHANGED
package/lib/codegen.js
CHANGED
package/lib/data.js
CHANGED
package/lib/designer.js
CHANGED
package/lib/element-mapper.js
CHANGED
package/lib/link-getter.js
CHANGED
package/lib/morph-node.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.1.
|
|
2
|
+
* nodality v1.1.15
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -123,6 +123,25 @@ const chainFor = (effect) => {
|
|
|
123
123
|
|
|
124
124
|
const norm = (t) => String(t || "").replace(/\s+/g, " ").trim().toLowerCase();
|
|
125
125
|
|
|
126
|
+
/**
|
|
127
|
+
* An id as written, reduced to the id itself.
|
|
128
|
+
*
|
|
129
|
+
* A node may name a state bare (`"home"`) or in selector form
|
|
130
|
+
* (`"#home"`). Both are accepted and both mean the same thing, because
|
|
131
|
+
* this is an element IDENTIFIER rather than a selector: the lookup is
|
|
132
|
+
* `getElementById`, plus a positional fallback against `E`, so `"#home"`
|
|
133
|
+
* would otherwise match nothing and the morph would fail with a console
|
|
134
|
+
* warning and no visible effect.
|
|
135
|
+
*
|
|
136
|
+
* Normalised HERE, once, rather than at the point of lookup: the states
|
|
137
|
+
* are keyed by this string, so a chain whose first edge writes `"#home"`
|
|
138
|
+
* and whose second writes `"home"` must arrive at ONE key. Stripping at
|
|
139
|
+
* lookup time would resolve both to the same element while keeping two
|
|
140
|
+
* entries in the map, and the second edge would then be unreachable.
|
|
141
|
+
*/
|
|
142
|
+
const bareId = (id) =>
|
|
143
|
+
typeof id === "string" && id.startsWith("#") ? id.slice(1) : id;
|
|
144
|
+
|
|
126
145
|
/**
|
|
127
146
|
* A morph node, in one shape: a list of EDGES.
|
|
128
147
|
*
|
|
@@ -170,19 +189,22 @@ const normalizeEdges = (m) => {
|
|
|
170
189
|
// Labels are what the user is actually reading and clicking.
|
|
171
190
|
const byLabel = e.to && !Array.isArray(e.to) && typeof e.to === "object"
|
|
172
191
|
? e.to : null;
|
|
192
|
+
// Deduplicated on the label side only. The array form is POSITIONAL
|
|
193
|
+
// — `toIds[triggers.indexOf(a)]` below — so collapsing a repeated
|
|
194
|
+
// id there would shift every later link onto the wrong destination.
|
|
173
195
|
const toIds = byLabel
|
|
174
|
-
? [...new Set(Object.values(e.to))]
|
|
175
|
-
: (Array.isArray(e.to) ? e.to : [e.to]);
|
|
196
|
+
? [...new Set(Object.values(e.to))].map(bareId)
|
|
197
|
+
: (Array.isArray(e.to) ? e.to : [e.to]).map(bareId);
|
|
176
198
|
|
|
177
199
|
const labelToId = new Map();
|
|
178
200
|
if (byLabel) {
|
|
179
201
|
for (const [label, id] of Object.entries(e.to)) {
|
|
180
|
-
labelToId.set(norm(label), id);
|
|
202
|
+
labelToId.set(norm(label), bareId(id));
|
|
181
203
|
}
|
|
182
204
|
}
|
|
183
205
|
|
|
184
206
|
return {
|
|
185
|
-
from: e.from, byLabel, toIds, labelToId,
|
|
207
|
+
from: bareId(e.from), byLabel, toIds, labelToId,
|
|
186
208
|
effect: opt("effect"),
|
|
187
209
|
duration: opt("duration", 900),
|
|
188
210
|
// Written as `!== false` rather than a truthy test: the
|
|
@@ -212,9 +234,13 @@ function applyMorphNodes(mount, elements, nodes) {
|
|
|
212
234
|
// page. Position is what Des actually guarantees.
|
|
213
235
|
const rendered = [...mount.children];
|
|
214
236
|
const resolve = (id) => {
|
|
215
|
-
|
|
237
|
+
// `bareId` again, and not only for symmetry: the descriptor in E
|
|
238
|
+
// may itself be written with a leading "#", so both sides are
|
|
239
|
+
// reduced before they are compared.
|
|
240
|
+
const want = bareId(id);
|
|
241
|
+
const byId = document.getElementById(want);
|
|
216
242
|
if (byId && mount.contains(byId)) return byId;
|
|
217
|
-
const i = (elements || []).findIndex((e) => e && e.id ===
|
|
243
|
+
const i = (elements || []).findIndex((e) => e && bareId(e.id) === want);
|
|
218
244
|
return i >= 0 ? rendered[i] : null;
|
|
219
245
|
};
|
|
220
246
|
|
|
@@ -584,6 +610,26 @@ function setUpMorph(mount, m, resolve) {
|
|
|
584
610
|
const landBack = (targetId) => {
|
|
585
611
|
if (history[history.length - 1] === targetId) history.pop();
|
|
586
612
|
current = targetId;
|
|
613
|
+
|
|
614
|
+
// Hand the DOM back before presenting.
|
|
615
|
+
//
|
|
616
|
+
// On the live backend the state being returned to is INSIDE the
|
|
617
|
+
// canvas — that is how the backend samples it — and the canvas
|
|
618
|
+
// stands down at t=0. So the moment a reversal completes, the
|
|
619
|
+
// thing it returned to stops being painted at all: canvas hidden,
|
|
620
|
+
// content hosted, nothing on screen. A forward landing has no
|
|
621
|
+
// such problem, because there the canvas stays up and presents
|
|
622
|
+
// the destination itself.
|
|
623
|
+
//
|
|
624
|
+
// `destroy()` is precisely the handover needed: it moves hosted
|
|
625
|
+
// children back out into the host and restores the suppressed
|
|
626
|
+
// ink. The cost is that the next transition rebuilds rather than
|
|
627
|
+
// reusing, which is the right trade for a state that would
|
|
628
|
+
// otherwise be invisible.
|
|
629
|
+
for (const p of activeRasterPipelines()) {
|
|
630
|
+
if (stage.contains(p.canvas)) p.destroy();
|
|
631
|
+
}
|
|
632
|
+
pipe = null; tl = null; pipeOld = null; pipeNew = null;
|
|
587
633
|
lastFrom = history.length ? history[history.length - 1] : null;
|
|
588
634
|
wireState(targetId);
|
|
589
635
|
};
|
package/lib/raster-inspect.js
CHANGED
package/lib/raster-ops.js
CHANGED
package/lib/raster-presets.js
CHANGED
package/lib/scroll-video.js
CHANGED
package/lib/seo.js
CHANGED
package/lib/stacker.js
CHANGED
package/lib/suggest.js
CHANGED
package/lib/theme.js
CHANGED
package/lib/transform-anim.js
CHANGED
package/lib/transition.js
CHANGED