nodality 1.0.185 → 1.0.187

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 (184) 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/card-getter.cjs.js +1 -1
  13. package/dist/card-getter.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/data-list.cjs.js +1 -1
  23. package/dist/data-list.esm.js +1 -1
  24. package/dist/designer.cjs.js +1 -1
  25. package/dist/designer.esm.js +1 -1
  26. package/dist/dropdown.cjs.js +1 -1
  27. package/dist/dropdown.esm.js +1 -1
  28. package/dist/element-mapper.cjs.js +1 -1
  29. package/dist/element-mapper.esm.js +1 -1
  30. package/dist/finalresult.esm.js +1 -1
  31. package/dist/flex-card.cjs.js +1 -1
  32. package/dist/flex-card.esm.js +1 -1
  33. package/dist/flex-grid.cjs.js +1 -1
  34. package/dist/flex-grid.esm.js +1 -1
  35. package/dist/flex-row.cjs.js +1 -1
  36. package/dist/flex-row.esm.js +1 -1
  37. package/dist/floating-input.cjs.js +1 -1
  38. package/dist/floating-input.esm.js +1 -1
  39. package/dist/free.cjs.js +1 -1
  40. package/dist/free.esm.js +1 -1
  41. package/dist/horizontal-scroller.cjs.js +1 -1
  42. package/dist/horizontal-scroller.esm.js +1 -1
  43. package/dist/image-picker.cjs.js +1 -1
  44. package/dist/image-picker.esm.js +1 -1
  45. package/dist/image.cjs.js +1 -1
  46. package/dist/image.esm.js +1 -1
  47. package/dist/index.cjs.js +1 -1
  48. package/dist/index.esm.js +1 -1
  49. package/dist/keyframe-animation.cjs.js +1 -1
  50. package/dist/keyframe-animation.esm.js +1 -1
  51. package/dist/link-getter.cjs.js +1 -1
  52. package/dist/link-getter.esm.js +1 -1
  53. package/dist/link.cjs.js +1 -1
  54. package/dist/link.esm.js +1 -1
  55. package/dist/modal-2025.cjs.js +1 -1
  56. package/dist/modal-2025.esm.js +1 -1
  57. package/dist/multiswitcher.cjs.js +1 -1
  58. package/dist/multiswitcher.esm.js +1 -1
  59. package/dist/new-nav-bar.cjs.js +1 -1
  60. package/dist/new-nav-bar.esm.js +1 -1
  61. package/dist/picker.cjs.js +1 -1
  62. package/dist/picker.esm.js +1 -1
  63. package/dist/radio.cjs.js +1 -1
  64. package/dist/radio.esm.js +1 -1
  65. package/dist/side-nav-bar.cjs.js +1 -1
  66. package/dist/side-nav-bar.esm.js +1 -1
  67. package/dist/simple-bar.cjs.js +1 -1
  68. package/dist/simple-bar.esm.js +1 -1
  69. package/dist/slider-2025.cjs.js +1 -1
  70. package/dist/slider-2025.esm.js +1 -1
  71. package/dist/stacker.cjs.js +1 -1
  72. package/dist/stacker.esm.js +1 -1
  73. package/dist/table.cjs.js +1 -1
  74. package/dist/table.esm.js +1 -1
  75. package/dist/text-field.cjs.js +1 -1
  76. package/dist/text-field.esm.js +1 -1
  77. package/dist/text.cjs.js +1 -1
  78. package/dist/text.esm.js +1 -1
  79. package/dist/transform-anim.cjs.js +1 -1
  80. package/dist/transform-anim.esm.js +1 -1
  81. package/dist/ulist.cjs.js +1 -1
  82. package/dist/ulist.esm.js +1 -1
  83. package/dist/video.cjs.js +1 -1
  84. package/dist/video.esm.js +1 -1
  85. package/dist/zoom-card.cjs.js +1 -1
  86. package/dist/zoom-card.esm.js +1 -1
  87. package/layout/animator.js +1 -31
  88. package/layout/audio.js +1 -1
  89. package/layout/audionew.js +1 -1
  90. package/layout/base-2.js +1 -2
  91. package/layout/base.js +1 -1
  92. package/layout/beta-desktop-bar.js +1 -9
  93. package/layout/beta-mobile-bar.js +1 -17
  94. package/layout/box.js +1 -1
  95. package/layout/button.js +1 -1
  96. package/layout/cards.js +1 -2
  97. package/layout/center.js +1 -1
  98. package/layout/checkbox.js +1 -1
  99. package/layout/circle.js +1 -1
  100. package/layout/clean-row.js +1 -8
  101. package/layout/code.js +1 -3
  102. package/layout/container.js +1 -3
  103. package/layout/custom.js +1 -1
  104. package/layout/div-image.js +1 -1
  105. package/layout/dropdown-2025.js +1 -1
  106. package/layout/dropdown.js +1 -3
  107. package/layout/empty-element.js +1 -1
  108. package/layout/external-stylesheet.js +1 -1
  109. package/layout/flex-card.js +1 -2
  110. package/layout/flex-grid.js +1 -3
  111. package/layout/flex-row.js +1 -3
  112. package/layout/footer.js +1 -1
  113. package/layout/form-components/custom.js +1 -1
  114. package/layout/form-components/data-list.js +1 -4
  115. package/layout/form-components/floating-input.js +1 -1
  116. package/layout/form-components/form-all.js +1 -9
  117. package/layout/form-components/form.js +1 -7
  118. package/layout/form-components/image-picker.js +1 -1
  119. package/layout/form-components/picker.js +1 -1
  120. package/layout/form-components/radio.js +1 -7
  121. package/layout/form-components/radiogroup.js +1 -7
  122. package/layout/form-components/range.js +1 -1
  123. package/layout/free.js +1 -10
  124. package/layout/grid-new.js +1 -5
  125. package/layout/grid-switcher.js +1 -6
  126. package/layout/grid.js +1 -4
  127. package/layout/group.js +1 -1
  128. package/layout/header.js +1 -1
  129. package/layout/horizontal-scroller.js +1 -4
  130. package/layout/image-old.js +1 -1
  131. package/layout/image.js +1 -1
  132. package/layout/index.js +1 -1
  133. package/layout/label.js +1 -1
  134. package/layout/link.js +1 -1
  135. package/layout/list-OLD.js +1 -1
  136. package/layout/list.js +1 -1
  137. package/layout/meta-adder.js +1 -1
  138. package/layout/modal-2025.js +1 -2
  139. package/layout/modernwrap.js +1 -2
  140. package/layout/multiswitcher.js +1 -8
  141. package/layout/multiswitcherBeta.js +1 -1
  142. package/layout/nav-bar.js +1 -7
  143. package/layout/nav-factor/custom-div.js +1 -1
  144. package/layout/navBar-OLD.js +1 -2
  145. package/layout/new-flat-adder.js +1 -1
  146. package/layout/new-nav-bar.js +1 -3
  147. package/layout/offset-container.js +1 -1
  148. package/layout/polygon.js +1 -1
  149. package/layout/prerender-site.js +1 -1
  150. package/layout/prerender.js +1 -1
  151. package/layout/progress.js +1 -1
  152. package/layout/row.js +1 -1
  153. package/layout/saved-new-nav-bar.js +1 -7
  154. package/layout/scroll-video.js +1 -1
  155. package/layout/side-bar.js +1 -1
  156. package/layout/side-nav-bar.js +1 -15
  157. package/layout/simple-bar.js +1 -1
  158. package/layout/slider-2025.js +1 -1
  159. package/layout/spacer.js +1 -1
  160. package/layout/stack.js +1 -1
  161. package/layout/styler.js +1 -1
  162. package/layout/svg.js +1 -1
  163. package/layout/switcher.js +1 -4
  164. package/layout/table.js +1 -2
  165. package/layout/text-field.js +1 -1
  166. package/layout/text.js +1 -18
  167. package/layout/ulist.js +1 -3
  168. package/layout/video.js +1 -1
  169. package/layout/without-new.js +1 -1
  170. package/layout/wrap.js +1 -1
  171. package/layout/zoom-card.js +1 -4
  172. package/lib/card-getter.js +1 -5
  173. package/lib/data.js +1 -1
  174. package/lib/designer.js +1 -29
  175. package/lib/element-mapper.js +1 -12
  176. package/lib/keyframe-animation.js +1 -8
  177. package/lib/link-getter.js +1 -7
  178. package/lib/raster-ops.js +121 -13
  179. package/lib/scroll-video.js +1 -1
  180. package/lib/seo.js +1 -1
  181. package/lib/stacker.js +1 -2
  182. package/lib/theme.js +1 -1
  183. package/lib/transform-anim.js +1 -3
  184. package/package.json +2 -11
package/layout/text.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -23,7 +23,6 @@ class Text extends Animator {
23
23
  this.react = [];
24
24
  this.code.push(`new Text("${this.text}")`);
25
25
  //console.log("15/12/25 cool");
26
- console.log("26-01-26 11:12:00");
27
26
  }
28
27
 
29
28
 
@@ -177,7 +176,6 @@ class Text extends Animator {
177
176
  if (opts === undefined) {
178
177
  return this;
179
178
  }
180
- console.log("DEL");
181
179
  const options = opts.op;
182
180
  const breakpoint = opts.point;
183
181
 
@@ -324,8 +322,6 @@ console.log("DEL");
324
322
 
325
323
  // Line breaks
326
324
  html = html.replace(/\n/g, "<br>");
327
- console.log("HTML");
328
- console.log(html);
329
325
 
330
326
  return html;
331
327
  }
@@ -463,8 +459,6 @@ this.res.style.position = "absolute";
463
459
 
464
460
 
465
461
  /*if (obj.transform){
466
- console.warn("ARE DIFFERENT OBJS HERE?");
467
- console.warn(obj.transform)
468
462
  }*/
469
463
  // Done by commonMethods
470
464
  //obj.transform && this.reactOnTransform(obj.transform); // remove obj.op.duration
@@ -473,8 +467,6 @@ this.res.style.position = "absolute";
473
467
  alert("P");
474
468
  }*/
475
469
 
476
- console.log("OGA");
477
- console.log(obj);
478
470
 
479
471
 
480
472
  this.callReact(obj);
@@ -552,8 +544,6 @@ this.res.style.position = "absolute";
552
544
  }*/
553
545
 
554
546
  // console.log("ARA IS " + arr);
555
- console.log("ARA IS ");
556
- console.log(arr);
557
547
 
558
548
  this.chainReact(arr, this.options.id, keep);
559
549
  }
@@ -1353,8 +1343,6 @@ checkForAnimation(queries){
1353
1343
  el.setAttribute("id", obj.id);
1354
1344
 
1355
1345
 
1356
- console.log("ANIMAS");
1357
- console.log(obj);
1358
1346
 
1359
1347
  if (obj.type === "span"){
1360
1348
 
@@ -1733,9 +1721,6 @@ checkForAnimation(queries){
1733
1721
  render(div) {
1734
1722
 
1735
1723
  /*console.log("FINAL CSS");
1736
- console.log(this.css[0].range);
1737
- console.log(this.css[0].rules);
1738
- console.log(this.elCSS);
1739
1724
  */
1740
1725
 
1741
1726
 
@@ -1769,8 +1754,6 @@ checkForAnimation(queries){
1769
1754
  }
1770
1755
 
1771
1756
  if (this.looksLikeMarkdown(this.text)) {
1772
- console.log("See md"); // 224635 29/09/25
1773
- console.log(this.parseMarkdown(this.text));
1774
1757
  this.res.innerHTML = this.parseMarkdown(this.text);
1775
1758
  }
1776
1759
 
package/layout/ulist.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -91,8 +91,6 @@ class UList extends Animator {
91
91
  }*/
92
92
 
93
93
  // console.log("ARA IS " + arr);
94
- console.log("ARA IS ");
95
- console.log(arr);
96
94
 
97
95
  this.chainReact(arr, this.options.id, keep);
98
96
  }
package/layout/video.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/wrap.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -135,9 +135,6 @@ class ZoomCard extends Animator {
135
135
  render(div) {
136
136
 
137
137
  /*console.log("FINAL CSS");
138
- console.log(this.css[0].range);
139
- console.log(this.css[0].rules);
140
- console.log(this.elCSS);
141
138
  */
142
139
 
143
140
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -7,8 +7,6 @@
7
7
  class CardGen {
8
8
 
9
9
  static cards(el, cardOption, storage) {
10
- console.log("PP");
11
- console.log(storage);
12
10
 
13
11
  let childStrings = [];
14
12
  for (var o = 0; o < el.children.length; o++) {
@@ -72,8 +70,6 @@ class CardGen {
72
70
 
73
71
  // Insert the text at the found index
74
72
  let result = inputString.slice(0, index) + ', ' + textToInsert + ', ' + inputString.slice(index);
75
- console.log("RETA");
76
- console.log(result);
77
73
  return result;
78
74
  } else {
79
75
  // If no match is found, return the original string
package/lib/data.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/lib/designer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -369,8 +369,6 @@ new Text("row.").set({
369
369
  nodes(arr) {
370
370
  this.options = arr;
371
371
  this.protoOptions = [...arr];
372
- console.log(this.options);
373
- console.log(this.protoOptions);
374
372
  return this;
375
373
  }
376
374
 
@@ -402,13 +400,8 @@ new Text("row.").set({
402
400
  this.elHTML = [];
403
401
 
404
402
  let customOptions = this.options;
405
- console.log("COO");
406
- console.log(customOptions);
407
403
 
408
404
  customOptions.forEach(item => {
409
- console.log("mid")
410
- console.log(item);
411
- console.log("checking:", item.direction);
412
405
  if (item.direction === "radial" ) {
413
406
  // alert("//")
414
407
  item.gradient = "radial-gradient(orange, green)";
@@ -563,10 +556,7 @@ customOptions.forEach(item => {
563
556
  ];
564
557
 
565
558
  /*console.log("OPS");
566
- console.log(ops);
567
559
 
568
- console.log("CUSTOM OPTIONS");
569
- console.log(customOptions);
570
560
  */
571
561
 
572
562
 
@@ -621,7 +611,6 @@ customOptions.forEach(item => {
621
611
  }
622
612
  }
623
613
 
624
- console.warn(customOptions);
625
614
 
626
615
 
627
616
 
@@ -810,8 +799,6 @@ if (duration === "default"){
810
799
  if (/*q == i*/ true){ // 23:07.20 Nice!!!! 23:04 bef
811
800
  // 193615 Nice!!!
812
801
  //alert("MESS UP");
813
- console.log("DURA");
814
- console.log(duration);
815
802
 
816
803
  customOptions[q].op = {
817
804
  name: "transform",
@@ -837,8 +824,6 @@ console.log(duration);
837
824
  delete customOptions[q].op[dur]; // remove in both logs, weird
838
825
  }
839
826
 
840
- console.log("COQ");
841
- console.log(customOptions[q].op.values);
842
827
  if (customOptions[q]?.op.values){
843
828
 
844
829
  // alert("P")
@@ -861,7 +846,6 @@ console.log(duration);
861
846
  }
862
847
  } // for q = cycle end
863
848
 
864
- console.log(`----------------------------LLL ${i} ${customOptions.length}`);
865
849
 
866
850
 
867
851
 
@@ -920,9 +904,7 @@ console.log(duration);
920
904
 
921
905
  replaceMedium(customOptions);
922
906
 
923
- console.log("SENDING CUSTOM OPTIONS");
924
907
 
925
- console.log(customOptions);
926
908
 
927
909
  const matchEls = ["h1", "h2", "h3", "h4", "h5", "h6", "p"].includes(el.type) || el.type === "img" || el.type === "a";
928
910
 
@@ -973,9 +955,6 @@ replaceMedium(customOptions);
973
955
  i: i,
974
956
  storage: this.stor
975
957
  });
976
- console.log("S///");
977
- console.log(ela);
978
- console.log(ela.toCode());
979
958
 
980
959
  this.code.push(ela.toCode());
981
960
 
@@ -1153,15 +1132,10 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
1153
1132
  i: i,
1154
1133
  storage: this.stor
1155
1134
  });
1156
- console.log("S///");
1157
- console.log(ela);
1158
- console.log(ela.toCode());
1159
1135
 
1160
1136
  this.code.push(ela.toCode());
1161
1137
 
1162
1138
  } else if (el.type === "cards") {
1163
- console.log("STORO");
1164
- console.log(this.stor);
1165
1139
  ela = ElementMapper.mapType({
1166
1140
  el: el,
1167
1141
  customOptions: customOptions,
@@ -1365,8 +1339,6 @@ const components = {
1365
1339
 
1366
1340
  for (var i = 0; i < this.code.length; i++) {
1367
1341
  let sub = this.code[i];
1368
- console.log("SUBO");
1369
- console.log(sub);
1370
1342
  new Function(...Object.keys(components), sub)(...Object.values(components));
1371
1343
  // eval(`${sub}`);
1372
1344
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -150,8 +150,6 @@ class ElementMapper { // 22:09:58 04/11/2024
150
150
 
151
151
 
152
152
  let el = obj.el;
153
- console.log("///");
154
- console.log(el);
155
153
 
156
154
  return new Table()
157
155
  .add([
@@ -195,8 +193,6 @@ class ElementMapper { // 22:09:58 04/11/2024
195
193
  static mapRow(obj){
196
194
 
197
195
  let el = obj.el;
198
- console.log("///");
199
- console.log(el);
200
196
 
201
197
 
202
198
  // return new Text("Hello").set({size: "S3"});
@@ -772,7 +768,6 @@ if (obj.el.dropdown){
772
768
  }
773
769
 
774
770
  const updatedLinks = removeKeyFromArray(links, "");
775
- console.log(updatedLinks);
776
771
  */
777
772
 
778
773
  let shouldAnim = obj.el.animation;
@@ -1367,9 +1362,7 @@ let elo = new Polygon({ id: "hex" })
1367
1362
  raster: this.filteroRaster(el.id, obj.customOptions),
1368
1363
  })
1369
1364
 
1370
- console.log(elo.code);
1371
1365
 
1372
- console.log(elo.toCode);
1373
1366
 
1374
1367
  return elo;
1375
1368
  }
@@ -1382,8 +1375,6 @@ let elo = new Polygon({ id: "hex" })
1382
1375
 
1383
1376
 
1384
1377
 
1385
- console.warn("WHY DIFFER ATA TEXT (grad)");
1386
- console.log(obj.customOptions);
1387
1378
 
1388
1379
 
1389
1380
  return new Text(el.text || el.value)
@@ -1504,8 +1495,6 @@ console.log(obj.customOptions);
1504
1495
 
1505
1496
 
1506
1497
  static mapGrid(obj){
1507
- console.log("OBJ IS");
1508
- console.log(obj.storage);
1509
1498
  let el = obj.el;
1510
1499
  let cardOption = obj.customOptions.find(l => l.op.name === "card-style") ?? {};
1511
1500
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -244,10 +244,6 @@ if (cy < 0) cy = 0;
244
244
  if (cw > iw) cw = iw;
245
245
  if (ch > ih) ch = ih;
246
246
 
247
- console.log("WEIRD")
248
- console.log(img);
249
- console.log(cy);
250
- console.log(cw);
251
247
  // fill image in dest. rectangle
252
248
  ctx.drawImage(img, cx, cy, cw, ch, x, y, w, h);
253
249
  }
@@ -271,7 +267,6 @@ maska(data){
271
267
 
272
268
  setupTopElement() {
273
269
  // If we scroll further after seeing topElement
274
- console.warn("TOP INIT");
275
270
 
276
271
 
277
272
 
@@ -403,7 +398,6 @@ maska(data){
403
398
 
404
399
 
405
400
  /* for (var i = 0; i < this.h2a.children[0].children.length; i++){
406
- console.log("P")
407
401
  this.h2a.children[0].children[i].style.transform = `matrix(1, 0, 0, 1, 0, -${offset})`;
408
402
  this.h2a.children[0].children[i].style.opacity = `${opacity - i * 0.2}`;
409
403
  }*/
@@ -604,7 +598,6 @@ maska(data){
604
598
 
605
599
 
606
600
  for (var i = 0; i < this.h2a.children[0].children.length; i++){
607
- console.log("P")
608
601
  this.h2a.children[0].children[i].style.transform = `matrix(1, 0, 0, 1, 0, -${offset})`;
609
602
  this.h2a.children[0].children[i].style.opacity = `${opacity - i * 0.2}`;
610
603
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -11,10 +11,6 @@ class LinkStyler {
11
11
  let el = obj.el;
12
12
  let re = obj.re;
13
13
 
14
- console.log("OLESTE");
15
- console.log(bst);
16
- console.log(el);
17
- console.log(re);
18
14
  let customOptions = obj.options;
19
15
  let links = [];
20
16
 
@@ -68,8 +64,6 @@ class LinkStyler {
68
64
  }
69
65
  }
70
66
 
71
- console.log("OMESTE");
72
- console.log(obj);
73
67
  let split = bst[j].op.ops.split("-");
74
68
 
75
69
  // re["color"] = //bst.op.style.color;
package/lib/raster-ops.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -955,9 +955,38 @@ ${defaultSeam}
955
955
 
956
956
  // ── Snapshot backend: DOM subtree -> SVG foreignObject -> texture ────
957
957
 
958
+ // Viewport-relative CSS inside a foreignObject resolves against the SVG
959
+ // element's own size, not the browser viewport — so `font-size: calc(
960
+ // 1.625rem + 5.075vw)` renders at a different size in the snapshot than
961
+ // it does on the page. The glyphs then sit somewhere the DOM text does
962
+ // not, which is what makes the selection highlight look offset.
963
+ //
964
+ // Freeze those declarations to the pixel values the element actually
965
+ // computes, on a clone, so the snapshot matches the live layout.
966
+ const VIEWPORT_UNIT = /\d(?:vw|vh|vmin|vmax|dvw|dvh|svw|svh|lvw|lvh)\b/i;
967
+
968
+ function freezeViewportUnits(original, clone) {
969
+ const origs = [original, ...original.querySelectorAll("*")];
970
+ const clones = [clone, ...clone.querySelectorAll("*")];
971
+ for (let i = 0; i < origs.length && i < clones.length; i++) {
972
+ const inline = clones[i].style;
973
+ if (!inline || inline.length === 0) continue;
974
+ let computed = null;
975
+ // Iterate a snapshot of the names: writing to style mutates the list.
976
+ for (const prop of Array.from(inline)) {
977
+ if (!VIEWPORT_UNIT.test(inline.getPropertyValue(prop))) continue;
978
+ computed = computed || window.getComputedStyle(origs[i]);
979
+ const px = computed.getPropertyValue(prop);
980
+ if (px) inline.setProperty(prop, px, inline.getPropertyPriority(prop));
981
+ }
982
+ }
983
+ return clone;
984
+ }
985
+
958
986
  function snapshotToImage(el, w, h, dpr) {
959
987
  return new Promise((resolve, reject) => {
960
- const serialized = new XMLSerializer().serializeToString(el);
988
+ const serialized = new XMLSerializer()
989
+ .serializeToString(freezeViewportUnits(el, el.cloneNode(true)));
961
990
  const svg =
962
991
  `<svg xmlns="http://www.w3.org/2000/svg" width="${w * dpr}" height="${h * dpr}" viewBox="0 0 ${w} ${h}">` +
963
992
  `<foreignObject width="100%" height="100%">` +
@@ -1067,6 +1096,16 @@ function applyRasterPipeline(el, rasterNodes) {
1067
1096
  // chrome://flags/#canvas-draw-element). layoutsubtree was already
1068
1097
  // set before context creation above.
1069
1098
  const wrap = document.createElement("div");
1099
+ // The wrapper MUST fill the canvas box. Left to itself it
1100
+ // shrink-wraps its content — a headline wraps to the text width,
1101
+ // not the element width — and texElementImage2D then captures
1102
+ // that narrower box while the shader maps the texture across the
1103
+ // whole canvas. Everything comes out stretched horizontally by
1104
+ // canvasWidth/contentWidth, so the drawn glyphs no longer sit
1105
+ // where the DOM text does and selection lands on the wrong
1106
+ // characters.
1107
+ wrap.style.cssText =
1108
+ `display:block;width:${rect.width}px;height:${rect.height}px;`;
1070
1109
  while (el.firstChild) wrap.appendChild(el.firstChild);
1071
1110
  canvas.appendChild(wrap);
1072
1111
  sourceEl = wrap;
@@ -1075,13 +1114,24 @@ function applyRasterPipeline(el, rasterNodes) {
1075
1114
  canvas.style.cssText =
1076
1115
  `display:block;width:${rect.width}px;height:${rect.height}px;`;
1077
1116
  } else {
1078
- // Snapshot mode: purely visual overlay; the real DOM stays put
1079
- // underneath for accessibility, selection and events.
1117
+ // Snapshot mode: purely visual overlay.
1080
1118
  canvas.style.cssText =
1081
1119
  "position:absolute;top:0;left:0;" +
1082
1120
  `width:${rect.width}px;height:${rect.height}px;` +
1083
1121
  "pointer-events:none;z-index:2147483000;";
1084
- canvas.setAttribute("aria-hidden", "true");
1122
+ if (pureOverlay) {
1123
+ // The real content is still visible underneath and keeps its
1124
+ // own semantics, so the canvas is pure decoration.
1125
+ canvas.setAttribute("aria-hidden", "true");
1126
+ } else {
1127
+ // In-place: the host gets hidden below, which would take its
1128
+ // text out of the accessibility tree, out of find-in-page and
1129
+ // out of innerText. Carry the label onto the canvas so the
1130
+ // element is still announced rather than silently vanishing.
1131
+ canvas.setAttribute("role", "img");
1132
+ const label = (el.textContent || "").replace(/\s+/g, " ").trim();
1133
+ if (label) canvas.setAttribute("aria-label", label.slice(0, 300));
1134
+ }
1085
1135
  }
1086
1136
  el.appendChild(canvas);
1087
1137
 
@@ -1335,6 +1385,65 @@ function applyRasterPipeline(el, rasterNodes) {
1335
1385
  // texture is live, the host's own painting is hidden via the
1336
1386
  // visibility trick (the canvas child re-shows itself) so transparent
1337
1387
  // hosts — e.g. a bare headline — don't ghost-double under the effect.
1388
+ // Keeping the host selectable.
1389
+ // --------------------------------------------------------------
1390
+ // The host must NOT be visibility:hidden. Hidden text cannot be
1391
+ // selected, so dragging over the effect either selects nothing or
1392
+ // catches neighbouring content — which is what makes the highlight
1393
+ // look offset and unreliable. Instead the host stays in the flow
1394
+ // with its ink made transparent, and the canvas is painted BEHIND
1395
+ // it. The glyphs are invisible but still hit-testable, and the
1396
+ // browser paints the selection highlight above the canvas, aligned
1397
+ // with the real text, because that is where the text actually is.
1398
+ const INK = {
1399
+ "color": "transparent",
1400
+ "-webkit-text-fill-color": "transparent",
1401
+ "-webkit-text-stroke-color": "transparent",
1402
+ "background-color": "transparent",
1403
+ "background-image": "none",
1404
+ "border-color": "transparent",
1405
+ "box-shadow": "none",
1406
+ "text-shadow": "none",
1407
+ };
1408
+ const REPLACED = "img,svg,video,picture,iframe";
1409
+ let inkSaved = null;
1410
+
1411
+ const hideHostInk = () => {
1412
+ if (inkSaved) return;
1413
+ inkSaved = [];
1414
+ for (const node of [el, ...el.querySelectorAll("*")]) {
1415
+ if (node === canvas || node.tagName === "CANVAS") continue;
1416
+ const saved = { op: node.style.getPropertyValue("opacity") };
1417
+ for (const p in INK) saved[p] = node.style.getPropertyValue(p);
1418
+ inkSaved.push([node, saved]);
1419
+ for (const p in INK) node.style.setProperty(p, INK[p], "important");
1420
+ // Replaced content has no "ink" property to neutralise.
1421
+ if (node !== el && node.matches && node.matches(REPLACED)) {
1422
+ node.style.setProperty("opacity", "0", "important");
1423
+ }
1424
+ }
1425
+ // Contain the negative-z canvas so it stays behind this element's
1426
+ // text but never slips behind an ancestor's background.
1427
+ el.style.isolation = "isolate";
1428
+ canvas.style.zIndex = "-1";
1429
+ };
1430
+
1431
+ const showHostInk = () => {
1432
+ el.style.visibility = "";
1433
+ if (!inkSaved) return;
1434
+ for (const [node, saved] of inkSaved) {
1435
+ for (const p in INK) {
1436
+ if (saved[p]) node.style.setProperty(p, saved[p]);
1437
+ else node.style.removeProperty(p);
1438
+ }
1439
+ if (saved.op) node.style.setProperty("opacity", saved.op);
1440
+ else node.style.removeProperty("opacity");
1441
+ }
1442
+ inkSaved = null;
1443
+ el.style.isolation = "";
1444
+ canvas.style.zIndex = "";
1445
+ };
1446
+
1338
1447
  const snapshotCapture = () => {
1339
1448
  // Overlay + image content: use the image directly as the texture.
1340
1449
  if (isOverlay) {
@@ -1359,8 +1468,7 @@ function applyRasterPipeline(el, rasterNodes) {
1359
1468
  }
1360
1469
  }
1361
1470
  canvas.style.display = "none";
1362
- const prevVisibility = el.style.visibility;
1363
- el.style.visibility = "";
1471
+ showHostInk();
1364
1472
  const p = snapshotToImage(el, rect.width, rect.height, dpr)
1365
1473
  .then((img) => {
1366
1474
  if (destroyed) return;
@@ -1368,15 +1476,14 @@ function applyRasterPipeline(el, rasterNodes) {
1368
1476
  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img);
1369
1477
  finishUpload();
1370
1478
  textureReady = true;
1371
- // In-place transforms hide the host (the canvas replaces
1372
- // its look). A pure-overlay chain keeps it visible so the
1373
- // real content shows through the bubble; a mixed chain
1374
- // (in-place + overlay) hides it — the canvas carries all.
1375
- el.style.visibility = pureOverlay ? "" : "hidden";
1479
+ // A pure-overlay chain leaves the host alone; the lens
1480
+ // floats over untouched content. Otherwise the canvas
1481
+ // carries the look and the host's own ink is suppressed.
1482
+ if (!pureOverlay) hideHostInk();
1376
1483
  canvas.style.visibility = "visible";
1377
1484
  })
1378
1485
  .catch((e) => {
1379
- el.style.visibility = prevVisibility;
1486
+ showHostInk();
1380
1487
  console.warn("[nodality] raster snapshot failed:", e);
1381
1488
  });
1382
1489
  canvas.style.display = "";
@@ -1671,6 +1778,7 @@ function applyRasterPipeline(el, rasterNodes) {
1671
1778
  }
1672
1779
  solverOps.length = 0;
1673
1780
  while (sourceEl !== el && sourceEl.firstChild) el.appendChild(sourceEl.firstChild);
1781
+ showHostInk();
1674
1782
  el.style.visibility = "";
1675
1783
  canvas.remove();
1676
1784
  },
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
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.185
2
+ * nodality v1.0.187
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.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -11,7 +11,6 @@ class Stacker {
11
11
  this.res = document.createElement("div");
12
12
  this.res.style.display = "flex";
13
13
  this.res.style.flexDirection = "column";
14
- console.log("A");
15
14
  }
16
15
 
17
16
  add(items){
package/lib/theme.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.185
2
+ * nodality v1.0.187
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -255,8 +255,6 @@ toCode(){
255
255
  if (data){
256
256
 
257
257
  let smart = smartRange(window.scrollY, {min: data.start, max: data.end}, {min: 7, max: 0}) // The other way
258
- console.warn(smart);
259
- console.warn(window.scrollY);
260
258
  // this.res.style.opacity = 0.7;
261
259
 
262
260