@vectoriox/iox-ui 5.38.0 → 5.39.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 (32) hide show
  1. package/composite-core/index.d.ts +392 -16
  2. package/design-core/index.d.ts +322 -3
  3. package/fesm2022/vectoriox-iox-ui-actions-core.mjs +4 -2
  4. package/fesm2022/vectoriox-iox-ui-actions-core.mjs.map +1 -1
  5. package/fesm2022/vectoriox-iox-ui-composite-core.mjs +1129 -146
  6. package/fesm2022/vectoriox-iox-ui-composite-core.mjs.map +1 -1
  7. package/fesm2022/vectoriox-iox-ui-design-core.mjs +383 -3
  8. package/fesm2022/vectoriox-iox-ui-design-core.mjs.map +1 -1
  9. package/fesm2022/vectoriox-iox-ui-generation-core.mjs +125 -3
  10. package/fesm2022/vectoriox-iox-ui-generation-core.mjs.map +1 -1
  11. package/fesm2022/vectoriox-iox-ui.mjs +16 -9
  12. package/fesm2022/vectoriox-iox-ui.mjs.map +1 -1
  13. package/generation-core/index.d.ts +43 -0
  14. package/index.d.ts +11 -6
  15. package/package.json +1 -1
  16. package/src/actions-core/element-actions.ts +4 -2
  17. package/src/composite-core/accordion-runtime.ts +3 -15
  18. package/src/composite-core/accordion.ts +4 -2
  19. package/src/composite-core/composite-kinds.ts +121 -7
  20. package/src/composite-core/composite-runtime.ts +68 -0
  21. package/src/composite-core/exclusive-runtime.ts +358 -0
  22. package/src/composite-core/public-api.ts +5 -2
  23. package/src/composite-core/structure.ts +22 -2
  24. package/src/composite-core/tabs.ts +628 -0
  25. package/src/design-core/contrast-audit.ts +5 -0
  26. package/src/design-core/element-styles.ts +7 -3
  27. package/src/design-core/flavor-spec.generated.ts +371 -0
  28. package/src/generation-core/compose-site.ts +68 -1
  29. package/src/generation-core/node-baselines.generated.ts +8 -2
  30. package/src/generation-core/patterns.ts +3 -0
  31. package/src/generation-core/site-spec.generated.ts +46 -0
  32. package/styles/iox-design.css +16 -0
@@ -75,15 +75,22 @@ declare function parentInComposite(root: CompositeNode, node: CompositeNode): Co
75
75
  declare function removeFromComposite(root: CompositeNode, node: CompositeNode): boolean;
76
76
 
77
77
  /**
78
- * The open/close composites' kinds and roles (CC2 Accordion, CC2.1 Disclosure — composite plan T9 / T21). ONE
79
- * family: a Disclosure is a one-item accordion whose ROOT is its item, so both run the same state machine, the
80
- * same attribute planners and the same runtime (`accordion-runtime.ts`). Every consumer that treats "an item",
81
- * "a header" or "a panel" alike asks these predicates, never a role literal.
78
+ * The composites' kinds and roles. Two families:
79
+ * - OPEN/CLOSE (CC2 Accordion, CC2.1 Disclosure — composite plan T9 / T21): a Disclosure is a one-item accordion whose
80
+ * ROOT is its item, so both run the same state machine, attribute planners and runtime (`accordion-runtime.ts`);
81
+ * - EXCLUSIVE (CC4 Tabs — composite T17; the Segmented control joins in CC4b): exactly one item is on, a trigger and
82
+ * its panel paired by `itemKey` (`tabs.ts`, `exclusive-runtime.ts`).
83
+ * Every consumer that treats "an item", "a trigger" or "a panel" alike asks these predicates, never a role literal.
82
84
  */
83
85
  declare enum CompositeKind {
84
86
  Accordion = "accordion",
85
- Disclosure = "disclosure"
87
+ Disclosure = "disclosure",
88
+ Tabs = "tabs"
86
89
  }
90
+ /** The kinds the open/close runtime runs (`AccordionRuntime`). */
91
+ type ToggleCompositeKind = CompositeKind.Accordion | CompositeKind.Disclosure;
92
+ /** The kinds the exclusive runtime runs (`ExclusiveRuntime`): one item on at a time, always one. */
93
+ type ExclusiveCompositeKind = CompositeKind.Tabs;
87
94
  declare enum AccordionRole {
88
95
  Accordion = "accordion",
89
96
  Item = "accordion.item",
@@ -104,10 +111,22 @@ declare enum DisclosureRole {
104
111
  Icon = "disclosure.icon",
105
112
  Panel = "disclosure.panel"
106
113
  }
114
+ /**
115
+ * TABS (CC4a — composite T17). The tab LIST holds the triggers, the PANELS holder holds the panels; a tab and its panel
116
+ * share an `itemKey` (never their index — moving a tab keeps its own panel). From content (R3) the list and the panels
117
+ * holder are both Repeaters over the SAME source, one row giving its tab AND its panel (paired by the row's id).
118
+ */
119
+ declare enum TabsRole {
120
+ Tabs = "tabs",
121
+ List = "tabs.list",
122
+ Trigger = "tabs.trigger",
123
+ Panels = "tabs.panels",
124
+ Panel = "tabs.panel"
125
+ }
107
126
  interface RoleLike$2 {
108
127
  role?: string | null;
109
128
  }
110
- /** The roles each kind plays in the shared runtime. */
129
+ /** The roles each open/close kind plays in the shared runtime. */
111
130
  interface CompositeKindRoles {
112
131
  root: string;
113
132
  item: string;
@@ -115,9 +134,23 @@ interface CompositeKindRoles {
115
134
  panel: string;
116
135
  icon: string;
117
136
  }
118
- declare const COMPOSITE_KIND_ROLES: Readonly<Record<CompositeKind, CompositeKindRoles>>;
137
+ declare const COMPOSITE_KIND_ROLES: Readonly<Record<ToggleCompositeKind, CompositeKindRoles>>;
138
+ /** The roles each EXCLUSIVE kind plays: its root, the holder of its triggers, its triggers, and — when its items show
139
+ * a panel (Tabs; a Segmented control has none) — the holder of its panels and the panels. */
140
+ interface ExclusiveKindRoles {
141
+ root: string;
142
+ list: string;
143
+ trigger: string;
144
+ panels: string | null;
145
+ panel: string | null;
146
+ }
147
+ declare const EXCLUSIVE_KIND_ROLES: Readonly<Record<ExclusiveCompositeKind, ExclusiveKindRoles>>;
119
148
  /** The kind a role belongs to (`disclosure.panel` → Disclosure), or null for any other role. */
120
149
  declare function compositeKindOfRole(role: string | null | undefined): CompositeKind | null;
150
+ /** True for a kind the open/close runtime runs. */
151
+ declare function isToggleKind(kind: CompositeKind | null | undefined): kind is ToggleCompositeKind;
152
+ /** True for a kind the exclusive runtime runs. */
153
+ declare function isExclusiveKind(kind: CompositeKind | null | undefined): kind is ExclusiveCompositeKind;
121
154
  /** A root that runs the open/close runtime (an Accordion or a Disclosure). */
122
155
  declare function isCompositeRoot(node: RoleLike$2 | null | undefined): boolean;
123
156
  /** An ITEM — an accordion's item, or a disclosure (its own item). */
@@ -135,6 +168,27 @@ declare function compositeRootOf<T extends RoleLike$2>(node: T, path: ReadonlyAr
135
168
  /** The item a node sits in — the nearest item of either kind (itself when it is one) — or null. An accordion
136
169
  * root ends the walk (its items are below it). */
137
170
  declare function compositeItemOf<T extends RoleLike$2>(node: T, path: ReadonlyArray<T>): T | null;
171
+ /** A root that runs the exclusive runtime (Tabs). */
172
+ declare function isExclusiveRoot(node: RoleLike$2 | null | undefined): boolean;
173
+ /** The holder of an exclusive composite's triggers (a tab list): it takes only triggers. */
174
+ declare function isExclusiveList(node: RoleLike$2 | null | undefined): boolean;
175
+ /** One of an exclusive composite's triggers (a tab): pressing it turns its item on. */
176
+ declare function isExclusiveTrigger(node: RoleLike$2 | null | undefined): boolean;
177
+ /** The holder of an exclusive composite's panels: it takes only panels. */
178
+ declare function isExclusivePanels(node: RoleLike$2 | null | undefined): boolean;
179
+ /** One of an exclusive composite's panels (a tab panel): shown only while its item is on. */
180
+ declare function isExclusivePanel(node: RoleLike$2 | null | undefined): boolean;
181
+ /** True for a trigger or a panel — a part that IS one item of an exclusive composite (it carries the `itemKey`). */
182
+ declare function isExclusiveItemPart(node: RoleLike$2 | null | undefined): boolean;
183
+ /** True for any part of a Tabs (its root included). */
184
+ declare function isTabsPart(node: RoleLike$2 | null | undefined): boolean;
185
+ /** A root of either family — anything that runs a composite runtime. */
186
+ declare function isAnyCompositeRoot(node: RoleLike$2 | null | undefined): boolean;
187
+ /** The exclusive root a node belongs to (the node itself when it is one), or null. `path` = its ancestors, root first. */
188
+ declare function exclusiveRootOf<T extends RoleLike$2>(node: T, path: ReadonlyArray<T>): T | null;
189
+ /** The trigger or panel a node sits in (itself when it is one) inside an exclusive composite, or null. A nested
190
+ * exclusive root ends the walk. */
191
+ declare function exclusiveItemPartOf<T extends RoleLike$2>(node: T, path: ReadonlyArray<T>): T | null;
138
192
 
139
193
  /**
140
194
  * ACCORDION (CC2 — composite K1; complex-components boards 3, 4 and 9, APPROVED 2026-10-20). Not a
@@ -445,6 +499,8 @@ interface AccordionRuntimeOptions {
445
499
  declare function closestAccordion(el: Element | null | undefined): HTMLElement | null;
446
500
  /** The item an element sits in (itself when it is one) — an accordion item, or a disclosure. */
447
501
  declare function closestAccordionItem(el: Element | null | undefined): HTMLElement | null;
502
+ /** The composite root whose items an item belongs to: a disclosure is its own root. */
503
+ declare function accordionRootOfItem(item: HTMLElement): HTMLElement | null;
448
504
  /** Subscribe to an item turning on / off — what the `itemOn` / `itemOff` interaction triggers listen to. The
449
505
  * item is the element's own item (the element itself when it is one). Returns the unsubscribe. */
450
506
  declare function onAccordionItemState(el: Element, on: boolean, handler: () => void): () => void;
@@ -515,12 +571,6 @@ declare enum CompositeItemAction {
515
571
  Close = "close",
516
572
  Toggle = "toggle"
517
573
  }
518
- /**
519
- * Run an item action on the element of an ITEM (an accordion item, or a disclosure) — the `openItem` /
520
- * `closeItem` / `toggleItem` interaction actions, on the canvas and on the live site through this one function.
521
- * Returns whether the item shows open afterwards, or null when `el` is in no running composite.
522
- */
523
- declare function runCompositeItemAction(el: Element | null | undefined, action: CompositeItemAction): boolean | null;
524
574
  /** True when an item an action just opened is out of view and the page should scroll to it (T14: "opens that item
525
575
  * and scrolls to it") — never when its head is already on screen, so a button beside it does not jolt the page. */
526
576
  declare function shouldScrollToItem(top: number, viewportHeight: number): boolean;
@@ -749,6 +799,8 @@ interface CompositeRoleSpec {
749
799
  /** May be deleted, but never moved out of its parent (a Slider's controls work only as its direct children). */
750
800
  readonly pinned?: boolean;
751
801
  readonly part?: CardPart;
802
+ /** The only roles that may be dropped INTO this part (a tab list takes tabs, a panels holder takes panels). */
803
+ readonly accepts?: ReadonlyArray<string>;
752
804
  }
753
805
  declare const COMPOSITE_ROLE_SPECS: Readonly<Record<string, CompositeRoleSpec>>;
754
806
  declare enum StructureEdit {
@@ -760,7 +812,9 @@ declare enum StructureRefusal {
760
812
  /** A locked part cannot be deleted (the card's Content and Title). */
761
813
  LockedPart = "locked-part",
762
814
  /** A locked part can only live directly inside its own parent role. */
763
- LockedPlacement = "locked-placement"
815
+ LockedPlacement = "locked-placement",
816
+ /** The new parent takes only certain roles (a tab list takes only tabs, CC4a). */
817
+ NotAccepted = "not-accepted"
764
818
  }
765
819
  interface RoleLike$1 {
766
820
  role?: string | null;
@@ -774,6 +828,8 @@ declare function structureRefusal(node: RoleLike$1 | null | undefined, edit: Str
774
828
  /** True when `node` is a locked part (shown with a lock and no delete in the layer tree). Deleting a whole
775
829
  * composite is always allowed — only its locked parts are refused. */
776
830
  declare function isLockedPart(node: RoleLike$1 | null | undefined): boolean;
831
+ /** Why `parent` refuses `node` as a child (it takes only certain roles), or null. */
832
+ declare function acceptsRefusal(node: RoleLike$1 | null | undefined, parent: RoleLike$1 | null | undefined): StructureRefusal | null;
777
833
 
778
834
  /**
779
835
  * THE ACCESSIBLE CAROUSEL (CC3 — complex-components plan §7c, board 6; board 9 Q13). The Slider's controls are no
@@ -1047,5 +1103,325 @@ declare function canOpenAtClickedItem(ownerPath: ReadonlyArray<CompositeNode>, d
1047
1103
  /** The repeated row an element sits in (its row index), 0 when it is in none (the canvas' template row). */
1048
1104
  declare function rowIndexOf(el: Element | null | undefined): number;
1049
1105
 
1050
- export { ACCORDION_BIND_PROP, ACCORDION_CONTENT_LIMIT, ACCORDION_DEFAULT_ONS, ACCORDION_ICONS, ACCORDION_ICON_GLYPH, ACCORDION_NEW_ITEM_WORDS, ACCORDION_WORDS, AccordionClass, AccordionDefaultOn, AccordionEditRefusal, AccordionIcon, AccordionKeyAction, AccordionRole, AccordionRuntime, BADGE_TONES, BADGE_TONE_ICONS, BadgeTone, CARD_LAYOUTS, CARD_LAYOUT_CUSTOM, CARD_PARTS, CARD_PART_ROLE, CARD_STACK_BREAKPOINT, CARD_WORDS, CAROUSEL_QUOTES, CHIP_ICON, CHIP_STYLE, COMPOSITE_ATTRIBUTE, COMPOSITE_KIND_ROLES, COMPOSITE_ROLE_SPECS, CardLayout, CardPart, CardRole, CarouselA11y, CompositeBehaviourTrait, CompositeItemAction, CompositeKind, DEFAULT_ON_ATTRIBUTE, DISCLOSURE_ITEM_KEY, DISCLOSURE_WORDS, DisclosureRole, ITEM_KEY_ATTRIBUTE, ITEM_OFF_EVENT, ITEM_ON_EVENT, ITEM_OPEN_STATE, LIGHTBOX_ARROWS_HIDE_AT, LIGHTBOX_LABEL, MULTIPLE_ATTRIBUTE, NO_ELEMENT_STYLE, ON_ATTRIBUTE, ON_STATE, PILL_LABEL_STYLE, ROW_INDEX_ATTRIBUTE, SCOPE_ATTRIBUTE, SLIDER_NAME_TRAIT, SLIDER_PART_GLYPH, SLIDER_PART_ROLES, SLIDER_PLAY_GLYPH, SLIDER_TYPE, SLIDER_WORDS, SLIDE_TO_ROW, SLIDE_TYPE, SWIPER_THEME_COLOR, SliderFlag, SliderRole, StructureEdit, StructureRefusal, UNTIL_FOUND, accordionAnswerOf, accordionBehaviour, accordionDomIds, accordionFocusIndex, accordionHeadingLevel, accordionItemAttributes, accordionItemLabel, accordionItemOf, accordionItemState, accordionItems, accordionKeyAction, accordionPanelAttributes, accordionPanelOf, accordionPartStyle, accordionQuestionOf, accordionRegionAttributes, accordionRemovalRefusal, accordionRootAttributes, accordionRootOf, accordionRuntimeOf, accordionScope, accordionToContent, accordionToManual, accordionTrackAttributes, accordionTriggerAttributes, accordionTriggerOf, addAccordionItem, applyCardLayout, attachAccordionAt, attachAccordions, attachCarouselA11y, badgeStyleId, badgeToneOf, buildAccordionItem, buildAccordionRecipe, buildBadge, buildCardRecipe, buildCarouselRecipe, buildChip, buildCompositeIcon, buildDisclosureRecipe, buildLightboxRecipe, buildSliderPart, canOpenAtClickedItem, cardPartsOf, cardRootOf, cardTitleOf, carouselOf, clearLayerStyles, closeAccordionItem, closestAccordion, closestAccordionItem, compositeItemOf, compositeItems, compositeKindOfRole, compositeRootOf, compositeRowKeys, compositeScopeId, detachAccordion, detectAccordionIcon, detectCardLayout, disclosureOpenByDefault, domSafeKey, findByRole, hasLabelledRegion, hasSliderParts, initialAccordionOpen, isAccordionFromContent, isAccordionItemOn, isAccordionPart, isAccordionRoot, isCardLinked, isCardRoot, isCompositeItem, isCompositePanel, isCompositeRoot, isCompositeTrigger, isDisclosurePart, isDisclosureRoot, isLockedPart, isPillNode, isSlider, isSliderPart, itemOpenTriggerIds, lightboxSliderOf, makeCompositePart, migrateSliderControls, moveAccordionItem, needsSliderMigration, nextAccordionState, nextItemKey, onAccordionItemState, openAccordionItem, parentInComposite, pickAccordionAutoBinds, readLayerStyle, readProp, readStyle, removeFromComposite, renameAccordionItem, repeatSourceOf, rowIndexOf, rowItemKey, rowSourceOf, runCompositeItemAction, sameRepeatSource, serializeDomAttributes, setAccordionBehaviour, setAccordionIcon, setBadgeTone, setCardLinked, setCardPart, setSliderFlag, shouldScrollToItem, slideIndexForRow, sliderLiveRegion, sliderPart, sliderPartElement, sliderPauseAttributes, sliderPauseGlyph, sliderSlides, sliderWords, splitSliderChildren, structureRefusal, syncSliderParts, walkComposite, wantedSliderParts, writeLayerStyles, writeProp, writeStyles };
1051
- export type { AccordionAutoBinds, AccordionBehaviour, AccordionDomIds, AccordionItemState, AccordionOptions, AccordionRuntimeOptions, AccordionScope, AccordionWords, BaselineStyles, CardEditOptions, CardLayoutResult, CardLayoutState, CardOptions, CardPartChange, CardWords, CarouselA11yOptions, CarouselOptions, CarouselQuote, CarouselSwiper, CompositeBinding, CompositeKindRoles, CompositeLayer, CompositeNode, CompositeNodeFactory, CompositeNodeSpec, CompositeRoleSpec, CompositeTrait, ContentFieldLike, DisclosureOptions, DisclosureWords, DomAttributes, LegacySliderLook, LightboxOptions, PillOptions, RepeatSource, SliderPartsChange, SliderWords };
1106
+ /**
1107
+ * TABS (CC4a — composite K2 T17–T20; complex-components boards 3 and 9, APPROVED 2026-10-20). Not a component: a
1108
+ * recipe of ordinary nodes, each part carrying a role, so every tab and every panel is selectable on the canvas, in
1109
+ * the layer tree and the breadcrumb, and wears its own element style (R2).
1110
+ *
1111
+ * Container `box` role tabs traits activateOn · orientation · ariaLabel (the list's name)
1112
+ * ├─ Container `tab-list` role tabs.list → role=tablist (locked) — or a Repeater (From content)
1113
+ * │ └─ ButtonBlock `tab` ×3 role tabs.trigger itemKey k1… → <button role=tab> › Text `button-label`
1114
+ * └─ Container `box` role tabs.panels (locked) — or a Repeater (From content)
1115
+ * └─ Container `box` ×3 role tabs.panel the SAME itemKey as its tab → role=tabpanel, hidden while off
1116
+ * ├─ Image `media` 4 / 3
1117
+ * └─ Text `body`
1118
+ *
1119
+ * A tab and its panel are a PAIR by `itemKey` — never by index, so a tab moved to the end still shows its own panel.
1120
+ * The behaviour is BUILT IN (composite plan D1 = B): exactly one item is on (`exclusive`), the APG tabs pattern with
1121
+ * AUTOMATIC activation (arrows move focus and activate, roving tabindex) — one runtime (`exclusive-runtime.ts`) on the
1122
+ * builder canvas and both engine paths, from the attribute planners below.
1123
+ */
1124
+ declare enum TabsBehaviourTrait {
1125
+ /** Which pointer gesture turns a tab on: a click (always) or also a hover. */
1126
+ ActivateOn = "activateOn",
1127
+ /** The tab list across the top, or beside the panels. */
1128
+ Orientation = "orientation",
1129
+ /** The tab list's accessible name (`aria-label` on the role=tablist element) — the root's, edited in Accessibility. */
1130
+ Label = "ariaLabel"
1131
+ }
1132
+ declare enum TabsActivateOn {
1133
+ Click = "click",
1134
+ Hover = "hover"
1135
+ }
1136
+ declare enum TabsOrientation {
1137
+ Horizontal = "horizontal",
1138
+ Vertical = "vertical"
1139
+ }
1140
+ declare const TABS_ACTIVATE_ONS: ReadonlyArray<TabsActivateOn>;
1141
+ declare const TABS_ORIENTATIONS: ReadonlyArray<TabsOrientation>;
1142
+ /** Tabs from content default to six rows: more tabs do not fit a row (board 9 Q13). */
1143
+ declare const TABS_CONTENT_LIMIT = 6;
1144
+ /** The breakpoint whose layer stacks a VERTICAL tabs (the list above the panels) and a panel's picture above its words. */
1145
+ declare const TABS_STACK_BREAKPOINT = "mobile";
1146
+ interface TabWords {
1147
+ label: string;
1148
+ text: string;
1149
+ }
1150
+ /** The words a fresh Tabs starts with — generic, the author's to replace (Card v2.1: never invented facts). */
1151
+ declare const TABS_WORDS: ReadonlyArray<TabWords>;
1152
+ declare const TABS_NEW_TAB_WORDS: Readonly<TabWords>;
1153
+ interface TabsOptions {
1154
+ tabs?: ReadonlyArray<TabWords>;
1155
+ activateOn?: TabsActivateOn;
1156
+ orientation?: TabsOrientation;
1157
+ /** The tab list's accessible name (empty: unnamed — a section heading usually names the section). */
1158
+ label?: string;
1159
+ }
1160
+ interface TabPair {
1161
+ tab: CompositeNode;
1162
+ panel: CompositeNode;
1163
+ }
1164
+ /** One tab and its panel, sharing `itemKey`. */
1165
+ declare function buildTabPair(create: CompositeNodeFactory, words: TabWords, itemKey: string): TabPair;
1166
+ /** A fresh Tabs: three tabs, the first on, activated by a click, the list across the top (board 3). */
1167
+ declare function buildTabsRecipe(create: CompositeNodeFactory, options?: TabsOptions): CompositeNode;
1168
+ declare function isTabsRoot(node: {
1169
+ role?: string | null;
1170
+ } | null | undefined): boolean;
1171
+ /** The tab list (the holder of the triggers). */
1172
+ declare function tabsListOf(root: CompositeNode): CompositeNode | undefined;
1173
+ /** The holder of the panels. */
1174
+ declare function tabsPanelsOf(root: CompositeNode): CompositeNode | undefined;
1175
+ /** The tabs in order — every tab (Manual), or the one template tab (From content). */
1176
+ declare function tabsTriggers(root: CompositeNode): CompositeNode[];
1177
+ /** The panels in their holder's order (their order does not pair them — their key does). */
1178
+ declare function tabsPanels(root: CompositeNode): CompositeNode[];
1179
+ /** True when the Tabs takes its tabs from content (its list is a Repeater, R3). */
1180
+ declare function isTabsFromContent(root: CompositeNode | null | undefined): boolean;
1181
+ /** The panel paired with `tab` (the same key), or undefined. From content the one template panel pairs the template tab. */
1182
+ declare function tabPanelOf(root: CompositeNode, tab: CompositeNode): CompositeNode | undefined;
1183
+ /** The tab paired with `panel` (the same key), or undefined. */
1184
+ declare function tabTriggerOf(root: CompositeNode, panel: CompositeNode): CompositeNode | undefined;
1185
+ /** The other half of a tab ⇄ panel pair, or undefined for any other node. */
1186
+ declare function tabsPartnerOf(root: CompositeNode, node: CompositeNode): CompositeNode | undefined;
1187
+ /** The words a tab shows: its first Text's. */
1188
+ declare function tabLabelNodeOf(tab: CompositeNode): CompositeNode | undefined;
1189
+ /** A tab's name in the Items list, the layer tree and the item-action picker: its words. */
1190
+ declare function tabLabel(tab: CompositeNode): string;
1191
+ /** Items ▸ rename: the tab's words. */
1192
+ declare function renameTab(tab: CompositeNode, words: string): boolean;
1193
+ /** The first Text inside a panel (the words From content binds to). */
1194
+ declare function tabPanelTextOf(panel: CompositeNode): CompositeNode | undefined;
1195
+ /** The first Image inside a panel. */
1196
+ declare function tabPanelImageOf(panel: CompositeNode): CompositeNode | undefined;
1197
+ interface TabsBehaviour {
1198
+ activateOn: TabsActivateOn;
1199
+ orientation: TabsOrientation;
1200
+ }
1201
+ /** The root's behaviour (an unset trait reads its default: a click, the list across the top). */
1202
+ declare function tabsBehaviour(root: CompositeNode | null | undefined): TabsBehaviour;
1203
+ /** The tab list's accessible name (empty when unnamed). */
1204
+ declare function tabsLabel(root: CompositeNode | null | undefined): string;
1205
+ /** Behaviour ▸ Activate on / Orientation (and Accessibility ▸ the list's name). False when the root has no such trait. */
1206
+ declare function setTabsBehaviour(root: CompositeNode, patch: Partial<TabsBehaviour> & {
1207
+ label?: string;
1208
+ }): boolean;
1209
+ /** A key no tab of `root` holds yet (`k4`…). */
1210
+ declare function nextTabKey(root: CompositeNode): string;
1211
+ /** Items ▸ Add tab (and the toolbar's "Add tab"): a fresh tab after `after` (or at the end) AND its panel. */
1212
+ declare function addTabPair(root: CompositeNode, create: CompositeNodeFactory, after?: CompositeNode | null, words?: TabWords): TabPair | null;
1213
+ /** Items ▸ drag to reorder: move a tab — and its panel, so the layer tree reads in the same order — to `toIndex`.
1214
+ * The pairing never depended on the order. False when `tab` is not one of the root's tabs. */
1215
+ declare function moveTabPair(root: CompositeNode, tab: CompositeNode, toIndex: number): boolean;
1216
+ /** Remove a tab and its panel (the pair) — what "Delete tab and its panel" does. True when the tab was removed. */
1217
+ declare function removeTabPair(root: CompositeNode, node: CompositeNode): boolean;
1218
+ declare enum TabsEditRefusal {
1219
+ /** A Tabs keeps at least one tab (composite plan T18). */
1220
+ LastTab = "last-tab"
1221
+ }
1222
+ /** Why removing `node` (a tab or a panel) from `root` is refused, or null. */
1223
+ declare function tabsRemovalRefusal(root: CompositeNode | null | undefined, node: CompositeNode | null | undefined): TabsEditRefusal | null;
1224
+ /** Every "Item open" (`trigger-on`) state inside a tab or a panel points at ITS tab or panel — the part that carries
1225
+ * `data-iox-on` while its item is on. */
1226
+ declare function tabsItemTriggerIds(root: CompositeNode): void;
1227
+ /** The render scope of one Tabs: its scope id, behaviour, every item key in order and the one that is on. */
1228
+ interface TabsScope {
1229
+ rootId: string;
1230
+ behaviour: TabsBehaviour;
1231
+ keys: ReadonlyArray<string>;
1232
+ /** The key on at first paint: the first tab (null when there is none). */
1233
+ active: string | null;
1234
+ label: string;
1235
+ }
1236
+ declare function tabsScope(rootId: string, behaviour: TabsBehaviour, keys: ReadonlyArray<string>, label?: string): TabsScope;
1237
+ /** The item keys a manual Tabs pairs by — its tabs' own keys, in order (a tab with none by its index). */
1238
+ declare function manualTabKeys(root: CompositeNode): string[];
1239
+ interface TabsItemState {
1240
+ key: string;
1241
+ on: boolean;
1242
+ ids: AccordionDomIds;
1243
+ }
1244
+ /** One item's render state: its key, whether it is on, and its ARIA ids (`iox-tab-<scope>-<key>-h` / `-p`). */
1245
+ declare function tabsItemState(scope: TabsScope, key: string): TabsItemState;
1246
+ declare const ACTIVATE_ON_ATTRIBUTE = "data-iox-activate-on";
1247
+ declare const ORIENTATION_ATTRIBUTE = "data-iox-orientation";
1248
+ declare function tabsRootAttributes(behaviour: TabsBehaviour, scopeId?: string): DomAttributes;
1249
+ /** The tab list: `role=tablist`, vertical said aloud, named by the root's label. */
1250
+ declare function tabListAttributes(behaviour: TabsBehaviour, label?: string): DomAttributes;
1251
+ /** A tab: a real button that selects its panel — selected = the one tab in the Tab order (roving tabindex). */
1252
+ declare function tabTriggerAttributes(state: TabsItemState): DomAttributes;
1253
+ /** A panel: `role=tabpanel`, named by its tab, a Tab stop of its own, and `hidden` (display:none) while off. */
1254
+ declare function tabPanelAttributes(state: TabsItemState): DomAttributes;
1255
+ /**
1256
+ * The render scope of one rendered Tabs — ONE decision for both engine paths (and the composer's checks): its scope id
1257
+ * (its node id + the rows around it, vectoriox/iox-ui#20), its behaviour, its list's name and every item key in order —
1258
+ * a manual tab's own `itemKey`, or, From content, each ROW's own id (R3: never its index — a reorder in the CMS keeps
1259
+ * every tab with its own panel). `rows` = the rows the tab list's Repeater resolved (null for a manual Tabs).
1260
+ */
1261
+ declare function tabsScopeFor(root: CompositeNode, rootCssId: string, rows: ReadonlyArray<unknown> | null, rowKeys?: ReadonlyArray<string>): TabsScope;
1262
+ /** The key a manual tab or panel renders with: its own key, else its index among its kind. */
1263
+ declare function tabPartKey(node: CompositeNode, index: number): string;
1264
+ /**
1265
+ * The attributes a part of a Tabs writes on its own element (both engine paths, SSR included): the root's data
1266
+ * attributes (its scope id when it sits in repeated rows), the list's role and name, a tab's and a panel's state by
1267
+ * `key` (its own key, or — From content — its row's). Anything else writes nothing.
1268
+ */
1269
+ declare function tabsPartAttributes(node: {
1270
+ role?: string | null;
1271
+ }, scope: TabsScope, key: string | null, rowScoped?: boolean): DomAttributes;
1272
+ /**
1273
+ * The APG tabs keys on a tab (automatic activation): → / ← move along a horizontal list — mirrored under RTL — and ↓ /
1274
+ * ↑ along a vertical one; Home / End jump. Every move wraps. Enter / Space are the button's own.
1275
+ */
1276
+ declare function tabsKeyAction(key: string, orientation: TabsOrientation, rtl?: boolean): AccordionKeyAction | null;
1277
+ interface TabsAutoBinds {
1278
+ /** The first short-text field: the tab's words. */
1279
+ label: string | null;
1280
+ /** The first long-text field: the panel's words. */
1281
+ text: string | null;
1282
+ /** The first image field: the panel's picture. */
1283
+ image: string | null;
1284
+ }
1285
+ /** R3 (board 3 "Tabs from content"): switching to From content binds the tab's words to the first short-text field,
1286
+ * the panel's words to the first long-text field and its picture to the first image field. ONE rule for the builder's
1287
+ * switch and the composer. */
1288
+ declare function pickTabsAutoBinds(fields: ReadonlyArray<ContentFieldLike>): TabsAutoBinds;
1289
+ /** The bound props of a tab's words, a panel's words and its picture. */
1290
+ declare const TABS_LABEL_BIND_PROP = "content";
1291
+ declare const TABS_TEXT_BIND_PROP = "content";
1292
+ declare const TABS_IMAGE_BIND_PROP = "src";
1293
+ /**
1294
+ * Manual → From content (board 9 "Items: Manual · From content"): the list becomes `listRepeater` and the panels
1295
+ * holder `panelsRepeater` (Repeater nodes the caller created with the same ids, roles, names, element styles and
1296
+ * styles — a type change is the consumer's). The FIRST tab and ITS panel become the templates (their parts, styles
1297
+ * and interactions kept; their keys dropped — a row's key is its id); every other pair is removed. Returns the removed
1298
+ * nodes.
1299
+ */
1300
+ declare function tabsToContent(root: CompositeNode, listRepeater: CompositeNode, panelsRepeater: CompositeNode): CompositeNode[];
1301
+ /**
1302
+ * From content → Manual: the rows come in as static pairs — each a copy of the template tab and panel (`clone`, which
1303
+ * gives the copy fresh ids) whose bound words are written in as its own and whose bindings are dropped. `list` and
1304
+ * `panels` are the manual holders the caller created. Returns the new pairs.
1305
+ */
1306
+ declare function tabsToManual(root: CompositeNode, list: CompositeNode, panels: CompositeNode, rows: ReadonlyArray<unknown>, clone: (template: CompositeNode) => CompositeNode, resolve: (row: unknown, binding: CompositeBinding) => unknown): TabPair[];
1307
+
1308
+ /**
1309
+ * The EXCLUSIVE composites' RUNTIME (CC4a Tabs; the Segmented control runs it too in CC4b) — ONE copy, DOM only, for
1310
+ * the builder canvas and the live site (both engine paths render the same markup from `tabs.ts`'s attribute planners):
1311
+ *
1312
+ * [root] data-iox-composite="tabs" data-iox-activate-on data-iox-orientation [data-iox-scope]
1313
+ * .iox-role-tabs-list role=tablist [aria-orientation=vertical]
1314
+ * .iox-role-tabs-trigger role=tab id aria-selected aria-controls tabindex 0|-1 data-iox-item-key [data-iox-on]
1315
+ * .iox-role-tabs-panels
1316
+ * .iox-role-tabs-panel role=tabpanel id aria-labelledby tabindex=0 data-iox-item-key [hidden] | [data-iox-on]
1317
+ *
1318
+ * Exactly one item is on, always (a Tabs with tabs never shows none). It owns: a click on a trigger turns its item on
1319
+ * (and a hover, when the root says `activate-on=hover`); the APG tabs keys with AUTOMATIC activation — ← → along a
1320
+ * horizontal list (mirrored under RTL), ↑ ↓ along a vertical one, Home / End — moving focus AND turning the item on,
1321
+ * the roving tabindex keeping one trigger in the Tab order. A trigger and its panel pair by `data-iox-item-key`
1322
+ * (else their index among their kind — the builder's From-content rows). Every change dispatches `iox-item-on` /
1323
+ * `iox-item-off` on the trigger AND its panel (the `itemOn` / `itemOff` interaction triggers). The item shown is
1324
+ * FORCED ?? LIVE: the builder forces one (a selection inside an inactive panel); the live site forces nothing. The
1325
+ * server's first state is trusted (no flash).
1326
+ */
1327
+ interface ExclusiveRuntimeOptions {
1328
+ /** The scope id the ARIA ids are built from (else `data-iox-scope`, else the root's `iox-node-<id>`). A function is
1329
+ * read at every stamp (the builder canvas: a preview row's index is known once it is in the page). */
1330
+ rootId?: string | (() => string);
1331
+ /** The behaviour (else read from the root's data attributes). */
1332
+ behaviour?: TabsBehaviour;
1333
+ /** The list's accessible name, stamped by the runtime (the builder canvas; the engine renders it). */
1334
+ label?: () => string;
1335
+ /** The key forced on, on top of the live state (the builder's design state), or null. */
1336
+ forced?: () => string | null;
1337
+ /** The live item changed (a click, a key, a hover, an action) — the builder's "Showing on canvas" follows it. */
1338
+ onChange?: (key: string) => void;
1339
+ /** Re-stamp when the markup under the root changes (the builder canvas re-renders parts). */
1340
+ observe?: boolean;
1341
+ }
1342
+ /** The exclusive composite an element belongs to (the element itself when it is a root). */
1343
+ declare function closestExclusive(el: Element | null | undefined): HTMLElement | null;
1344
+ /** The trigger or panel an element sits in (itself when it is one) — its ITEM part — or null. */
1345
+ declare function closestExclusiveItemPart(el: Element | null | undefined): HTMLElement | null;
1346
+ declare class ExclusiveRuntime {
1347
+ readonly root: HTMLElement;
1348
+ private readonly options;
1349
+ private live;
1350
+ private shown;
1351
+ private observer;
1352
+ private stampQueued;
1353
+ private behaviourValue;
1354
+ private awaitingItems;
1355
+ readonly kind: ExclusiveCompositeKind;
1356
+ constructor(root: HTMLElement, options?: ExclusiveRuntimeOptions);
1357
+ get behaviour(): TabsBehaviour;
1358
+ /** The behaviour changed in the panel (Activate on, Orientation). */
1359
+ setBehaviour(behaviour: TabsBehaviour): void;
1360
+ /** THIS composite's triggers in document order (a nested composite's are its own). */
1361
+ triggers(): HTMLElement[];
1362
+ /** THIS composite's panels in document order. */
1363
+ panels(): HTMLElement[];
1364
+ /** The key on right now (forced ?? live). */
1365
+ get activeKey(): string | null;
1366
+ /** The key the live state holds (before anything forced). */
1367
+ get liveKey(): string | null;
1368
+ /** The key of a trigger or a panel: its `data-iox-item-key`, else its index among its kind. */
1369
+ keyOf(part: Element): string;
1370
+ /** The key of the item an element sits in (a part inside a tab or a panel), or null. */
1371
+ keyAt(el: Element | null | undefined): string | null;
1372
+ /** Turn `key` on (a click, a key, a hover, the `openItem` action, "Showing on canvas"). */
1373
+ activate(key: string): void;
1374
+ /** Run an item action on `key`: Open turns it on; Close and Toggle do nothing (one item is always on). True when it
1375
+ * is on afterwards. */
1376
+ run(open: boolean, key: string): boolean;
1377
+ /** The forced key changed (builder design state): show it. */
1378
+ refresh(): void;
1379
+ destroy(): void;
1380
+ private keys;
1381
+ /** The element(s) that ARE the tablist: the ones a renderer already gave the role (the engine's component-path
1382
+ * Repeater puts it on its inner root, which holds the tabs), else the elements carrying the list's role class. */
1383
+ private lists;
1384
+ private own;
1385
+ private queueStamp;
1386
+ private rootId;
1387
+ /** Write every part's state into its markup; announce what changed. */
1388
+ private stamp;
1389
+ private ownTrigger;
1390
+ private readonly onClick;
1391
+ private readonly onHover;
1392
+ private readonly onKeydown;
1393
+ }
1394
+ /** The runtime running an exclusive root, or null. */
1395
+ declare function exclusiveRuntimeOf(root: Element | null | undefined): ExclusiveRuntime | null;
1396
+ /** Attach the runtime to one rendered exclusive root, unless it already runs one. Returns the NEW runtime, or null. */
1397
+ declare function attachExclusiveAt(root: HTMLElement, options?: Omit<ExclusiveRuntimeOptions, 'behaviour'>): ExclusiveRuntime | null;
1398
+ /** True when `el` is (or sits in) an exclusive item part — a tab or a panel. */
1399
+ declare function isExclusiveItemOn(el: Element): boolean;
1400
+ /** Subscribe to the item part `el` sits in turning on / off. Returns the unsubscribe. */
1401
+ declare function onExclusiveItemState(el: Element, on: boolean, handler: () => void): () => void;
1402
+
1403
+ /**
1404
+ * The composites' runtimes behind ONE door (CC4a): the open/close runtime (Accordion, Disclosure) and the exclusive
1405
+ * runtime (Tabs; the Segmented control in CC4b). The engine attaches whichever a rendered root needs; the interaction
1406
+ * engines (builder canvas and live site) ask these for `itemOn` / `itemOff` and run the item actions through them —
1407
+ * never a family's own function, so a new kind joins without touching either engine.
1408
+ */
1409
+ type CompositeRuntime = AccordionRuntime | ExclusiveRuntime;
1410
+ /** Attach the runtime a rendered composite root needs (its `data-iox-composite`), unless it runs one already. Returns
1411
+ * the NEW runtime, or null. */
1412
+ declare function attachCompositeAt(root: HTMLElement, options?: Omit<AccordionRuntimeOptions, 'rootId' | 'behaviour'> & Omit<ExclusiveRuntimeOptions, 'behaviour'>): CompositeRuntime | null;
1413
+ /** Subscribe to the item `el` sits in turning on / off — what the `itemOn` / `itemOff` interaction triggers listen to,
1414
+ * in both families. Returns the unsubscribe. */
1415
+ declare function onCompositeItemState(el: Element, on: boolean, handler: () => void): () => void;
1416
+ /** True when the item `el` sits in is on now (an open accordion item, the active tab or its panel). */
1417
+ declare function isCompositeItemOn(el: Element): boolean;
1418
+ /**
1419
+ * Run an item action on the element of an ITEM — an accordion item, a disclosure, or a tab (CC4a: `openItem` turns it
1420
+ * on; a Tabs always shows one, so Close and Toggle leave it) — the `openItem` / `closeItem` / `toggleItem` interaction
1421
+ * actions, on the canvas and on the live site through this one function. Returns whether the item shows on
1422
+ * afterwards, or null when `el` is in no running composite.
1423
+ */
1424
+ declare function runCompositeItemAction(el: Element | null | undefined, action: CompositeItemAction): boolean | null;
1425
+
1426
+ export { ACCORDION_BIND_PROP, ACCORDION_CONTENT_LIMIT, ACCORDION_DEFAULT_ONS, ACCORDION_ICONS, ACCORDION_ICON_GLYPH, ACCORDION_NEW_ITEM_WORDS, ACCORDION_WORDS, ACTIVATE_ON_ATTRIBUTE, AccordionClass, AccordionDefaultOn, AccordionEditRefusal, AccordionIcon, AccordionKeyAction, AccordionRole, AccordionRuntime, BADGE_TONES, BADGE_TONE_ICONS, BadgeTone, CARD_LAYOUTS, CARD_LAYOUT_CUSTOM, CARD_PARTS, CARD_PART_ROLE, CARD_STACK_BREAKPOINT, CARD_WORDS, CAROUSEL_QUOTES, CHIP_ICON, CHIP_STYLE, COMPOSITE_ATTRIBUTE, COMPOSITE_KIND_ROLES, COMPOSITE_ROLE_SPECS, CardLayout, CardPart, CardRole, CarouselA11y, CompositeBehaviourTrait, CompositeItemAction, CompositeKind, DEFAULT_ON_ATTRIBUTE, DISCLOSURE_ITEM_KEY, DISCLOSURE_WORDS, DisclosureRole, EXCLUSIVE_KIND_ROLES, ExclusiveRuntime, ITEM_KEY_ATTRIBUTE, ITEM_OFF_EVENT, ITEM_ON_EVENT, ITEM_OPEN_STATE, LIGHTBOX_ARROWS_HIDE_AT, LIGHTBOX_LABEL, MULTIPLE_ATTRIBUTE, NO_ELEMENT_STYLE, ON_ATTRIBUTE, ON_STATE, ORIENTATION_ATTRIBUTE, PILL_LABEL_STYLE, ROW_INDEX_ATTRIBUTE, SCOPE_ATTRIBUTE, SLIDER_NAME_TRAIT, SLIDER_PART_GLYPH, SLIDER_PART_ROLES, SLIDER_PLAY_GLYPH, SLIDER_TYPE, SLIDER_WORDS, SLIDE_TO_ROW, SLIDE_TYPE, SWIPER_THEME_COLOR, SliderFlag, SliderRole, StructureEdit, StructureRefusal, TABS_ACTIVATE_ONS, TABS_CONTENT_LIMIT, TABS_IMAGE_BIND_PROP, TABS_LABEL_BIND_PROP, TABS_NEW_TAB_WORDS, TABS_ORIENTATIONS, TABS_STACK_BREAKPOINT, TABS_TEXT_BIND_PROP, TABS_WORDS, TabsActivateOn, TabsBehaviourTrait, TabsEditRefusal, TabsOrientation, TabsRole, UNTIL_FOUND, acceptsRefusal, accordionAnswerOf, accordionBehaviour, accordionDomIds, accordionFocusIndex, accordionHeadingLevel, accordionItemAttributes, accordionItemLabel, accordionItemOf, accordionItemState, accordionItems, accordionKeyAction, accordionPanelAttributes, accordionPanelOf, accordionPartStyle, accordionQuestionOf, accordionRegionAttributes, accordionRemovalRefusal, accordionRootAttributes, accordionRootOf, accordionRootOfItem, accordionRuntimeOf, accordionScope, accordionToContent, accordionToManual, accordionTrackAttributes, accordionTriggerAttributes, accordionTriggerOf, addAccordionItem, addTabPair, applyCardLayout, attachAccordionAt, attachAccordions, attachCarouselA11y, attachCompositeAt, attachExclusiveAt, badgeStyleId, badgeToneOf, buildAccordionItem, buildAccordionRecipe, buildBadge, buildCardRecipe, buildCarouselRecipe, buildChip, buildCompositeIcon, buildDisclosureRecipe, buildLightboxRecipe, buildSliderPart, buildTabPair, buildTabsRecipe, canOpenAtClickedItem, cardPartsOf, cardRootOf, cardTitleOf, carouselOf, clearLayerStyles, closeAccordionItem, closestAccordion, closestAccordionItem, closestExclusive, closestExclusiveItemPart, compositeItemOf, compositeItems, compositeKindOfRole, compositeRootOf, compositeRowKeys, compositeScopeId, detachAccordion, detectAccordionIcon, detectCardLayout, disclosureOpenByDefault, domSafeKey, exclusiveItemPartOf, exclusiveRootOf, exclusiveRuntimeOf, findByRole, hasLabelledRegion, hasSliderParts, initialAccordionOpen, isAccordionFromContent, isAccordionItemOn, isAccordionPart, isAccordionRoot, isAnyCompositeRoot, isCardLinked, isCardRoot, isCompositeItem, isCompositeItemOn, isCompositePanel, isCompositeRoot, isCompositeTrigger, isDisclosurePart, isDisclosureRoot, isExclusiveItemOn, isExclusiveItemPart, isExclusiveKind, isExclusiveList, isExclusivePanel, isExclusivePanels, isExclusiveRoot, isExclusiveTrigger, isLockedPart, isPillNode, isSlider, isSliderPart, isTabsFromContent, isTabsPart, isTabsRoot, isToggleKind, itemOpenTriggerIds, lightboxSliderOf, makeCompositePart, manualTabKeys, migrateSliderControls, moveAccordionItem, moveTabPair, needsSliderMigration, nextAccordionState, nextItemKey, nextTabKey, onAccordionItemState, onCompositeItemState, onExclusiveItemState, openAccordionItem, parentInComposite, pickAccordionAutoBinds, pickTabsAutoBinds, readLayerStyle, readProp, readStyle, removeFromComposite, removeTabPair, renameAccordionItem, renameTab, repeatSourceOf, rowIndexOf, rowItemKey, rowSourceOf, runCompositeItemAction, sameRepeatSource, serializeDomAttributes, setAccordionBehaviour, setAccordionIcon, setBadgeTone, setCardLinked, setCardPart, setSliderFlag, setTabsBehaviour, shouldScrollToItem, slideIndexForRow, sliderLiveRegion, sliderPart, sliderPartElement, sliderPauseAttributes, sliderPauseGlyph, sliderSlides, sliderWords, splitSliderChildren, structureRefusal, syncSliderParts, tabLabel, tabLabelNodeOf, tabListAttributes, tabPanelAttributes, tabPanelImageOf, tabPanelOf, tabPanelTextOf, tabPartKey, tabTriggerAttributes, tabTriggerOf, tabsBehaviour, tabsItemState, tabsItemTriggerIds, tabsKeyAction, tabsLabel, tabsListOf, tabsPanels, tabsPanelsOf, tabsPartAttributes, tabsPartnerOf, tabsRemovalRefusal, tabsRootAttributes, tabsScope, tabsScopeFor, tabsToContent, tabsToManual, tabsTriggers, walkComposite, wantedSliderParts, writeLayerStyles, writeProp, writeStyles };
1427
+ export type { AccordionAutoBinds, AccordionBehaviour, AccordionDomIds, AccordionItemState, AccordionOptions, AccordionRuntimeOptions, AccordionScope, AccordionWords, BaselineStyles, CardEditOptions, CardLayoutResult, CardLayoutState, CardOptions, CardPartChange, CardWords, CarouselA11yOptions, CarouselOptions, CarouselQuote, CarouselSwiper, CompositeBinding, CompositeKindRoles, CompositeLayer, CompositeNode, CompositeNodeFactory, CompositeNodeSpec, CompositeRoleSpec, CompositeRuntime, CompositeTrait, ContentFieldLike, DisclosureOptions, DisclosureWords, DomAttributes, ExclusiveCompositeKind, ExclusiveKindRoles, ExclusiveRuntimeOptions, LegacySliderLook, LightboxOptions, PillOptions, RepeatSource, SliderPartsChange, SliderWords, TabPair, TabWords, TabsAutoBinds, TabsBehaviour, TabsItemState, TabsOptions, TabsScope, ToggleCompositeKind };