nodality 1.1.6 → 1.1.8

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 (229) hide show
  1. package/dist/animator.cjs.js +1 -1
  2. package/dist/animator.cjs.js.LICENSE.txt +1 -1
  3. package/dist/animator.esm.js.LICENSE.txt +1 -1
  4. package/dist/audionew.cjs.js +1 -1
  5. package/dist/audionew.cjs.js.LICENSE.txt +1 -1
  6. package/dist/audionew.esm.js.LICENSE.txt +1 -1
  7. package/dist/base.cjs.js +1 -1
  8. package/dist/base.cjs.js.LICENSE.txt +1 -1
  9. package/dist/base.esm.js.LICENSE.txt +1 -1
  10. package/dist/beta-desktop-bar.cjs.js +1 -1
  11. package/dist/beta-desktop-bar.cjs.js.LICENSE.txt +1 -1
  12. package/dist/beta-desktop-bar.esm.js.LICENSE.txt +1 -1
  13. package/dist/beta-mobile-bar.cjs.js +1 -1
  14. package/dist/beta-mobile-bar.cjs.js.LICENSE.txt +1 -1
  15. package/dist/beta-mobile-bar.esm.js.LICENSE.txt +1 -1
  16. package/dist/bundle.umd.js +1 -1
  17. package/dist/bundle.umd.js.LICENSE.txt +1 -1
  18. package/dist/button.cjs.js +1 -1
  19. package/dist/button.cjs.js.LICENSE.txt +1 -1
  20. package/dist/button.esm.js.LICENSE.txt +1 -1
  21. package/dist/card-getter.cjs.js.LICENSE.txt +1 -1
  22. package/dist/card-getter.esm.js.LICENSE.txt +1 -1
  23. package/dist/center.cjs.js +1 -1
  24. package/dist/center.cjs.js.LICENSE.txt +1 -1
  25. package/dist/center.esm.js.LICENSE.txt +1 -1
  26. package/dist/checkbox.cjs.js +1 -1
  27. package/dist/checkbox.cjs.js.LICENSE.txt +1 -1
  28. package/dist/checkbox.esm.js.LICENSE.txt +1 -1
  29. package/dist/code.cjs.js +1 -1
  30. package/dist/code.cjs.js.LICENSE.txt +1 -1
  31. package/dist/code.esm.js.LICENSE.txt +1 -1
  32. package/dist/container.cjs.js +1 -1
  33. package/dist/container.cjs.js.LICENSE.txt +1 -1
  34. package/dist/container.esm.js.LICENSE.txt +1 -1
  35. package/dist/data-list.cjs.js.LICENSE.txt +1 -1
  36. package/dist/data-list.esm.js.LICENSE.txt +1 -1
  37. package/dist/designer.cjs.js +1 -1
  38. package/dist/designer.cjs.js.LICENSE.txt +1 -1
  39. package/dist/designer.esm.js.LICENSE.txt +1 -1
  40. package/dist/element-mapper.cjs.js +1 -1
  41. package/dist/element-mapper.cjs.js.LICENSE.txt +1 -1
  42. package/dist/element-mapper.esm.js.LICENSE.txt +1 -1
  43. package/dist/finalresult.esm.js +1 -1
  44. package/dist/finalresult.esm.js.LICENSE.txt +1 -1
  45. package/dist/flex-card.cjs.js +1 -1
  46. package/dist/flex-card.cjs.js.LICENSE.txt +1 -1
  47. package/dist/flex-card.esm.js.LICENSE.txt +1 -1
  48. package/dist/flex-grid.cjs.js +1 -1
  49. package/dist/flex-grid.cjs.js.LICENSE.txt +1 -1
  50. package/dist/flex-grid.esm.js.LICENSE.txt +1 -1
  51. package/dist/flex-row.cjs.js +1 -1
  52. package/dist/flex-row.cjs.js.LICENSE.txt +1 -1
  53. package/dist/flex-row.esm.js.LICENSE.txt +1 -1
  54. package/dist/floating-input.cjs.js +1 -1
  55. package/dist/floating-input.cjs.js.LICENSE.txt +1 -1
  56. package/dist/floating-input.esm.js.LICENSE.txt +1 -1
  57. package/dist/free.cjs.js +1 -1
  58. package/dist/free.cjs.js.LICENSE.txt +1 -1
  59. package/dist/free.esm.js.LICENSE.txt +1 -1
  60. package/dist/horizontal-scroller.cjs.js.LICENSE.txt +1 -1
  61. package/dist/horizontal-scroller.esm.js.LICENSE.txt +1 -1
  62. package/dist/image-picker.cjs.js +1 -1
  63. package/dist/image-picker.cjs.js.LICENSE.txt +1 -1
  64. package/dist/image-picker.esm.js.LICENSE.txt +1 -1
  65. package/dist/image.cjs.js +1 -1
  66. package/dist/image.cjs.js.LICENSE.txt +1 -1
  67. package/dist/image.esm.js.LICENSE.txt +1 -1
  68. package/dist/index.cjs.js +1 -1
  69. package/dist/index.cjs.js.LICENSE.txt +1 -1
  70. package/dist/index.d.ts +1 -1
  71. package/dist/index.esm.js.LICENSE.txt +1 -1
  72. package/dist/keyframe-animation.cjs.js.LICENSE.txt +1 -1
  73. package/dist/keyframe-animation.esm.js.LICENSE.txt +1 -1
  74. package/dist/link-getter.cjs.js +1 -1
  75. package/dist/link-getter.cjs.js.LICENSE.txt +1 -1
  76. package/dist/link-getter.esm.js.LICENSE.txt +1 -1
  77. package/dist/link.cjs.js +1 -1
  78. package/dist/link.cjs.js.LICENSE.txt +1 -1
  79. package/dist/link.esm.js.LICENSE.txt +1 -1
  80. package/dist/meta-adder.cjs.js +1 -1
  81. package/dist/meta-adder.cjs.js.LICENSE.txt +1 -1
  82. package/dist/meta-adder.esm.js.LICENSE.txt +1 -1
  83. package/dist/modal-2025.cjs.js +1 -1
  84. package/dist/modal-2025.cjs.js.LICENSE.txt +1 -1
  85. package/dist/modal-2025.esm.js.LICENSE.txt +1 -1
  86. package/dist/multiswitcher.cjs.js +1 -1
  87. package/dist/multiswitcher.cjs.js.LICENSE.txt +1 -1
  88. package/dist/multiswitcher.esm.js.LICENSE.txt +1 -1
  89. package/dist/new-nav-bar.cjs.js +1 -1
  90. package/dist/new-nav-bar.cjs.js.LICENSE.txt +1 -1
  91. package/dist/new-nav-bar.esm.js.LICENSE.txt +1 -1
  92. package/dist/picker.cjs.js +1 -1
  93. package/dist/picker.cjs.js.LICENSE.txt +1 -1
  94. package/dist/picker.esm.js.LICENSE.txt +1 -1
  95. package/dist/progress.cjs.js +1 -1
  96. package/dist/progress.cjs.js.LICENSE.txt +1 -1
  97. package/dist/progress.esm.js.LICENSE.txt +1 -1
  98. package/dist/radio.cjs.js.LICENSE.txt +1 -1
  99. package/dist/radio.esm.js.LICENSE.txt +1 -1
  100. package/dist/range.cjs.js.LICENSE.txt +1 -1
  101. package/dist/range.esm.js.LICENSE.txt +1 -1
  102. package/dist/scroll-video.cjs.js.LICENSE.txt +1 -1
  103. package/dist/scroll-video.esm.js.LICENSE.txt +1 -1
  104. package/dist/side-bar.cjs.js +1 -1
  105. package/dist/side-bar.cjs.js.LICENSE.txt +1 -1
  106. package/dist/side-bar.esm.js.LICENSE.txt +1 -1
  107. package/dist/side-nav-bar.cjs.js +1 -1
  108. package/dist/side-nav-bar.cjs.js.LICENSE.txt +1 -1
  109. package/dist/side-nav-bar.esm.js.LICENSE.txt +1 -1
  110. package/dist/simple-bar.cjs.js +1 -1
  111. package/dist/simple-bar.cjs.js.LICENSE.txt +1 -1
  112. package/dist/simple-bar.esm.js.LICENSE.txt +1 -1
  113. package/dist/slider-2025.cjs.js +1 -1
  114. package/dist/slider-2025.cjs.js.LICENSE.txt +1 -1
  115. package/dist/slider-2025.esm.js.LICENSE.txt +1 -1
  116. package/dist/spacer.cjs.js +1 -1
  117. package/dist/spacer.cjs.js.LICENSE.txt +1 -1
  118. package/dist/spacer.esm.js.LICENSE.txt +1 -1
  119. package/dist/stack.cjs.js +1 -1
  120. package/dist/stack.cjs.js.LICENSE.txt +1 -1
  121. package/dist/stack.esm.js.LICENSE.txt +1 -1
  122. package/dist/stacker.cjs.js.LICENSE.txt +1 -1
  123. package/dist/stacker.esm.js.LICENSE.txt +1 -1
  124. package/dist/table.cjs.js +1 -1
  125. package/dist/table.cjs.js.LICENSE.txt +1 -1
  126. package/dist/table.esm.js.LICENSE.txt +1 -1
  127. package/dist/text-field.cjs.js +1 -1
  128. package/dist/text-field.cjs.js.LICENSE.txt +1 -1
  129. package/dist/text-field.esm.js.LICENSE.txt +1 -1
  130. package/dist/text.cjs.js +1 -1
  131. package/dist/text.cjs.js.LICENSE.txt +1 -1
  132. package/dist/text.esm.js.LICENSE.txt +1 -1
  133. package/dist/theme.cjs.js.LICENSE.txt +1 -1
  134. package/dist/theme.esm.js.LICENSE.txt +1 -1
  135. package/dist/transform-anim.cjs.js.LICENSE.txt +1 -1
  136. package/dist/transform-anim.esm.js.LICENSE.txt +1 -1
  137. package/dist/ulist.cjs.js +1 -1
  138. package/dist/ulist.cjs.js.LICENSE.txt +1 -1
  139. package/dist/ulist.esm.js.LICENSE.txt +1 -1
  140. package/dist/video.cjs.js +1 -1
  141. package/dist/video.cjs.js.LICENSE.txt +1 -1
  142. package/dist/video.esm.js.LICENSE.txt +1 -1
  143. package/dist/wrap.cjs.js +1 -1
  144. package/dist/wrap.cjs.js.LICENSE.txt +1 -1
  145. package/dist/wrap.esm.js.LICENSE.txt +1 -1
  146. package/dist/zoom-card.cjs.js +1 -1
  147. package/dist/zoom-card.cjs.js.LICENSE.txt +1 -1
  148. package/dist/zoom-card.esm.js.LICENSE.txt +1 -1
  149. package/layout/animator.js +1 -1
  150. package/layout/audio.js +1 -1
  151. package/layout/audionew.js +1 -1
  152. package/layout/base.js +1 -1
  153. package/layout/beta-desktop-bar.js +1 -1
  154. package/layout/beta-mobile-bar.js +1 -1
  155. package/layout/button.js +1 -1
  156. package/layout/center.js +1 -1
  157. package/layout/checkbox.js +1 -1
  158. package/layout/circle.js +1 -1
  159. package/layout/code.js +1 -1
  160. package/layout/container.js +1 -1
  161. package/layout/dropdown-2025.js +1 -1
  162. package/layout/flex-card.js +1 -1
  163. package/layout/flex-grid.js +1 -1
  164. package/layout/flex-row.js +1 -1
  165. package/layout/form-components/custom.js +1 -1
  166. package/layout/form-components/data-list.js +1 -1
  167. package/layout/form-components/floating-input.js +1 -1
  168. package/layout/form-components/form-all.js +1 -1
  169. package/layout/form-components/form.js +1 -1
  170. package/layout/form-components/image-picker.js +1 -1
  171. package/layout/form-components/picker.js +1 -1
  172. package/layout/form-components/radio.js +1 -1
  173. package/layout/form-components/radiogroup.js +1 -1
  174. package/layout/form-components/range.js +1 -1
  175. package/layout/free.js +1 -1
  176. package/layout/grid-switcher.js +1 -1
  177. package/layout/grid.js +1 -1
  178. package/layout/horizontal-scroller.js +1 -1
  179. package/layout/image.js +1 -1
  180. package/layout/index.js +1 -1
  181. package/layout/link.js +1 -1
  182. package/layout/list.js +1 -1
  183. package/layout/meta-adder.js +1 -1
  184. package/layout/modal-2025.js +1 -1
  185. package/layout/morph.js +1 -1
  186. package/layout/multiswitcher.js +1 -1
  187. package/layout/nav-bar.js +1 -1
  188. package/layout/nav-factor/custom-div.js +1 -1
  189. package/layout/new-nav-bar.js +1 -1
  190. package/layout/polygon.js +1 -1
  191. package/layout/prerender-site.js +1 -1
  192. package/layout/prerender.js +1 -1
  193. package/layout/progress.js +1 -1
  194. package/layout/row.js +1 -1
  195. package/layout/scroll-video.js +1 -1
  196. package/layout/side-bar.js +1 -1
  197. package/layout/side-nav-bar.js +1 -1
  198. package/layout/simple-bar.js +1 -1
  199. package/layout/slider-2025.js +1 -1
  200. package/layout/spacer.js +1 -1
  201. package/layout/stack.js +1 -1
  202. package/layout/svg.js +1 -1
  203. package/layout/switcher.js +1 -1
  204. package/layout/table.js +1 -1
  205. package/layout/text-field.js +1 -1
  206. package/layout/text.js +1 -1
  207. package/layout/ulist.js +1 -1
  208. package/layout/video.js +1 -1
  209. package/layout/wrap.js +1 -1
  210. package/layout/zoom-card.js +1 -1
  211. package/lib/card-getter.js +1 -1
  212. package/lib/codegen.js +1 -1
  213. package/lib/data.js +1 -1
  214. package/lib/designer.js +1 -1
  215. package/lib/element-mapper.js +1 -1
  216. package/lib/keyframe-animation.js +1 -1
  217. package/lib/link-getter.js +1 -1
  218. package/lib/morph-node.js +1 -1
  219. package/lib/raster-inspect.js +1 -1
  220. package/lib/raster-ops.js +67 -4
  221. package/lib/raster-presets.js +1 -1
  222. package/lib/scroll-video.js +1 -1
  223. package/lib/seo.js +1 -1
  224. package/lib/stacker.js +1 -1
  225. package/lib/suggest.js +1 -1
  226. package/lib/theme.js +1 -1
  227. package/lib/transform-anim.js +1 -1
  228. package/lib/transition.js +1 -1
  229. package/package.json +1 -1
package/lib/raster-ops.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.1.6
2
+ * nodality v1.1.8
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -3664,7 +3664,25 @@ function applyRasterPipeline(el, rasterNodes, opts) {
3664
3664
  // the old capture, which is the right default for a morph that is
3665
3665
  // about to run.
3666
3666
  const atStart = transition.standDownAtStart && progress <= 0;
3667
- const wantVis = (done || atStart) && !hostsContent ? "hidden" : "visible";
3667
+ // The two endpoints are NOT symmetric once content is hosted, and
3668
+ // treating them alike stranded every live morph.
3669
+ //
3670
+ // At t=1 the hosted side IS the destination, so hiding the canvas
3671
+ // would hide the thing just handed over — it has to stay up, and
3672
+ // pointer retargeting is what keeps the controls inside it alive.
3673
+ //
3674
+ // At t=0 the element being handed back to is the CALLER'S, and by
3675
+ // construction it lives outside this canvas: `standDownAtStart` is
3676
+ // opt-in precisely because the caller owns that element and puts
3677
+ // it back itself. The hosted side is the destination, which should
3678
+ // not be on screen at t=0 anyway. So the canvas can stand down
3679
+ // here even while hosting.
3680
+ //
3681
+ // Without this a live morph never gives the source back: the
3682
+ // canvas stays up showing the transition's frozen first frame, the
3683
+ // real source stays display:none, and the nav looks perfectly
3684
+ // normal while being completely dead to a second click.
3685
+ const wantVis = ((done && !hostsContent) || atStart) ? "hidden" : "visible";
3668
3686
  if (canvas.style.visibility !== wantVis) canvas.style.visibility = wantVis;
3669
3687
  if (done) {
3670
3688
  if (inkSaved) showHostInk();
@@ -4208,6 +4226,42 @@ function applyRasterPipeline(el, rasterNodes, opts) {
4208
4226
  // their coordinate math on the CPU.
4209
4227
  let lastMoveProbe = 0;
4210
4228
 
4229
+ /**
4230
+ * Hit-test the canvas-hosted subtree by hand.
4231
+ *
4232
+ * `document.elementFromPoint` cannot see content the LIVE backend
4233
+ * hosts. To be uploaded as a texture the content has to live inside
4234
+ * the <canvas>, where it is canvas fallback content: laid out, but
4235
+ * never painted into the page. The browser's hit test therefore walks
4236
+ * straight past it and lands on the canvas itself, which is why every
4237
+ * control inside a live pipeline used to be dead.
4238
+ *
4239
+ * The boxes are real, though — a back button inside a live morph
4240
+ * reports its true 88x28 rect — so they can be tested directly. That
4241
+ * is the whole trick: layout is available, only painting and hit
4242
+ * testing are not, and hit testing is the part we can replace.
4243
+ *
4244
+ * Deepest match wins, which is what the browser does: a <span> inside
4245
+ * a <button> resolves to the span, and the dispatched event then
4246
+ * bubbles to the button exactly as a real click would. Among siblings
4247
+ * the last match wins, which approximates paint order for the
4248
+ * ordinary, non-z-indexed case.
4249
+ */
4250
+ const hostedElementAt = (x, y) => {
4251
+ let found = null;
4252
+ const walk = (node) => {
4253
+ for (const child of node.children) {
4254
+ const r = child.getBoundingClientRect();
4255
+ if (!r.width || !r.height) continue;
4256
+ if (x < r.left || x > r.right || y < r.top || y > r.bottom) continue;
4257
+ found = child;
4258
+ walk(child);
4259
+ }
4260
+ };
4261
+ walk(sourceEl);
4262
+ return found;
4263
+ };
4264
+
4211
4265
  const onRetarget = (e) => {
4212
4266
  if (!interactive || destroyed || e[RETARGET]) return;
4213
4267
  if (e.type === "pointermove" || e.type === "mousemove") {
@@ -4217,14 +4271,23 @@ function applyRasterPipeline(el, rasterNodes, opts) {
4217
4271
  }
4218
4272
  const s = sourceAt(e.clientX, e.clientY);
4219
4273
  if (!s) return;
4274
+ // Where the content lives inside the canvas there is no native hit
4275
+ // testing to defer to, displaced or not — so this shortcut has to
4276
+ // be skipped. It is why a live morph stayed dead even after it
4277
+ // settled: at rest the shader presents 1:1, the displacement is
4278
+ // zero, and every event took this early return.
4279
+ const hosted = sourceEl !== el;
4220
4280
  // Nothing moved here: let the browser's own hit-testing stand.
4221
- if (Math.abs(s.x - e.clientX) < 0.5 && Math.abs(s.y - e.clientY) < 0.5) return;
4281
+ if (!hosted &&
4282
+ Math.abs(s.x - e.clientX) < 0.5 && Math.abs(s.y - e.clientY) < 0.5) return;
4222
4283
 
4223
4284
  // Returns null when the source lands outside the VIEWPORT — an
4224
4285
  // element scrolled half off-screen whose displacement pushes the
4225
4286
  // source past the edge. Declining is the right answer there: the
4226
4287
  // native hit stands, rather than dispatching somewhere wrong.
4227
- const target = typeof document.elementFromPoint === "function"
4288
+ const target = hosted
4289
+ ? hostedElementAt(s.x, s.y)
4290
+ : typeof document.elementFromPoint === "function"
4228
4291
  ? document.elementFromPoint(s.x, s.y)
4229
4292
  : null;
4230
4293
  // Only ever redirect INTO our own subtree. A displacement that
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.1.6
2
+ * nodality v1.1.8
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.1.6
2
+ * nodality v1.1.8
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.1.6
2
+ * nodality v1.1.8
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.1.6
2
+ * nodality v1.1.8
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/lib/suggest.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.1.6
2
+ * nodality v1.1.8
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.1.6
2
+ * nodality v1.1.8
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.1.6
2
+ * nodality v1.1.8
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/lib/transition.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.1.6
2
+ * nodality v1.1.8
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.1.6",
3
+ "version": "1.1.8",
4
4
  "description": "A lightweight library for declarative UI elements.",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",