nodality 1.3.14 → 1.3.16

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 (218) hide show
  1. package/bin/install-skill.mjs +3 -3
  2. package/bin/mcp-server.mjs +46 -1
  3. package/bin/nodality.mjs +104 -1
  4. package/dist/animator.cjs.js.LICENSE.txt +1 -1
  5. package/dist/animator.esm.js.LICENSE.txt +1 -1
  6. package/dist/audionew.cjs.js.LICENSE.txt +1 -1
  7. package/dist/audionew.esm.js.LICENSE.txt +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.LICENSE.txt +1 -1
  11. package/dist/beta-desktop-bar.esm.js.LICENSE.txt +1 -1
  12. package/dist/beta-mobile-bar.cjs.js.LICENSE.txt +1 -1
  13. package/dist/beta-mobile-bar.esm.js.LICENSE.txt +1 -1
  14. package/dist/bundle.umd.js +1 -1
  15. package/dist/bundle.umd.js.LICENSE.txt +1 -1
  16. package/dist/button.cjs.js.LICENSE.txt +1 -1
  17. package/dist/button.esm.js.LICENSE.txt +1 -1
  18. package/dist/card-getter.cjs.js.LICENSE.txt +1 -1
  19. package/dist/card-getter.esm.js.LICENSE.txt +1 -1
  20. package/dist/center.cjs.js.LICENSE.txt +1 -1
  21. package/dist/center.esm.js.LICENSE.txt +1 -1
  22. package/dist/checkbox.cjs.js.LICENSE.txt +1 -1
  23. package/dist/checkbox.esm.js.LICENSE.txt +1 -1
  24. package/dist/code.cjs.js.LICENSE.txt +1 -1
  25. package/dist/code.esm.js.LICENSE.txt +1 -1
  26. package/dist/container.cjs.js.LICENSE.txt +1 -1
  27. package/dist/container.esm.js.LICENSE.txt +1 -1
  28. package/dist/data-list.cjs.js.LICENSE.txt +1 -1
  29. package/dist/data-list.esm.js.LICENSE.txt +1 -1
  30. package/dist/designer.cjs.js +1 -1
  31. package/dist/designer.cjs.js.LICENSE.txt +1 -1
  32. package/dist/designer.esm.js +1 -1
  33. package/dist/designer.esm.js.LICENSE.txt +1 -1
  34. package/dist/element-mapper.cjs.js +1 -1
  35. package/dist/element-mapper.cjs.js.LICENSE.txt +1 -1
  36. package/dist/element-mapper.esm.js +1 -1
  37. package/dist/element-mapper.esm.js.LICENSE.txt +1 -1
  38. package/dist/finalresult.esm.js +2 -2
  39. package/dist/finalresult.esm.js.LICENSE.txt +1 -1
  40. package/dist/flex-card.cjs.js.LICENSE.txt +1 -1
  41. package/dist/flex-card.esm.js.LICENSE.txt +1 -1
  42. package/dist/flex-grid.cjs.js.LICENSE.txt +1 -1
  43. package/dist/flex-grid.esm.js.LICENSE.txt +1 -1
  44. package/dist/flex-row.cjs.js.LICENSE.txt +1 -1
  45. package/dist/flex-row.esm.js.LICENSE.txt +1 -1
  46. package/dist/floating-input.cjs.js.LICENSE.txt +1 -1
  47. package/dist/floating-input.esm.js.LICENSE.txt +1 -1
  48. package/dist/free.cjs.js.LICENSE.txt +1 -1
  49. package/dist/free.esm.js.LICENSE.txt +1 -1
  50. package/dist/horizontal-scroller.cjs.js.LICENSE.txt +1 -1
  51. package/dist/horizontal-scroller.esm.js.LICENSE.txt +1 -1
  52. package/dist/image-picker.cjs.js.LICENSE.txt +1 -1
  53. package/dist/image-picker.esm.js.LICENSE.txt +1 -1
  54. package/dist/image.cjs.js.LICENSE.txt +1 -1
  55. package/dist/image.esm.js.LICENSE.txt +1 -1
  56. package/dist/index.cjs.js +1 -1
  57. package/dist/index.cjs.js.LICENSE.txt +1 -1
  58. package/dist/index.d.ts +20 -1
  59. package/dist/index.esm.js +2 -2
  60. package/dist/index.esm.js.LICENSE.txt +1 -1
  61. package/dist/keyframe-animation.cjs.js.LICENSE.txt +1 -1
  62. package/dist/keyframe-animation.esm.js.LICENSE.txt +1 -1
  63. package/dist/link-getter.cjs.js +1 -1
  64. package/dist/link-getter.cjs.js.LICENSE.txt +1 -1
  65. package/dist/link-getter.esm.js +1 -1
  66. package/dist/link-getter.esm.js.LICENSE.txt +1 -1
  67. package/dist/link.cjs.js +1 -1
  68. package/dist/link.cjs.js.LICENSE.txt +1 -1
  69. package/dist/link.esm.js +1 -1
  70. package/dist/link.esm.js.LICENSE.txt +1 -1
  71. package/dist/meta-adder.cjs.js.LICENSE.txt +1 -1
  72. package/dist/meta-adder.esm.js.LICENSE.txt +1 -1
  73. package/dist/modal-2025.cjs.js.LICENSE.txt +1 -1
  74. package/dist/modal-2025.esm.js.LICENSE.txt +1 -1
  75. package/dist/multiswitcher.cjs.js.LICENSE.txt +1 -1
  76. package/dist/multiswitcher.esm.js.LICENSE.txt +1 -1
  77. package/dist/new-nav-bar.cjs.js.LICENSE.txt +1 -1
  78. package/dist/new-nav-bar.esm.js.LICENSE.txt +1 -1
  79. package/dist/picker.cjs.js.LICENSE.txt +1 -1
  80. package/dist/picker.esm.js.LICENSE.txt +1 -1
  81. package/dist/progress.cjs.js.LICENSE.txt +1 -1
  82. package/dist/progress.esm.js.LICENSE.txt +1 -1
  83. package/dist/radio.cjs.js.LICENSE.txt +1 -1
  84. package/dist/radio.esm.js.LICENSE.txt +1 -1
  85. package/dist/range.cjs.js.LICENSE.txt +1 -1
  86. package/dist/range.esm.js.LICENSE.txt +1 -1
  87. package/dist/scroll-video.cjs.js.LICENSE.txt +1 -1
  88. package/dist/scroll-video.esm.js.LICENSE.txt +1 -1
  89. package/dist/side-bar.cjs.js.LICENSE.txt +1 -1
  90. package/dist/side-bar.esm.js.LICENSE.txt +1 -1
  91. package/dist/side-nav-bar.cjs.js.LICENSE.txt +1 -1
  92. package/dist/side-nav-bar.esm.js.LICENSE.txt +1 -1
  93. package/dist/simple-bar.cjs.js.LICENSE.txt +1 -1
  94. package/dist/simple-bar.esm.js.LICENSE.txt +1 -1
  95. package/dist/slider-2025.cjs.js.LICENSE.txt +1 -1
  96. package/dist/slider-2025.esm.js.LICENSE.txt +1 -1
  97. package/dist/spacer.cjs.js.LICENSE.txt +1 -1
  98. package/dist/spacer.esm.js.LICENSE.txt +1 -1
  99. package/dist/stack.cjs.js.LICENSE.txt +1 -1
  100. package/dist/stack.esm.js.LICENSE.txt +1 -1
  101. package/dist/stacker.cjs.js.LICENSE.txt +1 -1
  102. package/dist/stacker.esm.js.LICENSE.txt +1 -1
  103. package/dist/table.cjs.js.LICENSE.txt +1 -1
  104. package/dist/table.esm.js.LICENSE.txt +1 -1
  105. package/dist/text-field.cjs.js +1 -1
  106. package/dist/text-field.cjs.js.LICENSE.txt +1 -1
  107. package/dist/text-field.esm.js +1 -1
  108. package/dist/text-field.esm.js.LICENSE.txt +1 -1
  109. package/dist/text.cjs.js.LICENSE.txt +1 -1
  110. package/dist/text.esm.js.LICENSE.txt +1 -1
  111. package/dist/theme.cjs.js.LICENSE.txt +1 -1
  112. package/dist/theme.esm.js.LICENSE.txt +1 -1
  113. package/dist/transform-anim.cjs.js.LICENSE.txt +1 -1
  114. package/dist/transform-anim.esm.js.LICENSE.txt +1 -1
  115. package/dist/ulist.cjs.js.LICENSE.txt +1 -1
  116. package/dist/ulist.esm.js.LICENSE.txt +1 -1
  117. package/dist/video.cjs.js.LICENSE.txt +1 -1
  118. package/dist/video.esm.js.LICENSE.txt +1 -1
  119. package/dist/wrap.cjs.js.LICENSE.txt +1 -1
  120. package/dist/wrap.esm.js.LICENSE.txt +1 -1
  121. package/dist/zoom-card.cjs.js.LICENSE.txt +1 -1
  122. package/dist/zoom-card.esm.js.LICENSE.txt +1 -1
  123. package/layout/animator.js +1 -1
  124. package/layout/audio.js +1 -1
  125. package/layout/audionew.js +1 -1
  126. package/layout/base.js +1 -1
  127. package/layout/beta-desktop-bar.js +1 -1
  128. package/layout/beta-mobile-bar.js +1 -1
  129. package/layout/button.js +1 -1
  130. package/layout/center.js +1 -1
  131. package/layout/checkbox.js +1 -1
  132. package/layout/circle.js +1 -1
  133. package/layout/code.js +1 -1
  134. package/layout/container.js +1 -1
  135. package/layout/dropdown-2025.js +1 -1
  136. package/layout/flex-card.js +1 -1
  137. package/layout/flex-grid.js +1 -1
  138. package/layout/flex-row.js +1 -1
  139. package/layout/form-components/custom.js +1 -1
  140. package/layout/form-components/data-list.js +1 -1
  141. package/layout/form-components/floating-input.js +1 -1
  142. package/layout/form-components/form-all.js +1 -1
  143. package/layout/form-components/form.js +9 -2
  144. package/layout/form-components/image-picker.js +1 -1
  145. package/layout/form-components/picker.js +1 -1
  146. package/layout/form-components/radio.js +1 -1
  147. package/layout/form-components/radiogroup.js +1 -1
  148. package/layout/form-components/range.js +1 -1
  149. package/layout/free.js +1 -1
  150. package/layout/grid-overlay.js +1 -1
  151. package/layout/grid-switcher.js +1 -1
  152. package/layout/grid.js +1 -1
  153. package/layout/horizontal-scroller.js +1 -1
  154. package/layout/image.js +1 -1
  155. package/layout/index.js +5 -1
  156. package/layout/link.js +6 -3
  157. package/layout/list.js +1 -1
  158. package/layout/meta-adder.js +1 -1
  159. package/layout/modal-2025.js +1 -1
  160. package/layout/morph.js +1 -1
  161. package/layout/multiswitcher.js +1 -1
  162. package/layout/nav-bar.js +1 -1
  163. package/layout/nav-factor/custom-div.js +1 -1
  164. package/layout/new-nav-bar.js +1 -1
  165. package/layout/polygon.js +1 -1
  166. package/layout/prerender-site.js +1 -1
  167. package/layout/prerender.js +1 -1
  168. package/layout/progress.js +1 -1
  169. package/layout/row.js +1 -1
  170. package/layout/scroll-video.js +1 -1
  171. package/layout/shop.js +261 -0
  172. package/layout/side-bar.js +1 -1
  173. package/layout/side-nav-bar.js +1 -1
  174. package/layout/simple-bar.js +1 -1
  175. package/layout/slider-2025.js +1 -1
  176. package/layout/spacer.js +1 -1
  177. package/layout/stack.js +1 -1
  178. package/layout/svg.js +1 -1
  179. package/layout/switcher.js +1 -1
  180. package/layout/table.js +1 -1
  181. package/layout/text-field.js +4 -2
  182. package/layout/text.js +1 -1
  183. package/layout/ulist.js +1 -1
  184. package/layout/video.js +1 -1
  185. package/layout/wrap.js +1 -1
  186. package/layout/zoom-card.js +1 -1
  187. package/lib/agent-surface.js +24 -2
  188. package/lib/card-getter.js +1 -1
  189. package/lib/check-page.js +37 -5
  190. package/lib/codegen.js +1 -1
  191. package/lib/data.js +1 -1
  192. package/lib/designer.js +3 -2
  193. package/lib/element-mapper.js +118 -1
  194. package/lib/element-params.generated.js +4 -4
  195. package/lib/grid-geometry.js +1 -1
  196. package/lib/keyframe-animation.js +1 -1
  197. package/lib/known-inert.js +85 -0
  198. package/lib/link-getter.js +1 -1
  199. package/lib/morph-node.js +1 -1
  200. package/lib/normalize-spec.js +1 -1
  201. package/lib/parse-html.js +1 -1
  202. package/lib/raster-inspect.js +1 -1
  203. package/lib/raster-ops.js +1 -1
  204. package/lib/raster-presets.js +1 -1
  205. package/lib/resolve-refs.js +1 -1
  206. package/lib/scroll-video.js +1 -1
  207. package/lib/seo.js +1 -1
  208. package/lib/stacker.js +1 -1
  209. package/lib/suggest.js +1 -1
  210. package/lib/theme.js +1 -1
  211. package/lib/transform-anim.js +1 -1
  212. package/lib/transition.js +1 -1
  213. package/lib/validate-nodes.js +55 -4
  214. package/lib/webmcp-adapter.js +36 -1
  215. package/package.json +1 -1
  216. package/schema.json +3477 -816
  217. package/scripts/generate-schema.mjs +7 -0
  218. package/skills/nodality/SKILL.md +11 -1
@@ -385,8 +385,15 @@ for (const type of TYPES) {
385
385
  const unit = (UNIT_BY_TYPE[type] && UNIT_BY_TYPE[type][name])
386
386
  || where.map((f) => (UNIT_BY_FILE.get(f) || {})[name]).find(Boolean)
387
387
  || UNIT_GLOBAL[name];
388
+ // Where the name is read. "mapper": the type reads it off the element
389
+ // by name — its own vocabulary. "component": only reachable because the
390
+ // mapper forwards the element to a component that reads it — real, but
391
+ // inherited, and the bulk of a composite's list. Reported so a reader
392
+ // (or get_schema) can put the type's own parameters first.
393
+ const via = where.includes(MAPPER) ? "mapper" : "component";
388
394
  return {
389
395
  name,
396
+ via,
390
397
  ...(unit ? { unit } : {}),
391
398
  ...(description ? { description } : {}),
392
399
  ...(deprecated ? { deprecated } : {}),
@@ -42,6 +42,10 @@ drift. If the MCP is not configured, add it:
42
42
  { "mcpServers": { "nodality": { "command": "npx", "args": ["nodality", "mcp"] } } }
43
43
  ```
44
44
 
45
+ Or let the CLI write it: `npx nodality mcp --register` in the project, or
46
+ `--root=<folder>` when sessions start in a folder above it — the tools only
47
+ appear in sessions started where `.mcp.json` lives.
48
+
45
49
  1. **`list_ops` first.** Never guess an op name, a parameter, an easing
46
50
  name, a transition preset, or an element type. One call returns all
47
51
  of them as data.
@@ -58,7 +62,8 @@ drift. If the MCP is not configured, add it:
58
62
  against real ids and E itself is validated. The report never throws;
59
63
  repair from its `did-you-mean` suggestions and re-validate until
60
64
  clean.
61
- 4. **`preview` to render.** It writes a self-contained HTML file through
65
+ 4. **`preview` to render.** Pass `viewport: "desktop"` to see the wide side of anything chosen by width (the default is a phone); the report lists ids that rendered `empty` instead of leaving a blank page to look finished.
66
+ It writes a self-contained HTML file through
62
67
  the jsdom prerenderer. Know the boundary: the file is prerendered DOM
63
68
  and morph scaffolding only and carries no runtime, so raster effects
64
69
  and transitions will not run from it. To see them, put the pair in a
@@ -76,6 +81,8 @@ does not do what you wrote:
76
81
  |---|---|
77
82
  | `BAD_PARAM_VALUE` | the value is not the shape the parameter takes — `width: 7` is not a CSS length, `mar: 7` is not `[{a: 7}]`. As an *error* where the value is provably inert; as a warning otherwise. |
78
83
  | `PARAM_NOT_ON_TYPE` | a real parameter name that THIS type does not read, so it is accepted and dropped — `keySet` on a `table`. |
84
+ | `PARAM_INERT` | a parameter the type DOES list, and is known to ignore (the library's conformance baseline) — `size` on a `p`, `color` on a `checkbox`. The hint says what to use instead. |
85
+ | `STORE_AFTER_PRODUCT` / `NO_STORE` | a commerce `product` placed before the page's `store`, or with none: it renders empty. |
79
86
 
80
87
  `get_schema <type>` carries a `unit` on every parameter whose shape the
81
88
  source declares, which is where those checks come from, and a
@@ -314,6 +321,9 @@ document is untrusted input.
314
321
 
315
322
  ## Verifying your work
316
323
 
324
+ - **Read `FAINT_TEXT` from `check_page`.** It reports small text that passes
325
+ WCAG and still reads faint (APCA), the usual case on mid-tone backgrounds.
326
+ Fix with weight, a lighter or darker ground, or size; not by ignoring it.
317
327
  - **Verify a morph by progress, not by DOM presence.** The destination
318
328
  view is inserted before capture begins, so "the element exists" passes
319
329
  even when the transition hangs. Assert that the animation *progressed*