nodality 1.3.21 → 1.3.23

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 (284) hide show
  1. package/bin/nodality.mjs +48 -3
  2. package/dist/animator.cjs.js +1 -1
  3. package/dist/animator.cjs.js.LICENSE.txt +1 -1
  4. package/dist/animator.esm.js +1 -1
  5. package/dist/animator.esm.js.LICENSE.txt +1 -1
  6. package/dist/audionew.cjs.js +1 -1
  7. package/dist/audionew.cjs.js.LICENSE.txt +1 -1
  8. package/dist/audionew.esm.js +1 -1
  9. package/dist/audionew.esm.js.LICENSE.txt +1 -1
  10. package/dist/base.cjs.js +1 -1
  11. package/dist/base.cjs.js.LICENSE.txt +1 -1
  12. package/dist/base.esm.js +1 -1
  13. package/dist/base.esm.js.LICENSE.txt +1 -1
  14. package/dist/beta-desktop-bar.cjs.js +1 -1
  15. package/dist/beta-desktop-bar.cjs.js.LICENSE.txt +1 -1
  16. package/dist/beta-desktop-bar.esm.js +1 -1
  17. package/dist/beta-desktop-bar.esm.js.LICENSE.txt +1 -1
  18. package/dist/beta-mobile-bar.cjs.js +1 -1
  19. package/dist/beta-mobile-bar.cjs.js.LICENSE.txt +1 -1
  20. package/dist/beta-mobile-bar.esm.js +1 -1
  21. package/dist/beta-mobile-bar.esm.js.LICENSE.txt +1 -1
  22. package/dist/bundle.umd.js +1 -1
  23. package/dist/bundle.umd.js.LICENSE.txt +1 -1
  24. package/dist/button.cjs.js +1 -1
  25. package/dist/button.cjs.js.LICENSE.txt +1 -1
  26. package/dist/button.esm.js +1 -1
  27. package/dist/button.esm.js.LICENSE.txt +1 -1
  28. package/dist/card-getter.cjs.js.LICENSE.txt +1 -1
  29. package/dist/card-getter.esm.js.LICENSE.txt +1 -1
  30. package/dist/center.cjs.js +1 -1
  31. package/dist/center.cjs.js.LICENSE.txt +1 -1
  32. package/dist/center.esm.js +1 -1
  33. package/dist/center.esm.js.LICENSE.txt +1 -1
  34. package/dist/checkbox.cjs.js +1 -1
  35. package/dist/checkbox.cjs.js.LICENSE.txt +1 -1
  36. package/dist/checkbox.esm.js +1 -1
  37. package/dist/checkbox.esm.js.LICENSE.txt +1 -1
  38. package/dist/code.cjs.js +1 -1
  39. package/dist/code.cjs.js.LICENSE.txt +1 -1
  40. package/dist/code.esm.js +1 -1
  41. package/dist/code.esm.js.LICENSE.txt +1 -1
  42. package/dist/container.cjs.js +1 -1
  43. package/dist/container.cjs.js.LICENSE.txt +1 -1
  44. package/dist/container.esm.js +1 -1
  45. package/dist/container.esm.js.LICENSE.txt +1 -1
  46. package/dist/data-list.cjs.js.LICENSE.txt +1 -1
  47. package/dist/data-list.esm.js.LICENSE.txt +1 -1
  48. package/dist/designer.cjs.js +1 -1
  49. package/dist/designer.cjs.js.LICENSE.txt +1 -1
  50. package/dist/designer.esm.js +1 -1
  51. package/dist/designer.esm.js.LICENSE.txt +1 -1
  52. package/dist/element-mapper.cjs.js +1 -1
  53. package/dist/element-mapper.cjs.js.LICENSE.txt +1 -1
  54. package/dist/element-mapper.esm.js +1 -1
  55. package/dist/element-mapper.esm.js.LICENSE.txt +1 -1
  56. package/dist/finalresult.esm.js +1 -1
  57. package/dist/finalresult.esm.js.LICENSE.txt +1 -1
  58. package/dist/flex-card.cjs.js +1 -1
  59. package/dist/flex-card.cjs.js.LICENSE.txt +1 -1
  60. package/dist/flex-card.esm.js +1 -1
  61. package/dist/flex-card.esm.js.LICENSE.txt +1 -1
  62. package/dist/flex-grid.cjs.js +1 -1
  63. package/dist/flex-grid.cjs.js.LICENSE.txt +1 -1
  64. package/dist/flex-grid.esm.js +1 -1
  65. package/dist/flex-grid.esm.js.LICENSE.txt +1 -1
  66. package/dist/flex-row.cjs.js +1 -1
  67. package/dist/flex-row.cjs.js.LICENSE.txt +1 -1
  68. package/dist/flex-row.esm.js +1 -1
  69. package/dist/flex-row.esm.js.LICENSE.txt +1 -1
  70. package/dist/floating-input.cjs.js +1 -1
  71. package/dist/floating-input.cjs.js.LICENSE.txt +1 -1
  72. package/dist/floating-input.esm.js +1 -1
  73. package/dist/floating-input.esm.js.LICENSE.txt +1 -1
  74. package/dist/free.cjs.js +1 -1
  75. package/dist/free.cjs.js.LICENSE.txt +1 -1
  76. package/dist/free.esm.js +1 -1
  77. package/dist/free.esm.js.LICENSE.txt +1 -1
  78. package/dist/horizontal-scroller.cjs.js.LICENSE.txt +1 -1
  79. package/dist/horizontal-scroller.esm.js.LICENSE.txt +1 -1
  80. package/dist/image-picker.cjs.js +1 -1
  81. package/dist/image-picker.cjs.js.LICENSE.txt +1 -1
  82. package/dist/image-picker.esm.js +1 -1
  83. package/dist/image-picker.esm.js.LICENSE.txt +1 -1
  84. package/dist/image.cjs.js +1 -1
  85. package/dist/image.cjs.js.LICENSE.txt +1 -1
  86. package/dist/image.esm.js +1 -1
  87. package/dist/image.esm.js.LICENSE.txt +1 -1
  88. package/dist/index.cjs.js +1 -1
  89. package/dist/index.cjs.js.LICENSE.txt +1 -1
  90. package/dist/index.d.ts +1 -1
  91. package/dist/index.esm.js +1 -1
  92. package/dist/index.esm.js.LICENSE.txt +1 -1
  93. package/dist/keyframe-animation.cjs.js.LICENSE.txt +1 -1
  94. package/dist/keyframe-animation.esm.js.LICENSE.txt +1 -1
  95. package/dist/link-getter.cjs.js +1 -1
  96. package/dist/link-getter.cjs.js.LICENSE.txt +1 -1
  97. package/dist/link-getter.esm.js +1 -1
  98. package/dist/link-getter.esm.js.LICENSE.txt +1 -1
  99. package/dist/link.cjs.js +1 -1
  100. package/dist/link.cjs.js.LICENSE.txt +1 -1
  101. package/dist/link.esm.js +1 -1
  102. package/dist/link.esm.js.LICENSE.txt +1 -1
  103. package/dist/meta-adder.cjs.js +1 -1
  104. package/dist/meta-adder.cjs.js.LICENSE.txt +1 -1
  105. package/dist/meta-adder.esm.js +1 -1
  106. package/dist/meta-adder.esm.js.LICENSE.txt +1 -1
  107. package/dist/modal-2025.cjs.js +1 -1
  108. package/dist/modal-2025.cjs.js.LICENSE.txt +1 -1
  109. package/dist/modal-2025.esm.js +1 -1
  110. package/dist/modal-2025.esm.js.LICENSE.txt +1 -1
  111. package/dist/multiswitcher.cjs.js +1 -1
  112. package/dist/multiswitcher.cjs.js.LICENSE.txt +1 -1
  113. package/dist/multiswitcher.esm.js +1 -1
  114. package/dist/multiswitcher.esm.js.LICENSE.txt +1 -1
  115. package/dist/new-nav-bar.cjs.js +1 -1
  116. package/dist/new-nav-bar.cjs.js.LICENSE.txt +1 -1
  117. package/dist/new-nav-bar.esm.js +1 -1
  118. package/dist/new-nav-bar.esm.js.LICENSE.txt +1 -1
  119. package/dist/picker.cjs.js +1 -1
  120. package/dist/picker.cjs.js.LICENSE.txt +1 -1
  121. package/dist/picker.esm.js +1 -1
  122. package/dist/picker.esm.js.LICENSE.txt +1 -1
  123. package/dist/progress.cjs.js +1 -1
  124. package/dist/progress.cjs.js.LICENSE.txt +1 -1
  125. package/dist/progress.esm.js +1 -1
  126. package/dist/progress.esm.js.LICENSE.txt +1 -1
  127. package/dist/radio.cjs.js.LICENSE.txt +1 -1
  128. package/dist/radio.esm.js.LICENSE.txt +1 -1
  129. package/dist/range.cjs.js.LICENSE.txt +1 -1
  130. package/dist/range.esm.js.LICENSE.txt +1 -1
  131. package/dist/scroll-video.cjs.js.LICENSE.txt +1 -1
  132. package/dist/scroll-video.esm.js.LICENSE.txt +1 -1
  133. package/dist/side-bar.cjs.js +1 -1
  134. package/dist/side-bar.cjs.js.LICENSE.txt +1 -1
  135. package/dist/side-bar.esm.js +1 -1
  136. package/dist/side-bar.esm.js.LICENSE.txt +1 -1
  137. package/dist/side-nav-bar.cjs.js +1 -1
  138. package/dist/side-nav-bar.cjs.js.LICENSE.txt +1 -1
  139. package/dist/side-nav-bar.esm.js +1 -1
  140. package/dist/side-nav-bar.esm.js.LICENSE.txt +1 -1
  141. package/dist/simple-bar.cjs.js +1 -1
  142. package/dist/simple-bar.cjs.js.LICENSE.txt +1 -1
  143. package/dist/simple-bar.esm.js +1 -1
  144. package/dist/simple-bar.esm.js.LICENSE.txt +1 -1
  145. package/dist/slider-2025.cjs.js +1 -1
  146. package/dist/slider-2025.cjs.js.LICENSE.txt +1 -1
  147. package/dist/slider-2025.esm.js +1 -1
  148. package/dist/slider-2025.esm.js.LICENSE.txt +1 -1
  149. package/dist/spacer.cjs.js +1 -1
  150. package/dist/spacer.cjs.js.LICENSE.txt +1 -1
  151. package/dist/spacer.esm.js +1 -1
  152. package/dist/spacer.esm.js.LICENSE.txt +1 -1
  153. package/dist/stack.cjs.js +1 -1
  154. package/dist/stack.cjs.js.LICENSE.txt +1 -1
  155. package/dist/stack.esm.js +1 -1
  156. package/dist/stack.esm.js.LICENSE.txt +1 -1
  157. package/dist/stacker.cjs.js.LICENSE.txt +1 -1
  158. package/dist/stacker.esm.js.LICENSE.txt +1 -1
  159. package/dist/table.cjs.js +1 -1
  160. package/dist/table.cjs.js.LICENSE.txt +1 -1
  161. package/dist/table.esm.js +1 -1
  162. package/dist/table.esm.js.LICENSE.txt +1 -1
  163. package/dist/text-field.cjs.js +1 -1
  164. package/dist/text-field.cjs.js.LICENSE.txt +1 -1
  165. package/dist/text-field.esm.js +1 -1
  166. package/dist/text-field.esm.js.LICENSE.txt +1 -1
  167. package/dist/text.cjs.js +1 -1
  168. package/dist/text.cjs.js.LICENSE.txt +1 -1
  169. package/dist/text.esm.js +1 -1
  170. package/dist/text.esm.js.LICENSE.txt +1 -1
  171. package/dist/theme.cjs.js.LICENSE.txt +1 -1
  172. package/dist/theme.esm.js.LICENSE.txt +1 -1
  173. package/dist/transform-anim.cjs.js.LICENSE.txt +1 -1
  174. package/dist/transform-anim.esm.js.LICENSE.txt +1 -1
  175. package/dist/ulist.cjs.js +1 -1
  176. package/dist/ulist.cjs.js.LICENSE.txt +1 -1
  177. package/dist/ulist.esm.js +1 -1
  178. package/dist/ulist.esm.js.LICENSE.txt +1 -1
  179. package/dist/video.cjs.js +1 -1
  180. package/dist/video.cjs.js.LICENSE.txt +1 -1
  181. package/dist/video.esm.js +1 -1
  182. package/dist/video.esm.js.LICENSE.txt +1 -1
  183. package/dist/wrap.cjs.js +1 -1
  184. package/dist/wrap.cjs.js.LICENSE.txt +1 -1
  185. package/dist/wrap.esm.js +1 -1
  186. package/dist/wrap.esm.js.LICENSE.txt +1 -1
  187. package/dist/zoom-card.cjs.js +1 -1
  188. package/dist/zoom-card.cjs.js.LICENSE.txt +1 -1
  189. package/dist/zoom-card.esm.js +1 -1
  190. package/dist/zoom-card.esm.js.LICENSE.txt +1 -1
  191. package/layout/animator.js +9 -3
  192. package/layout/audio.js +1 -1
  193. package/layout/audionew.js +1 -1
  194. package/layout/base.js +1 -1
  195. package/layout/beta-desktop-bar.js +1 -1
  196. package/layout/beta-mobile-bar.js +1 -1
  197. package/layout/button.js +1 -1
  198. package/layout/center.js +1 -1
  199. package/layout/checkbox.js +1 -1
  200. package/layout/circle.js +1 -1
  201. package/layout/code.js +1 -1
  202. package/layout/container.js +1 -1
  203. package/layout/dropdown-2025.js +1 -1
  204. package/layout/flex-card.js +1 -1
  205. package/layout/flex-grid.js +1 -1
  206. package/layout/flex-row.js +1 -1
  207. package/layout/form-components/custom.js +1 -1
  208. package/layout/form-components/data-list.js +1 -1
  209. package/layout/form-components/floating-input.js +1 -1
  210. package/layout/form-components/form-all.js +1 -1
  211. package/layout/form-components/form.js +1 -1
  212. package/layout/form-components/image-picker.js +1 -1
  213. package/layout/form-components/picker.js +1 -1
  214. package/layout/form-components/radio.js +1 -1
  215. package/layout/form-components/radiogroup.js +1 -1
  216. package/layout/form-components/range.js +1 -1
  217. package/layout/free.js +1 -1
  218. package/layout/grid-overlay.js +1 -1
  219. package/layout/grid-switcher.js +1 -1
  220. package/layout/grid.js +1 -1
  221. package/layout/horizontal-scroller.js +1 -1
  222. package/layout/image.js +7 -4
  223. package/layout/index.js +1 -1
  224. package/layout/link.js +1 -1
  225. package/layout/list.js +1 -1
  226. package/layout/meta-adder.js +1 -1
  227. package/layout/modal-2025.js +1 -1
  228. package/layout/morph.js +1 -1
  229. package/layout/multiswitcher.js +1 -1
  230. package/layout/nav-bar.js +1 -1
  231. package/layout/nav-factor/custom-div.js +1 -1
  232. package/layout/new-nav-bar.js +1 -1
  233. package/layout/polygon.js +1 -1
  234. package/layout/prerender-site.js +1 -1
  235. package/layout/prerender.js +1 -1
  236. package/layout/progress.js +1 -1
  237. package/layout/row.js +1 -1
  238. package/layout/scroll-video.js +1 -1
  239. package/layout/shop.js +1 -1
  240. package/layout/side-bar.js +1 -1
  241. package/layout/side-nav-bar.js +1 -1
  242. package/layout/simple-bar.js +1 -1
  243. package/layout/slider-2025.js +1 -1
  244. package/layout/spacer.js +1 -1
  245. package/layout/stack.js +1 -1
  246. package/layout/svg.js +1 -1
  247. package/layout/switcher.js +1 -1
  248. package/layout/table.js +1 -1
  249. package/layout/text-field.js +1 -1
  250. package/layout/text.js +3 -3
  251. package/layout/ulist.js +1 -1
  252. package/layout/video.js +1 -1
  253. package/layout/wrap.js +1 -1
  254. package/layout/zoom-card.js +1 -1
  255. package/lib/agent-surface.js +1 -1
  256. package/lib/card-getter.js +1 -1
  257. package/lib/check-page.js +1 -1
  258. package/lib/codegen.js +1 -1
  259. package/lib/data.js +1 -1
  260. package/lib/designer.js +1 -1
  261. package/lib/element-mapper.js +11 -11
  262. package/lib/element-params.generated.js +3 -3
  263. package/lib/grid-geometry.js +1 -1
  264. package/lib/keyframe-animation.js +1 -1
  265. package/lib/known-inert.js +1 -1
  266. package/lib/link-getter.js +1 -1
  267. package/lib/morph-node.js +1 -1
  268. package/lib/normalize-spec.js +1 -1
  269. package/lib/parse-html.js +1 -1
  270. package/lib/raster-inspect.js +1 -1
  271. package/lib/raster-ops.js +1 -1
  272. package/lib/raster-presets.js +1 -1
  273. package/lib/resolve-refs.js +1 -1
  274. package/lib/scroll-video.js +1 -1
  275. package/lib/seo.js +1 -1
  276. package/lib/stacker.js +1 -1
  277. package/lib/suggest.js +1 -1
  278. package/lib/theme.js +1 -1
  279. package/lib/transform-anim.js +1 -1
  280. package/lib/transition.js +1 -1
  281. package/lib/validate-nodes.js +2 -2
  282. package/lib/webmcp-adapter.js +1 -1
  283. package/package.json +1 -1
  284. package/schema.json +24 -30
package/bin/nodality.mjs CHANGED
@@ -99,7 +99,9 @@ function showUsage() {
99
99
  # runs automatically before \`prerender\`)
100
100
  nodality stage [--upload=DIR] # Copy the installed ESM bundle to
101
101
  # upload/dist/lib.bundle.js + stamp the
102
- # version into upload/_nodality-version.js.
102
+ # version into upload/_nodality-version.js,
103
+ # and ?v=<version> into each page's link to
104
+ # the bundle (--no-cache-bust to skip).
103
105
  # Run from consumer upgrade.sh after
104
106
  # \`npm install nodality@latest\`.
105
107
  nodality mcp # Model Context Protocol server over stdio,
@@ -1065,6 +1067,8 @@ async function main() {
1065
1067
  // --no-bundle skip the dist/lib.bundle.js copy (some
1066
1068
  // consumers don't ship the browser ESM)
1067
1069
  // --no-version skip _nodality-version.js stamping
1070
+ // --no-cache-bust leave the importmap and the staged modules' import
1071
+ // URLs without the ?v=<version> query
1068
1072
  //
1069
1073
  // Idempotent: writes only when content changes. Safe to re-run.
1070
1074
  async function runStage(args) {
@@ -1100,6 +1104,22 @@ async function runStage(args) {
1100
1104
  );
1101
1105
  const version = pkg.version;
1102
1106
 
1107
+ // Cache-busting. A host that caches JavaScript by URL (sls3.cz's does, for
1108
+ // a day or more) kept serving the PREVIOUS bundle at /dist/lib.bundle.js
1109
+ // after an upgrade, while the pages beside it were new. The version goes
1110
+ // into every URL stage controls: the importmap's link to the bundle, and
1111
+ // the bundle's own imports of the modules staged beside it — otherwise a
1112
+ // new bundle would load cached old copies of those, which is worse than
1113
+ // either version alone. ESM keys modules by URL, so every copy is stamped
1114
+ // the same way and each module still loads once.
1115
+ const bust = flags["no-cache-bust"] !== true;
1116
+ const RELSPEC = /(?:import|export)[^'"]*?from\s*["'](\.[^"']+)["']|import\s*\(\s*["'](\.[^"']+)["']\s*\)|import\s*["'](\.[^"']+)["']/g;
1117
+ const stampSpecs = (code) => !bust ? code : code.replace(RELSPEC, (full, a, b, c) => {
1118
+ const spec = a || b || c;
1119
+ const bare = spec.replace(/\?v=[^"']*$/, "");
1120
+ return full.replace(spec, `${bare}?v=${version}`);
1121
+ });
1122
+
1103
1123
  // 1. Bundle copy — `upload/dist/lib.bundle.js` is what the consumer's
1104
1124
  // HTML importmap pins `"nodality"` to. Keep it in lockstep with
1105
1125
  // the installed package's ESM build.
@@ -1110,7 +1130,7 @@ async function runStage(args) {
1110
1130
  console.warn(`[nodality] stage: ${src} missing — skipping bundle copy`);
1111
1131
  } else {
1112
1132
  fs.mkdirSync(path.dirname(dst), { recursive: true });
1113
- fs.copyFileSync(src, dst);
1133
+ fs.writeFileSync(dst, stampSpecs(fs.readFileSync(src, "utf8")));
1114
1134
  console.log(`[nodality] stage: bundle → ${path.relative(cwd, dst)}`);
1115
1135
 
1116
1136
  // 1b. The bundle does not contain everything it needs. The build
@@ -1162,7 +1182,7 @@ async function runStage(args) {
1162
1182
  }
1163
1183
  const dest = path.join(uploadDir, rel);
1164
1184
  fs.mkdirSync(path.dirname(dest), { recursive: true });
1165
- fs.writeFileSync(dest, code);
1185
+ fs.writeFileSync(dest, stampSpecs(code));
1166
1186
  copied++;
1167
1187
  for (const spec of relSpecs(code)) {
1168
1188
  queue.push(path.resolve(path.dirname(abs), spec));
@@ -1204,6 +1224,31 @@ async function runStage(args) {
1204
1224
  console.log(`[nodality] stage: version already at ${version} (no change)`);
1205
1225
  }
1206
1226
  }
1227
+
1228
+ // 3. The pages' link to the bundle: `"nodality": "/dist/lib.bundle.js"` in
1229
+ // each importmap becomes `…/lib.bundle.js?v=<version>`, replacing an
1230
+ // older stamp. Only inside <script type="importmap"> blocks, and only
1231
+ // the link to the staged bundle — nothing else in a page is touched.
1232
+ if (bust && flags["no-bundle"] !== true) {
1233
+ const SKIP = new Set(["node_modules", "dist", "lib", "layout", ".git"]);
1234
+ const pages = [];
1235
+ const walk = (dir) => {
1236
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
1237
+ if (entry.isDirectory()) { if (!SKIP.has(entry.name)) walk(path.join(dir, entry.name)); }
1238
+ else if (entry.name.endsWith(".html")) pages.push(path.join(dir, entry.name));
1239
+ }
1240
+ };
1241
+ walk(uploadDir);
1242
+ const LINK = /(["'])((?:\.{0,2}\/)?(?:[\w.-]+\/)*dist\/lib\.bundle\.js)(?:\?v=[^"']*)?\1/g;
1243
+ let stamped = 0;
1244
+ for (const file of pages) {
1245
+ const html = fs.readFileSync(file, "utf8");
1246
+ const next = html.replace(/(<script[^>]*type=["']importmap["'][^>]*>)([\s\S]*?)(<\/script>)/gi,
1247
+ (whole, open, body, close) => open + body.replace(LINK, (m, q, url) => `${q}${url}?v=${version}${q}`) + close);
1248
+ if (next !== html) { fs.writeFileSync(file, next); stamped++; }
1249
+ }
1250
+ if (stamped) console.log(`[nodality] stage: importmap → ?v=${version} in ${stamped} page(s)`);
1251
+ }
1207
1252
  }
1208
1253
 
1209
1254
  main().catch((err) => {