@vectoriox/iox-ui 4.22.0 → 4.23.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.
@@ -2821,14 +2821,17 @@ const MARKER_FUNS = [
2821
2821
  ['markerColor', 'color'],
2822
2822
  ['markerFontSize', 'fontSize'],
2823
2823
  ];
2824
- // ─── All virtual trait names ──────────────────────────────────────────────────
2825
- const VIRTUAL_TRAIT_KEYS = new Set([
2826
- ...FILTER_FUNS.map(([t]) => t),
2827
- ...BACKDROP_FUNS.map(([t]) => t),
2828
- ...TRANSFORM_FUNS.map(([t]) => t),
2829
- 'transitionDuration', 'transitionTimingFunction', 'transitionDelay',
2830
- ...MARKER_FUNS.map(([t]) => t),
2824
+ const TRANSITION_KEYS = ['transitionDuration', 'transitionTimingFunction', 'transitionDelay'];
2825
+ const VIRTUAL_TRAIT_GROUPS = Object.freeze([
2826
+ { output: 'filter', keys: FILTER_FUNS.map(([t]) => t), reset: 'none' },
2827
+ { output: 'backdropFilter', keys: BACKDROP_FUNS.map(([t]) => t), reset: 'none' },
2828
+ { output: 'transform', keys: TRANSFORM_FUNS.map(([t]) => t), reset: 'none' },
2829
+ { output: 'transition', keys: [...TRANSITION_KEYS], reset: 'none' },
2830
+ { output: '__markerStyles', keys: MARKER_FUNS.map(([t]) => t), reset: null },
2831
2831
  ]);
2832
+ // ─── All virtual trait names ──────────────────────────────────────────────────
2833
+ /** Every virtual trait key — derived from the groups so there is one list to maintain. */
2834
+ const VIRTUAL_TRAIT_KEYS = new Set(VIRTUAL_TRAIT_GROUPS.flatMap(g => g.keys));
2832
2835
  // ─── Helpers ─────────────────────────────────────────────────────────────────
2833
2836
  function buildFns(funs, src) {
2834
2837
  return funs
@@ -2970,6 +2973,311 @@ function buildTargetedStateSelector(scopeCssId, triggerCssId, styledCssId, base)
2970
2973
  return `iox-node-${scopeCssId}:has(.iox-node-${triggerCssId}:${base}) .iox-node-${styledCssId}`;
2971
2974
  }
2972
2975
 
2976
+ // Responsive (per-breakpoint) styles — the shared model, cascade and emission plan.
2977
+ //
2978
+ // SHARED (iox-ui): the builder canvas AND the SSR engine both call this. The builder
2979
+ // FLATTENS the active breakpoint (its canvas is a transformed frame inside a desktop
2980
+ // browser, so a real `@media` query would read the editor's width); the engine WRAPS
2981
+ // each planned layer in `@media`. Same decisions, different transport — never fork them.
2982
+ //
2983
+ // Storage is a sparse layer beside the existing keys, shaped like `stateStyles`:
2984
+ //
2985
+ // styleProps — base, full resolved set (unchanged)
2986
+ // stateStyles — sparse per-state overrides (unchanged)
2987
+ // responsive — sparse per-breakpoint overrides (this file)
2988
+ // { mobile: { styleProps: {…}, stateStyles: { hover: {…} } } }
2989
+ //
2990
+ // A node with no `responsive` key renders exactly as before — no migration.
2991
+ // See iox-ai-guidance `architecture/builder/responsive-breakpoints-plan.md`.
2992
+ // ─── Breakpoints ─────────────────────────────────────────────────────────────
2993
+ /** The five fixed breakpoints (plan decision D2). Desktop-first: each narrower one
2994
+ * overrides the wider ones through `max-width`. */
2995
+ var Breakpoint;
2996
+ (function (Breakpoint) {
2997
+ Breakpoint["Base"] = "base";
2998
+ Breakpoint["Laptop"] = "laptop";
2999
+ Breakpoint["Tablet"] = "tablet";
3000
+ Breakpoint["Mobile"] = "mobile";
3001
+ Breakpoint["Small"] = "small";
3002
+ })(Breakpoint || (Breakpoint = {}));
3003
+ /**
3004
+ * Widest → narrowest. This order IS the cascade order and the `@media` emission order.
3005
+ *
3006
+ * ⚠️ Phones in portrait (360–430px) land in `Small`, NOT `Mobile` — `Mobile` is 480–767,
3007
+ * a phone held landscape. The labels say so (as Webflow's do). The ids stay short because
3008
+ * they are storage keys; the cascade still makes a `Mobile` override reach every phone.
3009
+ */
3010
+ const BREAKPOINTS = Object.freeze([
3011
+ { id: Breakpoint.Base, label: 'Base', maxWidth: null, previewWidth: 1440 },
3012
+ { id: Breakpoint.Laptop, label: 'Laptop', maxWidth: 1200, previewWidth: 1200 },
3013
+ { id: Breakpoint.Tablet, label: 'Tablet', maxWidth: 991, previewWidth: 768 },
3014
+ { id: Breakpoint.Mobile, label: 'Mobile landscape', maxWidth: 767, previewWidth: 568 },
3015
+ { id: Breakpoint.Small, label: 'Mobile portrait', maxWidth: 479, previewWidth: 390 },
3016
+ ]);
3017
+ const BREAKPOINT_INDEX = new Map(BREAKPOINTS.map((d, i) => [d.id, i]));
3018
+ /** The definition for `bp`, or `undefined` for an unknown id (e.g. hand-edited JSON). */
3019
+ function breakpointDef(bp) {
3020
+ const i = BREAKPOINT_INDEX.get(bp);
3021
+ return i === undefined ? undefined : BREAKPOINTS[i];
3022
+ }
3023
+ /** Base → `bp`, inclusive — the layers whose values apply at `bp`. Unknown → `[Base]`. */
3024
+ function cascadeChain(bp) {
3025
+ const i = BREAKPOINT_INDEX.get(bp);
3026
+ return BREAKPOINTS.slice(0, (i ?? 0) + 1).map(d => d.id);
3027
+ }
3028
+ /** The next-wider breakpoint (what `bp` inherits from), or `null` for Base / unknown. */
3029
+ function parentBreakpoint(bp) {
3030
+ const i = BREAKPOINT_INDEX.get(bp);
3031
+ return i ? BREAKPOINTS[i - 1].id : null;
3032
+ }
3033
+ /** `@media (max-width: 767px)` for `bp`; `null` for Base or an unknown id. */
3034
+ function mediaQueryFor(bp) {
3035
+ const max = breakpointDef(bp)?.maxWidth;
3036
+ return max == null ? null : `@media (max-width: ${max}px)`;
3037
+ }
3038
+ /** Wrap already-compiled rules for `bp`. Base (and blank css) passes through unwrapped. */
3039
+ function wrapInMediaQuery(bp, css) {
3040
+ const query = mediaQueryFor(bp);
3041
+ if (!css.trim())
3042
+ return '';
3043
+ return query ? `${query} {\n${css}\n}` : css;
3044
+ }
3045
+ function layerAt(responsive, bp) {
3046
+ return bp === Breakpoint.Base ? undefined : responsive?.[bp];
3047
+ }
3048
+ /** Copy defined entries of `src` onto `target`. `undefined` never overwrites a value. */
3049
+ function assignDefined(target, src) {
3050
+ if (src)
3051
+ for (const [k, v] of Object.entries(src))
3052
+ if (v !== undefined)
3053
+ target[k] = v;
3054
+ return target;
3055
+ }
3056
+ function hasKeys(map) {
3057
+ return !!map && Object.keys(map).length > 0;
3058
+ }
3059
+ // ─── Cascade resolution ──────────────────────────────────────────────────────
3060
+ /** The full effective style map at `bp`: base, then each layer down the cascade. */
3061
+ function resolveStyleProps(styleProps, responsive, bp) {
3062
+ const out = assignDefined({}, styleProps ?? undefined);
3063
+ for (const id of cascadeChain(bp))
3064
+ assignDefined(out, layerAt(responsive, id)?.styleProps);
3065
+ return out;
3066
+ }
3067
+ /** The effective per-state maps at `bp`. States with no values anywhere are omitted. */
3068
+ function resolveStateStyles(stateStyles, responsive, bp) {
3069
+ const out = {};
3070
+ const merge = (src) => {
3071
+ for (const [state, map] of Object.entries(src ?? {})) {
3072
+ out[state] = assignDefined(out[state] ?? {}, map);
3073
+ }
3074
+ };
3075
+ merge(stateStyles ?? undefined);
3076
+ for (const id of cascadeChain(bp))
3077
+ merge(layerAt(responsive, id)?.stateStyles);
3078
+ for (const state of Object.keys(out))
3079
+ if (!hasKeys(out[state]))
3080
+ delete out[state];
3081
+ return out;
3082
+ }
3083
+ /**
3084
+ * Every level from Base down to `bp` that sets `prop` (optionally within `state`), in
3085
+ * cascade order. The LAST entry is the effective value; an empty array means unset.
3086
+ * Drives the style panel's source chain ("Base 34 → Tablet 28 → Mobile 22").
3087
+ */
3088
+ function resolveValueChain(prop, styleProps, stateStyles, responsive, bp, state) {
3089
+ const read = (props, states) => (state ? states?.[state] : props)?.[prop];
3090
+ const chain = [];
3091
+ for (const id of cascadeChain(bp)) {
3092
+ const layer = layerAt(responsive, id);
3093
+ const value = id === Breakpoint.Base
3094
+ ? read(styleProps ?? undefined, stateStyles ?? undefined)
3095
+ : read(layer?.styleProps, layer?.stateStyles);
3096
+ if (value !== undefined)
3097
+ chain.push({ breakpoint: id, value });
3098
+ }
3099
+ return chain;
3100
+ }
3101
+ /** True when `bp` itself sets `prop` (the style panel's orange edge). Never true for Base. */
3102
+ function isOverriddenAt(responsive, bp, prop, state) {
3103
+ const layer = layerAt(responsive, bp);
3104
+ const map = state ? layer?.stateStyles?.[state] : layer?.styleProps;
3105
+ return map?.[prop] !== undefined;
3106
+ }
3107
+ /** Number of overridden values — at `bp`, or across every breakpoint when omitted. */
3108
+ function countOverrides(responsive, bp) {
3109
+ const count = (map) => Object.values(map ?? {}).filter(v => v !== undefined).length;
3110
+ const ids = bp ? [bp] : BREAKPOINTS.map(d => d.id);
3111
+ let n = 0;
3112
+ for (const id of ids) {
3113
+ const layer = layerAt(responsive, id);
3114
+ n += count(layer?.styleProps);
3115
+ for (const map of Object.values(layer?.stateStyles ?? {}))
3116
+ n += count(map);
3117
+ }
3118
+ return n;
3119
+ }
3120
+ // ─── Editing (immutable) ─────────────────────────────────────────────────────
3121
+ function assertOverrideBreakpoint(bp) {
3122
+ if (bp === Breakpoint.Base) {
3123
+ throw new Error('Base styles live in styleProps / stateStyles, not in responsive overrides');
3124
+ }
3125
+ if (!BREAKPOINT_INDEX.has(bp))
3126
+ throw new Error(`Unknown breakpoint "${bp}"`);
3127
+ }
3128
+ /** Returns a new overrides object with `prop` set at `bp` (optionally within `state`). */
3129
+ function setOverride(responsive, bp, prop, value, state) {
3130
+ assertOverrideBreakpoint(bp);
3131
+ const layer = { ...(responsive?.[bp] ?? {}) };
3132
+ if (state) {
3133
+ layer.stateStyles = { ...(layer.stateStyles ?? {}), [state]: { ...(layer.stateStyles?.[state] ?? {}), [prop]: value } };
3134
+ }
3135
+ else {
3136
+ layer.styleProps = { ...(layer.styleProps ?? {}), [prop]: value };
3137
+ }
3138
+ return { ...(responsive ?? {}), [bp]: layer };
3139
+ }
3140
+ /**
3141
+ * Remove overrides at `bp` and PRUNE whatever becomes empty, so "reset" and "never
3142
+ * overridden" are the same state on disk — no tombstones, no nulls.
3143
+ *
3144
+ * clearOverride(r, bp) — the whole breakpoint
3145
+ * clearOverride(r, bp, undefined, st) — one state at that breakpoint
3146
+ * clearOverride(r, bp, prop) — one base-state value
3147
+ * clearOverride(r, bp, prop, st) — one value within a state
3148
+ *
3149
+ * Returns `undefined` when nothing is left, so a serialiser omits the key entirely.
3150
+ */
3151
+ function clearOverride(responsive, bp, prop, state) {
3152
+ assertOverrideBreakpoint(bp);
3153
+ const next = { ...(responsive ?? {}) };
3154
+ const current = next[bp];
3155
+ if (current && (prop !== undefined || state !== undefined)) {
3156
+ const layer = { ...current };
3157
+ if (state) {
3158
+ const states = { ...(layer.stateStyles ?? {}) };
3159
+ if (prop !== undefined && states[state]) {
3160
+ const { [prop]: _dropped, ...rest } = states[state];
3161
+ states[state] = rest;
3162
+ }
3163
+ if (prop === undefined || !hasKeys(states[state]))
3164
+ delete states[state];
3165
+ layer.stateStyles = hasKeys(states) ? states : undefined;
3166
+ }
3167
+ else if (prop !== undefined && layer.styleProps) {
3168
+ const { [prop]: _dropped, ...rest } = layer.styleProps;
3169
+ layer.styleProps = hasKeys(rest) ? rest : undefined;
3170
+ }
3171
+ if (!layer.stateStyles)
3172
+ delete layer.stateStyles;
3173
+ if (!layer.styleProps)
3174
+ delete layer.styleProps;
3175
+ next[bp] = hasKeys(layer) ? layer : undefined;
3176
+ }
3177
+ else {
3178
+ next[bp] = undefined;
3179
+ }
3180
+ if (!next[bp])
3181
+ delete next[bp];
3182
+ return hasKeys(next) ? next : undefined;
3183
+ }
3184
+ const ZERO_DURATIONS = new Set(['0ms', '0s']);
3185
+ function groupsTouchedBy(map) {
3186
+ const touched = new Set();
3187
+ if (!map)
3188
+ return touched;
3189
+ for (const group of VIRTUAL_TRAIT_GROUPS) {
3190
+ if (group.keys.some(k => map[k] !== undefined))
3191
+ touched.add(group);
3192
+ }
3193
+ return touched;
3194
+ }
3195
+ /**
3196
+ * Should a touched group that composed to nothing emit its cancelling value?
3197
+ * Transition is the exception: setting only the easing (no duration anywhere) composes to
3198
+ * nothing too, and cancelling there would also kill the renderer's default hover transition
3199
+ * — so transition cancels only when the merged duration is explicitly zero.
3200
+ */
3201
+ function shouldReset(group, merged) {
3202
+ if (group.reset === null)
3203
+ return false;
3204
+ if (group.output === 'transition')
3205
+ return ZERO_DURATIONS.has(String(merged['transitionDuration']));
3206
+ return true;
3207
+ }
3208
+ /**
3209
+ * Compose a sparse override against everything wider than it, keeping ONLY what the
3210
+ * override changes: its own plain props, plus each virtual group it touches (or that
3211
+ * group's cancelling value when it now composes to nothing). Untouched groups are dropped
3212
+ * — re-emitting the wider rule's value inside a media block is noise at best.
3213
+ */
3214
+ function composeOverride(own, wider, touched) {
3215
+ const composed = composeVirtualTraits(own, wider);
3216
+ const groupOutputs = new Set(VIRTUAL_TRAIT_GROUPS.map(g => g.output));
3217
+ const out = {};
3218
+ for (const [k, v] of Object.entries(composed)) {
3219
+ if (!groupOutputs.has(k) && v !== undefined)
3220
+ out[k] = v;
3221
+ }
3222
+ const merged = { ...wider, ...own };
3223
+ for (const group of touched) {
3224
+ const value = composed[group.output];
3225
+ if (value !== undefined)
3226
+ out[group.output] = value;
3227
+ else if (shouldReset(group, merged))
3228
+ out[group.output] = group.reset;
3229
+ }
3230
+ return out;
3231
+ }
3232
+ /**
3233
+ * The per-breakpoint rule sets a node needs, widest → narrowest (the order they must be
3234
+ * emitted in, AFTER every base rule — equal specificity means source order decides).
3235
+ * Breakpoints with nothing to emit are omitted.
3236
+ *
3237
+ * Handles the cross-axis case: a breakpoint that changes a virtual group (say
3238
+ * `translateX`) also re-emits that group for every state the node has, because the wider
3239
+ * state rule was composed against the wider value and would otherwise snap back to it on
3240
+ * hover.
3241
+ */
3242
+ function planResponsiveRules(styleProps, stateStyles, responsive) {
3243
+ if (!hasKeys(responsive))
3244
+ return [];
3245
+ const plan = [];
3246
+ for (const def of BREAKPOINTS) {
3247
+ const layer = layerAt(responsive, def.id);
3248
+ if (!layer || def.maxWidth == null)
3249
+ continue;
3250
+ const bp = def.id;
3251
+ const wider = parentBreakpoint(bp);
3252
+ const own = layer.styleProps ?? {};
3253
+ const widerProps = resolveStyleProps(styleProps, responsive, wider);
3254
+ const touchedByProps = groupsTouchedBy(own);
3255
+ const composedProps = composeOverride(own, widerProps, touchedByProps);
3256
+ const propsHere = { ...widerProps, ...own };
3257
+ const statesHere = resolveStateStyles(stateStyles, responsive, bp);
3258
+ const statesWider = resolveStateStyles(stateStyles, responsive, wider);
3259
+ const composedStates = {};
3260
+ for (const state of Object.keys(statesHere)) {
3261
+ const ownState = layer.stateStyles?.[state] ?? {};
3262
+ const touched = groupsTouchedBy(ownState);
3263
+ for (const group of touchedByProps)
3264
+ touched.add(group);
3265
+ const composed = composeOverride(ownState, { ...propsHere, ...(statesWider[state] ?? {}) }, touched);
3266
+ if (hasKeys(composed))
3267
+ composedStates[state] = composed;
3268
+ }
3269
+ if (hasKeys(composedProps) || hasKeys(composedStates)) {
3270
+ plan.push({
3271
+ breakpoint: bp,
3272
+ mediaQuery: mediaQueryFor(bp),
3273
+ styleProps: composedProps,
3274
+ stateStyles: composedStates,
3275
+ });
3276
+ }
3277
+ }
3278
+ return plan;
3279
+ }
3280
+
2973
3281
  /**
2974
3282
  * Shared RELATIVE (route-context) data resolving — the SINGLE source of truth for how a detail page
2975
3283
  * derives values FROM its current route item, consumed by BOTH the page builder (iox-cms-client) and
@@ -4004,5 +4312,5 @@ function effectiveTransitionId(anim) {
4004
4312
  * Generated bundle index. Do not edit.
4005
4313
  */
4006
4314
 
4007
- export { AOSService, AnalyticsService, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CMSClientInfraModule, CONTEXT_ACTION_TYPES, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ConsentService, ContainerComponent, ContentService, ContextStore, DEFAULT_GALLERY_SCHEDULER, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_WIDTH_BY_TYPE, ENVIRONMENT, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, IOX_BUILDER_EVENTS, IS_PREVIEW, IoxAnimateContainer, IoxAosDirective, IoxAosModule, IoxBuilderComponentsModule, IoxComponentRegistryService, IoxPageComponent, IoxPageModule, IoxUiModule, LinkedContainerComponent, PAGE_TRANSITION_CATEGORIES, PAGE_TRANSITION_PRESETS, PIPE_DESCRIPTORS, PIPE_REGISTRY, PageScrollProvider, PrivacyModalComponent, PrivacyModalService, PrivacyModelEvent, RESERVED_ALIAS_PREFIX, SUPPRESSED_STYLE_PROPS_BY_TYPE, SectionComponent, TRANSITION_FEELS, TextBlockComponent, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, WebSettingsService, activeActions, applyBindingPipes, applyFeel, buildDataSourceFilter, buildRelatedFilter, buildTargetedStateSelector, buildTransitionTimeline, collectContextSlotKeys, collectReferencedAliases, compileDeclarations, composeVirtualTraits, computeRelative, contextActionEffect, contextSlotKeys, dataSourcePlanToRequest, declaredInputNames, effectiveTransitionId, excludeSelf, feelFor, getByPath, initialSlotValues, isActionEnabled, isContextAction, isReservedAlias, isValidSlotKey, legacyEnterToTransition, matchRouteParams, nearestCommonAncestorId, nodeCssId, nodeUsesContext, normalizeCollectionResult, parseUrlList, planDataSource, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resolveContextValue, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolvePageTransition, resolvePath, resolveRelativeInto, resolveRepeaterItems, resolveSiblings, resolveSingleItemId, rewriteViewportUnits, safeSetInput, stripSuppressedProps, styleKeyToKebab, variableAliases, variableItemsFrom, withContextSlots };
4315
+ export { AOSService, AnalyticsService, BREAKPOINTS, Breakpoint, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CMSClientInfraModule, CONTEXT_ACTION_TYPES, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ConsentService, ContainerComponent, ContentService, ContextStore, DEFAULT_GALLERY_SCHEDULER, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_WIDTH_BY_TYPE, ENVIRONMENT, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, IOX_BUILDER_EVENTS, IS_PREVIEW, IoxAnimateContainer, IoxAosDirective, IoxAosModule, IoxBuilderComponentsModule, IoxComponentRegistryService, IoxPageComponent, IoxPageModule, IoxUiModule, LinkedContainerComponent, PAGE_TRANSITION_CATEGORIES, PAGE_TRANSITION_PRESETS, PIPE_DESCRIPTORS, PIPE_REGISTRY, PageScrollProvider, PrivacyModalComponent, PrivacyModalService, PrivacyModelEvent, RESERVED_ALIAS_PREFIX, SUPPRESSED_STYLE_PROPS_BY_TYPE, SectionComponent, TRANSITION_FEELS, TextBlockComponent, VIRTUAL_TRAIT_GROUPS, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, WebSettingsService, activeActions, applyBindingPipes, applyFeel, breakpointDef, buildDataSourceFilter, buildRelatedFilter, buildTargetedStateSelector, buildTransitionTimeline, cascadeChain, clearOverride, collectContextSlotKeys, collectReferencedAliases, compileDeclarations, composeVirtualTraits, computeRelative, contextActionEffect, contextSlotKeys, countOverrides, dataSourcePlanToRequest, declaredInputNames, effectiveTransitionId, excludeSelf, feelFor, getByPath, initialSlotValues, isActionEnabled, isContextAction, isOverriddenAt, isReservedAlias, isValidSlotKey, legacyEnterToTransition, matchRouteParams, mediaQueryFor, nearestCommonAncestorId, nodeCssId, nodeUsesContext, normalizeCollectionResult, parentBreakpoint, parseUrlList, planDataSource, planResponsiveRules, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resolveContextValue, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolvePageTransition, resolvePath, resolveRelativeInto, resolveRepeaterItems, resolveSiblings, resolveSingleItemId, resolveStateStyles, resolveStyleProps, resolveValueChain, rewriteViewportUnits, safeSetInput, setOverride, stripSuppressedProps, styleKeyToKebab, variableAliases, variableItemsFrom, withContextSlots, wrapInMediaQuery };
4008
4316
  //# sourceMappingURL=vectoriox-iox-ui.mjs.map