@vectoriox/iox-builder 11.12.0 → 11.13.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.
|
@@ -20,7 +20,7 @@ import * as i1$1 from '@vectoriox/iox-ui';
|
|
|
20
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';
|
|
21
21
|
export { ComponentInstanceRegistryService, VIRTUAL_TRAIT_KEYS, composeVirtualTraits } from '@vectoriox/iox-ui';
|
|
22
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';
|
|
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
26
|
import { map, catchError } from 'rxjs/operators';
|
|
@@ -5412,6 +5412,8 @@ function syncNodeDesign(ref, node, emptyLabel) {
|
|
|
5412
5412
|
syncEmptyImagePlaceholder(ref, node, emptyLabel);
|
|
5413
5413
|
}
|
|
5414
5414
|
|
|
5415
|
+
/** The Field type, whose Date control has a design-time Open state on the canvas. */
|
|
5416
|
+
const FIELD_TYPE = 'Field';
|
|
5415
5417
|
// Module-level counter — unique drop-list ID per Section instance across the whole app session.
|
|
5416
5418
|
let dropListCounter = 0;
|
|
5417
5419
|
/**
|
|
@@ -5685,6 +5687,12 @@ class RenderDirective {
|
|
|
5685
5687
|
// safeSetInput for every component that does not declare it.
|
|
5686
5688
|
if (node.responsive)
|
|
5687
5689
|
safeSetInput(componentRef, 'responsive', node.responsive);
|
|
5690
|
+
// A Date field's design-time Open state (premium N8): "Showing on canvas ▸ Open" draws its calendar under it so
|
|
5691
|
+
// the author can style the Calendar parts — the R2 state every hidden-at-rest part reads (CC1.3 / CC2).
|
|
5692
|
+
if (node.type === FIELD_TYPE && this.designState && node.id) {
|
|
5693
|
+
const id = node.id;
|
|
5694
|
+
this.childSubs.push(this.designState.state$.subscribe(() => safeSetInput(componentRef, 'designOpen', this.designState.isShown(id))));
|
|
5695
|
+
}
|
|
5688
5696
|
// Empty images (DS3): a MARKED Image shows the shared placeholder whenever its source is empty —
|
|
5689
5697
|
// the "Add image" label on the editing canvas, the bare blank anywhere else (Preview), which is
|
|
5690
5698
|
// what the live site shows. An unmarked Image gets null and renders exactly as before. Set from
|
|
@@ -5711,7 +5719,7 @@ class RenderDirective {
|
|
|
5711
5719
|
// without it a hovering node's base rule, re-upserted here on every render, dropped the
|
|
5712
5720
|
// transition page-ui had added on load, and the canvas snapped where the site eased.
|
|
5713
5721
|
// The transition names what the node's states change (G2) — the engine composes the same, from the same call.
|
|
5714
|
-
const timedBase = withStateTransitions(initialStyle, node.stateStyles, node.elementStyle, node.responsive);
|
|
5722
|
+
const timedBase = withStateTransitions(initialStyle, node.stateStyles, node.elementStyle, node.responsive, node.type);
|
|
5715
5723
|
const composedBase = composeVirtualTraits(timedBase);
|
|
5716
5724
|
this.styleRegistry.upsert(cssId, composedBase);
|
|
5717
5725
|
// Restore per-state overrides saved from a previous session.
|
|
@@ -6972,7 +6980,7 @@ function upsertNodeStyles(styleRegistry, node) {
|
|
|
6972
6980
|
return;
|
|
6973
6981
|
const base = nodeStyleMap(node);
|
|
6974
6982
|
styleRegistry.setNodeType(cssId, node.type, colorSchemeOf(node));
|
|
6975
|
-
const timedBase = withStateTransitions(base, node.stateStyles, node.elementStyle, node.responsive);
|
|
6983
|
+
const timedBase = withStateTransitions(base, node.stateStyles, node.elementStyle, node.responsive, node.type);
|
|
6976
6984
|
styleRegistry.upsert(cssId, composeVirtualTraits(timedBase));
|
|
6977
6985
|
for (const [state, map] of Object.entries(node.stateStyles ?? {})) {
|
|
6978
6986
|
if (DOM_SCOPED_STATES.has(state) || !map || !Object.keys(map).length)
|
|
@@ -13236,13 +13244,30 @@ function buildFormPreset(def, createConfig) {
|
|
|
13236
13244
|
setTrait(field, 'optionsText', spec.optionsText);
|
|
13237
13245
|
if (spec.rows)
|
|
13238
13246
|
setTrait(field, 'rows', spec.rows);
|
|
13247
|
+
if (spec.multiple)
|
|
13248
|
+
setTrait(field, 'multiple', true);
|
|
13249
|
+
if (spec.appearance)
|
|
13250
|
+
setTrait(field, 'appearance', spec.appearance);
|
|
13251
|
+
if (spec.earliest !== undefined)
|
|
13252
|
+
setTrait(field, 'earliest', spec.earliest);
|
|
13253
|
+
if (spec.latest !== undefined)
|
|
13254
|
+
setTrait(field, 'latest', spec.latest);
|
|
13239
13255
|
children.push(field);
|
|
13240
13256
|
}
|
|
13241
13257
|
const submit = createConfig('SubmitButton');
|
|
13242
13258
|
if (!submit)
|
|
13243
13259
|
return null;
|
|
13244
13260
|
setTrait(submit, 'label', def.submitLabel);
|
|
13245
|
-
|
|
13261
|
+
if (def.channel) {
|
|
13262
|
+
// Send and the second channel share ONE row (premium N2) — it stays on screen after the form has sent.
|
|
13263
|
+
const row = buildFormActionsRow(submit, def.channel, '', createConfig);
|
|
13264
|
+
if (!row)
|
|
13265
|
+
return null;
|
|
13266
|
+
children.push(row);
|
|
13267
|
+
}
|
|
13268
|
+
else {
|
|
13269
|
+
children.push(submit);
|
|
13270
|
+
}
|
|
13246
13271
|
// Both state blocks, every time. They are not optional: a form without them is the silent-form
|
|
13247
13272
|
// failure this design exists to prevent (decision D7).
|
|
13248
13273
|
const success = createConfig('FormSuccess');
|
|
@@ -13272,6 +13297,14 @@ const FIELD_KIND_PRESETS = Object.freeze([
|
|
|
13272
13297
|
label: 'Pick one',
|
|
13273
13298
|
optionsText: 'First choice\nSecond choice\nThird choice',
|
|
13274
13299
|
},
|
|
13300
|
+
{
|
|
13301
|
+
// Premium N1: chips — one or several of a few visible choices; tap to pick, the arrow keys move a one-answer row.
|
|
13302
|
+
control: 'choices', name: 'Choice chips', icon: 'ph-thin ph-list-checks',
|
|
13303
|
+
description: 'Pick one or several, as chips. The answer is the words picked.',
|
|
13304
|
+
label: 'What do you need?',
|
|
13305
|
+
optionsText: 'First choice\nSecond choice\nThird choice',
|
|
13306
|
+
multiple: true,
|
|
13307
|
+
},
|
|
13275
13308
|
{
|
|
13276
13309
|
control: 'select', name: 'Dropdown', icon: 'ph-thin ph-caret-circle-down',
|
|
13277
13310
|
description: 'Pick one from a list that folds away.',
|
|
@@ -13303,8 +13336,118 @@ function buildFieldKindPreset(def, createConfig) {
|
|
|
13303
13336
|
setTrait(field, 'control', def.control);
|
|
13304
13337
|
if (def.optionsText)
|
|
13305
13338
|
setTrait(field, 'optionsText', def.optionsText);
|
|
13339
|
+
if (def.multiple)
|
|
13340
|
+
setTrait(field, 'multiple', true);
|
|
13306
13341
|
return field;
|
|
13307
13342
|
}
|
|
13343
|
+
/** The element style a second channel wears: the quieter button beside Send. */
|
|
13344
|
+
const CHANNEL_STYLE = 'button-secondary';
|
|
13345
|
+
const BUTTON_LABEL_STYLE$1 = 'button-label';
|
|
13346
|
+
/**
|
|
13347
|
+
* The second channel (premium N2): a ButtonBlock that links, wearing the secondary button, its words a Text wearing
|
|
13348
|
+
* `button-label`, the role `form.channel`. Its address is the OWNER's — built from what they typed by forms-core
|
|
13349
|
+
* `channelHref`, '' when they typed nothing (the Publishable gate then blocks publishing: never a made-up number).
|
|
13350
|
+
*/
|
|
13351
|
+
function buildFormChannel(channel, input, createConfig) {
|
|
13352
|
+
const button = createConfig('ButtonBlock');
|
|
13353
|
+
const words = textNode(channel.label, createConfig);
|
|
13354
|
+
if (!button || !words)
|
|
13355
|
+
return null;
|
|
13356
|
+
button.role = FORM_CHANNEL_ROLE;
|
|
13357
|
+
setTrait(button, 'tag', 'a');
|
|
13358
|
+
setTrait(button, 'linkType', 'external');
|
|
13359
|
+
setChannelAddress(button, channel.kind, input);
|
|
13360
|
+
if (button.elementStyle !== CHANNEL_STYLE)
|
|
13361
|
+
switchElementStyle(button, button.elementStyle, CHANNEL_STYLE);
|
|
13362
|
+
if (words.elementStyle !== BUTTON_LABEL_STYLE$1)
|
|
13363
|
+
switchElementStyle(words, words.elementStyle, BUTTON_LABEL_STYLE$1);
|
|
13364
|
+
button.children = [words];
|
|
13365
|
+
return button;
|
|
13366
|
+
}
|
|
13367
|
+
/** Point a channel at what the author typed — the address, and a new tab for WhatsApp and a web link. */
|
|
13368
|
+
function setChannelAddress(button, kind, input) {
|
|
13369
|
+
setTrait(button, 'href', channelHref(kind, input));
|
|
13370
|
+
setTrait(button, 'target', channelOpensNewTab(kind) ? '_blank' : '_self');
|
|
13371
|
+
}
|
|
13372
|
+
/**
|
|
13373
|
+
* The form's actions row (role `form.actions`): Send, then the channel, side by side, wrapping on a narrow screen. A
|
|
13374
|
+
* FieldGroup — the form's own layout row — so the shared form CSS keeps it on screen after a success.
|
|
13375
|
+
*/
|
|
13376
|
+
function buildFormActionsRow(submit, channel, input, createConfig) {
|
|
13377
|
+
const row = createConfig('FieldGroup');
|
|
13378
|
+
const link = buildFormChannel(channel, input, createConfig);
|
|
13379
|
+
if (!row || !link)
|
|
13380
|
+
return null;
|
|
13381
|
+
row.role = FORM_ACTIONS_ROLE;
|
|
13382
|
+
setStyle(row, 'flexWrap', 'wrap');
|
|
13383
|
+
setStyle(row, 'alignItems', 'center');
|
|
13384
|
+
setStyle(row, 'gap', '12px');
|
|
13385
|
+
row.children = [submit, link];
|
|
13386
|
+
return row;
|
|
13387
|
+
}
|
|
13388
|
+
/** The form's second channel node, if it has one (anywhere in its subtree, never inside a nested form). */
|
|
13389
|
+
function formChannelOf(form) {
|
|
13390
|
+
const visit = (nodes) => {
|
|
13391
|
+
for (const n of nodes ?? []) {
|
|
13392
|
+
if (n.role === FORM_CHANNEL_ROLE)
|
|
13393
|
+
return n;
|
|
13394
|
+
if (n.type === 'Form')
|
|
13395
|
+
continue;
|
|
13396
|
+
const hit = visit(n.children);
|
|
13397
|
+
if (hit)
|
|
13398
|
+
return hit;
|
|
13399
|
+
}
|
|
13400
|
+
return null;
|
|
13401
|
+
};
|
|
13402
|
+
return visit(form?.children);
|
|
13403
|
+
}
|
|
13404
|
+
/**
|
|
13405
|
+
* "Add a second way to reach you" on an existing form (premium N2): the channel goes beside the form's FIRST submit
|
|
13406
|
+
* button — the submit moves into a new actions row in its place, or the channel joins the row it is already in. Null
|
|
13407
|
+
* when the form already has one or has no submit button. Mutates the form's tree; the caller records the undo step.
|
|
13408
|
+
*/
|
|
13409
|
+
function addFormChannel(form, channel, input, createConfig) {
|
|
13410
|
+
if (formChannelOf(form))
|
|
13411
|
+
return null;
|
|
13412
|
+
const found = findWithParent(form, n => n.type === SUBMIT_BUTTON_NODE_TYPE);
|
|
13413
|
+
if (!found)
|
|
13414
|
+
return null;
|
|
13415
|
+
const { node: submit, parent } = found;
|
|
13416
|
+
const siblings = parent.children;
|
|
13417
|
+
if (parent.role === FORM_ACTIONS_ROLE) {
|
|
13418
|
+
const link = buildFormChannel(channel, input, createConfig);
|
|
13419
|
+
if (!link)
|
|
13420
|
+
return null;
|
|
13421
|
+
siblings.splice(siblings.indexOf(submit) + 1, 0, link);
|
|
13422
|
+
return link;
|
|
13423
|
+
}
|
|
13424
|
+
const row = buildFormActionsRow(submit, channel, input, createConfig);
|
|
13425
|
+
if (!row)
|
|
13426
|
+
return null;
|
|
13427
|
+
siblings.splice(siblings.indexOf(submit), 1, row);
|
|
13428
|
+
return formChannelOf(row);
|
|
13429
|
+
}
|
|
13430
|
+
function findWithParent(root, match) {
|
|
13431
|
+
for (const child of root.children ?? []) {
|
|
13432
|
+
if (match(child))
|
|
13433
|
+
return { node: child, parent: root };
|
|
13434
|
+
if (child.type === 'Form')
|
|
13435
|
+
continue;
|
|
13436
|
+
const hit = findWithParent(child, match);
|
|
13437
|
+
if (hit)
|
|
13438
|
+
return hit;
|
|
13439
|
+
}
|
|
13440
|
+
return null;
|
|
13441
|
+
}
|
|
13442
|
+
function setStyle(node, prop, value) {
|
|
13443
|
+
for (const group of (node.styleTraits ?? [])) {
|
|
13444
|
+
const trait = group?.traits?.find((t) => t?.name === prop);
|
|
13445
|
+
if (trait) {
|
|
13446
|
+
trait.default = value;
|
|
13447
|
+
return;
|
|
13448
|
+
}
|
|
13449
|
+
}
|
|
13450
|
+
}
|
|
13308
13451
|
function textNode(content, createConfig) {
|
|
13309
13452
|
const text = createConfig('Text');
|
|
13310
13453
|
if (!text)
|
|
@@ -14160,7 +14303,25 @@ const FIELD_PARTS = [
|
|
|
14160
14303
|
{ key: 'help', label: 'Note', className: PART_CLASS_NAMES['Field']['help'] },
|
|
14161
14304
|
{ key: 'error', label: 'Error message', className: PART_CLASS_NAMES['Field']['error'] },
|
|
14162
14305
|
{ key: 'required', label: 'Required mark', className: PART_CLASS_NAMES['Field']['required'] },
|
|
14306
|
+
// Premium M3: a Choices field's chip (N1) and a Date's calendar and its days (N8 — shown on the canvas by
|
|
14307
|
+
// "Showing on canvas ▸ Open"). Their look is the contract's `chip` / `calendar` / `calendar-day`; a part style
|
|
14308
|
+
// here is this field's own.
|
|
14309
|
+
{ key: 'chip', label: 'Choice chip', className: PART_CLASS_NAMES['Field']['chip'] },
|
|
14310
|
+
{ key: 'calendar', label: 'Calendar', className: PART_CLASS_NAMES['Field']['calendar'] },
|
|
14311
|
+
{ key: 'calendarDay', label: 'Calendar day', className: PART_CLASS_NAMES['Field']['calendarDay'] },
|
|
14163
14312
|
];
|
|
14313
|
+
/** The Field traits the Bindings panel's Field section edits (premium M3) — never generic rows, so every word is a
|
|
14314
|
+
* translation key: a Choices field's appearance and "several", a Date's Earliest / Latest. */
|
|
14315
|
+
var FieldTrait;
|
|
14316
|
+
(function (FieldTrait) {
|
|
14317
|
+
FieldTrait["Control"] = "control";
|
|
14318
|
+
FieldTrait["Multiple"] = "multiple";
|
|
14319
|
+
FieldTrait["Appearance"] = "appearance";
|
|
14320
|
+
FieldTrait["Earliest"] = "earliest";
|
|
14321
|
+
FieldTrait["Latest"] = "latest";
|
|
14322
|
+
})(FieldTrait || (FieldTrait = {}));
|
|
14323
|
+
/** The SubmitButton's "Sent" words (premium N2) — empty: the catalog's "Sent" in the page's language. */
|
|
14324
|
+
const SENT_LABEL_TRAIT = 'sentLabel';
|
|
14164
14325
|
/** Every style group — the state blocks and field group are ordinary containers to style. */
|
|
14165
14326
|
const fullStyles = () => buildFullStyleTraits();
|
|
14166
14327
|
/** Layout-ish groups for a form shell: it arranges fields, it is not text. */
|
|
@@ -14264,6 +14425,8 @@ class FieldComponentConfig extends ComponentConfig {
|
|
|
14264
14425
|
{ label: 'Checkbox', value: 'checkbox' },
|
|
14265
14426
|
{ label: 'Switch', value: 'switch' },
|
|
14266
14427
|
{ label: 'Radio group', value: 'radio' },
|
|
14428
|
+
// Premium N1: one or several of a few visible choices, as chips (or the look's rows).
|
|
14429
|
+
{ label: 'Choices', value: 'choices' },
|
|
14267
14430
|
{ label: 'Slider', value: 'range' },
|
|
14268
14431
|
{ label: 'Date', value: 'date' },
|
|
14269
14432
|
{ label: 'Time', value: 'time' },
|
|
@@ -14274,7 +14437,16 @@ class FieldComponentConfig extends ComponentConfig {
|
|
|
14274
14437
|
// enforcement nor the file. See forms-and-inputs-plan.md → Remaining work P0/1.
|
|
14275
14438
|
{ label: 'Hidden', value: 'hidden' },
|
|
14276
14439
|
], 'text'),
|
|
14277
|
-
new TraitConfig('placeholder', 'Hint inside the box', TraitInputType.Text, undefined, '', false, { trait: 'control', values: ['text', 'email', 'tel', 'url', 'number', 'password', 'textarea', 'select'] }),
|
|
14440
|
+
new TraitConfig('placeholder', 'Hint inside the box', TraitInputType.Text, undefined, '', false, { trait: 'control', values: ['text', 'email', 'tel', 'url', 'number', 'password', 'textarea', 'select', 'date'] }),
|
|
14441
|
+
// Choices (N1) and Date (N8): edited in the Bindings panel's own Field section (cms-client), whose words
|
|
14442
|
+
// are translated — hidden from the generic rows there.
|
|
14443
|
+
new TraitConfig(FieldTrait.Multiple, 'Several can be chosen', TraitInputType.Checkbox, undefined, false, false, { trait: 'control', values: 'choices' }),
|
|
14444
|
+
new TraitConfig(FieldTrait.Appearance, 'Appearance', TraitInputType.Select, [
|
|
14445
|
+
{ label: 'Chips', value: 'chips' },
|
|
14446
|
+
{ label: 'List', value: 'list' },
|
|
14447
|
+
], 'chips', false, { trait: 'control', values: 'choices' }),
|
|
14448
|
+
new TraitConfig(FieldTrait.Earliest, 'Earliest', TraitInputType.Text, undefined, '', false, { trait: 'control', values: 'date' }),
|
|
14449
|
+
new TraitConfig(FieldTrait.Latest, 'Latest', TraitInputType.Text, undefined, '', false, { trait: 'control', values: 'date' }),
|
|
14278
14450
|
new TraitConfig('help', 'Help text', TraitInputType.Text, undefined, ''),
|
|
14279
14451
|
new TraitConfig('rows', 'Rows', TraitInputType.Number, undefined, 4, false, { trait: 'control', values: 'textarea' }),
|
|
14280
14452
|
new TraitConfig('rangeMin', 'Min', TraitInputType.Number, undefined, 0, false, { trait: 'control', values: 'range' }),
|
|
@@ -14287,7 +14459,7 @@ class FieldComponentConfig extends ComponentConfig {
|
|
|
14287
14459
|
new TraitConfig('__optionsLabel', 'Options', TraitInputType.SectionLabel),
|
|
14288
14460
|
// One per line, `value|Label` or just the label. A richer editor arrives with bound
|
|
14289
14461
|
// 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'] }),
|
|
14462
|
+
new TraitConfig('optionsText', 'Choices (one per line)', TraitInputType.Textarea, undefined, '', false, { trait: 'control', values: ['select', 'radio', 'choices'] }),
|
|
14291
14463
|
new TraitConfig('__validationLabel', 'What this field demands', TraitInputType.SectionLabel),
|
|
14292
14464
|
new TraitConfig('required', 'They must fill it in', TraitInputType.Checkbox, undefined, false),
|
|
14293
14465
|
// The additive rule list (minLength, pattern, matches, …). Unused rules are invisible
|
|
@@ -14323,6 +14495,8 @@ class SubmitButtonComponentConfig extends ComponentConfig {
|
|
|
14323
14495
|
this.traits = [
|
|
14324
14496
|
new TraitConfig('label', 'Label', TraitInputType.Text, undefined, 'Send'),
|
|
14325
14497
|
new TraitConfig('loadingLabel', 'While sending', TraitInputType.Text, undefined, 'Sending…'),
|
|
14498
|
+
// Premium N2: what it says once the form has sent, beside a check drawn once. Empty: "Sent".
|
|
14499
|
+
new TraitConfig(SENT_LABEL_TRAIT, 'Once sent', TraitInputType.Text, undefined, ''),
|
|
14326
14500
|
new TraitConfig('disableWhileSubmitting', 'Disable while sending', TraitInputType.Checkbox, undefined, true),
|
|
14327
14501
|
];
|
|
14328
14502
|
this.styleTraits = fullStyles();
|
|
@@ -14807,5 +14981,5 @@ class BuilderSpacerComponentConfig extends ComponentConfig {
|
|
|
14807
14981
|
* Generated bundle index. Do not edit.
|
|
14808
14982
|
*/
|
|
14809
14983
|
|
|
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 };
|
|
14984
|
+
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
14985
|
//# sourceMappingURL=vectoriox-iox-builder.mjs.map
|