nodality 1.2.11 → 1.3.0
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/bin/mcp-server.mjs +45 -0
- 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 +3 -2
- 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.LICENSE.txt +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 +15 -2
- package/layout/audio.js +1 -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 +1 -1
- package/layout/center.js +1 -1
- package/layout/checkbox.js +1 -1
- package/layout/circle.js +1 -1
- package/layout/code.js +1 -1
- package/layout/container.js +1 -1
- package/layout/dropdown-2025.js +10 -3
- 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 +14 -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 +5 -3
- 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-switcher.js +1 -1
- package/layout/grid.js +1 -1
- package/layout/horizontal-scroller.js +1 -1
- package/layout/image.js +15 -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 +1 -1
- 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 +11 -3
- package/layout/side-nav-bar.js +16 -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/svg.js +1 -1
- package/layout/switcher.js +1 -1
- package/layout/table.js +1 -1
- package/layout/text-field.js +16 -1
- package/layout/text.js +28 -1
- package/layout/ulist.js +1 -1
- package/layout/video.js +1 -1
- 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 +239 -0
- package/lib/codegen.js +1 -1
- package/lib/data.js +1 -1
- package/lib/designer.js +64 -2
- package/lib/element-mapper.js +113 -23
- package/lib/element-params.generated.js +2 -2
- package/lib/keyframe-animation.js +1 -1
- package/lib/link-getter.js +1 -1
- package/lib/morph-node.js +8 -1
- package/lib/normalize-spec.js +134 -0
- 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 +121 -0
- 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 +60 -3
- package/lib/webmcp-adapter.js +1 -1
- package/package.json +3 -1
- package/schema.json +211 -12
- package/skills/nodality/SKILL.md +50 -0
package/schema.json
CHANGED
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
{
|
|
15
15
|
"name": "align"
|
|
16
16
|
},
|
|
17
|
+
{
|
|
18
|
+
"name": "alt",
|
|
19
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
20
|
+
},
|
|
17
21
|
{
|
|
18
22
|
"name": "animation"
|
|
19
23
|
},
|
|
@@ -161,6 +165,10 @@
|
|
|
161
165
|
{
|
|
162
166
|
"name": "stroke"
|
|
163
167
|
},
|
|
168
|
+
{
|
|
169
|
+
"name": "tag",
|
|
170
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
171
|
+
},
|
|
164
172
|
{
|
|
165
173
|
"name": "text"
|
|
166
174
|
},
|
|
@@ -202,6 +210,10 @@
|
|
|
202
210
|
{
|
|
203
211
|
"name": "align"
|
|
204
212
|
},
|
|
213
|
+
{
|
|
214
|
+
"name": "alt",
|
|
215
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
216
|
+
},
|
|
205
217
|
{
|
|
206
218
|
"name": "animation"
|
|
207
219
|
},
|
|
@@ -349,6 +361,10 @@
|
|
|
349
361
|
{
|
|
350
362
|
"name": "stroke"
|
|
351
363
|
},
|
|
364
|
+
{
|
|
365
|
+
"name": "tag",
|
|
366
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
367
|
+
},
|
|
352
368
|
{
|
|
353
369
|
"name": "text"
|
|
354
370
|
},
|
|
@@ -390,6 +406,10 @@
|
|
|
390
406
|
{
|
|
391
407
|
"name": "align"
|
|
392
408
|
},
|
|
409
|
+
{
|
|
410
|
+
"name": "alt",
|
|
411
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
412
|
+
},
|
|
393
413
|
{
|
|
394
414
|
"name": "animation"
|
|
395
415
|
},
|
|
@@ -537,6 +557,10 @@
|
|
|
537
557
|
{
|
|
538
558
|
"name": "stroke"
|
|
539
559
|
},
|
|
560
|
+
{
|
|
561
|
+
"name": "tag",
|
|
562
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
563
|
+
},
|
|
540
564
|
{
|
|
541
565
|
"name": "text"
|
|
542
566
|
},
|
|
@@ -578,6 +602,10 @@
|
|
|
578
602
|
{
|
|
579
603
|
"name": "align"
|
|
580
604
|
},
|
|
605
|
+
{
|
|
606
|
+
"name": "alt",
|
|
607
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
608
|
+
},
|
|
581
609
|
{
|
|
582
610
|
"name": "animation"
|
|
583
611
|
},
|
|
@@ -725,6 +753,10 @@
|
|
|
725
753
|
{
|
|
726
754
|
"name": "stroke"
|
|
727
755
|
},
|
|
756
|
+
{
|
|
757
|
+
"name": "tag",
|
|
758
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
759
|
+
},
|
|
728
760
|
{
|
|
729
761
|
"name": "text"
|
|
730
762
|
},
|
|
@@ -766,6 +798,10 @@
|
|
|
766
798
|
{
|
|
767
799
|
"name": "align"
|
|
768
800
|
},
|
|
801
|
+
{
|
|
802
|
+
"name": "alt",
|
|
803
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
804
|
+
},
|
|
769
805
|
{
|
|
770
806
|
"name": "animation"
|
|
771
807
|
},
|
|
@@ -913,6 +949,10 @@
|
|
|
913
949
|
{
|
|
914
950
|
"name": "stroke"
|
|
915
951
|
},
|
|
952
|
+
{
|
|
953
|
+
"name": "tag",
|
|
954
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
955
|
+
},
|
|
916
956
|
{
|
|
917
957
|
"name": "text"
|
|
918
958
|
},
|
|
@@ -954,6 +994,10 @@
|
|
|
954
994
|
{
|
|
955
995
|
"name": "align"
|
|
956
996
|
},
|
|
997
|
+
{
|
|
998
|
+
"name": "alt",
|
|
999
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
1000
|
+
},
|
|
957
1001
|
{
|
|
958
1002
|
"name": "animation"
|
|
959
1003
|
},
|
|
@@ -1101,6 +1145,10 @@
|
|
|
1101
1145
|
{
|
|
1102
1146
|
"name": "stroke"
|
|
1103
1147
|
},
|
|
1148
|
+
{
|
|
1149
|
+
"name": "tag",
|
|
1150
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
1151
|
+
},
|
|
1104
1152
|
{
|
|
1105
1153
|
"name": "text"
|
|
1106
1154
|
},
|
|
@@ -1142,6 +1190,10 @@
|
|
|
1142
1190
|
{
|
|
1143
1191
|
"name": "align"
|
|
1144
1192
|
},
|
|
1193
|
+
{
|
|
1194
|
+
"name": "alt",
|
|
1195
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
1196
|
+
},
|
|
1145
1197
|
{
|
|
1146
1198
|
"name": "animation"
|
|
1147
1199
|
},
|
|
@@ -1289,6 +1341,10 @@
|
|
|
1289
1341
|
{
|
|
1290
1342
|
"name": "stroke"
|
|
1291
1343
|
},
|
|
1344
|
+
{
|
|
1345
|
+
"name": "tag",
|
|
1346
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
1347
|
+
},
|
|
1292
1348
|
{
|
|
1293
1349
|
"name": "text"
|
|
1294
1350
|
},
|
|
@@ -1582,6 +1638,10 @@
|
|
|
1582
1638
|
"name": "alignIts",
|
|
1583
1639
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
1584
1640
|
},
|
|
1641
|
+
{
|
|
1642
|
+
"name": "alt",
|
|
1643
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
1644
|
+
},
|
|
1585
1645
|
{
|
|
1586
1646
|
"name": "animation"
|
|
1587
1647
|
},
|
|
@@ -1778,7 +1838,8 @@
|
|
|
1778
1838
|
"name": "kind"
|
|
1779
1839
|
},
|
|
1780
1840
|
{
|
|
1781
|
-
"name": "label"
|
|
1841
|
+
"name": "label",
|
|
1842
|
+
"description": "Accessible name for the field."
|
|
1782
1843
|
},
|
|
1783
1844
|
{
|
|
1784
1845
|
"name": "layout"
|
|
@@ -1923,6 +1984,10 @@
|
|
|
1923
1984
|
{
|
|
1924
1985
|
"name": "stroke"
|
|
1925
1986
|
},
|
|
1987
|
+
{
|
|
1988
|
+
"name": "tag",
|
|
1989
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
1990
|
+
},
|
|
1926
1991
|
{
|
|
1927
1992
|
"name": "tags"
|
|
1928
1993
|
},
|
|
@@ -1993,6 +2058,10 @@
|
|
|
1993
2058
|
{
|
|
1994
2059
|
"name": "align"
|
|
1995
2060
|
},
|
|
2061
|
+
{
|
|
2062
|
+
"name": "alt",
|
|
2063
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
2064
|
+
},
|
|
1996
2065
|
{
|
|
1997
2066
|
"name": "animation"
|
|
1998
2067
|
},
|
|
@@ -2146,6 +2215,10 @@
|
|
|
2146
2215
|
{
|
|
2147
2216
|
"name": "stroke"
|
|
2148
2217
|
},
|
|
2218
|
+
{
|
|
2219
|
+
"name": "tag",
|
|
2220
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
2221
|
+
},
|
|
2149
2222
|
{
|
|
2150
2223
|
"name": "templateCols"
|
|
2151
2224
|
},
|
|
@@ -2219,6 +2292,10 @@
|
|
|
2219
2292
|
"name": "alignIts",
|
|
2220
2293
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
2221
2294
|
},
|
|
2295
|
+
{
|
|
2296
|
+
"name": "alt",
|
|
2297
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
2298
|
+
},
|
|
2222
2299
|
{
|
|
2223
2300
|
"name": "animate"
|
|
2224
2301
|
},
|
|
@@ -2448,7 +2525,8 @@
|
|
|
2448
2525
|
"name": "kind"
|
|
2449
2526
|
},
|
|
2450
2527
|
{
|
|
2451
|
-
"name": "label"
|
|
2528
|
+
"name": "label",
|
|
2529
|
+
"description": "Accessible name for the field."
|
|
2452
2530
|
},
|
|
2453
2531
|
{
|
|
2454
2532
|
"name": "layout"
|
|
@@ -2602,6 +2680,10 @@
|
|
|
2602
2680
|
{
|
|
2603
2681
|
"name": "stroke"
|
|
2604
2682
|
},
|
|
2683
|
+
{
|
|
2684
|
+
"name": "tag",
|
|
2685
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
2686
|
+
},
|
|
2605
2687
|
{
|
|
2606
2688
|
"name": "tags"
|
|
2607
2689
|
},
|
|
@@ -2695,6 +2777,10 @@
|
|
|
2695
2777
|
"name": "alignIts",
|
|
2696
2778
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
2697
2779
|
},
|
|
2780
|
+
{
|
|
2781
|
+
"name": "alt",
|
|
2782
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
2783
|
+
},
|
|
2698
2784
|
{
|
|
2699
2785
|
"name": "animate"
|
|
2700
2786
|
},
|
|
@@ -2915,7 +3001,8 @@
|
|
|
2915
3001
|
"name": "kind"
|
|
2916
3002
|
},
|
|
2917
3003
|
{
|
|
2918
|
-
"name": "label"
|
|
3004
|
+
"name": "label",
|
|
3005
|
+
"description": "Accessible name for the field."
|
|
2919
3006
|
},
|
|
2920
3007
|
{
|
|
2921
3008
|
"name": "layout"
|
|
@@ -3069,6 +3156,10 @@
|
|
|
3069
3156
|
{
|
|
3070
3157
|
"name": "stroke"
|
|
3071
3158
|
},
|
|
3159
|
+
{
|
|
3160
|
+
"name": "tag",
|
|
3161
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
3162
|
+
},
|
|
3072
3163
|
{
|
|
3073
3164
|
"name": "tags"
|
|
3074
3165
|
},
|
|
@@ -3158,6 +3249,10 @@
|
|
|
3158
3249
|
"name": "alignIts",
|
|
3159
3250
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
3160
3251
|
},
|
|
3252
|
+
{
|
|
3253
|
+
"name": "alt",
|
|
3254
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
3255
|
+
},
|
|
3161
3256
|
{
|
|
3162
3257
|
"name": "animation"
|
|
3163
3258
|
},
|
|
@@ -3354,7 +3449,8 @@
|
|
|
3354
3449
|
"name": "kind"
|
|
3355
3450
|
},
|
|
3356
3451
|
{
|
|
3357
|
-
"name": "label"
|
|
3452
|
+
"name": "label",
|
|
3453
|
+
"description": "Accessible name for the field."
|
|
3358
3454
|
},
|
|
3359
3455
|
{
|
|
3360
3456
|
"name": "layout"
|
|
@@ -3499,6 +3595,10 @@
|
|
|
3499
3595
|
{
|
|
3500
3596
|
"name": "stroke"
|
|
3501
3597
|
},
|
|
3598
|
+
{
|
|
3599
|
+
"name": "tag",
|
|
3600
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
3601
|
+
},
|
|
3502
3602
|
{
|
|
3503
3603
|
"name": "tags"
|
|
3504
3604
|
},
|
|
@@ -3593,6 +3693,10 @@
|
|
|
3593
3693
|
"name": "alignIts",
|
|
3594
3694
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
3595
3695
|
},
|
|
3696
|
+
{
|
|
3697
|
+
"name": "alt",
|
|
3698
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
3699
|
+
},
|
|
3596
3700
|
{
|
|
3597
3701
|
"name": "animate"
|
|
3598
3702
|
},
|
|
@@ -3822,7 +3926,8 @@
|
|
|
3822
3926
|
"name": "kind"
|
|
3823
3927
|
},
|
|
3824
3928
|
{
|
|
3825
|
-
"name": "label"
|
|
3929
|
+
"name": "label",
|
|
3930
|
+
"description": "Accessible name for the field."
|
|
3826
3931
|
},
|
|
3827
3932
|
{
|
|
3828
3933
|
"name": "layout"
|
|
@@ -3976,6 +4081,10 @@
|
|
|
3976
4081
|
{
|
|
3977
4082
|
"name": "stroke"
|
|
3978
4083
|
},
|
|
4084
|
+
{
|
|
4085
|
+
"name": "tag",
|
|
4086
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
4087
|
+
},
|
|
3979
4088
|
{
|
|
3980
4089
|
"name": "tags"
|
|
3981
4090
|
},
|
|
@@ -4103,6 +4212,10 @@
|
|
|
4103
4212
|
{
|
|
4104
4213
|
"name": "inputType"
|
|
4105
4214
|
},
|
|
4215
|
+
{
|
|
4216
|
+
"name": "label",
|
|
4217
|
+
"description": "Accessible name for the field."
|
|
4218
|
+
},
|
|
4106
4219
|
{
|
|
4107
4220
|
"name": "mar",
|
|
4108
4221
|
"description": "Margin. The same array-of-side-objects form as `pad`: `mar: [{a: 40}]`, keys `a t r b l`, combinable. Additionally `mar: \"center\"` sets left and right to auto, as does `{a: \"auto\"}` or `{center: true}`."
|
|
@@ -4134,6 +4247,9 @@
|
|
|
4134
4247
|
"name": "theme",
|
|
4135
4248
|
"description": "Explicit light/dark overrides — {light: {...}, dark: {...}}."
|
|
4136
4249
|
},
|
|
4250
|
+
{
|
|
4251
|
+
"name": "title"
|
|
4252
|
+
},
|
|
4137
4253
|
{
|
|
4138
4254
|
"name": "type",
|
|
4139
4255
|
"description": "Input type attribute. Defaults to \"text\"; \"search\" adds the native clear button."
|
|
@@ -4168,6 +4284,10 @@
|
|
|
4168
4284
|
{
|
|
4169
4285
|
"name": "inputType"
|
|
4170
4286
|
},
|
|
4287
|
+
{
|
|
4288
|
+
"name": "label",
|
|
4289
|
+
"description": "Accessible name for the field."
|
|
4290
|
+
},
|
|
4171
4291
|
{
|
|
4172
4292
|
"name": "mar",
|
|
4173
4293
|
"description": "Margin. The same array-of-side-objects form as `pad`: `mar: [{a: 40}]`, keys `a t r b l`, combinable. Additionally `mar: \"center\"` sets left and right to auto, as does `{a: \"auto\"}` or `{center: true}`."
|
|
@@ -4377,6 +4497,10 @@
|
|
|
4377
4497
|
"name": "alignIts",
|
|
4378
4498
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
4379
4499
|
},
|
|
4500
|
+
{
|
|
4501
|
+
"name": "alt",
|
|
4502
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
4503
|
+
},
|
|
4380
4504
|
{
|
|
4381
4505
|
"name": "animation"
|
|
4382
4506
|
},
|
|
@@ -4576,7 +4700,8 @@
|
|
|
4576
4700
|
"name": "kind"
|
|
4577
4701
|
},
|
|
4578
4702
|
{
|
|
4579
|
-
"name": "label"
|
|
4703
|
+
"name": "label",
|
|
4704
|
+
"description": "Accessible name for the field."
|
|
4580
4705
|
},
|
|
4581
4706
|
{
|
|
4582
4707
|
"name": "layout"
|
|
@@ -4718,6 +4843,10 @@
|
|
|
4718
4843
|
{
|
|
4719
4844
|
"name": "stroke"
|
|
4720
4845
|
},
|
|
4846
|
+
{
|
|
4847
|
+
"name": "tag",
|
|
4848
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
4849
|
+
},
|
|
4721
4850
|
{
|
|
4722
4851
|
"name": "tags"
|
|
4723
4852
|
},
|
|
@@ -4902,6 +5031,10 @@
|
|
|
4902
5031
|
"name": "alignIts",
|
|
4903
5032
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
4904
5033
|
},
|
|
5034
|
+
{
|
|
5035
|
+
"name": "alt",
|
|
5036
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
5037
|
+
},
|
|
4905
5038
|
{
|
|
4906
5039
|
"name": "animation"
|
|
4907
5040
|
},
|
|
@@ -5098,7 +5231,8 @@
|
|
|
5098
5231
|
"name": "kind"
|
|
5099
5232
|
},
|
|
5100
5233
|
{
|
|
5101
|
-
"name": "label"
|
|
5234
|
+
"name": "label",
|
|
5235
|
+
"description": "Accessible name for the field."
|
|
5102
5236
|
},
|
|
5103
5237
|
{
|
|
5104
5238
|
"name": "layout"
|
|
@@ -5240,6 +5374,10 @@
|
|
|
5240
5374
|
{
|
|
5241
5375
|
"name": "stroke"
|
|
5242
5376
|
},
|
|
5377
|
+
{
|
|
5378
|
+
"name": "tag",
|
|
5379
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
5380
|
+
},
|
|
5243
5381
|
{
|
|
5244
5382
|
"name": "tags"
|
|
5245
5383
|
},
|
|
@@ -5307,6 +5445,10 @@
|
|
|
5307
5445
|
{
|
|
5308
5446
|
"name": "align"
|
|
5309
5447
|
},
|
|
5448
|
+
{
|
|
5449
|
+
"name": "alt",
|
|
5450
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
5451
|
+
},
|
|
5310
5452
|
{
|
|
5311
5453
|
"name": "animation"
|
|
5312
5454
|
},
|
|
@@ -5413,7 +5555,8 @@
|
|
|
5413
5555
|
"description": "Escape hatch — {key, value} written straight to element.style, or an array of them."
|
|
5414
5556
|
},
|
|
5415
5557
|
{
|
|
5416
|
-
"name": "label"
|
|
5558
|
+
"name": "label",
|
|
5559
|
+
"description": "Accessible name for the field."
|
|
5417
5560
|
},
|
|
5418
5561
|
{
|
|
5419
5562
|
"name": "layout"
|
|
@@ -5481,6 +5624,10 @@
|
|
|
5481
5624
|
{
|
|
5482
5625
|
"name": "stroke"
|
|
5483
5626
|
},
|
|
5627
|
+
{
|
|
5628
|
+
"name": "tag",
|
|
5629
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
5630
|
+
},
|
|
5484
5631
|
{
|
|
5485
5632
|
"name": "title"
|
|
5486
5633
|
},
|
|
@@ -5539,6 +5686,10 @@
|
|
|
5539
5686
|
"name": "alignIts",
|
|
5540
5687
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
5541
5688
|
},
|
|
5689
|
+
{
|
|
5690
|
+
"name": "alt",
|
|
5691
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
5692
|
+
},
|
|
5542
5693
|
{
|
|
5543
5694
|
"name": "animation"
|
|
5544
5695
|
},
|
|
@@ -5735,7 +5886,8 @@
|
|
|
5735
5886
|
"name": "kind"
|
|
5736
5887
|
},
|
|
5737
5888
|
{
|
|
5738
|
-
"name": "label"
|
|
5889
|
+
"name": "label",
|
|
5890
|
+
"description": "Accessible name for the field."
|
|
5739
5891
|
},
|
|
5740
5892
|
{
|
|
5741
5893
|
"name": "layout"
|
|
@@ -5877,6 +6029,10 @@
|
|
|
5877
6029
|
{
|
|
5878
6030
|
"name": "stroke"
|
|
5879
6031
|
},
|
|
6032
|
+
{
|
|
6033
|
+
"name": "tag",
|
|
6034
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
6035
|
+
},
|
|
5880
6036
|
{
|
|
5881
6037
|
"name": "tags"
|
|
5882
6038
|
},
|
|
@@ -5962,6 +6118,10 @@
|
|
|
5962
6118
|
"name": "alignIts",
|
|
5963
6119
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
5964
6120
|
},
|
|
6121
|
+
{
|
|
6122
|
+
"name": "alt",
|
|
6123
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
6124
|
+
},
|
|
5965
6125
|
{
|
|
5966
6126
|
"name": "animation"
|
|
5967
6127
|
},
|
|
@@ -6158,7 +6318,8 @@
|
|
|
6158
6318
|
"name": "kind"
|
|
6159
6319
|
},
|
|
6160
6320
|
{
|
|
6161
|
-
"name": "label"
|
|
6321
|
+
"name": "label",
|
|
6322
|
+
"description": "Accessible name for the field."
|
|
6162
6323
|
},
|
|
6163
6324
|
{
|
|
6164
6325
|
"name": "layout"
|
|
@@ -6300,6 +6461,10 @@
|
|
|
6300
6461
|
{
|
|
6301
6462
|
"name": "stroke"
|
|
6302
6463
|
},
|
|
6464
|
+
{
|
|
6465
|
+
"name": "tag",
|
|
6466
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
6467
|
+
},
|
|
6303
6468
|
{
|
|
6304
6469
|
"name": "tags"
|
|
6305
6470
|
},
|
|
@@ -6370,6 +6535,10 @@
|
|
|
6370
6535
|
"name": "alignIts",
|
|
6371
6536
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
6372
6537
|
},
|
|
6538
|
+
{
|
|
6539
|
+
"name": "alt",
|
|
6540
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
6541
|
+
},
|
|
6373
6542
|
{
|
|
6374
6543
|
"name": "animation"
|
|
6375
6544
|
},
|
|
@@ -6616,6 +6785,10 @@
|
|
|
6616
6785
|
{
|
|
6617
6786
|
"name": "stroke"
|
|
6618
6787
|
},
|
|
6788
|
+
{
|
|
6789
|
+
"name": "tag",
|
|
6790
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
6791
|
+
},
|
|
6619
6792
|
{
|
|
6620
6793
|
"name": "top"
|
|
6621
6794
|
},
|
|
@@ -6680,6 +6853,10 @@
|
|
|
6680
6853
|
"name": "alignIts",
|
|
6681
6854
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
6682
6855
|
},
|
|
6856
|
+
{
|
|
6857
|
+
"name": "alt",
|
|
6858
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
6859
|
+
},
|
|
6683
6860
|
{
|
|
6684
6861
|
"name": "animation"
|
|
6685
6862
|
},
|
|
@@ -6876,7 +7053,8 @@
|
|
|
6876
7053
|
"name": "kind"
|
|
6877
7054
|
},
|
|
6878
7055
|
{
|
|
6879
|
-
"name": "label"
|
|
7056
|
+
"name": "label",
|
|
7057
|
+
"description": "Accessible name for the field."
|
|
6880
7058
|
},
|
|
6881
7059
|
{
|
|
6882
7060
|
"name": "layout"
|
|
@@ -7018,6 +7196,10 @@
|
|
|
7018
7196
|
{
|
|
7019
7197
|
"name": "stroke"
|
|
7020
7198
|
},
|
|
7199
|
+
{
|
|
7200
|
+
"name": "tag",
|
|
7201
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
7202
|
+
},
|
|
7021
7203
|
{
|
|
7022
7204
|
"name": "tags"
|
|
7023
7205
|
},
|
|
@@ -7247,6 +7429,10 @@
|
|
|
7247
7429
|
{
|
|
7248
7430
|
"name": "align"
|
|
7249
7431
|
},
|
|
7432
|
+
{
|
|
7433
|
+
"name": "alt",
|
|
7434
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
7435
|
+
},
|
|
7250
7436
|
{
|
|
7251
7437
|
"name": "animation"
|
|
7252
7438
|
},
|
|
@@ -7412,6 +7598,10 @@
|
|
|
7412
7598
|
{
|
|
7413
7599
|
"name": "stroke"
|
|
7414
7600
|
},
|
|
7601
|
+
{
|
|
7602
|
+
"name": "tag",
|
|
7603
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
7604
|
+
},
|
|
7415
7605
|
{
|
|
7416
7606
|
"name": "top"
|
|
7417
7607
|
},
|
|
@@ -7554,6 +7744,10 @@
|
|
|
7554
7744
|
"name": "alignIts",
|
|
7555
7745
|
"deprecated": "obsolete. Its body sets background:\"gray\" and hardcodes alignItems/justifyItems to flex-start with the argument commented out — debugging left in. Use `customAlign` / `customJustify`."
|
|
7556
7746
|
},
|
|
7747
|
+
{
|
|
7748
|
+
"name": "alt",
|
|
7749
|
+
"description": "Description for an icon that carries meaning; omit for decoration."
|
|
7750
|
+
},
|
|
7557
7751
|
{
|
|
7558
7752
|
"name": "animation"
|
|
7559
7753
|
},
|
|
@@ -7750,7 +7944,8 @@
|
|
|
7750
7944
|
"name": "kind"
|
|
7751
7945
|
},
|
|
7752
7946
|
{
|
|
7753
|
-
"name": "label"
|
|
7947
|
+
"name": "label",
|
|
7948
|
+
"description": "Accessible name for the field."
|
|
7754
7949
|
},
|
|
7755
7950
|
{
|
|
7756
7951
|
"name": "layout"
|
|
@@ -7892,6 +8087,10 @@
|
|
|
7892
8087
|
{
|
|
7893
8088
|
"name": "stroke"
|
|
7894
8089
|
},
|
|
8090
|
+
{
|
|
8091
|
+
"name": "tag",
|
|
8092
|
+
"description": "Heading level to render, independent of `size`/`fluid`."
|
|
8093
|
+
},
|
|
7895
8094
|
{
|
|
7896
8095
|
"name": "tags"
|
|
7897
8096
|
},
|
package/skills/nodality/SKILL.md
CHANGED
|
@@ -68,6 +68,20 @@ Skipping step 3 is the classic failure: a misspelled op renders
|
|
|
68
68
|
*nothing* rather than erroring, so the page looks plausible and is
|
|
69
69
|
silently missing its effects.
|
|
70
70
|
|
|
71
|
+
## HTML's names are accepted
|
|
72
|
+
|
|
73
|
+
`src` and `href` both mean `url`; `options` means `items`. Write either — the
|
|
74
|
+
canonical names are `url` and `items`, and that is what `get_schema` reports.
|
|
75
|
+
Giving both with **different** values is reported as `CONFLICTING_ALIAS`,
|
|
76
|
+
because one of them would be ignored.
|
|
77
|
+
|
|
78
|
+
A table's rows may also be written as arrays with the header row first, the way
|
|
79
|
+
a CSV is:
|
|
80
|
+
|
|
81
|
+
```js
|
|
82
|
+
{ type: "table", items: [["date", "race"], ["29/08", "Krusnoman"]] }
|
|
83
|
+
```
|
|
84
|
+
|
|
71
85
|
## Composites carry their content in a slot
|
|
72
86
|
|
|
73
87
|
A composite is not empty scaffolding – you give it content, and **which
|
|
@@ -195,6 +209,42 @@ One naming caution: `Text` and `Image` collide with DOM constructor
|
|
|
195
209
|
names. Always use the module import; on a page using the CDN globals,
|
|
196
210
|
never assume `window.Text` / `window.Image` are still the DOM's own.
|
|
197
211
|
|
|
212
|
+
## Building more than one page
|
|
213
|
+
|
|
214
|
+
Declare shared chrome once and reference it. **`.defs()` must come before
|
|
215
|
+
`.add()`** — `add` renders as it goes, so definitions arriving later cannot be
|
|
216
|
+
used, and the wrong order is refused with a message saying so.
|
|
217
|
+
|
|
218
|
+
```js
|
|
219
|
+
const shared = { // one file, imported by every page
|
|
220
|
+
nav: { type: "nav", items: [{ title: "Home", link: "/" }] },
|
|
221
|
+
footer: { type: "wrap", children: [{ type: "p", text: "Acme" }] },
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
new Des().defs(shared).nodes(N)
|
|
225
|
+
.add([{ $ref: "nav" }, { type: "h1", text: "Pricing" }, { $ref: "footer" }])
|
|
226
|
+
.set({ mount: "#mount" });
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Keys written beside a reference **override** the definition, which is how one
|
|
230
|
+
nav serves every page:
|
|
231
|
+
|
|
232
|
+
```js
|
|
233
|
+
{ $ref: "nav", id: "topnav" } // adds an id
|
|
234
|
+
{ $ref: "nav", items: [{ title: "Docs", link: "/d" }] } // replaces the list
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
The merge is shallow: an override replaces a slot, it does not extend it.
|
|
238
|
+
|
|
239
|
+
Worth it from **two pages up**: on a single page a reference costs more than
|
|
240
|
+
writing the thing, so do not reach for it before then. On a real site's nav and
|
|
241
|
+
footer it is 1.7x at four pages and about 2x at ten — measured, because 61% of
|
|
242
|
+
every token in that site was the same chrome repeated.
|
|
243
|
+
|
|
244
|
+
A name with no definition is refused at render and reported by
|
|
245
|
+
`validate_nodes` as `DANGLING_REF` with a did-you-mean, so pass `defs` as the
|
|
246
|
+
third argument when you validate a page that uses references.
|
|
247
|
+
|
|
198
248
|
## Editing a page that already exists
|
|
199
249
|
|
|
200
250
|
Editing is the common case in production, and it does not mean
|