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.
Files changed (174) 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/base.cjs.js +1 -1
  6. package/dist/base.esm.js +1 -1
  7. package/dist/beta-desktop-bar.cjs.js +1 -1
  8. package/dist/beta-desktop-bar.esm.js +1 -1
  9. package/dist/beta-mobile-bar.cjs.js +1 -1
  10. package/dist/beta-mobile-bar.esm.js +1 -1
  11. package/dist/bundle.umd.js +1 -1
  12. package/dist/button.cjs.js +1 -1
  13. package/dist/button.esm.js +1 -1
  14. package/dist/center.cjs.js +1 -1
  15. package/dist/center.esm.js +1 -1
  16. package/dist/checkbox.cjs.js +1 -1
  17. package/dist/checkbox.esm.js +1 -1
  18. package/dist/code.cjs.js +1 -1
  19. package/dist/code.esm.js +1 -1
  20. package/dist/container.cjs.js +1 -1
  21. package/dist/container.esm.js +1 -1
  22. package/dist/designer.cjs.js +1 -1
  23. package/dist/designer.esm.js +1 -1
  24. package/dist/dropdown.cjs.js +1 -1
  25. package/dist/dropdown.esm.js +1 -1
  26. package/dist/element-mapper.cjs.js +1 -1
  27. package/dist/element-mapper.esm.js +1 -1
  28. package/dist/finalresult.esm.js +1 -1
  29. package/dist/flex-card.cjs.js +1 -1
  30. package/dist/flex-card.esm.js +1 -1
  31. package/dist/flex-grid.cjs.js +1 -1
  32. package/dist/flex-grid.esm.js +1 -1
  33. package/dist/flex-row.cjs.js +1 -1
  34. package/dist/flex-row.esm.js +1 -1
  35. package/dist/floating-input.cjs.js +1 -1
  36. package/dist/floating-input.esm.js +1 -1
  37. package/dist/free.cjs.js +1 -1
  38. package/dist/free.esm.js +1 -1
  39. package/dist/horizontal-scroller.cjs.js +1 -1
  40. package/dist/horizontal-scroller.esm.js +1 -1
  41. package/dist/image-picker.cjs.js +1 -1
  42. package/dist/image-picker.esm.js +1 -1
  43. package/dist/image.cjs.js +1 -1
  44. package/dist/image.esm.js +1 -1
  45. package/dist/index.cjs.js +1 -1
  46. package/dist/index.esm.js +1 -1
  47. package/dist/link-getter.cjs.js +1 -1
  48. package/dist/link-getter.esm.js +1 -1
  49. package/dist/link.cjs.js +1 -1
  50. package/dist/link.esm.js +1 -1
  51. package/dist/multiswitcher.cjs.js +1 -1
  52. package/dist/multiswitcher.esm.js +1 -1
  53. package/dist/new-nav-bar.cjs.js +1 -1
  54. package/dist/new-nav-bar.esm.js +1 -1
  55. package/dist/picker.cjs.js +1 -1
  56. package/dist/picker.esm.js +1 -1
  57. package/dist/side-bar.cjs.js +1 -1
  58. package/dist/side-bar.esm.js +1 -1
  59. package/dist/side-nav-bar.cjs.js +1 -1
  60. package/dist/side-nav-bar.esm.js +1 -1
  61. package/dist/simple-bar.cjs.js +1 -1
  62. package/dist/simple-bar.esm.js +1 -1
  63. package/dist/slider-2025.cjs.js +1 -1
  64. package/dist/slider-2025.esm.js +1 -1
  65. package/dist/table.cjs.js +1 -1
  66. package/dist/table.esm.js +1 -1
  67. package/dist/text-field.cjs.js +1 -1
  68. package/dist/text-field.esm.js +1 -1
  69. package/dist/text.cjs.js +1 -1
  70. package/dist/text.esm.js +1 -1
  71. package/dist/ulist.cjs.js +1 -1
  72. package/dist/ulist.esm.js +1 -1
  73. package/dist/video.cjs.js +1 -1
  74. package/dist/video.esm.js +1 -1
  75. package/dist/zoom-card.cjs.js +1 -1
  76. package/dist/zoom-card.esm.js +1 -1
  77. package/layout/animator.js +107 -47
  78. package/layout/audio.js +1 -1
  79. package/layout/audionew.js +1 -1
  80. package/layout/base-2.js +1 -1
  81. package/layout/base.js +15 -11
  82. package/layout/beta-desktop-bar.js +1 -1
  83. package/layout/beta-mobile-bar.js +1 -1
  84. package/layout/box.js +1 -1
  85. package/layout/button.js +2 -3
  86. package/layout/cards.js +1 -1
  87. package/layout/center.js +3 -5
  88. package/layout/checkbox.js +1 -1
  89. package/layout/circle.js +1 -1
  90. package/layout/clean-row.js +1 -1
  91. package/layout/code.js +1 -1
  92. package/layout/container.js +2 -3
  93. package/layout/custom.js +1 -1
  94. package/layout/div-image.js +1 -1
  95. package/layout/dropdown-2025.js +1 -1
  96. package/layout/dropdown.js +1 -1
  97. package/layout/empty-element.js +1 -1
  98. package/layout/external-stylesheet.js +1 -1
  99. package/layout/flex-card.js +1 -1
  100. package/layout/flex-grid.js +1 -1
  101. package/layout/flex-row.js +1 -3
  102. package/layout/footer.js +1 -1
  103. package/layout/form-components/custom.js +1 -1
  104. package/layout/form-components/data-list.js +1 -1
  105. package/layout/form-components/floating-input.js +1 -1
  106. package/layout/form-components/form-all.js +1 -1
  107. package/layout/form-components/form.js +1 -1
  108. package/layout/form-components/image-picker.js +1 -1
  109. package/layout/form-components/picker.js +1 -1
  110. package/layout/form-components/radio.js +1 -1
  111. package/layout/form-components/radiogroup.js +1 -1
  112. package/layout/form-components/range.js +1 -1
  113. package/layout/free.js +1 -1
  114. package/layout/grid-new.js +1 -1
  115. package/layout/grid-switcher.js +1 -1
  116. package/layout/grid.js +1 -1
  117. package/layout/group.js +1 -1
  118. package/layout/header.js +1 -1
  119. package/layout/horizontal-scroller.js +1 -1
  120. package/layout/image-old.js +1 -1
  121. package/layout/image.js +1 -1
  122. package/layout/index.js +1 -1
  123. package/layout/label.js +1 -1
  124. package/layout/link.js +1 -1
  125. package/layout/list-OLD.js +1 -1
  126. package/layout/list.js +1 -1
  127. package/layout/meta-adder.js +1 -1
  128. package/layout/modal-2025.js +1 -1
  129. package/layout/modernwrap.js +1 -1
  130. package/layout/multiswitcher.js +1 -1
  131. package/layout/multiswitcherBeta.js +1 -1
  132. package/layout/nav-bar.js +1 -1
  133. package/layout/nav-factor/custom-div.js +1 -1
  134. package/layout/navBar-OLD.js +1 -1
  135. package/layout/new-flat-adder.js +1 -1
  136. package/layout/new-nav-bar.js +1 -1
  137. package/layout/offset-container.js +1 -1
  138. package/layout/polygon.js +1 -1
  139. package/layout/prerender-site.js +1 -1
  140. package/layout/prerender.js +1 -1
  141. package/layout/progress.js +1 -1
  142. package/layout/row.js +1 -1
  143. package/layout/saved-new-nav-bar.js +1 -1
  144. package/layout/scroll-video.js +1 -1
  145. package/layout/side-bar.js +1 -1
  146. package/layout/side-nav-bar.js +2 -3
  147. package/layout/simple-bar.js +1 -1
  148. package/layout/slider-2025.js +1 -1
  149. package/layout/spacer.js +1 -1
  150. package/layout/stack.js +1 -1
  151. package/layout/styler.js +1 -1
  152. package/layout/svg.js +1 -1
  153. package/layout/switcher.js +1 -1
  154. package/layout/table.js +1 -1
  155. package/layout/text-field.js +1 -1
  156. package/layout/text.js +3 -5
  157. package/layout/ulist.js +1 -1
  158. package/layout/video.js +1 -1
  159. package/layout/without-new.js +1 -1
  160. package/layout/wrap.js +1 -1
  161. package/layout/zoom-card.js +1 -1
  162. package/lib/card-getter.js +1 -1
  163. package/lib/data.js +1 -1
  164. package/lib/designer.js +65 -19
  165. package/lib/element-mapper.js +17 -73
  166. package/lib/keyframe-animation.js +1 -1
  167. package/lib/link-getter.js +1 -1
  168. package/lib/raster-ops.js +20 -2
  169. package/lib/scroll-video.js +1 -1
  170. package/lib/seo.js +1 -1
  171. package/lib/stacker.js +1 -1
  172. package/lib/theme.js +1 -1
  173. package/lib/transform-anim.js +1 -1
  174. package/package.json +1 -1
package/lib/designer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.199
2
+ * nodality v1.0.201
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -361,18 +361,52 @@ new Text("row.").set({
361
361
 
362
362
 
363
363
 
364
+ // Deep copy so the caller's node objects are never written to. add()
365
+ // rewrites entries in place (op replacement, `medium`/`fast` expansion,
366
+ // deletion of keys valued "default"), which used to mutate the array the
367
+ // user passed in — making a nodes array unusable for a second Des, or
368
+ // corrupting it when it came from framework state.
369
+ static cloneNodes(arr) {
370
+ if (!Array.isArray(arr)) return [];
371
+ try {
372
+ if (typeof structuredClone === "function") return structuredClone(arr);
373
+ } catch (e) {
374
+ // Node objects may carry functions (e.g. onTap) which
375
+ // structuredClone rejects; fall through to the manual copy.
376
+ }
377
+ const copy = (v) => {
378
+ if (Array.isArray(v)) return v.map(copy);
379
+ if (v && typeof v === "object") {
380
+ const o = {};
381
+ for (const k in v) o[k] = copy(v[k]);
382
+ return o;
383
+ }
384
+ return v;
385
+ };
386
+ return arr.map(copy);
387
+ }
388
+
364
389
  at(opts) {
365
- this.options.push(opts);
390
+ // Keep options/protoOptions in lockstep — add() indexes into
391
+ // protoOptions by the same q, so pushing to only one of them
392
+ // threw on the first .at() used without .nodes().
393
+ if (!Array.isArray(this.options)) this.options = [];
394
+ if (!Array.isArray(this.protoOptions)) this.protoOptions = [];
395
+ const one = Des.cloneNodes([opts])[0];
396
+ this.options.push(one);
397
+ this.protoOptions.push(one);
366
398
  return this;
367
399
  }
368
400
 
369
401
  nodes(arr) {
370
- this.options = arr;
371
- this.protoOptions = [...arr];
402
+ this.options = Des.cloneNodes(arr);
403
+ this.protoOptions = Des.cloneNodes(arr);
372
404
  return this;
373
405
  }
374
406
 
407
+ // Kept in sync with ElementMapper.getElType — see the note there about `p`.
375
408
  getElType(type) {
409
+ if (type === "p") return "S6";
376
410
  return `S${type.substr(1)}`;
377
411
  }
378
412
 
@@ -575,7 +609,13 @@ customOptions.forEach(item => {
575
609
  let color = customOptions[index].color;
576
610
  let width = customOptions[index].width;
577
611
 
578
- let as = replacementObjects[q];
612
+ // Clone per index. This used to assign the SAME
613
+ // replacementObjects[q] object to every node of the
614
+ // same op kind, so two `blast` nodes with different
615
+ // targets/colors collapsed into one — each iteration
616
+ // overwrote the previous one's target and the last
617
+ // write won for all of them.
618
+ let as = Des.cloneNodes([replacementObjects[q]])[0];
579
619
  as.target = target;
580
620
 
581
621
  if (range != null) {
@@ -860,7 +900,6 @@ if (/*q == i*/ true){ // 23:07.20 Nice!!!! 23:04 bef
860
900
  } else if (obj[key] === "slow") {
861
901
  obj[key] = "9s-ease-in-out";
862
902
  } else if (obj[key] === "default"){
863
- alert("PP")
864
903
  delete obj[key];
865
904
  }
866
905
  }*/
@@ -1015,10 +1054,10 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
1015
1054
 
1016
1055
  import {Animator} from "../layout/animator.js";
1017
1056
  import {Text} from "../layout/text.js";
1018
- import {Modal} from "../layout/modal2025.js";
1057
+ import {Modal} from "../layout/modal-2025.js";
1019
1058
  import {Stack} from "../layout/stack.js";
1020
1059
  import {Image} from "../layout/image.js";
1021
- import {FlexRow} from "../layout/flexrow.js";
1060
+ import {FlexRow} from "../layout/flex-row.js";
1022
1061
  import {Button} from "../layout/button.js";
1023
1062
  import {Spacer} from "../layout/spacer.js";
1024
1063
  import {Wrapper} from "../layout/container.js";
@@ -1253,7 +1292,11 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
1253
1292
  return this;
1254
1293
  }
1255
1294
 
1256
- toTextArea() {
1295
+ // `mount` is the selector every generated element renders into. It used
1296
+ // to be the hard-coded literal "#mount", so set({mount: "#other"}) was
1297
+ // silently ignored and a second Des rendered into the first one's mount.
1298
+ toTextArea(mount) {
1299
+ const target = mount || "#mount";
1257
1300
  let code = document.createElement("textarea");
1258
1301
  // It is necessary to have it to generate UI
1259
1302
  code.style.width = 300;
@@ -1266,7 +1309,7 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
1266
1309
  let codea = document.createElement("code");
1267
1310
 
1268
1311
 
1269
- const prepare = this.code.map(c => `${c}.render("#mount"); \n \n`);
1312
+ const prepare = this.code.map(c => `${c}.render("${target}"); \n \n`);
1270
1313
  this.code = prepare;
1271
1314
 
1272
1315
  codea.textContent = this.code;//.replaceAll(",.", ".").replaceAll(",, new", "new").replaceAll(/\[\s*\n*,\s*\n*/g, "["); // replace with your code
@@ -1275,9 +1318,12 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
1275
1318
  document.body.appendChild(pre); // append to the body or any other container
1276
1319
  document.body.appendChild(code);
1277
1320
 
1278
- let preo = document.createElement("pre");
1279
- preo.style.marginTop = "100px";
1280
- preo.style.overflow = "scroll";
1321
+ // Hold on to the nodes this instance created so set() can style them
1322
+ // directly instead of querying the page for the first #elements /
1323
+ // <pre> it finds, which could belong to the user's markup or to
1324
+ // another Des instance.
1325
+ this._codeEl = code;
1326
+ this._preEl = pre;
1281
1327
  return this;
1282
1328
  }
1283
1329
 
@@ -1290,18 +1336,18 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
1290
1336
  // when run from the CLI — no rendering side effects.
1291
1337
  if (typeof globalThis !== "undefined" && globalThis.NODALITY_EMIT === true) {
1292
1338
  // Populate this.code without triggering DOM work.
1293
- const prepare = this.code.map((c) => `${c}.render("#mount")`);
1339
+ const prepare = this.code.map((c) => `${c}.render("${(obj && obj.mount) || "#mount"}")`);
1294
1340
  globalThis.__NODALITY_EMITTED__ = prepare;
1295
1341
  return this;
1296
1342
  }
1297
1343
 
1298
- this.toTextArea();
1344
+ this.toTextArea(obj && obj.mount);
1299
1345
 
1300
- document.querySelector("#elements").style.display = "none";
1301
- document.querySelector("pre").style.display = "block";
1346
+ this._codeEl.style.display = "none";
1347
+ this._preEl.style.display = "block";
1302
1348
 
1303
1349
  if (obj.elements === false) {
1304
- document.querySelector(".nonLayout").style.display = "none";
1350
+ this._preEl.style.display = "none";
1305
1351
  }
1306
1352
 
1307
1353
  if (obj.layout === false) {
@@ -1312,7 +1358,7 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
1312
1358
  }
1313
1359
 
1314
1360
  if (obj.code === false){
1315
- document.querySelector(".nonLayout").style.display = "none";
1361
+ this._preEl.style.display = "none";
1316
1362
  }
1317
1363
 
1318
1364
  const layout = {
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.199
2
+ * nodality v1.0.201
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -55,7 +55,9 @@ import { Form } from "../layout/form-components/form.js";
55
55
  import { Button } from "../layout/button.js";
56
56
 
57
57
  // LIBRARY HELPERS / ANIMATIONS
58
- import { Des } from "../lib/designer.js";
58
+ // NOTE: no `import { Des }` here. It was unused and formed a circular import
59
+ // (designer -> element-mapper -> designer), which ES modules tolerate but which
60
+ // leaves one module partially initialised under some bundlers.
59
61
  import { LinkStyler } from "../lib/link-getter.js";
60
62
  import { CardGen } from "../lib/card-getter.js";
61
63
  import { KeyframeAnim } from "../lib/keyframe-animation.js";
@@ -379,45 +381,9 @@ animation: {
379
381
  }
380
382
 
381
383
 
382
- static mapCopya(){
383
-
384
-
385
- return `\n
386
- new Wrapper()
387
- .set({
388
- width: "600px",
389
- height: "300px",
390
- justifyContent: "center",
391
- alignItems: "center",
392
- display: "flex",
393
- position: "relative",
394
- })
395
- .add(
396
- Array.from({ length: 3 }).map((_, i) => {
397
- const angle = i * 120;
398
- return new Text("Hello")
399
- .set({
400
- size: "S1",
401
- color: "green",
402
- position: "absolute",
403
- transform: {
404
- op: {
405
- name: "transform",
406
-
407
- static: true,
408
- keep: true,
409
- hardCSS: \`translate(-50%, -50%) rotate(\${angle}deg) translate(${radius}px) rotate(\${-angle}deg)\`
410
- values: [
411
- \`translate(-50%, -50%) rotate(\${angle}deg) translate(120px) rotate(\${-angle}deg)\`,
412
- ],
413
-
414
- }
415
- }
416
- });
417
- })
418
- )
419
- `;
420
- }
384
+ // REMOVED: static mapCopya() — unreachable from mapType() and it
385
+ // referenced an undefined `radius`, so any call was a guaranteed
386
+ // ReferenceError. Kept in git history if the ring layout is wanted back.
421
387
 
422
388
  static button(){
423
389
  return new Button("Submit")
@@ -427,7 +393,7 @@ animation: {
427
393
  background: "#1abc9c",
428
394
  arrpad: {sides: ["all"], value: ".3rem"},
429
395
  radius: ".3rem",
430
- onTap: () => {alert("Nice")},
396
+ onTap: () => { console.log("[nodality] demo button tapped"); },
431
397
  keySet: {key: "border", value: "3px solid green"}
432
398
  });
433
399
  }
@@ -465,7 +431,7 @@ animation: {
465
431
  // alert("PP")
466
432
  return new RadioGroup()
467
433
  .set({
468
- items: ["Male", "Female", "Third shit"],
434
+ items: ["Male", "Female", "Other"],
469
435
  multiple: true // wrnóng
470
436
  });
471
437
  }
@@ -1605,35 +1571,9 @@ const blast = this.filtero("blast", el.id, obj.customOptions);
1605
1571
  }
1606
1572
 
1607
1573
 
1608
- static mapCDiv(obj){
1609
-
1610
- let customOptions = obj.customOptions;
1611
-
1612
-
1613
-
1614
- if (rta) {
1615
-
1616
- let re = el;
1617
- re["makeResponsiveBehaviour"] = rta.op.hash[0].l;
1618
- re["index"] = i;
1619
-
1620
- let childRe = {};
1621
- childRe["width"] = "200px";
1622
- childRe["height"] = "100px";
1623
-
1624
- ela = new Wrapper().set(re)
1625
- if (rta.op.hash[0].child) {
1626
-
1627
- childRe["makeResponsiveBehaviour"] = rta.op.hash[0].child.l;
1628
-
1629
- let child = new Wrapper().set(childRe).add([
1630
- new Text("Hello")
1631
- ]);
1632
-
1633
- ela = new Wrapper().set(re).add([child]);
1634
- }
1635
- }
1636
- }
1574
+ // REMOVED: static mapCDiv(obj) — its dispatch in mapType() has been
1575
+ // commented out for a long time and the body referenced undefined
1576
+ // `rta`, `el` and `i`, so wiring it back up would have thrown.
1637
1577
 
1638
1578
  static checkbox(obj){
1639
1579
  return new Checkbox().set({
@@ -1693,7 +1633,7 @@ static form(obj){
1693
1633
  new RadioGroup()
1694
1634
  .set({
1695
1635
  name: "gender",
1696
- items: ["Male", "Female", "Third shit"],
1636
+ items: ["Male", "Female", "Other"],
1697
1637
  multiple: false,
1698
1638
  tint: "#1abc9c",
1699
1639
  font: "Arial",
@@ -1877,7 +1817,11 @@ return `new AreaSwitcher()
1877
1817
  }*/
1878
1818
 
1879
1819
 
1820
+ // h1..h6 -> S1..S6. `p` has no digit to slice, so this used to produce the
1821
+ // string "S", and fluidCopy() (which only branches on S1..S6) then silently
1822
+ // applied no fluid sizing at all to every paragraph.
1880
1823
  static getElType(type) {
1824
+ if (type === "p") return "S6";
1881
1825
  return `S${type.substr(1)}`;
1882
1826
  }
1883
1827
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.199
2
+ * nodality v1.0.201
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.199
2
+ * nodality v1.0.201
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/lib/raster-ops.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.199
2
+ * nodality v1.0.201
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1965,8 +1965,26 @@ function applyRasterPipeline(el, rasterNodes) {
1965
1965
  // canvasWidth/contentWidth, so the drawn glyphs no longer sit
1966
1966
  // where the DOM text does and selection lands on the wrong
1967
1967
  // characters.
1968
+ //
1969
+ // The wrapper must also CARRY THE HOST'S OWN LAYOUT. Hardcoding
1970
+ // `display:block` here silently dropped it: a host centring its
1971
+ // child with `align: "center"` (display:flex, flex-direction:
1972
+ // column, align-items:center) handed that child to a block
1973
+ // wrapper, so the child fell back to the left edge of the box.
1974
+ // On a 212px CTA host holding a ~164px pill that reads as ~24px
1975
+ // off centre — visible only in live mode, because in snapshot
1976
+ // mode the children never leave the host.
1977
+ const hostCS = getComputedStyle(el);
1978
+ const hostIsFlex = hostCS.display === "flex" || hostCS.display === "inline-flex";
1968
1979
  wrap.style.cssText =
1969
- `display:block;width:${rect.width}px;height:${rect.height}px;`;
1980
+ `display:${hostIsFlex ? "flex" : "block"};` +
1981
+ `width:${rect.width}px;height:${rect.height}px;`;
1982
+ if (hostIsFlex) {
1983
+ wrap.style.flexDirection = hostCS.flexDirection;
1984
+ wrap.style.alignItems = hostCS.alignItems;
1985
+ wrap.style.justifyContent = hostCS.justifyContent;
1986
+ wrap.style.gap = hostCS.gap;
1987
+ }
1970
1988
  while (el.firstChild) wrap.appendChild(el.firstChild);
1971
1989
  canvas.appendChild(wrap);
1972
1990
  sourceEl = wrap;
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.199
2
+ * nodality v1.0.201
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/lib/seo.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.199
2
+ * nodality v1.0.201
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/lib/stacker.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.199
2
+ * nodality v1.0.201
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/lib/theme.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.199
2
+ * nodality v1.0.201
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.199
2
+ * nodality v1.0.201
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodality",
3
- "version": "1.0.199",
3
+ "version": "1.0.201",
4
4
  "description": "A lightweight library for declarative UI elements.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",