nodality 1.3.10 → 1.3.12
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.cjs.js.LICENSE.txt +1 -1
- package/dist/animator.esm.js +1 -1
- package/dist/animator.esm.js.LICENSE.txt +1 -1
- package/dist/audionew.cjs.js +1 -1
- package/dist/audionew.cjs.js.LICENSE.txt +1 -1
- package/dist/audionew.esm.js +1 -1
- package/dist/audionew.esm.js.LICENSE.txt +1 -1
- package/dist/base.cjs.js +1 -1
- package/dist/base.cjs.js.LICENSE.txt +1 -1
- package/dist/base.esm.js +1 -1
- package/dist/base.esm.js.LICENSE.txt +1 -1
- package/dist/beta-desktop-bar.cjs.js +1 -1
- package/dist/beta-desktop-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/beta-desktop-bar.esm.js +1 -1
- package/dist/beta-desktop-bar.esm.js.LICENSE.txt +1 -1
- package/dist/beta-mobile-bar.cjs.js +1 -1
- package/dist/beta-mobile-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/beta-mobile-bar.esm.js +1 -1
- package/dist/beta-mobile-bar.esm.js.LICENSE.txt +1 -1
- package/dist/bundle.umd.js +1 -1
- package/dist/bundle.umd.js.LICENSE.txt +1 -1
- package/dist/button.cjs.js +1 -1
- package/dist/button.cjs.js.LICENSE.txt +1 -1
- package/dist/button.esm.js +1 -1
- package/dist/button.esm.js.LICENSE.txt +1 -1
- package/dist/card-getter.cjs.js.LICENSE.txt +1 -1
- package/dist/card-getter.esm.js.LICENSE.txt +1 -1
- package/dist/center.cjs.js +1 -1
- package/dist/center.cjs.js.LICENSE.txt +1 -1
- package/dist/center.esm.js +1 -1
- package/dist/center.esm.js.LICENSE.txt +1 -1
- package/dist/checkbox.cjs.js +1 -1
- package/dist/checkbox.cjs.js.LICENSE.txt +1 -1
- package/dist/checkbox.esm.js +1 -1
- package/dist/checkbox.esm.js.LICENSE.txt +1 -1
- package/dist/code.cjs.js +1 -1
- package/dist/code.cjs.js.LICENSE.txt +1 -1
- package/dist/code.esm.js +1 -1
- package/dist/code.esm.js.LICENSE.txt +1 -1
- package/dist/container.cjs.js +1 -1
- package/dist/container.cjs.js.LICENSE.txt +1 -1
- package/dist/container.esm.js +1 -1
- package/dist/container.esm.js.LICENSE.txt +1 -1
- package/dist/data-list.cjs.js.LICENSE.txt +1 -1
- package/dist/data-list.esm.js.LICENSE.txt +1 -1
- package/dist/designer.cjs.js +1 -1
- package/dist/designer.cjs.js.LICENSE.txt +1 -1
- package/dist/designer.esm.js +1 -1
- package/dist/designer.esm.js.LICENSE.txt +1 -1
- package/dist/element-mapper.cjs.js +1 -1
- package/dist/element-mapper.cjs.js.LICENSE.txt +1 -1
- package/dist/element-mapper.esm.js +1 -1
- package/dist/element-mapper.esm.js.LICENSE.txt +1 -1
- package/dist/finalresult.esm.js +1 -1
- package/dist/finalresult.esm.js.LICENSE.txt +1 -1
- package/dist/flex-card.cjs.js +1 -1
- package/dist/flex-card.cjs.js.LICENSE.txt +1 -1
- package/dist/flex-card.esm.js +1 -1
- package/dist/flex-card.esm.js.LICENSE.txt +1 -1
- package/dist/flex-grid.cjs.js +1 -1
- package/dist/flex-grid.cjs.js.LICENSE.txt +1 -1
- package/dist/flex-grid.esm.js +1 -1
- package/dist/flex-grid.esm.js.LICENSE.txt +1 -1
- package/dist/flex-row.cjs.js +1 -1
- package/dist/flex-row.cjs.js.LICENSE.txt +1 -1
- package/dist/flex-row.esm.js +1 -1
- package/dist/flex-row.esm.js.LICENSE.txt +1 -1
- package/dist/floating-input.cjs.js +1 -1
- package/dist/floating-input.cjs.js.LICENSE.txt +1 -1
- package/dist/floating-input.esm.js +1 -1
- package/dist/floating-input.esm.js.LICENSE.txt +1 -1
- package/dist/free.cjs.js +1 -1
- package/dist/free.cjs.js.LICENSE.txt +1 -1
- package/dist/free.esm.js +1 -1
- package/dist/free.esm.js.LICENSE.txt +1 -1
- package/dist/horizontal-scroller.cjs.js.LICENSE.txt +1 -1
- package/dist/horizontal-scroller.esm.js.LICENSE.txt +1 -1
- package/dist/image-picker.cjs.js +1 -1
- package/dist/image-picker.cjs.js.LICENSE.txt +1 -1
- package/dist/image-picker.esm.js +1 -1
- package/dist/image-picker.esm.js.LICENSE.txt +1 -1
- package/dist/image.cjs.js +1 -1
- package/dist/image.cjs.js.LICENSE.txt +1 -1
- package/dist/image.esm.js +1 -1
- package/dist/image.esm.js.LICENSE.txt +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.LICENSE.txt +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.LICENSE.txt +1 -1
- package/dist/keyframe-animation.cjs.js.LICENSE.txt +1 -1
- package/dist/keyframe-animation.esm.js.LICENSE.txt +1 -1
- package/dist/link-getter.cjs.js +1 -1
- package/dist/link-getter.cjs.js.LICENSE.txt +1 -1
- package/dist/link-getter.esm.js +1 -1
- package/dist/link-getter.esm.js.LICENSE.txt +1 -1
- package/dist/link.cjs.js +1 -1
- package/dist/link.cjs.js.LICENSE.txt +1 -1
- package/dist/link.esm.js +1 -1
- package/dist/link.esm.js.LICENSE.txt +1 -1
- package/dist/meta-adder.cjs.js +1 -1
- package/dist/meta-adder.cjs.js.LICENSE.txt +1 -1
- package/dist/meta-adder.esm.js +1 -1
- package/dist/meta-adder.esm.js.LICENSE.txt +1 -1
- package/dist/modal-2025.cjs.js +1 -1
- package/dist/modal-2025.cjs.js.LICENSE.txt +1 -1
- package/dist/modal-2025.esm.js +1 -1
- package/dist/modal-2025.esm.js.LICENSE.txt +1 -1
- package/dist/multiswitcher.cjs.js +1 -1
- package/dist/multiswitcher.cjs.js.LICENSE.txt +1 -1
- package/dist/multiswitcher.esm.js +1 -1
- package/dist/multiswitcher.esm.js.LICENSE.txt +1 -1
- package/dist/new-nav-bar.cjs.js +1 -1
- package/dist/new-nav-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/new-nav-bar.esm.js +1 -1
- package/dist/new-nav-bar.esm.js.LICENSE.txt +1 -1
- package/dist/picker.cjs.js +1 -1
- package/dist/picker.cjs.js.LICENSE.txt +1 -1
- package/dist/picker.esm.js +1 -1
- package/dist/picker.esm.js.LICENSE.txt +1 -1
- package/dist/progress.cjs.js +1 -1
- package/dist/progress.cjs.js.LICENSE.txt +1 -1
- package/dist/progress.esm.js +1 -1
- package/dist/progress.esm.js.LICENSE.txt +1 -1
- package/dist/radio.cjs.js +1 -1
- package/dist/radio.cjs.js.LICENSE.txt +1 -1
- package/dist/radio.esm.js +1 -1
- package/dist/radio.esm.js.LICENSE.txt +1 -1
- package/dist/range.cjs.js.LICENSE.txt +1 -1
- package/dist/range.esm.js.LICENSE.txt +1 -1
- package/dist/scroll-video.cjs.js.LICENSE.txt +1 -1
- package/dist/scroll-video.esm.js.LICENSE.txt +1 -1
- package/dist/side-bar.cjs.js +1 -1
- package/dist/side-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/side-bar.esm.js +1 -1
- package/dist/side-bar.esm.js.LICENSE.txt +1 -1
- package/dist/side-nav-bar.cjs.js +1 -1
- package/dist/side-nav-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/side-nav-bar.esm.js +1 -1
- package/dist/side-nav-bar.esm.js.LICENSE.txt +1 -1
- package/dist/simple-bar.cjs.js +1 -1
- package/dist/simple-bar.cjs.js.LICENSE.txt +1 -1
- package/dist/simple-bar.esm.js +1 -1
- package/dist/simple-bar.esm.js.LICENSE.txt +1 -1
- package/dist/slider-2025.cjs.js +1 -1
- package/dist/slider-2025.cjs.js.LICENSE.txt +1 -1
- package/dist/slider-2025.esm.js +1 -1
- package/dist/slider-2025.esm.js.LICENSE.txt +1 -1
- package/dist/spacer.cjs.js +1 -1
- package/dist/spacer.cjs.js.LICENSE.txt +1 -1
- package/dist/spacer.esm.js +1 -1
- package/dist/spacer.esm.js.LICENSE.txt +1 -1
- package/dist/stack.cjs.js +1 -1
- package/dist/stack.cjs.js.LICENSE.txt +1 -1
- package/dist/stack.esm.js +1 -1
- package/dist/stack.esm.js.LICENSE.txt +1 -1
- package/dist/stacker.cjs.js.LICENSE.txt +1 -1
- package/dist/stacker.esm.js.LICENSE.txt +1 -1
- package/dist/table.cjs.js +1 -1
- package/dist/table.cjs.js.LICENSE.txt +1 -1
- package/dist/table.esm.js +1 -1
- package/dist/table.esm.js.LICENSE.txt +1 -1
- package/dist/text-field.cjs.js +1 -1
- package/dist/text-field.cjs.js.LICENSE.txt +1 -1
- package/dist/text-field.esm.js +1 -1
- package/dist/text-field.esm.js.LICENSE.txt +1 -1
- package/dist/text.cjs.js +1 -1
- package/dist/text.cjs.js.LICENSE.txt +1 -1
- package/dist/text.esm.js +1 -1
- package/dist/text.esm.js.LICENSE.txt +1 -1
- package/dist/theme.cjs.js.LICENSE.txt +1 -1
- package/dist/theme.esm.js.LICENSE.txt +1 -1
- package/dist/transform-anim.cjs.js.LICENSE.txt +1 -1
- package/dist/transform-anim.esm.js.LICENSE.txt +1 -1
- package/dist/ulist.cjs.js +1 -1
- package/dist/ulist.cjs.js.LICENSE.txt +1 -1
- package/dist/ulist.esm.js +1 -1
- package/dist/ulist.esm.js.LICENSE.txt +1 -1
- package/dist/video.cjs.js +1 -1
- package/dist/video.cjs.js.LICENSE.txt +1 -1
- package/dist/video.esm.js +1 -1
- package/dist/video.esm.js.LICENSE.txt +1 -1
- package/dist/wrap.cjs.js +1 -1
- package/dist/wrap.cjs.js.LICENSE.txt +1 -1
- package/dist/wrap.esm.js +1 -1
- package/dist/wrap.esm.js.LICENSE.txt +1 -1
- package/dist/zoom-card.cjs.js +1 -1
- package/dist/zoom-card.cjs.js.LICENSE.txt +1 -1
- package/dist/zoom-card.esm.js +1 -1
- package/dist/zoom-card.esm.js.LICENSE.txt +1 -1
- package/layout/animator.js +85 -23
- package/layout/audio.js +21 -1
- package/layout/audionew.js +1 -1
- package/layout/base.js +1 -1
- package/layout/beta-desktop-bar.js +1 -1
- package/layout/beta-mobile-bar.js +1 -1
- package/layout/button.js +4 -2
- package/layout/center.js +1 -1
- package/layout/checkbox.js +1 -1
- package/layout/circle.js +1 -1
- package/layout/code.js +2 -2
- package/layout/container.js +2 -2
- package/layout/dropdown-2025.js +1 -1
- package/layout/flex-card.js +1 -1
- package/layout/flex-grid.js +1 -1
- package/layout/flex-row.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 +6 -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-overlay.js +19 -19
- package/layout/grid-switcher.js +3 -1
- package/layout/grid.js +1 -1
- package/layout/horizontal-scroller.js +1 -1
- package/layout/image.js +2 -2
- package/layout/index.js +1 -1
- package/layout/link.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/morph.js +1 -1
- package/layout/multiswitcher.js +6 -2
- package/layout/nav-bar.js +1 -1
- package/layout/nav-factor/custom-div.js +1 -1
- package/layout/new-nav-bar.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/scroll-video.js +1 -1
- package/layout/side-bar.js +1 -1
- package/layout/side-nav-bar.js +6 -1
- package/layout/simple-bar.js +1 -1
- package/layout/slider-2025.js +1 -1
- package/layout/spacer.js +1 -1
- package/layout/stack.js +5 -2
- 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 +1 -1
- package/layout/ulist.js +1 -1
- package/layout/video.js +22 -22
- package/layout/wrap.js +1 -1
- package/layout/zoom-card.js +1 -1
- package/lib/agent-surface.js +1 -1
- package/lib/card-getter.js +1 -1
- package/lib/check-page.js +1 -1
- package/lib/codegen.js +1 -1
- package/lib/data.js +1 -1
- package/lib/designer.js +1 -1
- package/lib/element-mapper.js +103 -15
- package/lib/element-params.generated.js +13 -2
- package/lib/grid-geometry.js +1 -1
- package/lib/keyframe-animation.js +1 -1
- package/lib/link-getter.js +1 -1
- package/lib/morph-node.js +1 -1
- package/lib/normalize-spec.js +1 -1
- package/lib/parse-html.js +1 -1
- package/lib/raster-inspect.js +1 -1
- package/lib/raster-ops.js +1 -1
- package/lib/raster-presets.js +1 -1
- package/lib/resolve-refs.js +1 -1
- package/lib/scroll-video.js +1 -1
- package/lib/seo.js +1 -1
- package/lib/stacker.js +1 -1
- package/lib/suggest.js +1 -1
- package/lib/theme.js +1 -1
- package/lib/transform-anim.js +1 -1
- package/lib/transition.js +1 -1
- package/lib/validate-nodes.js +146 -4
- package/lib/webmcp-adapter.js +1 -1
- package/package.json +1 -1
- package/schema.json +1391 -2263
- package/scripts/generate-schema.mjs +135 -15
- package/skills/nodality/SKILL.md +15 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.3.
|
|
2
|
+
* nodality v1.3.12
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -97,6 +97,11 @@ class RadioGroup /*extends Animator*/ {
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
this.el = wrap;
|
|
100
|
+
// RadioGroup is not an Animator, so the base class that applies an
|
|
101
|
+
// element's id after set() never sees it. It applies its own.
|
|
102
|
+
if (objects && objects.id != null && objects.id !== "") {
|
|
103
|
+
this.el.setAttribute("id", String(objects.id));
|
|
104
|
+
}
|
|
100
105
|
|
|
101
106
|
this.responsive();
|
|
102
107
|
return this;
|
package/layout/free.js
CHANGED
package/layout/grid-overlay.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.3.
|
|
2
|
+
* nodality v1.3.12
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -93,39 +93,39 @@ class GridOverlay extends Animator {
|
|
|
93
93
|
// or a destructure here would hide them from `get_schema` and make the
|
|
94
94
|
// validator reject valid specs.
|
|
95
95
|
this.config = {
|
|
96
|
-
//@ gridOverlay.columns: Columns, counted as cells (N cells draw N+1 lines). 0 draws no vertical lines. Default 4. Named `columns`, not `cols`: the library's shared `cols` means grid-template-columns verbatim.
|
|
96
|
+
//@ gridOverlay.columns {count}: Columns, counted as cells (N cells draw N+1 lines). 0 draws no vertical lines. Default 4. Named `columns`, not `cols`: the library's shared `cols` means grid-template-columns verbatim.
|
|
97
97
|
columns: obj.columns ?? DEFAULTS.columns,
|
|
98
|
-
//@ gridOverlay.rows: Rows across the overlay's height, counted as cells. 0 draws no horizontal lines. Default 2.
|
|
98
|
+
//@ gridOverlay.rows {count}: Rows across the overlay's height, counted as cells. 0 draws no horizontal lines. Default 2.
|
|
99
99
|
rows: obj.rows ?? DEFAULTS.rows,
|
|
100
|
-
//@ gridOverlay.inset: Distance of the outermost lines from the edge in px. A number, or {x, y}. Default 16.
|
|
100
|
+
//@ gridOverlay.inset {px-number}: Distance of the outermost lines from the edge in px. A number, or {x, y}. Default 16.
|
|
101
101
|
inset: obj.inset ?? DEFAULTS.inset,
|
|
102
|
-
//@ gridOverlay.color: Colour of lines, marks and readouts (drawn with currentColor). Falls back to the Theme text colour.
|
|
102
|
+
//@ gridOverlay.color {color}: Colour of lines, marks and readouts (drawn with currentColor). Falls back to the Theme text colour.
|
|
103
103
|
color: obj.color,
|
|
104
|
-
//@ gridOverlay.lineWidth: Stroke width of the grid lines in px. Default 1.
|
|
104
|
+
//@ gridOverlay.lineWidth {px-number}: Stroke width of the grid lines in px. Default 1.
|
|
105
105
|
lineWidth: obj.lineWidth ?? DEFAULTS.lineWidth,
|
|
106
|
-
//@ gridOverlay.lineOpacity: Opacity of the lines only; marks and readouts stay opaque. 0–1, default 0.35.
|
|
106
|
+
//@ gridOverlay.lineOpacity {ratio}: Opacity of the lines only; marks and readouts stay opaque. 0–1, default 0.35.
|
|
107
107
|
lineOpacity: obj.lineOpacity ?? DEFAULTS.lineOpacity,
|
|
108
|
-
//@ gridOverlay.marks: Registration mark at each intersection: "square" (default), "cross" or "none".
|
|
108
|
+
//@ gridOverlay.marks {enum(square|cross|none)}: Registration mark at each intersection: "square" (default), "cross" or "none".
|
|
109
109
|
marks: obj.marks ?? DEFAULTS.marks,
|
|
110
|
-
//@ gridOverlay.markSize: Size of each registration mark in px. Default 8.
|
|
110
|
+
//@ gridOverlay.markSize {px-number}: Size of each registration mark in px. Default 8.
|
|
111
111
|
markSize: obj.markSize ?? DEFAULTS.markSize,
|
|
112
|
-
//@ gridOverlay.position: "fixed" (default) pins the grid to the viewport; "absolute" fills the nearest positioned ancestor.
|
|
112
|
+
//@ gridOverlay.position {enum(fixed|absolute)}: "fixed" (default) pins the grid to the viewport; "absolute" fills the nearest positioned ancestor.
|
|
113
113
|
position: obj.position ?? DEFAULTS.position,
|
|
114
|
-
//@ gridOverlay.zIndex: Stacking order of the overlay. Default 2 — keep navigation above it.
|
|
114
|
+
//@ gridOverlay.zIndex {count}: Stacking order of the overlay. Default 2 — keep navigation above it.
|
|
115
115
|
zIndex: obj.zIndex ?? DEFAULTS.zIndex,
|
|
116
|
-
//@ gridOverlay.font: Font family of the readouts. Default a monospace stack.
|
|
116
|
+
//@ gridOverlay.font {text}: Font family of the readouts. Default a monospace stack.
|
|
117
117
|
font: obj.font ?? DEFAULTS.font,
|
|
118
|
-
//@ gridOverlay.fontSize: Readout font size in px. Default 11.
|
|
118
|
+
//@ gridOverlay.fontSize {px-number}: Readout font size in px. Default 11.
|
|
119
119
|
fontSize: obj.fontSize ?? DEFAULTS.fontSize,
|
|
120
|
-
//@ gridOverlay.letterSpacing: Readout letter spacing, any CSS length. Default "0.04em".
|
|
120
|
+
//@ gridOverlay.letterSpacing {text}: Readout letter spacing, any CSS length. Default "0.04em".
|
|
121
121
|
letterSpacing: obj.letterSpacing ?? DEFAULTS.letterSpacing,
|
|
122
|
-
//@ gridOverlay.uppercase: Uppercase the readout text. Default true.
|
|
122
|
+
//@ gridOverlay.uppercase {bool}: Uppercase the readout text. Default true.
|
|
123
123
|
uppercase: obj.uppercase ?? DEFAULTS.uppercase,
|
|
124
|
-
//@ gridOverlay.breakpoint: Viewport width in px below which `mobile` applies. Default 768.
|
|
124
|
+
//@ gridOverlay.breakpoint {px-number}: Viewport width in px below which `mobile` applies. Default 768.
|
|
125
125
|
breakpoint: obj.breakpoint ?? DEFAULTS.breakpoint,
|
|
126
|
-
//@ gridOverlay.mobile: Options that replace their desktop values below `breakpoint`, e.g. {columns: 1, rows: 4}.
|
|
126
|
+
//@ gridOverlay.mobile {object}: Options that replace their desktop values below `breakpoint`, e.g. {columns: 1, rows: 4}.
|
|
127
127
|
mobile: obj.mobile,
|
|
128
|
-
//@ gridOverlay.readouts: Labels beside intersections: [{id, col, row, text, anchor}]. col/row index lines from 0; anchor "br" (default), "bl", "tr" or "tl", flipped automatically when the label would fall outside. Decorative — say the same thing in real page text.
|
|
128
|
+
//@ gridOverlay.readouts {array}: Labels beside intersections: [{id, col, row, text, anchor}]. col/row index lines from 0; anchor "br" (default), "bl", "tr" or "tl", flipped automatically when the label would fall outside. Decorative — say the same thing in real page text.
|
|
129
129
|
readouts: obj.readouts ?? DEFAULTS.readouts,
|
|
130
130
|
};
|
|
131
131
|
|
|
@@ -138,7 +138,7 @@ class GridOverlay extends Animator {
|
|
|
138
138
|
this._watchSize();
|
|
139
139
|
this.draw();
|
|
140
140
|
|
|
141
|
-
//@ gridOverlay.raster: Raster op nodes for the overlay, e.g. an offset driven by hover to bend the lines near the cursor.
|
|
141
|
+
//@ gridOverlay.raster {nodes}: Raster op nodes for the overlay, e.g. an offset driven by hover to bend the lines near the cursor.
|
|
142
142
|
obj.raster && this.rasterize(obj.raster);
|
|
143
143
|
return this;
|
|
144
144
|
}
|
package/layout/grid-switcher.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.3.
|
|
2
|
+
* nodality v1.3.12
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -18,6 +18,8 @@ class AreaSwitcher extends Animator{
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
set(obj){
|
|
21
|
+
// The node is `gridContainer`, not `res`, so the id is applied here.
|
|
22
|
+
if (obj && obj.id != null && obj.id !== "") this.gridContainer.setAttribute("id", String(obj.id));
|
|
21
23
|
obj.gap && (this.gridContainer.style.gap = obj.gap);
|
|
22
24
|
obj.height && (this.gridContainer.style.height = obj.height);
|
|
23
25
|
obj.width && (this.gridContainer.style.width = obj.width);
|
package/layout/grid.js
CHANGED
package/layout/image.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.3.
|
|
2
|
+
* nodality v1.3.12
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -154,7 +154,7 @@ let obj = options;
|
|
|
154
154
|
options.index && (this.index = options.index);
|
|
155
155
|
options.index && (stra += `\n index: "${options.index}",`);
|
|
156
156
|
|
|
157
|
-
options.resprop && this.resprop(options.resprop);
|
|
157
|
+
options.resprop && this.resprop(options.resprop, options);
|
|
158
158
|
|
|
159
159
|
if (options.centerSelf){
|
|
160
160
|
this.res.style.marginRight = "auto";
|
package/layout/index.js
CHANGED
package/layout/link.js
CHANGED
package/layout/list.js
CHANGED
package/layout/meta-adder.js
CHANGED
package/layout/modal-2025.js
CHANGED
package/layout/morph.js
CHANGED
package/layout/multiswitcher.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.3.
|
|
2
|
+
* nodality v1.3.12
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -57,7 +57,11 @@ str += `{ at: "${this.options.breakpoints[i].at}", view: ${this.options.breakpoi
|
|
|
57
57
|
|
|
58
58
|
// console.log(str);
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
// The id is applied in render(), but only if the generated code carries
|
|
61
|
+
// it — and this used to leave it out, so every nav, sideNav and
|
|
62
|
+
// multiswitcher rendered without the id its element declared.
|
|
63
|
+
const idLine = this._id ? `\n id: ${JSON.stringify(String(this._id))},` : "";
|
|
64
|
+
return [`new Switcher().set({${idLine}
|
|
61
65
|
breakpoints: [
|
|
62
66
|
${str}
|
|
63
67
|
]
|
package/layout/nav-bar.js
CHANGED
package/layout/new-nav-bar.js
CHANGED
package/layout/polygon.js
CHANGED
package/layout/prerender-site.js
CHANGED
package/layout/prerender.js
CHANGED
package/layout/progress.js
CHANGED
package/layout/row.js
CHANGED
package/layout/scroll-video.js
CHANGED
package/layout/side-bar.js
CHANGED
package/layout/side-nav-bar.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.3.
|
|
2
|
+
* nodality v1.3.12
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -16,6 +16,11 @@ class SideNav extends Animator {
|
|
|
16
16
|
this.setTags(this.obj.tags);
|
|
17
17
|
this.animate = this.obj.animate !== undefined ? this.obj.animate : true; // could be never false
|
|
18
18
|
this.res = this.createSideNav(obj);
|
|
19
|
+
// SideNav is configured through setup(), not set(), so the base
|
|
20
|
+
// class that applies an element's id after set() never runs here.
|
|
21
|
+
if (obj && obj.id != null && obj.id !== "" && this.res && this.res.setAttribute) {
|
|
22
|
+
this.res.setAttribute("id", String(obj.id));
|
|
23
|
+
}
|
|
19
24
|
this.res.style.position = "relative";
|
|
20
25
|
this.res.style.zIndex = 3;
|
|
21
26
|
this.closed = true; // Set to true initially, so it's closed by default
|
package/layout/simple-bar.js
CHANGED
package/layout/slider-2025.js
CHANGED
package/layout/spacer.js
CHANGED
package/layout/stack.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.3.
|
|
2
|
+
* nodality v1.3.12
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -30,6 +30,7 @@ class Stack extends Animator {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
set(obj){
|
|
33
|
+
this.options = obj || {};
|
|
33
34
|
this.setup();
|
|
34
35
|
obj.height && (this.res.style.height = obj.height);
|
|
35
36
|
obj.sticky && this.sticky();
|
|
@@ -57,7 +58,9 @@ class Stack extends Animator {
|
|
|
57
58
|
|
|
58
59
|
toCode() {
|
|
59
60
|
// Initialize the code string with the Stack setup
|
|
60
|
-
|
|
61
|
+
// Was a hardcoded `set({})`, which dropped the element's id.
|
|
62
|
+
const id = this.options && this.options.id;
|
|
63
|
+
let code = `new Stack().set(${id ? `{ id: ${JSON.stringify(String(id))} }` : "{}"})`;
|
|
61
64
|
|
|
62
65
|
// Add child elements
|
|
63
66
|
if (this.children.length > 0) {
|
package/layout/svg.js
CHANGED
package/layout/switcher.js
CHANGED
package/layout/table.js
CHANGED
package/layout/text-field.js
CHANGED
package/layout/text.js
CHANGED
package/layout/ulist.js
CHANGED
package/layout/video.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* nodality v1.3.
|
|
2
|
+
* nodality v1.3.12
|
|
3
3
|
* (c) 2026 Filip Vabrousek
|
|
4
4
|
* License: MIT
|
|
5
5
|
*/
|
|
@@ -74,7 +74,7 @@ class Video extends Animator {
|
|
|
74
74
|
this.options = obj;
|
|
75
75
|
const v = this.res;
|
|
76
76
|
|
|
77
|
-
//@ video.sources: Several encodings of the same clip: [{url, type}] or plain url strings. The browser picks the first it can play, so order best-first (AV1, then HEVC, then H.264). `type` is inferred from the extension when omitted.
|
|
77
|
+
//@ video.sources {array}: Several encodings of the same clip: [{url, type}] or plain url strings. The browser picks the first it can play, so order best-first (AV1, then HEVC, then H.264). `type` is inferred from the extension when omitted.
|
|
78
78
|
if (Array.isArray(obj.sources) && obj.sources.length) {
|
|
79
79
|
// A `src` attribute wins over <source> children, so it has to go.
|
|
80
80
|
v.removeAttribute("src");
|
|
@@ -93,27 +93,27 @@ class Video extends Animator {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
//@ video.poster: Image shown before the first frame decodes. Give one on any autoplaying clip: it is what holds the layout still and what reduced-motion visitors see instead of the video.
|
|
96
|
+
//@ video.poster {url}: Image shown before the first frame decodes. Give one on any autoplaying clip: it is what holds the layout still and what reduced-motion visitors see instead of the video.
|
|
97
97
|
obj.poster && v.setAttribute("poster", obj.poster);
|
|
98
98
|
|
|
99
|
-
//@ video.preload: "none", "metadata" (a good default for a loop) or "auto".
|
|
99
|
+
//@ video.preload {enum(none|metadata|auto)}: "none", "metadata" (a good default for a loop) or "auto".
|
|
100
100
|
obj.preload && v.setAttribute("preload", obj.preload);
|
|
101
101
|
|
|
102
|
-
//@ video.controls: Show the browser's playback controls. Default true — pass false for an ambient loop.
|
|
102
|
+
//@ video.controls {bool}: Show the browser's playback controls. Default true — pass false for an ambient loop.
|
|
103
103
|
if (obj.controls === false) v.removeAttribute("controls");
|
|
104
104
|
else if (obj.controls === true) v.setAttribute("controls", "controls");
|
|
105
105
|
|
|
106
|
-
//@ video.loop: Restart when the clip ends.
|
|
106
|
+
//@ video.loop {bool}: Restart when the clip ends.
|
|
107
107
|
obj.loop && (v.loop = true, v.setAttribute("loop", "loop"));
|
|
108
108
|
|
|
109
|
-
//@ video.playsinline: Play in place on iPhone instead of taking over the screen. Implied by `autoplay`; there is no reason to refuse it on a background loop.
|
|
109
|
+
//@ video.playsinline {bool}: Play in place on iPhone instead of taking over the screen. Implied by `autoplay`; there is no reason to refuse it on a background loop.
|
|
110
110
|
const playsinline = obj.playsinline ?? obj.autoplay;
|
|
111
111
|
if (playsinline) {
|
|
112
112
|
v.setAttribute("playsinline", "");
|
|
113
113
|
v.setAttribute("webkit-playsinline", "");
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
//@ video.muted: Mute the audio track. Forced on by `autoplay`, because browsers block an unmuted autoplay; pass false only if you mean to accept that.
|
|
116
|
+
//@ video.muted {bool}: Mute the audio track. Forced on by `autoplay`, because browsers block an unmuted autoplay; pass false only if you mean to accept that.
|
|
117
117
|
const muted = obj.muted ?? (obj.autoplay ? true : undefined);
|
|
118
118
|
if (muted === true) {
|
|
119
119
|
v.muted = true;
|
|
@@ -123,39 +123,39 @@ class Video extends Animator {
|
|
|
123
123
|
v.removeAttribute("muted");
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
//@ video.autoplay: Start on its own. Implies muted and playsinline, pauses off screen and in a hidden tab, and is cancelled by prefers-reduced-motion (the poster stays).
|
|
127
|
-
//@ video.lazy: Only play while on screen. On by default whenever `autoplay` is set; pass false to keep an autoplaying clip running off screen.
|
|
126
|
+
//@ video.autoplay {bool}: Start on its own. Implies muted and playsinline, pauses off screen and in a hidden tab, and is cancelled by prefers-reduced-motion (the poster stays).
|
|
127
|
+
//@ video.lazy {bool}: Only play while on screen. On by default whenever `autoplay` is set; pass false to keep an autoplaying clip running off screen.
|
|
128
128
|
if (obj.autoplay) this._autoplay(obj.lazy !== false);
|
|
129
129
|
|
|
130
|
-
//@ video.objectFit: How the frame fills the element box: "cover", "contain", "fill", "none".
|
|
130
|
+
//@ video.objectFit {enum(cover|contain|fill|none|scale-down)}: How the frame fills the element box: "cover", "contain", "fill", "none".
|
|
131
131
|
obj.objectFit && (v.style.objectFit = obj.objectFit);
|
|
132
132
|
|
|
133
|
-
//@ video.aspectRatio: Box proportion held before the video loads, e.g. "16 / 9". Prevents the page shifting when the first frame arrives.
|
|
133
|
+
//@ video.aspectRatio {css-aspect-ratio}: Box proportion held before the video loads, e.g. "16 / 9". Prevents the page shifting when the first frame arrives.
|
|
134
134
|
obj.aspectRatio && (v.style.aspectRatio = obj.aspectRatio);
|
|
135
135
|
|
|
136
|
-
//@ video.id: DOM id. Also what a node's `target` names, so a clip carrying a raster op needs one.
|
|
136
|
+
//@ video.id {text}: DOM id. Also what a node's `target` names, so a clip carrying a raster op needs one.
|
|
137
137
|
obj.id && v.setAttribute("id", obj.id);
|
|
138
138
|
|
|
139
|
-
//@ video.label: Accessible name, for a clip that carries meaning.
|
|
139
|
+
//@ video.label {text}: Accessible name, for a clip that carries meaning.
|
|
140
140
|
obj.label && v.setAttribute("aria-label", obj.label);
|
|
141
141
|
|
|
142
|
-
//@ video.decorative: Hide from assistive technology. For an ambient loop that repeats what the page already says in text.
|
|
142
|
+
//@ video.decorative {bool}: Hide from assistive technology. For an ambient loop that repeats what the page already says in text.
|
|
143
143
|
if (obj.decorative) v.setAttribute("aria-hidden", "true");
|
|
144
144
|
|
|
145
|
-
//@ video.background: CSS background behind the frame — visible while the poster loads.
|
|
145
|
+
//@ video.background {color}: CSS background behind the frame — visible while the poster loads.
|
|
146
146
|
obj.background && (v.style.background = obj.background);
|
|
147
|
-
//@ video.height: CSS height of the element.
|
|
147
|
+
//@ video.height {css-length}: CSS height of the element.
|
|
148
148
|
obj.height && (v.style.height = obj.height);
|
|
149
|
-
//@ video.maxWidth: CSS max-width of the element.
|
|
149
|
+
//@ video.maxWidth {css-length}: CSS max-width of the element.
|
|
150
150
|
obj.maxWidth && (v.style.maxWidth = obj.maxWidth);
|
|
151
|
-
//@ video.radius: Corner radius. A CSS length; a bare number is read as pixels.
|
|
151
|
+
//@ video.radius {px-or-length}: Corner radius. A CSS length; a bare number is read as pixels.
|
|
152
152
|
obj.radius && (v.style.borderRadius = typeof obj.radius === "number" ? `${obj.radius}px` : obj.radius);
|
|
153
|
-
//@ video.width: CSS width of the element.
|
|
153
|
+
//@ video.width {css-length}: CSS width of the element.
|
|
154
154
|
obj.width && (v.style.width = `${obj.width}`);
|
|
155
|
-
//@ video.opacity: 0–1.
|
|
155
|
+
//@ video.opacity {ratio}: 0–1.
|
|
156
156
|
obj.opacity && (v.style.opacity = obj.opacity);
|
|
157
157
|
|
|
158
|
-
//@ video.raster: Raster op nodes to run over this element.
|
|
158
|
+
//@ video.raster {nodes}: Raster op nodes to run over this element.
|
|
159
159
|
obj.raster && this.rasterize(obj.raster);
|
|
160
160
|
|
|
161
161
|
return this;
|
package/layout/wrap.js
CHANGED
package/layout/zoom-card.js
CHANGED
package/lib/agent-surface.js
CHANGED
package/lib/card-getter.js
CHANGED
package/lib/check-page.js
CHANGED
package/lib/codegen.js
CHANGED
package/lib/data.js
CHANGED
package/lib/designer.js
CHANGED