nodality 1.0.199 → 1.0.201
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/base.cjs.js +1 -1
- package/dist/base.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/horizontal-scroller.cjs.js +1 -1
- package/dist/horizontal-scroller.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-bar.cjs.js +1 -1
- package/dist/side-bar.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 +107 -47
- package/layout/audio.js +1 -1
- package/layout/audionew.js +1 -1
- package/layout/base-2.js +1 -1
- package/layout/base.js +15 -11
- 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 +2 -3
- package/layout/cards.js +1 -1
- package/layout/center.js +3 -5
- 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 +2 -3
- 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 -3
- 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 +2 -3
- 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 +3 -5
- 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 +65 -19
- package/lib/element-mapper.js +17 -73
- package/lib/keyframe-animation.js +1 -1
- package/lib/link-getter.js +1 -1
- package/lib/raster-ops.js +20 -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/layout/animator.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.201
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -39,13 +39,14 @@ class Animator {
|
|
|
39
39
|
// to the document and has a layout box. Safe no-op headless.
|
|
40
40
|
rasterize(list){
|
|
41
41
|
if (!list || list.length === 0 || this._rasterHandle) return;
|
|
42
|
+
if (this._rasterCancelled) return; // destroy() ran before we attached
|
|
42
43
|
if (typeof document === "undefined" || typeof setTimeout === "undefined") return;
|
|
43
44
|
// setTimeout, not requestAnimationFrame: rAF is throttled to a
|
|
44
45
|
// standstill in backgrounded tabs, which would leave the effect
|
|
45
46
|
// permanently unattached there.
|
|
46
47
|
let attempts = 0;
|
|
47
48
|
const tryAttach = () => {
|
|
48
|
-
if (this._rasterHandle) return;
|
|
49
|
+
if (this._rasterHandle || this._rasterCancelled) return;
|
|
49
50
|
if (this.res && this.res.isConnected) {
|
|
50
51
|
try {
|
|
51
52
|
this._rasterHandle = applyRasterPipeline(this.res, list);
|
|
@@ -57,9 +58,10 @@ class Animator {
|
|
|
57
58
|
// null: layout box not ready yet (or WebGL/motion
|
|
58
59
|
// unavailable) - keep retrying within the budget.
|
|
59
60
|
}
|
|
60
|
-
if (++attempts < 80) setTimeout(tryAttach, 50);
|
|
61
|
+
if (++attempts < 80) this._rasterTimer = setTimeout(tryAttach, 50);
|
|
61
62
|
};
|
|
62
|
-
setTimeout(tryAttach, 0);
|
|
63
|
+
this._rasterTimer = setTimeout(tryAttach, 0);
|
|
64
|
+
this._track(() => clearTimeout(this._rasterTimer));
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
isHidden(hide){
|
|
@@ -83,13 +85,54 @@ class Animator {
|
|
|
83
85
|
return this;
|
|
84
86
|
}
|
|
85
87
|
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
+
// Register a teardown callback. Everything this component attaches to a
|
|
89
|
+
// long-lived target (window, document, an observer, the GPU pipeline)
|
|
90
|
+
// should go through _track/_on so destroy() can actually release it.
|
|
91
|
+
_track(fn){
|
|
92
|
+
if (typeof fn !== "function") return fn;
|
|
93
|
+
(this._disposables || (this._disposables = [])).push(fn);
|
|
94
|
+
return fn;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// addEventListener + automatic removal on destroy(). Element-level
|
|
98
|
+
// listeners are collected with the element, but window/document ones
|
|
99
|
+
// outlive it and pin the component (and its DOM subtree) forever.
|
|
100
|
+
_on(target, type, handler, opts){
|
|
101
|
+
if (!target || typeof target.addEventListener !== "function") return handler;
|
|
102
|
+
target.addEventListener(type, handler, opts);
|
|
103
|
+
this._track(() => target.removeEventListener(type, handler, opts));
|
|
104
|
+
return handler;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Tear down everything this component attached: theme subscription, the
|
|
108
|
+
// raster GPU pipeline, window/document listeners and observers. Call it
|
|
109
|
+
// when removing a component from the DOM in a long-lived app.
|
|
110
|
+
//
|
|
111
|
+
// Previously this released only the theme subscription, so each mounted
|
|
112
|
+
// component leaked its resize/scroll handlers and — for raster elements —
|
|
113
|
+
// an entire WebGL context, RAF loop and two observers. raster-ops has had
|
|
114
|
+
// a complete destroy() all along; nothing ever called it.
|
|
88
115
|
destroy(){
|
|
89
116
|
if (typeof this._themeUnsub === "function") {
|
|
90
117
|
this._themeUnsub();
|
|
91
118
|
this._themeUnsub = null;
|
|
92
119
|
}
|
|
120
|
+
|
|
121
|
+
if (this._rasterHandle && typeof this._rasterHandle.destroy === "function") {
|
|
122
|
+
try { this._rasterHandle.destroy(); } catch (e) { /* already gone */ }
|
|
123
|
+
}
|
|
124
|
+
this._rasterHandle = null;
|
|
125
|
+
this._rasterCancelled = true;
|
|
126
|
+
|
|
127
|
+
if (this._disposables) {
|
|
128
|
+
for (const off of this._disposables) {
|
|
129
|
+
try { off(); } catch (e) { /* keep draining */ }
|
|
130
|
+
}
|
|
131
|
+
this._disposables.length = 0;
|
|
132
|
+
}
|
|
133
|
+
this._responsiveTasks = null;
|
|
134
|
+
this._responsiveHandler = null;
|
|
135
|
+
|
|
93
136
|
if (this.res && this.res.parentNode) {
|
|
94
137
|
this.res.parentNode.removeChild(this.res);
|
|
95
138
|
}
|
|
@@ -381,7 +424,14 @@ class Animator {
|
|
|
381
424
|
if (obj.animation) {
|
|
382
425
|
|
|
383
426
|
this.res.style.transition = `${obj.animation}`; //`${obj.animation}s ease-in-out`; // stop resize ???
|
|
384
|
-
|
|
427
|
+
// This used to be misspelled `transionProperty`, which CSSOM
|
|
428
|
+
// silently discards — so the shipped behaviour was the shorthand's
|
|
429
|
+
// default, `all`. Fixing the spelling narrows what animates, so the
|
|
430
|
+
// list has to name every property hover() actually changes
|
|
431
|
+
// (see the onmouseover/onmouseout handlers below) or those would
|
|
432
|
+
// start snapping instead of easing.
|
|
433
|
+
this.res.style.transitionProperty =
|
|
434
|
+
`background-color, color, border, box-shadow, transform`;
|
|
385
435
|
// this.transition(obj.animation);
|
|
386
436
|
}
|
|
387
437
|
|
|
@@ -525,7 +575,7 @@ class Animator {
|
|
|
525
575
|
}
|
|
526
576
|
};
|
|
527
577
|
|
|
528
|
-
|
|
578
|
+
this._on(window, "scroll", compute);
|
|
529
579
|
|
|
530
580
|
// Fire at the beginning if user sets "from" value to 0
|
|
531
581
|
if (data.from === 0) {
|
|
@@ -618,7 +668,7 @@ _setupResponsiveManager() {
|
|
|
618
668
|
// We check if the handler is already assigned to avoid duplicate listeners
|
|
619
669
|
if (!this._responsiveHandler) {
|
|
620
670
|
this._responsiveHandler = react;
|
|
621
|
-
|
|
671
|
+
this._on(window, "resize", react);
|
|
622
672
|
}
|
|
623
673
|
|
|
624
674
|
// 4. Trigger Execution (ALWAYS)
|
|
@@ -701,12 +751,10 @@ resprop(arr, op) {
|
|
|
701
751
|
|
|
702
752
|
// --- 2. STATE CAPTURE ---
|
|
703
753
|
|
|
704
|
-
this.prevStyles
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
}
|
|
709
|
-
}
|
|
754
|
+
// NOTE: the full-style snapshot that used to live here (this.prevStyles)
|
|
755
|
+
// was write-only — the only readers are in commented-out earlier versions
|
|
756
|
+
// of resprop below. It walked every CSSOM property on every resprop() call
|
|
757
|
+
// for nothing, so it has been dropped.
|
|
710
758
|
|
|
711
759
|
const responsiveProps = new Set();
|
|
712
760
|
arr.forEach(bp => {
|
|
@@ -726,7 +774,7 @@ resprop(arr, op) {
|
|
|
726
774
|
|
|
727
775
|
// --- 3. CORE LOGIC ---
|
|
728
776
|
const respropTask = () => {
|
|
729
|
-
const width =
|
|
777
|
+
const width = Animator.viewportWidth();
|
|
730
778
|
let applied = defaultItem;
|
|
731
779
|
|
|
732
780
|
// 1. Find the first matching range.
|
|
@@ -759,11 +807,14 @@ resprop(arr, op) {
|
|
|
759
807
|
|
|
760
808
|
// C. Overrides: Apply matching breakpoint values
|
|
761
809
|
for (const key in applied) {
|
|
762
|
-
|
|
810
|
+
|
|
811
|
+
// `exact` is a font-size. It used to call this.set(applied) —
|
|
812
|
+
// re-entering the component's whole set() pipeline (re-registering
|
|
813
|
+
// hover handlers, re-parsing every option) on EVERY resize event.
|
|
814
|
+
// Apply the property directly instead.
|
|
763
815
|
if (key === "exact"){
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
//this.set({key: })
|
|
816
|
+
this.res.style.fontSize = applied[key];
|
|
817
|
+
continue;
|
|
767
818
|
}
|
|
768
819
|
|
|
769
820
|
|
|
@@ -840,7 +891,7 @@ respad(arr) {
|
|
|
840
891
|
|
|
841
892
|
// --- 3. CORE LOGIC: The Responsive Task Function ---
|
|
842
893
|
const respadTask = () => {
|
|
843
|
-
const width =
|
|
894
|
+
const width = Animator.viewportWidth();
|
|
844
895
|
let applied = defaultItem;
|
|
845
896
|
|
|
846
897
|
// 1. RANGE LOGIC: Find the exact breakpoint whose range matches the current width.
|
|
@@ -947,7 +998,7 @@ respad(arr) { // COOL
|
|
|
947
998
|
// --- 3. CORE LOGIC: The 'react' function (Responsive Style Application) ---
|
|
948
999
|
|
|
949
1000
|
const react = () => {
|
|
950
|
-
const width =
|
|
1001
|
+
const width = Animator.viewportWidth();
|
|
951
1002
|
let applied = defaultItem;
|
|
952
1003
|
|
|
953
1004
|
// 1. RANGE LOGIC: Find the exact breakpoint whose range matches the current width.
|
|
@@ -1068,7 +1119,7 @@ _applyResponsive(arr, applyFn) {
|
|
|
1068
1119
|
if (this._responsiveHandler) window.removeEventListener("resize", this._responsiveHandler);
|
|
1069
1120
|
this._responsiveHandler = react;
|
|
1070
1121
|
|
|
1071
|
-
|
|
1122
|
+
this._on(window, "resize", react);
|
|
1072
1123
|
|
|
1073
1124
|
// ⭐ FIX: Defer the initial call slightly to avoid race conditions on refresh.
|
|
1074
1125
|
setTimeout(() => {
|
|
@@ -1170,7 +1221,7 @@ resprop(arr) { // COOL
|
|
|
1170
1221
|
// --- 3. CORE LOGIC: The 'react' function (Responsive Style Application) ---
|
|
1171
1222
|
|
|
1172
1223
|
const react = () => {
|
|
1173
|
-
const width =
|
|
1224
|
+
const width = Animator.viewportWidth();
|
|
1174
1225
|
let applied = defaultItem;
|
|
1175
1226
|
|
|
1176
1227
|
// 1. RANGE LOGIC: Find the FIRST breakpoint whose range matches the current width.
|
|
@@ -1299,7 +1350,7 @@ resprop(arr) {
|
|
|
1299
1350
|
// --- 3. CORE LOGIC: The 'react' function (Responsive Style Application) ---
|
|
1300
1351
|
|
|
1301
1352
|
const react = () => {
|
|
1302
|
-
const width =
|
|
1353
|
+
const width = Animator.viewportWidth();
|
|
1303
1354
|
let applied = defaultItem;
|
|
1304
1355
|
|
|
1305
1356
|
// 1. STANDARD MIN-WIDTH LOGIC: Find the LARGEST breakpoint whose MIN-WIDTH is matched.
|
|
@@ -1409,7 +1460,7 @@ resmar(arr) {
|
|
|
1409
1460
|
|
|
1410
1461
|
// --- 3. CORE LOGIC: The Responsive Task Function ---
|
|
1411
1462
|
const resmarTask = () => {
|
|
1412
|
-
const width =
|
|
1463
|
+
const width = Animator.viewportWidth();
|
|
1413
1464
|
let applied = defaultItem;
|
|
1414
1465
|
|
|
1415
1466
|
// 1. RANGE LOGIC: Find the exact breakpoint whose range matches the current width.
|
|
@@ -1487,6 +1538,15 @@ resmar(arr) {
|
|
|
1487
1538
|
isNumber(value) {
|
|
1488
1539
|
return typeof value === 'number' && !isNaN(value);
|
|
1489
1540
|
}
|
|
1541
|
+
|
|
1542
|
+
// Single source of truth for "how wide is the viewport". See the note in
|
|
1543
|
+
// chainReact — visualViewport is preferred (it tracks pinch-zoom) but is
|
|
1544
|
+
// not universally present.
|
|
1545
|
+
static viewportWidth() {
|
|
1546
|
+
if (typeof window === "undefined") return 0;
|
|
1547
|
+
const vv = window.visualViewport;
|
|
1548
|
+
return (vv && typeof vv.width === "number") ? vv.width : window.innerWidth;
|
|
1549
|
+
}
|
|
1490
1550
|
|
|
1491
1551
|
pad(arr){
|
|
1492
1552
|
|
|
@@ -1607,17 +1667,12 @@ resmar(arr) {
|
|
|
1607
1667
|
percent = (val - from.max) / (from.min - from.max);
|
|
1608
1668
|
}
|
|
1609
1669
|
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
toRange = to.min + timesPerc;
|
|
1617
|
-
}
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
return toRange;
|
|
1670
|
+
// Linear interpolation across the OUTPUT range. The old form added
|
|
1671
|
+
// |to.min| to to.max instead of subtracting it, so any range whose
|
|
1672
|
+
// minimum was above zero overshot: 0.2 -> 1 produced 0.2 + 1.2p = 1.4
|
|
1673
|
+
// at full scroll. Correct only when to.min <= 0, which is why the
|
|
1674
|
+
// 0 -> 1 demos never showed it.
|
|
1675
|
+
return to.min + (to.max - to.min) * percent;
|
|
1621
1676
|
}
|
|
1622
1677
|
|
|
1623
1678
|
|
|
@@ -2411,7 +2466,11 @@ setTags(obj){
|
|
|
2411
2466
|
// Function to check and log queries based on screen size
|
|
2412
2467
|
const checkQueries = (qban) => {
|
|
2413
2468
|
//alert("/P")
|
|
2414
|
-
|
|
2469
|
+
// One width source for the whole library. visualViewport is absent in
|
|
2470
|
+
// jsdom and older WebViews (TypeError), and disagrees with innerWidth
|
|
2471
|
+
// during pinch-zoom — which used to make chainReact breakpoints flip at
|
|
2472
|
+
// different widths than resprop/respad breakpoints on the same page.
|
|
2473
|
+
const screenSize = Animator.viewportWidth();
|
|
2415
2474
|
let ops = "";
|
|
2416
2475
|
let operations = [];
|
|
2417
2476
|
let globalQueries = [];
|
|
@@ -2799,12 +2858,12 @@ this.hasAnimated = true;
|
|
|
2799
2858
|
let ass = this.options.animation.op;
|
|
2800
2859
|
//alert(this.openTag);
|
|
2801
2860
|
|
|
2802
|
-
|
|
2861
|
+
this._on(window, /*this.openTag*/"sidebar:open", () => {
|
|
2803
2862
|
|
|
2804
2863
|
this.res.animate(ass.keyframesOpen, ass.openOptions);
|
|
2805
2864
|
});
|
|
2806
2865
|
|
|
2807
|
-
|
|
2866
|
+
this._on(window, /*this.closeTag*/ "sidebar:closed", () => {
|
|
2808
2867
|
|
|
2809
2868
|
this.res.animate(ass.keyframesClose, ass.closeOptions);
|
|
2810
2869
|
});
|
|
@@ -2823,11 +2882,11 @@ let ass = this.options.animation.op;
|
|
|
2823
2882
|
// alert("ONA" + this.openTag);
|
|
2824
2883
|
//alert(this.openTag);
|
|
2825
2884
|
|
|
2826
|
-
|
|
2885
|
+
this._on(window, this.openTag, () => {
|
|
2827
2886
|
this.res.animate(ass.keyframesOpen, ass.openOptions);
|
|
2828
2887
|
});
|
|
2829
2888
|
// "sidebar:opened" "sidebar:closed"
|
|
2830
|
-
|
|
2889
|
+
this._on(window, this.closeTag, () => {
|
|
2831
2890
|
this.res.animate(ass.keyframesClose, ass.closeOptions);
|
|
2832
2891
|
});
|
|
2833
2892
|
}
|
|
@@ -2853,7 +2912,7 @@ window.addEventListener(this.openTag, () => {
|
|
|
2853
2912
|
}
|
|
2854
2913
|
};
|
|
2855
2914
|
|
|
2856
|
-
|
|
2915
|
+
this._on(window, "scroll", scrollHandler);
|
|
2857
2916
|
|
|
2858
2917
|
}
|
|
2859
2918
|
|
|
@@ -2874,6 +2933,7 @@ window.addEventListener(this.openTag, () => {
|
|
|
2874
2933
|
});
|
|
2875
2934
|
|
|
2876
2935
|
observer.observe(this.res);
|
|
2936
|
+
this._track(() => observer.disconnect());
|
|
2877
2937
|
}
|
|
2878
2938
|
/*
|
|
2879
2939
|
if (!this.openedElements.get(this.res)) {
|
|
@@ -2936,7 +2996,7 @@ this.res.querySelectorAll('span').forEach(span => {
|
|
|
2936
2996
|
|
|
2937
2997
|
if (!this.options.animation /*&& this.getType() !== "LayoutWrapperElement"*/){
|
|
2938
2998
|
|
|
2939
|
-
|
|
2999
|
+
this._on(window, 'resize', () => checkQueries());
|
|
2940
3000
|
}
|
|
2941
3001
|
|
|
2942
3002
|
checkQueries();
|
|
@@ -3098,7 +3158,7 @@ this.res.querySelectorAll('span').forEach(span => {
|
|
|
3098
3158
|
(this.blastTarget || this.res).style.transform = transformValue;
|
|
3099
3159
|
this.res.style.opacity = opacity;
|
|
3100
3160
|
} else {
|
|
3101
|
-
|
|
3161
|
+
console.warn("[nodality] transform produced no geometric value - check `values`")
|
|
3102
3162
|
}
|
|
3103
3163
|
}
|
|
3104
3164
|
|
|
@@ -3117,7 +3177,7 @@ this.res.querySelectorAll('span').forEach(span => {
|
|
|
3117
3177
|
|
|
3118
3178
|
} else {
|
|
3119
3179
|
|
|
3120
|
-
|
|
3180
|
+
this._on(window, "load", () => {
|
|
3121
3181
|
if (transform.delay) {
|
|
3122
3182
|
|
|
3123
3183
|
setTimeout(() => {
|
|
@@ -3192,7 +3252,7 @@ if (transform.on){
|
|
|
3192
3252
|
}
|
|
3193
3253
|
|
|
3194
3254
|
} else {
|
|
3195
|
-
|
|
3255
|
+
console.warn("[nodality] reactOnTransform: unrecognised transform descriptor - ignored");
|
|
3196
3256
|
}
|
|
3197
3257
|
|
|
3198
3258
|
}
|
package/layout/audio.js
CHANGED
package/layout/audionew.js
CHANGED
package/layout/base-2.js
CHANGED
package/layout/base.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.201
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -28,19 +28,25 @@ class Base {
|
|
|
28
28
|
Proxima(a) {
|
|
29
29
|
var me = this;
|
|
30
30
|
return new Proxy(a, {
|
|
31
|
-
set(target, prop,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
// Proxy set traps are (target, prop, value, receiver). The old
|
|
32
|
+
// signature named the third parameter `key`, so `target[key] = value`
|
|
33
|
+
// stored the incoming VALUE under the receiver as a property name and
|
|
34
|
+
// the real property was never written — every reactive-state write
|
|
35
|
+
// silently corrupted the object.
|
|
36
|
+
set(target, prop, value) {
|
|
37
|
+
target[prop] = value;
|
|
38
|
+
|
|
39
|
+
if (me.initialState && me.initialState.data &&
|
|
40
|
+
typeof me.initialState.data.push === "function") {
|
|
41
|
+
me.initialState.data.push(prop);
|
|
42
|
+
}
|
|
43
|
+
|
|
38
44
|
if (prop !== 'length') {
|
|
39
45
|
me.refreshUI("Added");
|
|
40
46
|
}
|
|
41
47
|
return true;//a[P];
|
|
42
48
|
},
|
|
43
|
-
has(target, prop
|
|
49
|
+
has(target, prop) {
|
|
44
50
|
|
|
45
51
|
if (prop !== 'length') {
|
|
46
52
|
me.refreshUI("Deleted");
|
|
@@ -62,7 +68,6 @@ class Base {
|
|
|
62
68
|
loadState(data, id){
|
|
63
69
|
this.loadEl = id;
|
|
64
70
|
this.initialState = data;
|
|
65
|
-
alert(this.initialState.data);
|
|
66
71
|
|
|
67
72
|
return this.observe(this.state.data);
|
|
68
73
|
|
|
@@ -144,7 +149,6 @@ class Base {
|
|
|
144
149
|
|
|
145
150
|
|
|
146
151
|
let node = document.querySelector("#res");
|
|
147
|
-
alert(this.render());
|
|
148
152
|
|
|
149
153
|
|
|
150
154
|
let nodes = this.toNode(this.toHTML());
|
package/layout/box.js
CHANGED
package/layout/button.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.201
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -457,8 +457,7 @@ this.options = obj;
|
|
|
457
457
|
const adj = () => {
|
|
458
458
|
let query = window.matchMedia("(max-device-width: 415px)");
|
|
459
459
|
if (query.matches) {
|
|
460
|
-
|
|
461
|
-
this.res.style.fontSize = '6rem';
|
|
460
|
+
this.res.style.fontSize = '6rem';
|
|
462
461
|
} else {
|
|
463
462
|
this.res.style.fontSize = '3rem';
|
|
464
463
|
}
|
package/layout/cards.js
CHANGED
package/layout/center.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.201
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -94,8 +94,7 @@ return this;
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
if (!T && !R && !B){
|
|
97
|
-
|
|
98
|
-
this.res.style.margin = L;
|
|
97
|
+
this.res.style.margin = L;
|
|
99
98
|
}
|
|
100
99
|
|
|
101
100
|
return this;
|
|
@@ -141,8 +140,7 @@ return this;
|
|
|
141
140
|
}
|
|
142
141
|
|
|
143
142
|
if (!T && !R && !B){
|
|
144
|
-
|
|
145
|
-
this.res.style.margin = L;
|
|
143
|
+
this.res.style.margin = L;
|
|
146
144
|
}
|
|
147
145
|
|
|
148
146
|
return this;
|
package/layout/checkbox.js
CHANGED
package/layout/circle.js
CHANGED
package/layout/clean-row.js
CHANGED
package/layout/code.js
CHANGED
package/layout/container.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.201
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -953,8 +953,7 @@ apply(arr) {
|
|
|
953
953
|
let query = window.matchMedia(`(max-width: ${el.width}px)`);
|
|
954
954
|
if (el.device){
|
|
955
955
|
query = window.matchMedia(`(max-device-width: ${el.width}px)`);
|
|
956
|
-
|
|
957
|
-
}
|
|
956
|
+
}
|
|
958
957
|
|
|
959
958
|
|
|
960
959
|
|
package/layout/custom.js
CHANGED
package/layout/div-image.js
CHANGED
package/layout/dropdown-2025.js
CHANGED
package/layout/dropdown.js
CHANGED
package/layout/empty-element.js
CHANGED
package/layout/flex-card.js
CHANGED
package/layout/flex-grid.js
CHANGED
package/layout/flex-row.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.201
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -186,7 +186,6 @@ let stringified = JSON.stringify(options.borderObj);
|
|
|
186
186
|
// // console.warn(options);
|
|
187
187
|
|
|
188
188
|
// options.columnAlways && (this.columnAlways = true);
|
|
189
|
-
options.columnAlways && alert("JIJ" + options.columnAlways);
|
|
190
189
|
|
|
191
190
|
options.toColumn && this.toColumn(options.toColumn); // OK
|
|
192
191
|
|
|
@@ -495,7 +494,6 @@ let stringified = JSON.stringify(options.borderObj);
|
|
|
495
494
|
|
|
496
495
|
|
|
497
496
|
toColumn(at){
|
|
498
|
-
alert("ON")
|
|
499
497
|
|
|
500
498
|
const toCol = () => {
|
|
501
499
|
let media = window.matchMedia(`(max-width: ${at})`);
|
package/layout/footer.js
CHANGED