nodality 1.0.138 → 1.0.140

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.
Files changed (163) hide show
  1. package/dist/animator.cjs.js +1 -1
  2. package/dist/animator.esm.js +1 -1
  3. package/dist/audionew.cjs.js +1 -1
  4. package/dist/audionew.esm.js +1 -1
  5. package/dist/beta-desktop-bar.cjs.js +1 -1
  6. package/dist/beta-desktop-bar.esm.js +1 -1
  7. package/dist/beta-mobile-bar.cjs.js +1 -1
  8. package/dist/beta-mobile-bar.esm.js +1 -1
  9. package/dist/bundle.umd.js +1 -1
  10. package/dist/button.cjs.js +1 -1
  11. package/dist/button.esm.js +1 -1
  12. package/dist/center.cjs.js +1 -1
  13. package/dist/center.esm.js +1 -1
  14. package/dist/checkbox.cjs.js +1 -1
  15. package/dist/checkbox.esm.js +1 -1
  16. package/dist/code.cjs.js +1 -1
  17. package/dist/code.esm.js +1 -1
  18. package/dist/container.cjs.js +1 -1
  19. package/dist/container.esm.js +1 -1
  20. package/dist/designer.cjs.js +1 -1
  21. package/dist/designer.esm.js +1 -1
  22. package/dist/dropdown.cjs.js +1 -1
  23. package/dist/dropdown.esm.js +1 -1
  24. package/dist/element-mapper.cjs.js +1 -1
  25. package/dist/element-mapper.esm.js +1 -1
  26. package/dist/finalresult.esm.js +1 -1
  27. package/dist/flex-card.cjs.js +1 -1
  28. package/dist/flex-card.esm.js +1 -1
  29. package/dist/flex-grid.cjs.js +1 -1
  30. package/dist/flex-grid.esm.js +1 -1
  31. package/dist/flex-row.cjs.js +1 -1
  32. package/dist/flex-row.esm.js +1 -1
  33. package/dist/floating-input.cjs.js +1 -1
  34. package/dist/floating-input.esm.js +1 -1
  35. package/dist/free.cjs.js +1 -1
  36. package/dist/free.esm.js +1 -1
  37. package/dist/image-picker.cjs.js +1 -1
  38. package/dist/image-picker.esm.js +1 -1
  39. package/dist/image.cjs.js +1 -1
  40. package/dist/image.esm.js +1 -1
  41. package/dist/index.cjs.js +1 -1
  42. package/dist/index.esm.js +1 -1
  43. package/dist/link-getter.cjs.js +1 -1
  44. package/dist/link-getter.esm.js +1 -1
  45. package/dist/link.cjs.js +1 -1
  46. package/dist/link.esm.js +1 -1
  47. package/dist/multiswitcher.cjs.js +1 -1
  48. package/dist/multiswitcher.esm.js +1 -1
  49. package/dist/new-nav-bar.cjs.js +1 -1
  50. package/dist/new-nav-bar.esm.js +1 -1
  51. package/dist/picker.cjs.js +1 -1
  52. package/dist/picker.esm.js +1 -1
  53. package/dist/side-nav-bar.cjs.js +1 -1
  54. package/dist/side-nav-bar.esm.js +1 -1
  55. package/dist/simple-bar.cjs.js +1 -1
  56. package/dist/simple-bar.esm.js +1 -1
  57. package/dist/slider-2025.cjs.js +1 -1
  58. package/dist/slider-2025.esm.js +1 -1
  59. package/dist/table.cjs.js +1 -1
  60. package/dist/table.esm.js +1 -1
  61. package/dist/text-field.cjs.js +1 -1
  62. package/dist/text-field.esm.js +1 -1
  63. package/dist/text.cjs.js +1 -1
  64. package/dist/text.esm.js +1 -1
  65. package/dist/ulist.cjs.js +1 -1
  66. package/dist/ulist.esm.js +1 -1
  67. package/dist/video.cjs.js +1 -1
  68. package/dist/video.esm.js +1 -1
  69. package/dist/zoom-card.cjs.js +1 -1
  70. package/dist/zoom-card.esm.js +1 -1
  71. package/layout/animator.js +77 -8
  72. package/layout/audio.js +1 -1
  73. package/layout/audionew.js +1 -1
  74. package/layout/base-2.js +1 -1
  75. package/layout/base.js +1 -1
  76. package/layout/beta-desktop-bar.js +1 -1
  77. package/layout/beta-mobile-bar.js +1 -1
  78. package/layout/box.js +1 -1
  79. package/layout/button.js +1 -1
  80. package/layout/cards.js +1 -1
  81. package/layout/center.js +1 -1
  82. package/layout/checkbox.js +1 -1
  83. package/layout/circle.js +1 -1
  84. package/layout/clean-row.js +1 -1
  85. package/layout/code.js +4 -3
  86. package/layout/container.js +14 -7
  87. package/layout/custom.js +1 -1
  88. package/layout/div-image.js +1 -1
  89. package/layout/dropdown-2025.js +1 -1
  90. package/layout/dropdown.js +1 -1
  91. package/layout/empty-element.js +1 -1
  92. package/layout/external-stylesheet.js +1 -1
  93. package/layout/flex-card.js +1 -1
  94. package/layout/flex-grid.js +4 -3
  95. package/layout/flex-row.js +6 -3
  96. package/layout/footer.js +1 -1
  97. package/layout/form-components/custom.js +1 -1
  98. package/layout/form-components/data-list.js +1 -1
  99. package/layout/form-components/floating-input.js +1 -1
  100. package/layout/form-components/form-all.js +1 -1
  101. package/layout/form-components/form.js +1 -1
  102. package/layout/form-components/image-picker.js +1 -1
  103. package/layout/form-components/picker.js +1 -1
  104. package/layout/form-components/radio.js +1 -1
  105. package/layout/form-components/radiogroup.js +1 -1
  106. package/layout/form-components/range.js +1 -1
  107. package/layout/free.js +1 -1
  108. package/layout/grid-new.js +1 -1
  109. package/layout/grid-switcher.js +1 -1
  110. package/layout/grid.js +1 -1
  111. package/layout/group.js +1 -1
  112. package/layout/header.js +1 -1
  113. package/layout/horizontal-scroller.js +1 -1
  114. package/layout/image-old.js +1 -1
  115. package/layout/image.js +1 -1
  116. package/layout/index.js +1 -1
  117. package/layout/label.js +1 -1
  118. package/layout/link.js +1 -1
  119. package/layout/list-OLD.js +1 -1
  120. package/layout/list.js +1 -1
  121. package/layout/meta-adder.js +1 -1
  122. package/layout/modal-2025.js +1 -1
  123. package/layout/modernwrap.js +1 -1
  124. package/layout/multiswitcher.js +1 -1
  125. package/layout/multiswitcherBeta.js +1 -1
  126. package/layout/nav-bar.js +1 -1
  127. package/layout/nav-factor/custom-div.js +1 -1
  128. package/layout/navBar-OLD.js +1 -1
  129. package/layout/new-flat-adder.js +1 -1
  130. package/layout/new-nav-bar.js +1 -1
  131. package/layout/offset-container.js +1 -1
  132. package/layout/polygon.js +1 -1
  133. package/layout/progress.js +1 -1
  134. package/layout/row.js +1 -1
  135. package/layout/saved-new-nav-bar.js +1 -1
  136. package/layout/scroll-video.js +1 -1
  137. package/layout/side-bar.js +1 -1
  138. package/layout/side-nav-bar.js +1 -1
  139. package/layout/simple-bar.js +1 -1
  140. package/layout/slider-2025.js +1 -1
  141. package/layout/spacer.js +1 -1
  142. package/layout/stack.js +1 -1
  143. package/layout/styler.js +1 -1
  144. package/layout/svg.js +1 -1
  145. package/layout/switcher.js +1 -1
  146. package/layout/table.js +1 -1
  147. package/layout/text-field.js +1 -1
  148. package/layout/text.js +5 -4
  149. package/layout/ulist.js +4 -3
  150. package/layout/video.js +1 -1
  151. package/layout/without-new.js +1 -1
  152. package/layout/wrap.js +1 -1
  153. package/layout/zoom-card.js +1 -1
  154. package/lib/card-getter.js +1 -1
  155. package/lib/designer.js +1 -1
  156. package/lib/element-mapper.js +1 -1
  157. package/lib/keyframe-animation.js +1 -1
  158. package/lib/link-getter.js +1 -1
  159. package/lib/scroll-video.js +1 -1
  160. package/lib/stacker.js +1 -1
  161. package/lib/theme.js +1 -1
  162. package/lib/transform-anim.js +1 -1
  163. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -169,11 +169,12 @@ class Animator {
169
169
  */
170
170
 
171
171
  // Map of obj keys → style properties
172
+ // Extended 2026-04-27 — first-class CSS props so callers don't need keySet.
173
+ // Categories: positioning, flex-item, grid, typography, shadows/effects,
174
+ // overflow, sizing, pointer/selection.
172
175
  const styleMap = {
176
+ // ── Typography / sizing (pre-existing) ─────────────────────────
173
177
  exact: "fontSize",
174
- zIndex: "zIndex",
175
- position: "position",
176
- top: "top",
177
178
  cursor: "cursor",
178
179
  width: "width",
179
180
  maxWidth: "maxWidth",
@@ -183,9 +184,67 @@ class Animator {
183
184
  lineHeight: "lineHeight",
184
185
  background: "background",
185
186
  font: "fontFamily",
186
- opacity: "opacity",
187
- gap: "gap",
188
- minHeight: "minHeight"
187
+ opacity: "opacity",
188
+ gap: "gap",
189
+ minHeight: "minHeight",
190
+
191
+ // ── Positioning ────────────────────────────────────────────────
192
+ position: "position",
193
+ inset: "inset",
194
+ top: "top",
195
+ right: "right",
196
+ bottom: "bottom",
197
+ left: "left",
198
+ zIndex: "zIndex",
199
+
200
+ // ── Flex item / wrapping ───────────────────────────────────────
201
+ flex: "flex",
202
+ flexShrink: "flexShrink",
203
+ flexGrow: "flexGrow",
204
+ flexBasis: "flexBasis",
205
+ flexWrap: "flexWrap",
206
+ alignSelf: "alignSelf",
207
+ // `display` accepts any value: "inline-flex", "grid", "block", etc.
208
+ display: "display",
209
+
210
+ // ── Grid ───────────────────────────────────────────────────────
211
+ gridTemplateColumns: "gridTemplateColumns",
212
+ gridTemplateRows: "gridTemplateRows",
213
+ rowGap: "rowGap",
214
+ columnGap: "columnGap",
215
+
216
+ // ── Typography (extended) ──────────────────────────────────────
217
+ letterSpacing: "letterSpacing",
218
+ textTransform: "textTransform",
219
+ whiteSpace: "whiteSpace",
220
+
221
+ // ── Shadows / effects ──────────────────────────────────────────
222
+ boxShadow: "boxShadow",
223
+ backdropFilter: "backdropFilter",
224
+ WebkitBackdropFilter: "WebkitBackdropFilter",
225
+
226
+ // ── Overflow ───────────────────────────────────────────────────
227
+ overflow: "overflow",
228
+ overflowX: "overflowX",
229
+ overflowY: "overflowY",
230
+ WebkitOverflowScrolling: "WebkitOverflowScrolling",
231
+ WebkitTapHighlightColor: "WebkitTapHighlightColor",
232
+
233
+ // ── Sizing (extended) ──────────────────────────────────────────
234
+ minWidth: "minWidth",
235
+ boxSizing: "boxSizing",
236
+
237
+ // ── Pointer / selection ────────────────────────────────────────
238
+ pointerEvents: "pointerEvents",
239
+ userSelect: "userSelect",
240
+ WebkitUserSelect: "WebkitUserSelect",
241
+
242
+ // ── Convenience extras ─────────────────────────────────────────
243
+ // textAlign here lets non-Text classes (Wrapper, FlexRow) align
244
+ // child text without falling through to keySet. Text already
245
+ // exposes `align` separately.
246
+ textAlign: "textAlign",
247
+ transition: "transition",
189
248
  };
190
249
 
191
250
  // Apply styles safely
@@ -194,6 +253,14 @@ class Animator {
194
253
  this.res.style[styleMap[key]] = obj[key];
195
254
  }
196
255
  }
256
+
257
+ // `transform` is overloaded: a string is a plain CSS transform, an
258
+ // object is a Nodality animation descriptor handled by reactOnTransform
259
+ // (called further below). Strings are applied here so they reach the
260
+ // DOM without going through the animation system.
261
+ if (typeof obj.transform === "string") {
262
+ this.res.style.transform = obj.transform;
263
+ }
197
264
  //alert(obj.respad);
198
265
  // Special methods
199
266
  obj.pad && this.pad(obj.pad);
@@ -207,7 +274,9 @@ class Animator {
207
274
  obj.noTheme && (this._noTheme = true);
208
275
  obj.theme && this.theme(obj.theme);
209
276
  obj.hide && this.isHidden(obj.hide);
210
- obj.transform && this.reactOnTransform(obj.transform);
277
+ // Only route to the animation system for object-shaped transforms.
278
+ // String transforms are applied above via the styleMap path.
279
+ (obj.transform && typeof obj.transform === "object") && this.reactOnTransform(obj.transform);
211
280
 
212
281
  (obj.opacity !== undefined) && (this.res.style.opacity = obj.opacity);
213
282
 
package/layout/audio.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/base-2.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/base.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/box.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/button.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/cards.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/center.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/circle.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/code.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -55,7 +55,8 @@ class Code extends Animator {
55
55
 
56
56
  let arr = [];
57
57
 
58
- if (obj.stroke || obj.gradient || obj.span || obj.backgroundOp || obj.layout || obj.shadow || obj.animation || obj.filtera || obj.transform){
58
+ const _hasAnimTransform = obj.transform && typeof obj.transform === "object";
59
+ if (obj.stroke || obj.gradient || obj.span || obj.backgroundOp || obj.layout || obj.shadow || obj.animation || obj.filtera || _hasAnimTransform){
59
60
  if (obj.gradient){
60
61
  this.globalGradient = obj.gradient.op.gradient;
61
62
 
@@ -74,7 +75,7 @@ class Code extends Animator {
74
75
  }
75
76
 
76
77
 
77
- let ft = [obj.stroke, obj.gradient, obj.animation, obj.span, obj.backgroundOp, obj.layout, obj.marginOp, obj.shadow, /*obj.animation || obj.filtera*/obj.animation, obj.filtera, obj.transform];
78
+ let ft = [obj.stroke, obj.gradient, obj.animation, obj.span, obj.backgroundOp, obj.layout, obj.marginOp, obj.shadow, /*obj.animation || obj.filtera*/obj.animation, obj.filtera, _hasAnimTransform ? obj.transform : undefined];
78
79
  ft = ft.filter(el => el != undefined);
79
80
 
80
81
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -175,7 +175,10 @@ code = `${pad}new Wrapper()`;
175
175
 
176
176
  let arr = [];
177
177
 
178
- if (obj.stroke || obj.gradient || obj.span || obj.backgroundOp || obj.layout || obj.shadow || obj.animation || obj.filtera || obj.transform){
178
+ // Plain CSS string transforms are handled by commonMethods. Only
179
+ // object-shaped transform descriptors enter the animation pipeline.
180
+ const _hasAnimTransform = obj.transform && typeof obj.transform === "object";
181
+ if (obj.stroke || obj.gradient || obj.span || obj.backgroundOp || obj.layout || obj.shadow || obj.animation || obj.filtera || _hasAnimTransform){
179
182
  if (obj.gradient){
180
183
  this.globalGradient = obj.gradient.op.gradient;
181
184
  if (obj.gradient.op.direction === "radial") {
@@ -183,7 +186,7 @@ code = `${pad}new Wrapper()`;
183
186
  }
184
187
  }
185
188
 
186
-
189
+
187
190
  if (obj.stroke){
188
191
  super.setAny({globalBlast: `${obj.stroke.op.width} ${obj.stroke.op.color}`});
189
192
  }
@@ -193,7 +196,7 @@ code = `${pad}new Wrapper()`;
193
196
  }
194
197
 
195
198
 
196
- let ft = [obj.stroke, obj.gradient, obj.animation, obj.span, obj.backgroundOp, obj.layout, obj.marginOp, obj.shadow, /*obj.animation || obj.filtera*/obj.animation, obj.filtera, obj.transform];
199
+ let ft = [obj.stroke, obj.gradient, obj.animation, obj.span, obj.backgroundOp, obj.layout, obj.marginOp, obj.shadow, /*obj.animation || obj.filtera*/obj.animation, obj.filtera, _hasAnimTransform ? obj.transform : undefined];
197
200
  ft = ft.filter(el => el != undefined);
198
201
 
199
202
 
@@ -229,7 +232,7 @@ code = `${pad}new Wrapper()`;
229
232
  keep.push("span");
230
233
  }
231
234
 
232
- if (obj.transform){
235
+ if (_hasAnimTransform){
233
236
  keep.push("transform");
234
237
  }
235
238
 
@@ -309,7 +312,9 @@ code = `${pad}new Wrapper()`;
309
312
  obj.width && (stra += `\n width: "${obj.width}",`);
310
313
 
311
314
 
312
- obj.overflow && (this.res.style.overflow = "hidden");
315
+ // Overflow is handled by commonMethods (styleMap) it now respects
316
+ // the actual value (visible / hidden / auto / scroll / clip), not
317
+ // just hard-coded "hidden". Kept here only for codegen output.
313
318
  obj.overflow && (stra += `\n overflow: "${obj.overflow}",`);
314
319
 
315
320
  obj.height && this.heightNoAuto(obj.height);
@@ -369,7 +374,9 @@ code = `${pad}new Wrapper()`;
369
374
 
370
375
  obj.zIndex && (this.res.style.zIndex = obj.zIndex);
371
376
 
372
- obj.transform && this.reactOnTransform(obj.transform);
377
+ // String transforms are handled by commonMethods. Only object-shaped
378
+ // transform descriptors (with .op / .transform) go to the animation system.
379
+ (obj.transform && typeof obj.transform === "object") && this.reactOnTransform(obj.transform);
373
380
  // obj.makeResponsiveBehaviour && obj.makeResponsiveBehaviour !== "undefined" && this.makeResponsiveBehaviour(obj.makeResponsiveBehaviour);
374
381
  obj.name && (this.name = obj.name)
375
382
  obj.responsive && this.rsp(obj.responsive);
package/layout/custom.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -100,7 +100,8 @@ class FlexGrid extends Animator {
100
100
 
101
101
  let arr = [];
102
102
 
103
- if (obj.stroke || obj.gradient || obj.span || obj.backgroundOp || obj.layout || obj.shadow || obj.animation || obj.filtera || obj.transform){
103
+ const _hasAnimTransform = obj.transform && typeof obj.transform === "object";
104
+ if (obj.stroke || obj.gradient || obj.span || obj.backgroundOp || obj.layout || obj.shadow || obj.animation || obj.filtera || _hasAnimTransform){
104
105
  if (obj.gradient){
105
106
  this.globalGradient = obj.gradient.op.gradient;
106
107
 
@@ -119,7 +120,7 @@ class FlexGrid extends Animator {
119
120
  }
120
121
 
121
122
 
122
- let ft = [obj.stroke, obj.gradient, obj.animation, obj.span, obj.backgroundOp, obj.layout, obj.marginOp, obj.shadow, /*obj.animation || obj.filtera*/obj.animation, obj.filtera, obj.transform];
123
+ let ft = [obj.stroke, obj.gradient, obj.animation, obj.span, obj.backgroundOp, obj.layout, obj.marginOp, obj.shadow, /*obj.animation || obj.filtera*/obj.animation, obj.filtera, _hasAnimTransform ? obj.transform : undefined];
123
124
  ft = ft.filter(el => el != undefined);
124
125
 
125
126
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -345,7 +345,10 @@ let stringified = JSON.stringify(options.borderObj);
345
345
 
346
346
  let arr = [];
347
347
 
348
- if (obj.stroke || obj.gradient || obj.span || obj.backgroundOp || obj.layout || obj.shadow || obj.animation || obj.filtera || obj.transform){
348
+ // String transforms are plain CSS handled by commonMethods. Only
349
+ // object-shaped transforms (animation descriptors with .op) belong here.
350
+ const _hasAnimTransform = obj.transform && typeof obj.transform === "object";
351
+ if (obj.stroke || obj.gradient || obj.span || obj.backgroundOp || obj.layout || obj.shadow || obj.animation || obj.filtera || _hasAnimTransform){
349
352
  if (obj.gradient){
350
353
  this.globalGradient = obj.gradient.op.gradient;
351
354
 
@@ -364,7 +367,7 @@ let stringified = JSON.stringify(options.borderObj);
364
367
  }
365
368
 
366
369
 
367
- let ft = [obj.stroke, obj.gradient, obj.animation, obj.span, obj.backgroundOp, obj.layout, obj.marginOp, obj.shadow, /*obj.animation || obj.filtera*/obj.animation, obj.filtera, obj.transform];
370
+ let ft = [obj.stroke, obj.gradient, obj.animation, obj.span, obj.backgroundOp, obj.layout, obj.marginOp, obj.shadow, /*obj.animation || obj.filtera*/obj.animation, obj.filtera, _hasAnimTransform ? obj.transform : undefined];
368
371
  ft = ft.filter(el => el != undefined);
369
372
 
370
373
 
package/layout/footer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/free.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/grid.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/group.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/header.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/image.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/label.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/link.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/list.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.138
2
+ * nodality v1.0.140
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */