nodality 1.0.220 → 1.0.224

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 (279) hide show
  1. package/API.md +227 -0
  2. package/bin/nodality.js +64 -0
  3. package/dist/animator.cjs.js +1 -1
  4. package/dist/animator.cjs.js.LICENSE.txt +1 -1
  5. package/dist/animator.esm.js +1 -1
  6. package/dist/animator.esm.js.LICENSE.txt +1 -1
  7. package/dist/audionew.cjs.js +1 -1
  8. package/dist/audionew.cjs.js.LICENSE.txt +1 -1
  9. package/dist/audionew.esm.js +1 -1
  10. package/dist/audionew.esm.js.LICENSE.txt +1 -1
  11. package/dist/base.cjs.js +1 -1
  12. package/dist/base.cjs.js.LICENSE.txt +1 -1
  13. package/dist/base.esm.js +1 -1
  14. package/dist/base.esm.js.LICENSE.txt +1 -1
  15. package/dist/beta-desktop-bar.cjs.js +1 -1
  16. package/dist/beta-desktop-bar.cjs.js.LICENSE.txt +1 -1
  17. package/dist/beta-desktop-bar.esm.js +1 -1
  18. package/dist/beta-desktop-bar.esm.js.LICENSE.txt +1 -1
  19. package/dist/beta-mobile-bar.cjs.js +1 -1
  20. package/dist/beta-mobile-bar.cjs.js.LICENSE.txt +1 -1
  21. package/dist/beta-mobile-bar.esm.js +1 -1
  22. package/dist/beta-mobile-bar.esm.js.LICENSE.txt +1 -1
  23. package/dist/bundle.umd.js +1 -1
  24. package/dist/bundle.umd.js.LICENSE.txt +131 -1
  25. package/dist/button.cjs.js +1 -1
  26. package/dist/button.cjs.js.LICENSE.txt +1 -1
  27. package/dist/button.esm.js +1 -1
  28. package/dist/button.esm.js.LICENSE.txt +1 -1
  29. package/dist/card-getter.cjs.js.LICENSE.txt +1 -1
  30. package/dist/card-getter.esm.js.LICENSE.txt +1 -1
  31. package/dist/center.cjs.js +1 -1
  32. package/dist/center.cjs.js.LICENSE.txt +1 -1
  33. package/dist/center.esm.js +1 -1
  34. package/dist/center.esm.js.LICENSE.txt +1 -1
  35. package/dist/checkbox.cjs.js +1 -1
  36. package/dist/checkbox.cjs.js.LICENSE.txt +1 -1
  37. package/dist/checkbox.esm.js +1 -1
  38. package/dist/checkbox.esm.js.LICENSE.txt +1 -1
  39. package/dist/code.cjs.js +1 -1
  40. package/dist/code.cjs.js.LICENSE.txt +1 -1
  41. package/dist/code.esm.js +1 -1
  42. package/dist/code.esm.js.LICENSE.txt +1 -1
  43. package/dist/container.cjs.js +1 -1
  44. package/dist/container.cjs.js.LICENSE.txt +1 -1
  45. package/dist/container.esm.js +1 -1
  46. package/dist/container.esm.js.LICENSE.txt +1 -1
  47. package/dist/data-list.cjs.js +1 -1
  48. package/dist/data-list.cjs.js.LICENSE.txt +1 -1
  49. package/dist/data-list.esm.js +1 -1
  50. package/dist/data-list.esm.js.LICENSE.txt +1 -1
  51. package/dist/designer.cjs.js +1 -1
  52. package/dist/designer.cjs.js.LICENSE.txt +97 -1
  53. package/dist/designer.esm.js +1 -1
  54. package/dist/designer.esm.js.LICENSE.txt +97 -1
  55. package/dist/element-mapper.cjs.js +1 -1
  56. package/dist/element-mapper.cjs.js.LICENSE.txt +17 -1
  57. package/dist/element-mapper.esm.js +1 -1
  58. package/dist/element-mapper.esm.js.LICENSE.txt +17 -1
  59. package/dist/finalresult.esm.js +1 -1
  60. package/dist/finalresult.esm.js.LICENSE.txt +158 -1
  61. package/dist/flex-card.cjs.js +1 -1
  62. package/dist/flex-card.cjs.js.LICENSE.txt +1 -1
  63. package/dist/flex-card.esm.js +1 -1
  64. package/dist/flex-card.esm.js.LICENSE.txt +1 -1
  65. package/dist/flex-grid.cjs.js +1 -1
  66. package/dist/flex-grid.cjs.js.LICENSE.txt +1 -1
  67. package/dist/flex-grid.esm.js +1 -1
  68. package/dist/flex-grid.esm.js.LICENSE.txt +1 -1
  69. package/dist/flex-row.cjs.js +1 -1
  70. package/dist/flex-row.cjs.js.LICENSE.txt +1 -1
  71. package/dist/flex-row.esm.js +1 -1
  72. package/dist/flex-row.esm.js.LICENSE.txt +1 -1
  73. package/dist/floating-input.cjs.js +1 -1
  74. package/dist/floating-input.cjs.js.LICENSE.txt +1 -1
  75. package/dist/floating-input.esm.js +1 -1
  76. package/dist/floating-input.esm.js.LICENSE.txt +1 -1
  77. package/dist/free.cjs.js +1 -1
  78. package/dist/free.cjs.js.LICENSE.txt +1 -1
  79. package/dist/free.esm.js +1 -1
  80. package/dist/free.esm.js.LICENSE.txt +1 -1
  81. package/dist/horizontal-scroller.cjs.js.LICENSE.txt +1 -1
  82. package/dist/horizontal-scroller.esm.js.LICENSE.txt +1 -1
  83. package/dist/image-picker.cjs.js +1 -1
  84. package/dist/image-picker.cjs.js.LICENSE.txt +1 -1
  85. package/dist/image-picker.esm.js +1 -1
  86. package/dist/image-picker.esm.js.LICENSE.txt +1 -1
  87. package/dist/image.cjs.js +1 -1
  88. package/dist/image.cjs.js.LICENSE.txt +1 -1
  89. package/dist/image.esm.js +1 -1
  90. package/dist/image.esm.js.LICENSE.txt +1 -1
  91. package/dist/index.cjs.js +1 -1
  92. package/dist/index.cjs.js.LICENSE.txt +158 -1
  93. package/dist/index.d.ts +962 -0
  94. package/dist/index.esm.js +1 -1
  95. package/dist/index.esm.js.LICENSE.txt +158 -1
  96. package/dist/keyframe-animation.cjs.js.LICENSE.txt +1 -1
  97. package/dist/keyframe-animation.esm.js.LICENSE.txt +1 -1
  98. package/dist/link-getter.cjs.js +1 -1
  99. package/dist/link-getter.cjs.js.LICENSE.txt +1 -1
  100. package/dist/link-getter.esm.js +1 -1
  101. package/dist/link-getter.esm.js.LICENSE.txt +1 -1
  102. package/dist/link.cjs.js +1 -1
  103. package/dist/link.cjs.js.LICENSE.txt +1 -1
  104. package/dist/link.esm.js +1 -1
  105. package/dist/link.esm.js.LICENSE.txt +1 -1
  106. package/dist/meta-adder.cjs.js +1 -1
  107. package/dist/meta-adder.cjs.js.LICENSE.txt +1 -1
  108. package/dist/meta-adder.esm.js +1 -1
  109. package/dist/meta-adder.esm.js.LICENSE.txt +1 -1
  110. package/dist/modal-2025.cjs.js +1 -1
  111. package/dist/modal-2025.cjs.js.LICENSE.txt +1 -1
  112. package/dist/modal-2025.esm.js +1 -1
  113. package/dist/modal-2025.esm.js.LICENSE.txt +1 -1
  114. package/dist/multiswitcher.cjs.js +1 -1
  115. package/dist/multiswitcher.cjs.js.LICENSE.txt +1 -1
  116. package/dist/multiswitcher.esm.js +1 -1
  117. package/dist/multiswitcher.esm.js.LICENSE.txt +1 -1
  118. package/dist/new-nav-bar.cjs.js +1 -1
  119. package/dist/new-nav-bar.cjs.js.LICENSE.txt +1 -1
  120. package/dist/new-nav-bar.esm.js +1 -1
  121. package/dist/new-nav-bar.esm.js.LICENSE.txt +1 -1
  122. package/dist/picker.cjs.js +1 -1
  123. package/dist/picker.cjs.js.LICENSE.txt +1 -1
  124. package/dist/picker.esm.js +1 -1
  125. package/dist/picker.esm.js.LICENSE.txt +1 -1
  126. package/dist/progress.cjs.js +1 -1
  127. package/dist/progress.cjs.js.LICENSE.txt +1 -1
  128. package/dist/progress.esm.js +1 -1
  129. package/dist/progress.esm.js.LICENSE.txt +1 -1
  130. package/dist/radio.cjs.js +1 -1
  131. package/dist/radio.cjs.js.LICENSE.txt +1 -1
  132. package/dist/radio.esm.js +1 -1
  133. package/dist/radio.esm.js.LICENSE.txt +1 -1
  134. package/dist/range.cjs.js +1 -1
  135. package/dist/range.cjs.js.LICENSE.txt +1 -1
  136. package/dist/range.esm.js +1 -1
  137. package/dist/range.esm.js.LICENSE.txt +1 -1
  138. package/dist/scroll-video.cjs.js.LICENSE.txt +1 -1
  139. package/dist/scroll-video.esm.js.LICENSE.txt +1 -1
  140. package/dist/side-bar.cjs.js +1 -1
  141. package/dist/side-bar.cjs.js.LICENSE.txt +1 -1
  142. package/dist/side-bar.esm.js +1 -1
  143. package/dist/side-bar.esm.js.LICENSE.txt +1 -1
  144. package/dist/side-nav-bar.cjs.js +1 -1
  145. package/dist/side-nav-bar.cjs.js.LICENSE.txt +1 -1
  146. package/dist/side-nav-bar.esm.js +1 -1
  147. package/dist/side-nav-bar.esm.js.LICENSE.txt +1 -1
  148. package/dist/simple-bar.cjs.js +1 -1
  149. package/dist/simple-bar.cjs.js.LICENSE.txt +1 -1
  150. package/dist/simple-bar.esm.js +1 -1
  151. package/dist/simple-bar.esm.js.LICENSE.txt +1 -1
  152. package/dist/slider-2025.cjs.js +1 -1
  153. package/dist/slider-2025.cjs.js.LICENSE.txt +1 -1
  154. package/dist/slider-2025.esm.js +1 -1
  155. package/dist/slider-2025.esm.js.LICENSE.txt +1 -1
  156. package/dist/spacer.cjs.js +1 -1
  157. package/dist/spacer.cjs.js.LICENSE.txt +1 -1
  158. package/dist/spacer.esm.js +1 -1
  159. package/dist/spacer.esm.js.LICENSE.txt +1 -1
  160. package/dist/stack.cjs.js +1 -1
  161. package/dist/stack.cjs.js.LICENSE.txt +1 -1
  162. package/dist/stack.esm.js +1 -1
  163. package/dist/stack.esm.js.LICENSE.txt +1 -1
  164. package/dist/stacker.cjs.js.LICENSE.txt +1 -1
  165. package/dist/stacker.esm.js.LICENSE.txt +1 -1
  166. package/dist/table.cjs.js +1 -1
  167. package/dist/table.cjs.js.LICENSE.txt +1 -1
  168. package/dist/table.esm.js +1 -1
  169. package/dist/table.esm.js.LICENSE.txt +1 -1
  170. package/dist/text-field.cjs.js +1 -1
  171. package/dist/text-field.cjs.js.LICENSE.txt +1 -1
  172. package/dist/text-field.esm.js +1 -1
  173. package/dist/text-field.esm.js.LICENSE.txt +1 -1
  174. package/dist/text.cjs.js +1 -1
  175. package/dist/text.cjs.js.LICENSE.txt +1 -1
  176. package/dist/text.esm.js +1 -1
  177. package/dist/text.esm.js.LICENSE.txt +1 -1
  178. package/dist/theme.cjs.js.LICENSE.txt +1 -1
  179. package/dist/theme.esm.js.LICENSE.txt +1 -1
  180. package/dist/transform-anim.cjs.js.LICENSE.txt +1 -1
  181. package/dist/transform-anim.esm.js.LICENSE.txt +1 -1
  182. package/dist/ulist.cjs.js +1 -1
  183. package/dist/ulist.cjs.js.LICENSE.txt +1 -1
  184. package/dist/ulist.esm.js +1 -1
  185. package/dist/ulist.esm.js.LICENSE.txt +1 -1
  186. package/dist/video.cjs.js +1 -1
  187. package/dist/video.cjs.js.LICENSE.txt +1 -1
  188. package/dist/video.esm.js +1 -1
  189. package/dist/video.esm.js.LICENSE.txt +1 -1
  190. package/dist/wrap.cjs.js +1 -1
  191. package/dist/wrap.cjs.js.LICENSE.txt +1 -1
  192. package/dist/wrap.esm.js +1 -1
  193. package/dist/wrap.esm.js.LICENSE.txt +1 -1
  194. package/dist/zoom-card.cjs.js +1 -1
  195. package/dist/zoom-card.cjs.js.LICENSE.txt +1 -1
  196. package/dist/zoom-card.esm.js +1 -1
  197. package/dist/zoom-card.esm.js.LICENSE.txt +1 -1
  198. package/examples/custom-raster-op.js +174 -0
  199. package/layout/animator.js +48 -2
  200. package/layout/audio.js +1 -1
  201. package/layout/audionew.js +1 -1
  202. package/layout/base.js +8 -3
  203. package/layout/beta-desktop-bar.js +1 -1
  204. package/layout/beta-mobile-bar.js +3 -2
  205. package/layout/button.js +3 -11
  206. package/layout/center.js +1 -1
  207. package/layout/checkbox.js +2 -2
  208. package/layout/circle.js +3 -2
  209. package/layout/code.js +3 -2
  210. package/layout/container.js +4 -8
  211. package/layout/dropdown-2025.js +1 -1
  212. package/layout/flex-card.js +1 -16
  213. package/layout/flex-grid.js +3 -6
  214. package/layout/flex-row.js +7 -12
  215. package/layout/form-components/custom.js +1 -1
  216. package/layout/form-components/data-list.js +2 -2
  217. package/layout/form-components/floating-input.js +2 -2
  218. package/layout/form-components/form-all.js +2 -2
  219. package/layout/form-components/form.js +1 -1
  220. package/layout/form-components/image-picker.js +1 -1
  221. package/layout/form-components/picker.js +2 -2
  222. package/layout/form-components/radio.js +2 -2
  223. package/layout/form-components/radiogroup.js +2 -2
  224. package/layout/form-components/range.js +2 -2
  225. package/layout/free.js +3 -4
  226. package/layout/grid-switcher.js +16 -7
  227. package/layout/grid.js +7 -2
  228. package/layout/horizontal-scroller.js +1 -1
  229. package/layout/image.js +1 -1
  230. package/layout/index.js +1 -1
  231. package/layout/link.js +6 -25
  232. package/layout/list.js +14 -6
  233. package/layout/meta-adder.js +8 -3
  234. package/layout/modal-2025.js +7 -2
  235. package/layout/morph.js +1003 -0
  236. package/layout/multiswitcher.js +11 -3
  237. package/layout/nav-bar.js +50 -46
  238. package/layout/nav-factor/custom-div.js +2 -2
  239. package/layout/new-nav-bar.js +11 -4
  240. package/layout/polygon.js +3 -4
  241. package/layout/prerender-site.js +1 -1
  242. package/layout/prerender.js +1 -1
  243. package/layout/progress.js +7 -2
  244. package/layout/row.js +7 -2
  245. package/layout/scroll-video.js +7 -2
  246. package/layout/side-bar.js +15 -10
  247. package/layout/side-nav-bar.js +1 -1
  248. package/layout/simple-bar.js +1 -1
  249. package/layout/slider-2025.js +1 -1
  250. package/layout/spacer.js +7 -2
  251. package/layout/stack.js +7 -2
  252. package/layout/svg.js +3 -4
  253. package/layout/switcher.js +7 -2
  254. package/layout/table.js +1 -1
  255. package/layout/text-field.js +3 -13
  256. package/layout/text.js +5 -15
  257. package/layout/ulist.js +1 -1
  258. package/layout/video.js +1 -1
  259. package/layout/wrap.js +7 -2
  260. package/layout/zoom-card.js +1 -1
  261. package/lib/card-getter.js +1 -1
  262. package/lib/codegen.js +62 -0
  263. package/lib/data.js +37 -1
  264. package/lib/designer.js +18 -1
  265. package/lib/element-mapper.js +351 -247
  266. package/lib/keyframe-animation.js +1 -1
  267. package/lib/link-getter.js +1 -1
  268. package/lib/morph-node.js +424 -0
  269. package/lib/raster-inspect.js +409 -0
  270. package/lib/raster-ops.js +1902 -80
  271. package/lib/raster-presets.js +314 -0
  272. package/lib/scroll-video.js +1 -1
  273. package/lib/seo.js +28 -1
  274. package/lib/stacker.js +1 -1
  275. package/lib/suggest.js +66 -0
  276. package/lib/theme.js +1 -1
  277. package/lib/transform-anim.js +1 -1
  278. package/lib/transition.js +205 -0
  279. package/package.json +20 -7
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -7,6 +7,7 @@
7
7
  import { Theme } from "../lib/theme.js";
8
8
  import { applyRasterPipeline } from "../lib/raster-ops.js";
9
9
 
10
+ import { keyPattern } from "../lib/codegen.js";
10
11
  // 22/08/2020 - 16:30
11
12
  class Animator {
12
13
 
@@ -169,6 +170,17 @@ class Animator {
169
170
  }
170
171
  }
171
172
 
173
+ // Custom properties. `style[name]` does not work for them — the CSSOM
174
+ // only reaches a `--*` property through setProperty — which is why an
175
+ // axis default written like every other style silently did nothing.
176
+ vars(map){
177
+ if (!map || typeof map !== "object") return this;
178
+ for (const name in map) {
179
+ this.res.style.setProperty(name, String(map[name]));
180
+ }
181
+ return this;
182
+ }
183
+
172
184
  keySet(obj){
173
185
  this.temporaryVal = 1;
174
186
  if (Array.isArray(obj)) {
@@ -256,6 +268,20 @@ class Animator {
256
268
  gridTemplateRows: "gridTemplateRows",
257
269
  rowGap: "rowGap",
258
270
  columnGap: "columnGap",
271
+ // Extended 2026-08-11 — the shell vocabulary `bones` speaks, so a
272
+ // generated grid needs no keySet. `cols`/`rows` are short names for
273
+ // the two above; `areas` had no option at all, and `area` existed
274
+ // only on the three components that happened to dispatch it
275
+ // themselves (Wrapper, Text, Image) — those now set the same
276
+ // property to the same value, and everything else gains it.
277
+ //@ cols: grid-template-columns, verbatim — e.g. "240px 1fr".
278
+ cols: "gridTemplateColumns",
279
+ //@ rows: grid-template-rows, verbatim.
280
+ rows: "gridTemplateRows",
281
+ //@ areas: grid-template-areas, verbatim — e.g. '"nav main" "nav main"'.
282
+ areas: "gridTemplateAreas",
283
+ //@ area: This element's grid-area — the name of a cell declared in the parent's `areas`.
284
+ area: "gridArea",
259
285
 
260
286
  // ── Typography (extended) ──────────────────────────────────────
261
287
  letterSpacing: "letterSpacing",
@@ -349,6 +375,8 @@ class Animator {
349
375
  obj.size && this.fluidCopy(obj.size);
350
376
  //@ resprop: Per-breakpoint style overrides — [{breakpoint, ...css}]. `exact` is font size.
351
377
  obj.resprop && this.resprop(obj.resprop, obj);
378
+ //@ vars: Custom CSS properties on this element — {"--nod-split": 0.2}. Custom properties inherit, so writing them on a root drives its whole subtree with one declaration; that is how the morph axes reach every generated element without a stylesheet.
379
+ obj.vars && this.vars(obj.vars);
352
380
  //@ keySet: Escape hatch — {key, value} written straight to element.style, or an array of them.
353
381
  obj.keySet && this.keySet(obj.keySet);
354
382
  //@ noTheme: Opt this element out of Theme.setDefaults light/dark colouring.
@@ -1009,6 +1037,24 @@ resmar(arr) {
1009
1037
  return this;
1010
1038
  }
1011
1039
 
1040
+ round(v) {
1041
+ this.deprecatedOption("round()", "radius()");
1042
+ return this.radius(v);
1043
+ }
1044
+
1045
+ toCSS(){
1046
+ return this.css;
1047
+ }
1048
+
1049
+ toHTMLA(){
1050
+ return this.html;
1051
+ }
1052
+
1053
+ background(color){
1054
+ this.res.style.background = color;
1055
+ return this;
1056
+ }
1057
+
1012
1058
  deprecatedOption(name, replacement) {
1013
1059
  console.error(`nodality: \`${name}\` is deprecated — use \`${replacement}\` instead.`);
1014
1060
  return this;
@@ -2016,7 +2062,7 @@ maxWidth(w){
2016
2062
  }
2017
2063
 
2018
2064
  removeQuotesFromFirstWord(jsonString) {
2019
- const modifiedJSON = jsonString.replace(/"([^"]+)":/g, '$1:');
2065
+ const modifiedJSON = jsonString.replace(keyPattern(), "$1:");
2020
2066
  return modifiedJSON;
2021
2067
  }
2022
2068
 
package/layout/audio.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/base.js CHANGED
@@ -1,11 +1,16 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
6
6
 
7
- class Base {
7
+ import {Animator} from "./animator.js";
8
+ class Base extends Animator{
8
9
  constructor(/*items*/){
10
+ super();
11
+ // Converted from a standalone class; opting out of Theme keeps rendering
12
+ // byte-identical to the pre-conversion behaviour.
13
+ this._noTheme = true;
9
14
  //Base.prototype.items = items;
10
15
  this.oldLength = 0;
11
16
  }
@@ -101,7 +106,7 @@ class Base {
101
106
 
102
107
 
103
108
  mount(el){
104
- this.el = el;
109
+ this.res = el;
105
110
  this.render(el).render(el); // // this.render === function inside component
106
111
  }
107
112
 
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,10 +1,11 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import {Animator} from "./animator.js";
8
+ import { keyPattern } from "../lib/codegen.js";
8
9
  class /*Beta*/MobileBar extends Animator {
9
10
  constructor() {
10
11
  super();
@@ -19,7 +20,7 @@ class /*Beta*/MobileBar extends Animator {
19
20
  if (!jsonString){
20
21
  return;
21
22
  }
22
- const modifiedJSON = jsonString.replace(/"([^"]+)":/g, '$1:');
23
+ const modifiedJSON = jsonString.replace(keyPattern(), "$1:");
23
24
  return modifiedJSON;
24
25
  }
25
26
 
package/layout/button.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -265,11 +265,6 @@ this.options = obj;
265
265
  }
266
266
 
267
267
 
268
-
269
- background(color){
270
- this.res.style.background = color;
271
- return this;
272
- }
273
268
 
274
269
 
275
270
 
@@ -346,11 +341,8 @@ this.options = obj;
346
341
 
347
342
  return this;
348
343
  }
349
-
350
- onTap(e){
351
- this.res.addEventListener("click", e);
352
- return this;
353
- }
344
+
345
+
354
346
 
355
347
  toCode() {
356
348
  //console.log("OPTIONS ARE");
package/layout/center.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -177,5 +177,5 @@ obj.resmar && this.resmar(obj.resmar);
177
177
  }
178
178
 
179
179
  // Export the class
180
- window.Checkbox = Checkbox;
180
+ if (typeof window !== "undefined") window.Checkbox = Checkbox;
181
181
  export { Checkbox };
package/layout/circle.js CHANGED
@@ -1,11 +1,12 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import { Animator } from "./animator.js";
8
8
 
9
+ import { toObjectSource } from "../lib/codegen.js";
9
10
  class Circle extends Animator {
10
11
  constructor() {
11
12
  super();
@@ -36,7 +37,7 @@ class Circle extends Animator {
36
37
  Object.entries(this.options || {}).filter(([, v]) => v != null)
37
38
  );
38
39
 
39
- const objString = JSON.stringify(cleanedObj, null, 4).replace(/"([^"]+)":/g, "$1:");
40
+ const objString = toObjectSource(cleanedObj, 4);
40
41
  return [`new Circle().set(${objString})`];
41
42
  }
42
43
 
package/layout/code.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -7,6 +7,7 @@
7
7
  import {Animator} from "./animator.js";
8
8
 
9
9
 
10
+ import { keyPattern } from "../lib/codegen.js";
10
11
  class Code extends Animator {
11
12
  constructor(){
12
13
  super();
@@ -34,7 +35,7 @@ class Code extends Animator {
34
35
 
35
36
  // pretty JSON, but keep functions/nested objects readable
36
37
  const str = JSON.stringify(obj, null, 2)
37
- .replace(/"([^"]+)":/g, '$1:') // remove quotes from keys
38
+ .replace(keyPattern(), "$1:") // remove quotes from identifier keys
38
39
  .replace(/"([^"]+)"/g, (m, p1) => {
39
40
  // keep colors and class names quoted, but escape code safely
40
41
  if (p1.includes("\n") || p1.includes("'") || p1.includes('"')) {
@@ -1,11 +1,12 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import {Animator} from "./animator.js";
8
8
 
9
+ import { toObjectSource } from "../lib/codegen.js";
9
10
  class Wrapper extends Animator { // 12:10:02 found grep 06/03
10
11
  constructor(obj) {
11
12
  super();
@@ -40,9 +41,7 @@ code = `${pad}new Wrapper()`;
40
41
  Object.entries(this.obj).filter(([key, value]) => value !== null)
41
42
  );
42
43
 
43
- const objString = JSON
44
- .stringify(cleanedObj, null, 2)
45
- .replace(/"([^"]+)":/g, '$1:');
44
+ const objString = toObjectSource(cleanedObj, 2);
46
45
 
47
46
  code += `\n${pad} .set(${objString})`;
48
47
  }
@@ -497,10 +496,7 @@ code = `${pad}new Wrapper()`;
497
496
  return this;
498
497
  }
499
498
 
500
- width(perc){
501
- this.res.style.width = perc;
502
- return this;
503
- }
499
+
504
500
 
505
501
  heightNoAuto(perc){
506
502
  this.res.style.height = perc;
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -132,15 +132,6 @@ this.options = obj;
132
132
  }
133
133
 
134
134
 
135
-
136
- background(color){
137
- // The shorthand, not backgroundColor: it also resets background-image,
138
- // so setting a flat colour after a gradient clears the gradient. The
139
- // longhand left it in place, so the same call behaved differently
140
- // depending on which component you happened to hold.
141
- this.res.style.background = color;
142
- return this;
143
- }
144
135
 
145
136
 
146
137
 
@@ -164,12 +155,6 @@ this.options = obj;
164
155
 
165
156
 
166
157
 
167
- //@deprecated round: superseded by `radius()`, which is the same thing under the name the option already uses.
168
- round(v) {
169
- this.deprecatedOption("round()", "radius()");
170
- return this.radius(v);
171
- }
172
-
173
158
 
174
159
  render(div){
175
160
  if (div){
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -218,11 +218,8 @@ if (el != undefined){
218
218
  this.code.push("\n ])");
219
219
  return this;
220
220
  }
221
-
222
- width(w){
223
- this.res.style.width = w;
224
- return this;
225
- }
221
+
222
+
226
223
 
227
224
 
228
225
  border(color, width){
@@ -1,11 +1,12 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import {Animator} from "./animator.js";
8
8
 
9
+ import { keyPattern } from "../lib/codegen.js";
9
10
  class FlexRow extends Animator {
10
11
  constructor(frs, saveEl) {
11
12
  super();
@@ -372,7 +373,7 @@ let stringified = JSON.stringify(options.borderObj);
372
373
 
373
374
  // stringify cleaned object
374
375
  const objString = JSON.stringify(clean, null, 4)
375
- .replace(/"([^"]+)":/g, '$1:') // unquote keys
376
+ .replace(keyPattern(), "$1:") // unquote identifier keys
376
377
  .replace(/"([^"]*)"/g, (m, p1) => {
377
378
  // wrap multiline text/code in backticks
378
379
  if (p1.includes("\n")) return "`" + p1.replace(/`/g, "\\`") + "`";
@@ -491,11 +492,8 @@ let stringified = JSON.stringify(options.borderObj);
491
492
 
492
493
  return this;
493
494
  }
494
-
495
- background(color){
496
- this.res.style.background = color;
497
- return this;
498
- }
495
+
496
+
499
497
 
500
498
  radius(val){
501
499
  this.res.style.borderRadius = `${val}px`;
@@ -506,11 +504,8 @@ let stringified = JSON.stringify(options.borderObj);
506
504
  this.res.style.boxShadow = "0px 1px 10px 0px rgb(145 145 145)"; //`${x}px ${y}px ${radius}px #000`;
507
505
  return this;
508
506
  }
509
-
510
- onTap(e){
511
- this.res.addEventListener("click", e);
512
- return this;
513
- }
507
+
508
+
514
509
 
515
510
 
516
511
  items(arr) {
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -182,5 +182,5 @@ import {Animator} from "../animator.js";
182
182
  DataList = function(...args) { return new _oldDataList(...args) };
183
183
 
184
184
 
185
- window.DataList = DataList;
185
+ if (typeof window !== "undefined") window.DataList = DataList;
186
186
  export { DataList };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -164,5 +164,5 @@ obj.name && input.setAttribute("name", obj.name);
164
164
  }
165
165
 
166
166
  // 31/01/25 22:06:50 works
167
- window.FloatingInput = FloatingInput;
167
+ if (typeof window !== "undefined") window.FloatingInput = FloatingInput;
168
168
  export { FloatingInput };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -155,5 +155,5 @@ let dataList = DataList()
155
155
  }
156
156
 
157
157
  new Wrappera().mount("#res");
158
- window.Wrappera = Wrappera;
158
+ if (typeof window !== "undefined") window.Wrappera = Wrappera;
159
159
  export { Wrappera };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -220,5 +220,5 @@ addNode(value, text){
220
220
 
221
221
 
222
222
 
223
- window.Picker = Picker;
223
+ if (typeof window !== "undefined") window.Picker = Picker;
224
224
  export { Picker };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -227,5 +227,5 @@ class RadioGroup /*extends Animator*/ {
227
227
 
228
228
 
229
229
 
230
- window.RadioGroup = RadioGroup;
230
+ if (typeof window !== "undefined") window.RadioGroup = RadioGroup;
231
231
  export { RadioGroup };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -227,5 +227,5 @@ class RadioGroup /*extends Animator*/ {
227
227
 
228
228
 
229
229
 
230
- window.RadioGroup = RadioGroup;
230
+ if (typeof window !== "undefined") window.RadioGroup = RadioGroup;
231
231
  export { RadioGroup };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -160,5 +160,5 @@ class Range {
160
160
 
161
161
 
162
162
 
163
- window.Range = Range;
163
+ if (typeof window !== "undefined") window.Range = Range;
164
164
  export { Range };
package/layout/free.js CHANGED
@@ -1,11 +1,12 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
6
6
 
7
7
  import {Animator} from "./animator.js";
8
8
 
9
+ import { toObjectSource } from "../lib/codegen.js";
9
10
  class Free extends Animator {
10
11
  constructor(){
11
12
  super();
@@ -152,9 +153,7 @@ class Free extends Animator {
152
153
  return [""];
153
154
  }
154
155
 
155
- const objString = JSON
156
- .stringify(this.options, null, 4)
157
- .replace(/"([^"]+)":/g, '$1:');
156
+ const objString = toObjectSource(this.options, 4);
158
157
 
159
158
 
160
159
  var codeStr = "";
@@ -1,11 +1,16 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
6
6
 
7
- class AreaSwitcher {
7
+ import {Animator} from "./animator.js";
8
+ class AreaSwitcher extends Animator{
8
9
  constructor() {
10
+ super();
11
+ // Converted from a standalone class; opting out of Theme keeps rendering
12
+ // byte-identical to the pre-conversion behaviour.
13
+ this._noTheme = true;
9
14
 
10
15
  this.gridContainer = document.createElement("div");
11
16
  this.gridContainer.classList.add("grid-container");
@@ -120,9 +125,13 @@ for (var i = 0; i < arr.length - 1; i++){
120
125
  // Usage example:
121
126
 
122
127
 
123
- class GridSwitcher {
128
+ class GridSwitcher extends Animator{
124
129
  constructor(){
125
- this.el = document.createElement("div");
130
+ super();
131
+ // Converted from a standalone class; opting out of Theme keeps rendering
132
+ // byte-identical to the pre-conversion behaviour.
133
+ this._noTheme = true;
134
+ this.res = document.createElement("div");
126
135
  this.gridWrap = document.createElement("div");
127
136
  }
128
137
 
@@ -141,7 +150,7 @@ for (var i = 0; i < arr.length - 1; i++){
141
150
  let mq = window.matchMedia(`(max-width: ${val.at})`).matches;
142
151
  if ((mq || val.at == "default") && mq !== this.lastMq){
143
152
  const update = new Simple().set(val.template, this.dynamicItems).render();
144
- this.el = update;
153
+ this.res = update;
145
154
  this.render(this.domStr);
146
155
  this.lastMq = mq;
147
156
  }
@@ -154,7 +163,7 @@ for (var i = 0; i < arr.length - 1; i++){
154
163
 
155
164
  render(div){
156
165
  this.gridWrap.innerHTML = "";
157
- this.gridWrap.appendChild(this.el);
166
+ this.gridWrap.appendChild(this.res);
158
167
 
159
168
  if (div){
160
169
  document.querySelector(div).appendChild(this.gridWrap);
@@ -162,7 +171,7 @@ for (var i = 0; i < arr.length - 1; i++){
162
171
 
163
172
  return this.gridWrap;
164
173
 
165
- // Just return this.el it normally
174
+ // Just return this.res it normally
166
175
  }
167
176
  }
168
177
 
package/layout/grid.js CHANGED
@@ -1,11 +1,16 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
6
6
 
7
- class Grid {
7
+ import {Animator} from "./animator.js";
8
+ class Grid extends Animator {
8
9
  constructor(frs, saveEl) {
10
+ super();
11
+ // Converted from a standalone class. Opting out of Theme keeps rendering
12
+ // byte-identical to the pre-conversion behaviour; opt in per component.
13
+ this._noTheme = true;
9
14
  this.saveEl = saveEl;
10
15
  this.frs = frs;
11
16
  this.res = null;
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.220
2
+ * nodality v1.0.224
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.220
2
+ * nodality v1.0.224
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */