@eui/ecl 22.0.0-alpha.51 → 22.0.0-alpha.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n-ecl/bg.json +6 -2
- package/assets/i18n-ecl/cs.json +6 -2
- package/assets/i18n-ecl/da.json +6 -2
- package/assets/i18n-ecl/de.json +6 -2
- package/assets/i18n-ecl/el.json +6 -2
- package/assets/i18n-ecl/en.json +6 -2
- package/assets/i18n-ecl/es.json +6 -2
- package/assets/i18n-ecl/et.json +6 -2
- package/assets/i18n-ecl/fi.json +6 -2
- package/assets/i18n-ecl/fr.json +6 -2
- package/assets/i18n-ecl/ga.json +6 -2
- package/assets/i18n-ecl/hr.json +6 -2
- package/assets/i18n-ecl/hu.json +6 -2
- package/assets/i18n-ecl/it.json +6 -2
- package/assets/i18n-ecl/lt.json +6 -2
- package/assets/i18n-ecl/lv.json +6 -2
- package/assets/i18n-ecl/mt.json +6 -2
- package/assets/i18n-ecl/nl.json +6 -2
- package/assets/i18n-ecl/pl.json +6 -2
- package/assets/i18n-ecl/pt.json +6 -2
- package/assets/i18n-ecl/ro.json +6 -2
- package/assets/i18n-ecl/sk.json +6 -2
- package/assets/i18n-ecl/sl.json +6 -2
- package/assets/i18n-ecl/sv.json +6 -2
- package/components/ecl-slider/package.json +4 -0
- package/docs/changelog.html +29 -0
- package/docs/components/EclAccordionSummaryComponent.html +1 -1
- package/docs/components/EclAddToCalendarComponent.html +1 -1
- package/docs/components/EclAnimatedNumbersComponent.html +1 -1
- package/docs/components/EclAnimatedNumbersItemComponent.html +1 -1
- package/docs/components/EclAppComponent.html +1 -1
- package/docs/components/EclBannerComponent.html +1 -1
- package/docs/components/EclBlockquoteComponent.html +1 -1
- package/docs/components/EclBreadcrumbComponent.html +1 -1
- package/docs/components/EclBreadcrumbSegmentComponent.html +1 -1
- package/docs/components/EclButtonComponent.html +1 -1
- package/docs/components/EclCardBodyComponent.html +1 -1
- package/docs/components/EclCardComponent.html +1 -1
- package/docs/components/EclCarouselComponent.html +182 -898
- package/docs/components/EclCarouselItemComponent.html +32 -1
- package/docs/components/EclCategoryFilterComponent.html +1 -1
- package/docs/components/EclCategoryFilterItemComponent.html +1 -1
- package/docs/components/EclCategoryFilterListComponent.html +1 -1
- package/docs/components/EclCheckboxHelpComponent.html +1 -1
- package/docs/components/EclCheckboxLabelComponent.html +1 -1
- package/docs/components/EclContentBlockComponent.html +1 -1
- package/docs/components/EclContentItemComponent.html +1 -1
- package/docs/components/EclDateBlockComponent.html +1 -1
- package/docs/components/EclDescriptionListDefinitionComponent.html +1 -1
- package/docs/components/EclExpandableComponent.html +1 -1
- package/docs/components/EclFactFiguresComponent.html +1 -1
- package/docs/components/EclFactFiguresItemComponent.html +1 -1
- package/docs/components/EclFactFiguresViewAllComponent.html +1 -1
- package/docs/components/EclFeaturedComponent.html +1 -1
- package/docs/components/EclFeaturedItemComponent.html +1 -1
- package/docs/components/EclFeaturedItemDescriptionComponent.html +1 -1
- package/docs/components/EclFileComponent.html +1 -1
- package/docs/components/EclFileItemComponent.html +1 -1
- package/docs/components/EclFileItemsComponent.html +1 -1
- package/docs/components/EclFileListsComponent.html +1 -1
- package/docs/components/EclFormGroupComponent.html +1 -1
- package/docs/components/EclFormLabelComponent.html +1 -1
- package/docs/components/EclGalleryComponent.html +1 -1
- package/docs/components/EclGalleryFooterComponent.html +1 -1
- package/docs/components/EclGalleryItemComponent.html +1 -1
- package/docs/components/EclHighlightBoxComponent.html +1 -1
- package/docs/components/EclHighlightedSearchComponent.html +1 -1
- package/docs/components/EclIconComponent.html +1 -10
- package/docs/components/EclIndicatorComponent.html +1 -1
- package/docs/components/EclInpageNavigationComponent.html +1 -1
- package/docs/components/EclInpageNavigationItemComponent.html +1 -1
- package/docs/components/EclLayoutWrapperComponent.html +1 -1
- package/docs/components/EclListIllustrationComponent.html +1 -1
- package/docs/components/EclListIllustrationItemComponent.html +1 -1
- package/docs/components/EclLoadingIndicatorComponent.html +1 -1
- package/docs/components/EclMediaContainerComponent.html +1 -1
- package/docs/components/EclMegaMenuComponent.html +1 -1
- package/docs/components/EclMegaMenuFeaturedComponent.html +1 -1
- package/docs/components/EclMegaMenuInfoComponent.html +1 -1
- package/docs/components/EclMegaMenuItemComponent.html +1 -1
- package/docs/components/EclMegaMenuSubitemComponent.html +1 -1
- package/docs/components/EclMenuComponent.html +1 -1
- package/docs/components/EclMenuItemComponent.html +1 -1
- package/docs/components/EclMenuMegaComponent.html +1 -1
- package/docs/components/EclMenuMegaItemComponent.html +1 -1
- package/docs/components/EclModalBodyComponent.html +1 -1
- package/docs/components/EclModalComponent.html +1 -1
- package/docs/components/EclModalFooterComponent.html +1 -1
- package/docs/components/EclModalHeaderComponent.html +1 -1
- package/docs/components/EclMultiselectComponent.html +1 -1
- package/docs/components/EclMultiselectDropdownComponent.html +1 -1
- package/docs/components/EclMultiselectInputComponent.html +1 -1
- package/docs/components/EclMultiselectOptgroupComponent.html +1 -1
- package/docs/components/EclMultiselectOptionComponent.html +1 -1
- package/docs/components/EclNavigationListComponent.html +1 -1
- package/docs/components/EclNavigationListItemComponent.html +1 -1
- package/docs/components/EclNewsTickerComponent.html +1 -1
- package/docs/components/EclNewsTickerItemComponent.html +1 -1
- package/docs/components/EclNotificationComponent.html +1 -1
- package/docs/components/EclPageHeaderComponent.html +1 -1
- package/docs/components/EclPageHeaderDescriptionContainerComponent.html +1 -1
- package/docs/components/EclPageHeaderExpandableComponent.html +1 -1
- package/docs/components/EclPageHeaderSectionComponent.html +1 -1
- package/docs/components/EclPageHeaderSectionInfoComponent.html +1 -1
- package/docs/components/EclPageSummaryComponent.html +1 -1
- package/docs/components/EclPaginationComponent.html +1 -1
- package/docs/components/EclPaginationItemComponent.html +1 -1
- package/docs/components/EclPopoverComponent.html +1 -1
- package/docs/components/EclQuizCardComponent.html +113 -44
- package/docs/components/EclQuizComponent.html +4 -9
- package/docs/components/EclRadioLabelComponent.html +1 -1
- package/docs/components/EclRangeBubbleComponent.html +1 -1
- package/docs/components/EclRangeValueComponent.html +1 -1
- package/docs/components/EclRatingFieldComponent.html +1 -1
- package/docs/components/EclSearchFormComponent.html +1 -1
- package/docs/components/EclSelectContainerComponent.html +1 -1
- package/docs/components/EclSiteFooterComponent.html +1 -1
- package/docs/components/EclSiteFooterCoownerComponent.html +1 -1
- package/docs/components/EclSiteFooterCoreComponent.html +1 -1
- package/docs/components/EclSiteFooterFeedbackComponent.html +1 -1
- package/docs/components/EclSiteFooterFixedContentEUComponent.html +1 -1
- package/docs/components/EclSiteFooterRowCommonComponent.html +1 -1
- package/docs/components/EclSiteHeaderActionComponent.html +1 -1
- package/docs/components/EclSiteHeaderBannerTopComponent.html +1 -1
- package/docs/components/EclSiteHeaderComponent.html +1 -1
- package/docs/components/EclSiteHeaderCustomActionComponent.html +1 -1
- package/docs/components/EclSiteHeaderEnvironmentComponent.html +1 -1
- package/docs/components/EclSiteHeaderLanguageComponent.html +1 -1
- package/docs/components/EclSiteHeaderLanguagePopoverComponent.html +1 -1
- package/docs/components/EclSiteHeaderLoginComponent.html +1 -1
- package/docs/components/EclSiteHeaderNotificationComponent.html +1 -1
- package/docs/components/EclSiteHeaderSearchComponent.html +1 -1
- package/docs/components/EclSliderPagerComponent.html +1159 -0
- package/docs/components/EclSloganTickerComponent.html +1 -1
- package/docs/components/EclSocialMediaFollowComponent.html +1 -1
- package/docs/components/EclSocialMediaFollowItemComponent.html +1 -1
- package/docs/components/EclSplashPageComponent.html +1 -1
- package/docs/components/EclSplashPageLanguageCategoryComponent.html +1 -1
- package/docs/components/EclSplashPageLanguageContainerComponent.html +1 -1
- package/docs/components/EclSplashPageLanguageLinkComponent.html +1 -1
- package/docs/components/EclSpotlightComponent.html +1 -1
- package/docs/components/EclSpotlightLinkComponent.html +1 -1
- package/docs/components/EclStickyContainerComponent.html +1 -1
- package/docs/components/EclStoryCardComponent.html +4 -4
- package/docs/components/EclStoryCardGridDetailsComponent.html +57 -2
- package/docs/components/EclStoryCardItemComponent.html +77 -2
- package/docs/components/EclTabComponent.html +1 -1
- package/docs/components/EclTabLabelComponent.html +1 -1
- package/docs/components/EclTableSortButtonComponent.html +1 -1
- package/docs/components/EclTabsComponent.html +1 -1
- package/docs/components/EclTagComponent.html +1 -1
- package/docs/components/EclTextMediaComponent.html +1 -1
- package/docs/components/EclTimelineComponent.html +1 -1
- package/docs/components/EclTimelineItemComponent.html +1 -1
- package/docs/components/EclTimelineItemTogglerComponent.html +1 -1
- package/docs/js/menu-wc.js +3 -0
- package/docs/js/search/search_index.js +2 -2
- package/docs/json/EclCarouselComponent.md +8 -4
- package/docs/json/EclCarouselItemComponent.md +1 -0
- package/docs/json/EclQuizCardComponent.md +6 -3
- package/docs/json/EclSliderPagerComponent.md +55 -0
- package/docs/json/EclStoryCardGridDetailsComponent.md +1 -0
- package/docs/json/EclStoryCardItemComponent.md +1 -0
- package/docs/json/documentation.json +1889 -565
- package/docs/llms.txt +67 -32
- package/docs/miscellaneous/variables.html +112 -0
- package/docs/overview.html +1 -1
- package/docs/properties.html +1 -1
- package/fesm2022/eui-ecl-components-ecl-carousel.mjs +405 -407
- package/fesm2022/eui-ecl-components-ecl-carousel.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-menu.mjs +15 -15
- package/fesm2022/eui-ecl-components-ecl-menu.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-quiz.mjs +93 -55
- package/fesm2022/eui-ecl-components-ecl-quiz.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-slider.mjs +187 -0
- package/fesm2022/eui-ecl-components-ecl-slider.mjs.map +1 -0
- package/fesm2022/eui-ecl-components-ecl-story-card.mjs +96 -18
- package/fesm2022/eui-ecl-components-ecl-story-card.mjs.map +1 -1
- package/package.json +18 -12
- package/types/eui-ecl-components-ecl-carousel.d.ts +234 -202
- package/types/eui-ecl-components-ecl-carousel.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-menu.d.ts +0 -2
- package/types/eui-ecl-components-ecl-menu.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-quiz.d.ts +94 -57
- package/types/eui-ecl-components-ecl-quiz.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-slider.d.ts +118 -0
- package/types/eui-ecl-components-ecl-slider.d.ts.map +1 -0
- package/types/eui-ecl-components-ecl-story-card.d.ts +78 -48
- package/types/eui-ecl-components-ecl-story-card.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-ecl-components-ecl-quiz.mjs","sources":["../../components/ecl-quiz/ecl-quiz-card.component.ts","../../components/ecl-quiz/ecl-quiz-card.component.html","../../components/ecl-quiz/ecl-quiz.component.ts","../../components/ecl-quiz/ecl-quiz.component.html","../../components/ecl-quiz/index.ts","../../components/ecl-quiz/eui-ecl-components-ecl-quiz.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { EclIconComponent } from '@eui/ecl/components/ecl-icon';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nexport interface EclQuizCardFlipEvent {\n flipped: boolean;\n selectedOptionIndex?: number;\n isCorrect?: boolean;\n}\n\n/**\n * Structural directive that marks an `<ol>` element as the ECL quiz option list.\n * Applies the `ecl-quiz__list` class to the host and is consumed by `EclQuizComponent`\n * to query its child `EclQuizCardComponent` items.\n * Applied via `ol[eclQuizList]`.\n */\n@Directive({\n selector: 'ol[eclQuizList]',\n host: {\n 'class': 'ecl-quiz__list',\n },\n})\nexport class EclQuizListDirective {}\n\n/**\n * ECL Quiz Card component – represents a single card in the quiz.\n *\n * For the 'reveal' variant, the entire card is clickable to flip.\n * For the 'poll' variant, individual options trigger the flip.\n */\n@Component({\n selector: 'li[eclQuizCard]',\n host: {\n '[attr.id]': 'id()',\n '[attr.aria-labelledby]': 'questionId()',\n '[class]': 'cssClasses()',\n '[attr.tabindex]': 'tabIndex()',\n '[style.transform]': 'styleTransform',\n '(click)': 'onClick()',\n '(keydown)': 'onKeydown($event)',\n },\n templateUrl: './ecl-quiz-card.component.html',\n imports: [EclIconComponent, TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclQuizCardComponent extends ECLBaseDirective {\n\n /**\n * Unique identifier for the card, used for accessibility attributes.\n * If not provided, a unique ID is generated automatically.\n */\n id = input<string>(`ecl-quiz-card-${crypto.randomUUID()}`);\n\n /**\n * The question text displayed on the front of the card.\n */\n question = input<string>('');\n\n /**\n * The answer text displayed on the back of the card.\n * Used in 'reveal' variant or as explanation in 'poll' variant.\n */\n answer = input<string>('');\n\n /**\n * The answer title (e.g. \"The correct answer is A.\") for poll variant.\n */\n answerTitle = input<string>('');\n\n /**\n * Category label displayed in the card header (poll variant).\n */\n category = input<string>('');\n\n /**\n * Icon name for the card header.\n * Defaults to 'sparkle' for reveal, 'question' for poll.\n */\n icon = input<string>('');\n\n /**\n * Icon size for the card header.\n */\n iconSize = input<'xs' | 's' | 'm' | 'l' | 'xl' | '2xl'>('xl');\n\n /**\n * The variant of the quiz, set by the parent EclQuizComponent.\n */\n readonly variant = signal<'poll' | 'reveal'>('reveal');\n\n /**\n * Options for the poll variant. Each option has text and a match flag.\n */\n options = input<{ text: string; match: boolean }[]>([]);\n\n /**\n * Whether this is the first card in the quiz.\n * Set by the parent EclQuizComponent to render skip-instructions only once.\n */\n isFirstCard = signal(false);\n\n /**\n * Whether all cards in the quiz have been flipped.\n * Set by the parent EclQuizComponent to restore tabindex on category spans.\n */\n allCardsFlipped = signal(false);\n\n /** Whether the card is currently flipped (showing back). */\n isFlipped = signal(false);\n\n /**\n * Emitted when the card is flipped.\n */\n readonly cardFlip = output<EclQuizCardFlipEvent>();\n\n protected questionId = computed(() => `${this.id()}-question`);\n protected answerId = computed(() => `${this.id()}-answer`);\n\n /** Whether the category span currently has focus (for tabindex management). */\n protected categoryHasFocus = signal(false);\n\n /** Index of the selected option (poll variant). */\n protected selectedOptionIndex = signal<number | null>(null);\n\n /** Whether the selected option is correct (poll variant). */\n protected isCorrect = signal<boolean | null>(null);\n protected readonly styleTransform = 'translate3d(0px, 0px, 0px)';\n\n private frontElementRef = viewChild<ElementRef>('frontElement');\n private backElementRef = viewChild<ElementRef>('backElement');\n private questionElementRef = viewChild<ElementRef>('questionElement');\n private answerElementRef = viewChild<ElementRef>('answerElement');\n private contentElementRef = viewChild<ElementRef>('contentElement');\n private categorySuccessRef = viewChild<ElementRef>('categorySuccess');\n private categoryErrorRef = viewChild<ElementRef>('categoryError');\n\n /** Get the native front element for height calculations. */\n getFrontElement(): HTMLElement | null {\n return this.frontElementRef()?.nativeElement ?? null;\n }\n\n /** Get the native back element for height calculations. */\n getBackElement(): HTMLElement | null {\n return this.backElementRef()?.nativeElement ?? null;\n }\n\n /** Get the native question element for height calculations. */\n getQuestionElement(): HTMLElement | null {\n return this.questionElementRef()?.nativeElement ?? null;\n }\n\n /** Get the native answer element for height calculations. */\n getAnswerElement(): HTMLElement | null {\n return this.answerElementRef()?.nativeElement ?? null;\n }\n\n /** Get the native content element for height calculations. */\n getContentElement(): HTMLElement | null {\n return this.contentElementRef()?.nativeElement ?? null;\n }\n\n /** Get all radio inputs in this card. */\n getRadioInputs(): HTMLInputElement[] {\n const el = this.frontElementRef()?.nativeElement;\n if (!el) {\n return [];\n }\n return Array.from(el.querySelectorAll('input[type=\"radio\"]'));\n }\n\n /** Get the first radio input in this card. */\n getFirstRadioInput(): HTMLInputElement | null {\n return this.getRadioInputs()[0] ?? null;\n }\n\n /** Get the last radio input in this card. */\n getLastRadioInput(): HTMLInputElement | null {\n const inputs = this.getRadioInputs();\n return inputs[inputs.length - 1] ?? null;\n }\n\n protected readonly cssClasses = computed<string>(() =>\n [\n super.getCssClasses('ecl-quiz-card'),\n this.isFlipped() ? 'ecl-quiz-card__flipped' : '',\n ]\n .join(' ')\n .trim());\n\n protected readonly tabIndex = computed<number | null>(() => (this.variant() === 'reveal' ? 0 : null));\n\n /** Get the resolved icon name based on variant. */\n protected getIconName(): string {\n if (this.icon()) {\n return this.icon();\n }\n return this.variant() === 'poll' ? 'question' : 'sparkle';\n }\n\n /** Get the resolved icon size. */\n protected getIconSize(): string {\n return this.iconSize() || (this.variant() === 'poll' ? '2xl' : 'xl');\n }\n\n /**\n * Handle click on the card itself (reveal variant).\n */\n protected onClick(): void {\n if (this.variant() === 'reveal') {\n this.flipCard();\n }\n }\n\n /**\n * Handle keyboard events (Enter/Space to flip for reveal variant).\n */\n protected onKeydown(event: KeyboardEvent): void {\n if (this.variant() === 'reveal' && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n this.flipCard();\n }\n }\n\n /**\n * Handle option click (poll variant).\n */\n protected onOptionClick(optionIndex: number): void {\n if (this.isFlipped()) {\n return;\n }\n const optionsList = this.options();\n this.selectedOptionIndex.set(optionIndex);\n this.isCorrect.set(optionsList[optionIndex]?.match ?? false);\n this.flipCard();\n this.focusCategoryAfterFlip();\n }\n\n /**\n * Handle keyboard on option (poll variant).\n */\n protected onOptionKeydown(event: KeyboardEvent, optionIndex: number): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.onOptionClick(optionIndex);\n }\n }\n\n /**\n * Handle blur on the category span. Sets tabindex to -1 so it leaves the tab order.\n */\n protected onCategoryBlur(): void {\n this.categoryHasFocus.set(false);\n }\n\n /**\n * Flip the card between front and back.\n */\n private flipCard(): void {\n this.isFlipped.update(v => !v);\n const event: EclQuizCardFlipEvent = { flipped: this.isFlipped() };\n if (this.variant() === 'poll') {\n event.selectedOptionIndex = this.selectedOptionIndex();\n event.isCorrect = this.isCorrect();\n }\n this.cardFlip.emit(event);\n }\n\n /**\n * Focus the correct/incorrect category span after the card flips in poll variant.\n * Uses requestAnimationFrame to ensure the DOM has updated (inert removed from back face).\n */\n private focusCategoryAfterFlip(): void {\n this.categoryHasFocus.set(true);\n requestAnimationFrame(() => {\n const ref = this.isCorrect() ? this.categorySuccessRef() : this.categoryErrorRef();\n if (ref?.nativeElement) {\n ref.nativeElement.focus();\n }\n });\n }\n}\n","<article class=\"ecl-quiz-card__content\" #contentElement>\n <!-- Front face -->\n <div class=\"ecl-quiz-card__front\" #frontElement [hidden]=\"isFlipped()\" [inert]=\"isFlipped()\">\n <div class=\"ecl-quiz-card__header\">\n <div class=\"ecl-quiz-card__icon\">\n <ecl-icon [icon]=\"getIconName()\" [size]=\"getIconSize()\" iconSet=\"phosphor\">\n </ecl-icon>\n </div>\n @if (category()) {\n <span class=\"ecl-quiz-card__category\">{{ category() }}</span>\n }\n </div>\n\n @if (variant() === 'reveal') {\n <div class=\"ecl-quiz-card__question\" [id]=\"questionId()\" #questionElement>{{ question() }}</div>\n <!-- Reveal variant: flip label -->\n <div class=\"ecl-quiz-card__flip\">\n {{ 'ecl.quiz.REVEAL-ANSWER' | translate }}\n <ecl-icon iconSet=\"phosphor\" icon=\"arrow-clockwise\" size=\"m\"></ecl-icon>\n </div>\n } @else {\n <!-- Poll variant: options -->\n <fieldset [attr.aria-describedby]=\"isFirstCard() ? id() + '-skip-instructions' : null\">\n <legend class=\"ecl-quiz-card__question\" [id]=\"questionId()\" #questionElement>{{ question() }}</legend>\n <ol class=\"ecl-quiz-card__options\" type=\"A\">\n @for (option of options(); let i = $index; track i) {\n <li class=\"ecl-quiz-card__option\" [attr.data-match]=\"option.match\" (mouseup)=\"onOptionClick(i)\">\n <label class=\"ecl-quiz-card__label\">\n <input type=\"radio\" [name]=\"id() + '-options'\" [attr.data-match]=\"option.match\"\n [attr.tabindex]=\"isFlipped() ? -1 : null\" (keydown)=\"onOptionKeydown($event, i)\">\n {{ option.text }}</label>\n @if (i === 0 && isFirstCard()) {\n <span class=\"ecl-quiz__skip\" [id]=\"id() + '-skip-instructions'\">{{ 'ecl.quiz.SKIP-INSTRUCTIONS' |\n translate }}</span>\n }\n </li>\n }\n </ol>\n </fieldset>\n }\n </div>\n\n <!-- Back face -->\n <div class=\"ecl-quiz-card__back\" #backElement [hidden]=\"!isFlipped()\" [inert]=\"!isFlipped()\" style\n [class.ecl-quiz-card--correct]=\"variant() === 'poll' && isCorrect() === true\">\n <div class=\"ecl-quiz-card__header\">\n @if (variant() === 'reveal') {\n <div class=\"ecl-quiz-card__icon\">\n <ecl-icon [icon]=\"getIconName()\" [size]=\"getIconSize()\" iconSet=\"phosphor\">\n </ecl-icon>\n </div>\n } @else {\n <!-- Poll variant: success/error icons and category labels -->\n <div class=\"ecl-quiz-card__icon\">\n <ecl-icon icon=\"check-circle\" iconSet=\"phosphor\" size=\"2xl\" class=\"ecl-quiz-card__icon--success\">\n </ecl-icon>\n <ecl-icon icon=\"x-circle\" size=\"2xl\" iconSet=\"phosphor\" class=\"ecl-quiz-card__icon--error\">\n </ecl-icon>\n </div>\n <span #categorySuccess class=\"ecl-quiz-card__category ecl-quiz-card__category--success\"\n [attr.tabindex]=\"(allCardsFlipped() || categoryHasFocus()) && isCorrect() === true ? 0 : -1\"\n (blur)=\"onCategoryBlur()\">{{\n 'ecl.quiz.CORRECT' | translate }}</span>\n <span #categoryError class=\"ecl-quiz-card__category ecl-quiz-card__category--error\"\n [attr.tabindex]=\"(allCardsFlipped() || categoryHasFocus()) && isCorrect() === false ? 0 : -1\"\n (blur)=\"onCategoryBlur()\">{{\n 'ecl.quiz.INCORRECT' | translate }}</span>\n <span class=\"ecl-quiz-card__sr-status\" role=\"status\" aria-atomic=\"true\">{{ isFlipped() ? (isCorrect() ===\n true ? ('ecl.quiz.CORRECT' | translate) : ('ecl.quiz.INCORRECT' | translate)) : '' }}</span>\n }\n </div>\n\n <div class=\"ecl-quiz-card__answer\" [id]=\"answerId()\" #answerElement>\n @if (answerTitle()) {\n <div class=\"ecl-quiz-card__answer-title\">{{ answerTitle() }}</div>\n }\n {{ answer() }}\n </div>\n\n @if (variant() === 'reveal') {\n <!-- Reveal variant: go back label -->\n <div class=\"ecl-quiz-card__flip\">\n {{ 'ecl.quiz.FLIP-BACK' | translate }}\n <ecl-icon icon=\"arrow-clockwise\" size=\"m\" iconSet=\"phosphor\"></ecl-icon>\n </div>\n } @else {\n <!-- Poll variant: options list on back (showing selected state) -->\n <ol class=\"ecl-quiz-card__options\" type=\"A\">\n @for (option of options(); let i = $index; track i) {\n <li class=\"ecl-quiz-card__option\" [class.ecl-quiz-card__option--selected]=\"selectedOptionIndex() === i\"\n [attr.data-match]=\"option.match\">\n @if (selectedOptionIndex() === i) {\n @if (!option.match) {\n <span class=\"ecl-quiz-card__option-assistive-label\">{{ 'ecl.quiz.YOUR-INCORRECT-ANSWER' | translate }}</span>\n }\n @if (option.match) {\n <span class=\"ecl-quiz-card__option-assistive-label\">{{ 'ecl.quiz.YOUR-CORRECT-ANSWER' | translate }}</span>\n }\n } @else if (option.match) {\n <span class=\"ecl-quiz-card__option-assistive-label\">{{ 'ecl.quiz.CORRECT-ANSWER' | translate }}</span>\n }\n {{ option.text }}\n @if (selectedOptionIndex() === i && !option.match) {\n <span class=\"ecl-quiz-card__option-icon\">\n <ecl-icon icon=\"x-circle\" size=\"s\" iconSet=\"phosphor\"\n class=\"ecl-quiz-card__option-icon--error\"></ecl-icon>\n </span>\n }\n @if (option.match) {\n <span class=\"ecl-quiz-card__option-icon\">\n <ecl-icon icon=\"check-circle\" size=\"s\" iconSet=\"phosphor\"\n class=\"ecl-quiz-card__option-icon--success\"></ecl-icon>\n </span>\n }\n </li>\n }\n </ol>\n }\n </div>\n</article>","import {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ContentChildren,\n ElementRef,\n forwardRef,\n inject,\n input,\n OnDestroy,\n QueryList,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { EclIconComponent } from '@eui/ecl/components/ecl-icon';\nimport { ECLBaseDirective, EclRtlService } from '@eui/ecl/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { EmblaCarouselDirective } from 'embla-carousel-angular';\nimport { EmblaCarouselType, EmblaEventType } from 'embla-carousel';\nimport { Subject, takeUntil } from 'rxjs';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\nimport { EclQuizCardComponent } from './ecl-quiz-card.component';\n\n/**\n * An ECL quiz carousel component that renders a sequence of `li[eclQuizCard]` cards with navigation dots and previous/next buttons.\n * Uses Embla Carousel for slide animation, matching the ECL vanilla implementation.\n * Applied via `section[eclQuiz]`.\n *\n * - `variant` input: `'reveal'` (default, flip cards) | `'poll'` (multiple-choice); propagated to all child cards.\n * - `eclTitle` and `eclDescription`: heading and description text rendered above the carousel.\n * - `isFullWidth` (default `false`): expands the component to full container width.\n * - `hasBackground` (default `false`): adds a background fill behind the quiz.\n * - Cards are projected as `li[eclQuizCard]` children; wrap them in `ol[eclQuizList]` for semantic list structure.\n */\n@Component({\n selector: 'section[eclQuiz]',\n templateUrl: './ecl-quiz.component.html',\n host: {\n '[class]': 'cssClasses()',\n '(keydown)': 'onKeydown($event)',\n },\n imports: [\n TranslatePipe,\n EclIconComponent,\n EmblaCarouselDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclQuizComponent extends ECLBaseDirective implements AfterContentInit, AfterViewInit, OnDestroy {\n\n /** Quiz variant: 'reveal' for flip cards, 'poll' for multiple choice. */\n variant = input<'poll' | 'reveal'>('reveal');\n\n /** Title displayed in the quiz header. */\n eclTitle = input<string>('');\n\n /** Description displayed below the title. */\n eclDescription = input<string>('');\n\n isFullWidth = input(false, { transform: booleanAttribute });\n\n hasBackground = input(false, { transform: booleanAttribute });\n\n /** Embla carousel options matching ECL's configuration. */\n protected emblaOptions: { loop: boolean; align: 'start'; direction: 'ltr' | 'rtl' } = { loop: false, align: 'start', direction: 'ltr' };\n\n /** Subscribed Embla events. */\n protected subscribeToEvents: EmblaEventType[] = ['select', 'init', 'reInit'];\n\n /** Current snap index. */\n protected activeIndex = signal(0);\n\n /** Total number of snap points. */\n protected totalSnaps = signal(0);\n\n /** Counter text for mobile display. */\n protected counterText = signal('');\n\n /** Whether the previous button is disabled. */\n protected prevDisabled = signal(true);\n\n /** Whether the next button is disabled. */\n protected nextDisabled = signal(true);\n\n /** Whether navigation controls should be shown. */\n protected showControls = signal(false);\n\n @ContentChildren(forwardRef(() => EclQuizCardComponent), { descendants: true })\n private cards: QueryList<EclQuizCardComponent>;\n\n private emblaRef = viewChild(EmblaCarouselDirective);\n private dotButtons = viewChildren<ElementRef>('dotButton');\n\n private cd = inject(ChangeDetectorRef);\n private eclRtlService = inject(EclRtlService);\n private destroy$ = new Subject<void>();\n private emblaApi: EmblaCarouselType | undefined;\n\n protected readonly cssClasses = computed<string>(() =>\n [\n super.getCssClasses('ecl-quiz'),\n `ecl-quiz--${this.variant()}`,\n this.hasBackground() ? 'ecl-quiz--background' : '',\n this.isFullWidth() ? 'ecl-quiz--full-width' : '',\n ]\n .join(' ')\n .trim());\n\n /** Whether any snap point groups multiple slides. */\n protected hasGroupedSlides = signal(false);\n\n /** Total number of individual slides (cards). */\n protected totalSlides = signal(0);\n\n /** Number of visible slides per snap. */\n protected slidesPerSnap = signal(1);\n\n /** Returns the aria-label for a dot button at the given snap index. */\n protected getDotAriaLabel(dotIndex: number): { key: string; params: Record<string, number> } {\n const totalSlidesCount = this.totalSlides();\n const totalSnapsCount = this.totalSnaps();\n\n if (this.hasGroupedSlides()) {\n const visibleSlides = totalSlidesCount - (totalSnapsCount - 1);\n const start = dotIndex + 1;\n const end = Math.min(dotIndex + visibleSlides, totalSlidesCount);\n return {\n key: 'ecl.quiz.GO-TO-SLIDES',\n params: { start, end, total: totalSlidesCount },\n };\n }\n return {\n key: 'ecl.quiz.GO-TO-SLIDE',\n params: { current: dotIndex + 1, total: totalSlidesCount },\n };\n }\n\n /** Returns an array of indices for dot rendering. */\n protected getDotIndices(): number[] {\n return Array.from({ length: this.totalSnaps() }, (_, i) => i);\n }\n\n /** Called by the emblaChange event from the directive. */\n protected onEmblaChange(eventName: string): void {\n if (!this.emblaApi) {\n this.emblaApi = this.emblaRef()?.emblaApi;\n }\n if (!this.emblaApi) {\n return;\n }\n\n if (eventName === 'select' || eventName === 'init' || eventName === 'reInit') {\n this.syncState();\n }\n\n if (eventName === 'reInit') {\n this.checkHeight();\n }\n }\n\n /** Handle keyboard events. */\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.escapeSlider();\n return;\n }\n\n if (this.variant() === 'poll' && event.key === 'Tab') {\n this.handlePollTabNavigation(event);\n }\n }\n\n /** Navigate to the previous snap. */\n protected onPrevClick(): void {\n const embla = this.emblaRef();\n if (embla) {\n embla.scrollPrev();\n }\n }\n\n /** Navigate to the next snap. */\n protected onNextClick(): void {\n const embla = this.emblaRef();\n if (embla) {\n embla.scrollNext();\n }\n }\n\n /** Navigate to a specific snap index. */\n protected goTo(index: number): void {\n const embla = this.emblaRef();\n if (embla) {\n embla.scrollTo(index);\n }\n }\n\n ngAfterContentInit(): void {\n if (this.cards && this.cards.length > 1) {\n this.showControls.set(true);\n }\n this.propagateVariant();\n this.subscribeToCardFlips();\n this.cards.changes.subscribe(() => {\n this.propagateVariant();\n this.subscribeToCardFlips();\n });\n\n this.eclRtlService.currentRtlState$.pipe(takeUntil(this.destroy$)).subscribe((isRtl) => {\n const direction = isRtl ? 'rtl' : 'ltr';\n if (this.emblaOptions.direction !== direction) {\n this.emblaOptions = { ...this.emblaOptions, direction };\n this.cd.detectChanges();\n }\n });\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.initEmbla();\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /** Initialize Embla and wire up state syncing. */\n private initEmbla(): void {\n const embla = this.emblaRef();\n if (!embla) {\n return;\n }\n\n this.emblaApi = embla.emblaApi;\n\n if (!this.emblaApi) {\n return;\n }\n\n this.syncState();\n this.checkHeight();\n this.cd.detectChanges();\n }\n\n /** Sync component state from Embla API. */\n private syncState(): void {\n if (!this.emblaApi) {\n return;\n }\n\n // Array of scroll-progress values (0 to 1), one per snap point.\n // Its length equals the number of positions the carousel can settle on (i.e. total dots).\n const snapList = this.emblaApi.scrollSnapList();\n const selectedSnap = this.emblaApi.selectedScrollSnap();\n const canScrollPrev = this.emblaApi.canScrollPrev();\n const canScrollNext = this.emblaApi.canScrollNext();\n // Number of individual slide elements in the carousel\n const slideCount = this.emblaApi.slideNodes().length;\n\n this.totalSnaps.set(snapList.length);\n this.activeIndex.set(selectedSnap);\n this.prevDisabled.set(!canScrollPrev);\n this.nextDisabled.set(!canScrollNext);\n this.showControls.set(canScrollPrev || canScrollNext);\n this.totalSlides.set(slideCount);\n this.hasGroupedSlides.set(slideCount > snapList.length);\n this.slidesPerSnap.set(snapList.length > 0 ? slideCount - (snapList.length - 1) : 1);\n\n this.updateCounter();\n }\n\n /** Update the counter text (mobile). */\n private updateCounter(): void {\n const total = this.totalSnaps();\n const current = this.activeIndex() + 1;\n this.counterText.set(`${current} / ${total}`);\n }\n\n /** Move focus to the last dot button when Escape is pressed. */\n private escapeSlider(): void {\n const dots = this.dotButtons();\n if (dots && dots.length > 0) {\n const lastDot = dots[dots.length - 1];\n lastDot.nativeElement.focus();\n }\n }\n\n /** Subscribe to cardFlip events on all cards to detect when all are flipped. */\n private subscribeToCardFlips(): void {\n if (this.variant() !== 'poll') {\n return;\n }\n this.cards?.forEach(card => {\n outputToObservable(card.cardFlip).pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.checkAllCardsFlipped();\n });\n });\n }\n\n /** Check if all cards are flipped and propagate the state. */\n private checkAllCardsFlipped(): void {\n if (!this.cards || this.variant() !== 'poll') {\n return;\n }\n const allFlipped = this.cards.toArray().every(card => card.isFlipped());\n if (allFlipped) {\n this.cards.forEach(card => {\n card.allCardsFlipped.set(true);\n });\n }\n }\n\n /**\n * Equalizes the height of all cards based on the tallest content.\n * Mirrors the ECL vanilla `checkHeight()` logic.\n */\n private checkHeight(): void {\n if (!this.cards || this.cards.length === 0) {\n return;\n }\n\n let maxTextHeight = 0;\n let maxHeight = 0;\n\n const cardsArray = this.cards.toArray();\n\n // First pass: find the tallest question/answer text\n cardsArray.forEach((card) => {\n const frontEl = card.getFrontElement();\n const backEl = card.getBackElement();\n const questionEl = card.getQuestionElement();\n const answerEl = card.getAnswerElement();\n\n if (!frontEl || !backEl || !questionEl || !answerEl) {\n return;\n }\n\n frontEl.style.position = 'static';\n backEl.style.position = 'static';\n\n questionEl.style.minHeight = '';\n answerEl.style.minHeight = '';\n\n const heightQuestion = questionEl.scrollHeight;\n const heightAnswer = answerEl.scrollHeight;\n const heightText = Math.max(heightQuestion, heightAnswer);\n\n if (heightText > maxTextHeight) {\n maxTextHeight = heightText;\n }\n\n frontEl.style.position = '';\n backEl.style.position = '';\n });\n\n // Second pass: apply min-height and find tallest card\n cardsArray.forEach((card) => {\n const frontEl = card.getFrontElement();\n const backEl = card.getBackElement();\n const questionEl = card.getQuestionElement();\n const answerEl = card.getAnswerElement();\n const contentEl = card.getContentElement();\n\n if (!frontEl || !backEl || !questionEl || !answerEl || !contentEl) {\n return;\n }\n\n frontEl.style.position = 'static';\n backEl.style.position = 'static';\n contentEl.style.height = '';\n\n questionEl.style.minHeight = maxTextHeight + 'px';\n answerEl.style.minHeight = maxTextHeight + 'px';\n\n const heightFront = frontEl.scrollHeight;\n const heightBack = backEl.scrollHeight;\n const height = Math.max(heightFront, heightBack);\n\n const minHeight = parseFloat(getComputedStyle(frontEl).getPropertyValue('min-height')) || 345;\n\n if (height > minHeight && height > maxHeight) {\n maxHeight = height;\n }\n\n frontEl.style.position = '';\n backEl.style.position = '';\n });\n\n // Third pass: apply uniform height\n if (maxHeight > 0) {\n cardsArray.forEach((card) => {\n const contentEl = card.getContentElement();\n if (contentEl) {\n contentEl.style.height = maxHeight + 'px';\n }\n });\n }\n }\n\n /**\n * Handle Tab/Shift+Tab navigation between unflipped poll cards.\n * Tab from a radio input jumps to the first radio of the next unflipped card.\n * Shift+Tab from a radio input jumps to the last radio of the previous unflipped card.\n * If no unflipped card is found in that direction, native Tab takes over.\n */\n private handlePollTabNavigation(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n\n if (!(target instanceof HTMLInputElement) || target.type !== 'radio') {\n return;\n }\n\n const cardsArray = this.cards.toArray();\n\n const currentCardIndex = cardsArray.findIndex(card => {\n const radios = card.getRadioInputs();\n return radios.includes(target);\n });\n\n if (currentCardIndex === -1) {\n return;\n }\n\n if (event.shiftKey) {\n for (let i = currentCardIndex - 1; i >= 0; i--) {\n if (!cardsArray[i].isFlipped()) {\n event.preventDefault();\n this.goTo(i);\n const lastInput = cardsArray[i].getLastRadioInput();\n if (lastInput) {\n lastInput.focus();\n }\n return;\n }\n }\n } else {\n for (let i = currentCardIndex + 1; i < cardsArray.length; i++) {\n if (!cardsArray[i].isFlipped()) {\n event.preventDefault();\n this.goTo(i);\n const firstInput = cardsArray[i].getFirstRadioInput();\n if (firstInput) {\n firstInput.focus();\n }\n return;\n }\n }\n }\n }\n\n /** Propagate the variant to all child cards. */\n private propagateVariant(): void {\n const v = this.variant();\n this.cards?.forEach((card, index) => {\n card.variant.set(v);\n card.isFirstCard.set(index === 0);\n });\n }\n}\n","@if (eclTitle() || eclDescription()) {\n<div class=\"ecl-quiz__header\">\n @if (eclTitle()) {\n <div class=\"ecl-quiz__title\">{{ eclTitle() }}</div>\n }\n @if (eclDescription()) {\n <div class=\"ecl-quiz__description\">{{ eclDescription() }}</div>\n }\n</div>\n}\n\n<div class=\"ecl-quiz__viewport\" data-ecl-quiz-slider\n role=\"region\"\n aria-label=\"Quiz slider\"\n aria-roledescription=\"carousel\"\n emblaCarousel\n [options]=\"emblaOptions\"\n [subscribeToEvents]=\"subscribeToEvents\"\n (emblaChange)=\"onEmblaChange($event)\">\n \n <ng-content></ng-content>\n</div>\n\n@if (showControls()) {\n<div class=\"ecl-quiz__pager\">\n <button\n class=\"ecl-quiz__prev\"\n [disabled]=\"prevDisabled()\"\n (click)=\"onPrevClick()\"\n [attr.aria-label]=\"'ecl.quiz.SHOW-PREV-SLIDE' | translate\">\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-270\"></ecl-icon>\n <span class=\"ecl-quiz__prev-label\">\n {{ 'ecl.quiz.PREVIOUS' | translate }}\n </span>\n </button>\n\n <div class=\"ecl-quiz__dots\">\n @for (dotIndex of getDotIndices(); track dotIndex) {\n <button\n #dotButton\n class=\"ecl-quiz__dot\"\n [class.ecl-quiz__dot--active]=\"dotIndex === activeIndex()\"\n [class.is-prev]=\"dotIndex === activeIndex() - 1\"\n [attr.aria-label]=\"getDotAriaLabel(dotIndex).key | translate: getDotAriaLabel(dotIndex).params\"\n (click)=\"goTo(dotIndex)\">\n </button>\n }\n </div>\n\n <button\n class=\"ecl-quiz__next\"\n [disabled]=\"nextDisabled()\"\n (click)=\"onNextClick()\"\n [attr.aria-label]=\"'ecl.quiz.SHOW-NEXT-SLIDE' | translate\">\n <span class=\"ecl-quiz__next-label\">\n {{ 'ecl.quiz.NEXT' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"xs\" transform=\"rotate-90\"></ecl-icon>\n </button>\n</div>\n\n<div class=\"ecl-quiz__counter\">{{ counterText() }}</div>\n}\n\n","import { EclQuizComponent } from './ecl-quiz.component';\nimport { EclQuizCardComponent, EclQuizListDirective } from './ecl-quiz-card.component';\n\nexport * from './ecl-quiz.component';\nexport * from './ecl-quiz-card.component';\n\nexport const EUI_ECL_QUIZ = [\n EclQuizComponent,\n EclQuizCardComponent,\n EclQuizListDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"eui-ecl-components-ecl-quiz.mjs","sources":["../../components/ecl-quiz/ecl-quiz-card.component.ts","../../components/ecl-quiz/ecl-quiz-card.component.html","../../components/ecl-quiz/ecl-quiz.component.ts","../../components/ecl-quiz/ecl-quiz.component.html","../../components/ecl-quiz/index.ts","../../components/ecl-quiz/eui-ecl-components-ecl-quiz.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { EclIconComponent } from '@eui/ecl/components/ecl-icon';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\nexport interface EclQuizCardFlipEvent {\n flipped: boolean;\n selectedOptionIndex?: number;\n isCorrect?: boolean;\n}\n\n/**\n * Structural directive that marks an `<ol>` element as the ECL quiz option list.\n * Applies the `ecl-quiz__list` class to the host and is consumed by `EclQuizComponent`\n * to query its child `EclQuizCardComponent` items.\n * Applied via `ol[eclQuizList]`.\n */\n@Directive({\n selector: 'ol[eclQuizList]',\n host: {\n 'class': 'ecl-quiz__list',\n },\n})\nexport class EclQuizListDirective {}\n\n/**\n * ECL Quiz Card component – represents a single card in the quiz.\n *\n * For the 'reveal' variant, the entire card is clickable to flip.\n * For the 'poll' variant, individual options trigger the flip.\n */\n@Component({\n selector: 'li[eclQuizCard]',\n host: {\n '[attr.id]': 'id()',\n '[attr.aria-labelledby]': 'questionId()',\n '[class]': 'cssClasses()',\n '[attr.tabindex]': 'tabIndex()',\n '[style.transform]': 'styleTransform',\n '(click)': 'onClick()',\n '(keydown)': 'onKeydown($event)',\n },\n templateUrl: './ecl-quiz-card.component.html',\n imports: [EclIconComponent, TranslatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclQuizCardComponent extends ECLBaseDirective {\n\n /**\n * Unique identifier for the card, used for accessibility attributes.\n * If not provided, a unique ID is generated automatically.\n */\n readonly id = input<string>(`ecl-quiz-card-${crypto.randomUUID()}`);\n\n /**\n * The question text displayed on the front of the card.\n */\n readonly question = input<string>('');\n\n /**\n * The answer text displayed on the back of the card.\n * Used in 'reveal' variant or as explanation in 'poll' variant.\n */\n readonly answer = input<string>('');\n\n /**\n * The answer title (e.g. \"The correct answer is A.\") for poll variant.\n */\n readonly answerTitle = input<string>('');\n\n /**\n * Category label displayed in the card header (poll variant).\n *\n * @deprecated Since the port of ECL PR #4681. Upstream ECL removed the\n * category label (it is no longer part of the markup or styled by\n * `@eui/styles`); the back of the card now relies on the answer title and\n * the success/error result icons. This input is kept only to preserve the\n * public API and no longer renders anything. To be removed in v22.x.\n */\n readonly category = input<string>('');\n\n /**\n * Image source for the card. When set together with a supported\n * {@link imageDisplay} mode, a picture is rendered on the card.\n */\n readonly imageSrc = input<string>('');\n\n /**\n * Alternative text for the card image.\n */\n readonly imageAlt = input<string>('');\n\n /**\n * Controls where the image/illustration is displayed:\n * - 'none': no image (default)\n * - 'back': image only on the back; for poll variant an animated\n * question-mark illustration is shown on the front\n * - 'always': image on both front and back\n */\n readonly imageDisplay = input<'none' | 'back' | 'always'>('none');\n\n /**\n * Icon name for the card header.\n * Defaults to 'sparkle' for reveal, 'question-mark' for poll.\n */\n readonly icon = input<string>('');\n\n /**\n * Icon size for the card header. When empty, a variant-based default is\n * used ('xl' for poll, 'l' for reveal).\n */\n readonly iconSize = input<'' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl'>('');\n\n /**\n * The variant of the quiz, set by the parent EclQuizComponent.\n */\n readonly variant = signal<'poll' | 'reveal'>('reveal');\n\n /**\n * Options for the poll variant. Each option has text and a match flag.\n */\n readonly options = input<{ text: string; match: boolean }[]>([]);\n\n /**\n * Whether this is the first card in the quiz.\n * Set by the parent EclQuizComponent to render skip-instructions only once.\n */\n readonly isFirstCard = signal(false);\n\n /** Whether the card is currently flipped (showing back). */\n readonly isFlipped = signal(false);\n\n /**\n * Emitted when the card is flipped.\n */\n readonly cardFlip = output<EclQuizCardFlipEvent>();\n\n protected readonly questionId = computed(() => `${this.id()}-question`);\n protected readonly answerId = computed(() => `${this.id()}-answer`);\n\n /** Whether a picture is available to render. */\n protected readonly hasPicture = computed(() => !!this.imageSrc());\n\n /** Whether the picture should be rendered on the front face. */\n protected showFrontPicture = computed(() => this.hasPicture() && this.imageDisplay() === 'always');\n\n /** Whether the picture should be rendered on the back face. */\n protected showBackPicture = computed(\n () => this.hasPicture() && (this.imageDisplay() === 'always' || this.imageDisplay() === 'back'),\n );\n\n /**\n * Whether the animated question-mark illustration should be shown on the\n * front of a poll card (poll variant with 'back' image display).\n */\n protected showIllustration = computed(() => this.variant() === 'poll' && this.imageDisplay() === 'back');\n\n /** Indices used to render the illustration's repeated question-mark shapes. */\n protected readonly illustrationMarks = Array.from({ length: 18 }, (_unused, i) => i + 1);\n\n /** Index of the selected option (poll variant). */\n protected readonly selectedOptionIndex = signal<number | null>(null);\n\n /** Whether the selected option is correct (poll variant). */\n protected readonly isCorrect = signal<boolean | null>(null);\n protected readonly styleTransform = 'translate3d(0px, 0px, 0px)';\n\n private readonly frontElementRef = viewChild<ElementRef>('frontElement');\n private readonly backElementRef = viewChild<ElementRef>('backElement');\n private readonly questionElementRef = viewChild<ElementRef>('questionElement');\n private readonly answerElementRef = viewChild<ElementRef>('answerElement');\n private readonly contentElementRef = viewChild<ElementRef>('contentElement');\n private readonly answerTitleRef = viewChild<ElementRef>('answerTitleEl');\n\n /** Get the native front element for height calculations. */\n getFrontElement(): HTMLElement | null {\n return this.frontElementRef()?.nativeElement ?? null;\n }\n\n /** Get the native back element for height calculations. */\n getBackElement(): HTMLElement | null {\n return this.backElementRef()?.nativeElement ?? null;\n }\n\n /** Get the native question element for height calculations. */\n getQuestionElement(): HTMLElement | null {\n return this.questionElementRef()?.nativeElement ?? null;\n }\n\n /** Get the native answer element for height calculations. */\n getAnswerElement(): HTMLElement | null {\n return this.answerElementRef()?.nativeElement ?? null;\n }\n\n /** Get the native content element for height calculations. */\n getContentElement(): HTMLElement | null {\n return this.contentElementRef()?.nativeElement ?? null;\n }\n\n /** Get all radio inputs in this card. */\n getRadioInputs(): HTMLInputElement[] {\n const el = this.frontElementRef()?.nativeElement;\n if (!el) {\n return [];\n }\n return Array.from(el.querySelectorAll('input[type=\"radio\"]'));\n }\n\n /** Get the first radio input in this card. */\n getFirstRadioInput(): HTMLInputElement | null {\n return this.getRadioInputs()[0] ?? null;\n }\n\n /** Get the last radio input in this card. */\n getLastRadioInput(): HTMLInputElement | null {\n const inputs = this.getRadioInputs();\n return inputs[inputs.length - 1] ?? null;\n }\n\n protected readonly cssClasses = computed<string>(() =>\n [\n super.getCssClasses('ecl-quiz-card'),\n this.isFlipped() ? 'ecl-quiz-card__flipped' : '',\n ]\n .join(' ')\n .trim());\n\n protected readonly tabIndex = computed<number | null>(() => (this.variant() === 'reveal' ? 0 : null));\n\n /** Get the resolved icon name based on variant. */\n protected getIconName(): string {\n if (this.icon()) {\n return this.icon();\n }\n return this.variant() === 'poll' ? 'question-mark' : 'sparkle';\n }\n\n /** Get the resolved icon size. */\n protected getIconSize(): string {\n return this.iconSize() || (this.variant() === 'poll' ? 'xl' : 'l');\n }\n\n /**\n * Handle click on the card itself (reveal variant).\n */\n protected onClick(): void {\n if (this.variant() === 'reveal') {\n this.flipCard();\n }\n }\n\n /**\n * Handle keyboard events (Enter/Space to flip for reveal variant).\n */\n protected onKeydown(event: KeyboardEvent): void {\n if (this.variant() === 'reveal' && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n this.flipCard();\n }\n }\n\n /**\n * Handle option click (poll variant).\n */\n protected onOptionClick(optionIndex: number): void {\n if (this.isFlipped()) {\n return;\n }\n const optionsList = this.options();\n this.selectedOptionIndex.set(optionIndex);\n this.isCorrect.set(optionsList[optionIndex]?.match ?? false);\n this.flipCard();\n this.focusAnswerTitleAfterFlip();\n }\n\n /**\n * Handle keyboard on option (poll variant).\n */\n protected onOptionKeydown(event: KeyboardEvent, optionIndex: number): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.onOptionClick(optionIndex);\n }\n }\n\n /**\n * Flip the card between front and back.\n */\n private flipCard(): void {\n this.isFlipped.update(v => !v);\n const event: EclQuizCardFlipEvent = { flipped: this.isFlipped() };\n if (this.variant() === 'poll') {\n event.selectedOptionIndex = this.selectedOptionIndex();\n event.isCorrect = this.isCorrect();\n }\n this.cardFlip.emit(event);\n }\n\n /**\n * Focus the answer title after the card flips in poll variant.\n * Uses requestAnimationFrame to ensure the DOM has updated (inert removed from back face).\n */\n private focusAnswerTitleAfterFlip(): void {\n requestAnimationFrame(() => {\n const ref = this.answerTitleRef();\n if (ref?.nativeElement) {\n ref.nativeElement.focus();\n }\n });\n }\n}\n","<article class=\"ecl-quiz-card__content\" #contentElement>\n <!-- Front face -->\n <div class=\"ecl-quiz-card__front\" #frontElement [hidden]=\"isFlipped()\" [inert]=\"isFlipped()\">\n @if (showFrontPicture()) {\n <picture class=\"ecl-picture ecl-quiz-card__picture\">\n <img class=\"ecl-quiz-card__image\" [src]=\"imageSrc()\" [alt]=\"imageAlt()\">\n </picture>\n } @else if (showIllustration()) {\n <div class=\"ecl-quiz-card__illustration-container\">\n <svg viewBox=\"0 0 500 140\" preserveAspectRatio=\"none\" aria-hidden=\"true\"\n class=\"ecl-quiz-card__illustration\">\n <defs>\n <g id=\"question-mark\">\n <path\n d=\"M0 0c0 4.343-3.728 7.939-8.531 8.464V9.75a1.22 1.22 0 0 1-2.438 0V7.313a1.22 1.22 0 0 1 1.219-1.22c4.033 0 7.312-2.732 7.312-6.093s-3.279-6.094-7.312-6.094-7.312 2.733-7.312 6.094a1.22 1.22 0 0 1-2.438 0c0-4.704 4.374-8.531 9.75-8.531S0-4.704 0 0Zm-9.75 14.625a2.438 2.438 0 1 0 0 4.875 2.438 2.438 0 0 0 0-4.875Z\" />\n </g>\n </defs>\n @for (mark of illustrationMarks; track mark) {\n <use href=\"#question-mark\" [attr.class]=\"'qm qm-' + mark\" />\n }\n </svg>\n </div>\n }\n <div class=\"ecl-quiz-card__padded\">\n <div class=\"ecl-quiz-card__header\">\n @if (!showIllustration()) {\n <div class=\"ecl-quiz-card__icon\">\n <ecl-icon [icon]=\"getIconName()\" [size]=\"getIconSize()\" iconSet=\"phosphor\">\n </ecl-icon>\n </div>\n }\n </div>\n\n @if (variant() === 'reveal') {\n <div class=\"ecl-quiz-card__question\" [id]=\"questionId()\" #questionElement>{{ question() }}</div>\n <!-- Reveal variant: flip label -->\n <div class=\"ecl-quiz-card__flip\">\n {{ 'ecl.quiz.REVEAL-ANSWER' | translate }}\n <ecl-icon iconSet=\"phosphor\" icon=\"arrow-clockwise\" size=\"m\"></ecl-icon>\n </div>\n } @else {\n <!-- Poll variant: options -->\n <fieldset [attr.aria-describedby]=\"isFirstCard() ? id() + '-skip-instructions' : null\">\n <legend class=\"ecl-quiz-card__question\" [id]=\"questionId()\" #questionElement>{{ question() }}</legend>\n <ol class=\"ecl-quiz-card__options\" type=\"A\">\n @for (option of options(); let i = $index; track i) {\n <li class=\"ecl-quiz-card__option\" [attr.data-match]=\"option.match\" (mouseup)=\"onOptionClick(i)\">\n <label class=\"ecl-quiz-card__label\">\n <input type=\"radio\" [name]=\"id() + '-options'\" [attr.data-match]=\"option.match\"\n [attr.tabindex]=\"isFlipped() ? -1 : null\" (keydown)=\"onOptionKeydown($event, i)\">\n {{ option.text }}</label>\n @if (i === 0 && isFirstCard()) {\n <span class=\"ecl-quiz__skip\" [id]=\"id() + '-skip-instructions'\">{{ 'ecl.quiz.SKIP-INSTRUCTIONS' |\n translate }}</span>\n }\n </li>\n }\n </ol>\n </fieldset>\n }\n </div>\n </div>\n\n <!-- Back face -->\n <div class=\"ecl-quiz-card__back\" #backElement [hidden]=\"!isFlipped()\" [inert]=\"!isFlipped()\" style\n [class.ecl-quiz-card--correct]=\"variant() === 'poll' && isCorrect() === true\">\n @if (showBackPicture()) {\n <picture class=\"ecl-picture ecl-quiz-card__picture\">\n <img class=\"ecl-quiz-card__image\" [src]=\"imageSrc()\" [alt]=\"imageAlt()\">\n </picture>\n }\n <div class=\"ecl-quiz-card__padded\">\n <div class=\"ecl-quiz-card__header\">\n @if (variant() === 'reveal') {\n <div class=\"ecl-quiz-card__icon\">\n <ecl-icon [icon]=\"getIconName()\" [size]=\"getIconSize()\" iconSet=\"phosphor\">\n </ecl-icon>\n </div>\n } @else {\n <!-- Poll variant: success/error icons -->\n <div class=\"ecl-quiz-card__icon\">\n <ecl-icon icon=\"check-circle\" iconSet=\"phosphor\" size=\"xl\" class=\"ecl-quiz-card__icon--success\">\n </ecl-icon>\n <ecl-icon icon=\"x-circle\" size=\"xl\" iconSet=\"phosphor\" class=\"ecl-quiz-card__icon--error\">\n </ecl-icon>\n </div>\n }\n </div>\n\n <div class=\"ecl-quiz-card__answer\" [id]=\"answerId()\" #answerElement>\n <div class=\"ecl-quiz-card__answer-content\">\n @if (answerTitle()) {\n <div class=\"ecl-quiz-card__answer-title\" tabindex=\"0\" #answerTitleEl>{{ answerTitle() }}</div>\n }\n {{ answer() }}\n </div>\n </div>\n\n @if (variant() === 'reveal') {\n <!-- Reveal variant: go back label -->\n <div class=\"ecl-quiz-card__flip\">\n {{ 'ecl.quiz.FLIP-BACK' | translate }}\n <ecl-icon icon=\"arrow-clockwise\" size=\"m\" iconSet=\"phosphor\"></ecl-icon>\n </div>\n } @else {\n <!-- Poll variant: options list on back (showing selected state) -->\n <ol class=\"ecl-quiz-card__options\" type=\"A\">\n @for (option of options(); let i = $index; track i) {\n <li class=\"ecl-quiz-card__option\" [class.ecl-quiz-card__option--selected]=\"selectedOptionIndex() === i\"\n [attr.data-match]=\"option.match\">\n @if (selectedOptionIndex() === i) {\n @if (!option.match) {\n <span class=\"ecl-quiz-card__option-assistive-label\">{{ 'ecl.quiz.YOUR-INCORRECT-ANSWER' | translate }}</span>\n }\n @if (option.match) {\n <span class=\"ecl-quiz-card__option-assistive-label\">{{ 'ecl.quiz.YOUR-CORRECT-ANSWER' | translate }}</span>\n }\n } @else if (option.match) {\n <span class=\"ecl-quiz-card__option-assistive-label\">{{ 'ecl.quiz.CORRECT-ANSWER' | translate }}</span>\n }\n {{ option.text }}\n @if (selectedOptionIndex() === i && !option.match) {\n <span class=\"ecl-quiz-card__option-icon\">\n <ecl-icon icon=\"x-circle\" size=\"s\" iconSet=\"phosphor\"\n class=\"ecl-quiz-card__option-icon--error\"></ecl-icon>\n </span>\n }\n @if (option.match) {\n <span class=\"ecl-quiz-card__option-icon\">\n <ecl-icon icon=\"check-circle\" size=\"s\" iconSet=\"phosphor\"\n class=\"ecl-quiz-card__option-icon--success\"></ecl-icon>\n </span>\n }\n </li>\n }\n </ol>\n }\n </div>\n </div>\n</article>\n","import {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ContentChildren,\n ElementRef,\n forwardRef,\n inject,\n input,\n OnDestroy,\n QueryList,\n signal,\n viewChild,\n} from '@angular/core';\nimport { EUI_ECL_SLIDER } from '@eui/ecl/components/ecl-slider';\nimport { ECLBaseDirective, EclRtlService } from '@eui/ecl/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { EmblaCarouselDirective } from 'embla-carousel-angular';\nimport { EmblaCarouselType, EmblaEventType } from 'embla-carousel';\nimport { Subject, takeUntil } from 'rxjs';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\nimport { EclQuizCardComponent } from './ecl-quiz-card.component';\n\n/**\n * An ECL quiz carousel component that renders a sequence of `li[eclQuizCard]` cards with navigation dots and previous/next buttons.\n * Uses Embla Carousel for slide animation, matching the ECL vanilla implementation.\n * Applied via `section[eclQuiz]`.\n *\n * - `variant` input: `'reveal'` (default, flip cards) | `'poll'` (multiple-choice); propagated to all child cards.\n * - `eclTitle` and `eclDescription`: heading and description text rendered above the carousel.\n * - `isFullWidth` (default `false`): expands the component to full container width.\n * - `hasBackground` (default `false`): adds a background fill behind the quiz.\n * - Cards are projected as `li[eclQuizCard]` children; wrap them in `ol[eclQuizList]` for semantic list structure.\n */\n@Component({\n selector: 'section[eclQuiz]',\n templateUrl: './ecl-quiz.component.html',\n host: {\n '[class]': 'cssClasses()',\n '(keydown)': 'onKeydown($event)',\n },\n imports: [\n ...EUI_ECL_SLIDER,\n EmblaCarouselDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclQuizComponent extends ECLBaseDirective implements AfterContentInit, AfterViewInit, OnDestroy {\n\n /** Quiz variant: 'reveal' for flip cards, 'poll' for multiple choice. */\n readonly variant = input<'poll' | 'reveal'>('reveal');\n\n /** Title displayed in the quiz header. */\n readonly eclTitle = input<string>('');\n\n /** Description displayed below the title. */\n readonly eclDescription = input<string>('');\n\n readonly isFullWidth = input(false, { transform: booleanAttribute });\n\n readonly hasBackground = input(false, { transform: booleanAttribute });\n\n /** Embla carousel options matching ECL's configuration. */\n protected emblaOptions: { loop: boolean; align: 'start'; direction: 'ltr' | 'rtl' } = { loop: false, align: 'start', direction: 'ltr' };\n\n /** Subscribed Embla events. */\n protected subscribeToEvents: EmblaEventType[] = ['select', 'init', 'reInit'];\n\n /** Current snap index. */\n protected readonly activeIndex = signal(0);\n\n /** Total number of snap points. */\n protected readonly totalSnaps = signal(0);\n\n /** Counter text for mobile display. */\n protected readonly counterText = signal('');\n\n /** Whether the previous button is disabled. */\n protected readonly prevDisabled = signal(true);\n\n /** Whether the next button is disabled. */\n protected readonly nextDisabled = signal(true);\n\n /** Whether navigation controls should be shown. */\n protected readonly showControls = signal(false);\n\n @ContentChildren(forwardRef(() => EclQuizCardComponent), { descendants: true })\n private cards: QueryList<EclQuizCardComponent>;\n\n private readonly emblaRef = viewChild(EmblaCarouselDirective);\n\n private readonly cd = inject(ChangeDetectorRef);\n private readonly eclRtlService = inject(EclRtlService);\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly translate = inject(TranslateService);\n private readonly destroy$ = new Subject<void>();\n private emblaApi: EmblaCarouselType | undefined;\n\n protected readonly cssClasses = computed<string>(() =>\n [\n super.getCssClasses('ecl-quiz'),\n `ecl-quiz--${this.variant()}`,\n this.hasBackground() ? 'ecl-quiz--background' : '',\n this.isFullWidth() ? 'ecl-quiz--full-width' : '',\n ]\n .join(' ')\n .trim());\n\n /** Whether any snap point groups multiple slides. */\n protected readonly hasGroupedSlides = signal(false);\n\n /** Total number of individual slides (cards). */\n protected readonly totalSlides = signal(0);\n\n /** Number of visible slides per snap. */\n protected readonly slidesPerSnap = signal(1);\n\n /** Returns the aria-label for a dot button at the given snap index. */\n protected getDotAriaLabel(dotIndex: number): { key: string; params: Record<string, number> } {\n const totalSlidesCount = this.totalSlides();\n const totalSnapsCount = this.totalSnaps();\n\n if (this.hasGroupedSlides()) {\n const visibleSlides = totalSlidesCount - (totalSnapsCount - 1);\n const start = dotIndex + 1;\n const end = Math.min(dotIndex + visibleSlides, totalSlidesCount);\n return {\n key: 'ecl.quiz.GO-TO-SLIDES',\n params: { start, end, total: totalSlidesCount },\n };\n }\n return {\n key: 'ecl.quiz.GO-TO-SLIDE',\n params: { current: dotIndex + 1, total: totalSlidesCount },\n };\n }\n\n /** Returns an array of indices for dot rendering. */\n protected getDotIndices(): number[] {\n return Array.from({ length: this.totalSnaps() }, (_, i) => i);\n }\n\n /**\n * Pre-translated accessible label for each dot, passed to the shared slider pager.\n * Depends on the current slide grouping, so it is computed here (where that\n * information lives) and translated imperatively.\n */\n protected readonly dotAriaLabels = computed<string[]>(() => {\n // Read totalSnaps so the computed re-evaluates when the dot count changes.\n const total = this.totalSnaps();\n return Array.from({ length: total }, (_unused, dotIndex) => {\n const { key, params } = this.getDotAriaLabel(dotIndex);\n return this.translate.instant(key, params);\n });\n });\n\n /** Called by the emblaChange event from the directive. */\n protected onEmblaChange(eventName: string): void {\n if (!this.emblaApi) {\n this.emblaApi = this.emblaRef()?.emblaApi;\n }\n if (!this.emblaApi) {\n return;\n }\n\n if (eventName === 'select' || eventName === 'init' || eventName === 'reInit') {\n this.syncState();\n }\n\n if (eventName === 'reInit') {\n this.checkHeight();\n }\n }\n\n /** Handle keyboard events. */\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.escapeSlider();\n return;\n }\n\n if (this.variant() === 'poll' && event.key === 'Tab') {\n this.handlePollTabNavigation(event);\n }\n }\n\n /** Navigate to the previous snap. */\n protected onPrevClick(): void {\n const embla = this.emblaRef();\n if (embla) {\n embla.scrollPrev();\n }\n }\n\n /** Navigate to the next snap. */\n protected onNextClick(): void {\n const embla = this.emblaRef();\n if (embla) {\n embla.scrollNext();\n }\n }\n\n /** Navigate to a specific snap index. */\n protected goTo(index: number): void {\n const embla = this.emblaRef();\n if (embla) {\n embla.scrollTo(index);\n }\n }\n\n ngAfterContentInit(): void {\n if (this.cards && this.cards.length > 1) {\n this.showControls.set(true);\n }\n this.propagateVariant();\n this.subscribeToCardFlips();\n this.cards.changes.subscribe(() => {\n this.propagateVariant();\n this.subscribeToCardFlips();\n });\n\n this.eclRtlService.currentRtlState$.pipe(takeUntil(this.destroy$)).subscribe((isRtl) => {\n const direction = isRtl ? 'rtl' : 'ltr';\n if (this.emblaOptions.direction !== direction) {\n this.emblaOptions = { ...this.emblaOptions, direction };\n this.cd.detectChanges();\n }\n });\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.initEmbla();\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /** Initialize Embla and wire up state syncing. */\n private initEmbla(): void {\n const embla = this.emblaRef();\n if (!embla) {\n return;\n }\n\n this.emblaApi = embla.emblaApi;\n\n if (!this.emblaApi) {\n return;\n }\n\n this.syncState();\n this.checkHeight();\n this.cd.detectChanges();\n }\n\n /** Sync component state from Embla API. */\n private syncState(): void {\n if (!this.emblaApi) {\n return;\n }\n\n // Array of scroll-progress values (0 to 1), one per snap point.\n // Its length equals the number of positions the carousel can settle on (i.e. total dots).\n const snapList = this.emblaApi.scrollSnapList();\n const selectedSnap = this.emblaApi.selectedScrollSnap();\n const canScrollPrev = this.emblaApi.canScrollPrev();\n const canScrollNext = this.emblaApi.canScrollNext();\n // Number of individual slide elements in the carousel\n const slideCount = this.emblaApi.slideNodes().length;\n\n this.totalSnaps.set(snapList.length);\n this.activeIndex.set(selectedSnap);\n this.prevDisabled.set(!canScrollPrev);\n this.nextDisabled.set(!canScrollNext);\n this.showControls.set(canScrollPrev || canScrollNext);\n this.totalSlides.set(slideCount);\n this.hasGroupedSlides.set(slideCount > snapList.length);\n this.slidesPerSnap.set(snapList.length > 0 ? slideCount - (snapList.length - 1) : 1);\n\n this.updateCounter();\n }\n\n /** Update the counter text (mobile). */\n private updateCounter(): void {\n const total = this.totalSnaps();\n const current = this.activeIndex() + 1;\n this.counterText.set(`${current} / ${total}`);\n }\n\n /** Move focus to the last dot button when Escape is pressed. */\n private escapeSlider(): void {\n const dots = this.hostRef.nativeElement.querySelectorAll<HTMLElement>(\n '.ecl-slider-pager__dot',\n );\n if (dots.length > 0) {\n const lastDot = dots[dots.length - 1];\n lastDot.focus();\n }\n }\n\n /** Subscribe to cardFlip events on all cards to detect when all are flipped. */\n private subscribeToCardFlips(): void {\n if (this.variant() !== 'poll') {\n return;\n }\n this.cards?.forEach(card => {\n outputToObservable(card.cardFlip).pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.checkAllCardsFlipped();\n });\n });\n }\n\n /**\n * Hook invoked when a poll card flips. The category/sr-status tabindex\n * management was removed in line with upstream ECL (PR #4681), so there is\n * no longer per-card state to propagate here. Retained as an extension\n * point for future \"all cards flipped\" behaviour.\n */\n private checkAllCardsFlipped(): void {\n // Intentionally left blank.\n }\n\n /**\n * Equalizes the height of all cards based on the tallest content.\n * Mirrors the ECL vanilla `checkHeight()` logic.\n */\n private checkHeight(): void {\n if (!this.cards || this.cards.length === 0) {\n return;\n }\n\n let maxTextHeight = 0;\n let maxHeight = 0;\n\n const cardsArray = this.cards.toArray();\n\n // First pass: find the tallest question/answer text\n cardsArray.forEach((card) => {\n const frontEl = card.getFrontElement();\n const backEl = card.getBackElement();\n const questionEl = card.getQuestionElement();\n const answerEl = card.getAnswerElement();\n\n if (!frontEl || !backEl || !questionEl || !answerEl) {\n return;\n }\n\n frontEl.style.position = 'static';\n backEl.style.position = 'static';\n\n questionEl.style.minHeight = '';\n answerEl.style.minHeight = '';\n\n const heightQuestion = questionEl.scrollHeight;\n const heightAnswer = answerEl.scrollHeight;\n const heightText = Math.max(heightQuestion, heightAnswer);\n\n if (heightText > maxTextHeight) {\n maxTextHeight = heightText;\n }\n\n frontEl.style.position = '';\n backEl.style.position = '';\n });\n\n // Second pass: apply min-height and find tallest card\n cardsArray.forEach((card) => {\n const frontEl = card.getFrontElement();\n const backEl = card.getBackElement();\n const questionEl = card.getQuestionElement();\n const answerEl = card.getAnswerElement();\n const contentEl = card.getContentElement();\n\n if (!frontEl || !backEl || !questionEl || !answerEl || !contentEl) {\n return;\n }\n\n frontEl.style.position = 'static';\n backEl.style.position = 'static';\n contentEl.style.height = '';\n\n questionEl.style.minHeight = maxTextHeight + 'px';\n answerEl.style.minHeight = maxTextHeight + 'px';\n\n const heightFront = frontEl.scrollHeight;\n const heightBack = backEl.scrollHeight;\n const height = Math.max(heightFront, heightBack);\n\n const minHeight = parseFloat(getComputedStyle(frontEl).getPropertyValue('min-height')) || 345;\n\n if (height > minHeight && height > maxHeight) {\n maxHeight = height;\n }\n\n frontEl.style.position = '';\n backEl.style.position = '';\n });\n\n // Third pass: apply uniform height\n if (maxHeight > 0) {\n cardsArray.forEach((card) => {\n const contentEl = card.getContentElement();\n if (contentEl) {\n contentEl.style.height = maxHeight + 'px';\n }\n });\n }\n }\n\n /**\n * Handle Tab/Shift+Tab navigation between unflipped poll cards.\n * Tab from a radio input jumps to the first radio of the next unflipped card.\n * Shift+Tab from a radio input jumps to the last radio of the previous unflipped card.\n * If no unflipped card is found in that direction, native Tab takes over.\n */\n private handlePollTabNavigation(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n\n if (!(target instanceof HTMLInputElement) || target.type !== 'radio') {\n return;\n }\n\n const cardsArray = this.cards.toArray();\n\n const currentCardIndex = cardsArray.findIndex(card => {\n const radios = card.getRadioInputs();\n return radios.includes(target);\n });\n\n if (currentCardIndex === -1) {\n return;\n }\n\n if (event.shiftKey) {\n for (let i = currentCardIndex - 1; i >= 0; i--) {\n if (!cardsArray[i].isFlipped()) {\n event.preventDefault();\n this.goTo(i);\n const lastInput = cardsArray[i].getLastRadioInput();\n if (lastInput) {\n lastInput.focus();\n }\n return;\n }\n }\n } else {\n for (let i = currentCardIndex + 1; i < cardsArray.length; i++) {\n if (!cardsArray[i].isFlipped()) {\n event.preventDefault();\n this.goTo(i);\n const firstInput = cardsArray[i].getFirstRadioInput();\n if (firstInput) {\n firstInput.focus();\n }\n return;\n }\n }\n }\n }\n\n /** Propagate the variant to all child cards. */\n private propagateVariant(): void {\n const v = this.variant();\n this.cards?.forEach((card, index) => {\n card.variant.set(v);\n card.isFirstCard.set(index === 0);\n });\n }\n}\n","@if (eclTitle() || eclDescription()) {\n<div class=\"ecl-quiz__header\">\n @if (eclTitle()) {\n <div class=\"ecl-quiz__title\">{{ eclTitle() }}</div>\n }\n @if (eclDescription()) {\n <div class=\"ecl-quiz__description\">{{ eclDescription() }}</div>\n }\n</div>\n}\n\n<div class=\"ecl-quiz__viewport\" data-ecl-quiz-slider\n role=\"region\"\n aria-label=\"Quiz slider\"\n aria-roledescription=\"carousel\"\n emblaCarousel\n [options]=\"emblaOptions\"\n [subscribeToEvents]=\"subscribeToEvents\"\n (emblaChange)=\"onEmblaChange($event)\">\n \n <ng-content></ng-content>\n</div>\n\n@if (showControls()) {\n<ecl-slider-pager\n class=\"ecl-quiz__pager\"\n variant=\"dots\"\n prevExtraClasses=\"ecl-quiz__prev\"\n nextExtraClasses=\"ecl-quiz__next\"\n dotsExtraClasses=\"ecl-quiz__dots\"\n dotExtraClasses=\"ecl-quiz__dot\"\n [activeIndex]=\"activeIndex()\"\n [isPrevDisabled]=\"prevDisabled()\"\n [isNextDisabled]=\"nextDisabled()\"\n [dotIndices]=\"getDotIndices()\"\n [dotAriaLabels]=\"dotAriaLabels()\"\n (prev)=\"onPrevClick()\"\n (next)=\"onNextClick()\"\n (goTo)=\"goTo($event)\">\n</ecl-slider-pager>\n\n<div class=\"ecl-quiz__counter\">{{ counterText() }}</div>\n}\n\n","import { EclQuizComponent } from './ecl-quiz.component';\nimport { EclQuizCardComponent, EclQuizListDirective } from './ecl-quiz-card.component';\n\nexport * from './ecl-quiz.component';\nexport * from './ecl-quiz-card.component';\n\nexport const EUI_ECL_QUIZ = [\n EclQuizComponent,\n EclQuizCardComponent,\n EclQuizListDirective,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, output, signal, computed, inject, ElementRef, afterNextRender, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import * as i1 from '@eui/ecl/components/ecl-icon';
|
|
4
|
+
import { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';
|
|
5
|
+
import { ECLBaseDirective } from '@eui/ecl/core';
|
|
6
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Width (in px) below which the prev/next buttons collapse to icon-only.
|
|
10
|
+
* Matches EUI's `md` breakpoint. Mirrors ECL's quiz `checkPager()` which toggles
|
|
11
|
+
* `ecl-button--icon-only` around the `m` breakpoint.
|
|
12
|
+
*/
|
|
13
|
+
const COMPACT_BREAKPOINT = 768;
|
|
14
|
+
/**
|
|
15
|
+
* ECL Slider Pager component.
|
|
16
|
+
*
|
|
17
|
+
* A presentational navigation strip (previous / dots / optional play-pause / next)
|
|
18
|
+
* shared by slider-like components such as quiz, story-card and carousel.
|
|
19
|
+
*
|
|
20
|
+
* It is intentionally self-contained and framework-presentational:
|
|
21
|
+
* - It owns no carousel. The parent owns its own source of truth (e.g. an Embla
|
|
22
|
+
* carousel or an accordion state) and maps that state onto this component's inputs.
|
|
23
|
+
* - It only renders markup and emits intent through its outputs
|
|
24
|
+
* (`prev`, `next`, `goTo`, `play`, `pause`).
|
|
25
|
+
*
|
|
26
|
+
* For the `play-pause` variant the DOM order is `play/pause -> prev -> next`, so
|
|
27
|
+
* keyboard/screen-reader focus reaches the play/pause control first (accessibility
|
|
28
|
+
* requirement, see FRONT-5436). For the `dots` variant the DOM order stays
|
|
29
|
+
* `prev -> dots -> next`. The visual skeleton `prev -> [middle] -> next` is
|
|
30
|
+
* preserved via CSS `order` on the per-slot classes.
|
|
31
|
+
*
|
|
32
|
+
* Styling (including the `order` rules that restore the visual layout) is provided
|
|
33
|
+
* by the shared `ecl-slider-pager__*` classes shipped in `@eui/styles`.
|
|
34
|
+
*/
|
|
35
|
+
class EclSliderPagerComponent extends ECLBaseDirective {
|
|
36
|
+
constructor() {
|
|
37
|
+
super();
|
|
38
|
+
/** Size of the prev/next (and play/pause) buttons. */
|
|
39
|
+
this.size = input('s', /* @ts-ignore */
|
|
40
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
41
|
+
/**
|
|
42
|
+
* Which controls to render:
|
|
43
|
+
* - `'dots'`: prev / dots / next.
|
|
44
|
+
* - `'play-pause'`: play-pause / prev / next.
|
|
45
|
+
* - `'play-pause-dots'`: play-pause / prev / dots / next. Used by the carousel,
|
|
46
|
+
* which shows play/pause + teasers on desktop and the dots strip on mobile
|
|
47
|
+
* (the ECL CSS toggles which parts are visible per breakpoint).
|
|
48
|
+
*/
|
|
49
|
+
this.variant = input('dots', /* @ts-ignore */
|
|
50
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
51
|
+
/** Whether playback is currently active (controls play/pause visibility). */
|
|
52
|
+
this.isPlaying = input(false, /* @ts-ignore */
|
|
53
|
+
...(ngDevMode ? [{ debugName: "isPlaying" }] : /* istanbul ignore next */ []));
|
|
54
|
+
/** Whether the previous button is disabled. */
|
|
55
|
+
this.isPrevDisabled = input(false, /* @ts-ignore */
|
|
56
|
+
...(ngDevMode ? [{ debugName: "isPrevDisabled" }] : /* istanbul ignore next */ []));
|
|
57
|
+
/** Whether the next button is disabled. */
|
|
58
|
+
this.isNextDisabled = input(false, /* @ts-ignore */
|
|
59
|
+
...(ngDevMode ? [{ debugName: "isNextDisabled" }] : /* istanbul ignore next */ []));
|
|
60
|
+
/** Index of the currently active dot. */
|
|
61
|
+
this.activeIndex = input(0, /* @ts-ignore */
|
|
62
|
+
...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
|
|
63
|
+
/** Indices of the dots to render. Length determines the number of dots. */
|
|
64
|
+
this.dotIndices = input([], /* @ts-ignore */
|
|
65
|
+
...(ngDevMode ? [{ debugName: "dotIndices" }] : /* istanbul ignore next */ []));
|
|
66
|
+
/**
|
|
67
|
+
* Accessible label for each dot, indexed by dot index.
|
|
68
|
+
* The parent is responsible for computing these (e.g. "Show slides 1 to 3 of 5"),
|
|
69
|
+
* since the wording depends on the parent's slide grouping and translations.
|
|
70
|
+
*/
|
|
71
|
+
this.dotAriaLabels = input([], /* @ts-ignore */
|
|
72
|
+
...(ngDevMode ? [{ debugName: "dotAriaLabels" }] : /* istanbul ignore next */ []));
|
|
73
|
+
/**
|
|
74
|
+
* Component-scoped extra classes applied per slot, alongside the shared
|
|
75
|
+
* `ecl-slider-pager__*` classes. Consumers use these to attach their own
|
|
76
|
+
* BEM classes (e.g. `ecl-story-card__next`) so component-specific styles in
|
|
77
|
+
* `@eui/styles` can target a given slot.
|
|
78
|
+
*/
|
|
79
|
+
this.prevExtraClasses = input('', /* @ts-ignore */
|
|
80
|
+
...(ngDevMode ? [{ debugName: "prevExtraClasses" }] : /* istanbul ignore next */ []));
|
|
81
|
+
this.nextExtraClasses = input('', /* @ts-ignore */
|
|
82
|
+
...(ngDevMode ? [{ debugName: "nextExtraClasses" }] : /* istanbul ignore next */ []));
|
|
83
|
+
this.dotsExtraClasses = input('', /* @ts-ignore */
|
|
84
|
+
...(ngDevMode ? [{ debugName: "dotsExtraClasses" }] : /* istanbul ignore next */ []));
|
|
85
|
+
this.dotExtraClasses = input('', /* @ts-ignore */
|
|
86
|
+
...(ngDevMode ? [{ debugName: "dotExtraClasses" }] : /* istanbul ignore next */ []));
|
|
87
|
+
this.playExtraClasses = input('', /* @ts-ignore */
|
|
88
|
+
...(ngDevMode ? [{ debugName: "playExtraClasses" }] : /* istanbul ignore next */ []));
|
|
89
|
+
this.pauseExtraClasses = input('', /* @ts-ignore */
|
|
90
|
+
...(ngDevMode ? [{ debugName: "pauseExtraClasses" }] : /* istanbul ignore next */ []));
|
|
91
|
+
/** Emitted when the previous button is activated. */
|
|
92
|
+
this.prev = output();
|
|
93
|
+
/** Emitted when the next button is activated. */
|
|
94
|
+
this.next = output();
|
|
95
|
+
/** Emitted when a dot is activated. Payload is the dot index. */
|
|
96
|
+
this.goTo = output();
|
|
97
|
+
/** Emitted when the play button is activated. */
|
|
98
|
+
this.play = output();
|
|
99
|
+
/** Emitted when the pause button is activated. */
|
|
100
|
+
this.pause = output();
|
|
101
|
+
/**
|
|
102
|
+
* Whether the pager is in its compact (narrow) layout, where prev/next
|
|
103
|
+
* collapse to icon-only. Driven by observing the component's own width.
|
|
104
|
+
*/
|
|
105
|
+
this.isCompact = signal(false, /* @ts-ignore */
|
|
106
|
+
...(ngDevMode ? [{ debugName: "isCompact" }] : /* istanbul ignore next */ []));
|
|
107
|
+
this.cssClasses = computed(() => super.getCssClasses('ecl-slider-pager'), /* @ts-ignore */
|
|
108
|
+
...(ngDevMode ? [{ debugName: "cssClasses" }] : /* istanbul ignore next */ []));
|
|
109
|
+
/** Resolved icon size derived from the button size. */
|
|
110
|
+
this.iconSize = computed(() => (this.size() === 'l' ? 'l' : 'm'), /* @ts-ignore */
|
|
111
|
+
...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
|
|
112
|
+
/**
|
|
113
|
+
* Whether prev/next render icon-only.
|
|
114
|
+
* The `play-pause` variant (e.g. story-card grid controls) is always icon-only.
|
|
115
|
+
* The `dots` variant (e.g. quiz) shows text labels at wide widths and collapses
|
|
116
|
+
* to icon-only when compact.
|
|
117
|
+
*/
|
|
118
|
+
this.isPrevNextIconOnly = computed(() => this.variant() !== 'dots' || this.isCompact(), /* @ts-ignore */
|
|
119
|
+
...(ngDevMode ? [{ debugName: "isPrevNextIconOnly" }] : /* istanbul ignore next */ []));
|
|
120
|
+
/** Whether to render the play/pause buttons. */
|
|
121
|
+
this.showPlayPause = computed(() => this.variant() !== 'dots', /* @ts-ignore */
|
|
122
|
+
...(ngDevMode ? [{ debugName: "showPlayPause" }] : /* istanbul ignore next */ []));
|
|
123
|
+
/** Whether to render the dots navigation strip. */
|
|
124
|
+
this.showDots = computed(() => this.variant() !== 'play-pause', /* @ts-ignore */
|
|
125
|
+
...(ngDevMode ? [{ debugName: "showDots" }] : /* istanbul ignore next */ []));
|
|
126
|
+
this.hostRef = inject(ElementRef);
|
|
127
|
+
afterNextRender(() => {
|
|
128
|
+
const host = this.hostRef.nativeElement;
|
|
129
|
+
this.updateCompact(host.offsetWidth);
|
|
130
|
+
if (typeof ResizeObserver !== 'undefined') {
|
|
131
|
+
this.resizeObserver = new ResizeObserver((entries) => {
|
|
132
|
+
this.updateCompact(entries[0].contentRect.width);
|
|
133
|
+
});
|
|
134
|
+
this.resizeObserver.observe(host);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
ngOnDestroy() {
|
|
139
|
+
this.resizeObserver?.disconnect();
|
|
140
|
+
}
|
|
141
|
+
/** Handle a click on the previous button. */
|
|
142
|
+
onPrevClick() {
|
|
143
|
+
this.prev.emit();
|
|
144
|
+
}
|
|
145
|
+
/** Handle a click on the next button. */
|
|
146
|
+
onNextClick() {
|
|
147
|
+
this.next.emit();
|
|
148
|
+
}
|
|
149
|
+
/** Handle a click on a dot. */
|
|
150
|
+
onDotClick(dotIndex) {
|
|
151
|
+
this.goTo.emit(dotIndex);
|
|
152
|
+
}
|
|
153
|
+
/** Handle a click on the play button. */
|
|
154
|
+
onPlayClick() {
|
|
155
|
+
this.play.emit();
|
|
156
|
+
}
|
|
157
|
+
/** Handle a click on the pause button. */
|
|
158
|
+
onPauseClick() {
|
|
159
|
+
this.pause.emit();
|
|
160
|
+
}
|
|
161
|
+
/** Update the compact state from the observed width. */
|
|
162
|
+
updateCompact(width) {
|
|
163
|
+
this.isCompact.set(width < COMPACT_BREAKPOINT);
|
|
164
|
+
}
|
|
165
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclSliderPagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
166
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EclSliderPagerComponent, isStandalone: true, selector: "ecl-slider-pager", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, isPlaying: { classPropertyName: "isPlaying", publicName: "isPlaying", isSignal: true, isRequired: false, transformFunction: null }, isPrevDisabled: { classPropertyName: "isPrevDisabled", publicName: "isPrevDisabled", isSignal: true, isRequired: false, transformFunction: null }, isNextDisabled: { classPropertyName: "isNextDisabled", publicName: "isNextDisabled", isSignal: true, isRequired: false, transformFunction: null }, activeIndex: { classPropertyName: "activeIndex", publicName: "activeIndex", isSignal: true, isRequired: false, transformFunction: null }, dotIndices: { classPropertyName: "dotIndices", publicName: "dotIndices", isSignal: true, isRequired: false, transformFunction: null }, dotAriaLabels: { classPropertyName: "dotAriaLabels", publicName: "dotAriaLabels", isSignal: true, isRequired: false, transformFunction: null }, prevExtraClasses: { classPropertyName: "prevExtraClasses", publicName: "prevExtraClasses", isSignal: true, isRequired: false, transformFunction: null }, nextExtraClasses: { classPropertyName: "nextExtraClasses", publicName: "nextExtraClasses", isSignal: true, isRequired: false, transformFunction: null }, dotsExtraClasses: { classPropertyName: "dotsExtraClasses", publicName: "dotsExtraClasses", isSignal: true, isRequired: false, transformFunction: null }, dotExtraClasses: { classPropertyName: "dotExtraClasses", publicName: "dotExtraClasses", isSignal: true, isRequired: false, transformFunction: null }, playExtraClasses: { classPropertyName: "playExtraClasses", publicName: "playExtraClasses", isSignal: true, isRequired: false, transformFunction: null }, pauseExtraClasses: { classPropertyName: "pauseExtraClasses", publicName: "pauseExtraClasses", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { prev: "prev", next: "next", goTo: "goTo", play: "play", pause: "pause" }, host: { properties: { "class": "cssClasses()" } }, usesInheritance: true, ngImport: i0, template: "@if (showPlayPause()) {\n<!-- Play button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-button--icon-only ecl-slider-pager__play\"\n [class]=\"playExtraClasses()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [style.display]=\"isPlaying() ? 'none' : 'flex'\"\n (click)=\"onPlayClick()\"\n [attr.aria-label]=\"'ecl.slider.PLAY' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.PLAY' | translate }}</span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"play\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n\n<!-- Pause button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-button--icon-only ecl-slider-pager__pause\"\n [class]=\"pauseExtraClasses()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [style.display]=\"isPlaying() ? 'flex' : 'none'\"\n (click)=\"onPauseClick()\"\n [attr.aria-label]=\"'ecl.slider.PAUSE' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.PAUSE' | translate }}</span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"pause\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n}\n\n<!-- Prev button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-slider-pager__prev\"\n [class]=\"prevExtraClasses()\"\n [class.ecl-button--icon-only]=\"isPrevNextIconOnly()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [disabled]=\"isPrevDisabled()\"\n (click)=\"onPrevClick()\"\n [attr.aria-label]=\"'ecl.slider.PREVIOUS' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.PREVIOUS' | translate }}</span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-left\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n\n@if (showDots()) {\n<!-- Dots -->\n<div class=\"ecl-slider-pager__dots\" [class]=\"dotsExtraClasses()\">\n @for (dotIndex of dotIndices(); track dotIndex) {\n <button\n type=\"button\"\n class=\"ecl-slider-pager__dot\"\n [class]=\"dotExtraClasses()\"\n [class.ecl-slider-pager__dot--active]=\"dotIndex === activeIndex()\"\n [class.is-prev]=\"dotIndex === activeIndex() - 1\"\n [attr.aria-current]=\"dotIndex === activeIndex() ? 'true' : null\"\n [attr.aria-label]=\"dotAriaLabels()[dotIndex]\"\n (click)=\"onDotClick(dotIndex)\">\n </button>\n }\n</div>\n}\n\n<!-- Next button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-slider-pager__next\"\n [class]=\"nextExtraClasses()\"\n [class.ecl-button--icon-only]=\"isPrevNextIconOnly()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [disabled]=\"isNextDisabled()\"\n (click)=\"onNextClick()\"\n [attr.aria-label]=\"'ecl.slider.NEXT' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.NEXT' | translate }}</span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-right\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n", dependencies: [{ kind: "component", type: i1.EclIconComponent, selector: "ecl-icon", inputs: ["iconSet", "icon", "size", "color", "transform", "ariaLabelledby", "role", "title", "ariaHidden", "focusable", "isFlipHorizontal"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
167
|
+
}
|
|
168
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EclSliderPagerComponent, decorators: [{
|
|
169
|
+
type: Component,
|
|
170
|
+
args: [{ selector: 'ecl-slider-pager', host: {
|
|
171
|
+
'[class]': 'cssClasses()',
|
|
172
|
+
}, imports: [
|
|
173
|
+
...EUI_ECL_ICON,
|
|
174
|
+
TranslatePipe,
|
|
175
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showPlayPause()) {\n<!-- Play button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-button--icon-only ecl-slider-pager__play\"\n [class]=\"playExtraClasses()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [style.display]=\"isPlaying() ? 'none' : 'flex'\"\n (click)=\"onPlayClick()\"\n [attr.aria-label]=\"'ecl.slider.PLAY' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.PLAY' | translate }}</span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"play\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n\n<!-- Pause button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-button--icon-only ecl-slider-pager__pause\"\n [class]=\"pauseExtraClasses()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [style.display]=\"isPlaying() ? 'flex' : 'none'\"\n (click)=\"onPauseClick()\"\n [attr.aria-label]=\"'ecl.slider.PAUSE' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.PAUSE' | translate }}</span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"pause\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n}\n\n<!-- Prev button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-slider-pager__prev\"\n [class]=\"prevExtraClasses()\"\n [class.ecl-button--icon-only]=\"isPrevNextIconOnly()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [disabled]=\"isPrevDisabled()\"\n (click)=\"onPrevClick()\"\n [attr.aria-label]=\"'ecl.slider.PREVIOUS' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.PREVIOUS' | translate }}</span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-left\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n\n@if (showDots()) {\n<!-- Dots -->\n<div class=\"ecl-slider-pager__dots\" [class]=\"dotsExtraClasses()\">\n @for (dotIndex of dotIndices(); track dotIndex) {\n <button\n type=\"button\"\n class=\"ecl-slider-pager__dot\"\n [class]=\"dotExtraClasses()\"\n [class.ecl-slider-pager__dot--active]=\"dotIndex === activeIndex()\"\n [class.is-prev]=\"dotIndex === activeIndex() - 1\"\n [attr.aria-current]=\"dotIndex === activeIndex() ? 'true' : null\"\n [attr.aria-label]=\"dotAriaLabels()[dotIndex]\"\n (click)=\"onDotClick(dotIndex)\">\n </button>\n }\n</div>\n}\n\n<!-- Next button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-slider-pager__next\"\n [class]=\"nextExtraClasses()\"\n [class.ecl-button--icon-only]=\"isPrevNextIconOnly()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [disabled]=\"isNextDisabled()\"\n (click)=\"onNextClick()\"\n [attr.aria-label]=\"'ecl.slider.NEXT' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.NEXT' | translate }}</span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-right\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n" }]
|
|
176
|
+
}], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], isPlaying: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPlaying", required: false }] }], isPrevDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPrevDisabled", required: false }] }], isNextDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isNextDisabled", required: false }] }], activeIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeIndex", required: false }] }], dotIndices: [{ type: i0.Input, args: [{ isSignal: true, alias: "dotIndices", required: false }] }], dotAriaLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "dotAriaLabels", required: false }] }], prevExtraClasses: [{ type: i0.Input, args: [{ isSignal: true, alias: "prevExtraClasses", required: false }] }], nextExtraClasses: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextExtraClasses", required: false }] }], dotsExtraClasses: [{ type: i0.Input, args: [{ isSignal: true, alias: "dotsExtraClasses", required: false }] }], dotExtraClasses: [{ type: i0.Input, args: [{ isSignal: true, alias: "dotExtraClasses", required: false }] }], playExtraClasses: [{ type: i0.Input, args: [{ isSignal: true, alias: "playExtraClasses", required: false }] }], pauseExtraClasses: [{ type: i0.Input, args: [{ isSignal: true, alias: "pauseExtraClasses", required: false }] }], prev: [{ type: i0.Output, args: ["prev"] }], next: [{ type: i0.Output, args: ["next"] }], goTo: [{ type: i0.Output, args: ["goTo"] }], play: [{ type: i0.Output, args: ["play"] }], pause: [{ type: i0.Output, args: ["pause"] }] } });
|
|
177
|
+
|
|
178
|
+
const EUI_ECL_SLIDER = [
|
|
179
|
+
EclSliderPagerComponent,
|
|
180
|
+
];
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Generated bundle index. Do not edit.
|
|
184
|
+
*/
|
|
185
|
+
|
|
186
|
+
export { EUI_ECL_SLIDER, EclSliderPagerComponent };
|
|
187
|
+
//# sourceMappingURL=eui-ecl-components-ecl-slider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eui-ecl-components-ecl-slider.mjs","sources":["../../components/ecl-slider/ecl-slider-pager.component.ts","../../components/ecl-slider/ecl-slider-pager.component.html","../../components/ecl-slider/index.ts","../../components/ecl-slider/eui-ecl-components-ecl-slider.ts"],"sourcesContent":["import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n} from '@angular/core';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n/**\n * Width (in px) below which the prev/next buttons collapse to icon-only.\n * Matches EUI's `md` breakpoint. Mirrors ECL's quiz `checkPager()` which toggles\n * `ecl-button--icon-only` around the `m` breakpoint.\n */\nconst COMPACT_BREAKPOINT = 768;\n\n/**\n * ECL Slider Pager component.\n *\n * A presentational navigation strip (previous / dots / optional play-pause / next)\n * shared by slider-like components such as quiz, story-card and carousel.\n *\n * It is intentionally self-contained and framework-presentational:\n * - It owns no carousel. The parent owns its own source of truth (e.g. an Embla\n * carousel or an accordion state) and maps that state onto this component's inputs.\n * - It only renders markup and emits intent through its outputs\n * (`prev`, `next`, `goTo`, `play`, `pause`).\n *\n * For the `play-pause` variant the DOM order is `play/pause -> prev -> next`, so\n * keyboard/screen-reader focus reaches the play/pause control first (accessibility\n * requirement, see FRONT-5436). For the `dots` variant the DOM order stays\n * `prev -> dots -> next`. The visual skeleton `prev -> [middle] -> next` is\n * preserved via CSS `order` on the per-slot classes.\n *\n * Styling (including the `order` rules that restore the visual layout) is provided\n * by the shared `ecl-slider-pager__*` classes shipped in `@eui/styles`.\n */\n@Component({\n selector: 'ecl-slider-pager',\n templateUrl: './ecl-slider-pager.component.html',\n host: {\n '[class]': 'cssClasses()',\n },\n imports: [\n ...EUI_ECL_ICON,\n TranslatePipe,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclSliderPagerComponent extends ECLBaseDirective implements OnDestroy {\n\n /** Size of the prev/next (and play/pause) buttons. */\n readonly size = input<'s' | 'm' | 'l'>('s');\n\n /**\n * Which controls to render:\n * - `'dots'`: prev / dots / next.\n * - `'play-pause'`: play-pause / prev / next.\n * - `'play-pause-dots'`: play-pause / prev / dots / next. Used by the carousel,\n * which shows play/pause + teasers on desktop and the dots strip on mobile\n * (the ECL CSS toggles which parts are visible per breakpoint).\n */\n readonly variant = input<'dots' | 'play-pause' | 'play-pause-dots'>('dots');\n\n /** Whether playback is currently active (controls play/pause visibility). */\n readonly isPlaying = input<boolean>(false);\n\n /** Whether the previous button is disabled. */\n readonly isPrevDisabled = input<boolean>(false);\n\n /** Whether the next button is disabled. */\n readonly isNextDisabled = input<boolean>(false);\n\n /** Index of the currently active dot. */\n readonly activeIndex = input<number>(0);\n\n /** Indices of the dots to render. Length determines the number of dots. */\n readonly dotIndices = input<number[]>([]);\n\n /**\n * Accessible label for each dot, indexed by dot index.\n * The parent is responsible for computing these (e.g. \"Show slides 1 to 3 of 5\"),\n * since the wording depends on the parent's slide grouping and translations.\n */\n readonly dotAriaLabels = input<string[]>([]);\n\n /**\n * Component-scoped extra classes applied per slot, alongside the shared\n * `ecl-slider-pager__*` classes. Consumers use these to attach their own\n * BEM classes (e.g. `ecl-story-card__next`) so component-specific styles in\n * `@eui/styles` can target a given slot.\n */\n readonly prevExtraClasses = input<string>('');\n readonly nextExtraClasses = input<string>('');\n readonly dotsExtraClasses = input<string>('');\n readonly dotExtraClasses = input<string>('');\n readonly playExtraClasses = input<string>('');\n readonly pauseExtraClasses = input<string>('');\n\n /** Emitted when the previous button is activated. */\n readonly prev = output<void>();\n\n /** Emitted when the next button is activated. */\n readonly next = output<void>();\n\n /** Emitted when a dot is activated. Payload is the dot index. */\n readonly goTo = output<number>();\n\n /** Emitted when the play button is activated. */\n readonly play = output<void>();\n\n /** Emitted when the pause button is activated. */\n readonly pause = output<void>();\n\n /**\n * Whether the pager is in its compact (narrow) layout, where prev/next\n * collapse to icon-only. Driven by observing the component's own width.\n */\n protected readonly isCompact = signal(false);\n\n protected readonly cssClasses = computed(() => super.getCssClasses('ecl-slider-pager'));\n\n /** Resolved icon size derived from the button size. */\n protected readonly iconSize = computed(() => (this.size() === 'l' ? 'l' : 'm'));\n\n /**\n * Whether prev/next render icon-only.\n * The `play-pause` variant (e.g. story-card grid controls) is always icon-only.\n * The `dots` variant (e.g. quiz) shows text labels at wide widths and collapses\n * to icon-only when compact.\n */\n protected readonly isPrevNextIconOnly = computed(\n () => this.variant() !== 'dots' || this.isCompact(),\n );\n\n /** Whether to render the play/pause buttons. */\n protected readonly showPlayPause = computed(() => this.variant() !== 'dots');\n\n /** Whether to render the dots navigation strip. */\n protected readonly showDots = computed(() => this.variant() !== 'play-pause');\n\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private resizeObserver?: ResizeObserver;\n\n constructor() {\n super();\n afterNextRender(() => {\n const host = this.hostRef.nativeElement;\n this.updateCompact(host.offsetWidth);\n\n if (typeof ResizeObserver !== 'undefined') {\n this.resizeObserver = new ResizeObserver((entries) => {\n this.updateCompact(entries[0].contentRect.width);\n });\n this.resizeObserver.observe(host);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n /** Handle a click on the previous button. */\n protected onPrevClick(): void {\n this.prev.emit();\n }\n\n /** Handle a click on the next button. */\n protected onNextClick(): void {\n this.next.emit();\n }\n\n /** Handle a click on a dot. */\n protected onDotClick(dotIndex: number): void {\n this.goTo.emit(dotIndex);\n }\n\n /** Handle a click on the play button. */\n protected onPlayClick(): void {\n this.play.emit();\n }\n\n /** Handle a click on the pause button. */\n protected onPauseClick(): void {\n this.pause.emit();\n }\n\n /** Update the compact state from the observed width. */\n private updateCompact(width: number): void {\n this.isCompact.set(width < COMPACT_BREAKPOINT);\n }\n}\n","@if (showPlayPause()) {\n<!-- Play button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-button--icon-only ecl-slider-pager__play\"\n [class]=\"playExtraClasses()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [style.display]=\"isPlaying() ? 'none' : 'flex'\"\n (click)=\"onPlayClick()\"\n [attr.aria-label]=\"'ecl.slider.PLAY' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.PLAY' | translate }}</span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"play\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n\n<!-- Pause button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-button--icon-only ecl-slider-pager__pause\"\n [class]=\"pauseExtraClasses()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [style.display]=\"isPlaying() ? 'flex' : 'none'\"\n (click)=\"onPauseClick()\"\n [attr.aria-label]=\"'ecl.slider.PAUSE' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.PAUSE' | translate }}</span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"pause\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n}\n\n<!-- Prev button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-slider-pager__prev\"\n [class]=\"prevExtraClasses()\"\n [class.ecl-button--icon-only]=\"isPrevNextIconOnly()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [disabled]=\"isPrevDisabled()\"\n (click)=\"onPrevClick()\"\n [attr.aria-label]=\"'ecl.slider.PREVIOUS' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.PREVIOUS' | translate }}</span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-left\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n\n@if (showDots()) {\n<!-- Dots -->\n<div class=\"ecl-slider-pager__dots\" [class]=\"dotsExtraClasses()\">\n @for (dotIndex of dotIndices(); track dotIndex) {\n <button\n type=\"button\"\n class=\"ecl-slider-pager__dot\"\n [class]=\"dotExtraClasses()\"\n [class.ecl-slider-pager__dot--active]=\"dotIndex === activeIndex()\"\n [class.is-prev]=\"dotIndex === activeIndex() - 1\"\n [attr.aria-current]=\"dotIndex === activeIndex() ? 'true' : null\"\n [attr.aria-label]=\"dotAriaLabels()[dotIndex]\"\n (click)=\"onDotClick(dotIndex)\">\n </button>\n }\n</div>\n}\n\n<!-- Next button -->\n<button\n type=\"button\"\n class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-slider-pager__next\"\n [class]=\"nextExtraClasses()\"\n [class.ecl-button--icon-only]=\"isPrevNextIconOnly()\"\n [class.ecl-button--s]=\"size() === 's'\"\n [class.ecl-button--m]=\"size() === 'm'\"\n [class.ecl-button--l]=\"size() === 'l'\"\n [disabled]=\"isNextDisabled()\"\n (click)=\"onNextClick()\"\n [attr.aria-label]=\"'ecl.slider.NEXT' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">{{ 'ecl.slider.NEXT' | translate }}</span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-right\" [size]=\"iconSize()\"></ecl-icon>\n </span>\n</button>\n","import { EclSliderPagerComponent } from './ecl-slider-pager.component';\n\nexport * from './ecl-slider-pager.component';\n\nexport const EUI_ECL_SLIDER = [\n EclSliderPagerComponent,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|