nodality 1.0.191 → 1.0.193
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.esm.js +1 -1
- package/dist/audionew.cjs.js +1 -1
- package/dist/audionew.esm.js +1 -1
- package/dist/beta-desktop-bar.cjs.js +1 -1
- package/dist/beta-desktop-bar.esm.js +1 -1
- package/dist/beta-mobile-bar.cjs.js +1 -1
- package/dist/beta-mobile-bar.esm.js +1 -1
- package/dist/bundle.umd.js +1 -1
- package/dist/button.cjs.js +1 -1
- package/dist/button.esm.js +1 -1
- package/dist/center.cjs.js +1 -1
- package/dist/center.esm.js +1 -1
- package/dist/checkbox.cjs.js +1 -1
- package/dist/checkbox.esm.js +1 -1
- package/dist/code.cjs.js +1 -1
- package/dist/code.esm.js +1 -1
- package/dist/container.cjs.js +1 -1
- package/dist/container.esm.js +1 -1
- package/dist/designer.cjs.js +1 -1
- package/dist/designer.esm.js +1 -1
- package/dist/dropdown.cjs.js +1 -1
- package/dist/dropdown.esm.js +1 -1
- package/dist/element-mapper.cjs.js +1 -1
- package/dist/element-mapper.esm.js +1 -1
- package/dist/finalresult.esm.js +1 -1
- package/dist/flex-card.cjs.js +1 -1
- package/dist/flex-card.esm.js +1 -1
- package/dist/flex-grid.cjs.js +1 -1
- package/dist/flex-grid.esm.js +1 -1
- package/dist/flex-row.cjs.js +1 -1
- package/dist/flex-row.esm.js +1 -1
- package/dist/floating-input.cjs.js +1 -1
- package/dist/floating-input.esm.js +1 -1
- package/dist/free.cjs.js +1 -1
- package/dist/free.esm.js +1 -1
- package/dist/image-picker.cjs.js +1 -1
- package/dist/image-picker.esm.js +1 -1
- package/dist/image.cjs.js +1 -1
- package/dist/image.esm.js +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/link-getter.cjs.js +1 -1
- package/dist/link-getter.esm.js +1 -1
- package/dist/link.cjs.js +1 -1
- package/dist/link.esm.js +1 -1
- package/dist/multiswitcher.cjs.js +1 -1
- package/dist/multiswitcher.esm.js +1 -1
- package/dist/new-nav-bar.cjs.js +1 -1
- package/dist/new-nav-bar.esm.js +1 -1
- package/dist/picker.cjs.js +1 -1
- package/dist/picker.esm.js +1 -1
- package/dist/side-nav-bar.cjs.js +1 -1
- package/dist/side-nav-bar.esm.js +1 -1
- package/dist/simple-bar.cjs.js +1 -1
- package/dist/simple-bar.esm.js +1 -1
- package/dist/slider-2025.cjs.js +1 -1
- package/dist/slider-2025.esm.js +1 -1
- package/dist/table.cjs.js +1 -1
- package/dist/table.esm.js +1 -1
- package/dist/text-field.cjs.js +1 -1
- package/dist/text-field.esm.js +1 -1
- package/dist/text.cjs.js +1 -1
- package/dist/text.esm.js +1 -1
- package/dist/ulist.cjs.js +1 -1
- package/dist/ulist.esm.js +1 -1
- package/dist/video.cjs.js +1 -1
- package/dist/video.esm.js +1 -1
- package/dist/zoom-card.cjs.js +1 -1
- package/dist/zoom-card.esm.js +1 -1
- package/layout/animator.js +1 -1
- package/layout/audio.js +1 -1
- package/layout/audionew.js +1 -1
- package/layout/base-2.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/box.js +1 -1
- package/layout/button.js +1 -1
- package/layout/cards.js +1 -1
- package/layout/center.js +1 -1
- package/layout/checkbox.js +1 -1
- package/layout/circle.js +1 -1
- package/layout/clean-row.js +1 -1
- package/layout/code.js +1 -1
- package/layout/container.js +1 -1
- package/layout/custom.js +1 -1
- package/layout/div-image.js +1 -1
- package/layout/dropdown-2025.js +1 -1
- package/layout/dropdown.js +1 -1
- package/layout/empty-element.js +1 -1
- package/layout/external-stylesheet.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/footer.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-new.js +1 -1
- package/layout/grid-switcher.js +1 -1
- package/layout/grid.js +1 -1
- package/layout/group.js +1 -1
- package/layout/header.js +1 -1
- package/layout/horizontal-scroller.js +1 -1
- package/layout/image-old.js +1 -1
- package/layout/image.js +1 -1
- package/layout/index.js +1 -1
- package/layout/label.js +1 -1
- package/layout/link.js +1 -1
- package/layout/list-OLD.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/modernwrap.js +1 -1
- package/layout/multiswitcher.js +1 -1
- package/layout/multiswitcherBeta.js +1 -1
- package/layout/nav-bar.js +1 -1
- package/layout/nav-factor/custom-div.js +1 -1
- package/layout/navBar-OLD.js +1 -1
- package/layout/new-flat-adder.js +1 -1
- package/layout/new-nav-bar.js +1 -1
- package/layout/offset-container.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/saved-new-nav-bar.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/styler.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/without-new.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/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/raster-ops.js +61 -2
- package/lib/scroll-video.js +1 -1
- package/lib/seo.js +1 -1
- package/lib/stacker.js +1 -1
- package/lib/theme.js +1 -1
- package/lib/transform-anim.js +1 -1
- package/package.json +1 -1
package/lib/raster-ops.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.193
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -181,7 +181,11 @@ const REGISTRY = {
|
|
|
181
181
|
// inject divergence energy the field stays stable with no pressure
|
|
182
182
|
// projection at all — the whole simulation is a single pass.
|
|
183
183
|
//
|
|
184
|
-
// { op: "stir", strength: 26,
|
|
184
|
+
// { op: "stir", strength: 26, curl: 2.4, decay: 0.985 }
|
|
185
|
+
//
|
|
186
|
+
// The swirliness knob is `curl` (vorticity confinement). An earlier
|
|
187
|
+
// version of this line said `swirl`, which the solver never reads — it
|
|
188
|
+
// is accepted silently and leaves curl at its default.
|
|
185
189
|
// Halftone: the print dot screen. Tone is carried by dot AREA on a
|
|
186
190
|
// rotated grid rather than by intensity, the way offset lithography
|
|
187
191
|
// reproduces a continuous-tone image with a single ink.
|
|
@@ -1407,7 +1411,41 @@ function freezeViewportUnits(original, clone) {
|
|
|
1407
1411
|
return clone;
|
|
1408
1412
|
}
|
|
1409
1413
|
|
|
1414
|
+
/**
|
|
1415
|
+
* The single <img> a host renders, if that is all it is.
|
|
1416
|
+
*
|
|
1417
|
+
* A foreignObject rendered from a data: URI never fetches subresources, so
|
|
1418
|
+
* any <img> inside the serialized subtree comes back blank — a photo host
|
|
1419
|
+
* would capture as fully transparent. When the host is just an image we can
|
|
1420
|
+
* skip serialization entirely and upload that image as the texture, which
|
|
1421
|
+
* is both correct and considerably cheaper.
|
|
1422
|
+
*
|
|
1423
|
+
* Only same-origin, already-decoded images qualify: a cross-origin one
|
|
1424
|
+
* would taint the canvas and break the readback the pipeline depends on.
|
|
1425
|
+
*/
|
|
1426
|
+
function soleImageOf(el) {
|
|
1427
|
+
if (!el) return null;
|
|
1428
|
+
const img = el.tagName === "IMG"
|
|
1429
|
+
? el
|
|
1430
|
+
: (el.children && el.children.length === 1 && el.children[0].tagName === "IMG"
|
|
1431
|
+
? el.children[0]
|
|
1432
|
+
: null);
|
|
1433
|
+
if (!img || !img.complete || !img.naturalWidth) return null;
|
|
1434
|
+
try {
|
|
1435
|
+
// Relative and same-origin absolute srcs both resolve clean here.
|
|
1436
|
+
if (new URL(img.currentSrc || img.src, location.href).origin !== location.origin) {
|
|
1437
|
+
return null;
|
|
1438
|
+
}
|
|
1439
|
+
} catch (e) {
|
|
1440
|
+
return null;
|
|
1441
|
+
}
|
|
1442
|
+
return img;
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1410
1445
|
function snapshotToImage(el, w, h, dpr) {
|
|
1446
|
+
const direct = soleImageOf(el);
|
|
1447
|
+
if (direct) return Promise.resolve(direct);
|
|
1448
|
+
|
|
1411
1449
|
return new Promise((resolve, reject) => {
|
|
1412
1450
|
const serialized = new XMLSerializer()
|
|
1413
1451
|
.serializeToString(freezeViewportUnits(el, el.cloneNode(true)));
|
|
@@ -2279,8 +2317,29 @@ function applyRasterPipeline(el, rasterNodes) {
|
|
|
2279
2317
|
snapshotCapture();
|
|
2280
2318
|
};
|
|
2281
2319
|
|
|
2320
|
+
// Match the canvas box to the host immediately, without recapturing.
|
|
2321
|
+
// Re-uploading the texture is the expensive half and stays debounced;
|
|
2322
|
+
// resizing the element is cheap and must not be, because a host that is
|
|
2323
|
+
// being animated (a scroll-driven hero expanding every frame) would
|
|
2324
|
+
// otherwise render up to a debounce-interval behind its own layout —
|
|
2325
|
+
// the canvas visibly trailing the content it is drawn over.
|
|
2326
|
+
const syncCanvasBox = () => {
|
|
2327
|
+
if (destroyed) return;
|
|
2328
|
+
const m = measure();
|
|
2329
|
+
if (m.width < 2 || m.height < 2) return;
|
|
2330
|
+
if (Math.round(m.width) === Math.round(rect.width) &&
|
|
2331
|
+
Math.round(m.height) === Math.round(rect.height)) return;
|
|
2332
|
+
rect.width = m.width;
|
|
2333
|
+
rect.height = m.height;
|
|
2334
|
+
canvas.style.width = m.width + "px";
|
|
2335
|
+
canvas.style.height = m.height + "px";
|
|
2336
|
+
canvas.width = Math.round(m.width * dpr);
|
|
2337
|
+
canvas.height = Math.round(m.height * dpr);
|
|
2338
|
+
};
|
|
2339
|
+
|
|
2282
2340
|
if (typeof ResizeObserver !== "undefined") {
|
|
2283
2341
|
ro = new ResizeObserver(() => {
|
|
2342
|
+
syncCanvasBox();
|
|
2284
2343
|
clearTimeout(resizeTimer);
|
|
2285
2344
|
resizeTimer = setTimeout(remeasureAndCapture, 150);
|
|
2286
2345
|
});
|
package/lib/scroll-video.js
CHANGED
package/lib/seo.js
CHANGED
package/lib/stacker.js
CHANGED
package/lib/theme.js
CHANGED
package/lib/transform-anim.js
CHANGED