@vectoriox/iox-ui 5.34.0 → 5.36.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.
@@ -1,6 +1,6 @@
1
1
  import { NEW_NODE_STYLE_DEFAULTS, defaultElementStyleFor, elementStyleById, ownedTraitsOf, applyElementStyle, flavorPackById, parseHexColor, SPEC_AXES, LinkType, resolveDesignChoices } from '@vectoriox/iox-ui/design-core';
2
2
  import { formPresetById } from '@vectoriox/iox-ui/forms-core';
3
- import { CardRole, CardLayout, CARD_LAYOUTS, CARD_PARTS, buildCardRecipe, findByRole } from '@vectoriox/iox-ui/composite-core';
3
+ import { CardRole, CardLayout, CARD_LAYOUTS, CARD_PARTS, buildCardRecipe, findByRole, AccordionRole, buildAccordionRecipe, ACCORDION_WORDS, accordionItems, accordionQuestionOf, accordionAnswerOf, ACCORDION_BIND_PROP, pickAccordionAutoBinds, ACCORDION_CONTENT_LIMIT } from '@vectoriox/iox-ui/composite-core';
4
4
 
5
5
  // GENERATED from iox-ai-guidance flavor-spec.v1.json — do not edit; re-run scripts/gen-flavor-spec.mjs
6
6
  // (npm run gen:flavor-spec). The JSON is itself generated by iox-ai-guidance
@@ -93,7 +93,7 @@ const SPEC_SITE_PLAN_SHAPE = {
93
93
  "section": {
94
94
  "pattern": "string — a non-global pattern id",
95
95
  "slots?": "{ [slot]: string } — the pattern's declared slots",
96
- "binding?": "string — the list source a pattern's $binding repeater iterates (exactly when it has one)",
96
+ "binding?": "string — the list source a pattern's $binding repeater iterates (exactly when it has one); a $binding? pattern (faq.accordion) MAY take one — then its items come from that content",
97
97
  "without?": "string[] — the pattern's optional parts to leave out"
98
98
  },
99
99
  "globals": {
@@ -935,6 +935,51 @@ const SPEC_SITE_PATTERNS = {
935
935
  }
936
936
  ]
937
937
  }
938
+ },
939
+ "faq.accordion": {
940
+ "family": "faq",
941
+ "label": "FAQ — questions that open",
942
+ "node": {
943
+ "t": "Section",
944
+ "es": "section",
945
+ "c": [
946
+ {
947
+ "t": "Container",
948
+ "es": "box",
949
+ "lay": {
950
+ "display": "flex",
951
+ "flexDirection": "column",
952
+ "gap": "14px",
953
+ "maxWidth": "860px",
954
+ "width": "100%",
955
+ "margin": "0px auto 0px auto"
956
+ },
957
+ "c": [
958
+ {
959
+ "t": "Text",
960
+ "es": "eyebrow",
961
+ "slot": "eyebrow",
962
+ "ph": "copy",
963
+ "text": "FAQ"
964
+ },
965
+ {
966
+ "t": "Heading",
967
+ "es": "h2",
968
+ "level": "h2",
969
+ "slot": "title",
970
+ "ph": "copy",
971
+ "text": "Questions people ask"
972
+ },
973
+ {
974
+ "t": "Container",
975
+ "recipe": "accordion",
976
+ "src": "$binding?",
977
+ "ph": "copy"
978
+ }
979
+ ]
980
+ }
981
+ ]
982
+ }
938
983
  }
939
984
  };
940
985
  const SPEC_SITE_TEMPLATES = {
@@ -1205,7 +1250,7 @@ const NODE_BASELINES = {
1205
1250
  "lineHeight": "1.5",
1206
1251
  "letterSpacing": "0px",
1207
1252
  "textTransform": "none",
1208
- "textAlign": "left",
1253
+ "textAlign": "start",
1209
1254
  "fontStyle": "normal",
1210
1255
  "textDecoration": "none",
1211
1256
  "WebkitTextStrokeWidth": "0px",
@@ -1396,7 +1441,7 @@ const NODE_BASELINES = {
1396
1441
  "lineHeight": "1.5",
1397
1442
  "letterSpacing": "0px",
1398
1443
  "textTransform": "none",
1399
- "textAlign": "left",
1444
+ "textAlign": "start",
1400
1445
  "fontStyle": "normal",
1401
1446
  "textDecoration": "none",
1402
1447
  "WebkitTextStrokeWidth": "0px",
@@ -1588,7 +1633,7 @@ const NODE_BASELINES = {
1588
1633
  "lineHeight": "1.5",
1589
1634
  "letterSpacing": "0px",
1590
1635
  "textTransform": "none",
1591
- "textAlign": "left",
1636
+ "textAlign": "start",
1592
1637
  "fontStyle": "normal",
1593
1638
  "textDecoration": "none",
1594
1639
  "WebkitTextStrokeWidth": "0px",
@@ -1774,7 +1819,7 @@ const NODE_BASELINES = {
1774
1819
  "lineHeight": "1.5",
1775
1820
  "letterSpacing": "0px",
1776
1821
  "textTransform": "none",
1777
- "textAlign": "left",
1822
+ "textAlign": "start",
1778
1823
  "fontStyle": "normal",
1779
1824
  "textDecoration": "none",
1780
1825
  "WebkitTextStrokeWidth": "0px",
@@ -1818,7 +1863,9 @@ const NODE_BASELINES = {
1818
1863
  },
1819
1864
  "traits": [
1820
1865
  "htmlTag",
1821
- "colorScheme"
1866
+ "colorScheme",
1867
+ "multiple",
1868
+ "defaultOn"
1822
1869
  ],
1823
1870
  "styleTraits": [
1824
1871
  "position",
@@ -1963,7 +2010,7 @@ const NODE_BASELINES = {
1963
2010
  "lineHeight": "1.5",
1964
2011
  "letterSpacing": "0px",
1965
2012
  "textTransform": "none",
1966
- "textAlign": "left",
2013
+ "textAlign": "start",
1967
2014
  "fontStyle": "normal",
1968
2015
  "textDecoration": "none",
1969
2016
  "WebkitTextStrokeWidth": "0px",
@@ -2154,7 +2201,7 @@ const NODE_BASELINES = {
2154
2201
  "lineHeight": "1.5",
2155
2202
  "letterSpacing": "0px",
2156
2203
  "textTransform": "none",
2157
- "textAlign": "left",
2204
+ "textAlign": "start",
2158
2205
  "fontStyle": "normal",
2159
2206
  "textDecoration": "none",
2160
2207
  "WebkitTextStrokeWidth": "0px",
@@ -2341,7 +2388,7 @@ const NODE_BASELINES = {
2341
2388
  "lineHeight": "1.5",
2342
2389
  "letterSpacing": "0px",
2343
2390
  "textTransform": "none",
2344
- "textAlign": "left",
2391
+ "textAlign": "start",
2345
2392
  "fontStyle": "normal",
2346
2393
  "textDecoration": "none",
2347
2394
  "WebkitTextStrokeWidth": "0px",
@@ -2530,7 +2577,7 @@ const NODE_BASELINES = {
2530
2577
  "lineHeight": "1.5",
2531
2578
  "letterSpacing": "0px",
2532
2579
  "textTransform": "none",
2533
- "textAlign": "left",
2580
+ "textAlign": "start",
2534
2581
  "fontStyle": "normal",
2535
2582
  "textDecoration": "none",
2536
2583
  "WebkitTextStrokeWidth": "0px",
@@ -2724,7 +2771,7 @@ const NODE_BASELINES = {
2724
2771
  "lineHeight": "1.5",
2725
2772
  "letterSpacing": "0px",
2726
2773
  "textTransform": "none",
2727
- "textAlign": "left",
2774
+ "textAlign": "start",
2728
2775
  "fontStyle": "normal",
2729
2776
  "textDecoration": "none",
2730
2777
  "WebkitTextStrokeWidth": "0px",
@@ -2913,7 +2960,7 @@ const NODE_BASELINES = {
2913
2960
  "lineHeight": "1.5",
2914
2961
  "letterSpacing": "0px",
2915
2962
  "textTransform": "none",
2916
- "textAlign": "left",
2963
+ "textAlign": "start",
2917
2964
  "fontStyle": "normal",
2918
2965
  "textDecoration": "none",
2919
2966
  "WebkitTextStrokeWidth": "0px",
@@ -3096,7 +3143,7 @@ const NODE_BASELINES = {
3096
3143
  "lineHeight": "0",
3097
3144
  "letterSpacing": "0px",
3098
3145
  "textTransform": "none",
3099
- "textAlign": "left",
3146
+ "textAlign": "start",
3100
3147
  "fontStyle": "normal",
3101
3148
  "textDecoration": "none",
3102
3149
  "WebkitTextStrokeWidth": "0px",
@@ -3277,7 +3324,7 @@ const NODE_BASELINES = {
3277
3324
  "lineHeight": "1.5",
3278
3325
  "letterSpacing": "0px",
3279
3326
  "textTransform": "none",
3280
- "textAlign": "left",
3327
+ "textAlign": "start",
3281
3328
  "fontStyle": "normal",
3282
3329
  "textDecoration": "none",
3283
3330
  "WebkitTextStrokeWidth": "0px",
@@ -3456,7 +3503,7 @@ const NODE_BASELINES = {
3456
3503
  "lineHeight": "1.5",
3457
3504
  "letterSpacing": "0px",
3458
3505
  "textTransform": "none",
3459
- "textAlign": "left",
3506
+ "textAlign": "start",
3460
3507
  "fontStyle": "normal",
3461
3508
  "textDecoration": "none",
3462
3509
  "WebkitTextStrokeWidth": "0px",
@@ -3644,7 +3691,7 @@ const NODE_BASELINES = {
3644
3691
  "lineHeight": "1.5",
3645
3692
  "letterSpacing": "0px",
3646
3693
  "textTransform": "none",
3647
- "textAlign": "left",
3694
+ "textAlign": "start",
3648
3695
  "fontStyle": "normal",
3649
3696
  "textDecoration": "none",
3650
3697
  "WebkitTextStrokeWidth": "0px",
@@ -3821,7 +3868,7 @@ const NODE_BASELINES = {
3821
3868
  "lineHeight": "1.5",
3822
3869
  "letterSpacing": "0px",
3823
3870
  "textTransform": "none",
3824
- "textAlign": "left",
3871
+ "textAlign": "start",
3825
3872
  "fontStyle": "normal",
3826
3873
  "textDecoration": "none",
3827
3874
  "WebkitTextStrokeWidth": "0px",
@@ -4005,7 +4052,7 @@ const NODE_BASELINES = {
4005
4052
  "lineHeight": "1.5",
4006
4053
  "letterSpacing": "0px",
4007
4054
  "textTransform": "none",
4008
- "textAlign": "left",
4055
+ "textAlign": "start",
4009
4056
  "fontStyle": "normal",
4010
4057
  "textDecoration": "none",
4011
4058
  "WebkitTextStrokeWidth": "0px",
@@ -4049,7 +4096,9 @@ const NODE_BASELINES = {
4049
4096
  },
4050
4097
  "traits": [
4051
4098
  "source",
4052
- "limit"
4099
+ "limit",
4100
+ "multiple",
4101
+ "defaultOn"
4053
4102
  ],
4054
4103
  "styleTraits": [
4055
4104
  "position",
@@ -4407,7 +4456,7 @@ const NODE_BASELINES = {
4407
4456
  "lineHeight": "1.5",
4408
4457
  "letterSpacing": "0px",
4409
4458
  "textTransform": "none",
4410
- "textAlign": "left",
4459
+ "textAlign": "start",
4411
4460
  "fontStyle": "normal",
4412
4461
  "textDecoration": "none",
4413
4462
  "WebkitTextStrokeWidth": "0px",
@@ -4717,7 +4766,7 @@ const NODE_BASELINES = {
4717
4766
  "lineHeight": "1.5",
4718
4767
  "letterSpacing": "0px",
4719
4768
  "textTransform": "none",
4720
- "textAlign": "left",
4769
+ "textAlign": "start",
4721
4770
  "fontStyle": "normal",
4722
4771
  "textDecoration": "none",
4723
4772
  "WebkitTextStrokeWidth": "0px",
@@ -4912,7 +4961,7 @@ const NODE_BASELINES = {
4912
4961
  "lineHeight": "1.5",
4913
4962
  "letterSpacing": "0px",
4914
4963
  "textTransform": "none",
4915
- "textAlign": "left",
4964
+ "textAlign": "start",
4916
4965
  "fontStyle": "normal",
4917
4966
  "textDecoration": "none",
4918
4967
  "WebkitTextStrokeWidth": "0px",
@@ -5111,7 +5160,7 @@ const NODE_BASELINES = {
5111
5160
  "lineHeight": "1.5",
5112
5161
  "letterSpacing": "0px",
5113
5162
  "textTransform": "none",
5114
- "textAlign": "left",
5163
+ "textAlign": "start",
5115
5164
  "fontStyle": "normal",
5116
5165
  "textDecoration": "none",
5117
5166
  "WebkitTextStrokeWidth": "0px",
@@ -5296,7 +5345,7 @@ const NODE_BASELINES = {
5296
5345
  "lineHeight": "1.5",
5297
5346
  "letterSpacing": "0px",
5298
5347
  "textTransform": "none",
5299
- "textAlign": "left",
5348
+ "textAlign": "start",
5300
5349
  "fontStyle": "normal",
5301
5350
  "textDecoration": "none",
5302
5351
  "WebkitTextStrokeWidth": "0px",
@@ -5481,7 +5530,7 @@ const NODE_BASELINES = {
5481
5530
  "lineHeight": "1.5",
5482
5531
  "letterSpacing": "0px",
5483
5532
  "textTransform": "none",
5484
- "textAlign": "left",
5533
+ "textAlign": "start",
5485
5534
  "fontStyle": "normal",
5486
5535
  "textDecoration": "none",
5487
5536
  "WebkitTextStrokeWidth": "0px",
@@ -5664,7 +5713,7 @@ const NODE_BASELINES = {
5664
5713
  "lineHeight": "1.5",
5665
5714
  "letterSpacing": "0px",
5666
5715
  "textTransform": "none",
5667
- "textAlign": "left",
5716
+ "textAlign": "start",
5668
5717
  "fontStyle": "normal",
5669
5718
  "textDecoration": "none",
5670
5719
  "WebkitTextStrokeWidth": "0px",
@@ -5852,7 +5901,7 @@ const NODE_BASELINES = {
5852
5901
  "lineHeight": "1.5",
5853
5902
  "letterSpacing": "0px",
5854
5903
  "textTransform": "none",
5855
- "textAlign": "left",
5904
+ "textAlign": "start",
5856
5905
  "fontStyle": "normal",
5857
5906
  "textDecoration": "none",
5858
5907
  "WebkitTextStrokeWidth": "0px",
@@ -6040,7 +6089,7 @@ const NEUTRAL_STYLE_PROPS = {
6040
6089
  "lineHeight": "1.5",
6041
6090
  "letterSpacing": "0px",
6042
6091
  "textTransform": "none",
6043
- "textAlign": "left",
6092
+ "textAlign": "start",
6044
6093
  "fontStyle": "normal",
6045
6094
  "textDecoration": "none",
6046
6095
  "WebkitTextStrokeWidth": "0px",
@@ -6197,6 +6246,9 @@ var GlobalSlot;
6197
6246
  var PatternRecipe;
6198
6247
  (function (PatternRecipe) {
6199
6248
  PatternRecipe["Card"] = "card";
6249
+ /** CC2: the Accordion — Manual (three placeholder items), or From content when the section names a list
6250
+ * `binding` (`src: '$binding?'`): one template item bound to the type's question / answer fields. */
6251
+ PatternRecipe["Accordion"] = "accordion";
6200
6252
  })(PatternRecipe || (PatternRecipe = {}));
6201
6253
  /** A recipe node's `binds` keys → the part each binds (Card v2). */
6202
6254
  var CardBindTarget;
@@ -6227,6 +6279,8 @@ var PatternDirective;
6227
6279
  (function (PatternDirective) {
6228
6280
  /** A Repeater's source: the section's `binding`. */
6229
6281
  PatternDirective["Binding"] = "$binding";
6282
+ /** The section MAY name a list `binding` (faq.accordion): with one, the recipe's items come from it. */
6283
+ PatternDirective["OptionalBinding"] = "$binding?";
6230
6284
  /** `each`: one plain node per page of the plan that is in the navigation (`inNav`), in plan order —
6231
6285
  * words and routes written in, editable on the canvas (W1.1). */
6232
6286
  PatternDirective["NavPages"] = "$navPages";
@@ -6271,6 +6325,10 @@ function patternOptionalParts(pattern) {
6271
6325
  function patternNeedsBinding(pattern) {
6272
6326
  return patternNodes(pattern).some(n => n.src === PatternDirective.Binding);
6273
6327
  }
6328
+ /** True when the pattern may take a section `binding` — it needs one, or names `$binding?` (CC2). */
6329
+ function patternTakesBinding(pattern) {
6330
+ return patternNeedsBinding(pattern) || patternNodes(pattern).some(n => n.src === PatternDirective.OptionalBinding);
6331
+ }
6274
6332
  const IMAGE_TYPE = 'Image';
6275
6333
  /** The scopes whose ITEM a pattern's bound Images take their alt text from (an Image that names no `alt`
6276
6334
  * of its own): `item` (the row of a `$binding` Repeater — the section's list), `route` or `next`. Each
@@ -6803,9 +6861,11 @@ function validatePages(c, list, types, sources) {
6803
6861
  });
6804
6862
  }
6805
6863
  const binding = c.string(s, 'binding', sp, false);
6806
- if (patternNeedsBinding(pattern)) {
6807
- if (!binding)
6808
- c.add(SitePlanIssueCode.Binding, `${sp}.binding`, `"${patternId}" repeats the section's binding — name a list source`);
6864
+ if (patternTakesBinding(pattern)) {
6865
+ if (!binding) {
6866
+ if (patternNeedsBinding(pattern))
6867
+ c.add(SitePlanIssueCode.Binding, `${sp}.binding`, `"${patternId}" repeats the section's binding — name a list source`);
6868
+ }
6809
6869
  else {
6810
6870
  const src = sources.get(binding);
6811
6871
  if (!src)
@@ -7859,6 +7919,8 @@ const CARD_BINDS = {
7859
7919
  * through its title (`href` + `param`, the stretched link). Ids derive from the recipe's keys.
7860
7920
  */
7861
7921
  function composeRecipe(pn, id, repeater, ctx) {
7922
+ if (pn.recipe === PatternRecipe.Accordion)
7923
+ return composeAccordion(pn, id, ctx);
7862
7924
  if (pn.recipe !== PatternRecipe.Card)
7863
7925
  throw new ComposeError(`${id}: no recipe "${pn.recipe}" in composite-core`);
7864
7926
  const layout = (pn.layout ?? CardLayout.Top);
@@ -7901,6 +7963,49 @@ function composeRecipe(pn, id, repeater, ctx) {
7901
7963
  }
7902
7964
  return card;
7903
7965
  }
7966
+ const REPEATER = 'Repeater';
7967
+ /**
7968
+ * An Accordion (CC2) — the composite-core recipe stamped with this composer's factory. Manual (no section
7969
+ * binding): three items whose questions and answers are placeholders the studio rewrites (`ph: 'copy'`), never
7970
+ * invented answers. From content (the section names a list `binding` — R3's AI path): the root is a Repeater
7971
+ * over that list holding ONE template item, its question and answer bound to the content type's first
7972
+ * short-text and first long-text fields (`pickAccordionAutoBinds`, the builder switch's rule), limit 20.
7973
+ */
7974
+ function composeAccordion(pn, id, ctx) {
7975
+ const binding = pn.src === PatternDirective.OptionalBinding || pn.src === PatternDirective.Binding ? ctx.section?.binding ?? null : null;
7976
+ if (pn.src === PatternDirective.Binding && !binding)
7977
+ throw new ComposeError(`${id}: "$binding" with no section binding`);
7978
+ const factory = (spec) => {
7979
+ const isRoot = spec.key === AccordionRole.Accordion;
7980
+ const type = isRoot && binding ? REPEATER : spec.type;
7981
+ return create(isRoot ? id : `${id}-${spec.key}`, type, { ...(spec.props ?? {}) }, spec.elementStyle ?? null);
7982
+ };
7983
+ const root = buildAccordionRecipe(factory, binding ? { items: ACCORDION_WORDS.slice(0, 1) } : {});
7984
+ if (!binding) {
7985
+ if (pn.ph === PatternPlaceholder.Copy) {
7986
+ for (const item of accordionItems(root)) {
7987
+ for (const part of [accordionQuestionOf(item), accordionAnswerOf(item)]) {
7988
+ if (part)
7989
+ ctx.placeholders.push({ nodeId: part.id, owner: ctx.owner, kind: PlaceholderKind.Copy, text: String(part.props?.[ACCORDION_BIND_PROP] ?? '') });
7990
+ }
7991
+ }
7992
+ }
7993
+ return root;
7994
+ }
7995
+ const source = ctx.plan.dataSources.find(d => d.alias === binding);
7996
+ const type = source && 'contentType' in source ? ctx.plan.contentTypes.find(t => t.name === source.contentType) : undefined;
7997
+ const picks = pickAccordionAutoBinds((type?.fields ?? []).map(f => ({ name: f.name, type: f.type, controller: f.controller })));
7998
+ if (!picks.question || !picks.answer) {
7999
+ throw new ComposeError(`${id}: "${binding}" has no short-text field for the question and long-text field for the answer`);
8000
+ }
8001
+ addBinding(root, { prop: 'source', source: binding, path: '' });
8002
+ setProp(root, 'limit', ACCORDION_CONTENT_LIMIT);
8003
+ const [template] = accordionItems(root);
8004
+ delete template.itemKey;
8005
+ addBinding(accordionQuestionOf(template), { prop: ACCORDION_BIND_PROP, source: binding, path: picks.question });
8006
+ addBinding(accordionAnswerOf(template), { prop: ACCORDION_BIND_PROP, source: binding, path: picks.answer });
8007
+ return root;
8008
+ }
7904
8009
  function composePattern(pattern, id, ctx) {
7905
8010
  if (pattern.node.each)
7906
8011
  throw new ComposeError(`${id}: a pattern's root cannot be stamped per page`);
@@ -8024,5 +8129,5 @@ function composeSite(plan, context) {
8024
8129
  * Generated bundle index. Do not edit.
8025
8130
  */
8026
8131
 
8027
- export { BAR_ITEMS_MAX, BAR_ITEMS_MIN, BASELINE_ROLES, BaselineRole, BindScope, CardBindTarget, ComposeError, ComposeIssueCode, DANGLING_LINK_CODES, DEFAULT_PHONE_MENU_BREAKPOINT, FACT_KEYS, GlobalSlot, NAV_PART_LABELS, NAV_SHAPE_COPY, NEUTRAL_STYLE_PROPS, NODE_BASELINES, NavRole, NavShape, NavShapeError, PatternDirective, PatternGlobalPosition, PatternPlaceholder, PatternRecipe, PhoneMenuBreakpoint, PlaceholderKind, PlanDataSourceMode, PlanDataSourceType, RelativeOp, SAMPLE_IMAGE_REF, SITE_FACT_LABELS, SITE_PATTERNS, SITE_PLAN_VERSION, SITE_TEMPLATES, SPEC_SITE_FACTS, SPEC_SITE_PATTERNS, SPEC_SITE_PLAN_SHAPE, SPEC_SITE_TEMPLATES, STUDIO_TEMPLATE, SitePlanError, SitePlanIssueCode, SitePlanSourceKind, SiteTemplateError, SiteTemplateId, addBarItem, altSourceScopes, assertStyleSlots, assertValidSitePlan, barIconForRoute, composeSite, createSerializedNode, findNavRoot, navPages, navShapeBreakpoint, navShapeOf, nextSourceOf, nodeBindPaths, parseSampleImageRef, patternById, patternNeedsBinding, patternNodes, patternOptionalParts, patternScopes, patternSlots, planFromTemplate, planNavShape, releasedLayoutDefaults, requiredShapeKeys, routeParams, sampleImageRef, setStyleProps, shapeKeys, validateSitePlan, walkSerialized };
8132
+ export { BAR_ITEMS_MAX, BAR_ITEMS_MIN, BASELINE_ROLES, BaselineRole, BindScope, CardBindTarget, ComposeError, ComposeIssueCode, DANGLING_LINK_CODES, DEFAULT_PHONE_MENU_BREAKPOINT, FACT_KEYS, GlobalSlot, NAV_PART_LABELS, NAV_SHAPE_COPY, NEUTRAL_STYLE_PROPS, NODE_BASELINES, NavRole, NavShape, NavShapeError, PatternDirective, PatternGlobalPosition, PatternPlaceholder, PatternRecipe, PhoneMenuBreakpoint, PlaceholderKind, PlanDataSourceMode, PlanDataSourceType, RelativeOp, SAMPLE_IMAGE_REF, SITE_FACT_LABELS, SITE_PATTERNS, SITE_PLAN_VERSION, SITE_TEMPLATES, SPEC_SITE_FACTS, SPEC_SITE_PATTERNS, SPEC_SITE_PLAN_SHAPE, SPEC_SITE_TEMPLATES, STUDIO_TEMPLATE, SitePlanError, SitePlanIssueCode, SitePlanSourceKind, SiteTemplateError, SiteTemplateId, addBarItem, altSourceScopes, assertStyleSlots, assertValidSitePlan, barIconForRoute, composeSite, createSerializedNode, findNavRoot, navPages, navShapeBreakpoint, navShapeOf, nextSourceOf, nodeBindPaths, parseSampleImageRef, patternById, patternNeedsBinding, patternNodes, patternOptionalParts, patternScopes, patternSlots, patternTakesBinding, planFromTemplate, planNavShape, releasedLayoutDefaults, requiredShapeKeys, routeParams, sampleImageRef, setStyleProps, shapeKeys, validateSitePlan, walkSerialized };
8028
8133
  //# sourceMappingURL=vectoriox-iox-ui-generation-core.mjs.map