nodality 1.0.158 → 1.0.162

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 (96) hide show
  1. package/bin/nodality.js +309 -0
  2. package/layout/animator.js +1 -1
  3. package/layout/audio.js +1 -1
  4. package/layout/audionew.js +1 -1
  5. package/layout/base-2.js +1 -1
  6. package/layout/base.js +1 -1
  7. package/layout/beta-desktop-bar.js +1 -1
  8. package/layout/beta-mobile-bar.js +1 -1
  9. package/layout/box.js +1 -1
  10. package/layout/button.js +1 -1
  11. package/layout/cards.js +1 -1
  12. package/layout/center.js +1 -1
  13. package/layout/checkbox.js +1 -1
  14. package/layout/circle.js +1 -1
  15. package/layout/clean-row.js +1 -1
  16. package/layout/code.js +1 -1
  17. package/layout/container.js +1 -1
  18. package/layout/custom.js +1 -1
  19. package/layout/div-image.js +1 -1
  20. package/layout/dropdown-2025.js +1 -1
  21. package/layout/dropdown.js +1 -1
  22. package/layout/empty-element.js +1 -1
  23. package/layout/external-stylesheet.js +1 -1
  24. package/layout/flex-card.js +1 -1
  25. package/layout/flex-grid.js +1 -1
  26. package/layout/flex-row.js +1 -1
  27. package/layout/footer.js +1 -1
  28. package/layout/form-components/custom.js +1 -1
  29. package/layout/form-components/data-list.js +1 -1
  30. package/layout/form-components/floating-input.js +1 -1
  31. package/layout/form-components/form-all.js +1 -1
  32. package/layout/form-components/form.js +1 -1
  33. package/layout/form-components/image-picker.js +1 -1
  34. package/layout/form-components/picker.js +1 -1
  35. package/layout/form-components/radio.js +1 -1
  36. package/layout/form-components/radiogroup.js +1 -1
  37. package/layout/form-components/range.js +1 -1
  38. package/layout/free.js +1 -1
  39. package/layout/grid-new.js +1 -1
  40. package/layout/grid-switcher.js +1 -1
  41. package/layout/grid.js +1 -1
  42. package/layout/group.js +1 -1
  43. package/layout/header.js +1 -1
  44. package/layout/horizontal-scroller.js +1 -1
  45. package/layout/image-old.js +1 -1
  46. package/layout/image.js +1 -1
  47. package/layout/index.js +1 -1
  48. package/layout/label.js +1 -1
  49. package/layout/link.js +1 -1
  50. package/layout/list-OLD.js +1 -1
  51. package/layout/list.js +1 -1
  52. package/layout/meta-adder.js +1 -1
  53. package/layout/modal-2025.js +1 -1
  54. package/layout/modernwrap.js +1 -1
  55. package/layout/multiswitcher.js +1 -1
  56. package/layout/multiswitcherBeta.js +1 -1
  57. package/layout/nav-bar.js +1 -1
  58. package/layout/nav-factor/custom-div.js +1 -1
  59. package/layout/navBar-OLD.js +1 -1
  60. package/layout/new-flat-adder.js +1 -1
  61. package/layout/new-nav-bar.js +1 -1
  62. package/layout/offset-container.js +1 -1
  63. package/layout/polygon.js +1 -1
  64. package/layout/prerender-site.js +1 -1
  65. package/layout/prerender.js +1 -1
  66. package/layout/progress.js +1 -1
  67. package/layout/row.js +1 -1
  68. package/layout/saved-new-nav-bar.js +1 -1
  69. package/layout/scroll-video.js +1 -1
  70. package/layout/side-bar.js +1 -1
  71. package/layout/side-nav-bar.js +1 -1
  72. package/layout/simple-bar.js +1 -1
  73. package/layout/slider-2025.js +1 -1
  74. package/layout/spacer.js +1 -1
  75. package/layout/stack.js +1 -1
  76. package/layout/styler.js +1 -1
  77. package/layout/svg.js +1 -1
  78. package/layout/switcher.js +1 -1
  79. package/layout/table.js +1 -1
  80. package/layout/text-field.js +1 -1
  81. package/layout/text.js +1 -1
  82. package/layout/ulist.js +1 -1
  83. package/layout/video.js +1 -1
  84. package/layout/without-new.js +1 -1
  85. package/layout/wrap.js +1 -1
  86. package/layout/zoom-card.js +1 -1
  87. package/lib/card-getter.js +1 -1
  88. package/lib/designer.js +1 -1
  89. package/lib/element-mapper.js +1 -1
  90. package/lib/keyframe-animation.js +1 -1
  91. package/lib/link-getter.js +1 -1
  92. package/lib/scroll-video.js +1 -1
  93. package/lib/stacker.js +1 -1
  94. package/lib/theme.js +1 -1
  95. package/lib/transform-anim.js +1 -1
  96. package/package.json +11 -3
@@ -0,0 +1,309 @@
1
+ #!/usr/bin/env node
2
+ // bin/nodality.js — `npx nodality <command>` CLI entry shipped with
3
+ // the nodality package. Today the only subcommand is `prerender`,
4
+ // which walks the consumer's `upload/` directory, pairs each
5
+ // `<name>.html` with `pages/<name>.js` (or `<name>.js` for flat
6
+ // layouts), and renders the resulting tree to static HTML in place.
7
+ //
8
+ // Why this lives in the nodality package rather than in a separate
9
+ // `nodality-cli`:
10
+ // • Single install (`npm i nodality`) gives you the engine AND the
11
+ // runner — same pattern as next, vite, astro, prisma.
12
+ // • The CLI and the engine ship together so version drift between
13
+ // them is impossible.
14
+ // • Consumer scripts wrap this in `npm run prerender`, but
15
+ // `npx nodality prerender` also works without any wiring.
16
+ //
17
+ // Configuration lives in the consumer's `nodality.config.json`:
18
+ //
19
+ // {
20
+ // "origin": "https://example.com",
21
+ // "uploadDir": "upload",
22
+ // "defaultLocale": "cs",
23
+ // "locales": ["cs", "en", ...],
24
+ // "pages": [{ "html": "index.html", "entry": "app.js" }, ...]
25
+ // "tolerateAsyncErrors": true
26
+ // }
27
+ //
28
+ // Anything omitted falls back to sensible defaults (single-locale,
29
+ // upload/, auto-discovered page list). CLI flags override the file.
30
+
31
+ import fs from "node:fs";
32
+ import path from "node:path";
33
+ import { prerenderSite } from "../layout/prerender-site.js";
34
+
35
+ // ─── Usage ──────────────────────────────────────────────────────
36
+
37
+ function showUsage() {
38
+ console.log(`Usage:
39
+ nodality prerender [flags] # SSG: render upload/*.html in place
40
+ nodality help
41
+
42
+ Prerender flags (all optional; fall through to nodality.config.json, then defaults):
43
+ --origin=<url> Public origin, e.g. https://example.com (required if no config)
44
+ --upload=<path> Upload directory (default: ./upload)
45
+ --default-locale=<code> Default locale code for multi-locale builds
46
+ --locales=<a,b,c> Comma-separated locale list
47
+ --tolerate-async Install uncaught/unhandledRejection handlers so a single page's
48
+ late throw (from a deferred animation/fetch timer) doesn't abort
49
+ the whole batch — useful for sites with span-animation entries.
50
+ --verbose Print every console.log() emitted by the library during render.
51
+ Default is quiet — only progress lines, page sizes, and the
52
+ final summary are shown. Use this when debugging.
53
+
54
+ Examples:
55
+ nodality prerender
56
+ nodality prerender --origin=https://example.com --tolerate-async
57
+ nodality prerender --verbose
58
+ `);
59
+ process.exit(1);
60
+ }
61
+
62
+ /**
63
+ * Install a stdout filter that hides the library's internal debug
64
+ * chatter (OGA, MBO, BRIS, APPENDED-, 0P, TAGS SET, date stamps, raw
65
+ * object dumps, "Appending brand:" lines, etc.) during prerender.
66
+ * Progress banners from `prerenderSite` (page-name lines, `→ … KB`,
67
+ * `✅ Prerender done`) and our own `[nodality] …` banner pass through
68
+ * unmodified.
69
+ *
70
+ * Bypassed with --verbose (or NODALITY_VERBOSE=1) when you need the
71
+ * full chatter to debug a render that silently goes wrong.
72
+ *
73
+ * We hook process.stdout.write (not console.log) because the library
74
+ * has 100+ scattered console.log calls across 30 files, AND because
75
+ * jsdom's virtual console forwards differently than expected, AND
76
+ * because some output uses process.stdout.write directly. Filtering
77
+ * at the byte stream catches every path uniformly.
78
+ */
79
+ function installLogFilter() {
80
+ const origWrite = process.stdout.write.bind(process.stdout);
81
+
82
+ // Strict whitelist: only lines matching one of these patterns
83
+ // survive. Everything else (dev markers, object dumps, stack traces
84
+ // from page scripts, HTML fragments leaking out of jsdom, media-
85
+ // query strings, date stamps, …) is dropped.
86
+ const ALLOW = [
87
+ /^\[nodality\]/, // our CLI banner
88
+ /^🌍/, // prerenderSite progress banner
89
+ /^✅/, /^❌/, /^⚠/, // status emojis
90
+ /^── /, // locale separators
91
+ /^ [a-z0-9\-]+\.html\s/, // page progress: " index.html ..."
92
+ /^→ /, // result lines
93
+ /^$/, // blank lines (preserve spacing)
94
+ ];
95
+
96
+ function shouldDropLine(line) {
97
+ for (const rx of ALLOW) if (rx.test(line)) return false;
98
+ return true;
99
+ }
100
+
101
+ // Buffer partial lines so we can decide on line boundaries.
102
+ let buf = "";
103
+
104
+ process.stdout.write = function (chunk, encoding, cb) {
105
+ const s = typeof chunk === "string" ? chunk : chunk?.toString?.(encoding || "utf8") ?? "";
106
+ buf += s;
107
+
108
+ let out = "";
109
+ let nl;
110
+ while ((nl = buf.indexOf("\n")) !== -1) {
111
+ const line = buf.slice(0, nl);
112
+ buf = buf.slice(nl + 1);
113
+ if (!shouldDropLine(line)) out += line + "\n";
114
+ }
115
+
116
+ // A trailing buffer with no newline is a progress write like
117
+ // ` index.html ` from prerender-site.js. Pass it
118
+ // through so the user sees progress before the line completes.
119
+ // We only do this when the buffered fragment passes the page-
120
+ // progress check; otherwise hold until newline.
121
+ if (buf && /^ [a-z0-9\-]+\.html\s/.test(buf)) {
122
+ out += buf;
123
+ buf = "";
124
+ }
125
+
126
+ if (out) origWrite(out, encoding, cb);
127
+ else if (cb) cb();
128
+ return true;
129
+ };
130
+ }
131
+
132
+ // ─── Flag parsing — minimal, no deps ────────────────────────────
133
+
134
+ function parseFlags(argv) {
135
+ const flags = {};
136
+ for (const arg of argv) {
137
+ if (!arg.startsWith("--")) continue;
138
+ const eq = arg.indexOf("=");
139
+ if (eq === -1) flags[arg.slice(2)] = true;
140
+ else flags[arg.slice(2, eq)] = arg.slice(eq + 1);
141
+ }
142
+ return flags;
143
+ }
144
+
145
+ // ─── Config file loader ─────────────────────────────────────────
146
+
147
+ function loadConfigFile(cwd) {
148
+ const p = path.join(cwd, "nodality.config.json");
149
+ if (!fs.existsSync(p)) return {};
150
+ try {
151
+ return JSON.parse(fs.readFileSync(p, "utf8"));
152
+ } catch (e) {
153
+ console.error(`[nodality] Failed to parse ${p}: ${e.message}`);
154
+ process.exit(1);
155
+ }
156
+ }
157
+
158
+ // ─── Page auto-discovery ────────────────────────────────────────
159
+
160
+ /**
161
+ * Pair each upload/<name>.html with its entry script. Supports both
162
+ * common layouts:
163
+ * • Flat: `upload/app.js`, `upload/o-konceptu.js` at uploadDir root
164
+ * • Nested: `upload/pages/index.js`, `upload/pages/products.js`
165
+ *
166
+ * HTMLs with no matching entry are skipped with a warning. Irregular
167
+ * pairs (e.g. `index.html → app.js`) can be declared explicitly via
168
+ * the `pages` key in nodality.config.json, which bypasses discovery.
169
+ */
170
+ function discoverPages(uploadDir) {
171
+ if (!fs.existsSync(uploadDir)) {
172
+ console.error(`[nodality] uploadDir not found: ${uploadDir}`);
173
+ process.exit(1);
174
+ }
175
+ const htmls = fs
176
+ .readdirSync(uploadDir)
177
+ .filter((f) => f.endsWith(".html"))
178
+ .sort();
179
+
180
+ const pages = [];
181
+ for (const html of htmls) {
182
+ const base = path.basename(html, ".html");
183
+ const candidates = [path.join("pages", `${base}.js`), `${base}.js`];
184
+ let entry = null;
185
+ for (const c of candidates) {
186
+ if (fs.existsSync(path.join(uploadDir, c))) {
187
+ entry = c;
188
+ break;
189
+ }
190
+ }
191
+ if (entry) pages.push({ html, entry });
192
+ else console.warn(`[nodality] ⚠ ${html} skipped — no pages/${base}.js or ${base}.js`);
193
+ }
194
+
195
+ if (pages.length === 0) {
196
+ console.error(`[nodality] No HTML/entry pairs found under ${uploadDir}.`);
197
+ process.exit(1);
198
+ }
199
+ return pages;
200
+ }
201
+
202
+ // ─── prerender subcommand ──────────────────────────────────────
203
+
204
+ async function runPrerender(rawArgs) {
205
+ const cwd = process.cwd();
206
+ const flags = parseFlags(rawArgs);
207
+ const fileConfig = loadConfigFile(cwd);
208
+
209
+ // Flag > config file > default.
210
+ const origin = flags.origin || fileConfig.origin || null;
211
+ const uploadDir = path.resolve(cwd, flags.upload || fileConfig.uploadDir || "upload");
212
+ const defaultLocale = flags["default-locale"] || fileConfig.defaultLocale || null;
213
+ const locales =
214
+ (flags.locales && flags.locales.split(",").map((s) => s.trim())) ||
215
+ fileConfig.locales ||
216
+ null;
217
+ const tolerateAsync =
218
+ flags["tolerate-async"] === true ||
219
+ flags["tolerate-async"] === "true" ||
220
+ fileConfig.tolerateAsyncErrors === true;
221
+
222
+ // Quiet by default; --verbose or NODALITY_VERBOSE=1 turns the
223
+ // library's internal chatter back on. Only install the filter once
224
+ // (the multi-locale fanout re-enters this function in the parent
225
+ // process for the no-locales path, but on the child path
226
+ // NODALITY_SSG_LOCALE is set and we still want the filter on).
227
+ const verbose =
228
+ flags.verbose === true ||
229
+ flags.verbose === "true" ||
230
+ process.env.NODALITY_VERBOSE === "1" ||
231
+ fileConfig.verbose === true;
232
+ if (!verbose) installLogFilter();
233
+
234
+ if (!origin) {
235
+ console.error(`[nodality] --origin not given and no "origin" in nodality.config.json.`);
236
+ process.exit(1);
237
+ }
238
+
239
+ if (tolerateAsync) {
240
+ // Some Nodality animation ops schedule setTimeout callbacks that
241
+ // fire AFTER prerender has serialized the page. When those throw
242
+ // (jsdom realm closed, etc.) a Node default-handler would kill
243
+ // the whole process mid-batch. Demote to warnings so the loop
244
+ // keeps going — same pattern the hand-written prerender.mjs
245
+ // files used in sls3-2025/2026.
246
+ process.on("uncaughtException", (e) =>
247
+ console.warn(`⚠ uncaughtException: ${e.message}`),
248
+ );
249
+ process.on("unhandledRejection", (e) =>
250
+ console.warn(`⚠ unhandledRejection: ${e?.message ?? e}`),
251
+ );
252
+ }
253
+
254
+ // Explicit `pages` from config wins over auto-discovery. The
255
+ // discovery rules (pages/<base>.js, <base>.js) can't infer
256
+ // irregular pairs like h7-nodality's `index.html → app.js`; for
257
+ // those projects the user lists pairs in nodality.config.json.
258
+ const pages =
259
+ Array.isArray(fileConfig.pages) && fileConfig.pages.length
260
+ ? fileConfig.pages
261
+ : discoverPages(uploadDir);
262
+
263
+ // Only the PARENT process prints the banner. In multi-locale fanout
264
+ // each locale runs in a child subprocess that re-enters this same
265
+ // script with NODALITY_SSG_LOCALE set; suppressing the banner there
266
+ // keeps output clean (the parent already prints `── cs ──` separators).
267
+ if (!process.env.NODALITY_SSG_LOCALE) {
268
+ console.log(
269
+ `[nodality] Prerender ${pages.length} page(s) @ ${origin}` +
270
+ (defaultLocale ? ` (default: ${defaultLocale})` : " (single-locale, untagged)"),
271
+ );
272
+ }
273
+
274
+ const config = { origin, uploadDir, pages };
275
+ if (defaultLocale) config.defaultLocale = defaultLocale;
276
+ if (locales) config.locales = locales;
277
+
278
+ await prerenderSite(config);
279
+ }
280
+
281
+ // ─── Dispatch ──────────────────────────────────────────────────
282
+
283
+ async function main() {
284
+ // Subprocess-mode shortcut. `prerenderSite` parallelises locales
285
+ // by spawning `process.argv[1]` (this script) as a child with the
286
+ // NODALITY_SSG_LOCALE env var set but NO CLI args. Without this
287
+ // branch the child would hit showUsage() and exit, killing every
288
+ // locale's render. Re-enter the prerender directly when the env
289
+ // var is present.
290
+ if (process.env.NODALITY_SSG_LOCALE !== undefined) {
291
+ await runPrerender([]);
292
+ return;
293
+ }
294
+
295
+ const [command, ...rest] = process.argv.slice(2);
296
+ if (!command || command === "help" || command === "--help" || command === "-h") {
297
+ showUsage();
298
+ } else if (command === "prerender") {
299
+ await runPrerender(rest);
300
+ } else {
301
+ console.error(`[nodality] Unknown command: ${command}`);
302
+ showUsage();
303
+ }
304
+ }
305
+
306
+ main().catch((err) => {
307
+ console.error(`[nodality] ${err?.message ?? err}`);
308
+ process.exit(1);
309
+ });
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/audio.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/base-2.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/base.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/box.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/button.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/cards.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/center.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/circle.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/code.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/custom.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/footer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/free.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/grid.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/group.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/header.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
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.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/label.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/link.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/list.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/nav-bar.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/polygon.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/row.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/spacer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/stack.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/styler.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/svg.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/table.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/text.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/ulist.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/layout/video.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
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.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
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.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
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.158
2
+ * nodality v1.0.162
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.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * nodality v1.0.158
2
+ * nodality v1.0.162
3
3
  * (c) 2026 Filip Vabrousek
4
4
  * License: MIT
5
5
  */
package/package.json CHANGED
@@ -1,13 +1,17 @@
1
1
  {
2
2
  "name": "nodality",
3
- "version": "1.0.158",
3
+ "version": "1.0.162",
4
4
  "description": "A lightweight library for declarative UI elements.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
7
+ "bin": {
8
+ "nodality": "bin/nodality.js"
9
+ },
7
10
  "files": [
8
11
  "lib/",
9
12
  "layout/",
10
- "dist/"
13
+ "dist/",
14
+ "bin/"
11
15
  ],
12
16
  "exports": {
13
17
  ".": {
@@ -17,6 +21,10 @@
17
21
  "./ssg": "./layout/prerender.js",
18
22
  "./ssg-site": "./layout/prerender-site.js"
19
23
  },
24
+ "publishConfig": {
25
+ "access": "public",
26
+ "provenance": true
27
+ },
20
28
  "scripts": {
21
29
  "build": "webpack --config webpack.config.js",
22
30
  "test:jest": "jest",
@@ -33,7 +41,7 @@
33
41
  "license": "MIT",
34
42
  "repository": {
35
43
  "type": "git",
36
- "url": "https://github.com/nodalityjs/nodality"
44
+ "url": "git+https://github.com/nodalityjs/nodality.git"
37
45
  },
38
46
  "author": {
39
47
  "name": "Filip Vabrousek",