@vectoriox/iox-builder 11.12.1 → 11.14.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.
|
@@ -17,12 +17,13 @@ import { TooltipModule } from 'primeng/tooltip';
|
|
|
17
17
|
import * as i20 from 'primeng/dialog';
|
|
18
18
|
import { DialogModule } from 'primeng/dialog';
|
|
19
19
|
import * as i1$1 from '@vectoriox/iox-ui';
|
|
20
|
-
import { nodeCssId, needsGroupName, resolveBoundValue, STRUCTURAL_STATES as STRUCTURAL_STATES$1, VALIDATION_STATES as VALIDATION_STATES$1, VALIDATION_STATE_CLASS as VALIDATION_STATE_CLASS$1, DEFAULT_WIDTH_BY_TYPE, TEXT_DIRECTION_KEY, TEXT_ALIGN_KEY, TextAlign, COLOR_SCHEME_TRAIT, COLOR_SCHEMES, ColorScheme, LinkType, MAX_LINES_KEY, A11yTrait, BREAKPOINTS, Breakpoint, withSchemeInk, stripSuppressedProps, DeclarationContext, planPartRule, gateHoverRule, planResponsiveRules, resolveStyleProps, planStateRule, splitOuterProps, OUTER_STYLE_PROPS, compileTokenCssBlocks, catalogFontId, fontsForTokens, GOOGLE_FONTS_FILE_ORIGIN, googleFontHref, compileDeclarations, isLastEmittedStateKey, wrapInBreakpointQuery, BreakpointQueryKind, NEW_NODE_STYLE_DEFAULTS, defaultElementStyleFor, applyElementStyle, planDataSource, dataSourcePlanToRequest, normalizeCollectionResult, resolveRepeaterItems, getByPath, computeRelative, ContextStore, ENTRANCE_ACTION_TYPES, EXIT_ACTION_TYPES, ComponentInstanceRegistryService, entranceStartsHidden, isActionEnabled, splitPressFeedback, isHoverPointer, isContextAction, contextActionEffect, resolveContextValue, effectiveActionType, INTERACTION_HIDDEN_ATTRIBUTE, motionAllowed, settleInteraction, settleModeFor, playInteraction, resolveInteractionEasing, entranceDelay, repeatedRowIndex, entrancePreStateStyle, buildInteractionKeyframes, cascadeChain, declaredInputNames, emptyImagePlaceholder, syncNodeDesignClasses, nodeTraitValue, syncNodeA11yAttributes, nodeA11yAttributes, safeSetInput, colorSchemeOf, withStateTransitions, composeVirtualTraits, stateNamesIn, partClassName, switchElementStyle, releaseElementStyle, countOverrides, setOverride, breakpointDef, breakpointForWidth, FormRenderState, needsAccessibleName, resolveInputs, setInputOverride, barReserveClass, collectContextSlotKeys, withContextSlots, compilePageStyle, nodeUsesContext, isScrolled, SCROLLED_ATTRIBUTE, syncSubmitButtons, IS_PREVIEW, buttonBlockHref, bootSlider, IoxPageModule, PALETTE_PRESETS, elementStyleById, PART_CLASS_NAMES } from '@vectoriox/iox-ui';
|
|
20
|
+
import { nodeCssId, needsGroupName, resolveBoundValue, STRUCTURAL_STATES as STRUCTURAL_STATES$1, VALIDATION_STATES as VALIDATION_STATES$1, VALIDATION_STATE_CLASS as VALIDATION_STATE_CLASS$1, DEFAULT_WIDTH_BY_TYPE, TEXT_DIRECTION_KEY, TEXT_ALIGN_KEY, TextAlign, COLOR_SCHEME_TRAIT, COLOR_SCHEMES, ColorScheme, LinkType, MAX_LINES_KEY, A11yTrait, BREAKPOINTS, Breakpoint, withSchemeInk, stripSuppressedProps, DeclarationContext, planPartRule, gateHoverRule, planResponsiveRules, resolveStyleProps, planStateRule, splitOuterProps, OUTER_STYLE_PROPS, compileTokenCssBlocks, catalogFontId, fontsForTokens, GOOGLE_FONTS_FILE_ORIGIN, googleFontHref, compileDeclarations, isLastEmittedStateKey, wrapInBreakpointQuery, BreakpointQueryKind, NEW_NODE_STYLE_DEFAULTS, defaultElementStyleFor, applyElementStyle, planDataSource, dataSourcePlanToRequest, normalizeCollectionResult, resolveRepeaterItems, getByPath, computeRelative, ContextStore, ENTRANCE_ACTION_TYPES, EXIT_ACTION_TYPES, ComponentInstanceRegistryService, entranceStartsHidden, isActionEnabled, splitPressFeedback, isHoverPointer, isContextAction, contextActionEffect, resolveContextValue, effectiveActionType, INTERACTION_HIDDEN_ATTRIBUTE, motionAllowed, settleInteraction, settleModeFor, playInteraction, resolveInteractionEasing, entranceDelay, repeatedRowIndex, entrancePreStateStyle, buildInteractionKeyframes, cascadeChain, declaredInputNames, emptyImagePlaceholder, syncNodeDesignClasses, nodeTraitValue, syncNodeA11yAttributes, nodeA11yAttributes, safeSetInput, colorSchemeOf, withStateTransitions, composeVirtualTraits, stateNamesIn, partClassName, switchElementStyle, releaseElementStyle, countOverrides, setOverride, breakpointDef, breakpointForWidth, FormRenderState, needsAccessibleName, resolveInputs, setInputOverride, barReserveClass, collectContextSlotKeys, withContextSlots, compilePageStyle, nodeUsesContext, hidingHeadersIn, HeaderRuntime, isScrolled, SCROLLED_ATTRIBUTE, syncSubmitButtons, IS_PREVIEW, buttonBlockHref, bootSlider, IoxPageModule, PALETTE_PRESETS, elementStyleById, PART_CLASS_NAMES } from '@vectoriox/iox-ui';
|
|
21
21
|
export { ComponentInstanceRegistryService, VIRTUAL_TRAIT_KEYS, composeVirtualTraits } from '@vectoriox/iox-ui';
|
|
22
|
-
import { StructureEdit, isAccordionPart, isDisclosurePart, isSliderPart, isTabsPart, isSegmentedPart, structureRefusal, StructureRefusal, SegmentedRole, SEGMENTED_MAX_OPTIONS, AccordionRole, SEGMENTED_MIN_OPTIONS, isExclusiveItemPart, TabsRole, ITEM_OPEN_STATE, readStyle, isSegmentedRoot, segmentedDefaultOn, segmentedOptions, isTabsRoot, isTabsFromContent, tabsTriggers, isAccordionRoot, isAccordionFromContent, accordionItems, initialAccordionOpen, accordionBehaviour, exclusiveItemLabel, exclusiveRootOf, tabTriggerOf, tabLabel, removeTabPair, tabPanelOf, tabsListOf, tabsPanelsOf, nextTabKey, CompositeBehaviourTrait, ACCORDION_DEFAULT_ONS, TabsBehaviourTrait, TABS_ACTIVATE_ONS, TABS_ORIENTATIONS, onCompositeItemState, isCompositeItemOn, runCompositeItemAction, shouldScrollToItem, rowIndexOf as rowIndexOf$1, slideIndexForRow, DisclosureRole, isExclusiveTrigger, compositeScopeId, compositeRowKeys, isExclusiveRoot, ExclusiveRuntime, exclusiveDefaultOf, exclusiveLabelOf, exclusiveBehaviourOf, exclusiveKindOf, compositeKindOfRole, AccordionRuntime, isToggleKind, closestAccordionItem, isAnyCompositeRoot, SceneRole, isExclusiveList, buildCardRecipe, buildBadge, buildChip, buildAccordionRecipe, buildDisclosureRecipe, buildTabsRecipe, buildSegmentedRecipe, buildLightboxRecipe, NO_ELEMENT_STYLE, CompositeKind, SliderRole, accordionItemLabel, segmentedOptionLabel, isExclusivePanels, isLockedPart, accordionRootOf, accordionItemOf, addAccordionItem, addTabPair, segmentedAddRefusal, addSegmentedOption, isCompositeItem, accordionHeadingLevel, isCompositePanel, isCompositeTrigger, splitSliderChildren, hasSliderParts } from '@vectoriox/iox-ui/composite-core';
|
|
23
|
-
import { formContentInHost, isInteractiveHost, findFormContentInHosts } from '@vectoriox/iox-ui/forms-core';
|
|
22
|
+
import { StructureEdit, isAccordionPart, isDisclosurePart, isSliderPart, isTabsPart, isSegmentedPart, structureRefusal, StructureRefusal, SegmentedRole, SEGMENTED_MAX_OPTIONS, AccordionRole, SEGMENTED_MIN_OPTIONS, isExclusiveItemPart, TabsRole, ITEM_OPEN_STATE, readStyle, isSegmentedRoot, segmentedDefaultOn, segmentedOptions, isTabsRoot, isTabsFromContent, tabsTriggers, isAccordionRoot, isAccordionFromContent, accordionItems, initialAccordionOpen, accordionBehaviour, exclusiveItemLabel, exclusiveRootOf, tabTriggerOf, tabLabel, removeTabPair, tabPanelOf, tabsListOf, tabsPanelsOf, nextTabKey, CompositeBehaviourTrait, ACCORDION_DEFAULT_ONS, TabsBehaviourTrait, TABS_ACTIVATE_ONS, TABS_ORIENTATIONS, onCompositeItemState, isCompositeItemOn, runCompositeItemAction, shouldScrollToItem, rowIndexOf as rowIndexOf$1, slideIndexForRow, DisclosureRole, isExclusiveTrigger, compositeScopeId, compositeRowKeys, isExclusiveRoot, ExclusiveRuntime, exclusiveDefaultOf, exclusiveLabelOf, exclusiveBehaviourOf, exclusiveKindOf, compositeKindOfRole, AccordionRuntime, isToggleKind, closestAccordionItem, isAnyCompositeRoot, SceneRole, isExclusiveList, buildCardRecipe, buildBadge, buildChip, buildAccordionRecipe, buildDisclosureRecipe, buildTabsRecipe, buildSegmentedRecipe, buildLightboxRecipe, NO_ELEMENT_STYLE, CompositeKind, SliderRole, accordionItemLabel, segmentedOptionLabel, isExclusivePanels, isLockedPart, accordionRootOf, accordionItemOf, addAccordionItem, addTabPair, segmentedAddRefusal, addSegmentedOption, isCompositeItem, accordionHeadingLevel, isCompositePanel, isCompositeTrigger, splitSliderChildren, hasSliderParts, SLIDE_CAPTION_TRAIT, SLIDER_SCROLL_PLAYS_TRAIT, SLIDER_PLACEMENT_TRAIT, SliderPlacement, SliderFlag } from '@vectoriox/iox-ui/composite-core';
|
|
23
|
+
import { formContentInHost, isInteractiveHost, findFormContentInHosts, FORM_CHANNEL_ROLE, channelHref, channelOpensNewTab, FORM_ACTIONS_ROLE, SUBMIT_BUTTON_NODE_TYPE } from '@vectoriox/iox-ui/forms-core';
|
|
24
24
|
import { Subject, BehaviorSubject, of, forkJoin } from 'rxjs';
|
|
25
25
|
import interact from 'interactjs';
|
|
26
|
+
import { HeaderTrait, HeaderBehaviour, HeaderEdge } from '@vectoriox/iox-ui/design-core';
|
|
26
27
|
import { map, catchError } from 'rxjs/operators';
|
|
27
28
|
import * as i1 from '@angular/common/http';
|
|
28
29
|
import { itemActionOf, BEHAVIOUR_ACTION_TYPES, SERVER_ELEMENT_ACTION_TYPES, CONSENT_ACTION_TYPES, opensAtClickedItem, openedDialogId, DIALOG_CLOSING_ATTRIBUTE, cancelExit, runExitMotion } from '@vectoriox/iox-ui/actions-core';
|
|
@@ -1941,6 +1942,24 @@ function buildCompositeBehaviourTraits() {
|
|
|
1941
1942
|
new TraitConfig(TabsBehaviourTrait.Label, 'Accessible name', TraitInputType.Text),
|
|
1942
1943
|
];
|
|
1943
1944
|
}
|
|
1945
|
+
/**
|
|
1946
|
+
* How a header behaves as the page scrolls (premium components T2, M4) — on the Navigation bar's root. No default: a
|
|
1947
|
+
* plain Container saves none; edited in the Navigation bar's Header section, never as generic rows.
|
|
1948
|
+
*/
|
|
1949
|
+
function buildHeaderBehaviourTraits() {
|
|
1950
|
+
return [
|
|
1951
|
+
new TraitConfig(HeaderTrait.Behaviour, 'Header behaviour', TraitInputType.Select, [
|
|
1952
|
+
{ label: 'Scrolls away', value: HeaderBehaviour.Scrolls },
|
|
1953
|
+
{ label: 'Stays at the top', value: HeaderBehaviour.Stays },
|
|
1954
|
+
{ label: 'Hides while scrolling down', value: HeaderBehaviour.Hides },
|
|
1955
|
+
]),
|
|
1956
|
+
new TraitConfig(HeaderTrait.Edge, 'Edge when scrolled', TraitInputType.Select, [
|
|
1957
|
+
{ label: 'Fade', value: HeaderEdge.Fade },
|
|
1958
|
+
{ label: 'Line', value: HeaderEdge.Line },
|
|
1959
|
+
{ label: 'None', value: HeaderEdge.None },
|
|
1960
|
+
]),
|
|
1961
|
+
];
|
|
1962
|
+
}
|
|
1944
1963
|
const LINK_TARGETS = [
|
|
1945
1964
|
{ label: 'Same tab', value: '_self' },
|
|
1946
1965
|
{ label: 'New tab', value: '_blank' },
|
|
@@ -5412,6 +5431,8 @@ function syncNodeDesign(ref, node, emptyLabel) {
|
|
|
5412
5431
|
syncEmptyImagePlaceholder(ref, node, emptyLabel);
|
|
5413
5432
|
}
|
|
5414
5433
|
|
|
5434
|
+
/** The Field type, whose Date control has a design-time Open state on the canvas. */
|
|
5435
|
+
const FIELD_TYPE = 'Field';
|
|
5415
5436
|
// Module-level counter — unique drop-list ID per Section instance across the whole app session.
|
|
5416
5437
|
let dropListCounter = 0;
|
|
5417
5438
|
/**
|
|
@@ -5685,6 +5706,12 @@ class RenderDirective {
|
|
|
5685
5706
|
// safeSetInput for every component that does not declare it.
|
|
5686
5707
|
if (node.responsive)
|
|
5687
5708
|
safeSetInput(componentRef, 'responsive', node.responsive);
|
|
5709
|
+
// A Date field's design-time Open state (premium N8): "Showing on canvas ▸ Open" draws its calendar under it so
|
|
5710
|
+
// the author can style the Calendar parts — the R2 state every hidden-at-rest part reads (CC1.3 / CC2).
|
|
5711
|
+
if (node.type === FIELD_TYPE && this.designState && node.id) {
|
|
5712
|
+
const id = node.id;
|
|
5713
|
+
this.childSubs.push(this.designState.state$.subscribe(() => safeSetInput(componentRef, 'designOpen', this.designState.isShown(id))));
|
|
5714
|
+
}
|
|
5688
5715
|
// Empty images (DS3): a MARKED Image shows the shared placeholder whenever its source is empty —
|
|
5689
5716
|
// the "Add image" label on the editing canvas, the bare blank anywhere else (Preview), which is
|
|
5690
5717
|
// what the live site shows. An unmarked Image gets null and renders exactly as before. Set from
|
|
@@ -9766,6 +9793,8 @@ class BuilderComponent {
|
|
|
9766
9793
|
if (target?.closest?.('a[href]'))
|
|
9767
9794
|
event.preventDefault();
|
|
9768
9795
|
};
|
|
9796
|
+
/** The canvas's hiding headers (premium M4, T2) — the SAME runtime the live site runs, fed the canvas's scroll. */
|
|
9797
|
+
this.headerRuntimes = new Map();
|
|
9769
9798
|
this._scrollbarTimer = null;
|
|
9770
9799
|
}
|
|
9771
9800
|
ngOnInit() {
|
|
@@ -9966,6 +9995,9 @@ class BuilderComponent {
|
|
|
9966
9995
|
this.moveableCanvas.destroy();
|
|
9967
9996
|
this.selectoCanvas.destroy();
|
|
9968
9997
|
this.destroyLenis();
|
|
9998
|
+
for (const runtime of this.headerRuntimes.values())
|
|
9999
|
+
runtime.destroy();
|
|
10000
|
+
this.headerRuntimes.clear();
|
|
9969
10001
|
this.canvasRo?.disconnect();
|
|
9970
10002
|
this.previewFrameRo?.disconnect();
|
|
9971
10003
|
this.beforeGlobalsRo?.disconnect();
|
|
@@ -10007,6 +10039,30 @@ class BuilderComponent {
|
|
|
10007
10039
|
this.globalOverlayRef?.nativeElement?.style.setProperty('--preview-vw', vwVal);
|
|
10008
10040
|
this.canvasFrameHeight = Math.round(frameH);
|
|
10009
10041
|
}
|
|
10042
|
+
/**
|
|
10043
|
+
* A header that hides on the canvas steps aside as the author scrolls down and comes back on the way up, exactly as
|
|
10044
|
+
* on the live site. The headers live in the global overlay (outside Lenis); Lenis's scroll is visual px, so it is
|
|
10045
|
+
* divided by the zoom. A header that went (a re-render, its behaviour changed) has its runtime dropped.
|
|
10046
|
+
*/
|
|
10047
|
+
syncHeaderRuntimes(visualOffset) {
|
|
10048
|
+
const overlay = this.globalOverlayRef?.nativeElement;
|
|
10049
|
+
const live = new Set(overlay ? hidingHeadersIn(overlay) : []);
|
|
10050
|
+
for (const [el, runtime] of this.headerRuntimes) {
|
|
10051
|
+
if (!live.has(el)) {
|
|
10052
|
+
runtime.destroy();
|
|
10053
|
+
this.headerRuntimes.delete(el);
|
|
10054
|
+
}
|
|
10055
|
+
}
|
|
10056
|
+
const offset = visualOffset / (this.viewportService.getState().scale || 1);
|
|
10057
|
+
for (const el of live) {
|
|
10058
|
+
let runtime = this.headerRuntimes.get(el);
|
|
10059
|
+
if (!runtime) {
|
|
10060
|
+
runtime = new HeaderRuntime(el);
|
|
10061
|
+
this.headerRuntimes.set(el, runtime);
|
|
10062
|
+
}
|
|
10063
|
+
runtime.update(offset);
|
|
10064
|
+
}
|
|
10065
|
+
}
|
|
10010
10066
|
/** Keep the Scrolled attribute (iox-ui SCROLLED_ATTRIBUTE) on the canvas page and the header overlay — written only
|
|
10011
10067
|
* when it changes, so the overlay's mutation observers never wake for a scroll tick. */
|
|
10012
10068
|
syncScrolled(offset) {
|
|
@@ -10032,6 +10088,7 @@ class BuilderComponent {
|
|
|
10032
10088
|
this.sceneCanvas?.pinNow();
|
|
10033
10089
|
// The Scrolled state (G4) on the canvas: the page and its header globals know the canvas has moved.
|
|
10034
10090
|
this.syncScrolled(instance.scroll);
|
|
10091
|
+
this.syncHeaderRuntimes(instance.scroll);
|
|
10035
10092
|
const clientH = this.previewScrollRef.nativeElement.clientHeight;
|
|
10036
10093
|
this.onPageScroll({
|
|
10037
10094
|
scrollTop: instance.scroll,
|
|
@@ -11956,12 +12013,28 @@ class SliderContainerComponent {
|
|
|
11956
12013
|
// override the dir-driven direction with the generic Layout default → RTL wouldn't apply.
|
|
11957
12014
|
// Rebuild cached objects so ngStyle only re-applies on real input changes (avoids MO spam).
|
|
11958
12015
|
const { direction: _dropDirection, ...rest } = v || {};
|
|
11959
|
-
this.
|
|
11960
|
-
this.
|
|
12016
|
+
this._restStyle = rest;
|
|
12017
|
+
this.composeStageStyles();
|
|
12018
|
+
}
|
|
12019
|
+
/** A slider the scroll plays is a sticky stage (it never engages on the canvas, where the driver pins it, so its top
|
|
12020
|
+
* never offsets the shell; in Preview it holds the slider mid-screen). */
|
|
12021
|
+
composeStageStyles() {
|
|
12022
|
+
const stage = this.scrollPlays ? { position: 'sticky' } : null;
|
|
12023
|
+
this._previewStyle = stage ? { ...this._restStyle, ...stage } : this._restStyle;
|
|
12024
|
+
this._editShellStyle = { ...this._restStyle, position: stage ? 'sticky' : 'relative' };
|
|
11961
12025
|
}
|
|
11962
12026
|
get style() { return this._style; }
|
|
11963
12027
|
get previewStyle() { return this._previewStyle; }
|
|
11964
12028
|
get editShellStyle() { return this._editShellStyle; }
|
|
12029
|
+
/** Premium M4: the page's scroll plays it (held mid-screen, resting on each picture). */
|
|
12030
|
+
set scrollPlays(value) {
|
|
12031
|
+
const on = value === true || value === 'true';
|
|
12032
|
+
if (on === this._scrollPlays)
|
|
12033
|
+
return;
|
|
12034
|
+
this._scrollPlays = on;
|
|
12035
|
+
this.composeStageStyles();
|
|
12036
|
+
}
|
|
12037
|
+
get scrollPlays() { return this._scrollPlays; }
|
|
11965
12038
|
get source() { return this._source; }
|
|
11966
12039
|
set source(value) {
|
|
11967
12040
|
if (value === this._source)
|
|
@@ -12004,6 +12077,7 @@ class SliderContainerComponent {
|
|
|
12004
12077
|
this._style = {};
|
|
12005
12078
|
this._previewStyle = {};
|
|
12006
12079
|
this._editShellStyle = { position: 'relative' };
|
|
12080
|
+
this._restStyle = {};
|
|
12007
12081
|
this.nodeId = '';
|
|
12008
12082
|
this.dropListId = '';
|
|
12009
12083
|
// ── Parameters ─────────────────────────────────────────────────────────────
|
|
@@ -12022,6 +12096,7 @@ class SliderContainerComponent {
|
|
|
12022
12096
|
// ── Effects ────────────────────────────────────────────────────────────────
|
|
12023
12097
|
this.effect = 'slide';
|
|
12024
12098
|
this.speed = 300;
|
|
12099
|
+
this._scrollPlays = false;
|
|
12025
12100
|
// ── Navigation ─────────────────────────────────────────────────────────────
|
|
12026
12101
|
this.enableNavigation = false;
|
|
12027
12102
|
this.navigationColor = '';
|
|
@@ -12063,6 +12138,9 @@ class SliderContainerComponent {
|
|
|
12063
12138
|
this.instanceRegistry = inject(ComponentInstanceRegistryService);
|
|
12064
12139
|
this.interactionEngine = inject(InteractionEngineService);
|
|
12065
12140
|
this.ngZone = inject(NgZone);
|
|
12141
|
+
/** The canvas's (and Preview's) ONE scene driver — it plays a slider the scroll plays. */
|
|
12142
|
+
this.sceneCanvas = inject(SceneCanvasService, { optional: true });
|
|
12143
|
+
this.sceneAttached = null;
|
|
12066
12144
|
this.isPreview = !!isPreview;
|
|
12067
12145
|
}
|
|
12068
12146
|
ngOnInit() {
|
|
@@ -12104,7 +12182,7 @@ class SliderContainerComponent {
|
|
|
12104
12182
|
'enableScrollbar', 'enableAutoplay',
|
|
12105
12183
|
'enableKeyboard', 'enableMousewheel', 'enableZoom', 'enableGrid', 'enableParallax',
|
|
12106
12184
|
'autoplayDelay', 'autoplayPauseOnMouseEnter', 'autoplayDisableOnInteraction',
|
|
12107
|
-
'gridRows',
|
|
12185
|
+
'gridRows', 'scrollPlays',
|
|
12108
12186
|
]);
|
|
12109
12187
|
// Edit mode also reinits when children change (new slide added or removed)
|
|
12110
12188
|
const editKeys = new Set([...previewKeys, 'children']);
|
|
@@ -12120,8 +12198,21 @@ class SliderContainerComponent {
|
|
|
12120
12198
|
ngOnDestroy() {
|
|
12121
12199
|
cancelAnimationFrame(this._initRafId);
|
|
12122
12200
|
this._destroySwiper();
|
|
12201
|
+
this.syncSceneDriver(false);
|
|
12123
12202
|
this._bindingSub?.unsubscribe();
|
|
12124
12203
|
}
|
|
12204
|
+
/** Hand the runway to the scene driver while the scroll plays the slider, and take it back when it stops. */
|
|
12205
|
+
syncSceneDriver(on) {
|
|
12206
|
+
const runway = this.runwayEl?.nativeElement ?? null;
|
|
12207
|
+
if (this.sceneAttached && (!on || this.sceneAttached !== runway)) {
|
|
12208
|
+
this.sceneCanvas?.detach(this.sceneAttached);
|
|
12209
|
+
this.sceneAttached = null;
|
|
12210
|
+
}
|
|
12211
|
+
if (on && runway && !this.sceneAttached) {
|
|
12212
|
+
this.sceneCanvas?.attach(runway, !this.isPreview, this.nodeId);
|
|
12213
|
+
this.sceneAttached = runway;
|
|
12214
|
+
}
|
|
12215
|
+
}
|
|
12125
12216
|
trackByNodeId(_index, node) {
|
|
12126
12217
|
return node.id ?? String(_index);
|
|
12127
12218
|
}
|
|
@@ -12218,6 +12309,7 @@ class SliderContainerComponent {
|
|
|
12218
12309
|
return;
|
|
12219
12310
|
this._swiper = swiper;
|
|
12220
12311
|
this.instanceRegistry.register(this.nodeId, this._swiper);
|
|
12312
|
+
this.syncSceneDriver(this.scrollPlays);
|
|
12221
12313
|
}
|
|
12222
12314
|
swiperInputs() {
|
|
12223
12315
|
return {
|
|
@@ -12229,7 +12321,7 @@ class SliderContainerComponent {
|
|
|
12229
12321
|
enableZoom: this.enableZoom, enableGrid: this.enableGrid, enableParallax: this.enableParallax, autoplayDelay: this.autoplayDelay,
|
|
12230
12322
|
autoplayPauseOnMouseEnter: this.autoplayPauseOnMouseEnter, autoplayDisableOnInteraction: this.autoplayDisableOnInteraction,
|
|
12231
12323
|
paginationType: this.paginationType, paginationClickable: this.paginationClickable, paginationDynamicBullets: this.paginationDynamicBullets,
|
|
12232
|
-
gridRows: this.gridRows, breakpoints: this.breakpoints,
|
|
12324
|
+
gridRows: this.gridRows, breakpoints: this.breakpoints, scrollPlays: this.scrollPlays,
|
|
12233
12325
|
};
|
|
12234
12326
|
}
|
|
12235
12327
|
_destroySwiper() {
|
|
@@ -12254,7 +12346,11 @@ class SliderContainerComponent {
|
|
|
12254
12346
|
}
|
|
12255
12347
|
}
|
|
12256
12348
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: SliderContainerComponent, deps: [{ token: DragEngineService }, { token: i0.ChangeDetectorRef }, { token: IS_PREVIEW, optional: true }, { token: OverlayService, optional: true }, { token: BuilderDataSourceService, optional: true }, { token: DataSourceRegistryService, optional: true }, { token: PanelEventService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12257
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.31", type: SliderContainerComponent, isStandalone: false, selector: "app-slider-container", inputs: { children: "children", style: "style", nodeId: "nodeId", dropListId: "dropListId", dir: "dir", direction: "direction", slidesPerView: "slidesPerView", slidesPerGroup: "slidesPerGroup", loop: "loop", centeredSlides: "centeredSlides", spaceBetween: "spaceBetween", initialSlide: "initialSlide", autoHeight: "autoHeight", grabCursor: "grabCursor", slideToClickedSlide: "slideToClickedSlide", effect: "effect", speed: "speed", enableNavigation: "enableNavigation", navigationColor: "navigationColor", navigationSize: "navigationSize", enablePagination: "enablePagination", paginationColor: "paginationColor", paginationType: "paginationType", paginationClickable: "paginationClickable", paginationDynamicBullets: "paginationDynamicBullets", enableAutoplay: "enableAutoplay", autoplayDelay: "autoplayDelay", autoplayPauseOnMouseEnter: "autoplayPauseOnMouseEnter", autoplayDisableOnInteraction: "autoplayDisableOnInteraction", enableScrollbar: "enableScrollbar", freeMode: "freeMode", enableKeyboard: "enableKeyboard", enableMousewheel: "enableMousewheel", enableZoom: "enableZoom", enableParallax: "enableParallax", enableGrid: "enableGrid", gridRows: "gridRows", breakpoints: "breakpoints", source: "source", limit: "limit" }, outputs: { childClick: "childClick", childMouseEnter: "childMouseEnter", childMouseLeave: "childMouseLeave" }, viewQueries: [{ propertyName: "swiperEl", first: true, predicate: ["swiperEl"], descendants: true }, { propertyName: "editSwiperEl", first: true, predicate: ["editSwiperEl"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
12349
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.31", type: SliderContainerComponent, isStandalone: false, selector: "app-slider-container", inputs: { children: "children", style: "style", nodeId: "nodeId", dropListId: "dropListId", dir: "dir", direction: "direction", slidesPerView: "slidesPerView", slidesPerGroup: "slidesPerGroup", loop: "loop", centeredSlides: "centeredSlides", spaceBetween: "spaceBetween", initialSlide: "initialSlide", autoHeight: "autoHeight", grabCursor: "grabCursor", slideToClickedSlide: "slideToClickedSlide", effect: "effect", speed: "speed", scrollPlays: "scrollPlays", enableNavigation: "enableNavigation", navigationColor: "navigationColor", navigationSize: "navigationSize", enablePagination: "enablePagination", paginationColor: "paginationColor", paginationType: "paginationType", paginationClickable: "paginationClickable", paginationDynamicBullets: "paginationDynamicBullets", enableAutoplay: "enableAutoplay", autoplayDelay: "autoplayDelay", autoplayPauseOnMouseEnter: "autoplayPauseOnMouseEnter", autoplayDisableOnInteraction: "autoplayDisableOnInteraction", enableScrollbar: "enableScrollbar", freeMode: "freeMode", enableKeyboard: "enableKeyboard", enableMousewheel: "enableMousewheel", enableZoom: "enableZoom", enableParallax: "enableParallax", enableGrid: "enableGrid", gridRows: "gridRows", breakpoints: "breakpoints", source: "source", limit: "limit" }, outputs: { childClick: "childClick", childMouseEnter: "childMouseEnter", childMouseLeave: "childMouseLeave" }, viewQueries: [{ propertyName: "runwayEl", first: true, predicate: ["runwayEl"], descendants: true, static: true }, { propertyName: "swiperEl", first: true, predicate: ["swiperEl"], descendants: true }, { propertyName: "editSwiperEl", first: true, predicate: ["editSwiperEl"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
12350
|
+
<!-- Premium M4: a slider the SCROLL plays sits in its runway — the Scene root the ONE scene driver drives (pinned
|
|
12351
|
+
with translate on the canvas, sticky in Preview). Otherwise the wrapper is display: contents. -->
|
|
12352
|
+
<div #runwayEl [class.iox-slider-runway]="scrollPlays" [attr.data-iox-scene]="scrollPlays ? '' : null"
|
|
12353
|
+
[style.display]="scrollPlays ? null : 'contents'">
|
|
12258
12354
|
<!-- EDIT MODE: shell wraps swiper + nav buttons so arrows position relative to slide area -->
|
|
12259
12355
|
<div *ngIf="!isPreview"
|
|
12260
12356
|
class="slider-edit-shell"
|
|
@@ -12424,11 +12520,16 @@ class SliderContainerComponent {
|
|
|
12424
12520
|
<div *ngIf="legacyControls && enablePagination" class="swiper-pagination"></div>
|
|
12425
12521
|
<div *ngIf="enableScrollbar" class="swiper-scrollbar"></div>
|
|
12426
12522
|
</div>
|
|
12523
|
+
</div>
|
|
12427
12524
|
`, isInline: true, styles: [":host{display:block}.swiper-wrapper{height:auto}.slider-edit-shell{position:relative;display:block}.swiper-edit{width:100%}.swiper-edit .swiper-slide{position:relative}.slider-edit-nav{position:absolute;top:50%;transform:translateY(-50%);width:32px;height:32px;border-radius:50%;border:1px solid rgba(255,255,255,.5);background:#00000038;color:#fff;font-size:16px;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;transition:background .15s}.slider-edit-nav:hover{background:#00000073}.slider-edit-nav--prev{left:8px}.slider-edit-nav--next{right:8px}.slider-edit-placeholder{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border:1.5px dashed rgba(100,116,139,.35);border-radius:4px;color:#64748b80;font-size:12px;pointer-events:none;-webkit-user-select:none;user-select:none}.slider-edit-placeholder i{font-size:22px}.slider-repeat-badge{position:absolute;top:0;left:0;z-index:10;display:flex;align-items:center;gap:.4rem;padding:4px 8px;font-size:11px;color:#cb9090;background:#cb909014;border:1px solid rgba(203,144,144,.5);border-radius:0 0 4px;opacity:0;transition:opacity .15s;-webkit-user-select:none;user-select:none;pointer-events:none}.slider-edit-shell:hover .slider-repeat-badge{opacity:1}.slider-repeat-badge-count{font-weight:600}.slider-badge-spin{animation:slider-badge-spin 1s linear infinite}@keyframes slider-badge-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.slider-preview-slide{opacity:.55;pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: RenderDirective, selector: "[ioxRender]", inputs: ["ioxRender", "ioxDragSourceId", "ioxPhrasing"], outputs: ["onClick", "onMouseEnter", "onMouseLeave"] }, { kind: "directive", type: IoxDraggableDirective, selector: "[ioxDraggable]", inputs: ["ioxDragData", "ioxDragSourceId", "ioxDragDisabled"] }, { kind: "directive", type: IoxDropzoneDirective, selector: "[ioxDropzone]", inputs: ["ioxDropzoneId", "ioxDropzoneData", "ioxDropzonePostDrop"], outputs: ["ioxDrop"] }] }); }
|
|
12428
12525
|
}
|
|
12429
12526
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: SliderContainerComponent, decorators: [{
|
|
12430
12527
|
type: Component,
|
|
12431
12528
|
args: [{ selector: 'app-slider-container', template: `
|
|
12529
|
+
<!-- Premium M4: a slider the SCROLL plays sits in its runway — the Scene root the ONE scene driver drives (pinned
|
|
12530
|
+
with translate on the canvas, sticky in Preview). Otherwise the wrapper is display: contents. -->
|
|
12531
|
+
<div #runwayEl [class.iox-slider-runway]="scrollPlays" [attr.data-iox-scene]="scrollPlays ? '' : null"
|
|
12532
|
+
[style.display]="scrollPlays ? null : 'contents'">
|
|
12432
12533
|
<!-- EDIT MODE: shell wraps swiper + nav buttons so arrows position relative to slide area -->
|
|
12433
12534
|
<div *ngIf="!isPreview"
|
|
12434
12535
|
class="slider-edit-shell"
|
|
@@ -12598,6 +12699,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
|
|
|
12598
12699
|
<div *ngIf="legacyControls && enablePagination" class="swiper-pagination"></div>
|
|
12599
12700
|
<div *ngIf="enableScrollbar" class="swiper-scrollbar"></div>
|
|
12600
12701
|
</div>
|
|
12702
|
+
</div>
|
|
12601
12703
|
`, standalone: false, styles: [":host{display:block}.swiper-wrapper{height:auto}.slider-edit-shell{position:relative;display:block}.swiper-edit{width:100%}.swiper-edit .swiper-slide{position:relative}.slider-edit-nav{position:absolute;top:50%;transform:translateY(-50%);width:32px;height:32px;border-radius:50%;border:1px solid rgba(255,255,255,.5);background:#00000038;color:#fff;font-size:16px;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;transition:background .15s}.slider-edit-nav:hover{background:#00000073}.slider-edit-nav--prev{left:8px}.slider-edit-nav--next{right:8px}.slider-edit-placeholder{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border:1.5px dashed rgba(100,116,139,.35);border-radius:4px;color:#64748b80;font-size:12px;pointer-events:none;-webkit-user-select:none;user-select:none}.slider-edit-placeholder i{font-size:22px}.slider-repeat-badge{position:absolute;top:0;left:0;z-index:10;display:flex;align-items:center;gap:.4rem;padding:4px 8px;font-size:11px;color:#cb9090;background:#cb909014;border:1px solid rgba(203,144,144,.5);border-radius:0 0 4px;opacity:0;transition:opacity .15s;-webkit-user-select:none;user-select:none;pointer-events:none}.slider-edit-shell:hover .slider-repeat-badge{opacity:1}.slider-repeat-badge-count{font-weight:600}.slider-badge-spin{animation:slider-badge-spin 1s linear infinite}@keyframes slider-badge-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.slider-preview-slide{opacity:.55;pointer-events:none}\n"] }]
|
|
12602
12704
|
}], ctorParameters: () => [{ type: DragEngineService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
|
12603
12705
|
type: Optional
|
|
@@ -12646,6 +12748,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
|
|
|
12646
12748
|
type: Input
|
|
12647
12749
|
}], speed: [{
|
|
12648
12750
|
type: Input
|
|
12751
|
+
}], scrollPlays: [{
|
|
12752
|
+
type: Input
|
|
12649
12753
|
}], enableNavigation: [{
|
|
12650
12754
|
type: Input
|
|
12651
12755
|
}], navigationColor: [{
|
|
@@ -12698,6 +12802,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
|
|
|
12698
12802
|
type: Output
|
|
12699
12803
|
}], childMouseLeave: [{
|
|
12700
12804
|
type: Output
|
|
12805
|
+
}], runwayEl: [{
|
|
12806
|
+
type: ViewChild,
|
|
12807
|
+
args: ['runwayEl', { static: true }]
|
|
12701
12808
|
}], swiperEl: [{
|
|
12702
12809
|
type: ViewChild,
|
|
12703
12810
|
args: ['swiperEl', { static: false }]
|
|
@@ -13236,13 +13343,30 @@ function buildFormPreset(def, createConfig) {
|
|
|
13236
13343
|
setTrait(field, 'optionsText', spec.optionsText);
|
|
13237
13344
|
if (spec.rows)
|
|
13238
13345
|
setTrait(field, 'rows', spec.rows);
|
|
13346
|
+
if (spec.multiple)
|
|
13347
|
+
setTrait(field, 'multiple', true);
|
|
13348
|
+
if (spec.appearance)
|
|
13349
|
+
setTrait(field, 'appearance', spec.appearance);
|
|
13350
|
+
if (spec.earliest !== undefined)
|
|
13351
|
+
setTrait(field, 'earliest', spec.earliest);
|
|
13352
|
+
if (spec.latest !== undefined)
|
|
13353
|
+
setTrait(field, 'latest', spec.latest);
|
|
13239
13354
|
children.push(field);
|
|
13240
13355
|
}
|
|
13241
13356
|
const submit = createConfig('SubmitButton');
|
|
13242
13357
|
if (!submit)
|
|
13243
13358
|
return null;
|
|
13244
13359
|
setTrait(submit, 'label', def.submitLabel);
|
|
13245
|
-
|
|
13360
|
+
if (def.channel) {
|
|
13361
|
+
// Send and the second channel share ONE row (premium N2) — it stays on screen after the form has sent.
|
|
13362
|
+
const row = buildFormActionsRow(submit, def.channel, '', createConfig);
|
|
13363
|
+
if (!row)
|
|
13364
|
+
return null;
|
|
13365
|
+
children.push(row);
|
|
13366
|
+
}
|
|
13367
|
+
else {
|
|
13368
|
+
children.push(submit);
|
|
13369
|
+
}
|
|
13246
13370
|
// Both state blocks, every time. They are not optional: a form without them is the silent-form
|
|
13247
13371
|
// failure this design exists to prevent (decision D7).
|
|
13248
13372
|
const success = createConfig('FormSuccess');
|
|
@@ -13272,6 +13396,14 @@ const FIELD_KIND_PRESETS = Object.freeze([
|
|
|
13272
13396
|
label: 'Pick one',
|
|
13273
13397
|
optionsText: 'First choice\nSecond choice\nThird choice',
|
|
13274
13398
|
},
|
|
13399
|
+
{
|
|
13400
|
+
// Premium N1: chips — one or several of a few visible choices; tap to pick, the arrow keys move a one-answer row.
|
|
13401
|
+
control: 'choices', name: 'Choice chips', icon: 'ph-thin ph-list-checks',
|
|
13402
|
+
description: 'Pick one or several, as chips. The answer is the words picked.',
|
|
13403
|
+
label: 'What do you need?',
|
|
13404
|
+
optionsText: 'First choice\nSecond choice\nThird choice',
|
|
13405
|
+
multiple: true,
|
|
13406
|
+
},
|
|
13275
13407
|
{
|
|
13276
13408
|
control: 'select', name: 'Dropdown', icon: 'ph-thin ph-caret-circle-down',
|
|
13277
13409
|
description: 'Pick one from a list that folds away.',
|
|
@@ -13303,8 +13435,118 @@ function buildFieldKindPreset(def, createConfig) {
|
|
|
13303
13435
|
setTrait(field, 'control', def.control);
|
|
13304
13436
|
if (def.optionsText)
|
|
13305
13437
|
setTrait(field, 'optionsText', def.optionsText);
|
|
13438
|
+
if (def.multiple)
|
|
13439
|
+
setTrait(field, 'multiple', true);
|
|
13306
13440
|
return field;
|
|
13307
13441
|
}
|
|
13442
|
+
/** The element style a second channel wears: the quieter button beside Send. */
|
|
13443
|
+
const CHANNEL_STYLE = 'button-secondary';
|
|
13444
|
+
const BUTTON_LABEL_STYLE$1 = 'button-label';
|
|
13445
|
+
/**
|
|
13446
|
+
* The second channel (premium N2): a ButtonBlock that links, wearing the secondary button, its words a Text wearing
|
|
13447
|
+
* `button-label`, the role `form.channel`. Its address is the OWNER's — built from what they typed by forms-core
|
|
13448
|
+
* `channelHref`, '' when they typed nothing (the Publishable gate then blocks publishing: never a made-up number).
|
|
13449
|
+
*/
|
|
13450
|
+
function buildFormChannel(channel, input, createConfig) {
|
|
13451
|
+
const button = createConfig('ButtonBlock');
|
|
13452
|
+
const words = textNode(channel.label, createConfig);
|
|
13453
|
+
if (!button || !words)
|
|
13454
|
+
return null;
|
|
13455
|
+
button.role = FORM_CHANNEL_ROLE;
|
|
13456
|
+
setTrait(button, 'tag', 'a');
|
|
13457
|
+
setTrait(button, 'linkType', 'external');
|
|
13458
|
+
setChannelAddress(button, channel.kind, input);
|
|
13459
|
+
if (button.elementStyle !== CHANNEL_STYLE)
|
|
13460
|
+
switchElementStyle(button, button.elementStyle, CHANNEL_STYLE);
|
|
13461
|
+
if (words.elementStyle !== BUTTON_LABEL_STYLE$1)
|
|
13462
|
+
switchElementStyle(words, words.elementStyle, BUTTON_LABEL_STYLE$1);
|
|
13463
|
+
button.children = [words];
|
|
13464
|
+
return button;
|
|
13465
|
+
}
|
|
13466
|
+
/** Point a channel at what the author typed — the address, and a new tab for WhatsApp and a web link. */
|
|
13467
|
+
function setChannelAddress(button, kind, input) {
|
|
13468
|
+
setTrait(button, 'href', channelHref(kind, input));
|
|
13469
|
+
setTrait(button, 'target', channelOpensNewTab(kind) ? '_blank' : '_self');
|
|
13470
|
+
}
|
|
13471
|
+
/**
|
|
13472
|
+
* The form's actions row (role `form.actions`): Send, then the channel, side by side, wrapping on a narrow screen. A
|
|
13473
|
+
* FieldGroup — the form's own layout row — so the shared form CSS keeps it on screen after a success.
|
|
13474
|
+
*/
|
|
13475
|
+
function buildFormActionsRow(submit, channel, input, createConfig) {
|
|
13476
|
+
const row = createConfig('FieldGroup');
|
|
13477
|
+
const link = buildFormChannel(channel, input, createConfig);
|
|
13478
|
+
if (!row || !link)
|
|
13479
|
+
return null;
|
|
13480
|
+
row.role = FORM_ACTIONS_ROLE;
|
|
13481
|
+
setStyle(row, 'flexWrap', 'wrap');
|
|
13482
|
+
setStyle(row, 'alignItems', 'center');
|
|
13483
|
+
setStyle(row, 'gap', '12px');
|
|
13484
|
+
row.children = [submit, link];
|
|
13485
|
+
return row;
|
|
13486
|
+
}
|
|
13487
|
+
/** The form's second channel node, if it has one (anywhere in its subtree, never inside a nested form). */
|
|
13488
|
+
function formChannelOf(form) {
|
|
13489
|
+
const visit = (nodes) => {
|
|
13490
|
+
for (const n of nodes ?? []) {
|
|
13491
|
+
if (n.role === FORM_CHANNEL_ROLE)
|
|
13492
|
+
return n;
|
|
13493
|
+
if (n.type === 'Form')
|
|
13494
|
+
continue;
|
|
13495
|
+
const hit = visit(n.children);
|
|
13496
|
+
if (hit)
|
|
13497
|
+
return hit;
|
|
13498
|
+
}
|
|
13499
|
+
return null;
|
|
13500
|
+
};
|
|
13501
|
+
return visit(form?.children);
|
|
13502
|
+
}
|
|
13503
|
+
/**
|
|
13504
|
+
* "Add a second way to reach you" on an existing form (premium N2): the channel goes beside the form's FIRST submit
|
|
13505
|
+
* button — the submit moves into a new actions row in its place, or the channel joins the row it is already in. Null
|
|
13506
|
+
* when the form already has one or has no submit button. Mutates the form's tree; the caller records the undo step.
|
|
13507
|
+
*/
|
|
13508
|
+
function addFormChannel(form, channel, input, createConfig) {
|
|
13509
|
+
if (formChannelOf(form))
|
|
13510
|
+
return null;
|
|
13511
|
+
const found = findWithParent(form, n => n.type === SUBMIT_BUTTON_NODE_TYPE);
|
|
13512
|
+
if (!found)
|
|
13513
|
+
return null;
|
|
13514
|
+
const { node: submit, parent } = found;
|
|
13515
|
+
const siblings = parent.children;
|
|
13516
|
+
if (parent.role === FORM_ACTIONS_ROLE) {
|
|
13517
|
+
const link = buildFormChannel(channel, input, createConfig);
|
|
13518
|
+
if (!link)
|
|
13519
|
+
return null;
|
|
13520
|
+
siblings.splice(siblings.indexOf(submit) + 1, 0, link);
|
|
13521
|
+
return link;
|
|
13522
|
+
}
|
|
13523
|
+
const row = buildFormActionsRow(submit, channel, input, createConfig);
|
|
13524
|
+
if (!row)
|
|
13525
|
+
return null;
|
|
13526
|
+
siblings.splice(siblings.indexOf(submit), 1, row);
|
|
13527
|
+
return formChannelOf(row);
|
|
13528
|
+
}
|
|
13529
|
+
function findWithParent(root, match) {
|
|
13530
|
+
for (const child of root.children ?? []) {
|
|
13531
|
+
if (match(child))
|
|
13532
|
+
return { node: child, parent: root };
|
|
13533
|
+
if (child.type === 'Form')
|
|
13534
|
+
continue;
|
|
13535
|
+
const hit = findWithParent(child, match);
|
|
13536
|
+
if (hit)
|
|
13537
|
+
return hit;
|
|
13538
|
+
}
|
|
13539
|
+
return null;
|
|
13540
|
+
}
|
|
13541
|
+
function setStyle(node, prop, value) {
|
|
13542
|
+
for (const group of (node.styleTraits ?? [])) {
|
|
13543
|
+
const trait = group?.traits?.find((t) => t?.name === prop);
|
|
13544
|
+
if (trait) {
|
|
13545
|
+
trait.default = value;
|
|
13546
|
+
return;
|
|
13547
|
+
}
|
|
13548
|
+
}
|
|
13549
|
+
}
|
|
13308
13550
|
function textNode(content, createConfig) {
|
|
13309
13551
|
const text = createConfig('Text');
|
|
13310
13552
|
if (!text)
|
|
@@ -14013,6 +14255,7 @@ class BuilderContainerComponentConfig extends ComponentConfig {
|
|
|
14013
14255
|
new TraitConfig('htmlTag', 'HTML Tag', TraitInputType.Select, ['div', 'section', 'article', 'header', 'footer', 'main', 'nav', 'ul', 'ol', 'li'], 'div'),
|
|
14014
14256
|
buildColorSchemeTrait(),
|
|
14015
14257
|
...buildCompositeBehaviourTraits(),
|
|
14258
|
+
...buildHeaderBehaviourTraits(),
|
|
14016
14259
|
];
|
|
14017
14260
|
this.styleTraits = buildFullStyleTraits();
|
|
14018
14261
|
this.applyStyleDefaults({
|
|
@@ -14160,7 +14403,25 @@ const FIELD_PARTS = [
|
|
|
14160
14403
|
{ key: 'help', label: 'Note', className: PART_CLASS_NAMES['Field']['help'] },
|
|
14161
14404
|
{ key: 'error', label: 'Error message', className: PART_CLASS_NAMES['Field']['error'] },
|
|
14162
14405
|
{ key: 'required', label: 'Required mark', className: PART_CLASS_NAMES['Field']['required'] },
|
|
14406
|
+
// Premium M3: a Choices field's chip (N1) and a Date's calendar and its days (N8 — shown on the canvas by
|
|
14407
|
+
// "Showing on canvas ▸ Open"). Their look is the contract's `chip` / `calendar` / `calendar-day`; a part style
|
|
14408
|
+
// here is this field's own.
|
|
14409
|
+
{ key: 'chip', label: 'Choice chip', className: PART_CLASS_NAMES['Field']['chip'] },
|
|
14410
|
+
{ key: 'calendar', label: 'Calendar', className: PART_CLASS_NAMES['Field']['calendar'] },
|
|
14411
|
+
{ key: 'calendarDay', label: 'Calendar day', className: PART_CLASS_NAMES['Field']['calendarDay'] },
|
|
14163
14412
|
];
|
|
14413
|
+
/** The Field traits the Bindings panel's Field section edits (premium M3) — never generic rows, so every word is a
|
|
14414
|
+
* translation key: a Choices field's appearance and "several", a Date's Earliest / Latest. */
|
|
14415
|
+
var FieldTrait;
|
|
14416
|
+
(function (FieldTrait) {
|
|
14417
|
+
FieldTrait["Control"] = "control";
|
|
14418
|
+
FieldTrait["Multiple"] = "multiple";
|
|
14419
|
+
FieldTrait["Appearance"] = "appearance";
|
|
14420
|
+
FieldTrait["Earliest"] = "earliest";
|
|
14421
|
+
FieldTrait["Latest"] = "latest";
|
|
14422
|
+
})(FieldTrait || (FieldTrait = {}));
|
|
14423
|
+
/** The SubmitButton's "Sent" words (premium N2) — empty: the catalog's "Sent" in the page's language. */
|
|
14424
|
+
const SENT_LABEL_TRAIT = 'sentLabel';
|
|
14164
14425
|
/** Every style group — the state blocks and field group are ordinary containers to style. */
|
|
14165
14426
|
const fullStyles = () => buildFullStyleTraits();
|
|
14166
14427
|
/** Layout-ish groups for a form shell: it arranges fields, it is not text. */
|
|
@@ -14264,6 +14525,8 @@ class FieldComponentConfig extends ComponentConfig {
|
|
|
14264
14525
|
{ label: 'Checkbox', value: 'checkbox' },
|
|
14265
14526
|
{ label: 'Switch', value: 'switch' },
|
|
14266
14527
|
{ label: 'Radio group', value: 'radio' },
|
|
14528
|
+
// Premium N1: one or several of a few visible choices, as chips (or the look's rows).
|
|
14529
|
+
{ label: 'Choices', value: 'choices' },
|
|
14267
14530
|
{ label: 'Slider', value: 'range' },
|
|
14268
14531
|
{ label: 'Date', value: 'date' },
|
|
14269
14532
|
{ label: 'Time', value: 'time' },
|
|
@@ -14274,7 +14537,16 @@ class FieldComponentConfig extends ComponentConfig {
|
|
|
14274
14537
|
// enforcement nor the file. See forms-and-inputs-plan.md → Remaining work P0/1.
|
|
14275
14538
|
{ label: 'Hidden', value: 'hidden' },
|
|
14276
14539
|
], 'text'),
|
|
14277
|
-
new TraitConfig('placeholder', 'Hint inside the box', TraitInputType.Text, undefined, '', false, { trait: 'control', values: ['text', 'email', 'tel', 'url', 'number', 'password', 'textarea', 'select'] }),
|
|
14540
|
+
new TraitConfig('placeholder', 'Hint inside the box', TraitInputType.Text, undefined, '', false, { trait: 'control', values: ['text', 'email', 'tel', 'url', 'number', 'password', 'textarea', 'select', 'date'] }),
|
|
14541
|
+
// Choices (N1) and Date (N8): edited in the Bindings panel's own Field section (cms-client), whose words
|
|
14542
|
+
// are translated — hidden from the generic rows there.
|
|
14543
|
+
new TraitConfig(FieldTrait.Multiple, 'Several can be chosen', TraitInputType.Checkbox, undefined, false, false, { trait: 'control', values: 'choices' }),
|
|
14544
|
+
new TraitConfig(FieldTrait.Appearance, 'Appearance', TraitInputType.Select, [
|
|
14545
|
+
{ label: 'Chips', value: 'chips' },
|
|
14546
|
+
{ label: 'List', value: 'list' },
|
|
14547
|
+
], 'chips', false, { trait: 'control', values: 'choices' }),
|
|
14548
|
+
new TraitConfig(FieldTrait.Earliest, 'Earliest', TraitInputType.Text, undefined, '', false, { trait: 'control', values: 'date' }),
|
|
14549
|
+
new TraitConfig(FieldTrait.Latest, 'Latest', TraitInputType.Text, undefined, '', false, { trait: 'control', values: 'date' }),
|
|
14278
14550
|
new TraitConfig('help', 'Help text', TraitInputType.Text, undefined, ''),
|
|
14279
14551
|
new TraitConfig('rows', 'Rows', TraitInputType.Number, undefined, 4, false, { trait: 'control', values: 'textarea' }),
|
|
14280
14552
|
new TraitConfig('rangeMin', 'Min', TraitInputType.Number, undefined, 0, false, { trait: 'control', values: 'range' }),
|
|
@@ -14287,7 +14559,7 @@ class FieldComponentConfig extends ComponentConfig {
|
|
|
14287
14559
|
new TraitConfig('__optionsLabel', 'Options', TraitInputType.SectionLabel),
|
|
14288
14560
|
// One per line, `value|Label` or just the label. A richer editor arrives with bound
|
|
14289
14561
|
// options in Phase 2; this keeps v1 to one control instead of a new trait type.
|
|
14290
|
-
new TraitConfig('optionsText', 'Choices (one per line)', TraitInputType.Textarea, undefined, '', false, { trait: 'control', values: ['select', 'radio'] }),
|
|
14562
|
+
new TraitConfig('optionsText', 'Choices (one per line)', TraitInputType.Textarea, undefined, '', false, { trait: 'control', values: ['select', 'radio', 'choices'] }),
|
|
14291
14563
|
new TraitConfig('__validationLabel', 'What this field demands', TraitInputType.SectionLabel),
|
|
14292
14564
|
new TraitConfig('required', 'They must fill it in', TraitInputType.Checkbox, undefined, false),
|
|
14293
14565
|
// The additive rule list (minLength, pattern, matches, …). Unused rules are invisible
|
|
@@ -14323,6 +14595,8 @@ class SubmitButtonComponentConfig extends ComponentConfig {
|
|
|
14323
14595
|
this.traits = [
|
|
14324
14596
|
new TraitConfig('label', 'Label', TraitInputType.Text, undefined, 'Send'),
|
|
14325
14597
|
new TraitConfig('loadingLabel', 'While sending', TraitInputType.Text, undefined, 'Sending…'),
|
|
14598
|
+
// Premium N2: what it says once the form has sent, beside a check drawn once. Empty: "Sent".
|
|
14599
|
+
new TraitConfig(SENT_LABEL_TRAIT, 'Once sent', TraitInputType.Text, undefined, ''),
|
|
14326
14600
|
new TraitConfig('disableWhileSubmitting', 'Disable while sending', TraitInputType.Checkbox, undefined, true),
|
|
14327
14601
|
];
|
|
14328
14602
|
this.styleTraits = fullStyles();
|
|
@@ -14641,7 +14915,10 @@ class SliderSlideConfig extends ComponentConfig {
|
|
|
14641
14915
|
{ value: 'swiperSlideActive', label: 'This Slide Becomes Active', icon: 'ph-thin ph-eye' },
|
|
14642
14916
|
{ value: 'swiperSlideInactive', label: 'This Slide Becomes Inactive', icon: 'ph-thin ph-eye-slash' },
|
|
14643
14917
|
];
|
|
14644
|
-
|
|
14918
|
+
// Premium M4 (M1.3): the words the Slider's Caption part shows while this slide is in view (bindable per row).
|
|
14919
|
+
this.traits = [
|
|
14920
|
+
new TraitConfig(SLIDE_CAPTION_TRAIT, 'Caption', TraitInputType.Text, undefined, ''),
|
|
14921
|
+
];
|
|
14645
14922
|
this.styleTraits = [
|
|
14646
14923
|
new PositionGroupStyleConfig(),
|
|
14647
14924
|
new LayoutGroupStyleConfig(),
|
|
@@ -14732,8 +15009,16 @@ class SliderContainerConfig extends ComponentConfig {
|
|
|
14732
15009
|
{ label: 'Creative', value: 'creative' },
|
|
14733
15010
|
], 'slide'),
|
|
14734
15011
|
new TraitConfig('speed', 'Transition duration (ms)', TraitInputType.Scrub, undefined, 300),
|
|
15012
|
+
// Premium M4: the page's scroll plays it — held mid-screen, resting on each picture (laptop and phone).
|
|
15013
|
+
new TraitConfig(SLIDER_SCROLL_PLAYS_TRAIT, 'Scroll plays it', TraitInputType.Checkbox, undefined, false),
|
|
14735
15014
|
// ── Navigation ────────────────────────────────────────────────────
|
|
14736
15015
|
new TraitConfig('__navLabel', 'Navigation', TraitInputType.SectionLabel),
|
|
15016
|
+
// Premium M4 (M1.3): where the controls sit — in a bar UNDER the picture (caption · count · arrows, the new
|
|
15017
|
+
// Slider's default) or over it (every slider saved before M4). Once a slider has controls, its structure
|
|
15018
|
+
// decides (composite-core sliderPlacementOf); changing it moves the same parts (setSliderPlacement).
|
|
15019
|
+
new TraitConfig(SLIDER_PLACEMENT_TRAIT, 'Controls', TraitInputType.SelectButton, [{ label: 'Under the picture', value: SliderPlacement.Under }, { label: 'Over the picture', value: SliderPlacement.Over }], SliderPlacement.Under),
|
|
15020
|
+
new TraitConfig(SliderFlag.Caption, 'Caption', TraitInputType.Checkbox, undefined, false, undefined, { trait: SLIDER_PLACEMENT_TRAIT, values: SliderPlacement.Under }),
|
|
15021
|
+
new TraitConfig(SliderFlag.Count, 'Count (1 / 3)', TraitInputType.Checkbox, undefined, false, undefined, { trait: SLIDER_PLACEMENT_TRAIT, values: SliderPlacement.Under }),
|
|
14737
15022
|
new TraitConfig('enableNavigation', 'Navigation arrows', TraitInputType.Checkbox, undefined, false),
|
|
14738
15023
|
new TraitConfig('navigationColor', 'Color', TraitInputType.Color, undefined, '#ffffff', undefined, { trait: 'enableNavigation', values: 'true' }),
|
|
14739
15024
|
new TraitConfig('navigationSize', 'Size (px)', TraitInputType.Scrub, undefined, 44, undefined, { trait: 'enableNavigation', values: 'true' }),
|
|
@@ -14807,5 +15092,5 @@ class BuilderSpacerComponentConfig extends ComponentConfig {
|
|
|
14807
15092
|
* Generated bundle index. Do not edit.
|
|
14808
15093
|
*/
|
|
14809
15094
|
|
|
14810
|
-
export { ACTION_TYPE_OPTIONS, AuditCode, AuditPanelComponent, AuditSeverity, BODY_CRUMB_LABEL, BOUND_ICON, BREAKPOINT_PRESENTATION, BUILDER_CANVAS_CONTAINER, BUILDER_CHROME_EN, BUILDER_FONT_LINK_ATTR, BUILDER_TOKEN_SCOPE_CLASS, BackgroundGroupStyleConfig, BorderGroupStyleConfig, BreadcrumbBarComponent, BuilderButtonBlockComponent, BuilderButtonComponentConfig, BuilderClipboardService, BuilderComponent, BuilderContainerComponent, BuilderContainerComponentConfig, BuilderDataSourceService, BuilderDialogComponent, BuilderDividerComponentConfig, BuilderHeadingComponentConfig, BuilderHistoryService, BuilderIconComponentConfig, BuilderImageComponentConfig, BuilderLinkComponentConfig, BuilderLinkedContainerComponent, BuilderLinkedContainerConfig, BuilderListComponentConfig, BuilderListItemComponentConfig, BuilderMode, BuilderRepeaterComponent, BuilderSpacerComponentConfig, BusinessSpecimenView, ButtonBlockComponentConfig, CANVAS_EMPTY_IMAGE_LABEL_EN, CANVAS_EMPTY_IMAGE_LABEL_KEY, CANVAS_ROOT_RESET_CSS, COMPOSITE_PRESETS, CanvasDesignStateService, CanvasShowState, CardComponentConfig, ChildLayoutGroupStyleConfig, ComponentConfig, ComponentRegistryService, CompositeCanvasService, CompositePaletteGroup, CompositePresetId, DEFAULT_ESSENTIAL_TRAITS, DESCRIPTOR_MAX_LENGTH, DRAG_HANDLE_ATTR, DROP_REFUSED_CLASS, DataSourceRegistryService, DataSourceType, DialogComponentConfig, DimensionsGroupStyleConfig, DragEngineService, EASING_OPTIONS, EDITOR_CHROME_ATTRIBUTE, ESSENTIAL_TRAITS_BY_TYPE, EffectsGroupStyleConfig, FIELD_KIND_PRESETS, FIELD_PARTS, FORM_STATE_BLOCK_TYPES, FORM_TYPE, FieldComponentConfig, FieldGroupComponentConfig, FormComponentConfig, FormErrorComponentConfig, FormStateService, FormSuccessComponentConfig, GLOBALS_AFTER_CLASS, GalleryConfig, GlobalCanvasLayer, GroupStyleConfig, HIDDEN_AT_REST_LABEL_KEY, HIDDEN_AT_REST_ROLES, HIDDEN_AT_REST_TYPES, INSERT_REFUSAL_LABEL_KEYS, INTERACTION_STATES, INVERSE_ACTION, IOX_BUILDER_CANVAS, IOX_BUILDER_LABELS, IOX_CONTENT_TYPE_LABELS, IOX_DATA_SOURCE_ENDPOINTS, InsertRefusal, InteractionEngineService, InteractionPresetRegistryService, IoxBuilderModule, IoxDraggableDirective, IoxDropzoneDirective, LAYOUT_PRESETS, LayerTreeComponent, LayoutGroupStyleConfig, ListGroupStyleConfig, NodeAction, OverlayComponent, OverlayService, PAGE_TRANSITION_EASING_OPTIONS, PALETTE_PRESET_DEFS, PanelChildComponent, PanelComponent, PanelEventService, PanelEventTypes, PanelTypes, PhoneMenuOpenerAction, PositionGroupStyleConfig, PresetRegistryService, RELATIONAL_STATES, RELATIONAL_STATE_BASE, REPEATER_SOURCE_PROP, REPEATER_TYPE, REVEALED_WHILE_SELECTED_ROLES, ROOT_ESCAPE_PX, ROUTE_ANIMATION_OPTIONS, RenderDirective, RepeaterComponentConfig, RootZone, SCREEN_WIDTH_OPTIONS, SILENT_REFUSALS, STRUCTURAL_STATES, SUPPORTED_STATES, SceneCanvasService, SectionComponent, SectionComponentConfig, SelectionReveal, SizeGroupStyleConfig, SliderContainerComponent, SliderContainerConfig, SliderSlideComponent, SliderSlideConfig, SpacingGroupStyleConfig, StructureFix, StyleCategory, StyleRegistryService, TraitConfig as StyleTraitConfig, SubmitButtonComponentConfig, SymbolRegistryService, TARGETED_STATES, TARGETED_STATE_BASE, TOGGLE_PART_ROLES, TRIGGER_OPTIONS, TextBlockComponentConfig, ToolbarAction, ToolbarComponent, TraitConfig, TraitInputType, TypographyGroupStyleConfig, UNITS_ALL, UNITS_DEG, UNITS_FIXED, UNITS_NO_VW, VALIDATION_STATES, VALIDATION_STATE_CLASS, VideoConfig, ViewportService, ZOOM_OPTIONS, arrayItemSchemaFields, arraySchemaFields, auditNodes, bindingLabel, bindingLabels, buildBusinessSpecimen, buildCompositePreset, buildConsentPreset, buildElementStyleSpecimen, buildFieldKindPreset, buildFlavorSpecimen, buildFormPreset, buildFullStyleTraits, buildLayoutPreset, buildPalettePreset, buildPresetStyleTraits, builderCompositeFactory, canFluidise, canvasEmptyImageLabel, canvasHostDisplay, collapseColumnsProps, columnCountOf, compositeStructureFindings, defaultBuilderLabels, defaultPageSettings, deleteTabPair, displayTriggerOf, dropChildren, dropTargetLabel, duplicateTabPair, escapesRoot, essentialTraitsFor, findNodeByIdInEither, findNodeLocation, findParentOf, flattenLayerTree, flattenSchemaFields, fluidiseProps, generateNodeId, globalCanvasLayer, hiddenAtBase, hiddenUntilItemOn, inPhoneMenuContext, insertRefusal, insertRefusalLabel, interactionTargets, isHiddenAt, isHiddenAtRest, isPhoneMenuOpener, isPinnedGlobal, isSpecimen, itemsOnAtRest, markSpecimen, matchesControlSearch, nearestFormNode, neverShown, nodeAncestorPath, nodeAncestorPathInEither, nodeDescriptor, nodeStyleMap, overlayGlobals, pathToNode, phoneMenuOf, phoneMenuShowsAt, refreshSubtree, regenerateNodeIds, removalRefusal, reorderProps, repeaterSourceAlias, repeaterSubLabel, resolveInsertTarget, resolveTraitControllerType, resolveTraitOptions, retypeNode, rootEscapeBand, rootZone, selectionRevealOf, setOverlayPreview, setStyleTrait, setTrait, shortDescriptor, shownBeforeControl, sourceContentType, sourceTypeLabel, stackChildrenProps, summarise, syncEmptyImagePlaceholder, syncNodeDesign, syncNodeInputs, tabPairLabel, tabsRootForPart, textNode, upsertNodeStyles, visibilityProps, walkNodes, wrapNode };
|
|
15095
|
+
export { ACTION_TYPE_OPTIONS, AuditCode, AuditPanelComponent, AuditSeverity, BODY_CRUMB_LABEL, BOUND_ICON, BREAKPOINT_PRESENTATION, BUILDER_CANVAS_CONTAINER, BUILDER_CHROME_EN, BUILDER_FONT_LINK_ATTR, BUILDER_TOKEN_SCOPE_CLASS, BackgroundGroupStyleConfig, BorderGroupStyleConfig, BreadcrumbBarComponent, BuilderButtonBlockComponent, BuilderButtonComponentConfig, BuilderClipboardService, BuilderComponent, BuilderContainerComponent, BuilderContainerComponentConfig, BuilderDataSourceService, BuilderDialogComponent, BuilderDividerComponentConfig, BuilderHeadingComponentConfig, BuilderHistoryService, BuilderIconComponentConfig, BuilderImageComponentConfig, BuilderLinkComponentConfig, BuilderLinkedContainerComponent, BuilderLinkedContainerConfig, BuilderListComponentConfig, BuilderListItemComponentConfig, BuilderMode, BuilderRepeaterComponent, BuilderSpacerComponentConfig, BusinessSpecimenView, ButtonBlockComponentConfig, CANVAS_EMPTY_IMAGE_LABEL_EN, CANVAS_EMPTY_IMAGE_LABEL_KEY, CANVAS_ROOT_RESET_CSS, COMPOSITE_PRESETS, CanvasDesignStateService, CanvasShowState, CardComponentConfig, ChildLayoutGroupStyleConfig, ComponentConfig, ComponentRegistryService, CompositeCanvasService, CompositePaletteGroup, CompositePresetId, DEFAULT_ESSENTIAL_TRAITS, DESCRIPTOR_MAX_LENGTH, DRAG_HANDLE_ATTR, DROP_REFUSED_CLASS, DataSourceRegistryService, DataSourceType, DialogComponentConfig, DimensionsGroupStyleConfig, DragEngineService, EASING_OPTIONS, EDITOR_CHROME_ATTRIBUTE, ESSENTIAL_TRAITS_BY_TYPE, EffectsGroupStyleConfig, FIELD_KIND_PRESETS, FIELD_PARTS, FORM_STATE_BLOCK_TYPES, FORM_TYPE, FieldComponentConfig, FieldGroupComponentConfig, FieldTrait, FormComponentConfig, FormErrorComponentConfig, FormStateService, FormSuccessComponentConfig, GLOBALS_AFTER_CLASS, GalleryConfig, GlobalCanvasLayer, GroupStyleConfig, HIDDEN_AT_REST_LABEL_KEY, HIDDEN_AT_REST_ROLES, HIDDEN_AT_REST_TYPES, INSERT_REFUSAL_LABEL_KEYS, INTERACTION_STATES, INVERSE_ACTION, IOX_BUILDER_CANVAS, IOX_BUILDER_LABELS, IOX_CONTENT_TYPE_LABELS, IOX_DATA_SOURCE_ENDPOINTS, InsertRefusal, InteractionEngineService, InteractionPresetRegistryService, IoxBuilderModule, IoxDraggableDirective, IoxDropzoneDirective, LAYOUT_PRESETS, LayerTreeComponent, LayoutGroupStyleConfig, ListGroupStyleConfig, NodeAction, OverlayComponent, OverlayService, PAGE_TRANSITION_EASING_OPTIONS, PALETTE_PRESET_DEFS, PanelChildComponent, PanelComponent, PanelEventService, PanelEventTypes, PanelTypes, PhoneMenuOpenerAction, PositionGroupStyleConfig, PresetRegistryService, RELATIONAL_STATES, RELATIONAL_STATE_BASE, REPEATER_SOURCE_PROP, REPEATER_TYPE, REVEALED_WHILE_SELECTED_ROLES, ROOT_ESCAPE_PX, ROUTE_ANIMATION_OPTIONS, RenderDirective, RepeaterComponentConfig, RootZone, SCREEN_WIDTH_OPTIONS, SENT_LABEL_TRAIT, SILENT_REFUSALS, STRUCTURAL_STATES, SUPPORTED_STATES, SceneCanvasService, SectionComponent, SectionComponentConfig, SelectionReveal, SizeGroupStyleConfig, SliderContainerComponent, SliderContainerConfig, SliderSlideComponent, SliderSlideConfig, SpacingGroupStyleConfig, StructureFix, StyleCategory, StyleRegistryService, TraitConfig as StyleTraitConfig, SubmitButtonComponentConfig, SymbolRegistryService, TARGETED_STATES, TARGETED_STATE_BASE, TOGGLE_PART_ROLES, TRIGGER_OPTIONS, TextBlockComponentConfig, ToolbarAction, ToolbarComponent, TraitConfig, TraitInputType, TypographyGroupStyleConfig, UNITS_ALL, UNITS_DEG, UNITS_FIXED, UNITS_NO_VW, VALIDATION_STATES, VALIDATION_STATE_CLASS, VideoConfig, ViewportService, ZOOM_OPTIONS, addFormChannel, arrayItemSchemaFields, arraySchemaFields, auditNodes, bindingLabel, bindingLabels, buildBusinessSpecimen, buildCompositePreset, buildConsentPreset, buildElementStyleSpecimen, buildFieldKindPreset, buildFlavorSpecimen, buildFormActionsRow, buildFormChannel, buildFormPreset, buildFullStyleTraits, buildLayoutPreset, buildPalettePreset, buildPresetStyleTraits, builderCompositeFactory, canFluidise, canvasEmptyImageLabel, canvasHostDisplay, collapseColumnsProps, columnCountOf, compositeStructureFindings, defaultBuilderLabels, defaultPageSettings, deleteTabPair, displayTriggerOf, dropChildren, dropTargetLabel, duplicateTabPair, escapesRoot, essentialTraitsFor, findNodeByIdInEither, findNodeLocation, findParentOf, flattenLayerTree, flattenSchemaFields, fluidiseProps, formChannelOf, generateNodeId, globalCanvasLayer, hiddenAtBase, hiddenUntilItemOn, inPhoneMenuContext, insertRefusal, insertRefusalLabel, interactionTargets, isHiddenAt, isHiddenAtRest, isPhoneMenuOpener, isPinnedGlobal, isSpecimen, itemsOnAtRest, markSpecimen, matchesControlSearch, nearestFormNode, neverShown, nodeAncestorPath, nodeAncestorPathInEither, nodeDescriptor, nodeStyleMap, overlayGlobals, pathToNode, phoneMenuOf, phoneMenuShowsAt, refreshSubtree, regenerateNodeIds, removalRefusal, reorderProps, repeaterSourceAlias, repeaterSubLabel, resolveInsertTarget, resolveTraitControllerType, resolveTraitOptions, retypeNode, rootEscapeBand, rootZone, selectionRevealOf, setChannelAddress, setOverlayPreview, setStyleTrait, setTrait, shortDescriptor, shownBeforeControl, sourceContentType, sourceTypeLabel, stackChildrenProps, summarise, syncEmptyImagePlaceholder, syncNodeDesign, syncNodeInputs, tabPairLabel, tabsRootForPart, textNode, upsertNodeStyles, visibilityProps, walkNodes, wrapNode };
|
|
14811
15096
|
//# sourceMappingURL=vectoriox-iox-builder.mjs.map
|