nodality 1.1.6 → 1.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animator.cjs.js +1 -1
- package/dist/animator.cjs.js.LICENSE.txt +1 -1
- package/dist/animator.esm.js.LICENSE.txt +1 -1
- package/dist/audionew.cjs.js +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 +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 +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 +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 +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 +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 +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 +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 +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.LICENSE.txt +1 -1
- package/dist/element-mapper.cjs.js +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 +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 +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 +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 +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 +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 +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 +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.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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +1 -1
- package/lib/raster-inspect.js +1 -1
- package/lib/raster-ops.js +67 -4
- 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/package.json +1 -1
package/lib/raster-ops.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.1.
|
|
2
|
+
* nodality v1.1.8
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -3664,7 +3664,25 @@ function applyRasterPipeline(el, rasterNodes, opts) {
|
|
|
3664
3664
|
// the old capture, which is the right default for a morph that is
|
|
3665
3665
|
// about to run.
|
|
3666
3666
|
const atStart = transition.standDownAtStart && progress <= 0;
|
|
3667
|
-
|
|
3667
|
+
// The two endpoints are NOT symmetric once content is hosted, and
|
|
3668
|
+
// treating them alike stranded every live morph.
|
|
3669
|
+
//
|
|
3670
|
+
// At t=1 the hosted side IS the destination, so hiding the canvas
|
|
3671
|
+
// would hide the thing just handed over — it has to stay up, and
|
|
3672
|
+
// pointer retargeting is what keeps the controls inside it alive.
|
|
3673
|
+
//
|
|
3674
|
+
// At t=0 the element being handed back to is the CALLER'S, and by
|
|
3675
|
+
// construction it lives outside this canvas: `standDownAtStart` is
|
|
3676
|
+
// opt-in precisely because the caller owns that element and puts
|
|
3677
|
+
// it back itself. The hosted side is the destination, which should
|
|
3678
|
+
// not be on screen at t=0 anyway. So the canvas can stand down
|
|
3679
|
+
// here even while hosting.
|
|
3680
|
+
//
|
|
3681
|
+
// Without this a live morph never gives the source back: the
|
|
3682
|
+
// canvas stays up showing the transition's frozen first frame, the
|
|
3683
|
+
// real source stays display:none, and the nav looks perfectly
|
|
3684
|
+
// normal while being completely dead to a second click.
|
|
3685
|
+
const wantVis = ((done && !hostsContent) || atStart) ? "hidden" : "visible";
|
|
3668
3686
|
if (canvas.style.visibility !== wantVis) canvas.style.visibility = wantVis;
|
|
3669
3687
|
if (done) {
|
|
3670
3688
|
if (inkSaved) showHostInk();
|
|
@@ -4208,6 +4226,42 @@ function applyRasterPipeline(el, rasterNodes, opts) {
|
|
|
4208
4226
|
// their coordinate math on the CPU.
|
|
4209
4227
|
let lastMoveProbe = 0;
|
|
4210
4228
|
|
|
4229
|
+
/**
|
|
4230
|
+
* Hit-test the canvas-hosted subtree by hand.
|
|
4231
|
+
*
|
|
4232
|
+
* `document.elementFromPoint` cannot see content the LIVE backend
|
|
4233
|
+
* hosts. To be uploaded as a texture the content has to live inside
|
|
4234
|
+
* the <canvas>, where it is canvas fallback content: laid out, but
|
|
4235
|
+
* never painted into the page. The browser's hit test therefore walks
|
|
4236
|
+
* straight past it and lands on the canvas itself, which is why every
|
|
4237
|
+
* control inside a live pipeline used to be dead.
|
|
4238
|
+
*
|
|
4239
|
+
* The boxes are real, though — a back button inside a live morph
|
|
4240
|
+
* reports its true 88x28 rect — so they can be tested directly. That
|
|
4241
|
+
* is the whole trick: layout is available, only painting and hit
|
|
4242
|
+
* testing are not, and hit testing is the part we can replace.
|
|
4243
|
+
*
|
|
4244
|
+
* Deepest match wins, which is what the browser does: a <span> inside
|
|
4245
|
+
* a <button> resolves to the span, and the dispatched event then
|
|
4246
|
+
* bubbles to the button exactly as a real click would. Among siblings
|
|
4247
|
+
* the last match wins, which approximates paint order for the
|
|
4248
|
+
* ordinary, non-z-indexed case.
|
|
4249
|
+
*/
|
|
4250
|
+
const hostedElementAt = (x, y) => {
|
|
4251
|
+
let found = null;
|
|
4252
|
+
const walk = (node) => {
|
|
4253
|
+
for (const child of node.children) {
|
|
4254
|
+
const r = child.getBoundingClientRect();
|
|
4255
|
+
if (!r.width || !r.height) continue;
|
|
4256
|
+
if (x < r.left || x > r.right || y < r.top || y > r.bottom) continue;
|
|
4257
|
+
found = child;
|
|
4258
|
+
walk(child);
|
|
4259
|
+
}
|
|
4260
|
+
};
|
|
4261
|
+
walk(sourceEl);
|
|
4262
|
+
return found;
|
|
4263
|
+
};
|
|
4264
|
+
|
|
4211
4265
|
const onRetarget = (e) => {
|
|
4212
4266
|
if (!interactive || destroyed || e[RETARGET]) return;
|
|
4213
4267
|
if (e.type === "pointermove" || e.type === "mousemove") {
|
|
@@ -4217,14 +4271,23 @@ function applyRasterPipeline(el, rasterNodes, opts) {
|
|
|
4217
4271
|
}
|
|
4218
4272
|
const s = sourceAt(e.clientX, e.clientY);
|
|
4219
4273
|
if (!s) return;
|
|
4274
|
+
// Where the content lives inside the canvas there is no native hit
|
|
4275
|
+
// testing to defer to, displaced or not — so this shortcut has to
|
|
4276
|
+
// be skipped. It is why a live morph stayed dead even after it
|
|
4277
|
+
// settled: at rest the shader presents 1:1, the displacement is
|
|
4278
|
+
// zero, and every event took this early return.
|
|
4279
|
+
const hosted = sourceEl !== el;
|
|
4220
4280
|
// Nothing moved here: let the browser's own hit-testing stand.
|
|
4221
|
-
if (
|
|
4281
|
+
if (!hosted &&
|
|
4282
|
+
Math.abs(s.x - e.clientX) < 0.5 && Math.abs(s.y - e.clientY) < 0.5) return;
|
|
4222
4283
|
|
|
4223
4284
|
// Returns null when the source lands outside the VIEWPORT — an
|
|
4224
4285
|
// element scrolled half off-screen whose displacement pushes the
|
|
4225
4286
|
// source past the edge. Declining is the right answer there: the
|
|
4226
4287
|
// native hit stands, rather than dispatching somewhere wrong.
|
|
4227
|
-
const target =
|
|
4288
|
+
const target = hosted
|
|
4289
|
+
? hostedElementAt(s.x, s.y)
|
|
4290
|
+
: typeof document.elementFromPoint === "function"
|
|
4228
4291
|
? document.elementFromPoint(s.x, s.y)
|
|
4229
4292
|
: null;
|
|
4230
4293
|
// Only ever redirect INTO our own subtree. A displacement that
|
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