nodality 1.0.199 → 1.0.201
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.
- package/dist/animator.cjs.js +1 -1
- package/dist/animator.esm.js +1 -1
- package/dist/audionew.cjs.js +1 -1
- package/dist/audionew.esm.js +1 -1
- package/dist/base.cjs.js +1 -1
- package/dist/base.esm.js +1 -1
- package/dist/beta-desktop-bar.cjs.js +1 -1
- package/dist/beta-desktop-bar.esm.js +1 -1
- package/dist/beta-mobile-bar.cjs.js +1 -1
- package/dist/beta-mobile-bar.esm.js +1 -1
- package/dist/bundle.umd.js +1 -1
- package/dist/button.cjs.js +1 -1
- package/dist/button.esm.js +1 -1
- package/dist/center.cjs.js +1 -1
- package/dist/center.esm.js +1 -1
- package/dist/checkbox.cjs.js +1 -1
- package/dist/checkbox.esm.js +1 -1
- package/dist/code.cjs.js +1 -1
- package/dist/code.esm.js +1 -1
- package/dist/container.cjs.js +1 -1
- package/dist/container.esm.js +1 -1
- package/dist/designer.cjs.js +1 -1
- package/dist/designer.esm.js +1 -1
- package/dist/dropdown.cjs.js +1 -1
- package/dist/dropdown.esm.js +1 -1
- package/dist/element-mapper.cjs.js +1 -1
- package/dist/element-mapper.esm.js +1 -1
- package/dist/finalresult.esm.js +1 -1
- package/dist/flex-card.cjs.js +1 -1
- package/dist/flex-card.esm.js +1 -1
- package/dist/flex-grid.cjs.js +1 -1
- package/dist/flex-grid.esm.js +1 -1
- package/dist/flex-row.cjs.js +1 -1
- package/dist/flex-row.esm.js +1 -1
- package/dist/floating-input.cjs.js +1 -1
- package/dist/floating-input.esm.js +1 -1
- package/dist/free.cjs.js +1 -1
- package/dist/free.esm.js +1 -1
- package/dist/horizontal-scroller.cjs.js +1 -1
- package/dist/horizontal-scroller.esm.js +1 -1
- package/dist/image-picker.cjs.js +1 -1
- package/dist/image-picker.esm.js +1 -1
- package/dist/image.cjs.js +1 -1
- package/dist/image.esm.js +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/link-getter.cjs.js +1 -1
- package/dist/link-getter.esm.js +1 -1
- package/dist/link.cjs.js +1 -1
- package/dist/link.esm.js +1 -1
- package/dist/multiswitcher.cjs.js +1 -1
- package/dist/multiswitcher.esm.js +1 -1
- package/dist/new-nav-bar.cjs.js +1 -1
- package/dist/new-nav-bar.esm.js +1 -1
- package/dist/picker.cjs.js +1 -1
- package/dist/picker.esm.js +1 -1
- package/dist/side-bar.cjs.js +1 -1
- package/dist/side-bar.esm.js +1 -1
- package/dist/side-nav-bar.cjs.js +1 -1
- package/dist/side-nav-bar.esm.js +1 -1
- package/dist/simple-bar.cjs.js +1 -1
- package/dist/simple-bar.esm.js +1 -1
- package/dist/slider-2025.cjs.js +1 -1
- package/dist/slider-2025.esm.js +1 -1
- package/dist/table.cjs.js +1 -1
- package/dist/table.esm.js +1 -1
- package/dist/text-field.cjs.js +1 -1
- package/dist/text-field.esm.js +1 -1
- package/dist/text.cjs.js +1 -1
- package/dist/text.esm.js +1 -1
- package/dist/ulist.cjs.js +1 -1
- package/dist/ulist.esm.js +1 -1
- package/dist/video.cjs.js +1 -1
- package/dist/video.esm.js +1 -1
- package/dist/zoom-card.cjs.js +1 -1
- package/dist/zoom-card.esm.js +1 -1
- package/layout/animator.js +107 -47
- package/layout/audio.js +1 -1
- package/layout/audionew.js +1 -1
- package/layout/base-2.js +1 -1
- package/layout/base.js +15 -11
- package/layout/beta-desktop-bar.js +1 -1
- package/layout/beta-mobile-bar.js +1 -1
- package/layout/box.js +1 -1
- package/layout/button.js +2 -3
- package/layout/cards.js +1 -1
- package/layout/center.js +3 -5
- package/layout/checkbox.js +1 -1
- package/layout/circle.js +1 -1
- package/layout/clean-row.js +1 -1
- package/layout/code.js +1 -1
- package/layout/container.js +2 -3
- package/layout/custom.js +1 -1
- package/layout/div-image.js +1 -1
- package/layout/dropdown-2025.js +1 -1
- package/layout/dropdown.js +1 -1
- package/layout/empty-element.js +1 -1
- package/layout/external-stylesheet.js +1 -1
- package/layout/flex-card.js +1 -1
- package/layout/flex-grid.js +1 -1
- package/layout/flex-row.js +1 -3
- package/layout/footer.js +1 -1
- package/layout/form-components/custom.js +1 -1
- package/layout/form-components/data-list.js +1 -1
- package/layout/form-components/floating-input.js +1 -1
- package/layout/form-components/form-all.js +1 -1
- package/layout/form-components/form.js +1 -1
- package/layout/form-components/image-picker.js +1 -1
- package/layout/form-components/picker.js +1 -1
- package/layout/form-components/radio.js +1 -1
- package/layout/form-components/radiogroup.js +1 -1
- package/layout/form-components/range.js +1 -1
- package/layout/free.js +1 -1
- package/layout/grid-new.js +1 -1
- package/layout/grid-switcher.js +1 -1
- package/layout/grid.js +1 -1
- package/layout/group.js +1 -1
- package/layout/header.js +1 -1
- package/layout/horizontal-scroller.js +1 -1
- package/layout/image-old.js +1 -1
- package/layout/image.js +1 -1
- package/layout/index.js +1 -1
- package/layout/label.js +1 -1
- package/layout/link.js +1 -1
- package/layout/list-OLD.js +1 -1
- package/layout/list.js +1 -1
- package/layout/meta-adder.js +1 -1
- package/layout/modal-2025.js +1 -1
- package/layout/modernwrap.js +1 -1
- package/layout/multiswitcher.js +1 -1
- package/layout/multiswitcherBeta.js +1 -1
- package/layout/nav-bar.js +1 -1
- package/layout/nav-factor/custom-div.js +1 -1
- package/layout/navBar-OLD.js +1 -1
- package/layout/new-flat-adder.js +1 -1
- package/layout/new-nav-bar.js +1 -1
- package/layout/offset-container.js +1 -1
- package/layout/polygon.js +1 -1
- package/layout/prerender-site.js +1 -1
- package/layout/prerender.js +1 -1
- package/layout/progress.js +1 -1
- package/layout/row.js +1 -1
- package/layout/saved-new-nav-bar.js +1 -1
- package/layout/scroll-video.js +1 -1
- package/layout/side-bar.js +1 -1
- package/layout/side-nav-bar.js +2 -3
- package/layout/simple-bar.js +1 -1
- package/layout/slider-2025.js +1 -1
- package/layout/spacer.js +1 -1
- package/layout/stack.js +1 -1
- package/layout/styler.js +1 -1
- package/layout/svg.js +1 -1
- package/layout/switcher.js +1 -1
- package/layout/table.js +1 -1
- package/layout/text-field.js +1 -1
- package/layout/text.js +3 -5
- package/layout/ulist.js +1 -1
- package/layout/video.js +1 -1
- package/layout/without-new.js +1 -1
- package/layout/wrap.js +1 -1
- package/layout/zoom-card.js +1 -1
- package/lib/card-getter.js +1 -1
- package/lib/data.js +1 -1
- package/lib/designer.js +65 -19
- package/lib/element-mapper.js +17 -73
- package/lib/keyframe-animation.js +1 -1
- package/lib/link-getter.js +1 -1
- package/lib/raster-ops.js +20 -2
- package/lib/scroll-video.js +1 -1
- package/lib/seo.js +1 -1
- package/lib/stacker.js +1 -1
- package/lib/theme.js +1 -1
- package/lib/transform-anim.js +1 -1
- package/package.json +1 -1
package/lib/designer.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.201
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -361,18 +361,52 @@ new Text("row.").set({
|
|
|
361
361
|
|
|
362
362
|
|
|
363
363
|
|
|
364
|
+
// Deep copy so the caller's node objects are never written to. add()
|
|
365
|
+
// rewrites entries in place (op replacement, `medium`/`fast` expansion,
|
|
366
|
+
// deletion of keys valued "default"), which used to mutate the array the
|
|
367
|
+
// user passed in — making a nodes array unusable for a second Des, or
|
|
368
|
+
// corrupting it when it came from framework state.
|
|
369
|
+
static cloneNodes(arr) {
|
|
370
|
+
if (!Array.isArray(arr)) return [];
|
|
371
|
+
try {
|
|
372
|
+
if (typeof structuredClone === "function") return structuredClone(arr);
|
|
373
|
+
} catch (e) {
|
|
374
|
+
// Node objects may carry functions (e.g. onTap) which
|
|
375
|
+
// structuredClone rejects; fall through to the manual copy.
|
|
376
|
+
}
|
|
377
|
+
const copy = (v) => {
|
|
378
|
+
if (Array.isArray(v)) return v.map(copy);
|
|
379
|
+
if (v && typeof v === "object") {
|
|
380
|
+
const o = {};
|
|
381
|
+
for (const k in v) o[k] = copy(v[k]);
|
|
382
|
+
return o;
|
|
383
|
+
}
|
|
384
|
+
return v;
|
|
385
|
+
};
|
|
386
|
+
return arr.map(copy);
|
|
387
|
+
}
|
|
388
|
+
|
|
364
389
|
at(opts) {
|
|
365
|
-
|
|
390
|
+
// Keep options/protoOptions in lockstep — add() indexes into
|
|
391
|
+
// protoOptions by the same q, so pushing to only one of them
|
|
392
|
+
// threw on the first .at() used without .nodes().
|
|
393
|
+
if (!Array.isArray(this.options)) this.options = [];
|
|
394
|
+
if (!Array.isArray(this.protoOptions)) this.protoOptions = [];
|
|
395
|
+
const one = Des.cloneNodes([opts])[0];
|
|
396
|
+
this.options.push(one);
|
|
397
|
+
this.protoOptions.push(one);
|
|
366
398
|
return this;
|
|
367
399
|
}
|
|
368
400
|
|
|
369
401
|
nodes(arr) {
|
|
370
|
-
this.options = arr;
|
|
371
|
-
this.protoOptions =
|
|
402
|
+
this.options = Des.cloneNodes(arr);
|
|
403
|
+
this.protoOptions = Des.cloneNodes(arr);
|
|
372
404
|
return this;
|
|
373
405
|
}
|
|
374
406
|
|
|
407
|
+
// Kept in sync with ElementMapper.getElType — see the note there about `p`.
|
|
375
408
|
getElType(type) {
|
|
409
|
+
if (type === "p") return "S6";
|
|
376
410
|
return `S${type.substr(1)}`;
|
|
377
411
|
}
|
|
378
412
|
|
|
@@ -575,7 +609,13 @@ customOptions.forEach(item => {
|
|
|
575
609
|
let color = customOptions[index].color;
|
|
576
610
|
let width = customOptions[index].width;
|
|
577
611
|
|
|
578
|
-
|
|
612
|
+
// Clone per index. This used to assign the SAME
|
|
613
|
+
// replacementObjects[q] object to every node of the
|
|
614
|
+
// same op kind, so two `blast` nodes with different
|
|
615
|
+
// targets/colors collapsed into one — each iteration
|
|
616
|
+
// overwrote the previous one's target and the last
|
|
617
|
+
// write won for all of them.
|
|
618
|
+
let as = Des.cloneNodes([replacementObjects[q]])[0];
|
|
579
619
|
as.target = target;
|
|
580
620
|
|
|
581
621
|
if (range != null) {
|
|
@@ -860,7 +900,6 @@ if (/*q == i*/ true){ // 23:07.20 Nice!!!! 23:04 bef
|
|
|
860
900
|
} else if (obj[key] === "slow") {
|
|
861
901
|
obj[key] = "9s-ease-in-out";
|
|
862
902
|
} else if (obj[key] === "default"){
|
|
863
|
-
alert("PP")
|
|
864
903
|
delete obj[key];
|
|
865
904
|
}
|
|
866
905
|
}*/
|
|
@@ -1015,10 +1054,10 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
|
|
|
1015
1054
|
|
|
1016
1055
|
import {Animator} from "../layout/animator.js";
|
|
1017
1056
|
import {Text} from "../layout/text.js";
|
|
1018
|
-
import {Modal} from "../layout/
|
|
1057
|
+
import {Modal} from "../layout/modal-2025.js";
|
|
1019
1058
|
import {Stack} from "../layout/stack.js";
|
|
1020
1059
|
import {Image} from "../layout/image.js";
|
|
1021
|
-
import {FlexRow} from "../layout/
|
|
1060
|
+
import {FlexRow} from "../layout/flex-row.js";
|
|
1022
1061
|
import {Button} from "../layout/button.js";
|
|
1023
1062
|
import {Spacer} from "../layout/spacer.js";
|
|
1024
1063
|
import {Wrapper} from "../layout/container.js";
|
|
@@ -1253,7 +1292,11 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
|
|
|
1253
1292
|
return this;
|
|
1254
1293
|
}
|
|
1255
1294
|
|
|
1256
|
-
|
|
1295
|
+
// `mount` is the selector every generated element renders into. It used
|
|
1296
|
+
// to be the hard-coded literal "#mount", so set({mount: "#other"}) was
|
|
1297
|
+
// silently ignored and a second Des rendered into the first one's mount.
|
|
1298
|
+
toTextArea(mount) {
|
|
1299
|
+
const target = mount || "#mount";
|
|
1257
1300
|
let code = document.createElement("textarea");
|
|
1258
1301
|
// It is necessary to have it to generate UI
|
|
1259
1302
|
code.style.width = 300;
|
|
@@ -1266,7 +1309,7 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
|
|
|
1266
1309
|
let codea = document.createElement("code");
|
|
1267
1310
|
|
|
1268
1311
|
|
|
1269
|
-
const prepare = this.code.map(c => `${c}.render("
|
|
1312
|
+
const prepare = this.code.map(c => `${c}.render("${target}"); \n \n`);
|
|
1270
1313
|
this.code = prepare;
|
|
1271
1314
|
|
|
1272
1315
|
codea.textContent = this.code;//.replaceAll(",.", ".").replaceAll(",, new", "new").replaceAll(/\[\s*\n*,\s*\n*/g, "["); // replace with your code
|
|
@@ -1275,9 +1318,12 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
|
|
|
1275
1318
|
document.body.appendChild(pre); // append to the body or any other container
|
|
1276
1319
|
document.body.appendChild(code);
|
|
1277
1320
|
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1321
|
+
// Hold on to the nodes this instance created so set() can style them
|
|
1322
|
+
// directly instead of querying the page for the first #elements /
|
|
1323
|
+
// <pre> it finds, which could belong to the user's markup or to
|
|
1324
|
+
// another Des instance.
|
|
1325
|
+
this._codeEl = code;
|
|
1326
|
+
this._preEl = pre;
|
|
1281
1327
|
return this;
|
|
1282
1328
|
}
|
|
1283
1329
|
|
|
@@ -1290,18 +1336,18 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
|
|
|
1290
1336
|
// when run from the CLI — no rendering side effects.
|
|
1291
1337
|
if (typeof globalThis !== "undefined" && globalThis.NODALITY_EMIT === true) {
|
|
1292
1338
|
// Populate this.code without triggering DOM work.
|
|
1293
|
-
const prepare = this.code.map((c) => `${c}.render("#mount")`);
|
|
1339
|
+
const prepare = this.code.map((c) => `${c}.render("${(obj && obj.mount) || "#mount"}")`);
|
|
1294
1340
|
globalThis.__NODALITY_EMITTED__ = prepare;
|
|
1295
1341
|
return this;
|
|
1296
1342
|
}
|
|
1297
1343
|
|
|
1298
|
-
this.toTextArea();
|
|
1344
|
+
this.toTextArea(obj && obj.mount);
|
|
1299
1345
|
|
|
1300
|
-
|
|
1301
|
-
|
|
1346
|
+
this._codeEl.style.display = "none";
|
|
1347
|
+
this._preEl.style.display = "block";
|
|
1302
1348
|
|
|
1303
1349
|
if (obj.elements === false) {
|
|
1304
|
-
|
|
1350
|
+
this._preEl.style.display = "none";
|
|
1305
1351
|
}
|
|
1306
1352
|
|
|
1307
1353
|
if (obj.layout === false) {
|
|
@@ -1312,7 +1358,7 @@ new Slider(texts, null, { tintColor: "#e74c3c", inactiveColor: "#ccc" })
|
|
|
1312
1358
|
}
|
|
1313
1359
|
|
|
1314
1360
|
if (obj.code === false){
|
|
1315
|
-
|
|
1361
|
+
this._preEl.style.display = "none";
|
|
1316
1362
|
}
|
|
1317
1363
|
|
|
1318
1364
|
const layout = {
|
package/lib/element-mapper.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.201
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -55,7 +55,9 @@ import { Form } from "../layout/form-components/form.js";
|
|
|
55
55
|
import { Button } from "../layout/button.js";
|
|
56
56
|
|
|
57
57
|
// LIBRARY HELPERS / ANIMATIONS
|
|
58
|
-
import { Des }
|
|
58
|
+
// NOTE: no `import { Des }` here. It was unused and formed a circular import
|
|
59
|
+
// (designer -> element-mapper -> designer), which ES modules tolerate but which
|
|
60
|
+
// leaves one module partially initialised under some bundlers.
|
|
59
61
|
import { LinkStyler } from "../lib/link-getter.js";
|
|
60
62
|
import { CardGen } from "../lib/card-getter.js";
|
|
61
63
|
import { KeyframeAnim } from "../lib/keyframe-animation.js";
|
|
@@ -379,45 +381,9 @@ animation: {
|
|
|
379
381
|
}
|
|
380
382
|
|
|
381
383
|
|
|
382
|
-
static mapCopya()
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
return `\n
|
|
386
|
-
new Wrapper()
|
|
387
|
-
.set({
|
|
388
|
-
width: "600px",
|
|
389
|
-
height: "300px",
|
|
390
|
-
justifyContent: "center",
|
|
391
|
-
alignItems: "center",
|
|
392
|
-
display: "flex",
|
|
393
|
-
position: "relative",
|
|
394
|
-
})
|
|
395
|
-
.add(
|
|
396
|
-
Array.from({ length: 3 }).map((_, i) => {
|
|
397
|
-
const angle = i * 120;
|
|
398
|
-
return new Text("Hello")
|
|
399
|
-
.set({
|
|
400
|
-
size: "S1",
|
|
401
|
-
color: "green",
|
|
402
|
-
position: "absolute",
|
|
403
|
-
transform: {
|
|
404
|
-
op: {
|
|
405
|
-
name: "transform",
|
|
406
|
-
|
|
407
|
-
static: true,
|
|
408
|
-
keep: true,
|
|
409
|
-
hardCSS: \`translate(-50%, -50%) rotate(\${angle}deg) translate(${radius}px) rotate(\${-angle}deg)\`
|
|
410
|
-
values: [
|
|
411
|
-
\`translate(-50%, -50%) rotate(\${angle}deg) translate(120px) rotate(\${-angle}deg)\`,
|
|
412
|
-
],
|
|
413
|
-
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
});
|
|
417
|
-
})
|
|
418
|
-
)
|
|
419
|
-
`;
|
|
420
|
-
}
|
|
384
|
+
// REMOVED: static mapCopya() — unreachable from mapType() and it
|
|
385
|
+
// referenced an undefined `radius`, so any call was a guaranteed
|
|
386
|
+
// ReferenceError. Kept in git history if the ring layout is wanted back.
|
|
421
387
|
|
|
422
388
|
static button(){
|
|
423
389
|
return new Button("Submit")
|
|
@@ -427,7 +393,7 @@ animation: {
|
|
|
427
393
|
background: "#1abc9c",
|
|
428
394
|
arrpad: {sides: ["all"], value: ".3rem"},
|
|
429
395
|
radius: ".3rem",
|
|
430
|
-
onTap: () => {
|
|
396
|
+
onTap: () => { console.log("[nodality] demo button tapped"); },
|
|
431
397
|
keySet: {key: "border", value: "3px solid green"}
|
|
432
398
|
});
|
|
433
399
|
}
|
|
@@ -465,7 +431,7 @@ animation: {
|
|
|
465
431
|
// alert("PP")
|
|
466
432
|
return new RadioGroup()
|
|
467
433
|
.set({
|
|
468
|
-
items: ["Male", "Female", "
|
|
434
|
+
items: ["Male", "Female", "Other"],
|
|
469
435
|
multiple: true // wrnóng
|
|
470
436
|
});
|
|
471
437
|
}
|
|
@@ -1605,35 +1571,9 @@ const blast = this.filtero("blast", el.id, obj.customOptions);
|
|
|
1605
1571
|
}
|
|
1606
1572
|
|
|
1607
1573
|
|
|
1608
|
-
static mapCDiv(obj)
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
if (rta) {
|
|
1615
|
-
|
|
1616
|
-
let re = el;
|
|
1617
|
-
re["makeResponsiveBehaviour"] = rta.op.hash[0].l;
|
|
1618
|
-
re["index"] = i;
|
|
1619
|
-
|
|
1620
|
-
let childRe = {};
|
|
1621
|
-
childRe["width"] = "200px";
|
|
1622
|
-
childRe["height"] = "100px";
|
|
1623
|
-
|
|
1624
|
-
ela = new Wrapper().set(re)
|
|
1625
|
-
if (rta.op.hash[0].child) {
|
|
1626
|
-
|
|
1627
|
-
childRe["makeResponsiveBehaviour"] = rta.op.hash[0].child.l;
|
|
1628
|
-
|
|
1629
|
-
let child = new Wrapper().set(childRe).add([
|
|
1630
|
-
new Text("Hello")
|
|
1631
|
-
]);
|
|
1632
|
-
|
|
1633
|
-
ela = new Wrapper().set(re).add([child]);
|
|
1634
|
-
}
|
|
1635
|
-
}
|
|
1636
|
-
}
|
|
1574
|
+
// REMOVED: static mapCDiv(obj) — its dispatch in mapType() has been
|
|
1575
|
+
// commented out for a long time and the body referenced undefined
|
|
1576
|
+
// `rta`, `el` and `i`, so wiring it back up would have thrown.
|
|
1637
1577
|
|
|
1638
1578
|
static checkbox(obj){
|
|
1639
1579
|
return new Checkbox().set({
|
|
@@ -1693,7 +1633,7 @@ static form(obj){
|
|
|
1693
1633
|
new RadioGroup()
|
|
1694
1634
|
.set({
|
|
1695
1635
|
name: "gender",
|
|
1696
|
-
items: ["Male", "Female", "
|
|
1636
|
+
items: ["Male", "Female", "Other"],
|
|
1697
1637
|
multiple: false,
|
|
1698
1638
|
tint: "#1abc9c",
|
|
1699
1639
|
font: "Arial",
|
|
@@ -1877,7 +1817,11 @@ return `new AreaSwitcher()
|
|
|
1877
1817
|
}*/
|
|
1878
1818
|
|
|
1879
1819
|
|
|
1820
|
+
// h1..h6 -> S1..S6. `p` has no digit to slice, so this used to produce the
|
|
1821
|
+
// string "S", and fluidCopy() (which only branches on S1..S6) then silently
|
|
1822
|
+
// applied no fluid sizing at all to every paragraph.
|
|
1880
1823
|
static getElType(type) {
|
|
1824
|
+
if (type === "p") return "S6";
|
|
1881
1825
|
return `S${type.substr(1)}`;
|
|
1882
1826
|
}
|
|
1883
1827
|
|
package/lib/link-getter.js
CHANGED
package/lib/raster-ops.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.0.
|
|
2
|
+
* nodality v1.0.201
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -1965,8 +1965,26 @@ function applyRasterPipeline(el, rasterNodes) {
|
|
|
1965
1965
|
// canvasWidth/contentWidth, so the drawn glyphs no longer sit
|
|
1966
1966
|
// where the DOM text does and selection lands on the wrong
|
|
1967
1967
|
// characters.
|
|
1968
|
+
//
|
|
1969
|
+
// The wrapper must also CARRY THE HOST'S OWN LAYOUT. Hardcoding
|
|
1970
|
+
// `display:block` here silently dropped it: a host centring its
|
|
1971
|
+
// child with `align: "center"` (display:flex, flex-direction:
|
|
1972
|
+
// column, align-items:center) handed that child to a block
|
|
1973
|
+
// wrapper, so the child fell back to the left edge of the box.
|
|
1974
|
+
// On a 212px CTA host holding a ~164px pill that reads as ~24px
|
|
1975
|
+
// off centre — visible only in live mode, because in snapshot
|
|
1976
|
+
// mode the children never leave the host.
|
|
1977
|
+
const hostCS = getComputedStyle(el);
|
|
1978
|
+
const hostIsFlex = hostCS.display === "flex" || hostCS.display === "inline-flex";
|
|
1968
1979
|
wrap.style.cssText =
|
|
1969
|
-
`display:block
|
|
1980
|
+
`display:${hostIsFlex ? "flex" : "block"};` +
|
|
1981
|
+
`width:${rect.width}px;height:${rect.height}px;`;
|
|
1982
|
+
if (hostIsFlex) {
|
|
1983
|
+
wrap.style.flexDirection = hostCS.flexDirection;
|
|
1984
|
+
wrap.style.alignItems = hostCS.alignItems;
|
|
1985
|
+
wrap.style.justifyContent = hostCS.justifyContent;
|
|
1986
|
+
wrap.style.gap = hostCS.gap;
|
|
1987
|
+
}
|
|
1970
1988
|
while (el.firstChild) wrap.appendChild(el.firstChild);
|
|
1971
1989
|
canvas.appendChild(wrap);
|
|
1972
1990
|
sourceEl = wrap;
|
package/lib/scroll-video.js
CHANGED
package/lib/seo.js
CHANGED
package/lib/stacker.js
CHANGED
package/lib/theme.js
CHANGED
package/lib/transform-anim.js
CHANGED