@vectoriox/iox-ui 5.36.0 → 5.38.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.
Files changed (43) hide show
  1. package/actions-core/index.d.ts +17 -3
  2. package/composite-core/index.d.ts +463 -31
  3. package/design-core/index.d.ts +130 -3
  4. package/fesm2022/vectoriox-iox-ui-actions-core.mjs +33 -3
  5. package/fesm2022/vectoriox-iox-ui-actions-core.mjs.map +1 -1
  6. package/fesm2022/vectoriox-iox-ui-composite-core.mjs +1062 -121
  7. package/fesm2022/vectoriox-iox-ui-composite-core.mjs.map +1 -1
  8. package/fesm2022/vectoriox-iox-ui-design-core.mjs +172 -3
  9. package/fesm2022/vectoriox-iox-ui-design-core.mjs.map +1 -1
  10. package/fesm2022/vectoriox-iox-ui-generation-core.mjs +410 -10
  11. package/fesm2022/vectoriox-iox-ui-generation-core.mjs.map +1 -1
  12. package/fesm2022/vectoriox-iox-ui-media-core.mjs +571 -0
  13. package/fesm2022/vectoriox-iox-ui-media-core.mjs.map +1 -0
  14. package/fesm2022/vectoriox-iox-ui.mjs +482 -120
  15. package/fesm2022/vectoriox-iox-ui.mjs.map +1 -1
  16. package/generation-core/index.d.ts +167 -4
  17. package/index.d.ts +209 -25
  18. package/media-core/index.d.ts +277 -0
  19. package/media-core/package.json +3 -0
  20. package/package.json +5 -1
  21. package/src/actions-core/action.model.ts +4 -2
  22. package/src/actions-core/element-actions.ts +37 -2
  23. package/src/composite-core/accordion-runtime.ts +117 -28
  24. package/src/composite-core/accordion.ts +89 -45
  25. package/src/composite-core/composite-kinds.ts +110 -0
  26. package/src/composite-core/composite-node.ts +15 -0
  27. package/src/composite-core/disclosure.ts +125 -0
  28. package/src/composite-core/lightbox.ts +192 -0
  29. package/src/composite-core/public-api.ts +7 -1
  30. package/src/composite-core/slider-runtime.ts +180 -0
  31. package/src/composite-core/slider.ts +378 -0
  32. package/src/composite-core/structure.ts +25 -5
  33. package/src/design-core/element-styles.ts +27 -0
  34. package/src/design-core/flavor-spec.generated.ts +146 -2
  35. package/src/generation-core/baseline-roles.ts +2 -0
  36. package/src/generation-core/compose-site.ts +80 -4
  37. package/src/generation-core/node-baselines.generated.ts +148 -4
  38. package/src/generation-core/patterns.ts +17 -0
  39. package/src/generation-core/site-spec.generated.ts +164 -0
  40. package/src/media-core/public-api.ts +9 -0
  41. package/src/media-core/video-runtime.ts +239 -0
  42. package/src/media-core/video.ts +443 -0
  43. package/styles/iox-design.css +96 -0
@@ -897,6 +897,18 @@ declare const SPEC_TIERS: {
897
897
  readonly name: "media-scrim-ink";
898
898
  readonly type: "color";
899
899
  readonly default: "#FFFFFF";
900
+ }, {
901
+ readonly name: "video-play-bg";
902
+ readonly type: "color";
903
+ readonly default: "var(--iox-button-primary-bg)";
904
+ }, {
905
+ readonly name: "video-play-ink";
906
+ readonly type: "color";
907
+ readonly default: "var(--iox-button-primary-ink)";
908
+ }, {
909
+ readonly name: "video-play-size";
910
+ readonly type: "size";
911
+ readonly default: "64px";
900
912
  }];
901
913
  };
902
914
  declare const SPEC_TOKEN_TYPES: readonly ["color", "paint", "font", "number", "size", "spacing", "radius", "shadow", "effect", "duration", "easing", "keyword", "other"];
@@ -1485,7 +1497,7 @@ declare const SPEC_ELEMENT_STYLES: readonly [{
1485
1497
  readonly id: "card";
1486
1498
  readonly label: "Card";
1487
1499
  readonly group: "Layout";
1488
- readonly appliesTo: readonly ["Container", "LinkedContainer", "Card"];
1500
+ readonly appliesTo: readonly ["Container", "LinkedContainer", "Card", "SliderSlide"];
1489
1501
  readonly base: {
1490
1502
  readonly color: "inherit";
1491
1503
  readonly backgroundColor: "var(--iox-card-bg)";
@@ -1612,7 +1624,7 @@ declare const SPEC_ELEMENT_STYLES: readonly [{
1612
1624
  readonly id: "media";
1613
1625
  readonly label: "Image";
1614
1626
  readonly group: "Media";
1615
- readonly appliesTo: readonly ["Image", "SliderSlide", "Gallery"];
1627
+ readonly appliesTo: readonly ["Image", "SliderSlide", "Gallery", "Video"];
1616
1628
  readonly base: {
1617
1629
  readonly borderRadius: "var(--iox-image-radius)";
1618
1630
  readonly objectFit: "cover";
@@ -1813,6 +1825,7 @@ declare const SPEC_DEFAULT_ELEMENT_STYLE: {
1813
1825
  readonly Link: "link";
1814
1826
  readonly Image: "media";
1815
1827
  readonly SliderSlide: "media";
1828
+ readonly Video: "media";
1816
1829
  readonly Divider: "rule";
1817
1830
  readonly Icon: "icon";
1818
1831
  readonly Dialog: "dialog";
@@ -3600,6 +3613,24 @@ declare const SPEC_FLAVOR_PACKS: readonly [{
3600
3613
  readonly type: "color";
3601
3614
  readonly group: "components";
3602
3615
  readonly value: "#FFFFFF";
3616
+ }, {
3617
+ readonly name: "video-play-bg";
3618
+ readonly tier: "component";
3619
+ readonly type: "color";
3620
+ readonly group: "components";
3621
+ readonly value: "var(--iox-button-primary-bg)";
3622
+ }, {
3623
+ readonly name: "video-play-ink";
3624
+ readonly tier: "component";
3625
+ readonly type: "color";
3626
+ readonly group: "components";
3627
+ readonly value: "var(--iox-button-primary-ink)";
3628
+ }, {
3629
+ readonly name: "video-play-size";
3630
+ readonly tier: "component";
3631
+ readonly type: "size";
3632
+ readonly group: "components";
3633
+ readonly value: "64px";
3603
3634
  }];
3604
3635
  }, {
3605
3636
  readonly id: "linen";
@@ -4983,6 +5014,24 @@ declare const SPEC_FLAVOR_PACKS: readonly [{
4983
5014
  readonly type: "color";
4984
5015
  readonly group: "components";
4985
5016
  readonly value: "#FFFFFF";
5017
+ }, {
5018
+ readonly name: "video-play-bg";
5019
+ readonly tier: "component";
5020
+ readonly type: "color";
5021
+ readonly group: "components";
5022
+ readonly value: "var(--iox-button-primary-bg)";
5023
+ }, {
5024
+ readonly name: "video-play-ink";
5025
+ readonly tier: "component";
5026
+ readonly type: "color";
5027
+ readonly group: "components";
5028
+ readonly value: "var(--iox-button-primary-ink)";
5029
+ }, {
5030
+ readonly name: "video-play-size";
5031
+ readonly tier: "component";
5032
+ readonly type: "size";
5033
+ readonly group: "components";
5034
+ readonly value: "64px";
4986
5035
  }];
4987
5036
  }, {
4988
5037
  readonly id: "midnight";
@@ -6356,6 +6405,24 @@ declare const SPEC_FLAVOR_PACKS: readonly [{
6356
6405
  readonly type: "color";
6357
6406
  readonly group: "components";
6358
6407
  readonly value: "#FFFFFF";
6408
+ }, {
6409
+ readonly name: "video-play-bg";
6410
+ readonly tier: "component";
6411
+ readonly type: "color";
6412
+ readonly group: "components";
6413
+ readonly value: "var(--iox-button-primary-bg)";
6414
+ }, {
6415
+ readonly name: "video-play-ink";
6416
+ readonly tier: "component";
6417
+ readonly type: "color";
6418
+ readonly group: "components";
6419
+ readonly value: "var(--iox-button-primary-ink)";
6420
+ }, {
6421
+ readonly name: "video-play-size";
6422
+ readonly tier: "component";
6423
+ readonly type: "size";
6424
+ readonly group: "components";
6425
+ readonly value: "64px";
6359
6426
  }];
6360
6427
  }, {
6361
6428
  readonly id: "glass";
@@ -7772,6 +7839,24 @@ declare const SPEC_FLAVOR_PACKS: readonly [{
7772
7839
  readonly type: "color";
7773
7840
  readonly group: "components";
7774
7841
  readonly value: "#FFFFFF";
7842
+ }, {
7843
+ readonly name: "video-play-bg";
7844
+ readonly tier: "component";
7845
+ readonly type: "color";
7846
+ readonly group: "components";
7847
+ readonly value: "var(--iox-button-primary-bg)";
7848
+ }, {
7849
+ readonly name: "video-play-ink";
7850
+ readonly tier: "component";
7851
+ readonly type: "color";
7852
+ readonly group: "components";
7853
+ readonly value: "var(--iox-button-primary-ink)";
7854
+ }, {
7855
+ readonly name: "video-play-size";
7856
+ readonly tier: "component";
7857
+ readonly type: "size";
7858
+ readonly group: "components";
7859
+ readonly value: "64px";
7775
7860
  }];
7776
7861
  }, {
7777
7862
  readonly id: "bloom";
@@ -9152,6 +9237,24 @@ declare const SPEC_FLAVOR_PACKS: readonly [{
9152
9237
  readonly type: "color";
9153
9238
  readonly group: "components";
9154
9239
  readonly value: "#FFFFFF";
9240
+ }, {
9241
+ readonly name: "video-play-bg";
9242
+ readonly tier: "component";
9243
+ readonly type: "color";
9244
+ readonly group: "components";
9245
+ readonly value: "var(--iox-button-primary-bg)";
9246
+ }, {
9247
+ readonly name: "video-play-ink";
9248
+ readonly tier: "component";
9249
+ readonly type: "color";
9250
+ readonly group: "components";
9251
+ readonly value: "var(--iox-button-primary-ink)";
9252
+ }, {
9253
+ readonly name: "video-play-size";
9254
+ readonly tier: "component";
9255
+ readonly type: "size";
9256
+ readonly group: "components";
9257
+ readonly value: "64px";
9155
9258
  }];
9156
9259
  }, {
9157
9260
  readonly id: "pop";
@@ -10543,6 +10646,24 @@ declare const SPEC_FLAVOR_PACKS: readonly [{
10543
10646
  readonly type: "color";
10544
10647
  readonly group: "components";
10545
10648
  readonly value: "#FFFFFF";
10649
+ }, {
10650
+ readonly name: "video-play-bg";
10651
+ readonly tier: "component";
10652
+ readonly type: "color";
10653
+ readonly group: "components";
10654
+ readonly value: "var(--iox-button-primary-bg)";
10655
+ }, {
10656
+ readonly name: "video-play-ink";
10657
+ readonly tier: "component";
10658
+ readonly type: "color";
10659
+ readonly group: "components";
10660
+ readonly value: "var(--iox-button-primary-ink)";
10661
+ }, {
10662
+ readonly name: "video-play-size";
10663
+ readonly tier: "component";
10664
+ readonly type: "size";
10665
+ readonly group: "components";
10666
+ readonly value: "64px";
10546
10667
  }];
10547
10668
  }];
10548
10669
  declare const SPEC_CONTRAST: {
@@ -11219,6 +11340,12 @@ declare function ownedTraitStatus(target: ElementStyleTarget, id: string): Owned
11219
11340
  * Then the new style is written. Traits neither style owns are never touched.
11220
11341
  */
11221
11342
  declare function switchElementStyle(target: ElementStyleTarget, fromId: string | null | undefined, toId: string, baseline?: Readonly<Record<string, unknown>>): SwitchElementStyleResult;
11343
+ /**
11344
+ * Take a node OUT of its element style (a part a recipe wants unstyled — a migrated slider's bare chevrons, CC3):
11345
+ * every owned trait still holding the style's value goes back to `baseline` (a state trait is removed); a trait the
11346
+ * author changed is kept. The node then wears no style (no `iox-es` marker). Returns the kept traits.
11347
+ */
11348
+ declare function releaseElementStyle(target: ElementStyleTarget, fromId: string | null | undefined, baseline?: Readonly<Record<string, unknown>>): OwnedTrait[];
11222
11349
  /**
11223
11350
  * The element-style MARKER (design-system §3b-bis, spec `elementStyleMarker`). A node that wears an
11224
11351
  * element style renders `iox-es iox-es-<id>` in BOTH renderers, through the one node-class helper
@@ -12316,5 +12443,5 @@ interface FontFamilyRemoval {
12316
12443
  */
12317
12444
  declare function planFontFamilyRemoval(existing: ReadonlyArray<StoredDesignTokenRow>, previous: StoredDesign, family: string): FontFamilyRemoval;
12318
12445
 
12319
- export { ACCENT_TOKEN_NAMES, AdoptOutcome, AdoptSkipReason, BAR_RESERVE_BREAKPOINTS, BAR_RESERVE_CLASS, BOTTOM_BAR_STYLE, BUTTON_VARIANT_TO_STYLE, CANVAS_LINK_ATTRIBUTE, CARD_LINK_CLASS, COLOR_SCHEMES, COLOR_SCHEME_TRAIT, COLOR_SCHEME_TYPES, ColorScheme, ColourCheckId, DEFAULT_FLAVOR_ID, DESIGN_TOKEN_GROUPS, DESIGN_TOKEN_TIERS, DESIGN_TOKEN_TYPES, DesignConfigKey, ELEMENT_STYLES, ELEMENT_STYLE_MARKER_CLASS, ELEMENT_STYLE_STATES, EMPTY_IMAGE_ATTRIBUTE, EMPTY_IMAGE_SRC, ElementStyleState, FLAVOR_SPEC_VERSION, FONT_CATALOG, FONT_FAMILY_TOKENS, FONT_FILE_ACCEPT, FONT_FILE_EXTENSIONS, FONT_FILE_FORMATS, FONT_STYLES, FONT_WEIGHTS, FontUploadError, GOOGLE_FONTS_CSS_ORIGIN, GOOGLE_FONTS_FILE_ORIGIN, HELD_CONTRAST, INHERITED_TEXT, LinkType, MAX_FONT_FILE_BYTES, NEW_NODE_STYLE_DEFAULTS, OwnedTraitLink, PALETTE_PRESETS, PRE_DS2_FLAVOR_DEFAULTS, PRE_TINT_DEFAULT, REDUCED_MOTION_OVERRIDES, REDUCED_TRANSPARENCY_OVERRIDES, REVERT_WINDOW_MS, SCHEME_INK, SPEC_A11Y, SPEC_AXES, SPEC_BUTTON_VARIANT_TO_STYLE, SPEC_CONTRAST, SPEC_CONTRAST_AUDIT, SPEC_DEFAULT_ELEMENT_STYLE, SPEC_ELEMENT_STYLES, SPEC_FIELD_CLASS_BASELINE, SPEC_FLAVORS, SPEC_FLAVOR_PACKS, SPEC_FONTS, SPEC_FONT_ROLES, SPEC_INK_SCOPES, SPEC_LEGACY_ALIASES, SPEC_PALETTE_PRESETS, SPEC_SCHEMES, SPEC_SCHEME_INK, SPEC_SPRINGS, SPEC_TIERS, SPEC_TIER_IDS, SPEC_TOKEN_TYPES, SUPERSEDED_STYLE_VALUES, SWISS_FLAVOR, TINT_FULL_CHROMA, TINT_IDS, TINT_LEVELS, TINT_OWN_HUE_CHROMA, TINT_TURN_CHROMA, USER_TOKEN_SOURCE, WCAG_AA_TEXT, WCAG_AA_UI, adoptElementStyles, adoptionStyleFor, apcaLc, applyElementStyle, applyHeadingLevelRule, atLightness, atLightnessMaxChroma, auditDesignContrast, barReserveClass, buildFlavorTokens, buildFontFaceCss, buttonBlockHref, catalogFontId, checkFontWeight, choicesForPack, colorSchemeClass, colorSchemeOf, colourTabChecks, compareFontWeights, compileSchemeCss, compileTokenCss, compileTokenCssBlocks, compositeOver, cssString, defaultDesignChoices, defaultElementStyleFor, deriveAccentTokens, deriveBrandTokens, designBaseline, designConfigEntries, designModeOf, designTokenRepairs, designTokenRows, elementStyleById, elementStyleClass, elementStylesFor, emptyImageLabelSrc, emptyImagePlaceholder, emptyImageSrc, ensureAlpha, ensureContrast, flavorColours, flavorPackById, flavorSeedWrites, flavorSourceStamp, fontFamilyKey, fontFileName, fontFileStem, fontFormatOf, fontPreloads, fontRoleReferences, fontStackWithout, fontWeightCovers, fontWeightRange, fontWeightValue, fontsForTokens, formatFontFamilies, formatFontFamily, formatFontWeight, googleFontHref, groupFontFamilies, hasElementStyleMarker, headingHref, inSrgbGamut, isDesignTokenGroup, isDesignTokenTier, isDesignTokenType, isFontWeightRange, isRetiredFlavorId, legacyDesignTokenRows, legacyFlavorTokens, legacyRuleTokenReferences, matchFontWeight, missingDesignRows, missingFontRoles, nodeDesignClasses, normalizeFontStyle, normalizeFontWeight, normalizeFontWeightValue, oklabToRgb, ownedTraitStatus, ownedTraitsOf, packDesignChoices, paintColours, parseCssColour, parseFontFamilies, parseFontWeight, parseHexColor, planDesignApply, planDesignRevert, planFlavorRevert, planFlavorSeed, planFontFamilyRemoval, planSwissMigration, preTintAccentGrounds, previewElementStyleAdoption, previewFontWeight, quantizeRgb, readDesignConfig, readOwnedTrait, relativeLuminance, resolveDesignChoices, resolveSchemeTokenValues, resolveTokenReferences, resolveTokenValues, revertAvailable, rgbToOklab, ringColour, roleClass, sameDesignChoices, setColorScheme, specTokenNames, splitTopLevel, springToLinear, stackNamesFamily, styleKeyToKebab, switchElementStyle, syncNodeDesignClasses, toHexColor, tokenReferences, tokensToDarkVarMap, tokensToVarMap, unknownTokenReferences, untouchedSeedRow, userFontStack, validateFlavorPack, wcagContrastRatio, withSchemeInk, writeOwnedTrait };
12446
+ export { ACCENT_TOKEN_NAMES, AdoptOutcome, AdoptSkipReason, BAR_RESERVE_BREAKPOINTS, BAR_RESERVE_CLASS, BOTTOM_BAR_STYLE, BUTTON_VARIANT_TO_STYLE, CANVAS_LINK_ATTRIBUTE, CARD_LINK_CLASS, COLOR_SCHEMES, COLOR_SCHEME_TRAIT, COLOR_SCHEME_TYPES, ColorScheme, ColourCheckId, DEFAULT_FLAVOR_ID, DESIGN_TOKEN_GROUPS, DESIGN_TOKEN_TIERS, DESIGN_TOKEN_TYPES, DesignConfigKey, ELEMENT_STYLES, ELEMENT_STYLE_MARKER_CLASS, ELEMENT_STYLE_STATES, EMPTY_IMAGE_ATTRIBUTE, EMPTY_IMAGE_SRC, ElementStyleState, FLAVOR_SPEC_VERSION, FONT_CATALOG, FONT_FAMILY_TOKENS, FONT_FILE_ACCEPT, FONT_FILE_EXTENSIONS, FONT_FILE_FORMATS, FONT_STYLES, FONT_WEIGHTS, FontUploadError, GOOGLE_FONTS_CSS_ORIGIN, GOOGLE_FONTS_FILE_ORIGIN, HELD_CONTRAST, INHERITED_TEXT, LinkType, MAX_FONT_FILE_BYTES, NEW_NODE_STYLE_DEFAULTS, OwnedTraitLink, PALETTE_PRESETS, PRE_DS2_FLAVOR_DEFAULTS, PRE_TINT_DEFAULT, REDUCED_MOTION_OVERRIDES, REDUCED_TRANSPARENCY_OVERRIDES, REVERT_WINDOW_MS, SCHEME_INK, SPEC_A11Y, SPEC_AXES, SPEC_BUTTON_VARIANT_TO_STYLE, SPEC_CONTRAST, SPEC_CONTRAST_AUDIT, SPEC_DEFAULT_ELEMENT_STYLE, SPEC_ELEMENT_STYLES, SPEC_FIELD_CLASS_BASELINE, SPEC_FLAVORS, SPEC_FLAVOR_PACKS, SPEC_FONTS, SPEC_FONT_ROLES, SPEC_INK_SCOPES, SPEC_LEGACY_ALIASES, SPEC_PALETTE_PRESETS, SPEC_SCHEMES, SPEC_SCHEME_INK, SPEC_SPRINGS, SPEC_TIERS, SPEC_TIER_IDS, SPEC_TOKEN_TYPES, SUPERSEDED_STYLE_VALUES, SWISS_FLAVOR, TINT_FULL_CHROMA, TINT_IDS, TINT_LEVELS, TINT_OWN_HUE_CHROMA, TINT_TURN_CHROMA, USER_TOKEN_SOURCE, WCAG_AA_TEXT, WCAG_AA_UI, adoptElementStyles, adoptionStyleFor, apcaLc, applyElementStyle, applyHeadingLevelRule, atLightness, atLightnessMaxChroma, auditDesignContrast, barReserveClass, buildFlavorTokens, buildFontFaceCss, buttonBlockHref, catalogFontId, checkFontWeight, choicesForPack, colorSchemeClass, colorSchemeOf, colourTabChecks, compareFontWeights, compileSchemeCss, compileTokenCss, compileTokenCssBlocks, compositeOver, cssString, defaultDesignChoices, defaultElementStyleFor, deriveAccentTokens, deriveBrandTokens, designBaseline, designConfigEntries, designModeOf, designTokenRepairs, designTokenRows, elementStyleById, elementStyleClass, elementStylesFor, emptyImageLabelSrc, emptyImagePlaceholder, emptyImageSrc, ensureAlpha, ensureContrast, flavorColours, flavorPackById, flavorSeedWrites, flavorSourceStamp, fontFamilyKey, fontFileName, fontFileStem, fontFormatOf, fontPreloads, fontRoleReferences, fontStackWithout, fontWeightCovers, fontWeightRange, fontWeightValue, fontsForTokens, formatFontFamilies, formatFontFamily, formatFontWeight, googleFontHref, groupFontFamilies, hasElementStyleMarker, headingHref, inSrgbGamut, isDesignTokenGroup, isDesignTokenTier, isDesignTokenType, isFontWeightRange, isRetiredFlavorId, legacyDesignTokenRows, legacyFlavorTokens, legacyRuleTokenReferences, matchFontWeight, missingDesignRows, missingFontRoles, nodeDesignClasses, normalizeFontStyle, normalizeFontWeight, normalizeFontWeightValue, oklabToRgb, ownedTraitStatus, ownedTraitsOf, packDesignChoices, paintColours, parseCssColour, parseFontFamilies, parseFontWeight, parseHexColor, planDesignApply, planDesignRevert, planFlavorRevert, planFlavorSeed, planFontFamilyRemoval, planSwissMigration, preTintAccentGrounds, previewElementStyleAdoption, previewFontWeight, quantizeRgb, readDesignConfig, readOwnedTrait, relativeLuminance, releaseElementStyle, resolveDesignChoices, resolveSchemeTokenValues, resolveTokenReferences, resolveTokenValues, revertAvailable, rgbToOklab, ringColour, roleClass, sameDesignChoices, setColorScheme, specTokenNames, splitTopLevel, springToLinear, stackNamesFamily, styleKeyToKebab, switchElementStyle, syncNodeDesignClasses, toHexColor, tokenReferences, tokensToDarkVarMap, tokensToVarMap, unknownTokenReferences, untouchedSeedRow, userFontStack, validateFlavorPack, wcagContrastRatio, withSchemeInk, writeOwnedTrait };
12320
12447
  export type { AccentBackgrounds, AccentGround, AccentTokenName, AdoptContext, AdoptReport, AdoptableNode, AdoptedNode, ApplyElementStyleResult, ButtonBlockLinkProps, ColourCheck, ColourFlavor, ContrastFinding, DensityId, DesignApplyOptions, DesignChoices, DesignClassSource, DesignConfigEntry, DesignMode, DesignTokenGroup, DesignTokenLike, DesignTokenRow, DesignTokenTier, DesignTokenType, ElementStyle, ElementStyleTarget, ElementStyleTraitLike, FlavorColours, FlavorPack, FlavorPackV2, FlavorPalette, FlavorRevertPlan, FlavorRevertSnapshot, FlavorRevertWrite, FlavorSeedOptions, FlavorSeedPlan, FlavorSpecToken, FlavorTintConfig, FlavorTokenDef, FontDescriptor, FontFamilyGroup, FontFamilyRemoval, FontFamilyToken, FontFormat, FontPair, FontRoleToken, FontStyle, FontWeight, FontWeightRange, FontsForTokensOptions, KeptEdit, LinearSpring, MissingFontRole, MotionId, NodeLinkProps, OkLab, OwnedTrait, OwnedTraitStatus, PalettePreset, ResolvedMode, Rgb, Rgba, SchemeId, SeedBaseline, SeedExpectation, ShapeId, SkippedNode, StoredDesign, StoredDesignTokenRow, SupersededStyleValue, SwissMigration, SwitchElementStyleResult, TintId, TintLevel, TokenCssBlocks, TokenCssOptions };
@@ -1,3 +1,5 @@
1
+ import { AccordionRole, DisclosureRole, SLIDE_TO_ROW, CompositeItemAction } from '@vectoriox/iox-ui/composite-core';
2
+
1
3
  /**
2
4
  * The ONE descriptor shape for everything an author can put in an ordered action list —
3
5
  * a form's after-submit steps today, element behaviour actions (A1) next. Promoted out of
@@ -38,6 +40,8 @@ function resolveActionAvailability(descriptor, ctx = {}) {
38
40
  return { state: 'available' };
39
41
  }
40
42
 
43
+ /** The items an item action may target: an accordion's item, or a disclosure (its own one item). */
44
+ const ITEM_TARGET_ROLES = [AccordionRole.Item, DisclosureRole.Disclosure];
41
45
  /**
42
46
  * The ELEMENT action catalog (actions plan A1) — what a node can DO, as data. One list feeds the
43
47
  * grouped picker, the two interaction engines, and the AI composer's validation (§9: the model
@@ -75,12 +79,23 @@ const ELEMENT_ACTION_DESCRIPTORS = Object.freeze([
75
79
  { type: 'scrollTo', labelKey: 'builder.actions.scrollTo', kind: 'instant', group: 'navigate', builderBehaviour: 'run',
76
80
  target: { required: false } },
77
81
  // ── Dialog (A1 — needs the Dialog component, A1b) ───────────────────────
82
+ // CC3 (board 6): "Open at the clicked item" — `slideTo: 'row'` opens a lightbox at the clicked thumbnail's slide.
78
83
  { type: 'openDialog', labelKey: 'builder.actions.openDialog', kind: 'instant', group: 'dialog', builderBehaviour: 'run',
79
- target: { required: true, types: ['Dialog'] } },
84
+ target: { required: true, types: ['Dialog'] },
85
+ params: [{ name: 'slideTo', type: 'string', label: 'builder.actions.params.slideTo', options: [{ value: SLIDE_TO_ROW, labelKey: 'builder.actions.params.slideToRow' }] }] },
80
86
  { type: 'closeDialog', labelKey: 'builder.actions.closeDialog', kind: 'instant', group: 'dialog', builderBehaviour: 'run',
81
87
  target: { required: true, types: ['Dialog'] } },
82
88
  { type: 'toggleDialog', labelKey: 'builder.actions.toggleDialog', kind: 'instant', group: 'dialog', builderBehaviour: 'run',
83
89
  target: { required: true, types: ['Dialog'] } },
90
+ // ── Item (CC2.1 — composite T14): drive an accordion item or a disclosure from anywhere ("See shipping"
91
+ // opens FAQ item 3). The canvas RUNS them, like the dialog actions: it is the same runtime, and an item you
92
+ // cannot open from the button is a button you cannot design.
93
+ { type: 'openItem', labelKey: 'builder.actions.openItem', kind: 'instant', group: 'item', builderBehaviour: 'run',
94
+ target: { required: true, roles: ITEM_TARGET_ROLES } },
95
+ { type: 'closeItem', labelKey: 'builder.actions.closeItem', kind: 'instant', group: 'item', builderBehaviour: 'run',
96
+ target: { required: true, roles: ITEM_TARGET_ROLES } },
97
+ { type: 'toggleItem', labelKey: 'builder.actions.toggleItem', kind: 'instant', group: 'item', builderBehaviour: 'run',
98
+ target: { required: true, roles: ITEM_TARGET_ROLES } },
84
99
  // ── Form (A1 — Tier A; the submit transport is the forms module's, I7 of its plan) ──
85
100
  // simulate in the CANVAS: the builder's Form is a container twin with no real <form>,
86
101
  // so there is nothing honest to run — the live engine requestSubmit()s the real one.
@@ -137,11 +152,26 @@ const SERVER_ELEMENT_ACTION_TYPES = new Set(['sendEmail', 'callWebhook', 'create
137
152
  /** The Tier-A behaviour executors' dispatch set (A1c) — the engines branch on it beside
138
153
  * DIALOG/SWIPER. Dialog actions have their own set; context/visibility stay in the legacy path. */
139
154
  const BEHAVIOUR_ACTION_TYPES = new Set(['navigate', 'scrollTo', 'submitForm', 'copyToClipboard']);
155
+ /** The item actions' dispatch set (T14) and what each does to its item — the engines branch on it beside
156
+ * DIALOG/BEHAVIOUR, and composite-core `runCompositeItemAction` runs it on the target item's own runtime. */
157
+ const ITEM_ACTION_TYPES = Object.freeze({
158
+ openItem: CompositeItemAction.Open,
159
+ closeItem: CompositeItemAction.Close,
160
+ toggleItem: CompositeItemAction.Toggle,
161
+ });
162
+ /** The item action an action type runs, or null when it is not one. */
163
+ /** True when an `openDialog` action opens its dialog at the clicked row's slide (CC3 "Open at the clicked item"). */
164
+ function opensAtClickedItem(action) {
165
+ return action?.type === 'openDialog' && action.params?.['slideTo'] === SLIDE_TO_ROW;
166
+ }
167
+ function itemActionOf(type) {
168
+ return (type && ITEM_ACTION_TYPES[type]) || null;
169
+ }
140
170
  /** The consent actions' dispatch set (C3) — the engines branch on it beside DIALOG/BEHAVIOUR.
141
171
  * `openConsentPreferences` is dialog-opening by nature and included so ONE branch owns consent. */
142
172
  const CONSENT_ACTION_TYPES = new Set(['grantConsent', 'denyConsent', 'setConsentCategory', 'openConsentPreferences']);
143
173
  /** Picker order — most-used groups first, services last (they are the shop window, not the shop). */
144
- const ELEMENT_ACTION_GROUP_ORDER = Object.freeze(['motion', 'visibility', 'navigate', 'dialog', 'form', 'data', 'consent', 'service']);
174
+ const ELEMENT_ACTION_GROUP_ORDER = Object.freeze(['motion', 'visibility', 'navigate', 'dialog', 'item', 'form', 'data', 'consent', 'service']);
145
175
  /** The catalog, grouped and ordered for the picker — one derivation, no hand-kept second list. */
146
176
  function groupedElementActions() {
147
177
  return ELEMENT_ACTION_GROUP_ORDER
@@ -232,5 +262,5 @@ function dialogOpenersSelector(dialogDomIdValue) {
232
262
  * Generated bundle index. Do not edit.
233
263
  */
234
264
 
235
- export { BEHAVIOUR_ACTION_TYPES, CONSENT_ACTION_TYPES, DIALOG_ACTION_TYPE_SET, DIALOG_OPENER_ACTION_TYPES, DIALOG_OPENER_TRIGGER, DIALOG_SELECTOR, ELEMENT_ACTION_DESCRIPTORS, ELEMENT_ACTION_GROUP_ORDER, FORM_SUBMIT_ACTION_DESCRIPTORS, OpenerAttribute, SERVER_ELEMENT_ACTION_TYPES, addableActions, dialogDomId, dialogOpenerAttributes, dialogOpenersSelector, groupedElementActions, nodeIdOfDialogDomId, openedDialogId, resolveActionAvailability };
265
+ export { BEHAVIOUR_ACTION_TYPES, CONSENT_ACTION_TYPES, DIALOG_ACTION_TYPE_SET, DIALOG_OPENER_ACTION_TYPES, DIALOG_OPENER_TRIGGER, DIALOG_SELECTOR, ELEMENT_ACTION_DESCRIPTORS, ELEMENT_ACTION_GROUP_ORDER, FORM_SUBMIT_ACTION_DESCRIPTORS, ITEM_ACTION_TYPES, OpenerAttribute, SERVER_ELEMENT_ACTION_TYPES, addableActions, dialogDomId, dialogOpenerAttributes, dialogOpenersSelector, groupedElementActions, itemActionOf, nodeIdOfDialogDomId, openedDialogId, opensAtClickedItem, resolveActionAvailability };
236
266
  //# sourceMappingURL=vectoriox-iox-ui-actions-core.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"vectoriox-iox-ui-actions-core.mjs","sources":["../../../projects/iox-ui/src/actions-core/action.model.ts","../../../projects/iox-ui/src/actions-core/availability.ts","../../../projects/iox-ui/src/actions-core/element-actions.ts","../../../projects/iox-ui/src/actions-core/dialog-opener.ts","../../../projects/iox-ui/src/actions-core/public-api.ts","../../../projects/iox-ui/src/actions-core/vectoriox-iox-ui-actions-core.ts"],"sourcesContent":["/**\n * The ONE descriptor shape for everything an author can put in an ordered action list —\n * a form's after-submit steps today, element behaviour actions (A1) next. Promoted out of\n * `forms-core` because a button action importing from the forms module would be a lie; the\n * forms catalog lives here now and `forms-core` re-exports it unchanged.\n * See iox-ai-guidance `architecture/builder/actions-framework-plan.md` §4 (A0).\n */\n\n/** How a step executes — decides which editor fields appear (timing only for `animated`). */\nexport type ActionKind = 'animated' | 'instant' | 'server';\n\n/** Picker grouping. Flat lists die at ~10 entries; the group is data, never a second list. */\nexport type ActionGroup =\n | 'motion' | 'visibility' | 'navigate' | 'dialog' | 'form' | 'data' | 'consent' | 'service';\n\n/**\n * What a step does inside the live builder canvas (the canvas RUNS interactions):\n * `run` for real (open the dialog), `simulate` announce-only (navigate), `inert` with a\n * \"runs on the live site\" note (anything server-side or costing money).\n */\nexport type BuilderBehaviour = 'run' | 'simulate' | 'inert';\n\n/** A configurable parameter, same shape ComponentMethodDef.params already uses. */\nexport interface ActionParamSpec {\n name: string;\n type: 'number' | 'string' | 'boolean' | 'page' | 'node' | 'form';\n label: string;\n /** Closed value set — the editor renders a select instead of a free text input. */\n options?: readonly { value: string; labelKey: string }[];\n}\n\n/** Does this action point at another node — and may it be any node or only certain types? */\nexport interface ActionTargetSpec {\n required: boolean;\n types?: string[];\n}\n\n/**\n * One row of an action catalog. Every field beyond `type`/`labelKey` is optional so the\n * pre-A0 forms descriptors remain valid verbatim.\n */\nexport interface ActionDescriptor {\n type: string;\n labelKey: string;\n kind?: ActionKind;\n group?: ActionGroup;\n builderBehaviour?: BuilderBehaviour;\n target?: ActionTargetSpec;\n params?: ActionParamSpec[];\n /** The connector that must be configured & healthy before this action is offerable. */\n connector?: string;\n /** Plan-entitlement key (AI plan D5). Absent = never gated by plan. */\n entitlement?: string;\n /** Always present in the list and not removable (forms: `store`). */\n locked?: boolean;\n /** Not offered yet — shown greyed with a \"coming soon\" note, so the roadmap is visible. */\n planned?: boolean;\n}\n\n/**\n * The FORM after-submit catalog (moved verbatim from forms-core; `forms-core` re-exports it\n * under its old name `ACTION_DESCRIPTORS`). A1's element catalog is a SEPARATE constant —\n * the two lists share this shape, never one bucket.\n */\nexport const FORM_SUBMIT_ACTION_DESCRIPTORS: readonly ActionDescriptor[] = Object.freeze([\n { type: 'store', labelKey: 'forms.actions.store', locked: true, kind: 'server', group: 'data', builderBehaviour: 'inert' },\n { type: 'email', labelKey: 'forms.actions.email', kind: 'server', group: 'service', builderBehaviour: 'inert', connector: 'mailer' },\n { type: 'redirect', labelKey: 'forms.actions.redirect', kind: 'instant', group: 'navigate', builderBehaviour: 'simulate' },\n { type: 'createItem', labelKey: 'forms.actions.createItem', planned: true, kind: 'server', group: 'data', builderBehaviour: 'inert' },\n { type: 'webhook', labelKey: 'forms.actions.webhook', planned: true, kind: 'server', group: 'service', builderBehaviour: 'inert' },\n { type: 'autoReply', labelKey: 'forms.actions.autoReply', planned: true, kind: 'server', group: 'service', builderBehaviour: 'inert', connector: 'mailer' },\n]);\n\n/** Steps that can still be added to a list — each at most once, and never a planned one. */\nexport function addableActions(\n existing: readonly { type: string }[] = [],\n catalog: readonly ActionDescriptor[] = FORM_SUBMIT_ACTION_DESCRIPTORS,\n): ActionDescriptor[] {\n const used = new Set(existing.map(action => action.type));\n return catalog.filter(action => !action.locked && !action.planned && !used.has(action.type));\n}\n","import { ActionDescriptor } from './action.model';\n\n/**\n * K4 of the actions plan: four different reasons a catalog row is unavailable, four different\n * sentences — *coming soon* · *always on* · *connect X first* · *upgrade*. One resolver feeds\n * the picker AND the AI composer's validation, so they can never disagree.\n */\nexport type ActionAvailabilityState =\n | 'available'\n | 'planned' // not built yet — greyed, \"coming soon\"\n | 'locked' // always present, not addable/removable\n | 'connector-missing' // the named connector is not configured/healthy\n | 'entitlement-missing'; // the plan does not include it\n\nexport interface ActionAvailability {\n state: ActionAvailabilityState;\n /** Set when state is connector-missing / entitlement-missing — what to name in the message. */\n connector?: string;\n entitlement?: string;\n}\n\nexport interface ActionAvailabilityContext {\n /** Connector health by name. An absent map, or an absent key, means \"not known\" → allowed. */\n connectors?: Partial<Record<string, boolean>>;\n /**\n * Plan entitlements by key. `Plan.entitlements` does not exist yet anywhere (the known gap),\n * so an ABSENT map means \"no gating\" and every entitlement passes — the hook is live the day\n * the control plane starts sending them.\n */\n entitlements?: Partial<Record<string, boolean>>;\n}\n\nexport function resolveActionAvailability(\n descriptor: ActionDescriptor,\n ctx: ActionAvailabilityContext = {},\n): ActionAvailability {\n if (descriptor.planned) return { state: 'planned' };\n if (descriptor.locked) return { state: 'locked' };\n if (descriptor.connector && ctx.connectors && ctx.connectors[descriptor.connector] === false) {\n return { state: 'connector-missing', connector: descriptor.connector };\n }\n if (descriptor.entitlement && ctx.entitlements && ctx.entitlements[descriptor.entitlement] === false) {\n return { state: 'entitlement-missing', entitlement: descriptor.entitlement };\n }\n return { state: 'available' };\n}\n","import { ActionDescriptor } from './action.model';\n\n/**\n * The ELEMENT action catalog (actions plan A1) — what a node can DO, as data. One list feeds the\n * grouped picker, the two interaction engines, and the AI composer's validation (§9: the model\n * picks actions BY NAME from this catalog and can never invent behaviour).\n *\n * Shipped rows (motion/visibility/context/swiper) are listed so the catalog is the WHOLE truth;\n * their `kind`/`builderBehaviour` make the long-standing implicit rules explicit — the canvas is\n * a live runtime (feedback_builder_live_runtime), navigate must SIMULATE, services are INERT.\n * `signIn`/`startCheckout` ship greyed with the honest reason (D-A5): no visitor identity, no\n * payments — a subsystem and a product, not dropdown entries.\n */\nexport const ELEMENT_ACTION_DESCRIPTORS: readonly ActionDescriptor[] = Object.freeze([\n // ── Motion (shipped WAAPI actions — timing row applies) ──────────────────\n { type: 'fadeIn', labelKey: 'builder.actions.fadeIn', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'fadeOut', labelKey: 'builder.actions.fadeOut', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'moveUp', labelKey: 'builder.actions.moveUp', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'moveDown', labelKey: 'builder.actions.moveDown', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'moveLeft', labelKey: 'builder.actions.moveLeft', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'moveRight',labelKey: 'builder.actions.moveRight',kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'scaleIn', labelKey: 'builder.actions.scaleIn', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'scaleOut', labelKey: 'builder.actions.scaleOut', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'rotate', labelKey: 'builder.actions.rotate', kind: 'animated', group: 'motion', builderBehaviour: 'run',\n params: [{ name: 'degrees', type: 'number', label: 'Degrees' }] },\n\n // ── Visibility (shipped) ─────────────────────────────────────────────────\n { type: 'show', labelKey: 'builder.actions.show', kind: 'instant', group: 'visibility', builderBehaviour: 'run' },\n { type: 'hide', labelKey: 'builder.actions.hide', kind: 'instant', group: 'visibility', builderBehaviour: 'run' },\n { type: 'toggleVisibility', labelKey: 'builder.actions.toggleVisibility', kind: 'instant', group: 'visibility', builderBehaviour: 'run' },\n\n // ── Navigate (A1 — Tier A) ───────────────────────────────────────────────\n { type: 'navigate', labelKey: 'builder.actions.navigate', kind: 'instant', group: 'navigate', builderBehaviour: 'simulate',\n params: [\n { name: 'navigateTo', type: 'string', label: 'Destination' }, // 'page' | 'url' | 'back'\n { name: 'page', type: 'page', label: 'Page' },\n { name: 'url', type: 'string', label: 'URL' },\n ] },\n { type: 'scrollTo', labelKey: 'builder.actions.scrollTo', kind: 'instant', group: 'navigate', builderBehaviour: 'run',\n target: { required: false } },\n\n // ── Dialog (A1 — needs the Dialog component, A1b) ───────────────────────\n { type: 'openDialog', labelKey: 'builder.actions.openDialog', kind: 'instant', group: 'dialog', builderBehaviour: 'run',\n target: { required: true, types: ['Dialog'] } },\n { type: 'closeDialog', labelKey: 'builder.actions.closeDialog', kind: 'instant', group: 'dialog', builderBehaviour: 'run',\n target: { required: true, types: ['Dialog'] } },\n { type: 'toggleDialog', labelKey: 'builder.actions.toggleDialog', kind: 'instant', group: 'dialog', builderBehaviour: 'run',\n target: { required: true, types: ['Dialog'] } },\n\n // ── Form (A1 — Tier A; the submit transport is the forms module's, I7 of its plan) ──\n // simulate in the CANVAS: the builder's Form is a container twin with no real <form>,\n // so there is nothing honest to run — the live engine requestSubmit()s the real one.\n { type: 'submitForm', labelKey: 'builder.actions.submitForm', kind: 'instant', group: 'form', builderBehaviour: 'simulate',\n target: { required: true, types: ['Form'] } },\n\n // ── Data (shipped context actions + the one trivial newcomer) ───────────\n { type: 'setContext', labelKey: 'builder.actions.setContext', kind: 'instant', group: 'data', builderBehaviour: 'run' },\n { type: 'clearContext', labelKey: 'builder.actions.clearContext', kind: 'instant', group: 'data', builderBehaviour: 'run' },\n { type: 'copyToClipboard', labelKey: 'builder.actions.copyToClipboard', kind: 'instant', group: 'data', builderBehaviour: 'run',\n params: [{ name: 'text', type: 'string', label: 'Text' }] },\n\n // ── Consent (C3 — the banner's vocabulary; all pure writes of the consent cookie) ──\n // The canvas SIMULATES the recording ones: the builder runs in the ADMIN's browser, and an\n // admin's cookie is not a visitor's decision. Opening the preferences dialog is honest to run.\n { type: 'grantConsent', labelKey: 'builder.actions.grantConsent', kind: 'instant', group: 'consent', builderBehaviour: 'simulate' },\n { type: 'denyConsent', labelKey: 'builder.actions.denyConsent', kind: 'instant', group: 'consent', builderBehaviour: 'simulate' },\n { type: 'setConsentCategory', labelKey: 'builder.actions.setConsentCategory', kind: 'instant', group: 'consent', builderBehaviour: 'simulate',\n params: [\n { name: 'category', type: 'string', label: 'Category', options: [\n { value: 'analytics', labelKey: 'builder.actions.params.categoryAnalytics' },\n { value: 'marketing', labelKey: 'builder.actions.params.categoryMarketing' },\n ] },\n { name: 'granted', type: 'boolean', label: 'Granted' },\n ] },\n { type: 'openConsentPreferences', labelKey: 'builder.actions.openConsentPreferences', kind: 'instant', group: 'consent', builderBehaviour: 'run',\n target: { required: true, types: ['Dialog'] } },\n\n // ── Server actions (A2 — Tier B): the canvas SIMULATES, the LIVE site POSTs the node's\n // identity to ONE public route and the server re-derives the spec from the SAVED page.\n // The author's saved params are the whole spec — a visitor contributes only the click.\n { type: 'sendEmail', labelKey: 'builder.actions.sendEmail', kind: 'server', group: 'service', builderBehaviour: 'simulate',\n connector: 'mailer',\n params: [\n { name: 'to', type: 'string', label: 'To' },\n { name: 'subject', type: 'string', label: 'Subject' },\n { name: 'message', type: 'string', label: 'Message' },\n ] },\n { type: 'callWebhook', labelKey: 'builder.actions.callWebhook', kind: 'server', group: 'service', builderBehaviour: 'simulate',\n params: [\n { name: 'url', type: 'string', label: 'URL' }, // non-secret config (K2); the server SSRF-guards it\n ] },\n { type: 'createItem', labelKey: 'builder.actions.createItem', kind: 'server', group: 'data', builderBehaviour: 'simulate',\n params: [\n { name: 'contentType', type: 'string', label: 'Content type' },\n { name: 'values', type: 'string', label: 'Field values (JSON)' },\n ] },\n\n // ── Services (D-A5: visible, greyed, with the reason — never hidden, never live) ──\n { type: 'signIn', labelKey: 'builder.actions.signIn', kind: 'server', group: 'service', builderBehaviour: 'inert',\n planned: true, entitlement: 'visitorIdentity' },\n { type: 'startCheckout', labelKey: 'builder.actions.startCheckout', kind: 'server', group: 'service', builderBehaviour: 'inert',\n planned: true, connector: 'payment', entitlement: 'commerce' },\n]);\n\n/** The A2 server executors' dispatch set — the live engine POSTs these to the public actions\n * route; the canvas simulates them (a server action never runs from the ADMIN's browser). */\nexport const SERVER_ELEMENT_ACTION_TYPES: ReadonlySet<string> =\n new Set(['sendEmail', 'callWebhook', 'createItem']);\n\n/** The Tier-A behaviour executors' dispatch set (A1c) — the engines branch on it beside\n * DIALOG/SWIPER. Dialog actions have their own set; context/visibility stay in the legacy path. */\nexport const BEHAVIOUR_ACTION_TYPES: ReadonlySet<string> =\n new Set(['navigate', 'scrollTo', 'submitForm', 'copyToClipboard']);\n\n/** The consent actions' dispatch set (C3) — the engines branch on it beside DIALOG/BEHAVIOUR.\n * `openConsentPreferences` is dialog-opening by nature and included so ONE branch owns consent. */\nexport const CONSENT_ACTION_TYPES: ReadonlySet<string> =\n new Set(['grantConsent', 'denyConsent', 'setConsentCategory', 'openConsentPreferences']);\n\n/** Picker order — most-used groups first, services last (they are the shop window, not the shop). */\nexport const ELEMENT_ACTION_GROUP_ORDER: readonly string[] =\n Object.freeze(['motion', 'visibility', 'navigate', 'dialog', 'form', 'data', 'consent', 'service']);\n\n/** The catalog, grouped and ordered for the picker — one derivation, no hand-kept second list. */\nexport function groupedElementActions(): ReadonlyArray<{ group: string; actions: ActionDescriptor[] }> {\n return ELEMENT_ACTION_GROUP_ORDER\n .map(group => ({ group, actions: ELEMENT_ACTION_DESCRIPTORS.filter(d => d.group === group) }))\n .filter(g => g.actions.length > 0);\n}\n","/**\n * What an element that OPENS a dialog says about itself (CC1, N3 — APG disclosure/dialog pattern).\n * The element whose click runs `openDialog` / `toggleDialog` (a menu button, a bottom bar's More) is\n * announced as one: `aria-haspopup=\"dialog\"`, `aria-controls` = the dialog's DOM id, and\n * `aria-expanded` — `false` in the server render, kept in step on open and close by each runtime.\n *\n * ONE decision for every renderer (the builder canvas, the engine's component path and its string\n * path), framework-free so iox-cms can read it too. The dialog's DOM id comes from `dialogDomId`, the\n * one place that names it, so an opener and its dialog can never disagree.\n */\n\n/** The interaction trigger that opens a dialog from an element. */\nexport const DIALOG_OPENER_TRIGGER = 'click';\n\n/** The actions that make an element a dialog OPENER (close-only actions do not). */\nexport const DIALOG_OPENER_ACTION_TYPES: ReadonlySet<string> = new Set(['openDialog', 'toggleDialog', 'openConsentPreferences']);\n\n/** Every action that opens, closes or toggles a dialog — what a runtime watches to sync `aria-expanded`. */\nexport const DIALOG_ACTION_TYPE_SET: ReadonlySet<string> = new Set(['openDialog', 'closeDialog', 'toggleDialog']);\n\n/** The selector of every dialog a renderer emits (the live `<dialog data-iox-dialog>`). */\nexport const DIALOG_SELECTOR = 'dialog[data-iox-dialog]';\n\nconst DIALOG_ID_PREFIX = 'iox-dialog-';\n\n/** The DOM id of a Dialog node's `<dialog>` — what an opener's `aria-controls` names. */\nexport function dialogDomId(nodeId: string): string {\n return `${DIALOG_ID_PREFIX}${nodeId}`;\n}\n\n/** The node id a dialog DOM id names, or null. */\nexport function nodeIdOfDialogDomId(domId: string | null | undefined): string | null {\n return domId && domId.startsWith(DIALOG_ID_PREFIX) ? domId.slice(DIALOG_ID_PREFIX.length) : null;\n}\n\nexport enum OpenerAttribute {\n HasPopup = 'aria-haspopup',\n Expanded = 'aria-expanded',\n Controls = 'aria-controls',\n}\n\nexport interface OpenerActionLike {\n type?: string;\n target?: string;\n disabled?: boolean;\n}\n\nexport interface OpenerInteractionLike {\n trigger?: string;\n actions?: ReadonlyArray<OpenerActionLike> | null;\n}\n\nexport interface OpenerNodeLike {\n interactions?: ReadonlyArray<OpenerInteractionLike> | null;\n}\n\nconst SELF = 'self';\n\n/** The Dialog node id the element's click opens (its first enabled opener action), or null. */\nexport function openedDialogId(node: OpenerNodeLike | null | undefined): string | null {\n for (const ix of node?.interactions ?? []) {\n if (ix?.trigger !== DIALOG_OPENER_TRIGGER) continue;\n for (const action of ix.actions ?? []) {\n if (!action || action.disabled === true || !DIALOG_OPENER_ACTION_TYPES.has(String(action.type))) continue;\n if (action.target && action.target !== SELF) return action.target;\n }\n }\n return null;\n}\n\n/**\n * The opener attributes for a node: `{}` when its click opens no dialog, else\n * `aria-haspopup=\"dialog\"`, `aria-controls=\"iox-dialog-<id>\"` and `aria-expanded` (`false` unless\n * `open` says the dialog is open right now).\n */\nexport function dialogOpenerAttributes(node: OpenerNodeLike | null | undefined, open = false): Record<string, string> {\n const dialogId = openedDialogId(node);\n if (!dialogId) return {};\n return {\n [OpenerAttribute.HasPopup]: 'dialog',\n [OpenerAttribute.Controls]: dialogDomId(dialogId),\n [OpenerAttribute.Expanded]: open ? 'true' : 'false',\n };\n}\n\n/** The selector of every opener of one dialog (by its DOM id) — what a runtime updates on open/close. */\nexport function dialogOpenersSelector(dialogDomIdValue: string): string {\n return `[${OpenerAttribute.Controls}=\"${dialogDomIdValue}\"][${OpenerAttribute.HasPopup}=\"dialog\"]`;\n}\n","/**\n * @vectoriox/iox-ui/actions-core — the shared, FRAMEWORK-FREE action vocabulary.\n *\n * One `ActionDescriptor` shape for every ordered action list in the product: the forms\n * after-submit steps (whose catalog moved here; `forms-core` re-exports it unchanged) and\n * the element behaviour actions of A1. Framework-free for the same reason as `forms-core`\n * and `seo-core`: `iox-cms` consumes it under plain Node.\n * ⚠️ Consumers wire the usual trio — ng-package raw-ts assets, jest moduleNameMapper, and\n * tsconfig paths — or `nest start` dies with ERR_REQUIRE_ESM while jest and build pass.\n */\nexport * from './action.model';\nexport * from './availability';\nexport * from './element-actions';\nexport * from './dialog-opener';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vectoriox-iox-ui-actions-core.mjs","sources":["../../../projects/iox-ui/src/actions-core/action.model.ts","../../../projects/iox-ui/src/actions-core/availability.ts","../../../projects/iox-ui/src/actions-core/element-actions.ts","../../../projects/iox-ui/src/actions-core/dialog-opener.ts","../../../projects/iox-ui/src/actions-core/public-api.ts","../../../projects/iox-ui/src/actions-core/vectoriox-iox-ui-actions-core.ts"],"sourcesContent":["/**\n * The ONE descriptor shape for everything an author can put in an ordered action list —\n * a form's after-submit steps today, element behaviour actions (A1) next. Promoted out of\n * `forms-core` because a button action importing from the forms module would be a lie; the\n * forms catalog lives here now and `forms-core` re-exports it unchanged.\n * See iox-ai-guidance `architecture/builder/actions-framework-plan.md` §4 (A0).\n */\n\n/** How a step executes — decides which editor fields appear (timing only for `animated`). */\nexport type ActionKind = 'animated' | 'instant' | 'server';\n\n/** Picker grouping. Flat lists die at ~10 entries; the group is data, never a second list. */\nexport type ActionGroup =\n | 'motion' | 'visibility' | 'navigate' | 'dialog' | 'item' | 'form' | 'data' | 'consent' | 'service';\n\n/**\n * What a step does inside the live builder canvas (the canvas RUNS interactions):\n * `run` for real (open the dialog), `simulate` announce-only (navigate), `inert` with a\n * \"runs on the live site\" note (anything server-side or costing money).\n */\nexport type BuilderBehaviour = 'run' | 'simulate' | 'inert';\n\n/** A configurable parameter, same shape ComponentMethodDef.params already uses. */\nexport interface ActionParamSpec {\n name: string;\n type: 'number' | 'string' | 'boolean' | 'page' | 'node' | 'form';\n label: string;\n /** Closed value set — the editor renders a select instead of a free text input. */\n options?: readonly { value: string; labelKey: string }[];\n}\n\n/** Does this action point at another node — and may it be any node, or only certain types / composite roles? */\nexport interface ActionTargetSpec {\n required: boolean;\n types?: string[];\n /** Only nodes playing one of these composite roles (`openItem` targets an accordion item or a disclosure). */\n roles?: string[];\n}\n\n/**\n * One row of an action catalog. Every field beyond `type`/`labelKey` is optional so the\n * pre-A0 forms descriptors remain valid verbatim.\n */\nexport interface ActionDescriptor {\n type: string;\n labelKey: string;\n kind?: ActionKind;\n group?: ActionGroup;\n builderBehaviour?: BuilderBehaviour;\n target?: ActionTargetSpec;\n params?: ActionParamSpec[];\n /** The connector that must be configured & healthy before this action is offerable. */\n connector?: string;\n /** Plan-entitlement key (AI plan D5). Absent = never gated by plan. */\n entitlement?: string;\n /** Always present in the list and not removable (forms: `store`). */\n locked?: boolean;\n /** Not offered yet — shown greyed with a \"coming soon\" note, so the roadmap is visible. */\n planned?: boolean;\n}\n\n/**\n * The FORM after-submit catalog (moved verbatim from forms-core; `forms-core` re-exports it\n * under its old name `ACTION_DESCRIPTORS`). A1's element catalog is a SEPARATE constant —\n * the two lists share this shape, never one bucket.\n */\nexport const FORM_SUBMIT_ACTION_DESCRIPTORS: readonly ActionDescriptor[] = Object.freeze([\n { type: 'store', labelKey: 'forms.actions.store', locked: true, kind: 'server', group: 'data', builderBehaviour: 'inert' },\n { type: 'email', labelKey: 'forms.actions.email', kind: 'server', group: 'service', builderBehaviour: 'inert', connector: 'mailer' },\n { type: 'redirect', labelKey: 'forms.actions.redirect', kind: 'instant', group: 'navigate', builderBehaviour: 'simulate' },\n { type: 'createItem', labelKey: 'forms.actions.createItem', planned: true, kind: 'server', group: 'data', builderBehaviour: 'inert' },\n { type: 'webhook', labelKey: 'forms.actions.webhook', planned: true, kind: 'server', group: 'service', builderBehaviour: 'inert' },\n { type: 'autoReply', labelKey: 'forms.actions.autoReply', planned: true, kind: 'server', group: 'service', builderBehaviour: 'inert', connector: 'mailer' },\n]);\n\n/** Steps that can still be added to a list — each at most once, and never a planned one. */\nexport function addableActions(\n existing: readonly { type: string }[] = [],\n catalog: readonly ActionDescriptor[] = FORM_SUBMIT_ACTION_DESCRIPTORS,\n): ActionDescriptor[] {\n const used = new Set(existing.map(action => action.type));\n return catalog.filter(action => !action.locked && !action.planned && !used.has(action.type));\n}\n","import { ActionDescriptor } from './action.model';\n\n/**\n * K4 of the actions plan: four different reasons a catalog row is unavailable, four different\n * sentences — *coming soon* · *always on* · *connect X first* · *upgrade*. One resolver feeds\n * the picker AND the AI composer's validation, so they can never disagree.\n */\nexport type ActionAvailabilityState =\n | 'available'\n | 'planned' // not built yet — greyed, \"coming soon\"\n | 'locked' // always present, not addable/removable\n | 'connector-missing' // the named connector is not configured/healthy\n | 'entitlement-missing'; // the plan does not include it\n\nexport interface ActionAvailability {\n state: ActionAvailabilityState;\n /** Set when state is connector-missing / entitlement-missing — what to name in the message. */\n connector?: string;\n entitlement?: string;\n}\n\nexport interface ActionAvailabilityContext {\n /** Connector health by name. An absent map, or an absent key, means \"not known\" → allowed. */\n connectors?: Partial<Record<string, boolean>>;\n /**\n * Plan entitlements by key. `Plan.entitlements` does not exist yet anywhere (the known gap),\n * so an ABSENT map means \"no gating\" and every entitlement passes — the hook is live the day\n * the control plane starts sending them.\n */\n entitlements?: Partial<Record<string, boolean>>;\n}\n\nexport function resolveActionAvailability(\n descriptor: ActionDescriptor,\n ctx: ActionAvailabilityContext = {},\n): ActionAvailability {\n if (descriptor.planned) return { state: 'planned' };\n if (descriptor.locked) return { state: 'locked' };\n if (descriptor.connector && ctx.connectors && ctx.connectors[descriptor.connector] === false) {\n return { state: 'connector-missing', connector: descriptor.connector };\n }\n if (descriptor.entitlement && ctx.entitlements && ctx.entitlements[descriptor.entitlement] === false) {\n return { state: 'entitlement-missing', entitlement: descriptor.entitlement };\n }\n return { state: 'available' };\n}\n","import { AccordionRole, CompositeItemAction, DisclosureRole, SLIDE_TO_ROW } from '@vectoriox/iox-ui/composite-core';\n\nimport { ActionDescriptor } from './action.model';\n\n/** The items an item action may target: an accordion's item, or a disclosure (its own one item). */\nconst ITEM_TARGET_ROLES = [AccordionRole.Item, DisclosureRole.Disclosure];\n\n/**\n * The ELEMENT action catalog (actions plan A1) — what a node can DO, as data. One list feeds the\n * grouped picker, the two interaction engines, and the AI composer's validation (§9: the model\n * picks actions BY NAME from this catalog and can never invent behaviour).\n *\n * Shipped rows (motion/visibility/context/swiper) are listed so the catalog is the WHOLE truth;\n * their `kind`/`builderBehaviour` make the long-standing implicit rules explicit — the canvas is\n * a live runtime (feedback_builder_live_runtime), navigate must SIMULATE, services are INERT.\n * `signIn`/`startCheckout` ship greyed with the honest reason (D-A5): no visitor identity, no\n * payments — a subsystem and a product, not dropdown entries.\n */\nexport const ELEMENT_ACTION_DESCRIPTORS: readonly ActionDescriptor[] = Object.freeze([\n // ── Motion (shipped WAAPI actions — timing row applies) ──────────────────\n { type: 'fadeIn', labelKey: 'builder.actions.fadeIn', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'fadeOut', labelKey: 'builder.actions.fadeOut', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'moveUp', labelKey: 'builder.actions.moveUp', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'moveDown', labelKey: 'builder.actions.moveDown', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'moveLeft', labelKey: 'builder.actions.moveLeft', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'moveRight',labelKey: 'builder.actions.moveRight',kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'scaleIn', labelKey: 'builder.actions.scaleIn', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'scaleOut', labelKey: 'builder.actions.scaleOut', kind: 'animated', group: 'motion', builderBehaviour: 'run' },\n { type: 'rotate', labelKey: 'builder.actions.rotate', kind: 'animated', group: 'motion', builderBehaviour: 'run',\n params: [{ name: 'degrees', type: 'number', label: 'Degrees' }] },\n\n // ── Visibility (shipped) ─────────────────────────────────────────────────\n { type: 'show', labelKey: 'builder.actions.show', kind: 'instant', group: 'visibility', builderBehaviour: 'run' },\n { type: 'hide', labelKey: 'builder.actions.hide', kind: 'instant', group: 'visibility', builderBehaviour: 'run' },\n { type: 'toggleVisibility', labelKey: 'builder.actions.toggleVisibility', kind: 'instant', group: 'visibility', builderBehaviour: 'run' },\n\n // ── Navigate (A1 — Tier A) ───────────────────────────────────────────────\n { type: 'navigate', labelKey: 'builder.actions.navigate', kind: 'instant', group: 'navigate', builderBehaviour: 'simulate',\n params: [\n { name: 'navigateTo', type: 'string', label: 'Destination' }, // 'page' | 'url' | 'back'\n { name: 'page', type: 'page', label: 'Page' },\n { name: 'url', type: 'string', label: 'URL' },\n ] },\n { type: 'scrollTo', labelKey: 'builder.actions.scrollTo', kind: 'instant', group: 'navigate', builderBehaviour: 'run',\n target: { required: false } },\n\n // ── Dialog (A1 — needs the Dialog component, A1b) ───────────────────────\n // CC3 (board 6): \"Open at the clicked item\" — `slideTo: 'row'` opens a lightbox at the clicked thumbnail's slide.\n { type: 'openDialog', labelKey: 'builder.actions.openDialog', kind: 'instant', group: 'dialog', builderBehaviour: 'run',\n target: { required: true, types: ['Dialog'] },\n params: [{ name: 'slideTo', type: 'string', label: 'builder.actions.params.slideTo', options: [{ value: SLIDE_TO_ROW, labelKey: 'builder.actions.params.slideToRow' }] }] },\n { type: 'closeDialog', labelKey: 'builder.actions.closeDialog', kind: 'instant', group: 'dialog', builderBehaviour: 'run',\n target: { required: true, types: ['Dialog'] } },\n { type: 'toggleDialog', labelKey: 'builder.actions.toggleDialog', kind: 'instant', group: 'dialog', builderBehaviour: 'run',\n target: { required: true, types: ['Dialog'] } },\n\n // ── Item (CC2.1 — composite T14): drive an accordion item or a disclosure from anywhere (\"See shipping\"\n // opens FAQ item 3). The canvas RUNS them, like the dialog actions: it is the same runtime, and an item you\n // cannot open from the button is a button you cannot design.\n { type: 'openItem', labelKey: 'builder.actions.openItem', kind: 'instant', group: 'item', builderBehaviour: 'run',\n target: { required: true, roles: ITEM_TARGET_ROLES } },\n { type: 'closeItem', labelKey: 'builder.actions.closeItem', kind: 'instant', group: 'item', builderBehaviour: 'run',\n target: { required: true, roles: ITEM_TARGET_ROLES } },\n { type: 'toggleItem', labelKey: 'builder.actions.toggleItem', kind: 'instant', group: 'item', builderBehaviour: 'run',\n target: { required: true, roles: ITEM_TARGET_ROLES } },\n\n // ── Form (A1 — Tier A; the submit transport is the forms module's, I7 of its plan) ──\n // simulate in the CANVAS: the builder's Form is a container twin with no real <form>,\n // so there is nothing honest to run — the live engine requestSubmit()s the real one.\n { type: 'submitForm', labelKey: 'builder.actions.submitForm', kind: 'instant', group: 'form', builderBehaviour: 'simulate',\n target: { required: true, types: ['Form'] } },\n\n // ── Data (shipped context actions + the one trivial newcomer) ───────────\n { type: 'setContext', labelKey: 'builder.actions.setContext', kind: 'instant', group: 'data', builderBehaviour: 'run' },\n { type: 'clearContext', labelKey: 'builder.actions.clearContext', kind: 'instant', group: 'data', builderBehaviour: 'run' },\n { type: 'copyToClipboard', labelKey: 'builder.actions.copyToClipboard', kind: 'instant', group: 'data', builderBehaviour: 'run',\n params: [{ name: 'text', type: 'string', label: 'Text' }] },\n\n // ── Consent (C3 — the banner's vocabulary; all pure writes of the consent cookie) ──\n // The canvas SIMULATES the recording ones: the builder runs in the ADMIN's browser, and an\n // admin's cookie is not a visitor's decision. Opening the preferences dialog is honest to run.\n { type: 'grantConsent', labelKey: 'builder.actions.grantConsent', kind: 'instant', group: 'consent', builderBehaviour: 'simulate' },\n { type: 'denyConsent', labelKey: 'builder.actions.denyConsent', kind: 'instant', group: 'consent', builderBehaviour: 'simulate' },\n { type: 'setConsentCategory', labelKey: 'builder.actions.setConsentCategory', kind: 'instant', group: 'consent', builderBehaviour: 'simulate',\n params: [\n { name: 'category', type: 'string', label: 'Category', options: [\n { value: 'analytics', labelKey: 'builder.actions.params.categoryAnalytics' },\n { value: 'marketing', labelKey: 'builder.actions.params.categoryMarketing' },\n ] },\n { name: 'granted', type: 'boolean', label: 'Granted' },\n ] },\n { type: 'openConsentPreferences', labelKey: 'builder.actions.openConsentPreferences', kind: 'instant', group: 'consent', builderBehaviour: 'run',\n target: { required: true, types: ['Dialog'] } },\n\n // ── Server actions (A2 — Tier B): the canvas SIMULATES, the LIVE site POSTs the node's\n // identity to ONE public route and the server re-derives the spec from the SAVED page.\n // The author's saved params are the whole spec — a visitor contributes only the click.\n { type: 'sendEmail', labelKey: 'builder.actions.sendEmail', kind: 'server', group: 'service', builderBehaviour: 'simulate',\n connector: 'mailer',\n params: [\n { name: 'to', type: 'string', label: 'To' },\n { name: 'subject', type: 'string', label: 'Subject' },\n { name: 'message', type: 'string', label: 'Message' },\n ] },\n { type: 'callWebhook', labelKey: 'builder.actions.callWebhook', kind: 'server', group: 'service', builderBehaviour: 'simulate',\n params: [\n { name: 'url', type: 'string', label: 'URL' }, // non-secret config (K2); the server SSRF-guards it\n ] },\n { type: 'createItem', labelKey: 'builder.actions.createItem', kind: 'server', group: 'data', builderBehaviour: 'simulate',\n params: [\n { name: 'contentType', type: 'string', label: 'Content type' },\n { name: 'values', type: 'string', label: 'Field values (JSON)' },\n ] },\n\n // ── Services (D-A5: visible, greyed, with the reason — never hidden, never live) ──\n { type: 'signIn', labelKey: 'builder.actions.signIn', kind: 'server', group: 'service', builderBehaviour: 'inert',\n planned: true, entitlement: 'visitorIdentity' },\n { type: 'startCheckout', labelKey: 'builder.actions.startCheckout', kind: 'server', group: 'service', builderBehaviour: 'inert',\n planned: true, connector: 'payment', entitlement: 'commerce' },\n]);\n\n/** The A2 server executors' dispatch set — the live engine POSTs these to the public actions\n * route; the canvas simulates them (a server action never runs from the ADMIN's browser). */\nexport const SERVER_ELEMENT_ACTION_TYPES: ReadonlySet<string> =\n new Set(['sendEmail', 'callWebhook', 'createItem']);\n\n/** The Tier-A behaviour executors' dispatch set (A1c) — the engines branch on it beside\n * DIALOG/SWIPER. Dialog actions have their own set; context/visibility stay in the legacy path. */\nexport const BEHAVIOUR_ACTION_TYPES: ReadonlySet<string> =\n new Set(['navigate', 'scrollTo', 'submitForm', 'copyToClipboard']);\n\n/** The item actions' dispatch set (T14) and what each does to its item — the engines branch on it beside\n * DIALOG/BEHAVIOUR, and composite-core `runCompositeItemAction` runs it on the target item's own runtime. */\nexport const ITEM_ACTION_TYPES: Readonly<Record<string, CompositeItemAction>> = Object.freeze({\n openItem: CompositeItemAction.Open,\n closeItem: CompositeItemAction.Close,\n toggleItem: CompositeItemAction.Toggle,\n});\n\n/** The item action an action type runs, or null when it is not one. */\n/** True when an `openDialog` action opens its dialog at the clicked row's slide (CC3 \"Open at the clicked item\"). */\nexport function opensAtClickedItem(action: { type?: string; params?: Record<string, unknown> | null } | null | undefined): boolean {\n return action?.type === 'openDialog' && action.params?.['slideTo'] === SLIDE_TO_ROW;\n}\n\nexport function itemActionOf(type: string | null | undefined): CompositeItemAction | null {\n return (type && ITEM_ACTION_TYPES[type]) || null;\n}\n\n/** The consent actions' dispatch set (C3) — the engines branch on it beside DIALOG/BEHAVIOUR.\n * `openConsentPreferences` is dialog-opening by nature and included so ONE branch owns consent. */\nexport const CONSENT_ACTION_TYPES: ReadonlySet<string> =\n new Set(['grantConsent', 'denyConsent', 'setConsentCategory', 'openConsentPreferences']);\n\n/** Picker order — most-used groups first, services last (they are the shop window, not the shop). */\nexport const ELEMENT_ACTION_GROUP_ORDER: readonly string[] =\n Object.freeze(['motion', 'visibility', 'navigate', 'dialog', 'item', 'form', 'data', 'consent', 'service']);\n\n/** The catalog, grouped and ordered for the picker — one derivation, no hand-kept second list. */\nexport function groupedElementActions(): ReadonlyArray<{ group: string; actions: ActionDescriptor[] }> {\n return ELEMENT_ACTION_GROUP_ORDER\n .map(group => ({ group, actions: ELEMENT_ACTION_DESCRIPTORS.filter(d => d.group === group) }))\n .filter(g => g.actions.length > 0);\n}\n","/**\n * What an element that OPENS a dialog says about itself (CC1, N3 — APG disclosure/dialog pattern).\n * The element whose click runs `openDialog` / `toggleDialog` (a menu button, a bottom bar's More) is\n * announced as one: `aria-haspopup=\"dialog\"`, `aria-controls` = the dialog's DOM id, and\n * `aria-expanded` — `false` in the server render, kept in step on open and close by each runtime.\n *\n * ONE decision for every renderer (the builder canvas, the engine's component path and its string\n * path), framework-free so iox-cms can read it too. The dialog's DOM id comes from `dialogDomId`, the\n * one place that names it, so an opener and its dialog can never disagree.\n */\n\n/** The interaction trigger that opens a dialog from an element. */\nexport const DIALOG_OPENER_TRIGGER = 'click';\n\n/** The actions that make an element a dialog OPENER (close-only actions do not). */\nexport const DIALOG_OPENER_ACTION_TYPES: ReadonlySet<string> = new Set(['openDialog', 'toggleDialog', 'openConsentPreferences']);\n\n/** Every action that opens, closes or toggles a dialog — what a runtime watches to sync `aria-expanded`. */\nexport const DIALOG_ACTION_TYPE_SET: ReadonlySet<string> = new Set(['openDialog', 'closeDialog', 'toggleDialog']);\n\n/** The selector of every dialog a renderer emits (the live `<dialog data-iox-dialog>`). */\nexport const DIALOG_SELECTOR = 'dialog[data-iox-dialog]';\n\nconst DIALOG_ID_PREFIX = 'iox-dialog-';\n\n/** The DOM id of a Dialog node's `<dialog>` — what an opener's `aria-controls` names. */\nexport function dialogDomId(nodeId: string): string {\n return `${DIALOG_ID_PREFIX}${nodeId}`;\n}\n\n/** The node id a dialog DOM id names, or null. */\nexport function nodeIdOfDialogDomId(domId: string | null | undefined): string | null {\n return domId && domId.startsWith(DIALOG_ID_PREFIX) ? domId.slice(DIALOG_ID_PREFIX.length) : null;\n}\n\nexport enum OpenerAttribute {\n HasPopup = 'aria-haspopup',\n Expanded = 'aria-expanded',\n Controls = 'aria-controls',\n}\n\nexport interface OpenerActionLike {\n type?: string;\n target?: string;\n disabled?: boolean;\n}\n\nexport interface OpenerInteractionLike {\n trigger?: string;\n actions?: ReadonlyArray<OpenerActionLike> | null;\n}\n\nexport interface OpenerNodeLike {\n interactions?: ReadonlyArray<OpenerInteractionLike> | null;\n}\n\nconst SELF = 'self';\n\n/** The Dialog node id the element's click opens (its first enabled opener action), or null. */\nexport function openedDialogId(node: OpenerNodeLike | null | undefined): string | null {\n for (const ix of node?.interactions ?? []) {\n if (ix?.trigger !== DIALOG_OPENER_TRIGGER) continue;\n for (const action of ix.actions ?? []) {\n if (!action || action.disabled === true || !DIALOG_OPENER_ACTION_TYPES.has(String(action.type))) continue;\n if (action.target && action.target !== SELF) return action.target;\n }\n }\n return null;\n}\n\n/**\n * The opener attributes for a node: `{}` when its click opens no dialog, else\n * `aria-haspopup=\"dialog\"`, `aria-controls=\"iox-dialog-<id>\"` and `aria-expanded` (`false` unless\n * `open` says the dialog is open right now).\n */\nexport function dialogOpenerAttributes(node: OpenerNodeLike | null | undefined, open = false): Record<string, string> {\n const dialogId = openedDialogId(node);\n if (!dialogId) return {};\n return {\n [OpenerAttribute.HasPopup]: 'dialog',\n [OpenerAttribute.Controls]: dialogDomId(dialogId),\n [OpenerAttribute.Expanded]: open ? 'true' : 'false',\n };\n}\n\n/** The selector of every opener of one dialog (by its DOM id) — what a runtime updates on open/close. */\nexport function dialogOpenersSelector(dialogDomIdValue: string): string {\n return `[${OpenerAttribute.Controls}=\"${dialogDomIdValue}\"][${OpenerAttribute.HasPopup}=\"dialog\"]`;\n}\n","/**\n * @vectoriox/iox-ui/actions-core — the shared, FRAMEWORK-FREE action vocabulary.\n *\n * One `ActionDescriptor` shape for every ordered action list in the product: the forms\n * after-submit steps (whose catalog moved here; `forms-core` re-exports it unchanged) and\n * the element behaviour actions of A1. Framework-free for the same reason as `forms-core`\n * and `seo-core`: `iox-cms` consumes it under plain Node.\n * ⚠️ Consumers wire the usual trio — ng-package raw-ts assets, jest moduleNameMapper, and\n * tsconfig paths — or `nest start` dies with ERR_REQUIRE_ESM while jest and build pass.\n */\nexport * from './action.model';\nexport * from './availability';\nexport * from './element-actions';\nexport * from './dialog-opener';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}