@vectoriox/iox-ui 5.78.0 → 5.79.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,5 +1,6 @@
1
1
  import { NEW_NODE_STYLE_DEFAULTS, defaultElementStyleFor, elementStyleById, ownedTraitsOf, applyElementStyle, flavorPackById, parseHexColor, SPEC_AXES, EntranceParam, staggerDelay, LinkType, COLOR_SCHEMES, setColorScheme, resolveDesignChoices, ANIMATE_IDS, auditDesignContrast } from '@vectoriox/iox-ui/design-core';
2
2
  import { formPresetById, FORM_PRESETS, ControlType, FORM_NODE_TYPE, collectFormSpec, FIELD_NODE_TYPE } from '@vectoriox/iox-ui/forms-core';
3
+ import { normalizeFrameSequence, filmScreensFor, FILM_PREPARED_PICTURES, FrameExtension } from '@vectoriox/iox-ui/media-core';
3
4
  import { SEO_DESCRIPTION_MAX, SEO_TITLE_MAX } from '@vectoriox/iox-ui/seo-core';
4
5
  import { pickTabsAutoBinds, pickAccordionAutoBinds, segmentedOptions, ITEM_OPEN_STATE, CardPart, CardRole, CardLayout, CARD_LAYOUTS, CARD_PARTS, BADGE_TONES, buildCardRecipe, findByRole, buildSegmentedRecipe, AccordionRole, buildAccordionRecipe, ACCORDION_WORDS, accordionItems, accordionQuestionOf, accordionAnswerOf, ACCORDION_BIND_PROP, ACCORDION_CONTENT_LIMIT, buildTabsRecipe, TABS_WORDS, tabsTriggers, tabLabelNodeOf, TABS_LABEL_BIND_PROP, tabsPanels, tabPanelTextOf, TABS_TEXT_BIND_PROP, tabPanelImageOf, tabsListOf, tabsPanelsOf, TABS_CONTENT_LIMIT, TABS_IMAGE_BIND_PROP, buildCarouselRecipe, SLIDE_TYPE, buildLightboxRecipe, LIGHTBOX_LABEL, SLIDE_TO_ROW } from '@vectoriox/iox-ui/composite-core';
5
6
  import { ELEMENT_ACTION_DESCRIPTORS, resolveActionAvailability } from '@vectoriox/iox-ui/actions-core';
@@ -18,7 +19,11 @@ const SPEC_SITE_PLAN_SHAPE = {
18
19
  "contentTypes": "contentType[]",
19
20
  "dataSources": "(cmsDataSource | relativeDataSource)[] — merged by alias into the org library",
20
21
  "pages": "page[]",
21
- "globals": "globals"
22
+ "globals": "globals",
23
+ "film?": "film — the owner's film as pictures (SC6b), set by the build and placed by placeFilm; never a model's"
24
+ },
25
+ "film": {
26
+ "sequence": "object — a media-core FrameSequence: where the numbered pictures live, how many, their size"
22
27
  },
23
28
  "sourceTemplate": {
24
29
  "kind": "'template'",
@@ -579,6 +584,157 @@ const SPEC_SITE_PATTERNS = {
579
584
  ]
580
585
  }
581
586
  },
587
+ "hero.scene-object": {
588
+ "family": "hero",
589
+ "scene": true,
590
+ "film": true,
591
+ "label": "Hero — your film plays as you scroll",
592
+ "intent": "The studio's own film plays forward and back with the scroll behind the headline while the page holds still.",
593
+ "node": {
594
+ "t": "Section",
595
+ "es": "section",
596
+ "scheme": "inverse",
597
+ "role": "scene",
598
+ "lay": {
599
+ "position": "relative",
600
+ "display": "block",
601
+ "width": "100%",
602
+ "height": "300vh",
603
+ "padding": "0px"
604
+ },
605
+ "c": [
606
+ {
607
+ "t": "Container",
608
+ "role": "scene.stage",
609
+ "lay": {
610
+ "position": "sticky",
611
+ "top": "0px",
612
+ "display": "block",
613
+ "width": "100%",
614
+ "height": "100svh",
615
+ "overflow": "hidden",
616
+ "padding": "0px"
617
+ },
618
+ "c": [
619
+ {
620
+ "t": "Video",
621
+ "es": "media",
622
+ "film": true,
623
+ "lay": {
624
+ "position": "absolute",
625
+ "top": "0px",
626
+ "left": "0px",
627
+ "width": "100%",
628
+ "height": "100%",
629
+ "aspectRatio": "auto",
630
+ "borderRadius": "0px"
631
+ },
632
+ "tracks": [
633
+ {
634
+ "prop": "play",
635
+ "keys": [
636
+ [
637
+ 0,
638
+ 0
639
+ ],
640
+ [
641
+ 1,
642
+ 100
643
+ ]
644
+ ]
645
+ }
646
+ ]
647
+ },
648
+ {
649
+ "t": "Container",
650
+ "es": "media-scrim",
651
+ "lay": {
652
+ "display": "flex",
653
+ "flexDirection": "column",
654
+ "gap": "14px",
655
+ "position": "absolute",
656
+ "left": "0px",
657
+ "bottom": "0px",
658
+ "width": "100%",
659
+ "padding": "48px 32px 56px 32px"
660
+ },
661
+ "c": [
662
+ {
663
+ "t": "Heading",
664
+ "es": "display",
665
+ "level": "h1",
666
+ "slot": "headline",
667
+ "max": 56,
668
+ "fromBusiness": "name",
669
+ "tracks": [
670
+ {
671
+ "prop": "y",
672
+ "keys": [
673
+ [
674
+ 0,
675
+ 0
676
+ ],
677
+ [
678
+ 1,
679
+ -6
680
+ ]
681
+ ]
682
+ }
683
+ ]
684
+ },
685
+ {
686
+ "t": "Text",
687
+ "es": "lead",
688
+ "slot": "lead",
689
+ "max": 180,
690
+ "fromBusiness": "tagline",
691
+ "ph": "copy",
692
+ "tracks": [
693
+ {
694
+ "prop": "opacity",
695
+ "keys": [
696
+ [
697
+ 0.3,
698
+ 0
699
+ ],
700
+ [
701
+ 0.45,
702
+ 1
703
+ ]
704
+ ]
705
+ }
706
+ ]
707
+ },
708
+ {
709
+ "t": "ButtonBlock",
710
+ "es": "button-primary",
711
+ "href": "/contact",
712
+ "slot": "cta",
713
+ "max": 24,
714
+ "text": "Get in touch",
715
+ "tracks": [
716
+ {
717
+ "prop": "opacity",
718
+ "keys": [
719
+ [
720
+ 0.35,
721
+ 0
722
+ ],
723
+ [
724
+ 0.5,
725
+ 1
726
+ ]
727
+ ]
728
+ }
729
+ ]
730
+ }
731
+ ]
732
+ }
733
+ ]
734
+ }
735
+ ]
736
+ }
737
+ },
582
738
  "story.scene-chapters": {
583
739
  "family": "story",
584
740
  "scene": true,
@@ -5486,6 +5642,11 @@ const SPEC_SITE_LIBRARY = [
5486
5642
  "family": "hero",
5487
5643
  "composed": true
5488
5644
  },
5645
+ {
5646
+ "id": "hero.scene-object",
5647
+ "family": "hero",
5648
+ "composed": true
5649
+ },
5489
5650
  {
5490
5651
  "id": "proof.logo-strip",
5491
5652
  "family": "proof",
@@ -11103,7 +11264,7 @@ const SITE_LIBRARY = SPEC_SITE_LIBRARY;
11103
11264
  */
11104
11265
  function patternManifest(density, options = {}) {
11105
11266
  const scenes = !('animate' in options) || options.animate === SCENE_LEVEL;
11106
- return Object.entries(SITE_PATTERNS).filter(([, p]) => scenes || !p.scene).map(([id, p]) => ({
11267
+ return Object.entries(SITE_PATTERNS).filter(([, p]) => !p.film && (scenes || !p.scene)).map(([id, p]) => ({
11107
11268
  id, family: p.family, label: p.label, intent: p.intent, ...(p.global ? { global: p.global } : {}),
11108
11269
  slots: Object.fromEntries(Object.keys(patternSlotBudgets(p)).map(slot => [slot, slotBudget(p, slot, density)])),
11109
11270
  links: patternLinkSlots(p),
@@ -11455,6 +11616,9 @@ var SitePlanIssueCode;
11455
11616
  /** SC6: a Scene below How animated Expressive, a second Scene on a page, or Scenes on more than the home page and
11456
11617
  * one other — the pages answer by choosing another pattern. */
11457
11618
  SitePlanIssueCode["SceneBudget"] = "scene-budget";
11619
+ /** SC6b: the owner's film — pictures that cannot play, too few to play smoothly, or a film's pattern on a plan with
11620
+ * no film (or twice). Set by the build, never by a model. */
11621
+ SitePlanIssueCode["Film"] = "film";
11458
11622
  })(SitePlanIssueCode || (SitePlanIssueCode = {}));
11459
11623
  class SitePlanError extends Error {
11460
11624
  constructor(issues) {
@@ -11484,6 +11648,7 @@ const SEED_FIXED_KEYS = shapeKeys(SHAPE['seed']);
11484
11648
  const CMS_SOURCE_KEYS = shapeKeys(SHAPE['cmsDataSource']);
11485
11649
  const RELATIVE_SOURCE_KEYS = shapeKeys(SHAPE['relativeDataSource']);
11486
11650
  const PAGE_KEYS = shapeKeys(SHAPE['page']);
11651
+ const FILM_KEYS = shapeKeys(SHAPE['film']);
11487
11652
  const SECTION_KEYS = shapeKeys(SHAPE['section']);
11488
11653
  const GLOBAL_POSITION = {
11489
11654
  [GlobalSlot.Header]: PatternGlobalPosition.Before,
@@ -11934,6 +12099,40 @@ function validateScenes(c, pages, animate) {
11934
12099
  });
11935
12100
  });
11936
12101
  }
12102
+ /** SC6b: a film plays only when its pictures can (and smoothly over the shortest hold); its pattern only with a film, once. */
12103
+ function validateFilm(c, film, pages) {
12104
+ let playable = false;
12105
+ if (film !== undefined) {
12106
+ if (!isPlainObject(film)) {
12107
+ c.add(SitePlanIssueCode.Shape, 'film', 'must be an object');
12108
+ }
12109
+ else {
12110
+ c.keys(film, FILM_KEYS, 'film');
12111
+ const sequence = normalizeFrameSequence(film['sequence']);
12112
+ if (!sequence)
12113
+ c.add(SitePlanIssueCode.Film, 'film.sequence', 'not a film\'s pictures (a media-core FrameSequence)');
12114
+ else if (filmScreensFor(sequence.wide.count) === null)
12115
+ c.add(SitePlanIssueCode.Film, 'film.sequence', `${sequence.wide.count} pictures — too few to play smoothly`);
12116
+ else
12117
+ playable = true;
12118
+ }
12119
+ }
12120
+ let placed = 0;
12121
+ pages.forEach((raw, i) => {
12122
+ if (!isPlainObject(raw) || !Array.isArray(raw['sections']))
12123
+ return;
12124
+ raw['sections'].forEach((s, j) => {
12125
+ const pattern = isPlainObject(s) && typeof s['pattern'] === 'string' ? patternById(s['pattern']) : null;
12126
+ if (!pattern?.film)
12127
+ return;
12128
+ const path = `pages[${i}].sections[${j}].pattern`;
12129
+ if (!playable)
12130
+ c.add(SitePlanIssueCode.Film, path, `"${s['pattern']}" plays the owner's film — this plan has none`);
12131
+ else if (++placed > 1)
12132
+ c.add(SitePlanIssueCode.Film, path, 'the film plays once on a site');
12133
+ });
12134
+ });
12135
+ }
11937
12136
  function validatePageSeo(c, seo, path) {
11938
12137
  if (seo === undefined)
11939
12138
  return;
@@ -11987,6 +12186,7 @@ function validateSitePlan(plan) {
11987
12186
  validatePages(c, c.array(plan, 'pages', ''), types, sources, typeof design['density'] === 'string' ? design['density'] : null);
11988
12187
  validateGlobals(c, plan['globals']);
11989
12188
  validateScenes(c, c.array(plan, 'pages', ''), typeof design['animate'] === 'string' ? design['animate'] : null);
12189
+ validateFilm(c, plan['film'], c.array(plan, 'pages', ''));
11990
12190
  return { valid: c.issues.length === 0, issues: c.issues };
11991
12191
  }
11992
12192
  /** Throw a `SitePlanError` carrying every issue unless the plan is valid. */
@@ -12119,6 +12319,79 @@ function planEntrances(input) {
12119
12319
  });
12120
12320
  }
12121
12321
 
12322
+ /**
12323
+ * The owner's film on a built site (premium sites SC6b). The owner gives a video in Analysis; the wizard's browser makes
12324
+ * it pictures (cms-client `FramesPrepareService`); the build places it. A model never picks the film's pattern — the
12325
+ * manifest and the plan wire leave it out — so ONE pure placement decides where it goes, run by the wizard to draw the
12326
+ * Plan and by the server to build: they cannot disagree.
12327
+ */
12328
+ /** The pattern a film plays in: the one whose Video is marked `film` in the contract. */
12329
+ const FILM_PATTERN = Object.entries(SITE_PATTERNS).find(([, p]) => p.film)?.[0] ?? '';
12330
+ /** Why a film stays off the site. Each is said to the owner on the Plan step. */
12331
+ var FilmUnplaced;
12332
+ (function (FilmUnplaced) {
12333
+ /** How animated is below Expressive: no section holds the page there. */
12334
+ FilmUnplaced["NotExpressive"] = "notExpressive";
12335
+ /** The home page does not open with a hero to play it in. */
12336
+ FilmUnplaced["NoHero"] = "noHero";
12337
+ /** The home page already holds the page elsewhere (one Scene per page). */
12338
+ FilmUnplaced["AnotherScene"] = "anotherScene";
12339
+ /** Too few pictures to play smoothly over the shortest hold (media-core `FILM_MIN_PICTURES`). */
12340
+ FilmUnplaced["TooShort"] = "tooShort";
12341
+ })(FilmUnplaced || (FilmUnplaced = {}));
12342
+ /** Where a film WOULD play on this plan (the Plan step asks before the pictures exist). */
12343
+ function filmPlacement(plan) {
12344
+ if (plan.design.animate !== SCENE_LEVEL)
12345
+ return { unplaced: FilmUnplaced.NotExpressive };
12346
+ const page = plan.pages.findIndex(p => p.isHome);
12347
+ const sections = page >= 0 ? plan.pages[page].sections : [];
12348
+ const first = patternById(sections[0]?.pattern);
12349
+ if (!first || first.family !== FILM_FAMILY)
12350
+ return { unplaced: FilmUnplaced.NoHero };
12351
+ if (sections.slice(1).some(s => patternById(s.pattern)?.scene))
12352
+ return { unplaced: FilmUnplaced.AnotherScene };
12353
+ return { target: { page, section: 0 } };
12354
+ }
12355
+ const FILM_FAMILY = SITE_PATTERNS[FILM_PATTERN]?.family ?? 'hero';
12356
+ /**
12357
+ * The plan with the owner's film in it: `film` set, and the home page's hero becomes the film's pattern, keeping the
12358
+ * hero's words and links that the film's pattern has. A film that cannot play (unreadable, too few pictures) or a plan
12359
+ * with no place for it leaves the plan as it was — the hero keeps its picture, and the builder can add the film later.
12360
+ */
12361
+ function placeFilm(plan, sequence) {
12362
+ const film = normalizeFrameSequence(sequence);
12363
+ if (!film || filmScreensFor(film.wide.count) === null)
12364
+ return { plan, unplaced: FilmUnplaced.TooShort };
12365
+ const placement = filmPlacement(plan);
12366
+ if (!placement.target)
12367
+ return { plan, unplaced: placement.unplaced };
12368
+ const { page, section } = placement.target;
12369
+ const pages = plan.pages.map((p, i) => i !== page ? p : {
12370
+ ...p,
12371
+ sections: p.sections.map((s, j) => (j === section ? filmSection(s) : s)),
12372
+ });
12373
+ return { plan: { ...plan, pages, film: { sequence: film } } };
12374
+ }
12375
+ function filmSection(hero) {
12376
+ const pattern = SITE_PATTERNS[FILM_PATTERN];
12377
+ const slots = new Set(patternSlots(pattern));
12378
+ const links = new Set(patternLinkSlots(pattern));
12379
+ const keep = (values, allowed) => {
12380
+ const kept = Object.entries(values ?? {}).filter(([key]) => allowed.has(key));
12381
+ return kept.length ? Object.fromEntries(kept) : undefined;
12382
+ };
12383
+ const keptSlots = keep(hero.slots, slots);
12384
+ const keptLinks = keep(hero.links, links);
12385
+ return { pattern: FILM_PATTERN, ...(keptSlots ? { slots: keptSlots } : {}), ...(keptLinks ? { links: keptLinks } : {}) };
12386
+ }
12387
+ /** The film's pictures as the composer stamps them, and the height its Scene holds the page for. */
12388
+ function filmOfPlan(plan) {
12389
+ const sequence = normalizeFrameSequence(plan.film?.sequence);
12390
+ const screens = sequence ? filmScreensFor(sequence.wide.count) : null;
12391
+ // A Scene's root holds the page for its height less the one screen its stage fills.
12392
+ return sequence && screens !== null ? { sequence, heightVh: Math.round((screens + 1) * 100) } : null;
12393
+ }
12394
+
12122
12395
  /**
12123
12396
  * The phone shapes of a navigation bar (complex-components plan CC1, §7a + R1; boards 1–3). ONE pure tree
12124
12397
  * edit, `planNavShape`, turns a site's header into the shape the author (the Navigation bar's "Phone
@@ -12795,6 +13068,8 @@ const IMAGE = 'Image';
12795
13068
  const VIDEO = 'Video';
12796
13069
  /** A Video's source prop (media-core `VideoTrait.Source` — not `source`, which names a data source). */
12797
13070
  const VIDEO_SOURCE_PROP = 'videoSource';
13071
+ /** A Video's pictures the scroll plays (media-core `VideoTrait.Frames`). */
13072
+ const VIDEO_FRAMES_PROP = 'frames';
12798
13073
  const DIALOG = 'Dialog';
12799
13074
  const SUBMIT_BUTTON = 'SubmitButton';
12800
13075
  const FORM_SUCCESS = 'FormSuccess';
@@ -13153,6 +13428,15 @@ function composeNode(given, id, repeater, ctx) {
13153
13428
  setProp(node, VIDEO_SOURCE_PROP, 'file');
13154
13429
  setProp(node, 'mode', pn.video);
13155
13430
  }
13431
+ // SC6b: a film pattern's Video plays the owner's pictures (the build places the pattern only with a film).
13432
+ if (pn.film) {
13433
+ if (type !== VIDEO)
13434
+ throw new ComposeError(`${id}: "film" belongs on a Video`);
13435
+ const film = filmOfPlan(ctx.plan);
13436
+ if (!film)
13437
+ throw new ComposeError(`${id}: a film's pattern on a plan with no film`);
13438
+ setProp(node, VIDEO_FRAMES_PROP, film.sequence);
13439
+ }
13156
13440
  if (pn.ph === PatternPlaceholder.Video) {
13157
13441
  setProp(node, 'src', '');
13158
13442
  ctx.placeholders.push({ nodeId: id, owner: ctx.owner, kind: PlaceholderKind.Video, text: '' });
@@ -13598,6 +13882,10 @@ function composePattern(pattern, id, ctx, motion = null) {
13598
13882
  // A Scene moves by the scroll alone: the look's entrances would fade its pinned stage in on arrival (SC6).
13599
13883
  if (motion && !pattern.global && !pattern.scene)
13600
13884
  stampEntrances(node, pattern.family, own.entrances ?? [], motion);
13885
+ // SC6b, the density rule: a film's Scene holds the page as long as its pictures stay smooth, and no longer.
13886
+ const film = pattern.film ? filmOfPlan(ctx.plan) : null;
13887
+ if (film)
13888
+ setStyleProps(node, { height: `${film.heightVh}vh` });
13601
13889
  node.label = pattern.label;
13602
13890
  return node;
13603
13891
  }
@@ -13915,6 +14203,12 @@ function describePlanData(plan) {
13915
14203
  return plan.pages.map(page => ({ pageKey: page.key, lines: pageLines(page, plan, label) }));
13916
14204
  }
13917
14205
 
14206
+ /** SC6b: a film's description for the showcase — as many pictures as the build prepares; nothing is fetched to compose it. */
14207
+ const SHOWCASE_FILM = {
14208
+ base: 'https://showcase.iox.invalid/film', ext: FrameExtension.Webp,
14209
+ wide: { count: FILM_PREPARED_PICTURES, width: 1600, height: 900 },
14210
+ phone: { count: FILM_PREPARED_PICTURES, width: 1100, height: 619 },
14211
+ };
13918
14212
  const ITEM_ROUTE = '/work/:slug';
13919
14213
  const LIST_SOURCE = 'projects';
13920
14214
  const routeOf = (family) => `/${family}`;
@@ -13965,7 +14259,7 @@ function showcaseScenes() {
13965
14259
  /**
13966
14260
  * The showcase as Site Plans — as many as it takes for every header and every footer to be composed once, then one per
13967
14261
  * Scene pattern (SC6): its home page holds that Scene and nothing else, at How animated Expressive, the only level a
13968
- * Scene is composed at.
14262
+ * Scene is composed at; the film's Scene with a film (SC6b).
13969
14263
  */
13970
14264
  function showcasePlans(input) {
13971
14265
  const { headers, footers } = showcaseGlobals();
@@ -13982,7 +14276,11 @@ function showcasePlans(input) {
13982
14276
  pages: JSON.parse(JSON.stringify(planPages)),
13983
14277
  globals: { [GlobalSlot.Header]: headers[i % headers.length], [GlobalSlot.Footer]: footers[i % footers.length] },
13984
14278
  });
13985
- const scenes = showcaseScenes().map((id, i) => plan(i, [{ key: 'home', name: 'Home', route: '/', isHome: true, inNav: false, sections: [sectionFor(id)] }], { ...input.design, animate: SCENE_LEVEL }));
14279
+ const scenes = showcaseScenes().map((id, i) => {
14280
+ const scene = plan(i, [{ key: 'home', name: 'Home', route: '/', isHome: true, inNav: false, sections: [sectionFor(id)] }], { ...input.design, animate: SCENE_LEVEL });
14281
+ // A film's Scene plays a film (SC6b): the plan carries one, as the build's would.
14282
+ return SITE_PATTERNS[id].film ? { ...scene, film: { sequence: JSON.parse(JSON.stringify(input.film ?? SHOWCASE_FILM)) } } : scene;
14283
+ });
13986
14284
  return [...Array.from({ length: count }, (_, i) => plan(i, pages, input.design)), ...scenes];
13987
14285
  }
13988
14286
 
@@ -14389,6 +14687,8 @@ const PLAN_WIRE_DERIVED = {
14389
14687
  sourceTemplate: 'the AI never writes a template plan',
14390
14688
  sourceAi: 'this run (the context)',
14391
14689
  design: "the owner's pick (the context)",
14690
+ 'plan.film': "the owner's film, set by the build (SC6b)",
14691
+ film: "the owner's film, set by the build (SC6b)",
14392
14692
  };
14393
14693
  const wireText = (spec) => {
14394
14694
  const [entry, planKey] = spec.refs[0].split('.');
@@ -14433,9 +14733,9 @@ const NONE = '';
14433
14733
  const orNone = (values) => jsonOneOf([NONE, ...values]);
14434
14734
  const closedOrText = (values) => (values.length ? jsonOneOf(values) : jsonText());
14435
14735
  const shaped = (entry, properties) => jsonShapedObject(PLAN_WIRE_SHAPE[entry], properties, `wire ${entry}`);
14436
- /** The patterns a page section may use (every non-global one), in library order. */
14736
+ /** The patterns a page section may use (every non-global one but a film's, which `placeFilm` places), in library order. */
14437
14737
  function sectionPatternIds() {
14438
- return Object.entries(SITE_PATTERNS).filter(([, p]) => !p.global).map(([id]) => id);
14738
+ return Object.entries(SITE_PATTERNS).filter(([, p]) => !p.global && !p.film).map(([id]) => id);
14439
14739
  }
14440
14740
  const sectionPatterns = () => sectionPatternIds().map(id => SITE_PATTERNS[id]);
14441
14741
  const globalIds = (position) => Object.entries(SITE_PATTERNS).filter(([, p]) => p.global === position).map(([id]) => id);
@@ -16515,5 +16815,5 @@ function addStockCredits(footer, credits) {
16515
16815
  * Generated bundle index. Do not edit.
16516
16816
  */
16517
16817
 
16518
- export { ACTIVE_BUILD_STATUSES, AI_REFUSAL_NEXT, AI_REFUSAL_STATUS, AI_STEPS, AI_STEP_LABELS, AI_STEP_NEEDS, AI_STEP_PART_TOKENS, AI_STEP_TYPICAL_TOKENS, AiCallStatus, AiCapability, AiFeature, AiGenerationStage, AiKeyMode, AiLimit, AiNextKind, AiProviderId, AiRefusalCode, AiStep, BAR_ITEMS_MAX, BAR_ITEMS_MIN, BASELINE_ROLES, BUILD_STEPS, BaselineRole, BindScope, BuildNoticeCode, BuildStep, CONTENT_ROLE_MEANINGS, CREDITS_PER_USD, CardBindTarget, CheckSeverity, ComposeError, ComposeIssueCode, ContentFieldControl, ContentFieldType, ContentRole, ContentTypeAction, CreatedKind, DANGLING_LINK_CODES, DEFAULT_PHONE_MENU_BREAKPOINT, DEFAULT_SITE_LOCALE, ENTRANCE_EASING, ENTRANCE_ORIGIN_LOOK, ENTRANCE_TRIGGER, EntrancePart, EntranceSide, FACT_KEYS, FIELD_TYPE_OF_CONTROL, FINAL_GENERATION_STAGES, FINDING_SEVERITY, GRAMMAR_TOO_LARGE_MESSAGE, GlobalSlot, HEBREW_PREFIXES, JSON_SCHEMA_BANNED_KEYWORDS, JsonSchemaShapeError, KeptReason, NAV_PART_LABELS, NAV_SHAPE_COPY, NEUTRAL_STYLE_PROPS, NODE_BASELINES, NO_TOKENS, NavPagesSource, NavRole, NavShape, NavShapeError, PAGE_ARCHETYPES, PLAN_EDITS_ANSWER_SHAPES, PLAN_EDITS_PART_SCHEMA_NAMES, PLAN_EDIT_OP_PART, PLAN_EDIT_SHAPE, PLAN_EDIT_WIRE_KEYS, PLAN_PARTS, PLAN_PART_KEYS, PLAN_WIRE_DERIVED, PLAN_WIRE_PART_SCHEMA_NAMES, PLAN_WIRE_SHAPE, PRICING_PATTERN, PUBLISH_BLOCKING_PLACEHOLDERS, PageDataKind, PathIssueCollector, PatternDirective, PatternGlobalPosition, PatternOpens, PatternPlaceholder, PatternRecipe, PhoneMenuBreakpoint, PlaceholderKind, PlanChangeAction, PlanChangeKind, PlanDataSourceMode, PlanDataSourceType, PlanEditIssueCode, PlanEditOp, PlanEditsOutcome, PlanPart, PlanWireEntry, PlanWireShapeError, PlanWordIssueCode, PreflightRefusalCode, PublishRefusalCode, REQUIRED_CONTENT_ROLES, RelativeOp, SAMPLE_IMAGE_REF, SCENE_LEVEL, SCENE_OTHER_PAGES, SITE_CHECKS, SITE_FACT_LABELS, SITE_HEADER_PATTERN, SITE_LIBRARY, SITE_LOCALES, SITE_NEED_IDS, SITE_PATTERNS, SITE_PLAN_VERSION, SITE_TEMPLATES, SPEC_SITE_ARCHETYPES, SPEC_SITE_COPY_LENGTHS, SPEC_SITE_DENSITY_COPY, SPEC_SITE_FACTS, SPEC_SITE_LIBRARY, SPEC_SITE_LOCALES, SPEC_SITE_NEED_IDS, SPEC_SITE_PATTERNS, SPEC_SITE_PLAN_SHAPE, SPEC_SITE_REQUIRED_ROLES, SPEC_SITE_ROLES, SPEC_SITE_TEMPLATES, STOCK_FAMILIES, STOCK_FAMILY_INTENTS, STOCK_INTENT_ORDER, STOCK_INTENT_SUBJECTS, STOCK_ITEM_ASPECT, STOCK_MIN_KEPT, STOCK_PROVIDER_TERMS, STOCK_SUBJECT_WORDS, STRICT_SCHEMA_BUDGET, STRICT_SCHEMA_LIMITS, STUDIO_TEMPLATE, SiteBuildKind, SiteBuildStatus, SiteCheckId, SiteFindingCode, SiteLocale, SitePlanError, SitePlanIssueCode, SitePlanSourceKind, SiteTemplateError, SiteTemplateId, StepState, StockIntent, StockOrientation, StockProviderId, StockReviewFlag, StockReviewVerdict, StockSlotKind, StockSubject, addBarItem, addStockCredits, aiStepParts, applyOwnPhotoGalleries, applyPlanEdits, applyStockItemPhotos, applyStockPhotos, archetypeIssues, aspectRatioOf, assertStyleSlots, assertValidSitePlan, auditSite, barIconForRoute, blocksPublish, buildKeys, buildStepFacts, builtHomePageId, composeNavHeader, composeSection, composeSite, contentTypePreviewFields, contentTypeToWire, copyLengthOf, costUsd, createSerializedNode, creditsOfUsd, dataSourceToWire, derivedDataSources, describePlanData, describeShapeKey, entranceAction, entranceInteraction, estimateStepCredits, expandPlanWire, expandWireContentType, expandWireDataSource, expandWireEdit, expandWireField, expandWirePage, expandWireSection, failedBuildStep, fieldToWire, findNavRoot, isActiveBuild, isNonEmptyString, isPlainObject, isRtlLocale, jsonAnyOf, jsonBoolean, jsonClosedObject, jsonInteger, jsonListOf, jsonOneOf, jsonSchemaKeywords, jsonSchemaObjects, jsonShapedObject, jsonText, modelCanDo, moveBarItem, navPages, navShapeBreakpoint, navShapeOf, nextSourceOf, nodeBindPaths, orientationOfRatio, pageToWire, parsePatternPath, parseSampleImageRef, pathAt, patternById, patternHasForm, patternLinkSlots, patternListGap, patternManifest, patternNeedsBinding, patternNodes, patternOptionalParts, patternRoleNeeds, patternScopes, patternSlotBudgets, patternSlots, patternTakesBinding, phoneMenuPages, planEditOps, planEditToWire, planEditWireGaps, planEditWireKeys, planEditWireOps, planEditWireShape, planEditsFromWire, planEditsJsonSchema, planEditsToWire, planEntrances, planFromTemplate, planNavShape, planOwnPhotos, planPartOfPath, planPartToWire, planStockPhotos, planToWire, planWireGaps, planWirePartJsonSchema, planWirePartShape, planWordIssues, publishRefusal, publishVerdict, recipeListBinds, releasedLayoutDefaults, removeBarItem, requiredAcknowledgements, requiredShapeKeys, roleField, routeMatches, routeParams, sampleImageRef, scoreStockPhoto, sectionEntrances, sectionPatternIds, sectionToWire, setStyleProps, shapeKeys, showcaseGlobals, showcasePages, showcasePlans, showcaseScenes, siteNavPages, slotBudget, stockCopyKey, stockCreditLine, stockCreditLines, stockCreditNode, stockCreditNodeId, stockFits, stockGroupOf, stockItemSlots, stockKept, stockPhotoRatio, stockPhotoSubject, stockPhotoUsable, stockPhotoWords, stockSlots, stockWord, stockWords, strictSchemaComplexity, strictSchemaRefusal, typicalStepTokens, validatePlanEdits, validateSitePlan, walkSerialized, wireContentTypeJsonSchema, wireDataSourceJsonSchema, wireFieldJsonSchema, wirePageJsonSchema, wireSectionJsonSchema, withDerivedSources, wordPattern, writtenTexts };
16818
+ export { ACTIVE_BUILD_STATUSES, AI_REFUSAL_NEXT, AI_REFUSAL_STATUS, AI_STEPS, AI_STEP_LABELS, AI_STEP_NEEDS, AI_STEP_PART_TOKENS, AI_STEP_TYPICAL_TOKENS, AiCallStatus, AiCapability, AiFeature, AiGenerationStage, AiKeyMode, AiLimit, AiNextKind, AiProviderId, AiRefusalCode, AiStep, BAR_ITEMS_MAX, BAR_ITEMS_MIN, BASELINE_ROLES, BUILD_STEPS, BaselineRole, BindScope, BuildNoticeCode, BuildStep, CONTENT_ROLE_MEANINGS, CREDITS_PER_USD, CardBindTarget, CheckSeverity, ComposeError, ComposeIssueCode, ContentFieldControl, ContentFieldType, ContentRole, ContentTypeAction, CreatedKind, DANGLING_LINK_CODES, DEFAULT_PHONE_MENU_BREAKPOINT, DEFAULT_SITE_LOCALE, ENTRANCE_EASING, ENTRANCE_ORIGIN_LOOK, ENTRANCE_TRIGGER, EntrancePart, EntranceSide, FACT_KEYS, FIELD_TYPE_OF_CONTROL, FILM_PATTERN, FINAL_GENERATION_STAGES, FINDING_SEVERITY, FilmUnplaced, GRAMMAR_TOO_LARGE_MESSAGE, GlobalSlot, HEBREW_PREFIXES, JSON_SCHEMA_BANNED_KEYWORDS, JsonSchemaShapeError, KeptReason, NAV_PART_LABELS, NAV_SHAPE_COPY, NEUTRAL_STYLE_PROPS, NODE_BASELINES, NO_TOKENS, NavPagesSource, NavRole, NavShape, NavShapeError, PAGE_ARCHETYPES, PLAN_EDITS_ANSWER_SHAPES, PLAN_EDITS_PART_SCHEMA_NAMES, PLAN_EDIT_OP_PART, PLAN_EDIT_SHAPE, PLAN_EDIT_WIRE_KEYS, PLAN_PARTS, PLAN_PART_KEYS, PLAN_WIRE_DERIVED, PLAN_WIRE_PART_SCHEMA_NAMES, PLAN_WIRE_SHAPE, PRICING_PATTERN, PUBLISH_BLOCKING_PLACEHOLDERS, PageDataKind, PathIssueCollector, PatternDirective, PatternGlobalPosition, PatternOpens, PatternPlaceholder, PatternRecipe, PhoneMenuBreakpoint, PlaceholderKind, PlanChangeAction, PlanChangeKind, PlanDataSourceMode, PlanDataSourceType, PlanEditIssueCode, PlanEditOp, PlanEditsOutcome, PlanPart, PlanWireEntry, PlanWireShapeError, PlanWordIssueCode, PreflightRefusalCode, PublishRefusalCode, REQUIRED_CONTENT_ROLES, RelativeOp, SAMPLE_IMAGE_REF, SCENE_LEVEL, SCENE_OTHER_PAGES, SHOWCASE_FILM, SITE_CHECKS, SITE_FACT_LABELS, SITE_HEADER_PATTERN, SITE_LIBRARY, SITE_LOCALES, SITE_NEED_IDS, SITE_PATTERNS, SITE_PLAN_VERSION, SITE_TEMPLATES, SPEC_SITE_ARCHETYPES, SPEC_SITE_COPY_LENGTHS, SPEC_SITE_DENSITY_COPY, SPEC_SITE_FACTS, SPEC_SITE_LIBRARY, SPEC_SITE_LOCALES, SPEC_SITE_NEED_IDS, SPEC_SITE_PATTERNS, SPEC_SITE_PLAN_SHAPE, SPEC_SITE_REQUIRED_ROLES, SPEC_SITE_ROLES, SPEC_SITE_TEMPLATES, STOCK_FAMILIES, STOCK_FAMILY_INTENTS, STOCK_INTENT_ORDER, STOCK_INTENT_SUBJECTS, STOCK_ITEM_ASPECT, STOCK_MIN_KEPT, STOCK_PROVIDER_TERMS, STOCK_SUBJECT_WORDS, STRICT_SCHEMA_BUDGET, STRICT_SCHEMA_LIMITS, STUDIO_TEMPLATE, SiteBuildKind, SiteBuildStatus, SiteCheckId, SiteFindingCode, SiteLocale, SitePlanError, SitePlanIssueCode, SitePlanSourceKind, SiteTemplateError, SiteTemplateId, StepState, StockIntent, StockOrientation, StockProviderId, StockReviewFlag, StockReviewVerdict, StockSlotKind, StockSubject, addBarItem, addStockCredits, aiStepParts, applyOwnPhotoGalleries, applyPlanEdits, applyStockItemPhotos, applyStockPhotos, archetypeIssues, aspectRatioOf, assertStyleSlots, assertValidSitePlan, auditSite, barIconForRoute, blocksPublish, buildKeys, buildStepFacts, builtHomePageId, composeNavHeader, composeSection, composeSite, contentTypePreviewFields, contentTypeToWire, copyLengthOf, costUsd, createSerializedNode, creditsOfUsd, dataSourceToWire, derivedDataSources, describePlanData, describeShapeKey, entranceAction, entranceInteraction, estimateStepCredits, expandPlanWire, expandWireContentType, expandWireDataSource, expandWireEdit, expandWireField, expandWirePage, expandWireSection, failedBuildStep, fieldToWire, filmOfPlan, filmPlacement, findNavRoot, isActiveBuild, isNonEmptyString, isPlainObject, isRtlLocale, jsonAnyOf, jsonBoolean, jsonClosedObject, jsonInteger, jsonListOf, jsonOneOf, jsonSchemaKeywords, jsonSchemaObjects, jsonShapedObject, jsonText, modelCanDo, moveBarItem, navPages, navShapeBreakpoint, navShapeOf, nextSourceOf, nodeBindPaths, orientationOfRatio, pageToWire, parsePatternPath, parseSampleImageRef, pathAt, patternById, patternHasForm, patternLinkSlots, patternListGap, patternManifest, patternNeedsBinding, patternNodes, patternOptionalParts, patternRoleNeeds, patternScopes, patternSlotBudgets, patternSlots, patternTakesBinding, phoneMenuPages, placeFilm, planEditOps, planEditToWire, planEditWireGaps, planEditWireKeys, planEditWireOps, planEditWireShape, planEditsFromWire, planEditsJsonSchema, planEditsToWire, planEntrances, planFromTemplate, planNavShape, planOwnPhotos, planPartOfPath, planPartToWire, planStockPhotos, planToWire, planWireGaps, planWirePartJsonSchema, planWirePartShape, planWordIssues, publishRefusal, publishVerdict, recipeListBinds, releasedLayoutDefaults, removeBarItem, requiredAcknowledgements, requiredShapeKeys, roleField, routeMatches, routeParams, sampleImageRef, scoreStockPhoto, sectionEntrances, sectionPatternIds, sectionToWire, setStyleProps, shapeKeys, showcaseGlobals, showcasePages, showcasePlans, showcaseScenes, siteNavPages, slotBudget, stockCopyKey, stockCreditLine, stockCreditLines, stockCreditNode, stockCreditNodeId, stockFits, stockGroupOf, stockItemSlots, stockKept, stockPhotoRatio, stockPhotoSubject, stockPhotoUsable, stockPhotoWords, stockSlots, stockWord, stockWords, strictSchemaComplexity, strictSchemaRefusal, typicalStepTokens, validatePlanEdits, validateSitePlan, walkSerialized, wireContentTypeJsonSchema, wireDataSourceJsonSchema, wireFieldJsonSchema, wirePageJsonSchema, wireSectionJsonSchema, withDerivedSources, wordPattern, writtenTexts };
16519
16819
  //# sourceMappingURL=vectoriox-iox-ui-generation-core.mjs.map