@vectoriox/iox-ui 5.80.0 → 5.82.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/design-core/index.d.ts +48 -9
- package/fesm2022/vectoriox-iox-ui-design-core.mjs +76 -11
- package/fesm2022/vectoriox-iox-ui-design-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-forms-core.mjs +96 -1
- package/fesm2022/vectoriox-iox-ui-forms-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs +110 -0
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui.mjs +847 -76
- package/fesm2022/vectoriox-iox-ui.mjs.map +1 -1
- package/forms-core/index.d.ts +83 -2
- package/index.d.ts +368 -34
- package/package.json +1 -1
- package/src/design-core/element-styles.ts +14 -2
- package/src/design-core/entrance-timing.ts +14 -3
- package/src/design-core/flavor-spec.generated.ts +12 -6
- package/src/design-core/public-api.ts +1 -0
- package/src/design-core/theme-color.ts +41 -0
- package/src/forms-core/public-api.ts +1 -0
- package/src/forms-core/submit-lifecycle.ts +128 -0
- package/src/generation-core/node-baselines.generated.ts +110 -0
- package/styles/iox-design.css +33 -11
- package/styles/iox-forms.css +20 -0
package/forms-core/index.d.ts
CHANGED
|
@@ -379,6 +379,87 @@ declare function withAntiSpamFields(values: Record<string, any>, renderedAt: num
|
|
|
379
379
|
*/
|
|
380
380
|
declare function interpretSubmitResponse(body: any): SubmitResponse;
|
|
381
381
|
|
|
382
|
+
/**
|
|
383
|
+
* The submit LIFECYCLE's decisions — what a form shows after the server answers, what it says when a
|
|
384
|
+
* submit fails, what a client needs to validate a form, and how its submit button follows its state.
|
|
385
|
+
*
|
|
386
|
+
* Two runtimes act on these and must agree: `IoxFormComponent` (the engine's component path) and the
|
|
387
|
+
* string-form runtime (every header / footer global and every string-rendered page —
|
|
388
|
+
* vectoriox/iox-client-engine#13). The builder canvas reads `submitButtonView` too, for its Sending state.
|
|
389
|
+
*
|
|
390
|
+
* ⚠️ Framework-free, like the rest of forms-core: no Angular, no DOM.
|
|
391
|
+
*/
|
|
392
|
+
|
|
393
|
+
/** Which of the form's four states is showing — written on the form as `data-iox-state`. */
|
|
394
|
+
declare enum FormRenderState {
|
|
395
|
+
Idle = "idle",
|
|
396
|
+
Submitting = "submitting",
|
|
397
|
+
Success = "success",
|
|
398
|
+
Error = "error"
|
|
399
|
+
}
|
|
400
|
+
/** The attribute every renderer writes a form's state on (the canvas switcher, both live paths). */
|
|
401
|
+
declare const FORM_STATE_ATTRIBUTE = "data-iox-state";
|
|
402
|
+
/** What the form does once the server has answered. */
|
|
403
|
+
interface SubmitOutcome {
|
|
404
|
+
state: FormRenderState;
|
|
405
|
+
/** Per-field verdicts to put back on the fields (the form stays Idle so the visitor can fix them). */
|
|
406
|
+
errors?: Record<string, FieldError>;
|
|
407
|
+
/** A success clears the answers, so they cannot be sent twice. */
|
|
408
|
+
reset: boolean;
|
|
409
|
+
redirect?: string;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* The server's answer → what the visitor sees. Only a confirmed success is Success; per-field verdicts
|
|
413
|
+
* land on the fields; anything else (a dropped network included) is the designed Error block.
|
|
414
|
+
*/
|
|
415
|
+
declare function submitOutcome(response: SubmitResponse | null | undefined): SubmitOutcome;
|
|
416
|
+
/** What the live region says after a refused submit: how many fields need attention, or that it did not send. */
|
|
417
|
+
declare function failureAnnouncement(errors: Readonly<Record<string, unknown>> | null | undefined): string;
|
|
418
|
+
/**
|
|
419
|
+
* The fields a CLIENT needs to validate a form: never its actions (where submissions go — an email
|
|
420
|
+
* address, a webhook) and never its anti-spam settings. A string-rendered form carries this on
|
|
421
|
+
* `FORM_FIELDS_ATTRIBUTE`, the way a string slider carries its inputs.
|
|
422
|
+
*/
|
|
423
|
+
interface ClientFormSpec {
|
|
424
|
+
feedback: FeedbackTiming | string;
|
|
425
|
+
fields: FieldSpec[];
|
|
426
|
+
}
|
|
427
|
+
declare const FORM_FIELDS_ATTRIBUTE = "data-iox-form-fields";
|
|
428
|
+
declare function clientFormSpec(spec: Pick<FormSpec, 'feedback' | 'fields'>): ClientFormSpec;
|
|
429
|
+
/** The attribute's value back into a spec, or null when it is missing or not one. */
|
|
430
|
+
declare function parseClientFormSpec(raw: string | null | undefined): ClientFormSpec | null;
|
|
431
|
+
/** How a submit button wears its form's state (vectoriox/iox-ui#42). */
|
|
432
|
+
interface SubmitButtonView {
|
|
433
|
+
busy: boolean;
|
|
434
|
+
disabled: boolean;
|
|
435
|
+
}
|
|
436
|
+
/** While its form sends, a submit button is busy, and disabled unless its author turned that off — ONE rule for the
|
|
437
|
+
* canvas's Sending state, the component path and the string path. Its "Sending…" label is the shared CSS's, keyed on
|
|
438
|
+
* the same `data-iox-state`. */
|
|
439
|
+
declare function submitButtonView(state: FormRenderState | string | null | undefined, disableWhileSubmitting?: boolean): SubmitButtonView;
|
|
440
|
+
/** On a submit button whose author turned "Disable while sending" off. */
|
|
441
|
+
declare const SUBMIT_KEEP_ENABLED_ATTRIBUTE = "data-iox-keep-enabled";
|
|
442
|
+
declare enum SubmitLabelClass {
|
|
443
|
+
Labels = "iox-submit__labels",
|
|
444
|
+
Idle = "iox-submit__idle",
|
|
445
|
+
Busy = "iox-submit__busy"
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* A submit button's words, as markup: its label, or — when it has a "While sending" label — both, stacked in one
|
|
449
|
+
* cell (the button keeps the longer one's width and never jumps). The string renderer's copy of
|
|
450
|
+
* `IoxSubmitButtonComponent`'s template; `escape` is the renderer's.
|
|
451
|
+
*/
|
|
452
|
+
declare function submitButtonLabelsHtml(label: string, loadingLabel: string | null | undefined, escape: (v: string) => string): string;
|
|
453
|
+
declare const FORM_HONEYPOT_CLASS = "iox-form__hp";
|
|
454
|
+
declare const FORM_ANNOUNCER_ATTRIBUTE = "data-iox-form-announcer";
|
|
455
|
+
/**
|
|
456
|
+
* The honeypot and the failure announcer every form holds, as markup — what `IoxFormComponent`'s template
|
|
457
|
+
* renders, for the string renderer. The honeypot is off-screen (some bots skip hidden inputs), out of the
|
|
458
|
+
* Tab order and the accessibility tree; the announcer is present from the start (a live region added at
|
|
459
|
+
* the moment it gains text is not reliably announced).
|
|
460
|
+
*/
|
|
461
|
+
declare function formChromeHtml(honeypotField: string): string;
|
|
462
|
+
|
|
382
463
|
/**
|
|
383
464
|
* FORM PRESETS — a complete, working form as one insert: its fields, its submit label and the words of
|
|
384
465
|
* its Success and Error blocks. ONE definition (W1.1): the builder's Forms tray builds a preset from
|
|
@@ -462,5 +543,5 @@ interface MisplacedFormContent<N extends NestingNode = NestingNode> {
|
|
|
462
543
|
/** Every form-content subtree a tree holds inside an interactive host, in document order. */
|
|
463
544
|
declare function findFormContentInHosts<N extends NestingNode>(roots: readonly N[] | null | undefined): MisplacedFormContent<N>[];
|
|
464
545
|
|
|
465
|
-
export { ControlType, DEFAULT_EN_MESSAGES, FIELD_GROUP_NODE_TYPE, FIELD_NODE_TYPE, FORM_CONTENT_TYPES, FORM_ERROR_KEYS, FORM_NODE_TYPE, FORM_PRESETS, FeedbackTiming, FormPresetId, HONEYPOT_FIELD, IMPLIED_PATTERN, INITIAL_FORM_STATE, INTERACTIVE_HOST_TAGS, InteractiveTag, MESSAGE_NAMESPACE, MULTI_VALUE_CONTROLS, PATTERN_MESSAGE_KEYS, PATTERN_PRESETS, PATTERN_PRESET_OPTIONS, PatternPreset, RENDERED_AT_FIELD, RULE_DESCRIPTORS, RULE_MESSAGE_KEYS, RuleName, RuleParamKind, STORE_ACTION, SUBMIT_BUTTON_NODE_TYPE, addableRules, applyServerErrors, collectFieldNodes, collectFormSpec, deriveFieldName, fieldOptionsOf, findFormContentInHosts, firstInvalidField, formContentInHost, formPresetById, interpretSubmitResponse, isFormContent, isInteractiveHost, onFieldBlur, onFieldChange, onSubmitAttempt, parseFieldOptions, resetFormState, rulesFor, shouldShowError, submitEndpointPath, uniqueFieldName, validateField, validateForm, withAntiSpamFields };
|
|
466
|
-
export type { FieldError, FieldOption, FieldOptionSource, FieldResult, FieldSpec, FormNodeLike, FormPresetDef, FormPresetField, FormResult, FormRuntimeState, FormSpec, FormTransport, MisplacedFormContent, NestingNode, RuleDescriptor, SubmitAction, SubmitRequest, SubmitResponse, ValidationRule };
|
|
546
|
+
export { ControlType, DEFAULT_EN_MESSAGES, FIELD_GROUP_NODE_TYPE, FIELD_NODE_TYPE, FORM_ANNOUNCER_ATTRIBUTE, FORM_CONTENT_TYPES, FORM_ERROR_KEYS, FORM_FIELDS_ATTRIBUTE, FORM_HONEYPOT_CLASS, FORM_NODE_TYPE, FORM_PRESETS, FORM_STATE_ATTRIBUTE, FeedbackTiming, FormPresetId, FormRenderState, HONEYPOT_FIELD, IMPLIED_PATTERN, INITIAL_FORM_STATE, INTERACTIVE_HOST_TAGS, InteractiveTag, MESSAGE_NAMESPACE, MULTI_VALUE_CONTROLS, PATTERN_MESSAGE_KEYS, PATTERN_PRESETS, PATTERN_PRESET_OPTIONS, PatternPreset, RENDERED_AT_FIELD, RULE_DESCRIPTORS, RULE_MESSAGE_KEYS, RuleName, RuleParamKind, STORE_ACTION, SUBMIT_BUTTON_NODE_TYPE, SUBMIT_KEEP_ENABLED_ATTRIBUTE, SubmitLabelClass, addableRules, applyServerErrors, clientFormSpec, collectFieldNodes, collectFormSpec, deriveFieldName, failureAnnouncement, fieldOptionsOf, findFormContentInHosts, firstInvalidField, formChromeHtml, formContentInHost, formPresetById, interpretSubmitResponse, isFormContent, isInteractiveHost, onFieldBlur, onFieldChange, onSubmitAttempt, parseClientFormSpec, parseFieldOptions, resetFormState, rulesFor, shouldShowError, submitButtonLabelsHtml, submitButtonView, submitEndpointPath, submitOutcome, uniqueFieldName, validateField, validateForm, withAntiSpamFields };
|
|
547
|
+
export type { ClientFormSpec, FieldError, FieldOption, FieldOptionSource, FieldResult, FieldSpec, FormNodeLike, FormPresetDef, FormPresetField, FormResult, FormRuntimeState, FormSpec, FormTransport, MisplacedFormContent, NestingNode, RuleDescriptor, SubmitAction, SubmitButtonView, SubmitOutcome, SubmitRequest, SubmitResponse, ValidationRule };
|
package/index.d.ts
CHANGED
|
@@ -1135,6 +1135,34 @@ interface SubmitResponse {
|
|
|
1135
1135
|
*/
|
|
1136
1136
|
type FormTransport = (request: SubmitRequest) => Promise<SubmitResponse>;
|
|
1137
1137
|
|
|
1138
|
+
/**
|
|
1139
|
+
* The submit LIFECYCLE's decisions — what a form shows after the server answers, what it says when a
|
|
1140
|
+
* submit fails, what a client needs to validate a form, and how its submit button follows its state.
|
|
1141
|
+
*
|
|
1142
|
+
* Two runtimes act on these and must agree: `IoxFormComponent` (the engine's component path) and the
|
|
1143
|
+
* string-form runtime (every header / footer global and every string-rendered page —
|
|
1144
|
+
* vectoriox/iox-client-engine#13). The builder canvas reads `submitButtonView` too, for its Sending state.
|
|
1145
|
+
*
|
|
1146
|
+
* ⚠️ Framework-free, like the rest of forms-core: no Angular, no DOM.
|
|
1147
|
+
*/
|
|
1148
|
+
|
|
1149
|
+
/** Which of the form's four states is showing — written on the form as `data-iox-state`. */
|
|
1150
|
+
declare enum FormRenderState {
|
|
1151
|
+
Idle = "idle",
|
|
1152
|
+
Submitting = "submitting",
|
|
1153
|
+
Success = "success",
|
|
1154
|
+
Error = "error"
|
|
1155
|
+
}
|
|
1156
|
+
/**
|
|
1157
|
+
* The fields a CLIENT needs to validate a form: never its actions (where submissions go — an email
|
|
1158
|
+
* address, a webhook) and never its anti-spam settings. A string-rendered form carries this on
|
|
1159
|
+
* `FORM_FIELDS_ATTRIBUTE`, the way a string slider carries its inputs.
|
|
1160
|
+
*/
|
|
1161
|
+
interface ClientFormSpec {
|
|
1162
|
+
feedback: FeedbackTiming | string;
|
|
1163
|
+
fields: FieldSpec[];
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1138
1166
|
/**
|
|
1139
1167
|
* How a message KEY becomes text a visitor reads.
|
|
1140
1168
|
*
|
|
@@ -1205,13 +1233,7 @@ declare class FormRuntimeService {
|
|
|
1205
1233
|
declare const IOX_FORM_TRANSPORT: InjectionToken<FormTransport>;
|
|
1206
1234
|
/** Where a successful submit sends the visitor. Provided by the host; absent on the canvas. */
|
|
1207
1235
|
declare const IOX_FORM_NAVIGATOR: InjectionToken<(url: string) => void>;
|
|
1208
|
-
|
|
1209
|
-
declare enum FormRenderState {
|
|
1210
|
-
Idle = "idle",
|
|
1211
|
-
Submitting = "submitting",
|
|
1212
|
-
Success = "success",
|
|
1213
|
-
Error = "error"
|
|
1214
|
-
}
|
|
1236
|
+
|
|
1215
1237
|
/**
|
|
1216
1238
|
* Directive-host Form: the real `<form>` IS the host — no wrapper, no inner/outer split. Children
|
|
1217
1239
|
* (fields, layout, the submit button, and the two state blocks) render into it via `childrenHost`.
|
|
@@ -1238,7 +1260,11 @@ declare class IoxFormComponent implements OnChanges, OnInit {
|
|
|
1238
1260
|
formId: string;
|
|
1239
1261
|
/** Author-facing name — what the submissions inbox groups by. */
|
|
1240
1262
|
name: string;
|
|
1241
|
-
|
|
1263
|
+
/** Which state shows. Every change puts the submit buttons in it too (busy / disabled — iox-ui#42), through the
|
|
1264
|
+
* ONE applier the string runtime and the canvas call. */
|
|
1265
|
+
set renderState(state: FormRenderState | string);
|
|
1266
|
+
get renderState(): FormRenderState | string;
|
|
1267
|
+
private _renderState;
|
|
1242
1268
|
feedback: FeedbackTiming | string;
|
|
1243
1269
|
/**
|
|
1244
1270
|
* Move focus to the first field that failed, instead of leaving the visitor to hunt for red
|
|
@@ -1287,7 +1313,8 @@ declare class IoxFormComponent implements OnChanges, OnInit {
|
|
|
1287
1313
|
* host's, which is the one part that genuinely differs between the engine and anything else.
|
|
1288
1314
|
*/
|
|
1289
1315
|
private send;
|
|
1290
|
-
/** Turn the server's answer into what the visitor sees
|
|
1316
|
+
/** Turn the server's answer into what the visitor sees — the shared `submitOutcome`, which the string runtime
|
|
1317
|
+
* applies too. Public so a host-owned transport can reuse it. */
|
|
1291
1318
|
applyResponse(response: SubmitResponse): void;
|
|
1292
1319
|
/** The honeypot input's value, if the host rendered one. Absent reads as empty — never as spam. */
|
|
1293
1320
|
private honeypotValue;
|
|
@@ -1400,20 +1427,21 @@ declare class IoxFieldComponent implements OnInit, OnDestroy {
|
|
|
1400
1427
|
*
|
|
1401
1428
|
* It carries no destination configuration of its own — "what happens with the data" is an ordered
|
|
1402
1429
|
* action list on the FORM (decision D9), so there is nothing here to wire and nothing to get out of
|
|
1403
|
-
* sync. The button owns only its own appearance
|
|
1430
|
+
* sync. The button owns only its own appearance.
|
|
1404
1431
|
*
|
|
1405
|
-
*
|
|
1406
|
-
*
|
|
1432
|
+
* It follows its FORM's state (vectoriox/iox-ui#42): its two labels are both in the markup and the shared
|
|
1433
|
+
* iox-forms.css shows "While sending" while the form's `data-iox-state` is submitting — on the canvas's Sending
|
|
1434
|
+
* state, the component path and the string path alike; busy and disabled are written by the ONE applier
|
|
1435
|
+
* (`syncSubmitButtons`) the form's runtimes call. Before, the button switched only on a `submitting` input
|
|
1436
|
+
* nothing ever wrote. The string renderer writes the same markup (forms-core `submitButtonLabelsHtml`).
|
|
1407
1437
|
*/
|
|
1408
1438
|
declare class IoxSubmitButtonComponent {
|
|
1409
1439
|
nodeId: string;
|
|
1410
1440
|
label: string;
|
|
1411
1441
|
loadingLabel: string;
|
|
1412
1442
|
disableWhileSubmitting: boolean;
|
|
1413
|
-
/** Driven by the form's lifecycle, not by the author. */
|
|
1414
|
-
submitting: boolean;
|
|
1415
1443
|
static ɵfac: i0.ɵɵFactoryDeclaration<IoxSubmitButtonComponent, never>;
|
|
1416
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<IoxSubmitButtonComponent, "button[iox-submit]", never, { "nodeId": { "alias": "nodeId"; "required": false; }; "label": { "alias": "label"; "required": false; }; "loadingLabel": { "alias": "loadingLabel"; "required": false; }; "disableWhileSubmitting": { "alias": "disableWhileSubmitting"; "required": false; };
|
|
1444
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<IoxSubmitButtonComponent, "button[iox-submit]", never, { "nodeId": { "alias": "nodeId"; "required": false; }; "label": { "alias": "label"; "required": false; }; "loadingLabel": { "alias": "loadingLabel"; "required": false; }; "disableWhileSubmitting": { "alias": "disableWhileSubmitting"; "required": false; }; }, {}, never, never, false, never>;
|
|
1417
1445
|
}
|
|
1418
1446
|
|
|
1419
1447
|
/**
|
|
@@ -1746,10 +1774,25 @@ declare enum ComponentState {
|
|
|
1746
1774
|
* — a TARGETED state: its trigger is the item (`stateTriggers['trigger-on']`), compiled through
|
|
1747
1775
|
* `targetedStateSelector`. On a node OUTSIDE every item (composite T20, CC4a) the author PICKS the item — "when tab
|
|
1748
1776
|
* Night is on" — the same state and the same `:has()` scoped to the nearest common ancestor. */
|
|
1749
|
-
ItemOpen = "trigger-on"
|
|
1750
|
-
|
|
1751
|
-
|
|
1777
|
+
ItemOpen = "trigger-on",
|
|
1778
|
+
/** G4: a control that cannot be used — a disabled button, or one marked aria-disabled. */
|
|
1779
|
+
Disabled = "disabled",
|
|
1780
|
+
/** G4: busy — a submit button while its form sends (`syncSubmitButtons`), a form while it sends. */
|
|
1781
|
+
Busy = "busy",
|
|
1782
|
+
/** G4: chosen — a toggle button pressed, an option checked or selected. */
|
|
1783
|
+
Selected = "selected",
|
|
1784
|
+
/** G4: the page has scrolled (a header that firms up once the page moves) — `SCROLLED_ATTRIBUTE` on the root. */
|
|
1785
|
+
Scrolled = "scrolled"
|
|
1786
|
+
}
|
|
1787
|
+
/** The page has scrolled: written on the document element by the live site (and on the canvas page by the builder). */
|
|
1788
|
+
declare const SCROLLED_ATTRIBUTE = "data-iox-scrolled";
|
|
1789
|
+
/** The selector each (non-targeted) component state compiles to — an attribute, or an `:is()` of the ways a node can
|
|
1790
|
+
* be in it (a native `:disabled` or `aria-disabled`; pressed / checked / selected), so one rule covers every markup. */
|
|
1752
1791
|
declare const COMPONENT_STATE_SELECTOR: Readonly<Record<string, string>>;
|
|
1792
|
+
/** Scrolled is offered on the site header and its parts — generation-core's NavRole family (`nav`, `nav.brand`…), the
|
|
1793
|
+
* drawer's parts aside (the drawer is a dialog over the page). Spelled here — the main entry does not import
|
|
1794
|
+
* generation-core; style-compiler.spec pins it to the enum. */
|
|
1795
|
+
declare const SCROLLED_STATE_ROLE = "nav";
|
|
1753
1796
|
/** The composite roles that are themselves "on" when their item is open (they carry `data-iox-on`): an accordion's
|
|
1754
1797
|
* item, header and panel; a disclosure (its own item), its toggle and its panel (CC2.1); a tab and its panel (CC4a —
|
|
1755
1798
|
* "Active"). The main entry does not import composite-core, so the roles are spelled here — `style-compiler.spec` pins
|
|
@@ -1785,19 +1828,35 @@ declare function hasHoverState(stateStyles: Record<string, Record<string, any> |
|
|
|
1785
1828
|
* The base-rule transition a hovering node gets when it declares none of its own, so a hover
|
|
1786
1829
|
* animates instead of snapping. ONE copy for the builder canvas, the style panel and the engine.
|
|
1787
1830
|
*
|
|
1788
|
-
* Two
|
|
1831
|
+
* Two timings, chosen by the element-style MARKER (§3b-bis): a node wearing an element style takes
|
|
1789
1832
|
* the motion tokens; a node without one (saved before DS2, not adopted) keeps the pre-DS2 literal
|
|
1790
|
-
*
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
declare const
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1833
|
+
* timing — seeding an org's tokens must never change how a legacy page hovers. WHAT transitions is the
|
|
1834
|
+
* list of properties the node's states change (G2 — never `transition: all`).
|
|
1835
|
+
*/
|
|
1836
|
+
declare const HOVER_DEFAULT_TRANSITION_TRAITS: Readonly<Record<string, string>>;
|
|
1837
|
+
declare const LEGACY_HOVER_TRANSITION_TRAITS: Readonly<Record<string, string>>;
|
|
1838
|
+
/** The default hover timing for a node that wears `elementStyle` (or none). */
|
|
1839
|
+
declare function defaultHoverTransitionTraits(elementStyle?: string | null): Readonly<Record<string, string>>;
|
|
1840
|
+
/** True when the RAW style map times a transition of its own (an explicit `transition`, or the
|
|
1841
|
+
* transitionDuration / TimingFunction an element style writes). */
|
|
1798
1842
|
declare function hasOwnTransition(styleProps: Record<string, any> | null | undefined): boolean;
|
|
1799
|
-
|
|
1800
|
-
|
|
1843
|
+
type StateMaps = Record<string, Record<string, any> | undefined> | null | undefined;
|
|
1844
|
+
/**
|
|
1845
|
+
* The CSS properties a node's states change — what its transition names (G2, Emil 183: never `transition: all`).
|
|
1846
|
+
* Every state the node holds, at every breakpoint, composed as the renderers compose it (translateX / scaleX → one
|
|
1847
|
+
* `transform`, a gradient background → `background-image`…), in a stable order so both renderers emit one string.
|
|
1848
|
+
*/
|
|
1849
|
+
declare function stateTransitionProperties(stateStyles: StateMaps, responsive?: Record<string, {
|
|
1850
|
+
stateStyles?: StateMaps;
|
|
1851
|
+
} | undefined> | null): string[];
|
|
1852
|
+
/**
|
|
1853
|
+
* `styleProps` as a renderer compiles them: a hovering node with no timing of its own takes the default hover timing,
|
|
1854
|
+
* and a node whose transition names no properties gets the ones its states change. An author's own `transitionProperty`
|
|
1855
|
+
* (or a raw `transition`) always wins. Pure: the node's stored styles are never touched.
|
|
1856
|
+
*/
|
|
1857
|
+
declare function withStateTransitions(styleProps: Record<string, any>, stateStyles: StateMaps, elementStyle?: string | null, responsive?: Record<string, {
|
|
1858
|
+
stateStyles?: StateMaps;
|
|
1859
|
+
} | undefined> | null): Record<string, any>;
|
|
1801
1860
|
/**
|
|
1802
1861
|
* Per-type default `width` that the builder applies from each component's config
|
|
1803
1862
|
* (NOT persisted in styleProps — see render-parity.md "saved node is not
|
|
@@ -1815,12 +1874,13 @@ declare const DEFAULT_WIDTH_BY_TYPE: Readonly<Record<string, string>>;
|
|
|
1815
1874
|
* behaviour, which the engine must re-apply explicitly for parity. Returns `"prop: value"`
|
|
1816
1875
|
* declarations to append AFTER the node's own compiled declarations.
|
|
1817
1876
|
*
|
|
1877
|
+
* The default hover transition is no longer one of them: it is composed into the node's own rule by
|
|
1878
|
+
* `withStateTransitions` (both renderers), listing the properties its states change (G2).
|
|
1879
|
+
*
|
|
1818
1880
|
* @param type Node type (registry key).
|
|
1819
1881
|
* @param styleProps The node's persisted styleProps.
|
|
1820
|
-
* @param hasHoverState Whether the node has a non-empty hover / parent-hover state.
|
|
1821
|
-
* @param elementStyle The element style the node wears — picks the default hover transition.
|
|
1822
1882
|
*/
|
|
1823
|
-
declare function renderDefaultDeclarations(type: string, styleProps: Record<string, any
|
|
1883
|
+
declare function renderDefaultDeclarations(type: string, styleProps: Record<string, any>): string[];
|
|
1824
1884
|
|
|
1825
1885
|
/**
|
|
1826
1886
|
* One composed output property and the virtual traits it is built from.
|
|
@@ -1839,6 +1899,12 @@ interface VirtualTraitGroup {
|
|
|
1839
1899
|
* (`::marker` styles are a nested map, not a single cancellable property). */
|
|
1840
1900
|
readonly reset: string | null;
|
|
1841
1901
|
}
|
|
1902
|
+
/** The Transition ▸ Properties trait (G2): what a transition names, comma-separated. Unset, the renderers fill in the
|
|
1903
|
+
* properties the node's states change (`withStateTransitions`); a transition never names `all` unless an author
|
|
1904
|
+
* typed it. */
|
|
1905
|
+
declare const TRANSITION_PROPERTY_KEY = "transitionProperty";
|
|
1906
|
+
/** The property list a `transitionProperty` value names (`color, transform` → two entries). */
|
|
1907
|
+
declare function transitionPropertyList(value: unknown): string[];
|
|
1842
1908
|
/** "Max lines" (Card v2, board 8 — opt-in on a Title / Text): a whole number clamps the text to that many
|
|
1843
1909
|
* lines with an ellipsis. It composes into the four declarations a line clamp takes; anything else
|
|
1844
1910
|
* (`none`, empty, 0) clamps nothing. */
|
|
@@ -2011,6 +2077,68 @@ declare const PART_CLASS_NAMES: Record<string, Record<string, string>>;
|
|
|
2011
2077
|
* Undefined when the type declares no such part (or no parts at all). */
|
|
2012
2078
|
declare function partClassName(type: string, partKey: string): string | undefined;
|
|
2013
2079
|
|
|
2080
|
+
/**
|
|
2081
|
+
* WHERE a state rule lands — the ONE selector planner both renderers emit state and part rules through
|
|
2082
|
+
* (vectoriox/iox-client-engine#14). Before it the builder and the engine each kept a copy: the builder matched a
|
|
2083
|
+
* structural state (first / last / odd / even child) on the OUTER element, the engine on `.iox-node` — on the
|
|
2084
|
+
* engine's component path the INNER element, the only child of its host, so "last child" matched every item; and
|
|
2085
|
+
* the engine dropped every part state but Wrong / Accepted while the builder applied a part's hover at all times.
|
|
2086
|
+
*
|
|
2087
|
+
* Returns full selectors (with their dots). Framework-free.
|
|
2088
|
+
*/
|
|
2089
|
+
/**
|
|
2090
|
+
* Properties that govern how a node sits in its PARENT's layout (flex / grid item, block child) — they live on the
|
|
2091
|
+
* OUTER element: the component's host, or the one element the string renderer and the canvas's collapsed hosts write.
|
|
2092
|
+
* Everything else is "inner". One list for both renderers (it was typed twice).
|
|
2093
|
+
*/
|
|
2094
|
+
declare const OUTER_STYLE_PROPS: ReadonlySet<string>;
|
|
2095
|
+
/** Structural pseudo-classes — matched on the element that IS the sibling among siblings (the outer). */
|
|
2096
|
+
declare const STRUCTURAL_STATES: ReadonlyArray<string>;
|
|
2097
|
+
/** States whose pseudo-class lives on the PARENT (`parent-hover` → the parent's `:hover`). */
|
|
2098
|
+
declare const RELATIONAL_STATE_PSEUDO: Readonly<Record<string, string>>;
|
|
2099
|
+
declare function isStructuralState(state: string): boolean;
|
|
2100
|
+
/** What a state rule needs besides the node: its parent (relational) or its scope and trigger (targeted). */
|
|
2101
|
+
interface StateScope {
|
|
2102
|
+
parentId?: string | null;
|
|
2103
|
+
scopeId?: string | null;
|
|
2104
|
+
triggerId?: string | null;
|
|
2105
|
+
}
|
|
2106
|
+
/** A state rule's selectors: `inner` for the node's own element; `outer`, when set, for the OUTER_STYLE_PROPS. */
|
|
2107
|
+
interface StateRulePlan {
|
|
2108
|
+
inner: string;
|
|
2109
|
+
outer?: string;
|
|
2110
|
+
}
|
|
2111
|
+
/**
|
|
2112
|
+
* The selectors of `cssId`'s rule for `state`, or null when the state cannot be scoped yet (a relational state with
|
|
2113
|
+
* no parent, a targeted one with no scope — never an unscoped, page-global rule).
|
|
2114
|
+
*
|
|
2115
|
+
* A structural state is matched on the outer element, and its styles reach the node's own element whether that is
|
|
2116
|
+
* the same element (the string path, a one-element node, the canvas's collapsed hosts) or inside it (a component's
|
|
2117
|
+
* host, a Repeater's row wrapper); its outer props stay on the outer element. Every other state is the node's own.
|
|
2118
|
+
*/
|
|
2119
|
+
declare function planStateRule(cssId: string, state: string, scope?: StateScope): StateRulePlan | null;
|
|
2120
|
+
/**
|
|
2121
|
+
* The selector of a PART's rule (a Field's label, control, help, error — `PART_CLASS_NAMES`), optionally in a state:
|
|
2122
|
+
* Wrong / Accepted and a component state on the NODE (that is where the class / attribute is), Hover / Pressed /
|
|
2123
|
+
* Focus on the PART itself. Null for a state a part does not take (structural, relational, targeted).
|
|
2124
|
+
*/
|
|
2125
|
+
declare function planPartRule(cssId: string, partClass: string, state?: string | null): string | null;
|
|
2126
|
+
/** Split a style map into the node's own props and its OUTER_STYLE_PROPS. */
|
|
2127
|
+
declare function splitOuterProps(styles: Record<string, any>): {
|
|
2128
|
+
inner: Record<string, any>;
|
|
2129
|
+
outer: Record<string, any>;
|
|
2130
|
+
};
|
|
2131
|
+
/**
|
|
2132
|
+
* The devices a hover rule is for (G1 — Emil 91, mobile-native M1): a phone has no hover, and a tap fires a false
|
|
2133
|
+
* one that STICKS until the next tap elsewhere. Every hover, parent-hover and trigger-hover rule — the node's own and
|
|
2134
|
+
* a part's — is emitted inside this query by both renderers; `:active` (a real press on touch) never is.
|
|
2135
|
+
*/
|
|
2136
|
+
declare const HOVER_MEDIA_QUERY = "(hover: hover) and (pointer: fine)";
|
|
2137
|
+
/** True for a state driven by a pointer hovering something (its own, its parent's, a chosen trigger's). */
|
|
2138
|
+
declare function isHoverState(state: string | null | undefined): boolean;
|
|
2139
|
+
/** `css` as it is emitted for `state`: inside `HOVER_MEDIA_QUERY` for a hover state, unchanged otherwise. */
|
|
2140
|
+
declare function gateHoverRule(state: string | null | undefined, css: string): string;
|
|
2141
|
+
|
|
2014
2142
|
/** Trait names whose value Swiper reads per breakpoint. Anything else is config-wide. */
|
|
2015
2143
|
declare const SWIPER_RESPONSIVE_TRAITS: readonly string[];
|
|
2016
2144
|
/** `{ [minWidth]: { slidesPerView, … } }` — Swiper's own `breakpoints` shape. */
|
|
@@ -2238,6 +2366,49 @@ interface AnimateActionOptions {
|
|
|
2238
2366
|
/** The frames are `buildInteractionKeyframes`' reversed: a reverse pass never splits text, it just fades back. */
|
|
2239
2367
|
reverse?: boolean;
|
|
2240
2368
|
}
|
|
2369
|
+
/** The id every interaction run's Animation carries — how a re-trigger finds the runs it interrupts. */
|
|
2370
|
+
declare const INTERACTION_ANIMATION_ID = "iox-interaction";
|
|
2371
|
+
/**
|
|
2372
|
+
* What a run that has ended leaves on its element (vectoriox/iox-client-engine#12, iox-ui#41) — ONE rule for the
|
|
2373
|
+
* canvas and the live site.
|
|
2374
|
+
*
|
|
2375
|
+
* `Release`: the last frame IS the element's natural state (an entrance, an exit played back, a one-shot like a
|
|
2376
|
+
* rotate). The run is cancelled and no frame is written inline, so the stylesheet applies again — the element
|
|
2377
|
+
* style's `:hover` / `:active` transforms included. Before, the last frame (`transform: translateY(0)`) was locked
|
|
2378
|
+
* inline on the site and kept by `fill: both` on the canvas, and an element that had entered never pressed again.
|
|
2379
|
+
*
|
|
2380
|
+
* `Hold`: the last frame HIDES the element (an exit, an entrance played back): it is kept, inline.
|
|
2381
|
+
*/
|
|
2382
|
+
declare enum SettleMode {
|
|
2383
|
+
Release = "release",
|
|
2384
|
+
Hold = "hold"
|
|
2385
|
+
}
|
|
2386
|
+
declare function settleModeFor(type: string, reverse?: boolean): SettleMode;
|
|
2387
|
+
interface SettleOptions {
|
|
2388
|
+
/** Properties a runtime never writes inline — the canvas never a transform (one inside the scaled page breaks Lenis). */
|
|
2389
|
+
readonly skip?: ReadonlySet<string>;
|
|
2390
|
+
}
|
|
2391
|
+
/**
|
|
2392
|
+
* Leave `el` as a run that has ended — or one that never plays, under reduced motion — should (`SettleMode`). The
|
|
2393
|
+
* frame is written (Hold) or released (Release) BEFORE `anim` is cancelled, so nothing flashes between the two.
|
|
2394
|
+
*/
|
|
2395
|
+
declare function settleInteraction(el: HTMLElement, frames: ReadonlyArray<InteractionKeyframe> | null | undefined, mode: SettleMode, options?: SettleOptions, anim?: Animation | null): void;
|
|
2396
|
+
/**
|
|
2397
|
+
* Interrupt (Emil 52/59/62): the interaction runs in flight on `el` over the same properties are stopped — never
|
|
2398
|
+
* stacked — and the new run starts from what the element shows NOW (its presentation value), not from frame 0: a
|
|
2399
|
+
* hover-out halfway through the hover-in turns back from where it is, a re-trigger continues. Untouched when
|
|
2400
|
+
* nothing is running (the run starts from its own first frame, as before).
|
|
2401
|
+
*/
|
|
2402
|
+
declare function framesFromLiveValue(el: HTMLElement, frames: ReadonlyArray<InteractionKeyframe>): InteractionKeyframe[];
|
|
2403
|
+
/**
|
|
2404
|
+
* Play an element action and settle it when it ends — THE call both runtimes make for an animated action: it starts
|
|
2405
|
+
* from the live value (`framesFromLiveValue`, inside `animateAction`) and ends by the ONE settle rule. A run that is
|
|
2406
|
+
* interrupted is never settled: the run that interrupted it owns the element now.
|
|
2407
|
+
*/
|
|
2408
|
+
declare function playInteraction(el: HTMLElement, action: {
|
|
2409
|
+
type: string;
|
|
2410
|
+
params?: Readonly<Record<string, unknown>> | null;
|
|
2411
|
+
}, frames: ReadonlyArray<InteractionKeyframe>, timing: KeyframeAnimationOptions, options?: AnimateActionOptions & SettleOptions): Animation;
|
|
2241
2412
|
/**
|
|
2242
2413
|
* Start an element action's animation: THE call both runtimes make. Most actions are one `element.animate`; a text
|
|
2243
2414
|
* reveal plays its pieces and a clip reveal opens from the side the page's direction makes of Start and End, then takes
|
|
@@ -2283,6 +2454,105 @@ declare const ENTRANCE_NOSCRIPT_CSS = "[data-iox-enter]{opacity:1!important;tran
|
|
|
2283
2454
|
*/
|
|
2284
2455
|
declare function finalKeyframe(frames: ReadonlyArray<InteractionKeyframe> | null | undefined): InteractionKeyframe | null;
|
|
2285
2456
|
|
|
2457
|
+
/**
|
|
2458
|
+
* What an interaction's easing may be (G6, decision D8): one of the five CSS keywords, a `cubic-bezier()`, or the
|
|
2459
|
+
* NAME of one of the look's easing tokens — so an author's entrance moves on the same curve as the site's buttons and
|
|
2460
|
+
* dialogs (Emil 21: one token system), and Spring plays the look's spring (a `linear()` curve, `springToLinear`).
|
|
2461
|
+
* Both runtimes resolve it the same way, through the CSS custom property on the element itself.
|
|
2462
|
+
*/
|
|
2463
|
+
declare enum EasingKeyword {
|
|
2464
|
+
Linear = "linear",
|
|
2465
|
+
Ease = "ease",
|
|
2466
|
+
EaseIn = "ease-in",
|
|
2467
|
+
EaseOut = "ease-out",
|
|
2468
|
+
EaseInOut = "ease-in-out"
|
|
2469
|
+
}
|
|
2470
|
+
/** The look's easing tokens an interaction may name (their `--iox-<name>` holds the curve). */
|
|
2471
|
+
declare enum EasingToken {
|
|
2472
|
+
Standard = "ease-standard",
|
|
2473
|
+
Enter = "ease-enter",
|
|
2474
|
+
Exit = "ease-exit",
|
|
2475
|
+
Spring = "ease-spring"
|
|
2476
|
+
}
|
|
2477
|
+
declare const EASING_KEYWORDS: ReadonlyArray<string>;
|
|
2478
|
+
declare const EASING_TOKENS: ReadonlyArray<string>;
|
|
2479
|
+
/** What an unknown or unresolvable easing plays as: a deceleration, never ease-in (Emil 17). */
|
|
2480
|
+
declare const DEFAULT_INTERACTION_EASING = EasingKeyword.EaseOut;
|
|
2481
|
+
/** A well-formed `cubic-bezier(x1, y1, x2, y2)` whose x values sit in [0, 1] (what CSS and WAAPI accept). */
|
|
2482
|
+
declare function isCubicBezier(value: unknown): boolean;
|
|
2483
|
+
declare function isEasingToken(value: unknown): value is EasingToken;
|
|
2484
|
+
/** True for anything an interaction may store as its easing. */
|
|
2485
|
+
declare function isInteractionEasing(value: unknown): boolean;
|
|
2486
|
+
/** Anything that reads a computed custom property (an element in a document; a stub in a spec). */
|
|
2487
|
+
interface StyledElement {
|
|
2488
|
+
ownerDocument?: {
|
|
2489
|
+
defaultView?: {
|
|
2490
|
+
getComputedStyle(el: unknown): {
|
|
2491
|
+
getPropertyValue(name: string): string;
|
|
2492
|
+
};
|
|
2493
|
+
} | null;
|
|
2494
|
+
} | null;
|
|
2495
|
+
}
|
|
2496
|
+
/**
|
|
2497
|
+
* The timing function WAAPI plays for `easing` on `el`: a keyword or a curve as stored; a token name → the token's
|
|
2498
|
+
* value as the element sees it (`--iox-ease-spring` → its `linear()`), so a section scheme or the canvas's token scope
|
|
2499
|
+
* applies; anything else, or a token the element cannot resolve → `fallback`.
|
|
2500
|
+
*/
|
|
2501
|
+
declare function resolveInteractionEasing(easing: unknown, el?: StyledElement | null, fallback?: string): string;
|
|
2502
|
+
|
|
2503
|
+
/**
|
|
2504
|
+
* When a pointer event should move something (G7 — Emil 85/86/91, mobile-native M1/M5). Both runtimes ask here.
|
|
2505
|
+
*
|
|
2506
|
+
* · A hover trigger answers a mouse or a pen only: a finger has no hover, and a tap's emulated mouseenter left the
|
|
2507
|
+
* hover state on until the next tap elsewhere.
|
|
2508
|
+
* · Press feedback lands on pointer-DOWN, at once — the click (pointer-up) commits. Only an action that is pure
|
|
2509
|
+
* feedback moves early: an animation of the pressed element itself that hides nothing and shows nothing. Opening,
|
|
2510
|
+
* closing, navigating and toggling stay on the click, so dragging away still cancels them. A keyboard press (Enter,
|
|
2511
|
+
* Space) has no pointer-down, so it never animates (Emil 2).
|
|
2512
|
+
*/
|
|
2513
|
+
declare enum PointerKind {
|
|
2514
|
+
Mouse = "mouse",
|
|
2515
|
+
Pen = "pen",
|
|
2516
|
+
Touch = "touch"
|
|
2517
|
+
}
|
|
2518
|
+
/** True for a pointer that really hovers — a mouse or a pen, never a finger. An event with no pointer type (a synthetic
|
|
2519
|
+
* `mouseenter`) counts as a mouse. */
|
|
2520
|
+
declare function isHoverPointer(event: {
|
|
2521
|
+
pointerType?: string | null;
|
|
2522
|
+
} | null | undefined): boolean;
|
|
2523
|
+
/** The minimal action shape this reads. */
|
|
2524
|
+
interface PressAction {
|
|
2525
|
+
type: string;
|
|
2526
|
+
target?: string;
|
|
2527
|
+
disabled?: boolean;
|
|
2528
|
+
params?: Readonly<Record<string, unknown>> | null;
|
|
2529
|
+
}
|
|
2530
|
+
/** True for an action that is press FEEDBACK: it animates the pressed element itself and neither hides nor shows it. */
|
|
2531
|
+
declare function isPressFeedback(action: PressAction | null | undefined): boolean;
|
|
2532
|
+
/** A click interaction's actions split by when they run: the feedback on pointer-down, the rest on the click. */
|
|
2533
|
+
declare function splitPressFeedback<T extends PressAction>(actions: ReadonlyArray<T> | null | undefined): {
|
|
2534
|
+
onPress: T[];
|
|
2535
|
+
onClick: T[];
|
|
2536
|
+
};
|
|
2537
|
+
|
|
2538
|
+
/** How far the page has to move before it counts as scrolled — past a trackpad's rest jitter. */
|
|
2539
|
+
declare const SCROLLED_THRESHOLD_PX = 8;
|
|
2540
|
+
/** True once `offset` has passed the threshold. */
|
|
2541
|
+
declare function isScrolled(offset: number, threshold?: number): boolean;
|
|
2542
|
+
/** Anything that scrolls: a window (`scrollY`) or an element (`scrollTop`). */
|
|
2543
|
+
interface ScrollSource {
|
|
2544
|
+
addEventListener(type: 'scroll', fn: () => void, options?: AddEventListenerOptions): void;
|
|
2545
|
+
removeEventListener(type: 'scroll', fn: () => void): void;
|
|
2546
|
+
scrollY?: number;
|
|
2547
|
+
scrollTop?: number;
|
|
2548
|
+
}
|
|
2549
|
+
/**
|
|
2550
|
+
* Keep `SCROLLED_ATTRIBUTE` on `target` while `source` has scrolled past the threshold — what the Scrolled state (G4)
|
|
2551
|
+
* compiles against, on the live site (the window → the document element) and on the canvas (its scroller → the page).
|
|
2552
|
+
* One passive listener, read once per frame, written only when it changes. Returns the stop.
|
|
2553
|
+
*/
|
|
2554
|
+
declare function watchScrolled(source: ScrollSource, target: Element, threshold?: number): () => void;
|
|
2555
|
+
|
|
2286
2556
|
/**
|
|
2287
2557
|
* page-style — the ONE compiler that turns a page's style settings into CSS.
|
|
2288
2558
|
*
|
|
@@ -3226,5 +3496,69 @@ declare class GalleryLoop {
|
|
|
3226
3496
|
private emit;
|
|
3227
3497
|
}
|
|
3228
3498
|
|
|
3229
|
-
|
|
3230
|
-
|
|
3499
|
+
/** What a host gives a string-rendered form: the POST (the engine's), where a redirect goes, how a message reads. */
|
|
3500
|
+
interface StringFormOptions {
|
|
3501
|
+
transport?: FormTransport | null;
|
|
3502
|
+
navigate?: ((url: string) => void) | null;
|
|
3503
|
+
messages?: FormMessageResolver;
|
|
3504
|
+
}
|
|
3505
|
+
/**
|
|
3506
|
+
* A form the SSR engine's string renderer wrote — every header / footer global, every string-rendered page —
|
|
3507
|
+
* run with the behaviour `IoxFormComponent` gives a component-path form (vectoriox/iox-client-engine#13): the
|
|
3508
|
+
* forms-core runtime decides when an error shows, a valid submit POSTs through the host's transport with the
|
|
3509
|
+
* anti-spam fields, the form moves idle → submitting → success / error on `data-iox-state` (the shared CSS shows
|
|
3510
|
+
* the designed block), the first problem takes focus and the failure is announced. Nothing posts natively.
|
|
3511
|
+
*
|
|
3512
|
+
* Its fields come from the form itself (`data-iox-form-fields`, the spec minus its destinations), so the
|
|
3513
|
+
* runtime needs no node tree. Idempotent per element.
|
|
3514
|
+
*/
|
|
3515
|
+
declare class StringFormRuntime {
|
|
3516
|
+
private readonly form;
|
|
3517
|
+
private readonly spec;
|
|
3518
|
+
private readonly options;
|
|
3519
|
+
private state;
|
|
3520
|
+
private inFlight;
|
|
3521
|
+
private readonly renderedAt;
|
|
3522
|
+
private readonly listeners;
|
|
3523
|
+
private readonly messages;
|
|
3524
|
+
constructor(form: HTMLFormElement, spec: ClientFormSpec, options?: StringFormOptions);
|
|
3525
|
+
destroy(): void;
|
|
3526
|
+
/** The visitor's answers, keyed by the spec's field names. */
|
|
3527
|
+
values(): Record<string, unknown>;
|
|
3528
|
+
private listen;
|
|
3529
|
+
private fieldNameOf;
|
|
3530
|
+
private onEdit;
|
|
3531
|
+
private onLeave;
|
|
3532
|
+
private onSubmit;
|
|
3533
|
+
private send;
|
|
3534
|
+
private apply;
|
|
3535
|
+
private setRenderState;
|
|
3536
|
+
private fullSpec;
|
|
3537
|
+
private fieldElement;
|
|
3538
|
+
private controlsOf;
|
|
3539
|
+
private valueOf;
|
|
3540
|
+
/** Every field's error, aria-invalid, describedby and invalid class — as `IoxFieldComponent` renders them. */
|
|
3541
|
+
private render;
|
|
3542
|
+
private renderError;
|
|
3543
|
+
private announce;
|
|
3544
|
+
private focusFirstInvalid;
|
|
3545
|
+
private honeypotValue;
|
|
3546
|
+
}
|
|
3547
|
+
/** The runtime already running a form element, if any. */
|
|
3548
|
+
declare function stringFormRuntimeOf(form: Element | null | undefined): StringFormRuntime | null;
|
|
3549
|
+
/**
|
|
3550
|
+
* Run a string-rendered form (one carrying `data-iox-form-fields`) — once: a form already running is returned as is.
|
|
3551
|
+
* Null for an element that is not one (a component-path form never carries the attribute; it runs itself).
|
|
3552
|
+
*/
|
|
3553
|
+
declare function attachStringForm(form: Element | null | undefined, options?: StringFormOptions): StringFormRuntime | null;
|
|
3554
|
+
|
|
3555
|
+
/**
|
|
3556
|
+
* Put every submit button of `form` in the form's state (vectoriox/iox-ui#42): busy (`aria-busy`) and — unless its
|
|
3557
|
+
* author turned it off — disabled while the form sends; itself again otherwise. The ONE applier: the component path's
|
|
3558
|
+
* form, the string runtime and the canvas's Sending state all call it, from the shared `submitButtonView`. A button
|
|
3559
|
+
* inside a nested form belongs to that form, not this one.
|
|
3560
|
+
*/
|
|
3561
|
+
declare function syncSubmitButtons(form: Element | null | undefined, state: FormRenderState | string | null | undefined): void;
|
|
3562
|
+
|
|
3563
|
+
export { A11yAttribute, A11yTrait, ACCESSIBLE_NAME_TYPES, AOSService, ARIA_CURRENT_PAGE, BACKDROP_TWIN_KEY, BACKDROP_WHOLE_KEY, BREAKPOINTS, Breakpoint, BreakpointQueryKind, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, COMPONENT_STATE_SELECTOR, CONTAINER_HTML_TAGS, CONTEXT_ACTION_TYPES, CURRENT_LINK_TYPES, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ComponentState, ContainerComponent, ContextStore, DECORATIVE_TYPES, DEFAULT_GALLERY_SCHEDULER, DEFAULT_INTERACTION_EASING, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_PHOSPHOR_WEIGHT, DEFAULT_WIDTH_BY_TYPE, DIALOG_CLOSE_ABOVE_ATTRIBUTE, DIALOG_NODE_TYPE, DeclarationContext, EASING_KEYWORDS, EASING_TOKENS, ENTRANCE_ACTION_TYPES, ENTRANCE_FALLBACK_CSS, ENTRANCE_NOSCRIPT_CSS, ENTRANCE_PRESTATE_ATTRIBUTE, EXIT_ACTION_TYPES, EasingKeyword, EasingToken, FormRenderState, FormRuntimeService, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, HOVER_DEFAULT_TRANSITION_TRAITS, HOVER_MEDIA_QUERY, HOVER_STATES, INTERACTION_ANIMATION_ID, INTERACTION_HIDDEN_ATTRIBUTE, IOX_BUILDER_EVENTS, IOX_FORM_MESSAGES, IOX_FORM_NAVIGATOR, IOX_FORM_TRANSPORT, IS_PREVIEW, IoxAnimateContainer, IoxAosDirective, IoxAosModule, IoxBuilderComponentsModule, IoxComponentRegistryService, IoxDialogComponent, IoxFieldComponent, IoxFormComponent, IoxFormErrorComponent, IoxFormSuccessComponent, IoxPageComponent, IoxPageModule, IoxSubmitButtonComponent, IoxUiModule, IoxVideoComponent, LAST_EMITTED_STATES, LEGACY_DIRECTION_KEY, LEGACY_HOVER_TRANSITION_TRAITS, LEGACY_SWIPER_CONTROLS, LinkedContainerComponent, MANAGED_A11Y_ATTRIBUTES, MAX_LINES_KEY, NAMED_GROUP_ROLES, NO_PAGE_TRANSITION, ON_STATE_ROLES, OUTER_STYLE_PROPS, PAGE_STYLE_TOKENS, PAGE_TOKEN_FALLBACKS, PAGE_TRANSITION_CATEGORIES, PAGE_TRANSITION_PRESETS, PART_CLASS_NAMES, PART_PAGINATION_MODIFIER, PHONE_TRANSITION_QUERY, PIPE_DESCRIPTORS, PIPE_REGISTRY, PageScrollProvider, PageStyleField, PageStyleSource, PointerKind, REDUCED_MOTION_QUERY, RELATIONAL_STATE_PSEUDO, RevealActionType, SCROLLED_ATTRIBUTE, SCROLLED_STATE_ROLE, SCROLLED_THRESHOLD_PX, SCROLL_EASINGS, SELF_PLAYING_TRIGGERS, SLIDER_INPUTS_ATTRIBUTE, SLIDER_INPUT_NAMES, STATE_PSEUDO_CLASS, STRUCTURAL_STATES, SUPPRESSED_STYLE_PROPS_BY_TYPE, SWIPER_A11Y_OPTIONS, SWIPER_RESPONSIVE_TRAITS, SWIPER_TRIGGER_EVENTS, ScrollEasing, SectionComponent, SettleMode, StringFormRuntime, SwiperModuleName, TARGETED_STATE_SUFFIX, TEXT_ALIGN_KEY, TEXT_DIRECTION_KEY, TRANSITION_FEELS, TRANSITION_PROPERTY_KEY, TextAlign, TextBlockComponent, VALIDATION_STATES, VALIDATION_STATE_CLASS, VIRTUAL_TRAIT_GROUPS, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, VisibilityActionType, activeActions, animateAction, applyBindingPipes, applyFeel, attachStringForm, bootSlider, breakpointDef, breakpointForWidth, breakpointQueryFor, buildInteractionKeyframes, buildPartSelector, buildSwiperBreakpoints, buildTargetedStateSelector, buildTargetedSuffixSelector, buildTransitionTimeline, cascadeChain, clearInputOverride, clearOverride, closeAboveMediaQuery, collectContextSlotKeys, compileDeclarations, compilePageStyle, componentStatesFor, composeVirtualTraits, containerHtmlTag, contextActionEffect, contextSlotKeys, countOverrides, declaredInputNames, decomposeBackdropFilter, defaultHoverTransitionTraits, defaultMessageResolver, deriveSeoFromContent, describePageStyle, describeSeoFields, dialogCloseAboveMinWidth, domHasSliderParts, effectiveActionType, effectiveTransitionId, entrancePreStateStyle, entranceStartsHidden, feelFor, finalKeyframe, framesFromLiveValue, gateHoverRule, getSeoValue, hasHoverState, hasOwnPageTransition, hasOwnTransition, initialSlotValues, isActionEnabled, isContextAction, isCubicBezier, isCurrentLink, isEasingToken, isExternalOrFragment, isGradientPaint, isHoverPointer, isHoverState, isInputOverriddenAt, isInteractionEasing, isLastEmittedStateKey, isOverriddenAt, isPressFeedback, isScrolled, isStructuralState, isValidSlotKey, isWholeBackdropSet, keyframePropertyName, keyframeStyleEntries, legacyEnterToTransition, mediaQueryFor, mergeSwiperBreakpoints, migrateLegacyDirection, migrateLegacyTextAlign, motionAllowed, nearestCommonAncestorId, needsAccessibleName, needsGroupName, nodeA11yAttributes, nodeCssId, nodeTraitValue, nodeUsesContext, normalizeAppPath, normalizeGalleryImage, normalizeIconClass, orderStatesForEmit, pageTransitionOf, parentBreakpoint, parseUrlList, partClassName, planPartRule, planResponsiveRules, planScroll, planStateRule, planSwiperOptions, playDualLayerTransition, playInteraction, prefersReducedMotion, renderDefaultDeclarations, resetPageStyleField, resetSeoField, resolveBoundValue, resolveContextValue, resolveGalleryEffect, resolveGalleryUrls, resolveInputChain, resolveInputs, resolveInteractionEasing, resolvePageTransition, resolvePath, resolveSeo, resolveStateStyles, resolveStyleProps, resolveToggleVisibility, resolveValueChain, rewriteViewportUnits, safeSetInput, serializeA11yAttributes, setInputOverride, setOverride, setSeoAuto, setSeoBinding, setSeoOverride, setSeoValue, settleInteraction, settleModeFor, sliderControlElements, sliderInputsFromProps, sliderInputsOf, splitOuterProps, splitPressFeedback, stateNamesIn, statePseudoClass, stateSelectorSuffix, stateTransitionProperties, stringFormRuntimeOf, stripSuppressedProps, swiperAutoplayAllowed, swiperLoopOptions, swiperModuleNames, syncNodeA11yAttributes, syncSubmitButtons, targetedStateSelector, transitionPropertyList, viewportTransitionContext, watchScrolled, withContextSlots, withStateTransitions, wrapInBreakpointQuery, wrapInMediaQuery };
|
|
3564
|
+
export type { A11yNodeSource, AnimateActionOptions, BoundValueSpec, BreakpointDef, ContextActionEffect, ContextActionLike, ContextItemRef, ContextSlotDefault, ContextValueSpec, ContextWriteScope, CurrentLinkOptions, FormMessageResolver, GalleryBoundSource, GalleryDurations, GalleryEffect, GalleryEffectDescriptor, GalleryImage, GalleryLoopOptions, GalleryLoopScheduler, GalleryLoopState, GallerySlideState, IBuilderEventEmitter, InputMap, InteractionKeyframe, IoxContextSlot, IoxPipe, MatchMediaHost, NodeA11yContext, OverrideBreakpoint, PageScrollStart, PageStyleFieldState, PageStyleOptions, PageStyleSettings, PageTransitionCategory, PageTransitionCategoryMeta, PageTransitionContext, PageTransitionOptions, PageTransitionPreset, PipeArgSpec, PipeContext, PipeDescriptor, PlannedPageTransition, PressAction, ResolvedPageTransition, ResponsiveLayer, ResponsiveOverrides, ResponsiveRuleSet, RouteAnimationLike, ScrollPlanContext, ScrollSource, SeoDerivedContent, SeoFieldSource, SeoFieldState, SeoResolveContext, SetContextParams, SettleOptions, SliderBootOptions, SliderControlElements, SliderInputs, StateRulePlan, StateScope, StateStyleMap, StringFormOptions, StyleMap, StyleTreeNode, SwiperBreakpointMap, SwiperModuleFlags, SwiperPlan, SwiperPlanContext, ToggleableAction, TransitionFeel, TransitionPhase, TransitionPreviewLayers, TransitionTimelineInput, TransitionViewport, ValueSource, VirtualTraitGroup };
|