@eui/ecl 21.3.2 → 21.3.3-snapshot-1782299250059
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 +1 -2
- package/assets/i18n-ecl/cs.json +1 -2
- package/assets/i18n-ecl/da.json +1 -2
- package/assets/i18n-ecl/de.json +1 -2
- package/assets/i18n-ecl/el.json +1 -2
- package/assets/i18n-ecl/en.json +1 -2
- package/assets/i18n-ecl/es.json +1 -2
- package/assets/i18n-ecl/et.json +66 -67
- package/assets/i18n-ecl/fi.json +47 -48
- package/assets/i18n-ecl/fr.json +1 -2
- package/assets/i18n-ecl/ga.json +3 -4
- package/assets/i18n-ecl/hr.json +59 -60
- package/assets/i18n-ecl/hu.json +1 -2
- package/assets/i18n-ecl/it.json +1 -2
- package/assets/i18n-ecl/lt.json +95 -96
- package/assets/i18n-ecl/lv.json +1 -2
- package/assets/i18n-ecl/mt.json +1 -2
- package/assets/i18n-ecl/nl.json +1 -2
- package/assets/i18n-ecl/pl.json +105 -106
- package/assets/i18n-ecl/pt.json +1 -2
- package/assets/i18n-ecl/ro.json +1 -2
- package/assets/i18n-ecl/sk.json +1 -2
- package/assets/i18n-ecl/sl.json +48 -49
- package/assets/i18n-ecl/sv.json +93 -94
- package/components/ecl-animated-numbers/package.json +4 -0
- package/components/ecl-page-summary/package.json +4 -0
- package/components/ecl-text-media/package.json +4 -0
- package/docs/changelog.html +32 -0
- package/docs/components/EclAccordionSummaryComponent.html +2 -2
- package/docs/components/EclAddToCalendarComponent.html +2 -2
- package/docs/components/EclAnimatedNumbersComponent.html +625 -0
- package/docs/components/EclAnimatedNumbersItemComponent.html +625 -0
- package/docs/components/EclAppComponent.html +2 -2
- package/docs/components/EclBannerComponent.html +2 -2
- package/docs/components/EclBlockquoteComponent.html +2 -2
- package/docs/components/EclBreadcrumbComponent.html +2 -2
- package/docs/components/EclBreadcrumbSegmentComponent.html +2 -2
- package/docs/components/EclButtonComponent.html +2 -2
- package/docs/components/EclCardBodyComponent.html +2 -2
- package/docs/components/EclCardComponent.html +2 -2
- package/docs/components/EclCarouselComponent.html +2 -2
- package/docs/components/EclCarouselItemComponent.html +2 -2
- package/docs/components/EclCategoryFilterComponent.html +2 -2
- package/docs/components/EclCategoryFilterItemComponent.html +2 -2
- package/docs/components/EclCategoryFilterListComponent.html +2 -2
- package/docs/components/EclCheckboxHelpComponent.html +2 -2
- package/docs/components/EclCheckboxLabelComponent.html +2 -2
- package/docs/components/EclContentBlockComponent.html +2 -2
- package/docs/components/EclContentItemComponent.html +2 -2
- package/docs/components/EclDateBlockComponent.html +2 -2
- package/docs/components/EclDescriptionListDefinitionComponent.html +2 -2
- package/docs/components/EclExpandableComponent.html +2 -2
- package/docs/components/EclFactFiguresComponent.html +2 -2
- package/docs/components/EclFactFiguresItemComponent.html +2 -2
- package/docs/components/EclFactFiguresViewAllComponent.html +2 -2
- package/docs/components/EclFeaturedComponent.html +2 -2
- package/docs/components/EclFeaturedItemComponent.html +2 -2
- package/docs/components/EclFeaturedItemDescriptionComponent.html +2 -2
- package/docs/components/EclFileComponent.html +2 -2
- package/docs/components/EclFileItemComponent.html +2 -2
- package/docs/components/EclFileItemsComponent.html +2 -2
- package/docs/components/EclFileTaxonomyComponent.html +2 -2
- package/docs/components/EclFormGroupComponent.html +2 -2
- package/docs/components/EclFormLabelComponent.html +2 -2
- package/docs/components/EclGalleryComponent.html +2 -2
- package/docs/components/EclGalleryFooterComponent.html +2 -2
- package/docs/components/EclGalleryItemComponent.html +2 -2
- package/docs/components/EclIconComponent.html +2 -2
- package/docs/components/EclIndicatorComponent-1.html +2 -2
- package/docs/components/EclIndicatorComponent.html +2 -2
- package/docs/components/EclInpageNavigationComponent.html +2 -2
- package/docs/components/EclInpageNavigationItemComponent.html +2 -2
- package/docs/components/EclListIllustrationComponent.html +2 -2
- package/docs/components/EclListIllustrationItemComponent.html +2 -2
- package/docs/components/EclLoadingIndicatorComponent.html +2 -2
- package/docs/components/EclMediaContainerComponent.html +189 -103
- package/docs/components/EclMegaMenuComponent.html +2 -2
- package/docs/components/EclMegaMenuFeaturedComponent.html +2 -2
- package/docs/components/EclMegaMenuInfoComponent.html +2 -2
- package/docs/components/EclMegaMenuItemComponent.html +2 -2
- package/docs/components/EclMegaMenuSubitemComponent.html +2 -2
- package/docs/components/EclMenuComponent.html +2 -2
- package/docs/components/EclMenuItemComponent.html +2 -2
- package/docs/components/EclMenuMegaComponent.html +2 -2
- package/docs/components/EclMenuMegaItemComponent.html +2 -2
- package/docs/components/EclModalBodyComponent.html +2 -2
- package/docs/components/EclModalComponent.html +2 -2
- package/docs/components/EclModalFooterComponent.html +2 -2
- package/docs/components/EclModalHeaderComponent.html +2 -2
- package/docs/components/EclMultiselectComponent.html +2 -2
- package/docs/components/EclMultiselectDropdownComponent.html +2 -2
- package/docs/components/EclMultiselectInputComponent.html +2 -2
- package/docs/components/EclMultiselectOptgroupComponent.html +2 -2
- package/docs/components/EclMultiselectOptionComponent.html +2 -2
- package/docs/components/EclNavigationListComponent.html +2 -2
- package/docs/components/EclNavigationListItemComponent.html +2 -2
- package/docs/components/EclNewsTickerComponent.html +2 -2
- package/docs/components/EclNewsTickerItemComponent.html +2 -2
- package/docs/components/EclNotificationComponent.html +2 -2
- package/docs/components/EclPageHeaderComponent.html +2 -2
- package/docs/components/EclPageHeaderDescriptionContainerComponent.html +2 -2
- package/docs/components/EclPageHeaderExpandableComponent.html +2 -2
- package/docs/components/EclPageHeaderNextComponent.html +2 -2
- package/docs/components/EclPageHeaderSectionComponent.html +2 -2
- package/docs/components/EclPageHeaderSectionInfoComponent.html +2 -2
- package/docs/components/EclPageSummaryComponent.html +364 -0
- package/docs/components/EclPaginationComponent.html +2 -2
- package/docs/components/EclPaginationItemComponent.html +2 -2
- package/docs/components/EclPopoverComponent.html +2 -2
- package/docs/components/EclQuizCardComponent.html +71 -402
- package/docs/components/EclQuizComponent.html +10 -137
- package/docs/components/EclRadioHelpComponent.html +2 -2
- package/docs/components/EclRadioLabelComponent.html +2 -2
- package/docs/components/EclRangeBubbleComponent.html +2 -2
- package/docs/components/EclRangeValueComponent.html +2 -2
- package/docs/components/EclRatingFieldComponent.html +2 -2
- package/docs/components/EclSearchFormComponent.html +2 -2
- package/docs/components/EclSelectContainerComponent.html +2 -2
- package/docs/components/EclSiteFooterComponent.html +2 -10
- package/docs/components/EclSiteFooterCoownerComponent.html +2 -2
- package/docs/components/EclSiteFooterCoreComponent.html +2 -2
- package/docs/components/EclSiteFooterFixedContentEUComponent.html +2 -2
- package/docs/components/EclSiteFooterRowCommonComponent.html +2 -2
- package/docs/components/EclSiteHeaderActionComponent.html +2 -2
- package/docs/components/EclSiteHeaderBannerTopComponent.html +2 -2
- package/docs/components/EclSiteHeaderComponent.html +2 -2
- package/docs/components/EclSiteHeaderCustomActionComponent.html +2 -2
- package/docs/components/EclSiteHeaderEnvironmentComponent.html +2 -2
- package/docs/components/EclSiteHeaderLanguageComponent.html +2 -2
- package/docs/components/EclSiteHeaderLanguagePopoverComponent.html +2 -2
- package/docs/components/EclSiteHeaderLoginComponent.html +2 -2
- package/docs/components/EclSiteHeaderNotificationComponent.html +2 -2
- package/docs/components/EclSiteHeaderSearchComponent.html +2 -2
- package/docs/components/EclSocialMediaFollowComponent.html +2 -2
- package/docs/components/EclSocialMediaFollowItemComponent.html +2 -2
- package/docs/components/EclSplashPageComponent.html +2 -2
- package/docs/components/EclSplashPageLanguageCategoryComponent.html +2 -2
- package/docs/components/EclSplashPageLanguageContainerComponent.html +2 -2
- package/docs/components/EclSplashPageLanguageLinkComponent.html +2 -2
- package/docs/components/EclSpotlightComponent.html +2 -2
- package/docs/components/EclSpotlightLinkComponent.html +2 -2
- package/docs/components/EclStickyContainerComponent.html +2 -2
- package/docs/components/EclTabComponent.html +2 -2
- package/docs/components/EclTabLabelComponent.html +2 -2
- package/docs/components/EclTableSortButtonComponent.html +2 -2
- package/docs/components/EclTabsComponent.html +2 -2
- package/docs/components/EclTagComponent.html +2 -2
- package/docs/components/EclTextMediaComponent.html +569 -0
- package/docs/components/EclTimelineComponent.html +2 -2
- package/docs/components/EclTimelineItemComponent.html +2 -2
- package/docs/components/EclTimelineItemTogglerComponent.html +2 -2
- package/docs/directives/EclAnimatedNumbersIconDirective.html +261 -0
- package/docs/directives/EclAnimatedNumbersItemsDirective.html +263 -0
- package/docs/directives/EclAnimatedNumbersSourceDirective.html +261 -0
- package/docs/directives/EclAnimatedNumbersSourcesItemDirective.html +263 -0
- package/docs/directives/EclAnimatedNumbersSourcesListDirective.html +263 -0
- package/docs/directives/EclPageInformationDirective.html +6 -130
- package/docs/directives/EclQuizListDirective.html +365 -0
- package/docs/directives/EclTextMediaContainerDirective.html +260 -0
- package/docs/directives/EclTextMediaDescriptionDirective.html +260 -0
- package/docs/directives/EclTextMediaLinkDirective.html +260 -0
- package/docs/directives/EclTextMediaMediaAnchorDirective.html +313 -0
- package/docs/directives/EclTextMediaMicroTitleDirective.html +260 -0
- package/docs/directives/EclTextMediaTitleDirective.html +260 -0
- package/docs/js/menu-wc.js +48 -0
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/docs/json/EclAccordionDirective.md +1 -0
- package/docs/json/EclAnimatedNumbersComponent.md +34 -0
- package/docs/json/EclAnimatedNumbersIconDirective.md +14 -0
- package/docs/json/EclAnimatedNumbersItemComponent.md +33 -0
- package/docs/json/EclAnimatedNumbersItemsDirective.md +16 -0
- package/docs/json/EclAnimatedNumbersSourceDirective.md +14 -0
- package/docs/json/EclAnimatedNumbersSourcesItemDirective.md +16 -0
- package/docs/json/EclAnimatedNumbersSourcesListDirective.md +16 -0
- package/docs/json/EclMediaContainerComponent.md +1 -0
- package/docs/json/EclPageSummaryComponent.md +12 -0
- package/docs/json/EclQuizCardComponent.md +2 -3
- package/docs/json/EclQuizComponent.md +1 -1
- package/docs/json/EclQuizListDirective.md +8 -0
- package/docs/json/EclTextMediaComponent.md +18 -0
- package/docs/json/EclTextMediaContainerDirective.md +10 -0
- package/docs/json/EclTextMediaDescriptionDirective.md +10 -0
- package/docs/json/EclTextMediaLinkDirective.md +10 -0
- package/docs/json/EclTextMediaMediaAnchorDirective.md +17 -0
- package/docs/json/EclTextMediaMicroTitleDirective.md +10 -0
- package/docs/json/EclTextMediaTitleDirective.md +10 -0
- package/docs/json/documentation.json +1252 -493
- package/docs/miscellaneous/variables.html +115 -0
- package/docs/overview.html +2 -2
- package/docs/properties.html +1 -1
- package/fesm2022/eui-ecl-components-ecl-accordion.mjs +1 -0
- package/fesm2022/eui-ecl-components-ecl-accordion.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-animated-numbers.mjs +359 -0
- package/fesm2022/eui-ecl-components-ecl-animated-numbers.mjs.map +1 -0
- package/fesm2022/eui-ecl-components-ecl-link.mjs +6 -1
- package/fesm2022/eui-ecl-components-ecl-link.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-media-container.mjs +57 -27
- package/fesm2022/eui-ecl-components-ecl-media-container.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-page-information.mjs +6 -14
- package/fesm2022/eui-ecl-components-ecl-page-information.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-page-summary.mjs +30 -0
- package/fesm2022/eui-ecl-components-ecl-page-summary.mjs.map +1 -0
- package/fesm2022/eui-ecl-components-ecl-quiz.mjs +63 -87
- package/fesm2022/eui-ecl-components-ecl-quiz.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-site-footer.mjs +4 -4
- package/fesm2022/eui-ecl-components-ecl-site-footer.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-text-media.mjs +161 -0
- package/fesm2022/eui-ecl-components-ecl-text-media.mjs.map +1 -0
- package/package.json +14 -2
- package/types/eui-ecl-components-ecl-accordion.d.ts +1 -0
- package/types/eui-ecl-components-ecl-accordion.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-animated-numbers.d.ts +165 -0
- package/types/eui-ecl-components-ecl-animated-numbers.d.ts.map +1 -0
- package/types/eui-ecl-components-ecl-link.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-media-container.d.ts +19 -4
- package/types/eui-ecl-components-ecl-media-container.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-page-information.d.ts +0 -6
- package/types/eui-ecl-components-ecl-page-information.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-page-summary.d.ts +13 -0
- package/types/eui-ecl-components-ecl-page-summary.d.ts.map +1 -0
- package/types/eui-ecl-components-ecl-quiz.d.ts +27 -23
- package/types/eui-ecl-components-ecl-quiz.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-site-footer.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-text-media.d.ts +69 -0
- package/types/eui-ecl-components-ecl-text-media.d.ts.map +1 -0
|
@@ -979,12 +979,12 @@
|
|
|
979
979
|
},
|
|
980
980
|
{
|
|
981
981
|
"name": "EclQuizCardFlipEvent",
|
|
982
|
-
"id": "interface-EclQuizCardFlipEvent-
|
|
982
|
+
"id": "interface-EclQuizCardFlipEvent-c83d2d56d26ae6cb98cf5e5e2b544d7a1c282f5d1aa889b465ee7425fdfc3f5191cf19aa4202e2ff0f62e0e7a4554e2107c3e7593ec0e632d1f08916a0821c2c",
|
|
983
983
|
"file": "packages/ecl/components/ecl-quiz/ecl-quiz-card.component.ts",
|
|
984
984
|
"deprecated": false,
|
|
985
985
|
"deprecationMessage": "",
|
|
986
986
|
"type": "interface",
|
|
987
|
-
"sourceCode": "import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n
|
|
987
|
+
"sourceCode": "import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\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 { TranslateModule } from '@ngx-translate/core';\n\nexport interface EclQuizCardFlipEvent {\n flipped: boolean;\n selectedOptionIndex?: number;\n isCorrect?: boolean;\n}\n\n@Directive({\n selector: 'ol[eclQuizList]',\n})\nexport class EclQuizListDirective {\n @HostBinding('class.ecl-quiz__list') hasClass = true;\n}\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, TranslateModule],\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 * Unique identifier for the question element.\n */\n questionId = computed(() => `${this.id()}-question`);\n\n /**\n * Unique identifier for the answer element.\n */\n answerId = computed(() => `${this.id()}-answer`);\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 variant: 'poll' | 'reveal' = 'reveal';\n\n /**\n * Options for the poll variant. Each option has text and a match flag.\n */\n options = input<Array<{ text: string; match: boolean }>>([]);\n\n /**\n * Emitted when the card is flipped.\n */\n @Output() cardFlip = new EventEmitter<EclQuizCardFlipEvent>();\n\n @ViewChild('frontElement') frontElementRef: ElementRef;\n @ViewChild('backElement') backElementRef: ElementRef;\n @ViewChild('questionElement') questionElementRef: ElementRef;\n @ViewChild('answerElement') answerElementRef: ElementRef;\n @ViewChild('contentElement') contentElementRef: ElementRef;\n\n /** Whether the card is currently flipped (showing back). */\n isFlipped = signal(false);\n\n /** Index of the selected option (poll variant). */\n selectedOptionIndex = signal<number | null>(null);\n\n /** Whether the selected option is correct (poll variant). */\n isCorrect = signal<boolean | null>(null);\n\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-quiz-card'),\n this.isFlipped() ? 'ecl-quiz-card__flipped' : '',\n ]\n .join(' ')\n .trim();\n }\n\n get tabIndex(): number | null {\n return this.variant === 'reveal' ? 0 : null;\n }\n\n readonly styleTransform = 'translate3d(0px, 0px, 0px)';\n\n /**\n * Handle click on the card itself (reveal variant).\n */\n 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 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 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 }\n\n /**\n * Handle keyboard on option (poll variant).\n */\n 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 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 /** 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 the resolved icon name based on variant. */\n 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 getIconSize(): string {\n return this.iconSize() || (this.variant === 'poll' ? '2xl' : 'xl');\n }\n}\n",
|
|
988
988
|
"properties": [
|
|
989
989
|
{
|
|
990
990
|
"name": "flipped",
|
|
@@ -994,7 +994,7 @@
|
|
|
994
994
|
"indexKey": "",
|
|
995
995
|
"optional": false,
|
|
996
996
|
"description": "",
|
|
997
|
-
"line":
|
|
997
|
+
"line": 20
|
|
998
998
|
},
|
|
999
999
|
{
|
|
1000
1000
|
"name": "isCorrect",
|
|
@@ -1004,7 +1004,7 @@
|
|
|
1004
1004
|
"indexKey": "",
|
|
1005
1005
|
"optional": true,
|
|
1006
1006
|
"description": "",
|
|
1007
|
-
"line":
|
|
1007
|
+
"line": 22
|
|
1008
1008
|
},
|
|
1009
1009
|
{
|
|
1010
1010
|
"name": "selectedOptionIndex",
|
|
@@ -1014,7 +1014,7 @@
|
|
|
1014
1014
|
"indexKey": "",
|
|
1015
1015
|
"optional": true,
|
|
1016
1016
|
"description": "",
|
|
1017
|
-
"line":
|
|
1017
|
+
"line": 21
|
|
1018
1018
|
}
|
|
1019
1019
|
],
|
|
1020
1020
|
"indexSignatures": [],
|
|
@@ -7147,12 +7147,12 @@
|
|
|
7147
7147
|
},
|
|
7148
7148
|
{
|
|
7149
7149
|
"name": "EclAccordionDirective",
|
|
7150
|
-
"id": "directive-EclAccordionDirective-
|
|
7150
|
+
"id": "directive-EclAccordionDirective-0eaae7d7f9fb48ff11cee200605bda711957b49c1482425a374ac862f2c481d4c3fcbc5a3150acfb59172fb052229ca4d1b38f155ad90428296fd390d0dc90bd",
|
|
7151
7151
|
"file": "packages/ecl/components/ecl-accordion/ecl-accordion.directive.ts",
|
|
7152
7152
|
"type": "directive",
|
|
7153
7153
|
"description": "<p>Accordion component that manages the expansion and collapsing state of accordion items.\nUses the <code>ECLBaseDirective</code> to apply appropriate CSS classes and manage the visual styling.</p>\n<p>This is the main component for the accordion container, responsible for managing the expansion\nof individual items within the accordion. It provides the functionality to group and organize content\nin expandable sections.</p>\n<b>Example :</b><div><pre class=\"line-numbers\"><code class=\"language-none\"> The main class is `ecl-accordion`, which can be extended with additional classes.</code></pre></div>",
|
|
7154
|
-
"rawdescription": "\n\nAccordion component that manages the expansion and collapsing state of accordion items.\nUses the `ECLBaseDirective` to apply appropriate CSS classes and manage the visual styling.\n\nThis is the main component for the accordion container, responsible for managing the expansion\nof individual items within the accordion. It provides the functionality to group and organize content\nin expandable sections.\n\n The main class is `ecl-accordion`, which can be extended with additional classes.\n",
|
|
7155
|
-
"sourceCode": "import {\n afterNextRender,\n ContentChildren,\n Directive,\n ElementRef,\n forwardRef,\n HostBinding,\n inject,\n QueryList,\n Renderer2\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport { EclAccordionItemDirective } from './ecl-accordion-item-new.directive';\n\n/**\n * Accordion component that manages the expansion and collapsing state of accordion items.\n * Uses the `ECLBaseDirective` to apply appropriate CSS classes and manage the visual styling.\n *\n * @description\n * This is the main component for the accordion container, responsible for managing the expansion\n * of individual items within the accordion. It provides the functionality to group and organize content\n * in expandable sections.\n *\n * @property {string} cssClasses - Returns a string of CSS classes applied to the host element.\n * The main class is `ecl-accordion`, which can be extended with additional classes.\n */\n@Directive({\n selector: 'div[eclAccordion]',\n hostDirectives: [\n {\n directive: ECLBaseDirective,\n },\n ],\n})\nexport class EclAccordionDirective {\n baseDirective = inject(ECLBaseDirective);\n private renderer = inject(Renderer2);\n\n @ContentChildren(forwardRef(() => EclAccordionItemDirective), { read: ElementRef })\n items!: QueryList<ElementRef>;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n\n /**\n * @description\n * Retrieves and returns the CSS classes for the component based on its current state.\n * Uses `baseDirective` to fetch the appropriate CSS classes.\n *\n * @returns {string} - A string of CSS class names.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [this.baseDirective.getCssClasses('ecl-accordion')].join(' ').trim();\n }\n\n constructor() {\n afterNextRender(() => {\n this.setFirstAndLastClasses();\n this.items.changes\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.setFirstAndLastClasses());\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n private setFirstAndLastClasses(): void {\n const elements = this.items.toArray();\n\n if (elements.length === 0) return;\n\n elements.forEach((el) => {\n this.renderer.removeClass(el.nativeElement, 'is-first');\n this.renderer.removeClass(el.nativeElement, 'is-last');\n });\n\n this.renderer.addClass(elements[0].nativeElement, 'is-first');\n this.renderer.addClass(elements[elements.length - 1].nativeElement, 'is-last');\n }\n}\n",
|
|
7154
|
+
"rawdescription": "\n\nAccordion component that manages the expansion and collapsing state of accordion items.\nUses the `ECLBaseDirective` to apply appropriate CSS classes and manage the visual styling.\n\nThis is the main component for the accordion container, responsible for managing the expansion\nof individual items within the accordion. It provides the functionality to group and organize content\nin expandable sections.\n\n The main class is `ecl-accordion`, which can be extended with additional classes.\n\n",
|
|
7155
|
+
"sourceCode": "import {\n afterNextRender,\n ContentChildren,\n Directive,\n ElementRef,\n forwardRef,\n HostBinding,\n inject,\n QueryList,\n Renderer2\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport { EclAccordionItemDirective } from './ecl-accordion-item-new.directive';\n\n/**\n * Accordion component that manages the expansion and collapsing state of accordion items.\n * Uses the `ECLBaseDirective` to apply appropriate CSS classes and manage the visual styling.\n *\n * @description\n * This is the main component for the accordion container, responsible for managing the expansion\n * of individual items within the accordion. It provides the functionality to group and organize content\n * in expandable sections.\n *\n * @property {string} cssClasses - Returns a string of CSS classes applied to the host element.\n * The main class is `ecl-accordion`, which can be extended with additional classes.\n *\n */\n@Directive({\n selector: 'div[eclAccordion]',\n hostDirectives: [\n {\n directive: ECLBaseDirective,\n },\n ],\n})\nexport class EclAccordionDirective {\n baseDirective = inject(ECLBaseDirective);\n private renderer = inject(Renderer2);\n\n @ContentChildren(forwardRef(() => EclAccordionItemDirective), { read: ElementRef })\n items!: QueryList<ElementRef>;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n\n /**\n * @description\n * Retrieves and returns the CSS classes for the component based on its current state.\n * Uses `baseDirective` to fetch the appropriate CSS classes.\n *\n * @returns {string} - A string of CSS class names.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [this.baseDirective.getCssClasses('ecl-accordion')].join(' ').trim();\n }\n\n constructor() {\n afterNextRender(() => {\n this.setFirstAndLastClasses();\n this.items.changes\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.setFirstAndLastClasses());\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n private setFirstAndLastClasses(): void {\n const elements = this.items.toArray();\n\n if (elements.length === 0) return;\n\n elements.forEach((el) => {\n this.renderer.removeClass(el.nativeElement, 'is-first');\n this.renderer.removeClass(el.nativeElement, 'is-last');\n });\n\n this.renderer.addClass(elements[0].nativeElement, 'is-first');\n this.renderer.addClass(elements[elements.length - 1].nativeElement, 'is-last');\n }\n}\n",
|
|
7156
7156
|
"selector": "div[eclAccordion]",
|
|
7157
7157
|
"providers": [],
|
|
7158
7158
|
"hostDirectives": [
|
|
@@ -7174,16 +7174,16 @@
|
|
|
7174
7174
|
"deprecationMessage": "",
|
|
7175
7175
|
"jsdoctags": [
|
|
7176
7176
|
{
|
|
7177
|
-
"pos":
|
|
7178
|
-
"end":
|
|
7177
|
+
"pos": 1488,
|
|
7178
|
+
"end": 1672,
|
|
7179
7179
|
"kind": 328,
|
|
7180
7180
|
"id": 0,
|
|
7181
7181
|
"flags": 16842752,
|
|
7182
7182
|
"modifierFlagsCache": 0,
|
|
7183
7183
|
"transformFlags": 0,
|
|
7184
7184
|
"tagName": {
|
|
7185
|
-
"pos":
|
|
7186
|
-
"end":
|
|
7185
|
+
"pos": 1489,
|
|
7186
|
+
"end": 1500,
|
|
7187
7187
|
"kind": 80,
|
|
7188
7188
|
"id": 0,
|
|
7189
7189
|
"flags": 16842752,
|
|
@@ -7193,16 +7193,16 @@
|
|
|
7193
7193
|
"comment": "<p>Retrieves and returns the CSS classes for the component based on its current state.\nUses <code>baseDirective</code> to fetch the appropriate CSS classes.</p>\n"
|
|
7194
7194
|
},
|
|
7195
7195
|
{
|
|
7196
|
-
"pos":
|
|
7197
|
-
"end":
|
|
7196
|
+
"pos": 1672,
|
|
7197
|
+
"end": 1726,
|
|
7198
7198
|
"kind": 343,
|
|
7199
7199
|
"id": 0,
|
|
7200
7200
|
"flags": 16842752,
|
|
7201
7201
|
"modifierFlagsCache": 0,
|
|
7202
7202
|
"transformFlags": 0,
|
|
7203
7203
|
"tagName": {
|
|
7204
|
-
"pos":
|
|
7205
|
-
"end":
|
|
7204
|
+
"pos": 1673,
|
|
7205
|
+
"end": 1680,
|
|
7206
7206
|
"kind": 80,
|
|
7207
7207
|
"id": 0,
|
|
7208
7208
|
"flags": 16842752,
|
|
@@ -7211,16 +7211,16 @@
|
|
|
7211
7211
|
},
|
|
7212
7212
|
"comment": "<ul>\n<li>A string of CSS class names.</li>\n</ul>\n",
|
|
7213
7213
|
"typeExpression": {
|
|
7214
|
-
"pos":
|
|
7215
|
-
"end":
|
|
7214
|
+
"pos": 1681,
|
|
7215
|
+
"end": 1689,
|
|
7216
7216
|
"kind": 310,
|
|
7217
7217
|
"id": 0,
|
|
7218
7218
|
"flags": 16842752,
|
|
7219
7219
|
"modifierFlagsCache": 0,
|
|
7220
7220
|
"transformFlags": 0,
|
|
7221
7221
|
"type": {
|
|
7222
|
-
"pos":
|
|
7223
|
-
"end":
|
|
7222
|
+
"pos": 1682,
|
|
7223
|
+
"end": 1688,
|
|
7224
7224
|
"kind": 154,
|
|
7225
7225
|
"id": 0,
|
|
7226
7226
|
"flags": 16777216,
|
|
@@ -7231,7 +7231,7 @@
|
|
|
7231
7231
|
],
|
|
7232
7232
|
"rawdescription": "\n\nRetrieves and returns the CSS classes for the component based on its current state.\nUses `baseDirective` to fetch the appropriate CSS classes.\n\n",
|
|
7233
7233
|
"description": "<p>Retrieves and returns the CSS classes for the component based on its current state.\nUses <code>baseDirective</code> to fetch the appropriate CSS classes.</p>\n",
|
|
7234
|
-
"line":
|
|
7234
|
+
"line": 53,
|
|
7235
7235
|
"type": "string",
|
|
7236
7236
|
"decorators": []
|
|
7237
7237
|
}
|
|
@@ -7247,7 +7247,7 @@
|
|
|
7247
7247
|
"indexKey": "",
|
|
7248
7248
|
"optional": false,
|
|
7249
7249
|
"description": "",
|
|
7250
|
-
"line":
|
|
7250
|
+
"line": 38
|
|
7251
7251
|
},
|
|
7252
7252
|
{
|
|
7253
7253
|
"name": "items",
|
|
@@ -7257,7 +7257,7 @@
|
|
|
7257
7257
|
"indexKey": "",
|
|
7258
7258
|
"optional": false,
|
|
7259
7259
|
"description": "",
|
|
7260
|
-
"line":
|
|
7260
|
+
"line": 42,
|
|
7261
7261
|
"decorators": [
|
|
7262
7262
|
{
|
|
7263
7263
|
"name": "ContentChildren",
|
|
@@ -7276,7 +7276,7 @@
|
|
|
7276
7276
|
"optional": false,
|
|
7277
7277
|
"returnType": "void",
|
|
7278
7278
|
"typeParameters": [],
|
|
7279
|
-
"line":
|
|
7279
|
+
"line": 66,
|
|
7280
7280
|
"deprecated": false,
|
|
7281
7281
|
"deprecationMessage": ""
|
|
7282
7282
|
}
|
|
@@ -7288,7 +7288,7 @@
|
|
|
7288
7288
|
"deprecated": false,
|
|
7289
7289
|
"deprecationMessage": "",
|
|
7290
7290
|
"args": [],
|
|
7291
|
-
"line":
|
|
7291
|
+
"line": 55
|
|
7292
7292
|
},
|
|
7293
7293
|
"accessors": {
|
|
7294
7294
|
"cssClasses": {
|
|
@@ -7297,21 +7297,21 @@
|
|
|
7297
7297
|
"name": "cssClasses",
|
|
7298
7298
|
"type": "string",
|
|
7299
7299
|
"returnType": "string",
|
|
7300
|
-
"line":
|
|
7300
|
+
"line": 53,
|
|
7301
7301
|
"rawdescription": "\n\nRetrieves and returns the CSS classes for the component based on its current state.\nUses `baseDirective` to fetch the appropriate CSS classes.\n\n",
|
|
7302
7302
|
"description": "<p>Retrieves and returns the CSS classes for the component based on its current state.\nUses <code>baseDirective</code> to fetch the appropriate CSS classes.</p>\n",
|
|
7303
7303
|
"jsdoctags": [
|
|
7304
7304
|
{
|
|
7305
|
-
"pos":
|
|
7306
|
-
"end":
|
|
7305
|
+
"pos": 1488,
|
|
7306
|
+
"end": 1672,
|
|
7307
7307
|
"kind": 328,
|
|
7308
7308
|
"id": 0,
|
|
7309
7309
|
"flags": 16842752,
|
|
7310
7310
|
"modifierFlagsCache": 0,
|
|
7311
7311
|
"transformFlags": 0,
|
|
7312
7312
|
"tagName": {
|
|
7313
|
-
"pos":
|
|
7314
|
-
"end":
|
|
7313
|
+
"pos": 1489,
|
|
7314
|
+
"end": 1500,
|
|
7315
7315
|
"kind": 80,
|
|
7316
7316
|
"id": 0,
|
|
7317
7317
|
"flags": 16842752,
|
|
@@ -7321,16 +7321,16 @@
|
|
|
7321
7321
|
"comment": "<p>Retrieves and returns the CSS classes for the component based on its current state.\nUses <code>baseDirective</code> to fetch the appropriate CSS classes.</p>\n"
|
|
7322
7322
|
},
|
|
7323
7323
|
{
|
|
7324
|
-
"pos":
|
|
7325
|
-
"end":
|
|
7324
|
+
"pos": 1672,
|
|
7325
|
+
"end": 1726,
|
|
7326
7326
|
"kind": 343,
|
|
7327
7327
|
"id": 0,
|
|
7328
7328
|
"flags": 16842752,
|
|
7329
7329
|
"modifierFlagsCache": 0,
|
|
7330
7330
|
"transformFlags": 0,
|
|
7331
7331
|
"tagName": {
|
|
7332
|
-
"pos":
|
|
7333
|
-
"end":
|
|
7332
|
+
"pos": 1673,
|
|
7333
|
+
"end": 1680,
|
|
7334
7334
|
"kind": 80,
|
|
7335
7335
|
"id": 0,
|
|
7336
7336
|
"flags": 16842752,
|
|
@@ -7339,16 +7339,16 @@
|
|
|
7339
7339
|
},
|
|
7340
7340
|
"comment": "<ul>\n<li>A string of CSS class names.</li>\n</ul>\n",
|
|
7341
7341
|
"typeExpression": {
|
|
7342
|
-
"pos":
|
|
7343
|
-
"end":
|
|
7342
|
+
"pos": 1681,
|
|
7343
|
+
"end": 1689,
|
|
7344
7344
|
"kind": 310,
|
|
7345
7345
|
"id": 0,
|
|
7346
7346
|
"flags": 16842752,
|
|
7347
7347
|
"modifierFlagsCache": 0,
|
|
7348
7348
|
"transformFlags": 0,
|
|
7349
7349
|
"type": {
|
|
7350
|
-
"pos":
|
|
7351
|
-
"end":
|
|
7350
|
+
"pos": 1682,
|
|
7351
|
+
"end": 1688,
|
|
7352
7352
|
"kind": 154,
|
|
7353
7353
|
"id": 0,
|
|
7354
7354
|
"flags": 16777216,
|
|
@@ -7405,6 +7405,116 @@
|
|
|
7405
7405
|
"methodsClass": [],
|
|
7406
7406
|
"extends": []
|
|
7407
7407
|
},
|
|
7408
|
+
{
|
|
7409
|
+
"name": "EclAnimatedNumbersIconDirective",
|
|
7410
|
+
"id": "directive-EclAnimatedNumbersIconDirective-dbd254a0e7eb54f76e4e4320423f51f2e1239e4959291b1baad9a4b69776a2be78571ebea3496e73a41f11a3427e4f6cd0304d4b4eae0a045fc861445325a588",
|
|
7411
|
+
"file": "packages/ecl/components/ecl-animated-numbers/ecl-animated-numers-item/ecl-animated-numbers-icon.directive.ts",
|
|
7412
|
+
"type": "directive",
|
|
7413
|
+
"description": "<p>Marks an icon element as the animated number item's icon.\nApplies the <code>ecl-animated-number__icon</code> positioning class.</p>\n<b>Example :</b><div><pre class=\"line-numbers\"><code class=\"language-html\"><ecl-icon eclAnimatedNumbersIcon icon="users" iconSet="phosphor"></ecl-icon></code></pre></div>",
|
|
7414
|
+
"rawdescription": "\n\nMarks an icon element as the animated number item's icon.\nApplies the `ecl-animated-number__icon` positioning class.\n\n```html\n<ecl-icon eclAnimatedNumbersIcon icon=\"users\" iconSet=\"phosphor\"></ecl-icon>\n```",
|
|
7415
|
+
"sourceCode": "import { Directive } from '@angular/core';\n\n/**\n * Marks an icon element as the animated number item's icon.\n * Applies the `ecl-animated-number__icon` positioning class.\n *\n * @example\n * ```html\n * <ecl-icon eclAnimatedNumbersIcon icon=\"users\" iconSet=\"phosphor\"></ecl-icon>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersIcon]',\n host: {\n 'class': 'ecl-animated-number__icon',\n },\n})\nexport class EclAnimatedNumbersIconDirective {}\n",
|
|
7416
|
+
"selector": "[eclAnimatedNumbersIcon]",
|
|
7417
|
+
"providers": [],
|
|
7418
|
+
"hostDirectives": [],
|
|
7419
|
+
"standalone": false,
|
|
7420
|
+
"inputsClass": [],
|
|
7421
|
+
"outputsClass": [],
|
|
7422
|
+
"deprecated": false,
|
|
7423
|
+
"deprecationMessage": "",
|
|
7424
|
+
"hostBindings": [],
|
|
7425
|
+
"hostListeners": [],
|
|
7426
|
+
"propertiesClass": [],
|
|
7427
|
+
"methodsClass": [],
|
|
7428
|
+
"extends": []
|
|
7429
|
+
},
|
|
7430
|
+
{
|
|
7431
|
+
"name": "EclAnimatedNumbersItemsDirective",
|
|
7432
|
+
"id": "directive-EclAnimatedNumbersItemsDirective-f68aab2400cc160321a37d659a4e411280ea0a03b583be939539c9a31463ae4b464c41aab81fc80d5cd51453d34ae98ca678519c754fd652e8aedf82b1db685b",
|
|
7433
|
+
"file": "packages/ecl/components/ecl-animated-numbers/ecl-animated-numbers-list.directive.ts",
|
|
7434
|
+
"type": "directive",
|
|
7435
|
+
"description": "<p>Wraps the grid of animated number items.\nApplies the <code>ecl-animated-numbers__items</code> layout class.</p>\n<b>Example :</b><div><pre class=\"line-numbers\"><code class=\"language-html\"><div eclAnimatedNumbersItems>\n <div eclAnimatedNumbersItem ...></div>\n</div></code></pre></div>",
|
|
7436
|
+
"rawdescription": "\n\nWraps the grid of animated number items.\nApplies the `ecl-animated-numbers__items` layout class.\n\n```html\n<div eclAnimatedNumbersItems>\n <div eclAnimatedNumbersItem ...></div>\n</div>\n```",
|
|
7437
|
+
"sourceCode": "import { Directive } from \"@angular/core\";\n\n/**\n * Wraps the grid of animated number items.\n * Applies the `ecl-animated-numbers__items` layout class.\n *\n * @example\n * ```html\n * <div eclAnimatedNumbersItems>\n * <div eclAnimatedNumbersItem ...></div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersItems]',\n host: {\n class: 'ecl-animated-numbers__items',\n },\n})\nexport class EclAnimatedNumbersItemsDirective {}\n\n/**\n * Wraps the list of source links.\n * Applies the `ecl-animated-numbers__sources-list` class.\n *\n * @example\n * ```html\n * <ul eclAnimatedNumbersSourcesList>\n * <li eclAnimatedNumbersSourcesItem>...</li>\n * </ul>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSourcesList]',\n host: {\n class: 'ecl-animated-numbers__sources-list',\n },\n})\nexport class EclAnimatedNumbersSourcesListDirective {}\n\n/**\n * Marks a list item as a source entry.\n * Applies the `ecl-animated-numbers__sources-item` class.\n *\n * @example\n * ```html\n * <li eclAnimatedNumbersSourcesItem>\n * <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n * </li>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSourcesItem]',\n host: {\n class: 'ecl-animated-numbers__sources-item',\n },\n})\nexport class EclAnimatedNumbersSourcesItemDirective {}\n\n/**\n * Marks a link as a source reference within the animated numbers component.\n * Applies the `ecl-animated-numbers__source` styling class.\n *\n * @example\n * ```html\n * <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSource]',\n host: {\n class: 'ecl-animated-numbers__source',\n },\n})\nexport class EclAnimatedNumbersSourceDirective {}\n",
|
|
7438
|
+
"selector": "[eclAnimatedNumbersItems]",
|
|
7439
|
+
"providers": [],
|
|
7440
|
+
"hostDirectives": [],
|
|
7441
|
+
"standalone": false,
|
|
7442
|
+
"inputsClass": [],
|
|
7443
|
+
"outputsClass": [],
|
|
7444
|
+
"deprecated": false,
|
|
7445
|
+
"deprecationMessage": "",
|
|
7446
|
+
"hostBindings": [],
|
|
7447
|
+
"hostListeners": [],
|
|
7448
|
+
"propertiesClass": [],
|
|
7449
|
+
"methodsClass": [],
|
|
7450
|
+
"extends": []
|
|
7451
|
+
},
|
|
7452
|
+
{
|
|
7453
|
+
"name": "EclAnimatedNumbersSourceDirective",
|
|
7454
|
+
"id": "directive-EclAnimatedNumbersSourceDirective-f68aab2400cc160321a37d659a4e411280ea0a03b583be939539c9a31463ae4b464c41aab81fc80d5cd51453d34ae98ca678519c754fd652e8aedf82b1db685b",
|
|
7455
|
+
"file": "packages/ecl/components/ecl-animated-numbers/ecl-animated-numbers-list.directive.ts",
|
|
7456
|
+
"type": "directive",
|
|
7457
|
+
"description": "<p>Marks a link as a source reference within the animated numbers component.\nApplies the <code>ecl-animated-numbers__source</code> styling class.</p>\n<b>Example :</b><div><pre class=\"line-numbers\"><code class=\"language-html\"><a eclLink eclAnimatedNumbersSource href="/example">Eurostat</a></code></pre></div>",
|
|
7458
|
+
"rawdescription": "\n\nMarks a link as a source reference within the animated numbers component.\nApplies the `ecl-animated-numbers__source` styling class.\n\n```html\n<a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n```",
|
|
7459
|
+
"sourceCode": "import { Directive } from \"@angular/core\";\n\n/**\n * Wraps the grid of animated number items.\n * Applies the `ecl-animated-numbers__items` layout class.\n *\n * @example\n * ```html\n * <div eclAnimatedNumbersItems>\n * <div eclAnimatedNumbersItem ...></div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersItems]',\n host: {\n class: 'ecl-animated-numbers__items',\n },\n})\nexport class EclAnimatedNumbersItemsDirective {}\n\n/**\n * Wraps the list of source links.\n * Applies the `ecl-animated-numbers__sources-list` class.\n *\n * @example\n * ```html\n * <ul eclAnimatedNumbersSourcesList>\n * <li eclAnimatedNumbersSourcesItem>...</li>\n * </ul>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSourcesList]',\n host: {\n class: 'ecl-animated-numbers__sources-list',\n },\n})\nexport class EclAnimatedNumbersSourcesListDirective {}\n\n/**\n * Marks a list item as a source entry.\n * Applies the `ecl-animated-numbers__sources-item` class.\n *\n * @example\n * ```html\n * <li eclAnimatedNumbersSourcesItem>\n * <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n * </li>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSourcesItem]',\n host: {\n class: 'ecl-animated-numbers__sources-item',\n },\n})\nexport class EclAnimatedNumbersSourcesItemDirective {}\n\n/**\n * Marks a link as a source reference within the animated numbers component.\n * Applies the `ecl-animated-numbers__source` styling class.\n *\n * @example\n * ```html\n * <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSource]',\n host: {\n class: 'ecl-animated-numbers__source',\n },\n})\nexport class EclAnimatedNumbersSourceDirective {}\n",
|
|
7460
|
+
"selector": "[eclAnimatedNumbersSource]",
|
|
7461
|
+
"providers": [],
|
|
7462
|
+
"hostDirectives": [],
|
|
7463
|
+
"standalone": false,
|
|
7464
|
+
"inputsClass": [],
|
|
7465
|
+
"outputsClass": [],
|
|
7466
|
+
"deprecated": false,
|
|
7467
|
+
"deprecationMessage": "",
|
|
7468
|
+
"hostBindings": [],
|
|
7469
|
+
"hostListeners": [],
|
|
7470
|
+
"propertiesClass": [],
|
|
7471
|
+
"methodsClass": [],
|
|
7472
|
+
"extends": []
|
|
7473
|
+
},
|
|
7474
|
+
{
|
|
7475
|
+
"name": "EclAnimatedNumbersSourcesItemDirective",
|
|
7476
|
+
"id": "directive-EclAnimatedNumbersSourcesItemDirective-f68aab2400cc160321a37d659a4e411280ea0a03b583be939539c9a31463ae4b464c41aab81fc80d5cd51453d34ae98ca678519c754fd652e8aedf82b1db685b",
|
|
7477
|
+
"file": "packages/ecl/components/ecl-animated-numbers/ecl-animated-numbers-list.directive.ts",
|
|
7478
|
+
"type": "directive",
|
|
7479
|
+
"description": "<p>Marks a list item as a source entry.\nApplies the <code>ecl-animated-numbers__sources-item</code> class.</p>\n<b>Example :</b><div><pre class=\"line-numbers\"><code class=\"language-html\"><li eclAnimatedNumbersSourcesItem>\n <a eclLink eclAnimatedNumbersSource href="/example">Eurostat</a>\n</li></code></pre></div>",
|
|
7480
|
+
"rawdescription": "\n\nMarks a list item as a source entry.\nApplies the `ecl-animated-numbers__sources-item` class.\n\n```html\n<li eclAnimatedNumbersSourcesItem>\n <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n</li>\n```",
|
|
7481
|
+
"sourceCode": "import { Directive } from \"@angular/core\";\n\n/**\n * Wraps the grid of animated number items.\n * Applies the `ecl-animated-numbers__items` layout class.\n *\n * @example\n * ```html\n * <div eclAnimatedNumbersItems>\n * <div eclAnimatedNumbersItem ...></div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersItems]',\n host: {\n class: 'ecl-animated-numbers__items',\n },\n})\nexport class EclAnimatedNumbersItemsDirective {}\n\n/**\n * Wraps the list of source links.\n * Applies the `ecl-animated-numbers__sources-list` class.\n *\n * @example\n * ```html\n * <ul eclAnimatedNumbersSourcesList>\n * <li eclAnimatedNumbersSourcesItem>...</li>\n * </ul>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSourcesList]',\n host: {\n class: 'ecl-animated-numbers__sources-list',\n },\n})\nexport class EclAnimatedNumbersSourcesListDirective {}\n\n/**\n * Marks a list item as a source entry.\n * Applies the `ecl-animated-numbers__sources-item` class.\n *\n * @example\n * ```html\n * <li eclAnimatedNumbersSourcesItem>\n * <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n * </li>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSourcesItem]',\n host: {\n class: 'ecl-animated-numbers__sources-item',\n },\n})\nexport class EclAnimatedNumbersSourcesItemDirective {}\n\n/**\n * Marks a link as a source reference within the animated numbers component.\n * Applies the `ecl-animated-numbers__source` styling class.\n *\n * @example\n * ```html\n * <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSource]',\n host: {\n class: 'ecl-animated-numbers__source',\n },\n})\nexport class EclAnimatedNumbersSourceDirective {}\n",
|
|
7482
|
+
"selector": "[eclAnimatedNumbersSourcesItem]",
|
|
7483
|
+
"providers": [],
|
|
7484
|
+
"hostDirectives": [],
|
|
7485
|
+
"standalone": false,
|
|
7486
|
+
"inputsClass": [],
|
|
7487
|
+
"outputsClass": [],
|
|
7488
|
+
"deprecated": false,
|
|
7489
|
+
"deprecationMessage": "",
|
|
7490
|
+
"hostBindings": [],
|
|
7491
|
+
"hostListeners": [],
|
|
7492
|
+
"propertiesClass": [],
|
|
7493
|
+
"methodsClass": [],
|
|
7494
|
+
"extends": []
|
|
7495
|
+
},
|
|
7496
|
+
{
|
|
7497
|
+
"name": "EclAnimatedNumbersSourcesListDirective",
|
|
7498
|
+
"id": "directive-EclAnimatedNumbersSourcesListDirective-f68aab2400cc160321a37d659a4e411280ea0a03b583be939539c9a31463ae4b464c41aab81fc80d5cd51453d34ae98ca678519c754fd652e8aedf82b1db685b",
|
|
7499
|
+
"file": "packages/ecl/components/ecl-animated-numbers/ecl-animated-numbers-list.directive.ts",
|
|
7500
|
+
"type": "directive",
|
|
7501
|
+
"description": "<p>Wraps the list of source links.\nApplies the <code>ecl-animated-numbers__sources-list</code> class.</p>\n<b>Example :</b><div><pre class=\"line-numbers\"><code class=\"language-html\"><ul eclAnimatedNumbersSourcesList>\n <li eclAnimatedNumbersSourcesItem>...</li>\n</ul></code></pre></div>",
|
|
7502
|
+
"rawdescription": "\n\nWraps the list of source links.\nApplies the `ecl-animated-numbers__sources-list` class.\n\n```html\n<ul eclAnimatedNumbersSourcesList>\n <li eclAnimatedNumbersSourcesItem>...</li>\n</ul>\n```",
|
|
7503
|
+
"sourceCode": "import { Directive } from \"@angular/core\";\n\n/**\n * Wraps the grid of animated number items.\n * Applies the `ecl-animated-numbers__items` layout class.\n *\n * @example\n * ```html\n * <div eclAnimatedNumbersItems>\n * <div eclAnimatedNumbersItem ...></div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersItems]',\n host: {\n class: 'ecl-animated-numbers__items',\n },\n})\nexport class EclAnimatedNumbersItemsDirective {}\n\n/**\n * Wraps the list of source links.\n * Applies the `ecl-animated-numbers__sources-list` class.\n *\n * @example\n * ```html\n * <ul eclAnimatedNumbersSourcesList>\n * <li eclAnimatedNumbersSourcesItem>...</li>\n * </ul>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSourcesList]',\n host: {\n class: 'ecl-animated-numbers__sources-list',\n },\n})\nexport class EclAnimatedNumbersSourcesListDirective {}\n\n/**\n * Marks a list item as a source entry.\n * Applies the `ecl-animated-numbers__sources-item` class.\n *\n * @example\n * ```html\n * <li eclAnimatedNumbersSourcesItem>\n * <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n * </li>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSourcesItem]',\n host: {\n class: 'ecl-animated-numbers__sources-item',\n },\n})\nexport class EclAnimatedNumbersSourcesItemDirective {}\n\n/**\n * Marks a link as a source reference within the animated numbers component.\n * Applies the `ecl-animated-numbers__source` styling class.\n *\n * @example\n * ```html\n * <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n * ```\n */\n@Directive({\n selector: '[eclAnimatedNumbersSource]',\n host: {\n class: 'ecl-animated-numbers__source',\n },\n})\nexport class EclAnimatedNumbersSourceDirective {}\n",
|
|
7504
|
+
"selector": "[eclAnimatedNumbersSourcesList]",
|
|
7505
|
+
"providers": [],
|
|
7506
|
+
"hostDirectives": [],
|
|
7507
|
+
"standalone": false,
|
|
7508
|
+
"inputsClass": [],
|
|
7509
|
+
"outputsClass": [],
|
|
7510
|
+
"deprecated": false,
|
|
7511
|
+
"deprecationMessage": "",
|
|
7512
|
+
"hostBindings": [],
|
|
7513
|
+
"hostListeners": [],
|
|
7514
|
+
"propertiesClass": [],
|
|
7515
|
+
"methodsClass": [],
|
|
7516
|
+
"extends": []
|
|
7517
|
+
},
|
|
7408
7518
|
{
|
|
7409
7519
|
"name": "EclBannerDescriptionDirective",
|
|
7410
7520
|
"id": "directive-EclBannerDescriptionDirective-f073afc18133e0c0900143ae670f64b225f17b78a8f570442bdfb316e4e07fc2186d724c998446f698950d7f0ee097aa4c98cf46453ad6e3937d300efee32740",
|
|
@@ -17100,12 +17210,12 @@
|
|
|
17100
17210
|
},
|
|
17101
17211
|
{
|
|
17102
17212
|
"name": "EclLinkDirective",
|
|
17103
|
-
"id": "directive-EclLinkDirective-
|
|
17213
|
+
"id": "directive-EclLinkDirective-17321394a8fa635d624bbd1ee51f06dae66cc28119015edec455f419c44803cd5d2e9c1c210dbb5db099e65e1a7b534020e120e628fb13130962301e0d2f0549",
|
|
17104
17214
|
"file": "packages/ecl/components/ecl-link/ecl-link.directive.ts",
|
|
17105
17215
|
"type": "directive",
|
|
17106
17216
|
"description": "<p>'eclLink' directive is used to add some styling to the defalt HTML anchor component. In order to comply with ECL standards.</p>\n",
|
|
17107
17217
|
"rawdescription": "\n\n'eclLink' directive is used to add some styling to the defalt HTML anchor component. In order to comply with ECL standards.\n",
|
|
17108
|
-
"sourceCode": "import { AfterContentInit, booleanAttribute, ChangeDetectorRef, contentChildren, Directive, ElementRef, HostBinding, inject, input, Renderer2, effect, computed, forwardRef } from '@angular/core';\nimport { EclIconComponent } from '@eui/ecl/components/ecl-icon';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * 'eclLink' directive is used to add some styling to the defalt HTML anchor component. In order to comply with ECL standards.\n */\n@Directive({\n selector: '[eclLink]',\n})\nexport class EclLinkDirective extends ECLBaseDirective implements AfterContentInit {\n el = inject(ElementRef);\n renderer = inject(Renderer2);\n cd = inject(ChangeDetectorRef);\n\n /**\n * Additional HTML attributes to be set on the link element.\n * Used e.g. by social-media-follow for passing extra_attributes.\n */\n extraAttributes = input<{ name: string; value?: string | null }[] | undefined>();\n\n /**\n * Property to style the component as 'inverted' (with dark background). Can be used alone or with 'standalone' variant.\n */\n isInverted = input(false, { transform: booleanAttribute });\n\n /**\n * Property to style the component if it consist only of an icon.\n */\n isIconOnly = input(false, { transform: booleanAttribute });\n\n /** Adds class for hightlighted link (works only with 'primary' variant) \n * @deprecated - to be removed in v23. Use variant='primary-highlight', as only primary variant can be highlighted.\n */\n isHighlight = input(false, { transform: booleanAttribute });\n \n /**\n * @deprecated - will be removed in v21. Deprecated on ECL side.\n */\n isNoVisited = input(false, { transform: booleanAttribute });\n\n isBranded = input(false, { transform: booleanAttribute });\n\n /**\n * With 'variant' property user can add some more specific styling to the <a> component.\n */\n variant = input<'standalone' | 'primary' | 'secondary' | 'primary-neutral' | 'primary-highlight'>();\n\n eclIconComponents = contentChildren(forwardRef(() => EclIconComponent), { descendants: true });\n\n constructor() {\n super();\n effect(() => {\n const attrs = this.extraAttributes();\n if (attrs && attrs.length) {\n attrs.forEach((attr) => {\n if (attr?.name) {\n this.el.nativeElement.setAttribute(attr.name, attr.value ?? '');\n }\n });\n }\n });\n }\n\n @HostBinding('class.ecl-link--inverted')\n get hostIsInverted(): boolean {\n return (!this.variant() || this.variant() === 'standalone') && this.isInverted();\n }\n\n @HostBinding('class.ecl-link--brand')\n get hostIsBranded(): boolean {\n return (!this.variant() || this.variant() === 'standalone') && this.isBranded();\n }\n\n @HostBinding('class.ecl-link--icon-only')\n get hostIsIconOnly(): boolean {\n return this.isIconOnly();\n }\n\n @HostBinding('class.ecl-link--icon')\n get hasIcon(): boolean {\n return this._hasIcon();\n }\n\n private _hasIcon = computed(() => {\n return this.eclIconComponents()?.length > 0;\n });\n\n /**\n * Adds speific ECL classes to the <a> component.\n */\n @HostBinding('class')\n get cssClasses(): string {\n
|
|
17218
|
+
"sourceCode": "import { AfterContentInit, booleanAttribute, ChangeDetectorRef, contentChildren, Directive, ElementRef, HostBinding, inject, input, Renderer2, effect, computed, forwardRef } from '@angular/core';\nimport { EclIconComponent } from '@eui/ecl/components/ecl-icon';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * 'eclLink' directive is used to add some styling to the defalt HTML anchor component. In order to comply with ECL standards.\n */\n@Directive({\n selector: '[eclLink]',\n})\nexport class EclLinkDirective extends ECLBaseDirective implements AfterContentInit {\n el = inject(ElementRef);\n renderer = inject(Renderer2);\n cd = inject(ChangeDetectorRef);\n\n /**\n * Additional HTML attributes to be set on the link element.\n * Used e.g. by social-media-follow for passing extra_attributes.\n */\n extraAttributes = input<{ name: string; value?: string | null }[] | undefined>();\n\n /**\n * Property to style the component as 'inverted' (with dark background). Can be used alone or with 'standalone' variant.\n */\n isInverted = input(false, { transform: booleanAttribute });\n\n /**\n * Property to style the component if it consist only of an icon.\n */\n isIconOnly = input(false, { transform: booleanAttribute });\n\n /** Adds class for hightlighted link (works only with 'primary' variant) \n * @deprecated - to be removed in v23. Use variant='primary-highlight', as only primary variant can be highlighted.\n */\n isHighlight = input(false, { transform: booleanAttribute });\n \n /**\n * @deprecated - will be removed in v21. Deprecated on ECL side.\n */\n isNoVisited = input(false, { transform: booleanAttribute });\n\n isBranded = input(false, { transform: booleanAttribute });\n\n /**\n * With 'variant' property user can add some more specific styling to the <a> component.\n */\n variant = input<'standalone' | 'primary' | 'secondary' | 'primary-neutral' | 'primary-highlight'>();\n\n eclIconComponents = contentChildren(forwardRef(() => EclIconComponent), { descendants: true });\n\n constructor() {\n super();\n effect(() => {\n const attrs = this.extraAttributes();\n if (attrs && attrs.length) {\n attrs.forEach((attr) => {\n if (attr?.name) {\n this.el.nativeElement.setAttribute(attr.name, attr.value ?? '');\n }\n });\n }\n });\n }\n\n @HostBinding('class.ecl-link--inverted')\n get hostIsInverted(): boolean {\n return (!this.variant() || this.variant() === 'standalone') && this.isInverted();\n }\n\n @HostBinding('class.ecl-link--brand')\n get hostIsBranded(): boolean {\n return (!this.variant() || this.variant() === 'standalone') && this.isBranded();\n }\n\n @HostBinding('class.ecl-link--icon-only')\n get hostIsIconOnly(): boolean {\n return this.isIconOnly();\n }\n\n @HostBinding('class.ecl-link--icon')\n get hasIcon(): boolean {\n return this._hasIcon();\n }\n\n private _hasIcon = computed(() => {\n return this.eclIconComponents()?.length > 0;\n });\n\n /**\n * Adds speific ECL classes to the <a> component.\n */\n @HostBinding('class')\n get cssClasses(): string {\n const variantClass = this.variant()\n ? (this.variant() === 'secondary' && this.isInverted()\n ? 'ecl-link--secondary-inverted'\n : `ecl-link--${this.variant()}`)\n : '';\n\n return [super.getCssClasses('ecl-link'),\n variantClass,\n (this.variant() === 'primary' && this.isHighlight()) ? 'ecl-link--primary-highlight' : '',\n ].join(' ').trim();\n }\n\n ngAfterContentInit(): void {\n // Add additional class to the child icon, if any.\n if (this.eclIconComponents()?.length > 0 ) {\n setTimeout(() => {\n this.eclIconComponents().forEach((icn) => {\n icn.addExtraClass('ecl-link__icon');\n });\n this.cd.markForCheck();\n });\n }\n }\n\n /**\n * Calls the native focus() method of the default HTML element.\n */\n onFocus(): void {\n this.el.nativeElement.focus();\n }\n\n /**\n * Calls the native click() method of the default HTML element.\n */\n onClick(): void {\n this.el.nativeElement.click();\n }\n\n /**\n * Calls the native blur() method of the default HTML element.\n */\n onBlur(): void {\n this.el.nativeElement.blur();\n }\n}\n",
|
|
17109
17219
|
"selector": "[eclLink]",
|
|
17110
17220
|
"providers": [],
|
|
17111
17221
|
"hostDirectives": [],
|
|
@@ -17372,7 +17482,7 @@
|
|
|
17372
17482
|
"optional": false,
|
|
17373
17483
|
"returnType": "void",
|
|
17374
17484
|
"typeParameters": [],
|
|
17375
|
-
"line":
|
|
17485
|
+
"line": 106,
|
|
17376
17486
|
"deprecated": false,
|
|
17377
17487
|
"deprecationMessage": ""
|
|
17378
17488
|
},
|
|
@@ -17382,7 +17492,7 @@
|
|
|
17382
17492
|
"optional": false,
|
|
17383
17493
|
"returnType": "void",
|
|
17384
17494
|
"typeParameters": [],
|
|
17385
|
-
"line":
|
|
17495
|
+
"line": 135,
|
|
17386
17496
|
"deprecated": false,
|
|
17387
17497
|
"deprecationMessage": "",
|
|
17388
17498
|
"rawdescription": "\n\nCalls the native blur() method of the default HTML element.\n",
|
|
@@ -17394,7 +17504,7 @@
|
|
|
17394
17504
|
"optional": false,
|
|
17395
17505
|
"returnType": "void",
|
|
17396
17506
|
"typeParameters": [],
|
|
17397
|
-
"line":
|
|
17507
|
+
"line": 128,
|
|
17398
17508
|
"deprecated": false,
|
|
17399
17509
|
"deprecationMessage": "",
|
|
17400
17510
|
"rawdescription": "\n\nCalls the native click() method of the default HTML element.\n",
|
|
@@ -17406,7 +17516,7 @@
|
|
|
17406
17516
|
"optional": false,
|
|
17407
17517
|
"returnType": "void",
|
|
17408
17518
|
"typeParameters": [],
|
|
17409
|
-
"line":
|
|
17519
|
+
"line": 121,
|
|
17410
17520
|
"deprecated": false,
|
|
17411
17521
|
"deprecationMessage": "",
|
|
17412
17522
|
"rawdescription": "\n\nCalls the native focus() method of the default HTML element.\n",
|
|
@@ -23999,12 +24109,12 @@
|
|
|
23999
24109
|
},
|
|
24000
24110
|
{
|
|
24001
24111
|
"name": "EclPageInformationDirective",
|
|
24002
|
-
"id": "directive-EclPageInformationDirective-
|
|
24112
|
+
"id": "directive-EclPageInformationDirective-3c6a207ca2a00bf8f028f647d1379add5f9bed8a9e3c6e72eba21984e4d0b86c3c214a7fa5d40accd60969cefb4b445a78c49ad6b52c64c82692e3b4319f3d1a",
|
|
24003
24113
|
"file": "packages/ecl/components/ecl-page-information/ecl-page-information.directive.ts",
|
|
24004
24114
|
"type": "directive",
|
|
24005
24115
|
"description": "",
|
|
24006
24116
|
"rawdescription": "\n",
|
|
24007
|
-
"sourceCode": "import { Directive
|
|
24117
|
+
"sourceCode": "import { Directive } from \"@angular/core\";\n\n@Directive({\n selector: '[eclPageInformation]',\n host: {\n class: 'ecl-page-info'\n }\n})\nexport class EclPageInformationDirective {}",
|
|
24008
24118
|
"selector": "[eclPageInformation]",
|
|
24009
24119
|
"providers": [],
|
|
24010
24120
|
"hostDirectives": [],
|
|
@@ -24013,85 +24123,9 @@
|
|
|
24013
24123
|
"outputsClass": [],
|
|
24014
24124
|
"deprecated": false,
|
|
24015
24125
|
"deprecationMessage": "",
|
|
24016
|
-
"hostBindings": [
|
|
24017
|
-
{
|
|
24018
|
-
"name": "class",
|
|
24019
|
-
"defaultValue": "'ecl-page-info'",
|
|
24020
|
-
"deprecated": false,
|
|
24021
|
-
"deprecationMessage": "",
|
|
24022
|
-
"jsdoctags": [
|
|
24023
|
-
{
|
|
24024
|
-
"pos": 226,
|
|
24025
|
-
"end": 256,
|
|
24026
|
-
"kind": 328,
|
|
24027
|
-
"id": 0,
|
|
24028
|
-
"flags": 16842752,
|
|
24029
|
-
"modifierFlagsCache": 0,
|
|
24030
|
-
"transformFlags": 0,
|
|
24031
|
-
"tagName": {
|
|
24032
|
-
"pos": 227,
|
|
24033
|
-
"end": 234,
|
|
24034
|
-
"kind": 80,
|
|
24035
|
-
"id": 0,
|
|
24036
|
-
"flags": 16842752,
|
|
24037
|
-
"transformFlags": 0,
|
|
24038
|
-
"escapedText": "default"
|
|
24039
|
-
},
|
|
24040
|
-
"comment": "<p>'ecl-page-info'</p>\n"
|
|
24041
|
-
}
|
|
24042
|
-
],
|
|
24043
|
-
"rawdescription": "\n\nApplies 'ecl-page-info' class to the host.\n\n",
|
|
24044
|
-
"description": "<p>Applies 'ecl-page-info' class to the host.</p>\n",
|
|
24045
|
-
"line": 12,
|
|
24046
|
-
"type": "string",
|
|
24047
|
-
"decorators": []
|
|
24048
|
-
}
|
|
24049
|
-
],
|
|
24126
|
+
"hostBindings": [],
|
|
24050
24127
|
"hostListeners": [],
|
|
24051
|
-
"propertiesClass": [
|
|
24052
|
-
{
|
|
24053
|
-
"name": "className",
|
|
24054
|
-
"defaultValue": "'ecl-page-info'",
|
|
24055
|
-
"deprecated": false,
|
|
24056
|
-
"deprecationMessage": "",
|
|
24057
|
-
"type": "string",
|
|
24058
|
-
"indexKey": "",
|
|
24059
|
-
"optional": false,
|
|
24060
|
-
"description": "<p>Applies 'ecl-page-info' class to the host.</p>\n",
|
|
24061
|
-
"line": 12,
|
|
24062
|
-
"rawdescription": "\n\nApplies 'ecl-page-info' class to the host.\n\n",
|
|
24063
|
-
"decorators": [
|
|
24064
|
-
{
|
|
24065
|
-
"name": "HostBinding",
|
|
24066
|
-
"stringifiedArguments": "'class'"
|
|
24067
|
-
}
|
|
24068
|
-
],
|
|
24069
|
-
"modifierKind": [
|
|
24070
|
-
171
|
|
24071
|
-
],
|
|
24072
|
-
"jsdoctags": [
|
|
24073
|
-
{
|
|
24074
|
-
"pos": 226,
|
|
24075
|
-
"end": 256,
|
|
24076
|
-
"kind": 328,
|
|
24077
|
-
"id": 0,
|
|
24078
|
-
"flags": 16842752,
|
|
24079
|
-
"modifierFlagsCache": 0,
|
|
24080
|
-
"transformFlags": 0,
|
|
24081
|
-
"tagName": {
|
|
24082
|
-
"pos": 227,
|
|
24083
|
-
"end": 234,
|
|
24084
|
-
"kind": 80,
|
|
24085
|
-
"id": 0,
|
|
24086
|
-
"flags": 16842752,
|
|
24087
|
-
"transformFlags": 0,
|
|
24088
|
-
"escapedText": "default"
|
|
24089
|
-
},
|
|
24090
|
-
"comment": "<p>'ecl-page-info'</p>\n"
|
|
24091
|
-
}
|
|
24092
|
-
]
|
|
24093
|
-
}
|
|
24094
|
-
],
|
|
24128
|
+
"propertiesClass": [],
|
|
24095
24129
|
"methodsClass": [],
|
|
24096
24130
|
"extends": []
|
|
24097
24131
|
},
|
|
@@ -24687,6 +24721,59 @@
|
|
|
24687
24721
|
}
|
|
24688
24722
|
}
|
|
24689
24723
|
},
|
|
24724
|
+
{
|
|
24725
|
+
"name": "EclQuizListDirective",
|
|
24726
|
+
"id": "directive-EclQuizListDirective-c83d2d56d26ae6cb98cf5e5e2b544d7a1c282f5d1aa889b465ee7425fdfc3f5191cf19aa4202e2ff0f62e0e7a4554e2107c3e7593ec0e632d1f08916a0821c2c",
|
|
24727
|
+
"file": "packages/ecl/components/ecl-quiz/ecl-quiz-card.component.ts",
|
|
24728
|
+
"type": "directive",
|
|
24729
|
+
"description": "",
|
|
24730
|
+
"rawdescription": "\n",
|
|
24731
|
+
"sourceCode": "import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\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 { TranslateModule } from '@ngx-translate/core';\n\nexport interface EclQuizCardFlipEvent {\n flipped: boolean;\n selectedOptionIndex?: number;\n isCorrect?: boolean;\n}\n\n@Directive({\n selector: 'ol[eclQuizList]',\n})\nexport class EclQuizListDirective {\n @HostBinding('class.ecl-quiz__list') hasClass = true;\n}\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, TranslateModule],\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 * Unique identifier for the question element.\n */\n questionId = computed(() => `${this.id()}-question`);\n\n /**\n * Unique identifier for the answer element.\n */\n answerId = computed(() => `${this.id()}-answer`);\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 variant: 'poll' | 'reveal' = 'reveal';\n\n /**\n * Options for the poll variant. Each option has text and a match flag.\n */\n options = input<Array<{ text: string; match: boolean }>>([]);\n\n /**\n * Emitted when the card is flipped.\n */\n @Output() cardFlip = new EventEmitter<EclQuizCardFlipEvent>();\n\n @ViewChild('frontElement') frontElementRef: ElementRef;\n @ViewChild('backElement') backElementRef: ElementRef;\n @ViewChild('questionElement') questionElementRef: ElementRef;\n @ViewChild('answerElement') answerElementRef: ElementRef;\n @ViewChild('contentElement') contentElementRef: ElementRef;\n\n /** Whether the card is currently flipped (showing back). */\n isFlipped = signal(false);\n\n /** Index of the selected option (poll variant). */\n selectedOptionIndex = signal<number | null>(null);\n\n /** Whether the selected option is correct (poll variant). */\n isCorrect = signal<boolean | null>(null);\n\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-quiz-card'),\n this.isFlipped() ? 'ecl-quiz-card__flipped' : '',\n ]\n .join(' ')\n .trim();\n }\n\n get tabIndex(): number | null {\n return this.variant === 'reveal' ? 0 : null;\n }\n\n readonly styleTransform = 'translate3d(0px, 0px, 0px)';\n\n /**\n * Handle click on the card itself (reveal variant).\n */\n 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 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 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 }\n\n /**\n * Handle keyboard on option (poll variant).\n */\n 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 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 /** 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 the resolved icon name based on variant. */\n 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 getIconSize(): string {\n return this.iconSize() || (this.variant === 'poll' ? '2xl' : 'xl');\n }\n}\n",
|
|
24732
|
+
"selector": "ol[eclQuizList]",
|
|
24733
|
+
"providers": [],
|
|
24734
|
+
"hostDirectives": [],
|
|
24735
|
+
"standalone": false,
|
|
24736
|
+
"inputsClass": [],
|
|
24737
|
+
"outputsClass": [],
|
|
24738
|
+
"deprecated": false,
|
|
24739
|
+
"deprecationMessage": "",
|
|
24740
|
+
"hostBindings": [
|
|
24741
|
+
{
|
|
24742
|
+
"name": "class.ecl-quiz__list",
|
|
24743
|
+
"defaultValue": "true",
|
|
24744
|
+
"deprecated": false,
|
|
24745
|
+
"deprecationMessage": "",
|
|
24746
|
+
"line": 29,
|
|
24747
|
+
"type": "boolean",
|
|
24748
|
+
"decorators": []
|
|
24749
|
+
}
|
|
24750
|
+
],
|
|
24751
|
+
"hostListeners": [],
|
|
24752
|
+
"propertiesClass": [
|
|
24753
|
+
{
|
|
24754
|
+
"name": "hasClass",
|
|
24755
|
+
"defaultValue": "true",
|
|
24756
|
+
"deprecated": false,
|
|
24757
|
+
"deprecationMessage": "",
|
|
24758
|
+
"type": "unknown",
|
|
24759
|
+
"indexKey": "",
|
|
24760
|
+
"optional": false,
|
|
24761
|
+
"description": "",
|
|
24762
|
+
"line": 29,
|
|
24763
|
+
"decorators": [
|
|
24764
|
+
{
|
|
24765
|
+
"name": "HostBinding",
|
|
24766
|
+
"stringifiedArguments": "'class.ecl-quiz__list'"
|
|
24767
|
+
}
|
|
24768
|
+
],
|
|
24769
|
+
"modifierKind": [
|
|
24770
|
+
171
|
|
24771
|
+
]
|
|
24772
|
+
}
|
|
24773
|
+
],
|
|
24774
|
+
"methodsClass": [],
|
|
24775
|
+
"extends": []
|
|
24776
|
+
},
|
|
24690
24777
|
{
|
|
24691
24778
|
"name": "EclRadioDirective",
|
|
24692
24779
|
"id": "directive-EclRadioDirective-ed796fae045d97efc4f8c31767eb6794a22c80a26d50d08574b58808325f05632d78c38194fb7288453c51b581f92f027a223c523886cc7a02742b134b738acc",
|
|
@@ -32188,6 +32275,148 @@
|
|
|
32188
32275
|
}
|
|
32189
32276
|
}
|
|
32190
32277
|
},
|
|
32278
|
+
{
|
|
32279
|
+
"name": "EclTextMediaContainerDirective",
|
|
32280
|
+
"id": "directive-EclTextMediaContainerDirective-011fa73d426bf3e0c97f6094948f1bc2479b2165eb3ef92d9e7e6ad26747359230a6ae79eded912d0e3d24ccfae7c97dcb529a170fb72015f68df8f25081d91e",
|
|
32281
|
+
"file": "packages/ecl/components/ecl-text-media/ecl-text-media-title.directive.ts",
|
|
32282
|
+
"type": "directive",
|
|
32283
|
+
"description": "<p>Sets custom class for the <code>ecl-text-media</code> component, used within eclTextMedia component.</p>\n",
|
|
32284
|
+
"rawdescription": "\n\nSets custom class for the `ecl-text-media` component, used within eclTextMedia component.\n",
|
|
32285
|
+
"sourceCode": "import { Directive, Input } from '@angular/core';\n\n/**\n * Applies styles for the micro title element.\n */\n@Directive({\n selector: 'div[eclTextMediaMicroTitle]',\n host: {\n 'class': 'ecl-text-media__micro-title',\n },\n})\nexport class EclTextMediaMicroTitleDirective {}\n\n/**\n * Applies styles for the title element.\n */\n@Directive({\n selector: 'div[eclTextMediaTitle]',\n host: {\n 'class': 'ecl-text-media__title',\n },\n})\nexport class EclTextMediaTitleDirective {}\n\n/**\n * Applies styles for the description element.\n */\n@Directive({\n selector: 'div[eclTextMediaDescription]',\n host: {\n 'class': 'ecl-text-media__description',\n },\n})\nexport class EclTextMediaDescriptionDirective {}\n\n/**\n * Applies styles for the link element.\n */\n@Directive({\n selector: 'a[eclTextMediaLink]',\n host: {\n 'class': 'ecl-text-media__link',\n },\n})\nexport class EclTextMediaLinkDirective {}\n\n/**\n * Sets the `--ecl-image-anchor` CSS custom property for an image used\n * within the `ecl-text-media` component.\n *\n * Intended to be used together with `img[eclMediaContainerImage]`\n * from the `ecl-media-container` component.\n */\n@Directive({\n selector: 'img[eclTextMediaImgAnchor]',\n host: {\n '[style.--ecl-image-anchor]': 'anchor',\n },\n})\nexport class EclTextMediaMediaAnchorDirective {\n @Input('eclTextMediaImgAnchor') anchor: 'center' | 'top left' | 'bottom right' | '20% 20%' = 'center';\n}\n\n/**\n * Sets custom class for the `ecl-text-media` component, used within eclTextMedia component.\n */\n@Directive({\n selector: 'ecl-media-container[eclTextMediaContainer]',\n host: {\n 'class': 'ecl-text-media__media_container',\n },\n})\nexport class EclTextMediaContainerDirective {}\n",
|
|
32286
|
+
"selector": "ecl-media-container[eclTextMediaContainer]",
|
|
32287
|
+
"providers": [],
|
|
32288
|
+
"hostDirectives": [],
|
|
32289
|
+
"standalone": false,
|
|
32290
|
+
"inputsClass": [],
|
|
32291
|
+
"outputsClass": [],
|
|
32292
|
+
"deprecated": false,
|
|
32293
|
+
"deprecationMessage": "",
|
|
32294
|
+
"hostBindings": [],
|
|
32295
|
+
"hostListeners": [],
|
|
32296
|
+
"propertiesClass": [],
|
|
32297
|
+
"methodsClass": [],
|
|
32298
|
+
"extends": []
|
|
32299
|
+
},
|
|
32300
|
+
{
|
|
32301
|
+
"name": "EclTextMediaDescriptionDirective",
|
|
32302
|
+
"id": "directive-EclTextMediaDescriptionDirective-011fa73d426bf3e0c97f6094948f1bc2479b2165eb3ef92d9e7e6ad26747359230a6ae79eded912d0e3d24ccfae7c97dcb529a170fb72015f68df8f25081d91e",
|
|
32303
|
+
"file": "packages/ecl/components/ecl-text-media/ecl-text-media-title.directive.ts",
|
|
32304
|
+
"type": "directive",
|
|
32305
|
+
"description": "<p>Applies styles for the description element.</p>\n",
|
|
32306
|
+
"rawdescription": "\n\nApplies styles for the description element.\n",
|
|
32307
|
+
"sourceCode": "import { Directive, Input } from '@angular/core';\n\n/**\n * Applies styles for the micro title element.\n */\n@Directive({\n selector: 'div[eclTextMediaMicroTitle]',\n host: {\n 'class': 'ecl-text-media__micro-title',\n },\n})\nexport class EclTextMediaMicroTitleDirective {}\n\n/**\n * Applies styles for the title element.\n */\n@Directive({\n selector: 'div[eclTextMediaTitle]',\n host: {\n 'class': 'ecl-text-media__title',\n },\n})\nexport class EclTextMediaTitleDirective {}\n\n/**\n * Applies styles for the description element.\n */\n@Directive({\n selector: 'div[eclTextMediaDescription]',\n host: {\n 'class': 'ecl-text-media__description',\n },\n})\nexport class EclTextMediaDescriptionDirective {}\n\n/**\n * Applies styles for the link element.\n */\n@Directive({\n selector: 'a[eclTextMediaLink]',\n host: {\n 'class': 'ecl-text-media__link',\n },\n})\nexport class EclTextMediaLinkDirective {}\n\n/**\n * Sets the `--ecl-image-anchor` CSS custom property for an image used\n * within the `ecl-text-media` component.\n *\n * Intended to be used together with `img[eclMediaContainerImage]`\n * from the `ecl-media-container` component.\n */\n@Directive({\n selector: 'img[eclTextMediaImgAnchor]',\n host: {\n '[style.--ecl-image-anchor]': 'anchor',\n },\n})\nexport class EclTextMediaMediaAnchorDirective {\n @Input('eclTextMediaImgAnchor') anchor: 'center' | 'top left' | 'bottom right' | '20% 20%' = 'center';\n}\n\n/**\n * Sets custom class for the `ecl-text-media` component, used within eclTextMedia component.\n */\n@Directive({\n selector: 'ecl-media-container[eclTextMediaContainer]',\n host: {\n 'class': 'ecl-text-media__media_container',\n },\n})\nexport class EclTextMediaContainerDirective {}\n",
|
|
32308
|
+
"selector": "div[eclTextMediaDescription]",
|
|
32309
|
+
"providers": [],
|
|
32310
|
+
"hostDirectives": [],
|
|
32311
|
+
"standalone": false,
|
|
32312
|
+
"inputsClass": [],
|
|
32313
|
+
"outputsClass": [],
|
|
32314
|
+
"deprecated": false,
|
|
32315
|
+
"deprecationMessage": "",
|
|
32316
|
+
"hostBindings": [],
|
|
32317
|
+
"hostListeners": [],
|
|
32318
|
+
"propertiesClass": [],
|
|
32319
|
+
"methodsClass": [],
|
|
32320
|
+
"extends": []
|
|
32321
|
+
},
|
|
32322
|
+
{
|
|
32323
|
+
"name": "EclTextMediaLinkDirective",
|
|
32324
|
+
"id": "directive-EclTextMediaLinkDirective-011fa73d426bf3e0c97f6094948f1bc2479b2165eb3ef92d9e7e6ad26747359230a6ae79eded912d0e3d24ccfae7c97dcb529a170fb72015f68df8f25081d91e",
|
|
32325
|
+
"file": "packages/ecl/components/ecl-text-media/ecl-text-media-title.directive.ts",
|
|
32326
|
+
"type": "directive",
|
|
32327
|
+
"description": "<p>Applies styles for the link element.</p>\n",
|
|
32328
|
+
"rawdescription": "\n\nApplies styles for the link element.\n",
|
|
32329
|
+
"sourceCode": "import { Directive, Input } from '@angular/core';\n\n/**\n * Applies styles for the micro title element.\n */\n@Directive({\n selector: 'div[eclTextMediaMicroTitle]',\n host: {\n 'class': 'ecl-text-media__micro-title',\n },\n})\nexport class EclTextMediaMicroTitleDirective {}\n\n/**\n * Applies styles for the title element.\n */\n@Directive({\n selector: 'div[eclTextMediaTitle]',\n host: {\n 'class': 'ecl-text-media__title',\n },\n})\nexport class EclTextMediaTitleDirective {}\n\n/**\n * Applies styles for the description element.\n */\n@Directive({\n selector: 'div[eclTextMediaDescription]',\n host: {\n 'class': 'ecl-text-media__description',\n },\n})\nexport class EclTextMediaDescriptionDirective {}\n\n/**\n * Applies styles for the link element.\n */\n@Directive({\n selector: 'a[eclTextMediaLink]',\n host: {\n 'class': 'ecl-text-media__link',\n },\n})\nexport class EclTextMediaLinkDirective {}\n\n/**\n * Sets the `--ecl-image-anchor` CSS custom property for an image used\n * within the `ecl-text-media` component.\n *\n * Intended to be used together with `img[eclMediaContainerImage]`\n * from the `ecl-media-container` component.\n */\n@Directive({\n selector: 'img[eclTextMediaImgAnchor]',\n host: {\n '[style.--ecl-image-anchor]': 'anchor',\n },\n})\nexport class EclTextMediaMediaAnchorDirective {\n @Input('eclTextMediaImgAnchor') anchor: 'center' | 'top left' | 'bottom right' | '20% 20%' = 'center';\n}\n\n/**\n * Sets custom class for the `ecl-text-media` component, used within eclTextMedia component.\n */\n@Directive({\n selector: 'ecl-media-container[eclTextMediaContainer]',\n host: {\n 'class': 'ecl-text-media__media_container',\n },\n})\nexport class EclTextMediaContainerDirective {}\n",
|
|
32330
|
+
"selector": "a[eclTextMediaLink]",
|
|
32331
|
+
"providers": [],
|
|
32332
|
+
"hostDirectives": [],
|
|
32333
|
+
"standalone": false,
|
|
32334
|
+
"inputsClass": [],
|
|
32335
|
+
"outputsClass": [],
|
|
32336
|
+
"deprecated": false,
|
|
32337
|
+
"deprecationMessage": "",
|
|
32338
|
+
"hostBindings": [],
|
|
32339
|
+
"hostListeners": [],
|
|
32340
|
+
"propertiesClass": [],
|
|
32341
|
+
"methodsClass": [],
|
|
32342
|
+
"extends": []
|
|
32343
|
+
},
|
|
32344
|
+
{
|
|
32345
|
+
"name": "EclTextMediaMediaAnchorDirective",
|
|
32346
|
+
"id": "directive-EclTextMediaMediaAnchorDirective-011fa73d426bf3e0c97f6094948f1bc2479b2165eb3ef92d9e7e6ad26747359230a6ae79eded912d0e3d24ccfae7c97dcb529a170fb72015f68df8f25081d91e",
|
|
32347
|
+
"file": "packages/ecl/components/ecl-text-media/ecl-text-media-title.directive.ts",
|
|
32348
|
+
"type": "directive",
|
|
32349
|
+
"description": "<p>Sets the <code>--ecl-image-anchor</code> CSS custom property for an image used\nwithin the <code>ecl-text-media</code> component.</p>\n<p>Intended to be used together with <code>img[eclMediaContainerImage]</code>\nfrom the <code>ecl-media-container</code> component.</p>\n",
|
|
32350
|
+
"rawdescription": "\n\nSets the `--ecl-image-anchor` CSS custom property for an image used\nwithin the `ecl-text-media` component.\n\nIntended to be used together with `img[eclMediaContainerImage]`\nfrom the `ecl-media-container` component.\n",
|
|
32351
|
+
"sourceCode": "import { Directive, Input } from '@angular/core';\n\n/**\n * Applies styles for the micro title element.\n */\n@Directive({\n selector: 'div[eclTextMediaMicroTitle]',\n host: {\n 'class': 'ecl-text-media__micro-title',\n },\n})\nexport class EclTextMediaMicroTitleDirective {}\n\n/**\n * Applies styles for the title element.\n */\n@Directive({\n selector: 'div[eclTextMediaTitle]',\n host: {\n 'class': 'ecl-text-media__title',\n },\n})\nexport class EclTextMediaTitleDirective {}\n\n/**\n * Applies styles for the description element.\n */\n@Directive({\n selector: 'div[eclTextMediaDescription]',\n host: {\n 'class': 'ecl-text-media__description',\n },\n})\nexport class EclTextMediaDescriptionDirective {}\n\n/**\n * Applies styles for the link element.\n */\n@Directive({\n selector: 'a[eclTextMediaLink]',\n host: {\n 'class': 'ecl-text-media__link',\n },\n})\nexport class EclTextMediaLinkDirective {}\n\n/**\n * Sets the `--ecl-image-anchor` CSS custom property for an image used\n * within the `ecl-text-media` component.\n *\n * Intended to be used together with `img[eclMediaContainerImage]`\n * from the `ecl-media-container` component.\n */\n@Directive({\n selector: 'img[eclTextMediaImgAnchor]',\n host: {\n '[style.--ecl-image-anchor]': 'anchor',\n },\n})\nexport class EclTextMediaMediaAnchorDirective {\n @Input('eclTextMediaImgAnchor') anchor: 'center' | 'top left' | 'bottom right' | '20% 20%' = 'center';\n}\n\n/**\n * Sets custom class for the `ecl-text-media` component, used within eclTextMedia component.\n */\n@Directive({\n selector: 'ecl-media-container[eclTextMediaContainer]',\n host: {\n 'class': 'ecl-text-media__media_container',\n },\n})\nexport class EclTextMediaContainerDirective {}\n",
|
|
32352
|
+
"selector": "img[eclTextMediaImgAnchor]",
|
|
32353
|
+
"providers": [],
|
|
32354
|
+
"hostDirectives": [],
|
|
32355
|
+
"standalone": false,
|
|
32356
|
+
"inputsClass": [
|
|
32357
|
+
{
|
|
32358
|
+
"name": "eclTextMediaImgAnchor",
|
|
32359
|
+
"defaultValue": "'center'",
|
|
32360
|
+
"deprecated": false,
|
|
32361
|
+
"deprecationMessage": "",
|
|
32362
|
+
"line": 61,
|
|
32363
|
+
"type": "\"center\" | \"top left\" | \"bottom right\" | \"20% 20%\"",
|
|
32364
|
+
"decorators": []
|
|
32365
|
+
}
|
|
32366
|
+
],
|
|
32367
|
+
"outputsClass": [],
|
|
32368
|
+
"deprecated": false,
|
|
32369
|
+
"deprecationMessage": "",
|
|
32370
|
+
"hostBindings": [],
|
|
32371
|
+
"hostListeners": [],
|
|
32372
|
+
"propertiesClass": [],
|
|
32373
|
+
"methodsClass": [],
|
|
32374
|
+
"extends": []
|
|
32375
|
+
},
|
|
32376
|
+
{
|
|
32377
|
+
"name": "EclTextMediaMicroTitleDirective",
|
|
32378
|
+
"id": "directive-EclTextMediaMicroTitleDirective-011fa73d426bf3e0c97f6094948f1bc2479b2165eb3ef92d9e7e6ad26747359230a6ae79eded912d0e3d24ccfae7c97dcb529a170fb72015f68df8f25081d91e",
|
|
32379
|
+
"file": "packages/ecl/components/ecl-text-media/ecl-text-media-title.directive.ts",
|
|
32380
|
+
"type": "directive",
|
|
32381
|
+
"description": "<p>Applies styles for the micro title element.</p>\n",
|
|
32382
|
+
"rawdescription": "\n\nApplies styles for the micro title element.\n",
|
|
32383
|
+
"sourceCode": "import { Directive, Input } from '@angular/core';\n\n/**\n * Applies styles for the micro title element.\n */\n@Directive({\n selector: 'div[eclTextMediaMicroTitle]',\n host: {\n 'class': 'ecl-text-media__micro-title',\n },\n})\nexport class EclTextMediaMicroTitleDirective {}\n\n/**\n * Applies styles for the title element.\n */\n@Directive({\n selector: 'div[eclTextMediaTitle]',\n host: {\n 'class': 'ecl-text-media__title',\n },\n})\nexport class EclTextMediaTitleDirective {}\n\n/**\n * Applies styles for the description element.\n */\n@Directive({\n selector: 'div[eclTextMediaDescription]',\n host: {\n 'class': 'ecl-text-media__description',\n },\n})\nexport class EclTextMediaDescriptionDirective {}\n\n/**\n * Applies styles for the link element.\n */\n@Directive({\n selector: 'a[eclTextMediaLink]',\n host: {\n 'class': 'ecl-text-media__link',\n },\n})\nexport class EclTextMediaLinkDirective {}\n\n/**\n * Sets the `--ecl-image-anchor` CSS custom property for an image used\n * within the `ecl-text-media` component.\n *\n * Intended to be used together with `img[eclMediaContainerImage]`\n * from the `ecl-media-container` component.\n */\n@Directive({\n selector: 'img[eclTextMediaImgAnchor]',\n host: {\n '[style.--ecl-image-anchor]': 'anchor',\n },\n})\nexport class EclTextMediaMediaAnchorDirective {\n @Input('eclTextMediaImgAnchor') anchor: 'center' | 'top left' | 'bottom right' | '20% 20%' = 'center';\n}\n\n/**\n * Sets custom class for the `ecl-text-media` component, used within eclTextMedia component.\n */\n@Directive({\n selector: 'ecl-media-container[eclTextMediaContainer]',\n host: {\n 'class': 'ecl-text-media__media_container',\n },\n})\nexport class EclTextMediaContainerDirective {}\n",
|
|
32384
|
+
"selector": "div[eclTextMediaMicroTitle]",
|
|
32385
|
+
"providers": [],
|
|
32386
|
+
"hostDirectives": [],
|
|
32387
|
+
"standalone": false,
|
|
32388
|
+
"inputsClass": [],
|
|
32389
|
+
"outputsClass": [],
|
|
32390
|
+
"deprecated": false,
|
|
32391
|
+
"deprecationMessage": "",
|
|
32392
|
+
"hostBindings": [],
|
|
32393
|
+
"hostListeners": [],
|
|
32394
|
+
"propertiesClass": [],
|
|
32395
|
+
"methodsClass": [],
|
|
32396
|
+
"extends": []
|
|
32397
|
+
},
|
|
32398
|
+
{
|
|
32399
|
+
"name": "EclTextMediaTitleDirective",
|
|
32400
|
+
"id": "directive-EclTextMediaTitleDirective-011fa73d426bf3e0c97f6094948f1bc2479b2165eb3ef92d9e7e6ad26747359230a6ae79eded912d0e3d24ccfae7c97dcb529a170fb72015f68df8f25081d91e",
|
|
32401
|
+
"file": "packages/ecl/components/ecl-text-media/ecl-text-media-title.directive.ts",
|
|
32402
|
+
"type": "directive",
|
|
32403
|
+
"description": "<p>Applies styles for the title element.</p>\n",
|
|
32404
|
+
"rawdescription": "\n\nApplies styles for the title element.\n",
|
|
32405
|
+
"sourceCode": "import { Directive, Input } from '@angular/core';\n\n/**\n * Applies styles for the micro title element.\n */\n@Directive({\n selector: 'div[eclTextMediaMicroTitle]',\n host: {\n 'class': 'ecl-text-media__micro-title',\n },\n})\nexport class EclTextMediaMicroTitleDirective {}\n\n/**\n * Applies styles for the title element.\n */\n@Directive({\n selector: 'div[eclTextMediaTitle]',\n host: {\n 'class': 'ecl-text-media__title',\n },\n})\nexport class EclTextMediaTitleDirective {}\n\n/**\n * Applies styles for the description element.\n */\n@Directive({\n selector: 'div[eclTextMediaDescription]',\n host: {\n 'class': 'ecl-text-media__description',\n },\n})\nexport class EclTextMediaDescriptionDirective {}\n\n/**\n * Applies styles for the link element.\n */\n@Directive({\n selector: 'a[eclTextMediaLink]',\n host: {\n 'class': 'ecl-text-media__link',\n },\n})\nexport class EclTextMediaLinkDirective {}\n\n/**\n * Sets the `--ecl-image-anchor` CSS custom property for an image used\n * within the `ecl-text-media` component.\n *\n * Intended to be used together with `img[eclMediaContainerImage]`\n * from the `ecl-media-container` component.\n */\n@Directive({\n selector: 'img[eclTextMediaImgAnchor]',\n host: {\n '[style.--ecl-image-anchor]': 'anchor',\n },\n})\nexport class EclTextMediaMediaAnchorDirective {\n @Input('eclTextMediaImgAnchor') anchor: 'center' | 'top left' | 'bottom right' | '20% 20%' = 'center';\n}\n\n/**\n * Sets custom class for the `ecl-text-media` component, used within eclTextMedia component.\n */\n@Directive({\n selector: 'ecl-media-container[eclTextMediaContainer]',\n host: {\n 'class': 'ecl-text-media__media_container',\n },\n})\nexport class EclTextMediaContainerDirective {}\n",
|
|
32406
|
+
"selector": "div[eclTextMediaTitle]",
|
|
32407
|
+
"providers": [],
|
|
32408
|
+
"hostDirectives": [],
|
|
32409
|
+
"standalone": false,
|
|
32410
|
+
"inputsClass": [],
|
|
32411
|
+
"outputsClass": [],
|
|
32412
|
+
"deprecated": false,
|
|
32413
|
+
"deprecationMessage": "",
|
|
32414
|
+
"hostBindings": [],
|
|
32415
|
+
"hostListeners": [],
|
|
32416
|
+
"propertiesClass": [],
|
|
32417
|
+
"methodsClass": [],
|
|
32418
|
+
"extends": []
|
|
32419
|
+
},
|
|
32191
32420
|
{
|
|
32192
32421
|
"name": "EclTimelineItemLabelDirective",
|
|
32193
32422
|
"id": "directive-EclTimelineItemLabelDirective-c8b2a2cb9d3e1ee87896a674ae8d646eb3bb142f9a8dc7c3a45b5834d82d0a88d45d8e9a66495eac00fd544726d487f7eb7ed1530a710a63e9a02ccf539c8af9",
|
|
@@ -33354,6 +33583,413 @@
|
|
|
33354
33583
|
],
|
|
33355
33584
|
"templateData": "<div class=\"ecl-add-to-calendar__info\" [class.ecl-container]=\"isFullWidth()\">\n <div class=\"ecl-add-to-calendar__info-content\">\n @if (eclTitle()) {\n <div class=\"ecl-add-to-calendar__title\">{{ eclTitle() }}</div>\n }\n @if (calendarDates() || calendarTime() || calendarLocation()) {\n <ul class=\"ecl-add-to-calendar__meta-list\">\n @if (calendarDates()) {\n <li class=\"ecl-add-to-calendar__meta-item\">\n <ecl-icon icon=\"calendar\" size=\"s\" class=\"ecl-add-to-calendar__meta-icon\" aria-hidden=\"true\"></ecl-icon>\n <span class=\"ecl-add-to-calendar__meta-label\">{{ calendarDates() }}</span>\n </li>\n }\n @if (calendarTime()) {\n <li class=\"ecl-add-to-calendar__meta-item\">\n <ecl-icon icon=\"clock\" size=\"s\" class=\"ecl-add-to-calendar__meta-icon\" aria-hidden=\"true\"></ecl-icon>\n <span class=\"ecl-add-to-calendar__meta-label\">{{ calendarTime() }}</span>\n </li>\n }\n @if (calendarLocation()) {\n <li class=\"ecl-add-to-calendar__meta-item\">\n <ecl-icon icon=\"location\" size=\"s\" class=\"ecl-add-to-calendar__meta-icon\" aria-hidden=\"true\"></ecl-icon>\n <span class=\"ecl-add-to-calendar__meta-label\">{{ calendarLocation() }}</span>\n </li>\n }\n </ul>\n }\n </div>\n \n <ng-content select=\"div[eclAddToCalendarAction]\"></ng-content>\n</div>"
|
|
33356
33585
|
},
|
|
33586
|
+
{
|
|
33587
|
+
"name": "EclAnimatedNumbersComponent",
|
|
33588
|
+
"id": "component-EclAnimatedNumbersComponent-fcc4fb55f35ff7eb636a9dc4ab65f72e80453e4733b72b6df0206522b8e2e6acf178fe260472ac88554a1308d62c2808313745bbb96dd674b84ebd4bda4ba178",
|
|
33589
|
+
"file": "packages/ecl/components/ecl-animated-numbers/ecl-animated-numbers.component.ts",
|
|
33590
|
+
"changeDetection": "ChangeDetectionStrategy.OnPush",
|
|
33591
|
+
"encapsulation": [],
|
|
33592
|
+
"entryComponents": [],
|
|
33593
|
+
"host": {},
|
|
33594
|
+
"inputs": [],
|
|
33595
|
+
"outputs": [],
|
|
33596
|
+
"providers": [],
|
|
33597
|
+
"selector": "div[eclAnimatedNumbers]",
|
|
33598
|
+
"styleUrls": [],
|
|
33599
|
+
"styles": [],
|
|
33600
|
+
"templateUrl": [
|
|
33601
|
+
"./ecl-animated-numbers.component.html"
|
|
33602
|
+
],
|
|
33603
|
+
"viewProviders": [],
|
|
33604
|
+
"hostDirectives": [],
|
|
33605
|
+
"inputsClass": [
|
|
33606
|
+
{
|
|
33607
|
+
"name": "hasContentColor",
|
|
33608
|
+
"defaultValue": "false, { transform: booleanAttribute }",
|
|
33609
|
+
"deprecated": false,
|
|
33610
|
+
"deprecationMessage": "",
|
|
33611
|
+
"indexKey": "",
|
|
33612
|
+
"optional": false,
|
|
33613
|
+
"description": "<p>Applies a colour to the counter values.</p>\n",
|
|
33614
|
+
"line": 41,
|
|
33615
|
+
"rawdescription": "\nApplies a colour to the counter values.",
|
|
33616
|
+
"required": false
|
|
33617
|
+
},
|
|
33618
|
+
{
|
|
33619
|
+
"name": "hasDarkBackground",
|
|
33620
|
+
"defaultValue": "false, { transform: booleanAttribute }",
|
|
33621
|
+
"deprecated": false,
|
|
33622
|
+
"deprecationMessage": "",
|
|
33623
|
+
"indexKey": "",
|
|
33624
|
+
"optional": false,
|
|
33625
|
+
"description": "<p>Applies a dark background to the component.</p>\n",
|
|
33626
|
+
"line": 35,
|
|
33627
|
+
"rawdescription": "\nApplies a dark background to the component.",
|
|
33628
|
+
"required": false
|
|
33629
|
+
},
|
|
33630
|
+
{
|
|
33631
|
+
"name": "hasLeftBorder",
|
|
33632
|
+
"defaultValue": "false, { transform: booleanAttribute }",
|
|
33633
|
+
"deprecated": false,
|
|
33634
|
+
"deprecationMessage": "",
|
|
33635
|
+
"indexKey": "",
|
|
33636
|
+
"optional": false,
|
|
33637
|
+
"description": "<p>Adds a left border to the animated number items.</p>\n",
|
|
33638
|
+
"line": 38,
|
|
33639
|
+
"rawdescription": "\nAdds a left border to the animated number items.",
|
|
33640
|
+
"required": false
|
|
33641
|
+
},
|
|
33642
|
+
{
|
|
33643
|
+
"name": "sourcesLabel",
|
|
33644
|
+
"defaultValue": "'Sources:'",
|
|
33645
|
+
"deprecated": false,
|
|
33646
|
+
"deprecationMessage": "",
|
|
33647
|
+
"type": "string",
|
|
33648
|
+
"indexKey": "",
|
|
33649
|
+
"optional": false,
|
|
33650
|
+
"description": "<p>Label displayed before the sources list.</p>\n",
|
|
33651
|
+
"line": 44,
|
|
33652
|
+
"rawdescription": "\nLabel displayed before the sources list.",
|
|
33653
|
+
"required": false
|
|
33654
|
+
},
|
|
33655
|
+
{
|
|
33656
|
+
"name": "class",
|
|
33657
|
+
"deprecated": false,
|
|
33658
|
+
"deprecationMessage": "",
|
|
33659
|
+
"line": 8,
|
|
33660
|
+
"type": "string",
|
|
33661
|
+
"decorators": [],
|
|
33662
|
+
"inheritance": {
|
|
33663
|
+
"file": "ECLBaseDirective"
|
|
33664
|
+
}
|
|
33665
|
+
},
|
|
33666
|
+
{
|
|
33667
|
+
"name": "e2eAttr",
|
|
33668
|
+
"deprecated": false,
|
|
33669
|
+
"deprecationMessage": "",
|
|
33670
|
+
"line": 10,
|
|
33671
|
+
"type": "any",
|
|
33672
|
+
"decorators": [],
|
|
33673
|
+
"inheritance": {
|
|
33674
|
+
"file": "ECLBaseDirective"
|
|
33675
|
+
}
|
|
33676
|
+
},
|
|
33677
|
+
{
|
|
33678
|
+
"required": false,
|
|
33679
|
+
"name": "tabindex",
|
|
33680
|
+
"deprecated": false,
|
|
33681
|
+
"deprecationMessage": "",
|
|
33682
|
+
"line": 13,
|
|
33683
|
+
"type": "number",
|
|
33684
|
+
"decorators": [],
|
|
33685
|
+
"inheritance": {
|
|
33686
|
+
"file": "ECLBaseDirective"
|
|
33687
|
+
}
|
|
33688
|
+
}
|
|
33689
|
+
],
|
|
33690
|
+
"outputsClass": [],
|
|
33691
|
+
"propertiesClass": [],
|
|
33692
|
+
"methodsClass": [
|
|
33693
|
+
{
|
|
33694
|
+
"name": "getCssClasses",
|
|
33695
|
+
"args": [
|
|
33696
|
+
{
|
|
33697
|
+
"name": "rootClass",
|
|
33698
|
+
"type": "string",
|
|
33699
|
+
"optional": false,
|
|
33700
|
+
"dotDotDotToken": false,
|
|
33701
|
+
"deprecated": false,
|
|
33702
|
+
"deprecationMessage": ""
|
|
33703
|
+
}
|
|
33704
|
+
],
|
|
33705
|
+
"optional": false,
|
|
33706
|
+
"returnType": "string",
|
|
33707
|
+
"typeParameters": [],
|
|
33708
|
+
"line": 15,
|
|
33709
|
+
"deprecated": false,
|
|
33710
|
+
"deprecationMessage": "",
|
|
33711
|
+
"jsdoctags": [
|
|
33712
|
+
{
|
|
33713
|
+
"name": "rootClass",
|
|
33714
|
+
"type": "string",
|
|
33715
|
+
"optional": false,
|
|
33716
|
+
"dotDotDotToken": false,
|
|
33717
|
+
"deprecated": false,
|
|
33718
|
+
"deprecationMessage": "",
|
|
33719
|
+
"tagName": {
|
|
33720
|
+
"text": "param"
|
|
33721
|
+
}
|
|
33722
|
+
}
|
|
33723
|
+
],
|
|
33724
|
+
"inheritance": {
|
|
33725
|
+
"file": "ECLBaseDirective"
|
|
33726
|
+
}
|
|
33727
|
+
}
|
|
33728
|
+
],
|
|
33729
|
+
"deprecated": false,
|
|
33730
|
+
"deprecationMessage": "",
|
|
33731
|
+
"hostBindings": [],
|
|
33732
|
+
"hostListeners": [],
|
|
33733
|
+
"standalone": false,
|
|
33734
|
+
"imports": [],
|
|
33735
|
+
"description": "<p>Container component for the ECL Animated Numbers pattern.\nWraps animated number items and an optional sources footer.</p>\n<b>Example :</b><div><pre class=\"line-numbers\"><code class=\"language-html\"><div eclAnimatedNumbers [sourcesLabel]="'Sources:'">\n <div eclAnimatedNumbersItems>\n <div eclAnimatedNumbersItem [eclValue]="'213'" [category]="'Revenue'">\n <ecl-icon eclAnimatedNumbersIcon icon="users" iconSet="phosphor"></ecl-icon>\n </div>\n </div>\n <ul eclAnimatedNumbersSourcesList>\n <li eclAnimatedNumbersSourcesItem>\n <a eclLink eclAnimatedNumbersSource href="/example">Eurostat</a>\n </li>\n </ul>\n</div></code></pre></div>",
|
|
33736
|
+
"rawdescription": "\n\nContainer component for the ECL Animated Numbers pattern.\nWraps animated number items and an optional sources footer.\n\n```html\n<div eclAnimatedNumbers [sourcesLabel]=\"'Sources:'\">\n <div eclAnimatedNumbersItems>\n <div eclAnimatedNumbersItem [eclValue]=\"'213'\" [category]=\"'Revenue'\">\n <ecl-icon eclAnimatedNumbersIcon icon=\"users\" iconSet=\"phosphor\"></ecl-icon>\n </div>\n </div>\n <ul eclAnimatedNumbersSourcesList>\n <li eclAnimatedNumbersSourcesItem>\n <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n </li>\n </ul>\n</div>\n```",
|
|
33737
|
+
"type": "component",
|
|
33738
|
+
"sourceCode": "import { booleanAttribute, ChangeDetectionStrategy, Component, input } from \"@angular/core\";\nimport { ECLBaseDirective } from \"@eui/ecl/core\";\n\n/**\n * Container component for the ECL Animated Numbers pattern.\n * Wraps animated number items and an optional sources footer.\n *\n * @example\n * ```html\n * <div eclAnimatedNumbers [sourcesLabel]=\"'Sources:'\">\n * <div eclAnimatedNumbersItems>\n * <div eclAnimatedNumbersItem [eclValue]=\"'213'\" [category]=\"'Revenue'\">\n * <ecl-icon eclAnimatedNumbersIcon icon=\"users\" iconSet=\"phosphor\"></ecl-icon>\n * </div>\n * </div>\n * <ul eclAnimatedNumbersSourcesList>\n * <li eclAnimatedNumbersSourcesItem>\n * <a eclLink eclAnimatedNumbersSource href=\"/example\">Eurostat</a>\n * </li>\n * </ul>\n * </div>\n * ```\n */\n@Component({\n selector: 'div[eclAnimatedNumbers]',\n templateUrl: './ecl-animated-numbers.component.html',\n host: {\n '[class]': 'cssClasses',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclAnimatedNumbersComponent extends ECLBaseDirective {\n\n /** Applies a dark background to the component. */\n hasDarkBackground = input(false, { transform: booleanAttribute });\n\n /** Adds a left border to the animated number items. */\n hasLeftBorder = input(false, { transform: booleanAttribute });\n\n /** Applies a colour to the counter values. */\n hasContentColor = input(false, { transform: booleanAttribute });\n\n /** Label displayed before the sources list. */\n sourcesLabel = input<string>('Sources:');\n\n get cssClasses(): string {\n return [super.getCssClasses('ecl-animated-numbers'),\n this.hasDarkBackground() ? 'ecl-animated-numbers--with-background' : '',\n this.hasLeftBorder() ? 'ecl-animated-numbers--border' : '',\n this.hasContentColor() && !this.hasDarkBackground() ? 'ecl-animated-numbers--counter-color' : '',\n ].filter(Boolean).join(' ');\n }\n}",
|
|
33739
|
+
"assetsDirs": [],
|
|
33740
|
+
"styleUrlsData": "",
|
|
33741
|
+
"stylesData": "",
|
|
33742
|
+
"extends": [
|
|
33743
|
+
"ECLBaseDirective"
|
|
33744
|
+
],
|
|
33745
|
+
"accessors": {
|
|
33746
|
+
"cssClasses": {
|
|
33747
|
+
"name": "cssClasses",
|
|
33748
|
+
"getSignature": {
|
|
33749
|
+
"name": "cssClasses",
|
|
33750
|
+
"type": "string",
|
|
33751
|
+
"returnType": "string",
|
|
33752
|
+
"line": 46
|
|
33753
|
+
}
|
|
33754
|
+
}
|
|
33755
|
+
},
|
|
33756
|
+
"templateData": "<div class=\"ecl-container\">\n <ng-content select=\"[eclAnimatedNumbersItems]\"></ng-content>\n <div class=\"ecl-animated-numbers__sources\">\n <span class=\"ecl-animated-numbers__sources-label\">{{ sourcesLabel() }}</span>\n <ng-content select=\"[eclAnimatedNumbersSourcesList]\"></ng-content>\n </div>\n</div>"
|
|
33757
|
+
},
|
|
33758
|
+
{
|
|
33759
|
+
"name": "EclAnimatedNumbersItemComponent",
|
|
33760
|
+
"id": "component-EclAnimatedNumbersItemComponent-07e7334aaa8ab55d2901e7d7ce2d0729dae7ef35285d134679c184c175bb9af5191690ec2fd68f4334f766aee310c76b5783cd851ab478ab9536fc5757fa2dcd",
|
|
33761
|
+
"file": "packages/ecl/components/ecl-animated-numbers/ecl-animated-numers-item/ecl-animated-numbers-item.component.ts",
|
|
33762
|
+
"encapsulation": [],
|
|
33763
|
+
"entryComponents": [],
|
|
33764
|
+
"host": {},
|
|
33765
|
+
"inputs": [],
|
|
33766
|
+
"outputs": [],
|
|
33767
|
+
"providers": [],
|
|
33768
|
+
"selector": "[eclAnimatedNumbersItem]",
|
|
33769
|
+
"styleUrls": [],
|
|
33770
|
+
"styles": [],
|
|
33771
|
+
"templateUrl": [
|
|
33772
|
+
"./ecl-animated-numbers-item.component.html"
|
|
33773
|
+
],
|
|
33774
|
+
"viewProviders": [],
|
|
33775
|
+
"hostDirectives": [],
|
|
33776
|
+
"inputsClass": [
|
|
33777
|
+
{
|
|
33778
|
+
"name": "category",
|
|
33779
|
+
"deprecated": false,
|
|
33780
|
+
"deprecationMessage": "",
|
|
33781
|
+
"type": "string",
|
|
33782
|
+
"indexKey": "",
|
|
33783
|
+
"optional": false,
|
|
33784
|
+
"description": "<p>Category label displayed in the item header.</p>\n",
|
|
33785
|
+
"line": 43,
|
|
33786
|
+
"rawdescription": "\nCategory label displayed in the item header.",
|
|
33787
|
+
"required": false
|
|
33788
|
+
},
|
|
33789
|
+
{
|
|
33790
|
+
"name": "description",
|
|
33791
|
+
"deprecated": false,
|
|
33792
|
+
"deprecationMessage": "",
|
|
33793
|
+
"type": "string",
|
|
33794
|
+
"indexKey": "",
|
|
33795
|
+
"optional": false,
|
|
33796
|
+
"description": "<p>Descriptive text displayed below the number.</p>\n",
|
|
33797
|
+
"line": 46,
|
|
33798
|
+
"rawdescription": "\nDescriptive text displayed below the number.",
|
|
33799
|
+
"required": false
|
|
33800
|
+
},
|
|
33801
|
+
{
|
|
33802
|
+
"name": "eclValue",
|
|
33803
|
+
"deprecated": false,
|
|
33804
|
+
"deprecationMessage": "",
|
|
33805
|
+
"type": "string",
|
|
33806
|
+
"indexKey": "",
|
|
33807
|
+
"optional": false,
|
|
33808
|
+
"description": "<p>The target numeric value to animate to. Accepts strings with non-numeric characters (they are stripped).</p>\n",
|
|
33809
|
+
"line": 49,
|
|
33810
|
+
"rawdescription": "\nThe target numeric value to animate to. Accepts strings with non-numeric characters (they are stripped).",
|
|
33811
|
+
"required": false
|
|
33812
|
+
},
|
|
33813
|
+
{
|
|
33814
|
+
"name": "prefix",
|
|
33815
|
+
"deprecated": false,
|
|
33816
|
+
"deprecationMessage": "",
|
|
33817
|
+
"type": "string",
|
|
33818
|
+
"indexKey": "",
|
|
33819
|
+
"optional": false,
|
|
33820
|
+
"description": "<p>Text displayed before the animated number (e.g. '€', 'billion').</p>\n",
|
|
33821
|
+
"line": 55,
|
|
33822
|
+
"rawdescription": "\nText displayed before the animated number (e.g. '€', 'billion').",
|
|
33823
|
+
"required": false
|
|
33824
|
+
},
|
|
33825
|
+
{
|
|
33826
|
+
"name": "suffix",
|
|
33827
|
+
"deprecated": false,
|
|
33828
|
+
"deprecationMessage": "",
|
|
33829
|
+
"type": "string",
|
|
33830
|
+
"indexKey": "",
|
|
33831
|
+
"optional": false,
|
|
33832
|
+
"description": "<p>Text displayed after the animated number (e.g. '€', 'billions').</p>\n",
|
|
33833
|
+
"line": 52,
|
|
33834
|
+
"rawdescription": "\nText displayed after the animated number (e.g. '€', 'billions').",
|
|
33835
|
+
"required": false
|
|
33836
|
+
},
|
|
33837
|
+
{
|
|
33838
|
+
"name": "class",
|
|
33839
|
+
"deprecated": false,
|
|
33840
|
+
"deprecationMessage": "",
|
|
33841
|
+
"line": 8,
|
|
33842
|
+
"type": "string",
|
|
33843
|
+
"decorators": [],
|
|
33844
|
+
"inheritance": {
|
|
33845
|
+
"file": "ECLBaseDirective"
|
|
33846
|
+
}
|
|
33847
|
+
},
|
|
33848
|
+
{
|
|
33849
|
+
"name": "e2eAttr",
|
|
33850
|
+
"deprecated": false,
|
|
33851
|
+
"deprecationMessage": "",
|
|
33852
|
+
"line": 10,
|
|
33853
|
+
"type": "any",
|
|
33854
|
+
"decorators": [],
|
|
33855
|
+
"inheritance": {
|
|
33856
|
+
"file": "ECLBaseDirective"
|
|
33857
|
+
}
|
|
33858
|
+
},
|
|
33859
|
+
{
|
|
33860
|
+
"required": false,
|
|
33861
|
+
"name": "tabindex",
|
|
33862
|
+
"deprecated": false,
|
|
33863
|
+
"deprecationMessage": "",
|
|
33864
|
+
"line": 13,
|
|
33865
|
+
"type": "number",
|
|
33866
|
+
"decorators": [],
|
|
33867
|
+
"inheritance": {
|
|
33868
|
+
"file": "ECLBaseDirective"
|
|
33869
|
+
}
|
|
33870
|
+
}
|
|
33871
|
+
],
|
|
33872
|
+
"outputsClass": [],
|
|
33873
|
+
"propertiesClass": [
|
|
33874
|
+
{
|
|
33875
|
+
"name": "animateOnVisible",
|
|
33876
|
+
"defaultValue": "true",
|
|
33877
|
+
"deprecated": false,
|
|
33878
|
+
"deprecationMessage": "",
|
|
33879
|
+
"type": "unknown",
|
|
33880
|
+
"indexKey": "",
|
|
33881
|
+
"optional": false,
|
|
33882
|
+
"description": "",
|
|
33883
|
+
"line": 59,
|
|
33884
|
+
"modifierKind": [
|
|
33885
|
+
124
|
|
33886
|
+
]
|
|
33887
|
+
},
|
|
33888
|
+
{
|
|
33889
|
+
"name": "animationDuration",
|
|
33890
|
+
"defaultValue": "1000",
|
|
33891
|
+
"deprecated": false,
|
|
33892
|
+
"deprecationMessage": "",
|
|
33893
|
+
"type": "number",
|
|
33894
|
+
"indexKey": "",
|
|
33895
|
+
"optional": false,
|
|
33896
|
+
"description": "",
|
|
33897
|
+
"line": 57,
|
|
33898
|
+
"modifierKind": [
|
|
33899
|
+
124
|
|
33900
|
+
]
|
|
33901
|
+
},
|
|
33902
|
+
{
|
|
33903
|
+
"name": "animationStyle",
|
|
33904
|
+
"defaultValue": "'linear'",
|
|
33905
|
+
"deprecated": false,
|
|
33906
|
+
"deprecationMessage": "",
|
|
33907
|
+
"type": "\"linear\" | \"random\"",
|
|
33908
|
+
"indexKey": "",
|
|
33909
|
+
"optional": false,
|
|
33910
|
+
"description": "",
|
|
33911
|
+
"line": 58,
|
|
33912
|
+
"modifierKind": [
|
|
33913
|
+
124
|
|
33914
|
+
]
|
|
33915
|
+
}
|
|
33916
|
+
],
|
|
33917
|
+
"methodsClass": [
|
|
33918
|
+
{
|
|
33919
|
+
"name": "ngOnDestroy",
|
|
33920
|
+
"args": [],
|
|
33921
|
+
"optional": false,
|
|
33922
|
+
"returnType": "void",
|
|
33923
|
+
"typeParameters": [],
|
|
33924
|
+
"line": 105,
|
|
33925
|
+
"deprecated": false,
|
|
33926
|
+
"deprecationMessage": ""
|
|
33927
|
+
},
|
|
33928
|
+
{
|
|
33929
|
+
"name": "getCssClasses",
|
|
33930
|
+
"args": [
|
|
33931
|
+
{
|
|
33932
|
+
"name": "rootClass",
|
|
33933
|
+
"type": "string",
|
|
33934
|
+
"optional": false,
|
|
33935
|
+
"dotDotDotToken": false,
|
|
33936
|
+
"deprecated": false,
|
|
33937
|
+
"deprecationMessage": ""
|
|
33938
|
+
}
|
|
33939
|
+
],
|
|
33940
|
+
"optional": false,
|
|
33941
|
+
"returnType": "string",
|
|
33942
|
+
"typeParameters": [],
|
|
33943
|
+
"line": 15,
|
|
33944
|
+
"deprecated": false,
|
|
33945
|
+
"deprecationMessage": "",
|
|
33946
|
+
"jsdoctags": [
|
|
33947
|
+
{
|
|
33948
|
+
"name": "rootClass",
|
|
33949
|
+
"type": "string",
|
|
33950
|
+
"optional": false,
|
|
33951
|
+
"dotDotDotToken": false,
|
|
33952
|
+
"deprecated": false,
|
|
33953
|
+
"deprecationMessage": "",
|
|
33954
|
+
"tagName": {
|
|
33955
|
+
"text": "param"
|
|
33956
|
+
}
|
|
33957
|
+
}
|
|
33958
|
+
],
|
|
33959
|
+
"inheritance": {
|
|
33960
|
+
"file": "ECLBaseDirective"
|
|
33961
|
+
}
|
|
33962
|
+
}
|
|
33963
|
+
],
|
|
33964
|
+
"deprecated": false,
|
|
33965
|
+
"deprecationMessage": "",
|
|
33966
|
+
"hostBindings": [],
|
|
33967
|
+
"hostListeners": [],
|
|
33968
|
+
"standalone": false,
|
|
33969
|
+
"imports": [],
|
|
33970
|
+
"description": "<p>Represents an individual animated number item.\nDisplays a numeric value that animates from 0 to the target when scrolled into view.\nUses an IntersectionObserver to trigger animation on viewport visibility and\nrequestAnimationFrame for smooth count-up with cubic ease-out.</p>\n<b>Example :</b><div><pre class=\"line-numbers\"><code class=\"language-html\"><div eclAnimatedNumbersItem\n [eclValue]="'1250'"\n [category]="'Revenue'"\n [prefix]="'€'"\n [suffix]="'billions'"\n [description]="'Annual revenue growth'">\n <ecl-icon eclAnimatedNumbersIcon icon="trend-up" iconSet="phosphor"></ecl-icon>\n</div></code></pre></div>",
|
|
33971
|
+
"rawdescription": "\n\nRepresents an individual animated number item.\nDisplays a numeric value that animates from 0 to the target when scrolled into view.\nUses an IntersectionObserver to trigger animation on viewport visibility and\nrequestAnimationFrame for smooth count-up with cubic ease-out.\n\n```html\n<div eclAnimatedNumbersItem\n [eclValue]=\"'1250'\"\n [category]=\"'Revenue'\"\n [prefix]=\"'€'\"\n [suffix]=\"'billions'\"\n [description]=\"'Annual revenue growth'\">\n <ecl-icon eclAnimatedNumbersIcon icon=\"trend-up\" iconSet=\"phosphor\"></ecl-icon>\n</div>\n```",
|
|
33972
|
+
"type": "component",
|
|
33973
|
+
"sourceCode": "import {\n Component,\n computed,\n ElementRef,\n NgZone,\n OnDestroy,\n afterNextRender,\n effect,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Represents an individual animated number item.\n * Displays a numeric value that animates from 0 to the target when scrolled into view.\n * Uses an IntersectionObserver to trigger animation on viewport visibility and\n * requestAnimationFrame for smooth count-up with cubic ease-out.\n *\n * @example\n * ```html\n * <div eclAnimatedNumbersItem\n * [eclValue]=\"'1250'\"\n * [category]=\"'Revenue'\"\n * [prefix]=\"'€'\"\n * [suffix]=\"'billions'\"\n * [description]=\"'Annual revenue growth'\">\n * <ecl-icon eclAnimatedNumbersIcon icon=\"trend-up\" iconSet=\"phosphor\"></ecl-icon>\n * </div>\n * ```\n */\n@Component({\n selector: '[eclAnimatedNumbersItem]',\n templateUrl: './ecl-animated-numbers-item.component.html',\n host: {\n 'class': 'ecl-animated-number',\n },\n})\nexport class EclAnimatedNumbersItemComponent extends ECLBaseDirective implements OnDestroy {\n\n /** Category label displayed in the item header. */\n category = input<string>();\n\n /** Descriptive text displayed below the number. */\n description = input<string>();\n\n /** The target numeric value to animate to. Accepts strings with non-numeric characters (they are stripped). */\n eclValue = input<string>();\n\n /** Text displayed after the animated number (e.g. '€', 'billions'). */\n suffix = input<string>();\n\n /** Text displayed before the animated number (e.g. '€', 'billion'). */\n prefix = input<string>();\n\n protected animationDuration = 1000;\n protected animationStyle: 'linear' | 'random' = 'linear';\n protected animateOnVisible = true;\n\n /** Parsed numeric target from the eclValue input. */\n private targetValue = computed(() => {\n const raw = this.eclValue();\n if (!raw) return 0;\n const cleaned = raw.replace(/[^\\d.-]/g, '');\n return cleaned ? parseFloat(cleaned) : 0;\n });\n\n private valueEl = viewChild<ElementRef<HTMLElement>>('valueEl');\n private elementRef = inject(ElementRef);\n private ngZone = inject(NgZone);\n\n private animationId: number | null = null;\n private observer: IntersectionObserver | null = null;\n private hasBeenVisible = false;\n private isRendered = false;\n\n constructor() {\n super();\n\n afterNextRender(() => {\n this.isRendered = true;\n // Set initial display to 0\n const el = this.valueEl()?.nativeElement;\n if (el) {\n el.textContent = '0';\n }\n\n if (this.animateOnVisible) {\n this.setupIntersectionObserver();\n } else {\n this.startAnimation(this.targetValue());\n }\n });\n\n // React to eclValue changes — only re-animate if already visible and rendered\n effect(() => {\n const target = this.targetValue();\n if (this.hasBeenVisible && this.isRendered) {\n queueMicrotask(() => this.startAnimation(target));\n }\n });\n }\n\n ngOnDestroy(): void {\n this.cleanup();\n }\n\n private setupIntersectionObserver(): void {\n this.observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n if (entry.isIntersecting) {\n this.hasBeenVisible = true;\n this.startAnimation(this.targetValue());\n } else if (this.hasBeenVisible) {\n // Reset to 0 when scrolled out of view\n if (this.animationId !== null) {\n cancelAnimationFrame(this.animationId);\n this.animationId = null;\n }\n const el = this.valueEl()?.nativeElement;\n if (el) {\n el.textContent = '0';\n el.style.width = '';\n }\n }\n },\n { threshold: 0.1 },\n );\n this.observer.observe(this.elementRef.nativeElement);\n }\n\n private startAnimation(to: number): void {\n if (this.animationId !== null) {\n cancelAnimationFrame(this.animationId);\n this.animationId = null;\n }\n\n const valueElement = this.valueEl()?.nativeElement;\n if (!valueElement) return;\n\n // Lock width to prevent layout shift during animation\n valueElement.textContent = to.toString();\n const finalWidth = valueElement.offsetWidth;\n valueElement.textContent = '0';\n valueElement.style.width = `${finalWidth}px`;\n\n this.ngZone.runOutsideAngular(() => {\n const duration = this.animationDuration;\n let startTime: number | null = null;\n let lastUpdateTime = 0;\n let lastValue: number | null = null;\n\n const tick = (now: number) => {\n if (startTime === null) {\n startTime = now;\n }\n\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n\n // Throttle updates (~50ms)\n if (now - lastUpdateTime < 50 && progress < 1) {\n this.animationId = requestAnimationFrame(tick);\n return;\n }\n lastUpdateTime = now;\n\n let value: number;\n if (this.animationStyle === 'random') {\n value = Math.floor(Math.random() * (to + 1));\n } else {\n // Cubic ease-out\n const eased = 1 - Math.pow(1 - progress, 3);\n value = eased * to;\n }\n\n const rounded = Math.floor(value);\n\n if (rounded !== lastValue) {\n valueElement.textContent = rounded.toString();\n lastValue = rounded;\n }\n\n if (progress < 1) {\n this.animationId = requestAnimationFrame(tick);\n } else {\n valueElement.textContent = to.toString();\n valueElement.style.width = '';\n this.animationId = null;\n }\n };\n\n this.animationId = requestAnimationFrame(tick);\n });\n }\n\n private cleanup(): void {\n if (this.animationId !== null) {\n cancelAnimationFrame(this.animationId);\n this.animationId = null;\n }\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n }\n}\n",
|
|
33974
|
+
"assetsDirs": [],
|
|
33975
|
+
"styleUrlsData": "",
|
|
33976
|
+
"stylesData": "",
|
|
33977
|
+
"constructorObj": {
|
|
33978
|
+
"name": "constructor",
|
|
33979
|
+
"description": "",
|
|
33980
|
+
"deprecated": false,
|
|
33981
|
+
"deprecationMessage": "",
|
|
33982
|
+
"args": [],
|
|
33983
|
+
"line": 76
|
|
33984
|
+
},
|
|
33985
|
+
"extends": [
|
|
33986
|
+
"ECLBaseDirective"
|
|
33987
|
+
],
|
|
33988
|
+
"implements": [
|
|
33989
|
+
"OnDestroy"
|
|
33990
|
+
],
|
|
33991
|
+
"templateData": "<div class=\"ecl-animated-number__header\">\n <div class=\"ecl-animated-number__category\">{{ category() }}</div>\n <ng-content select=\"[eclAnimatedNumbersIcon]\"></ng-content>\n</div>\n<div class=\"ecl-animated-number__content\">\n <div class=\"ecl-animated-number__number\">\n <span class=\"ecl-animated-number__prefix\">{{ prefix() }}</span>\n <div class=\"ecl-animated-number__value\" #valueEl></div>\n <div class=\"ecl-animated-number__suffix\">{{ suffix() }}</div>\n </div>\n</div>\n<div class=\"ecl-animated-number__description\">{{ description() }}</div>"
|
|
33992
|
+
},
|
|
33357
33993
|
{
|
|
33358
33994
|
"name": "EclAppComponent",
|
|
33359
33995
|
"id": "component-EclAppComponent-8c73257f7bef03b866e5360013ef450464bc58650f9e274dd3a80a7ea1586b4b5c60c21110a1a2792408e584c32a865736f0a60541e58cb7a8e3180c91fa6fbc",
|
|
@@ -46228,10 +46864,11 @@
|
|
|
46228
46864
|
},
|
|
46229
46865
|
{
|
|
46230
46866
|
"name": "EclMediaContainerComponent",
|
|
46231
|
-
"id": "component-EclMediaContainerComponent-
|
|
46867
|
+
"id": "component-EclMediaContainerComponent-6b77b23ff5fa8dac7789bf364014bcadfacb3547ff7967d00ae78c4af3b3fbf7493cbde3ccd54fe81710be7489babe004327fb069c4472dbaab74cb4b0fd15eb",
|
|
46232
46868
|
"file": "packages/ecl/components/ecl-media-container/ecl-media-container.component.ts",
|
|
46233
46869
|
"encapsulation": [],
|
|
46234
46870
|
"entryComponents": [],
|
|
46871
|
+
"host": {},
|
|
46235
46872
|
"inputs": [],
|
|
46236
46873
|
"outputs": [],
|
|
46237
46874
|
"providers": [],
|
|
@@ -46254,7 +46891,7 @@
|
|
|
46254
46891
|
"deprecationMessage": "",
|
|
46255
46892
|
"rawdescription": "\n\nUsed for a video only - if the video should play immediately.\n",
|
|
46256
46893
|
"description": "<p>Used for a video only - if the video should play immediately.</p>\n",
|
|
46257
|
-
"line":
|
|
46894
|
+
"line": 35,
|
|
46258
46895
|
"type": "boolean",
|
|
46259
46896
|
"decorators": []
|
|
46260
46897
|
},
|
|
@@ -46264,10 +46901,22 @@
|
|
|
46264
46901
|
"defaultValue": "false",
|
|
46265
46902
|
"deprecated": false,
|
|
46266
46903
|
"deprecationMessage": "",
|
|
46267
|
-
"line":
|
|
46904
|
+
"line": 31,
|
|
46268
46905
|
"type": "boolean",
|
|
46269
46906
|
"decorators": []
|
|
46270
46907
|
},
|
|
46908
|
+
{
|
|
46909
|
+
"name": "captionPosition",
|
|
46910
|
+
"defaultValue": "'bottom'",
|
|
46911
|
+
"deprecated": false,
|
|
46912
|
+
"deprecationMessage": "",
|
|
46913
|
+
"type": "\"over\" | \"bottom\" | \"hidden\"",
|
|
46914
|
+
"indexKey": "",
|
|
46915
|
+
"optional": false,
|
|
46916
|
+
"description": "",
|
|
46917
|
+
"line": 37,
|
|
46918
|
+
"required": false
|
|
46919
|
+
},
|
|
46271
46920
|
{
|
|
46272
46921
|
"name": "class",
|
|
46273
46922
|
"deprecated": false,
|
|
@@ -46305,6 +46954,41 @@
|
|
|
46305
46954
|
],
|
|
46306
46955
|
"outputsClass": [],
|
|
46307
46956
|
"propertiesClass": [
|
|
46957
|
+
{
|
|
46958
|
+
"name": "captionBottomOffset",
|
|
46959
|
+
"defaultValue": "signal<string | null>(null)",
|
|
46960
|
+
"deprecated": false,
|
|
46961
|
+
"deprecationMessage": "",
|
|
46962
|
+
"type": "unknown",
|
|
46963
|
+
"indexKey": "",
|
|
46964
|
+
"optional": false,
|
|
46965
|
+
"description": "",
|
|
46966
|
+
"line": 53
|
|
46967
|
+
},
|
|
46968
|
+
{
|
|
46969
|
+
"name": "captionPositionOverride",
|
|
46970
|
+
"defaultValue": "signal<'over' | 'bottom' | 'hidden' | null>(null)",
|
|
46971
|
+
"deprecated": false,
|
|
46972
|
+
"deprecationMessage": "",
|
|
46973
|
+
"type": "unknown",
|
|
46974
|
+
"indexKey": "",
|
|
46975
|
+
"optional": false,
|
|
46976
|
+
"description": "<p>Allows a parent component to override the caption position programmatically.</p>\n",
|
|
46977
|
+
"line": 42,
|
|
46978
|
+
"rawdescription": "\n\nAllows a parent component to override the caption position programmatically.\n"
|
|
46979
|
+
},
|
|
46980
|
+
{
|
|
46981
|
+
"name": "cssClasses",
|
|
46982
|
+
"defaultValue": "computed(() => {\n const position = this.resolvedCaptionPosition();\n return [super.getCssClasses('ecl-media-container'),\n position !== 'bottom' ? `ecl-media-container--caption-${position}` : ''\n ].join(' ').trim();\n })",
|
|
46983
|
+
"deprecated": false,
|
|
46984
|
+
"deprecationMessage": "",
|
|
46985
|
+
"type": "unknown",
|
|
46986
|
+
"indexKey": "",
|
|
46987
|
+
"optional": false,
|
|
46988
|
+
"description": "<p>Applies specific classes for the component.</p>\n",
|
|
46989
|
+
"line": 63,
|
|
46990
|
+
"rawdescription": "\n\nApplies specific classes for the component.\n"
|
|
46991
|
+
},
|
|
46308
46992
|
{
|
|
46309
46993
|
"name": "eclButtons",
|
|
46310
46994
|
"deprecated": false,
|
|
@@ -46313,7 +46997,7 @@
|
|
|
46313
46997
|
"indexKey": "",
|
|
46314
46998
|
"optional": false,
|
|
46315
46999
|
"description": "",
|
|
46316
|
-
"line":
|
|
47000
|
+
"line": 46,
|
|
46317
47001
|
"decorators": [
|
|
46318
47002
|
{
|
|
46319
47003
|
"name": "ViewChildren",
|
|
@@ -46332,7 +47016,7 @@
|
|
|
46332
47016
|
"indexKey": "",
|
|
46333
47017
|
"optional": false,
|
|
46334
47018
|
"description": "",
|
|
46335
|
-
"line":
|
|
47019
|
+
"line": 45,
|
|
46336
47020
|
"decorators": [
|
|
46337
47021
|
{
|
|
46338
47022
|
"name": "ContentChild",
|
|
@@ -46351,7 +47035,7 @@
|
|
|
46351
47035
|
"indexKey": "",
|
|
46352
47036
|
"optional": false,
|
|
46353
47037
|
"description": "",
|
|
46354
|
-
"line":
|
|
47038
|
+
"line": 44,
|
|
46355
47039
|
"decorators": [
|
|
46356
47040
|
{
|
|
46357
47041
|
"name": "ContentChild",
|
|
@@ -46362,6 +47046,17 @@
|
|
|
46362
47046
|
171
|
|
46363
47047
|
]
|
|
46364
47048
|
},
|
|
47049
|
+
{
|
|
47050
|
+
"name": "hasVideo",
|
|
47051
|
+
"defaultValue": "signal(false)",
|
|
47052
|
+
"deprecated": false,
|
|
47053
|
+
"deprecationMessage": "",
|
|
47054
|
+
"type": "unknown",
|
|
47055
|
+
"indexKey": "",
|
|
47056
|
+
"optional": false,
|
|
47057
|
+
"description": "",
|
|
47058
|
+
"line": 70
|
|
47059
|
+
},
|
|
46365
47060
|
{
|
|
46366
47061
|
"name": "isPlaying",
|
|
46367
47062
|
"defaultValue": "false",
|
|
@@ -46371,7 +47066,7 @@
|
|
|
46371
47066
|
"indexKey": "",
|
|
46372
47067
|
"optional": false,
|
|
46373
47068
|
"description": "",
|
|
46374
|
-
"line":
|
|
47069
|
+
"line": 72,
|
|
46375
47070
|
"modifierKind": [
|
|
46376
47071
|
125
|
|
46377
47072
|
]
|
|
@@ -46384,7 +47079,7 @@
|
|
|
46384
47079
|
"indexKey": "",
|
|
46385
47080
|
"optional": false,
|
|
46386
47081
|
"description": "",
|
|
46387
|
-
"line":
|
|
47082
|
+
"line": 47,
|
|
46388
47083
|
"decorators": [
|
|
46389
47084
|
{
|
|
46390
47085
|
"name": "ViewChild",
|
|
@@ -46403,7 +47098,7 @@
|
|
|
46403
47098
|
"indexKey": "",
|
|
46404
47099
|
"optional": false,
|
|
46405
47100
|
"description": "",
|
|
46406
|
-
"line":
|
|
47101
|
+
"line": 48,
|
|
46407
47102
|
"decorators": [
|
|
46408
47103
|
{
|
|
46409
47104
|
"name": "ViewChild",
|
|
@@ -46413,6 +47108,18 @@
|
|
|
46413
47108
|
"modifierKind": [
|
|
46414
47109
|
171
|
|
46415
47110
|
]
|
|
47111
|
+
},
|
|
47112
|
+
{
|
|
47113
|
+
"name": "resolvedCaptionPosition",
|
|
47114
|
+
"defaultValue": "computed(() => this.captionPositionOverride() ?? this.captionPosition())",
|
|
47115
|
+
"deprecated": false,
|
|
47116
|
+
"deprecationMessage": "",
|
|
47117
|
+
"type": "unknown",
|
|
47118
|
+
"indexKey": "",
|
|
47119
|
+
"optional": false,
|
|
47120
|
+
"description": "<p>Resolved caption position considering the override.</p>\n",
|
|
47121
|
+
"line": 58,
|
|
47122
|
+
"rawdescription": "\n\nResolved caption position considering the override.\n"
|
|
46416
47123
|
}
|
|
46417
47124
|
],
|
|
46418
47125
|
"methodsClass": [
|
|
@@ -46422,7 +47129,7 @@
|
|
|
46422
47129
|
"optional": false,
|
|
46423
47130
|
"returnType": "void",
|
|
46424
47131
|
"typeParameters": [],
|
|
46425
|
-
"line":
|
|
47132
|
+
"line": 79,
|
|
46426
47133
|
"deprecated": false,
|
|
46427
47134
|
"deprecationMessage": ""
|
|
46428
47135
|
},
|
|
@@ -46432,7 +47139,7 @@
|
|
|
46432
47139
|
"optional": false,
|
|
46433
47140
|
"returnType": "void",
|
|
46434
47141
|
"typeParameters": [],
|
|
46435
|
-
"line":
|
|
47142
|
+
"line": 110,
|
|
46436
47143
|
"deprecated": false,
|
|
46437
47144
|
"deprecationMessage": ""
|
|
46438
47145
|
},
|
|
@@ -46442,7 +47149,7 @@
|
|
|
46442
47149
|
"optional": false,
|
|
46443
47150
|
"returnType": "void",
|
|
46444
47151
|
"typeParameters": [],
|
|
46445
|
-
"line":
|
|
47152
|
+
"line": 134,
|
|
46446
47153
|
"deprecated": false,
|
|
46447
47154
|
"deprecationMessage": "",
|
|
46448
47155
|
"rawdescription": "\n\nWhen user clicks on 'pause' button -> pause the video and move the focus to the 'play' button.\n",
|
|
@@ -46454,7 +47161,7 @@
|
|
|
46454
47161
|
"optional": false,
|
|
46455
47162
|
"returnType": "void",
|
|
46456
47163
|
"typeParameters": [],
|
|
46457
|
-
"line":
|
|
47164
|
+
"line": 120,
|
|
46458
47165
|
"deprecated": false,
|
|
46459
47166
|
"deprecationMessage": "",
|
|
46460
47167
|
"rawdescription": "\n\nWhen user clicks on 'play' button -> start the video and move the focus to the 'pause' button.\n",
|
|
@@ -46498,18 +47205,7 @@
|
|
|
46498
47205
|
],
|
|
46499
47206
|
"deprecated": false,
|
|
46500
47207
|
"deprecationMessage": "",
|
|
46501
|
-
"hostBindings": [
|
|
46502
|
-
{
|
|
46503
|
-
"name": "class",
|
|
46504
|
-
"deprecated": false,
|
|
46505
|
-
"deprecationMessage": "",
|
|
46506
|
-
"rawdescription": "\n\nApplies specific classes for the component.\n",
|
|
46507
|
-
"description": "<p>Applies specific classes for the component.</p>\n",
|
|
46508
|
-
"line": 42,
|
|
46509
|
-
"type": "string",
|
|
46510
|
-
"decorators": []
|
|
46511
|
-
}
|
|
46512
|
-
],
|
|
47208
|
+
"hostBindings": [],
|
|
46513
47209
|
"hostListeners": [],
|
|
46514
47210
|
"standalone": false,
|
|
46515
47211
|
"imports": [
|
|
@@ -46523,7 +47219,7 @@
|
|
|
46523
47219
|
"description": "<p>A media container is used to display media items (video, audio, image or other data) with a caption.</p>\n",
|
|
46524
47220
|
"rawdescription": "\n\nA media container is used to display media items (video, audio, image or other data) with a caption.\n",
|
|
46525
47221
|
"type": "component",
|
|
46526
|
-
"sourceCode": "import { AfterContentInit, Component, ContentChild,
|
|
47222
|
+
"sourceCode": "import { isPlatformBrowser } from '@angular/common';\nimport { AfterContentInit, booleanAttribute, Component, computed, ContentChild, contentChild, DOCUMENT, ElementRef, inject, Input, input, OnDestroy, PLATFORM_ID, QueryList, Renderer2, signal, ViewChild, ViewChildren } from '@angular/core';\nimport { EclButtonComponent, EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EclExpandableComponent } from '@eui/ecl/components/ecl-expandable';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { auditTime, fromEvent, Subject, take, takeUntil, timer } from 'rxjs';\nimport { EclMediaContainerCreditDirective } from './ecl-media-container-credit.directive';\nimport { EclMediaContainerItemDirective } from './ecl-media-container-item.directive';\n\n/**\n * A media container is used to display media items (video, audio, image or other data) with a caption.\n */\n@Component({\n selector: 'ecl-media-container',\n templateUrl: './ecl-media-container.component.html',\n imports: [...EUI_ECL_BUTTON, ...EUI_ECL_ICON],\n host: {\n '[class]': 'cssClasses()',\n },\n styles: [\n `\n :host {\n display: block;\n }\n `,\n ],\n})\n\nexport class EclMediaContainerComponent extends ECLBaseDirective implements AfterContentInit, OnDestroy {\n @Input({ transform: booleanAttribute }) isFullWidth = false;\n /**\n * Used for a video only - if the video should play immediately.\n */\n @Input({ transform: booleanAttribute }) eclAutoplay = false;\n\n captionPosition = input<'over' | 'bottom' | 'hidden'>('bottom');\n\n /**\n * Allows a parent component to override the caption position programmatically.\n */\n captionPositionOverride = signal<'over' | 'bottom' | 'hidden' | null>(null);\n\n @ContentChild(EclExpandableComponent) expandable: EclExpandableComponent;\n @ContentChild(EclMediaContainerItemDirective) eclMediaContainerItem: EclMediaContainerItemDirective;\n @ViewChildren(EclButtonComponent) eclButtons: QueryList<EclButtonComponent>;\n @ViewChild('pauseButton') pauseButton: EclButtonComponent;\n @ViewChild('playButton') playButton: EclButtonComponent;\n private creditEl = contentChild(EclMediaContainerCreditDirective, { read: ElementRef });\n private readonly document = inject<Document>(DOCUMENT);\n private readonly window = this.document.defaultView;\n\n captionBottomOffset = signal<string | null>(null);\n\n /**\n * Resolved caption position considering the override.\n */\n resolvedCaptionPosition = computed(() => this.captionPositionOverride() ?? this.captionPosition());\n\n /**\n * Applies specific classes for the component.\n */\n cssClasses = computed(() => {\n const position = this.resolvedCaptionPosition();\n return [super.getCssClasses('ecl-media-container'),\n position !== 'bottom' ? `ecl-media-container--caption-${position}` : ''\n ].join(' ').trim();\n });\n\n hasVideo = signal(false);\n\n public isPlaying = false;\n private readonly DELAY = 0;\n private renderer = inject(Renderer2);\n private removeVideoListeners: Array<() => void> = [];\n private platformId = inject(PLATFORM_ID);\n private destroy$: Subject<boolean> = new Subject<boolean>();\n\n ngAfterContentInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.hasVideo.set(this.eclMediaContainerItem?.isVideo ?? false);\n\n if (this.hasVideo() && this.eclAutoplay) {\n const videoEl = this.eclMediaContainerItem?.el?.nativeElement as HTMLVideoElement | undefined;\n if (videoEl) {\n this.removeVideoListeners.push(\n this.renderer.listen(videoEl, 'play', () => (this.isPlaying = true)),\n this.renderer.listen(videoEl, 'pause', () => (this.isPlaying = false)),\n );\n\n this.renderer.setAttribute(videoEl, 'loop', '');\n this.renderer.setAttribute(videoEl, 'muted', '');\n this.renderer.setProperty(videoEl, 'muted', true);\n this.renderer.removeAttribute(videoEl, 'controls');\n }\n }\n this.setCaptionBottom();\n fromEvent(this.window, 'resize').pipe(\n auditTime(50),\n takeUntil(this.destroy$)).subscribe(() => {\n this.setCaptionBottom();\n });\n }\n\n if (this.expandable) {\n this.expandable.class = [this.expandable.class, 'ecl-media-container__expandable'].join(' ');\n }\n }\n\n ngOnDestroy(): void {\n for (const unlisten of this.removeVideoListeners) unlisten();\n this.removeVideoListeners = [];\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n /**\n * When user clicks on 'play' button -> start the video and move the focus to the 'pause' button.\n */\n onVideoPlay(): void {\n const videoEl = this.eclMediaContainerItem.el.nativeElement;\n videoEl.play();\n\n timer(this.DELAY).pipe(take(1)).subscribe(() => {\n const pauseButton = this.eclButtons.find(\n button => button === this.pauseButton);\n this.focusOnButton(pauseButton);\n });\n }\n\n /**\n * When user clicks on 'pause' button -> pause the video and move the focus to the 'play' button.\n */\n onVideoPause(): void {\n const videoEl = this.eclMediaContainerItem.el.nativeElement;\n videoEl.pause();\n\n timer(this.DELAY).pipe(take(1)).subscribe(() => {\n const playButton = this.eclButtons.find(\n button => button === this.playButton);\n this.focusOnButton(playButton);\n });\n }\n\n private focusOnButton(button: EclButtonComponent): void {\n if (!button) {\n return;\n }\n button.onFocus();\n }\n\n private setCaptionBottom(): void {\n if (!this.creditEl() || this.resolvedCaptionPosition() !== 'over') {\n this.captionBottomOffset.set(null);\n return;\n }\n this.captionBottomOffset.set(`${this.creditEl().nativeElement.offsetHeight}px`);\n }\n}\n",
|
|
46527
47223
|
"assetsDirs": [],
|
|
46528
47224
|
"styleUrlsData": "",
|
|
46529
47225
|
"stylesData": "\n :host {\n display: block;\n }\n \n",
|
|
@@ -46534,29 +47230,7 @@
|
|
|
46534
47230
|
"AfterContentInit",
|
|
46535
47231
|
"OnDestroy"
|
|
46536
47232
|
],
|
|
46537
|
-
"
|
|
46538
|
-
"cssClasses": {
|
|
46539
|
-
"name": "cssClasses",
|
|
46540
|
-
"getSignature": {
|
|
46541
|
-
"name": "cssClasses",
|
|
46542
|
-
"type": "string",
|
|
46543
|
-
"returnType": "string",
|
|
46544
|
-
"line": 42,
|
|
46545
|
-
"rawdescription": "\n\nApplies specific classes for the component.\n",
|
|
46546
|
-
"description": "<p>Applies specific classes for the component.</p>\n"
|
|
46547
|
-
}
|
|
46548
|
-
},
|
|
46549
|
-
"hasVideo": {
|
|
46550
|
-
"name": "hasVideo",
|
|
46551
|
-
"getSignature": {
|
|
46552
|
-
"name": "hasVideo",
|
|
46553
|
-
"type": "boolean",
|
|
46554
|
-
"returnType": "boolean",
|
|
46555
|
-
"line": 78
|
|
46556
|
-
}
|
|
46557
|
-
}
|
|
46558
|
-
},
|
|
46559
|
-
"templateData": "<figure class=\"ecl-media-container__figure\" [class.ecl-media-container--full-width]=\"isFullWidth\">\n @if (hasVideo) {\n <div class=\"ecl-media-container__video-wrapper\">\n <ng-content select=\"video[eclMediaContainerItem]\"></ng-content>\n @if (eclAutoplay) {\n <button #playButton eclButton variant=\"tertiary\" isIconOnly class=\"ecl-media-container__play\" (click)=\"onVideoPlay()\"\n [style.display]=\"isPlaying ? 'none' : 'flex'\" type=\"button\">\n <span eclButtonLabel>Play</span>\n <ecl-icon icon=\"play-outline\" size=\"m\"></ecl-icon>\n </button>\n <button #pauseButton eclButton variant=\"tertiary\" isIconOnly class=\"ecl-media-container__pause\" (click)=\"onVideoPause()\"\n [style.display]=\"isPlaying ? 'flex' : 'none'\" type=\"button\">\n <span eclButtonLabel>Pause</span>\n <ecl-icon icon=\"pause-outline\" size=\"m\"></ecl-icon>\n </button>\n }\n </div>\n }\n <ng-content select=\"div[eclMediaContainerItem]\"></ng-content>\n <ng-content select=\"picture[eclMediaContainerPicture]\"></ng-content>\n\n <ng-content select=\"figcaption[eclMediaContainerCaption]\"></ng-content>\n <ng-content select=\"footer[eclMediaContainerCredit]\"></ng-content>\n <ng-content select=\"ecl-expandable\"></ng-content>\n</figure>\n"
|
|
47233
|
+
"templateData": "<figure class=\"ecl-media-container__figure\" [class.ecl-media-container--full-width]=\"isFullWidth\" [style.--ecl-caption-bottom]=\"captionBottomOffset()\">\n @if (hasVideo()) {\n <div class=\"ecl-media-container__video-wrapper\">\n <ng-content select=\"video[eclMediaContainerItem]\"></ng-content>\n @if (eclAutoplay) {\n <button #playButton eclButton variant=\"tertiary\" isIconOnly class=\"ecl-media-container__play\" (click)=\"onVideoPlay()\"\n [style.display]=\"isPlaying ? 'none' : 'flex'\" type=\"button\">\n <span eclButtonLabel>Play</span>\n <ecl-icon icon=\"play-outline\" size=\"m\"></ecl-icon>\n </button>\n <button #pauseButton eclButton variant=\"tertiary\" isIconOnly class=\"ecl-media-container__pause\" (click)=\"onVideoPause()\"\n [style.display]=\"isPlaying ? 'flex' : 'none'\" type=\"button\">\n <span eclButtonLabel>Pause</span>\n <ecl-icon icon=\"pause-outline\" size=\"m\"></ecl-icon>\n </button>\n }\n </div>\n }\n <ng-content select=\"div[eclMediaContainerItem]\"></ng-content>\n <ng-content select=\"picture[eclMediaContainerPicture]\"></ng-content>\n\n <ng-content select=\"figcaption[eclMediaContainerCaption]\"></ng-content>\n <ng-content select=\"footer[eclMediaContainerCredit]\"></ng-content>\n <ng-content select=\"ecl-expandable\"></ng-content>\n</figure>\n"
|
|
46560
47234
|
},
|
|
46561
47235
|
{
|
|
46562
47236
|
"name": "EclMegaMenuComponent",
|
|
@@ -59013,6 +59687,71 @@
|
|
|
59013
59687
|
],
|
|
59014
59688
|
"templateData": "<ng-content select=\"ecl-breadcrumb, nav[eclBreadcrumb]\"></ng-content>\n\n<div class=\"ecl-page-header__content-info\">\n <ng-content select=\"[eclPageHeaderTitle]\"></ng-content>\n <ng-content select=\"[eclPageHeaderDescriptionContainer]\"></ng-content>\n</div>\n<ng-content select=\"[eclPageHeaderMeta]\"></ng-content>"
|
|
59015
59689
|
},
|
|
59690
|
+
{
|
|
59691
|
+
"name": "EclPageSummaryComponent",
|
|
59692
|
+
"id": "component-EclPageSummaryComponent-5f81c0aef2c37cdb717c2c7aa9a15d731be4b72fa85aea3a8a4f1744b4615909460b7b8983fb890cbe7c16fba29a080f8e1464960e002f304cc1bef504815cb5",
|
|
59693
|
+
"file": "packages/ecl/components/ecl-page-summary/ecl-page-summary.component.ts",
|
|
59694
|
+
"encapsulation": [],
|
|
59695
|
+
"entryComponents": [],
|
|
59696
|
+
"host": {},
|
|
59697
|
+
"inputs": [],
|
|
59698
|
+
"outputs": [],
|
|
59699
|
+
"providers": [],
|
|
59700
|
+
"selector": "ecl-page-summary",
|
|
59701
|
+
"styleUrls": [],
|
|
59702
|
+
"styles": [],
|
|
59703
|
+
"templateUrl": [
|
|
59704
|
+
"./ecl-page-summary.component.html"
|
|
59705
|
+
],
|
|
59706
|
+
"viewProviders": [],
|
|
59707
|
+
"hostDirectives": [],
|
|
59708
|
+
"inputsClass": [
|
|
59709
|
+
{
|
|
59710
|
+
"name": "eclTitle",
|
|
59711
|
+
"deprecated": false,
|
|
59712
|
+
"deprecationMessage": "",
|
|
59713
|
+
"type": "string",
|
|
59714
|
+
"indexKey": "",
|
|
59715
|
+
"optional": false,
|
|
59716
|
+
"description": "",
|
|
59717
|
+
"line": 14,
|
|
59718
|
+
"required": false
|
|
59719
|
+
},
|
|
59720
|
+
{
|
|
59721
|
+
"name": "hasIcon",
|
|
59722
|
+
"defaultValue": "true, { transform: booleanAttribute }",
|
|
59723
|
+
"deprecated": false,
|
|
59724
|
+
"deprecationMessage": "",
|
|
59725
|
+
"indexKey": "",
|
|
59726
|
+
"optional": false,
|
|
59727
|
+
"description": "",
|
|
59728
|
+
"line": 13,
|
|
59729
|
+
"required": false
|
|
59730
|
+
}
|
|
59731
|
+
],
|
|
59732
|
+
"outputsClass": [],
|
|
59733
|
+
"propertiesClass": [],
|
|
59734
|
+
"methodsClass": [],
|
|
59735
|
+
"deprecated": false,
|
|
59736
|
+
"deprecationMessage": "",
|
|
59737
|
+
"hostBindings": [],
|
|
59738
|
+
"hostListeners": [],
|
|
59739
|
+
"standalone": false,
|
|
59740
|
+
"imports": [
|
|
59741
|
+
{
|
|
59742
|
+
"name": "EUI_ECL_ICON"
|
|
59743
|
+
}
|
|
59744
|
+
],
|
|
59745
|
+
"description": "",
|
|
59746
|
+
"rawdescription": "\n",
|
|
59747
|
+
"type": "component",
|
|
59748
|
+
"sourceCode": "import { booleanAttribute, Component, input } from \"@angular/core\";\nimport { EUI_ECL_ICON } from \"@eui/ecl/components/ecl-icon\";\n\n@Component({\n selector: 'ecl-page-summary',\n templateUrl: './ecl-page-summary.component.html',\n host: {\n class: 'ecl-page-summary'\n },\n imports: [EUI_ECL_ICON],\n})\nexport class EclPageSummaryComponent {\n hasIcon = input(true, { transform: booleanAttribute });\n eclTitle = input<string>();\n}",
|
|
59749
|
+
"assetsDirs": [],
|
|
59750
|
+
"styleUrlsData": "",
|
|
59751
|
+
"stylesData": "",
|
|
59752
|
+
"extends": [],
|
|
59753
|
+
"templateData": "<div class=\"ecl-page-summary__header\">\n @if(hasIcon()) {\n <ecl-icon iconSet=\"phosphor\" size=\"m\" icon=\"book-open\" class=\"ecl-page-summary__icon\" />\n }\n @if(eclTitle()) {\n <span class=\"ecl-page-summary__title\">{{ eclTitle() }}</span>\n }\n</div>\n<div class=\"ecl-page-summary__description\"><ng-content></ng-content></div>"
|
|
59754
|
+
},
|
|
59016
59755
|
{
|
|
59017
59756
|
"name": "EclPaginationComponent",
|
|
59018
59757
|
"id": "component-EclPaginationComponent-9c9cfb56b1d37d9c389f300ca1cdf5780730e6fd19c0a1220327f19e0a39b02b2201dda13b04aed9ce3a9cae4778847ec3c3098ebe10bc2b8871a497ea8e14e0",
|
|
@@ -60338,15 +61077,16 @@
|
|
|
60338
61077
|
},
|
|
60339
61078
|
{
|
|
60340
61079
|
"name": "EclQuizCardComponent",
|
|
60341
|
-
"id": "component-EclQuizCardComponent-
|
|
61080
|
+
"id": "component-EclQuizCardComponent-c83d2d56d26ae6cb98cf5e5e2b544d7a1c282f5d1aa889b465ee7425fdfc3f5191cf19aa4202e2ff0f62e0e7a4554e2107c3e7593ec0e632d1f08916a0821c2c",
|
|
60342
61081
|
"file": "packages/ecl/components/ecl-quiz/ecl-quiz-card.component.ts",
|
|
60343
61082
|
"changeDetection": "ChangeDetectionStrategy.OnPush",
|
|
60344
61083
|
"encapsulation": [],
|
|
60345
61084
|
"entryComponents": [],
|
|
61085
|
+
"host": {},
|
|
60346
61086
|
"inputs": [],
|
|
60347
61087
|
"outputs": [],
|
|
60348
61088
|
"providers": [],
|
|
60349
|
-
"selector": "
|
|
61089
|
+
"selector": "li[eclQuizCard]",
|
|
60350
61090
|
"styleUrls": [],
|
|
60351
61091
|
"styles": [],
|
|
60352
61092
|
"templateUrl": [
|
|
@@ -60355,27 +61095,6 @@
|
|
|
60355
61095
|
"viewProviders": [],
|
|
60356
61096
|
"hostDirectives": [],
|
|
60357
61097
|
"inputsClass": [
|
|
60358
|
-
{
|
|
60359
|
-
"name": "ariaHidden",
|
|
60360
|
-
"defaultValue": "null",
|
|
60361
|
-
"deprecated": false,
|
|
60362
|
-
"deprecationMessage": "",
|
|
60363
|
-
"line": 122,
|
|
60364
|
-
"type": "string | null",
|
|
60365
|
-
"decorators": []
|
|
60366
|
-
},
|
|
60367
|
-
{
|
|
60368
|
-
"required": false,
|
|
60369
|
-
"name": "isActive",
|
|
60370
|
-
"defaultValue": "false",
|
|
60371
|
-
"deprecated": false,
|
|
60372
|
-
"deprecationMessage": "",
|
|
60373
|
-
"rawdescription": "\n\nWhether this card is currently active/visible in the slider.\n",
|
|
60374
|
-
"description": "<p>Whether this card is currently active/visible in the slider.</p>\n",
|
|
60375
|
-
"line": 83,
|
|
60376
|
-
"type": "boolean",
|
|
60377
|
-
"decorators": []
|
|
60378
|
-
},
|
|
60379
61098
|
{
|
|
60380
61099
|
"name": "answer",
|
|
60381
61100
|
"defaultValue": "''",
|
|
@@ -60385,7 +61104,7 @@
|
|
|
60385
61104
|
"indexKey": "",
|
|
60386
61105
|
"optional": false,
|
|
60387
61106
|
"description": "<p>The answer text displayed on the back of the card.\nUsed in 'reveal' variant or as explanation in 'poll' variant.</p>\n",
|
|
60388
|
-
"line":
|
|
61107
|
+
"line": 80,
|
|
60389
61108
|
"rawdescription": "\n\nThe answer text displayed on the back of the card.\nUsed in 'reveal' variant or as explanation in 'poll' variant.\n",
|
|
60390
61109
|
"required": false
|
|
60391
61110
|
},
|
|
@@ -60398,7 +61117,7 @@
|
|
|
60398
61117
|
"indexKey": "",
|
|
60399
61118
|
"optional": false,
|
|
60400
61119
|
"description": "<p>The answer title (e.g. "The correct answer is A.") for poll variant.</p>\n",
|
|
60401
|
-
"line":
|
|
61120
|
+
"line": 85,
|
|
60402
61121
|
"rawdescription": "\n\nThe answer title (e.g. \"The correct answer is A.\") for poll variant.\n",
|
|
60403
61122
|
"required": false
|
|
60404
61123
|
},
|
|
@@ -60411,7 +61130,7 @@
|
|
|
60411
61130
|
"indexKey": "",
|
|
60412
61131
|
"optional": false,
|
|
60413
61132
|
"description": "<p>Category label displayed in the card header (poll variant).</p>\n",
|
|
60414
|
-
"line":
|
|
61133
|
+
"line": 90,
|
|
60415
61134
|
"rawdescription": "\n\nCategory label displayed in the card header (poll variant).\n",
|
|
60416
61135
|
"required": false
|
|
60417
61136
|
},
|
|
@@ -60424,7 +61143,7 @@
|
|
|
60424
61143
|
"indexKey": "",
|
|
60425
61144
|
"optional": false,
|
|
60426
61145
|
"description": "<p>Icon name for the card header.\nDefaults to 'sparkle' for reveal, 'question' for poll.</p>\n",
|
|
60427
|
-
"line":
|
|
61146
|
+
"line": 96,
|
|
60428
61147
|
"rawdescription": "\n\nIcon name for the card header.\nDefaults to 'sparkle' for reveal, 'question' for poll.\n",
|
|
60429
61148
|
"required": false
|
|
60430
61149
|
},
|
|
@@ -60437,10 +61156,23 @@
|
|
|
60437
61156
|
"indexKey": "",
|
|
60438
61157
|
"optional": false,
|
|
60439
61158
|
"description": "<p>Icon size for the card header.</p>\n",
|
|
60440
|
-
"line":
|
|
61159
|
+
"line": 101,
|
|
60441
61160
|
"rawdescription": "\n\nIcon size for the card header.\n",
|
|
60442
61161
|
"required": false
|
|
60443
61162
|
},
|
|
61163
|
+
{
|
|
61164
|
+
"name": "id",
|
|
61165
|
+
"defaultValue": "`ecl-quiz-card-${crypto.randomUUID()}`",
|
|
61166
|
+
"deprecated": false,
|
|
61167
|
+
"deprecationMessage": "",
|
|
61168
|
+
"type": "string",
|
|
61169
|
+
"indexKey": "",
|
|
61170
|
+
"optional": false,
|
|
61171
|
+
"description": "<p>Unique identifier for the card, used for accessibility attributes.\nIf not provided, a unique ID is generated automatically.</p>\n",
|
|
61172
|
+
"line": 59,
|
|
61173
|
+
"rawdescription": "\n\nUnique identifier for the card, used for accessibility attributes.\nIf not provided, a unique ID is generated automatically.\n",
|
|
61174
|
+
"required": false
|
|
61175
|
+
},
|
|
60444
61176
|
{
|
|
60445
61177
|
"name": "options",
|
|
60446
61178
|
"defaultValue": "[]",
|
|
@@ -60450,7 +61182,7 @@
|
|
|
60450
61182
|
"indexKey": "",
|
|
60451
61183
|
"optional": false,
|
|
60452
61184
|
"description": "<p>Options for the poll variant. Each option has text and a match flag.</p>\n",
|
|
60453
|
-
"line":
|
|
61185
|
+
"line": 111,
|
|
60454
61186
|
"rawdescription": "\n\nOptions for the poll variant. Each option has text and a match flag.\n",
|
|
60455
61187
|
"required": false
|
|
60456
61188
|
},
|
|
@@ -60463,7 +61195,7 @@
|
|
|
60463
61195
|
"indexKey": "",
|
|
60464
61196
|
"optional": false,
|
|
60465
61197
|
"description": "<p>The question text displayed on the front of the card.</p>\n",
|
|
60466
|
-
"line":
|
|
61198
|
+
"line": 74,
|
|
60467
61199
|
"rawdescription": "\n\nThe question text displayed on the front of the card.\n",
|
|
60468
61200
|
"required": false
|
|
60469
61201
|
},
|
|
@@ -60510,7 +61242,7 @@
|
|
|
60510
61242
|
"deprecationMessage": "",
|
|
60511
61243
|
"rawdescription": "\n\nEmitted when the card is flipped.\n",
|
|
60512
61244
|
"description": "<p>Emitted when the card is flipped.</p>\n",
|
|
60513
|
-
"line":
|
|
61245
|
+
"line": 116,
|
|
60514
61246
|
"type": "EventEmitter"
|
|
60515
61247
|
}
|
|
60516
61248
|
],
|
|
@@ -60523,7 +61255,7 @@
|
|
|
60523
61255
|
"indexKey": "",
|
|
60524
61256
|
"optional": false,
|
|
60525
61257
|
"description": "",
|
|
60526
|
-
"line":
|
|
61258
|
+
"line": 121,
|
|
60527
61259
|
"decorators": [
|
|
60528
61260
|
{
|
|
60529
61261
|
"name": "ViewChild",
|
|
@@ -60535,24 +61267,16 @@
|
|
|
60535
61267
|
]
|
|
60536
61268
|
},
|
|
60537
61269
|
{
|
|
60538
|
-
"name": "
|
|
60539
|
-
"defaultValue": "
|
|
61270
|
+
"name": "answerId",
|
|
61271
|
+
"defaultValue": "computed(() => `${this.id()}-answer`)",
|
|
60540
61272
|
"deprecated": false,
|
|
60541
61273
|
"deprecationMessage": "",
|
|
60542
|
-
"type": "
|
|
61274
|
+
"type": "unknown",
|
|
60543
61275
|
"indexKey": "",
|
|
60544
61276
|
"optional": false,
|
|
60545
|
-
"description": "",
|
|
60546
|
-
"line":
|
|
60547
|
-
"
|
|
60548
|
-
{
|
|
60549
|
-
"name": "HostBinding",
|
|
60550
|
-
"stringifiedArguments": "'attr.aria-roledescription'"
|
|
60551
|
-
}
|
|
60552
|
-
],
|
|
60553
|
-
"modifierKind": [
|
|
60554
|
-
171
|
|
60555
|
-
]
|
|
61277
|
+
"description": "<p>Unique identifier for the answer element.</p>\n",
|
|
61278
|
+
"line": 69,
|
|
61279
|
+
"rawdescription": "\n\nUnique identifier for the answer element.\n"
|
|
60556
61280
|
},
|
|
60557
61281
|
{
|
|
60558
61282
|
"name": "backElementRef",
|
|
@@ -60562,7 +61286,7 @@
|
|
|
60562
61286
|
"indexKey": "",
|
|
60563
61287
|
"optional": false,
|
|
60564
61288
|
"description": "",
|
|
60565
|
-
"line":
|
|
61289
|
+
"line": 119,
|
|
60566
61290
|
"decorators": [
|
|
60567
61291
|
{
|
|
60568
61292
|
"name": "ViewChild",
|
|
@@ -60581,7 +61305,7 @@
|
|
|
60581
61305
|
"indexKey": "",
|
|
60582
61306
|
"optional": false,
|
|
60583
61307
|
"description": "",
|
|
60584
|
-
"line":
|
|
61308
|
+
"line": 122,
|
|
60585
61309
|
"decorators": [
|
|
60586
61310
|
{
|
|
60587
61311
|
"name": "ViewChild",
|
|
@@ -60600,7 +61324,7 @@
|
|
|
60600
61324
|
"indexKey": "",
|
|
60601
61325
|
"optional": false,
|
|
60602
61326
|
"description": "",
|
|
60603
|
-
"line":
|
|
61327
|
+
"line": 118,
|
|
60604
61328
|
"decorators": [
|
|
60605
61329
|
{
|
|
60606
61330
|
"name": "ViewChild",
|
|
@@ -60613,26 +61337,26 @@
|
|
|
60613
61337
|
},
|
|
60614
61338
|
{
|
|
60615
61339
|
"name": "isCorrect",
|
|
60616
|
-
"defaultValue": "null",
|
|
61340
|
+
"defaultValue": "signal<boolean | null>(null)",
|
|
60617
61341
|
"deprecated": false,
|
|
60618
61342
|
"deprecationMessage": "",
|
|
60619
|
-
"type": "
|
|
61343
|
+
"type": "unknown",
|
|
60620
61344
|
"indexKey": "",
|
|
60621
61345
|
"optional": false,
|
|
60622
61346
|
"description": "<p>Whether the selected option is correct (poll variant).</p>\n",
|
|
60623
|
-
"line":
|
|
61347
|
+
"line": 131,
|
|
60624
61348
|
"rawdescription": "\nWhether the selected option is correct (poll variant)."
|
|
60625
61349
|
},
|
|
60626
61350
|
{
|
|
60627
61351
|
"name": "isFlipped",
|
|
60628
|
-
"defaultValue": "false",
|
|
61352
|
+
"defaultValue": "signal(false)",
|
|
60629
61353
|
"deprecated": false,
|
|
60630
61354
|
"deprecationMessage": "",
|
|
60631
61355
|
"type": "unknown",
|
|
60632
61356
|
"indexKey": "",
|
|
60633
61357
|
"optional": false,
|
|
60634
61358
|
"description": "<p>Whether the card is currently flipped (showing back).</p>\n",
|
|
60635
|
-
"line":
|
|
61359
|
+
"line": 125,
|
|
60636
61360
|
"rawdescription": "\nWhether the card is currently flipped (showing back)."
|
|
60637
61361
|
},
|
|
60638
61362
|
{
|
|
@@ -60643,7 +61367,7 @@
|
|
|
60643
61367
|
"indexKey": "",
|
|
60644
61368
|
"optional": false,
|
|
60645
61369
|
"description": "",
|
|
60646
|
-
"line":
|
|
61370
|
+
"line": 120,
|
|
60647
61371
|
"decorators": [
|
|
60648
61372
|
{
|
|
60649
61373
|
"name": "ViewChild",
|
|
@@ -60655,35 +61379,27 @@
|
|
|
60655
61379
|
]
|
|
60656
61380
|
},
|
|
60657
61381
|
{
|
|
60658
|
-
"name": "
|
|
60659
|
-
"defaultValue": "
|
|
61382
|
+
"name": "questionId",
|
|
61383
|
+
"defaultValue": "computed(() => `${this.id()}-question`)",
|
|
60660
61384
|
"deprecated": false,
|
|
60661
61385
|
"deprecationMessage": "",
|
|
60662
|
-
"type": "
|
|
61386
|
+
"type": "unknown",
|
|
60663
61387
|
"indexKey": "",
|
|
60664
61388
|
"optional": false,
|
|
60665
|
-
"description": "",
|
|
60666
|
-
"line":
|
|
60667
|
-
"
|
|
60668
|
-
{
|
|
60669
|
-
"name": "HostBinding",
|
|
60670
|
-
"stringifiedArguments": "'attr.role'"
|
|
60671
|
-
}
|
|
60672
|
-
],
|
|
60673
|
-
"modifierKind": [
|
|
60674
|
-
171
|
|
60675
|
-
]
|
|
61389
|
+
"description": "<p>Unique identifier for the question element.</p>\n",
|
|
61390
|
+
"line": 64,
|
|
61391
|
+
"rawdescription": "\n\nUnique identifier for the question element.\n"
|
|
60676
61392
|
},
|
|
60677
61393
|
{
|
|
60678
61394
|
"name": "selectedOptionIndex",
|
|
60679
|
-
"defaultValue": "null",
|
|
61395
|
+
"defaultValue": "signal<number | null>(null)",
|
|
60680
61396
|
"deprecated": false,
|
|
60681
61397
|
"deprecationMessage": "",
|
|
60682
|
-
"type": "
|
|
61398
|
+
"type": "unknown",
|
|
60683
61399
|
"indexKey": "",
|
|
60684
61400
|
"optional": false,
|
|
60685
61401
|
"description": "<p>Index of the selected option (poll variant).</p>\n",
|
|
60686
|
-
"line":
|
|
61402
|
+
"line": 128,
|
|
60687
61403
|
"rawdescription": "\nIndex of the selected option (poll variant)."
|
|
60688
61404
|
},
|
|
60689
61405
|
{
|
|
@@ -60695,15 +61411,9 @@
|
|
|
60695
61411
|
"indexKey": "",
|
|
60696
61412
|
"optional": false,
|
|
60697
61413
|
"description": "",
|
|
60698
|
-
"line":
|
|
60699
|
-
"decorators": [
|
|
60700
|
-
{
|
|
60701
|
-
"name": "HostBinding",
|
|
60702
|
-
"stringifiedArguments": "'style.tranform'"
|
|
60703
|
-
}
|
|
60704
|
-
],
|
|
61414
|
+
"line": 146,
|
|
60705
61415
|
"modifierKind": [
|
|
60706
|
-
|
|
61416
|
+
148
|
|
60707
61417
|
]
|
|
60708
61418
|
},
|
|
60709
61419
|
{
|
|
@@ -60715,7 +61425,7 @@
|
|
|
60715
61425
|
"indexKey": "",
|
|
60716
61426
|
"optional": false,
|
|
60717
61427
|
"description": "<p>The variant of the quiz, set by the parent EclQuizComponent.</p>\n",
|
|
60718
|
-
"line":
|
|
61428
|
+
"line": 106,
|
|
60719
61429
|
"rawdescription": "\n\nThe variant of the quiz, set by the parent EclQuizComponent.\n"
|
|
60720
61430
|
}
|
|
60721
61431
|
],
|
|
@@ -60726,7 +61436,7 @@
|
|
|
60726
61436
|
"optional": false,
|
|
60727
61437
|
"returnType": "void",
|
|
60728
61438
|
"typeParameters": [],
|
|
60729
|
-
"line":
|
|
61439
|
+
"line": 193,
|
|
60730
61440
|
"deprecated": false,
|
|
60731
61441
|
"deprecationMessage": "",
|
|
60732
61442
|
"rawdescription": "\n\nFlip the card between front and back.\n",
|
|
@@ -60738,7 +61448,7 @@
|
|
|
60738
61448
|
"optional": false,
|
|
60739
61449
|
"returnType": "HTMLElement | null",
|
|
60740
61450
|
"typeParameters": [],
|
|
60741
|
-
"line":
|
|
61451
|
+
"line": 219,
|
|
60742
61452
|
"deprecated": false,
|
|
60743
61453
|
"deprecationMessage": "",
|
|
60744
61454
|
"rawdescription": "\nGet the native answer element for height calculations.",
|
|
@@ -60750,7 +61460,7 @@
|
|
|
60750
61460
|
"optional": false,
|
|
60751
61461
|
"returnType": "HTMLElement | null",
|
|
60752
61462
|
"typeParameters": [],
|
|
60753
|
-
"line":
|
|
61463
|
+
"line": 209,
|
|
60754
61464
|
"deprecated": false,
|
|
60755
61465
|
"deprecationMessage": "",
|
|
60756
61466
|
"rawdescription": "\nGet the native back element for height calculations.",
|
|
@@ -60762,7 +61472,7 @@
|
|
|
60762
61472
|
"optional": false,
|
|
60763
61473
|
"returnType": "HTMLElement | null",
|
|
60764
61474
|
"typeParameters": [],
|
|
60765
|
-
"line":
|
|
61475
|
+
"line": 224,
|
|
60766
61476
|
"deprecated": false,
|
|
60767
61477
|
"deprecationMessage": "",
|
|
60768
61478
|
"rawdescription": "\nGet the native content element for height calculations.",
|
|
@@ -60774,7 +61484,7 @@
|
|
|
60774
61484
|
"optional": false,
|
|
60775
61485
|
"returnType": "HTMLElement | null",
|
|
60776
61486
|
"typeParameters": [],
|
|
60777
|
-
"line":
|
|
61487
|
+
"line": 204,
|
|
60778
61488
|
"deprecated": false,
|
|
60779
61489
|
"deprecationMessage": "",
|
|
60780
61490
|
"rawdescription": "\nGet the native front element for height calculations.",
|
|
@@ -60786,7 +61496,7 @@
|
|
|
60786
61496
|
"optional": false,
|
|
60787
61497
|
"returnType": "string",
|
|
60788
61498
|
"typeParameters": [],
|
|
60789
|
-
"line":
|
|
61499
|
+
"line": 229,
|
|
60790
61500
|
"deprecated": false,
|
|
60791
61501
|
"deprecationMessage": "",
|
|
60792
61502
|
"rawdescription": "\nGet the resolved icon name based on variant.",
|
|
@@ -60798,7 +61508,7 @@
|
|
|
60798
61508
|
"optional": false,
|
|
60799
61509
|
"returnType": "string",
|
|
60800
61510
|
"typeParameters": [],
|
|
60801
|
-
"line":
|
|
61511
|
+
"line": 237,
|
|
60802
61512
|
"deprecated": false,
|
|
60803
61513
|
"deprecationMessage": "",
|
|
60804
61514
|
"rawdescription": "\nGet the resolved icon size.",
|
|
@@ -60810,7 +61520,7 @@
|
|
|
60810
61520
|
"optional": false,
|
|
60811
61521
|
"returnType": "HTMLElement | null",
|
|
60812
61522
|
"typeParameters": [],
|
|
60813
|
-
"line":
|
|
61523
|
+
"line": 214,
|
|
60814
61524
|
"deprecated": false,
|
|
60815
61525
|
"deprecationMessage": "",
|
|
60816
61526
|
"rawdescription": "\nGet the native question element for height calculations.",
|
|
@@ -60822,20 +61532,11 @@
|
|
|
60822
61532
|
"optional": false,
|
|
60823
61533
|
"returnType": "void",
|
|
60824
61534
|
"typeParameters": [],
|
|
60825
|
-
"line":
|
|
61535
|
+
"line": 151,
|
|
60826
61536
|
"deprecated": false,
|
|
60827
61537
|
"deprecationMessage": "",
|
|
60828
61538
|
"rawdescription": "\n\nHandle click on the card itself (reveal variant).\n",
|
|
60829
|
-
"description": "<p>Handle click on the card itself (reveal variant).</p>\n"
|
|
60830
|
-
"decorators": [
|
|
60831
|
-
{
|
|
60832
|
-
"name": "HostListener",
|
|
60833
|
-
"stringifiedArguments": "'click'"
|
|
60834
|
-
}
|
|
60835
|
-
],
|
|
60836
|
-
"modifierKind": [
|
|
60837
|
-
171
|
|
60838
|
-
]
|
|
61539
|
+
"description": "<p>Handle click on the card itself (reveal variant).</p>\n"
|
|
60839
61540
|
},
|
|
60840
61541
|
{
|
|
60841
61542
|
"name": "onKeydown",
|
|
@@ -60852,20 +61553,11 @@
|
|
|
60852
61553
|
"optional": false,
|
|
60853
61554
|
"returnType": "void",
|
|
60854
61555
|
"typeParameters": [],
|
|
60855
|
-
"line":
|
|
61556
|
+
"line": 160,
|
|
60856
61557
|
"deprecated": false,
|
|
60857
61558
|
"deprecationMessage": "",
|
|
60858
61559
|
"rawdescription": "\n\nHandle keyboard events (Enter/Space to flip for reveal variant).\n",
|
|
60859
61560
|
"description": "<p>Handle keyboard events (Enter/Space to flip for reveal variant).</p>\n",
|
|
60860
|
-
"decorators": [
|
|
60861
|
-
{
|
|
60862
|
-
"name": "HostListener",
|
|
60863
|
-
"stringifiedArguments": "'keydown', ['$event']"
|
|
60864
|
-
}
|
|
60865
|
-
],
|
|
60866
|
-
"modifierKind": [
|
|
60867
|
-
171
|
|
60868
|
-
],
|
|
60869
61561
|
"jsdoctags": [
|
|
60870
61562
|
{
|
|
60871
61563
|
"name": "event",
|
|
@@ -60895,7 +61587,7 @@
|
|
|
60895
61587
|
"optional": false,
|
|
60896
61588
|
"returnType": "void",
|
|
60897
61589
|
"typeParameters": [],
|
|
60898
|
-
"line":
|
|
61590
|
+
"line": 170,
|
|
60899
61591
|
"deprecated": false,
|
|
60900
61592
|
"deprecationMessage": "",
|
|
60901
61593
|
"rawdescription": "\n\nHandle option click (poll variant).\n",
|
|
@@ -60937,7 +61629,7 @@
|
|
|
60937
61629
|
"optional": false,
|
|
60938
61630
|
"returnType": "void",
|
|
60939
61631
|
"typeParameters": [],
|
|
60940
|
-
"line":
|
|
61632
|
+
"line": 183,
|
|
60941
61633
|
"deprecated": false,
|
|
60942
61634
|
"deprecationMessage": "",
|
|
60943
61635
|
"rawdescription": "\n\nHandle keyboard on option (poll variant).\n",
|
|
@@ -61005,92 +61697,8 @@
|
|
|
61005
61697
|
],
|
|
61006
61698
|
"deprecated": false,
|
|
61007
61699
|
"deprecationMessage": "",
|
|
61008
|
-
"hostBindings": [
|
|
61009
|
-
|
|
61010
|
-
"name": "attr.aria-pressed",
|
|
61011
|
-
"deprecated": false,
|
|
61012
|
-
"deprecationMessage": "",
|
|
61013
|
-
"line": 130,
|
|
61014
|
-
"type": "string | null",
|
|
61015
|
-
"decorators": []
|
|
61016
|
-
},
|
|
61017
|
-
{
|
|
61018
|
-
"name": "attr.aria-roledescription",
|
|
61019
|
-
"defaultValue": "null",
|
|
61020
|
-
"deprecated": false,
|
|
61021
|
-
"deprecationMessage": "",
|
|
61022
|
-
"line": 119,
|
|
61023
|
-
"type": "string | null",
|
|
61024
|
-
"decorators": []
|
|
61025
|
-
},
|
|
61026
|
-
{
|
|
61027
|
-
"name": "attr.role",
|
|
61028
|
-
"defaultValue": "'group'",
|
|
61029
|
-
"deprecated": false,
|
|
61030
|
-
"deprecationMessage": "",
|
|
61031
|
-
"line": 116,
|
|
61032
|
-
"type": "string",
|
|
61033
|
-
"decorators": []
|
|
61034
|
-
},
|
|
61035
|
-
{
|
|
61036
|
-
"name": "attr.tabindex",
|
|
61037
|
-
"deprecated": false,
|
|
61038
|
-
"deprecationMessage": "",
|
|
61039
|
-
"line": 125,
|
|
61040
|
-
"type": "number | null",
|
|
61041
|
-
"decorators": []
|
|
61042
|
-
},
|
|
61043
|
-
{
|
|
61044
|
-
"name": "class",
|
|
61045
|
-
"deprecated": false,
|
|
61046
|
-
"deprecationMessage": "",
|
|
61047
|
-
"line": 106,
|
|
61048
|
-
"type": "string",
|
|
61049
|
-
"decorators": []
|
|
61050
|
-
},
|
|
61051
|
-
{
|
|
61052
|
-
"name": "style.tranform",
|
|
61053
|
-
"defaultValue": "'translate3d(0px, 0px, 0px)'",
|
|
61054
|
-
"deprecated": false,
|
|
61055
|
-
"deprecationMessage": "",
|
|
61056
|
-
"line": 135,
|
|
61057
|
-
"type": "string",
|
|
61058
|
-
"decorators": []
|
|
61059
|
-
}
|
|
61060
|
-
],
|
|
61061
|
-
"hostListeners": [
|
|
61062
|
-
{
|
|
61063
|
-
"name": "click",
|
|
61064
|
-
"args": [],
|
|
61065
|
-
"argsDecorator": [],
|
|
61066
|
-
"deprecated": false,
|
|
61067
|
-
"deprecationMessage": "",
|
|
61068
|
-
"rawdescription": "\n\nHandle click on the card itself (reveal variant).\n",
|
|
61069
|
-
"description": "<p>Handle click on the card itself (reveal variant).</p>\n",
|
|
61070
|
-
"line": 141
|
|
61071
|
-
},
|
|
61072
|
-
{
|
|
61073
|
-
"name": "keydown",
|
|
61074
|
-
"args": [
|
|
61075
|
-
{
|
|
61076
|
-
"name": "event",
|
|
61077
|
-
"type": "KeyboardEvent",
|
|
61078
|
-
"optional": false,
|
|
61079
|
-
"dotDotDotToken": false,
|
|
61080
|
-
"deprecated": false,
|
|
61081
|
-
"deprecationMessage": ""
|
|
61082
|
-
}
|
|
61083
|
-
],
|
|
61084
|
-
"argsDecorator": [
|
|
61085
|
-
"$event"
|
|
61086
|
-
],
|
|
61087
|
-
"deprecated": false,
|
|
61088
|
-
"deprecationMessage": "",
|
|
61089
|
-
"rawdescription": "\n\nHandle keyboard events (Enter/Space to flip for reveal variant).\n",
|
|
61090
|
-
"description": "<p>Handle keyboard events (Enter/Space to flip for reveal variant).</p>\n",
|
|
61091
|
-
"line": 151
|
|
61092
|
-
}
|
|
61093
|
-
],
|
|
61700
|
+
"hostBindings": [],
|
|
61701
|
+
"hostListeners": [],
|
|
61094
61702
|
"standalone": false,
|
|
61095
61703
|
"imports": [
|
|
61096
61704
|
{
|
|
@@ -61105,7 +61713,7 @@
|
|
|
61105
61713
|
"description": "<p>ECL Quiz Card component – represents a single card in the quiz.</p>\n<p>For the 'reveal' variant, the entire card is clickable to flip.\nFor the 'poll' variant, individual options trigger the flip.</p>\n",
|
|
61106
61714
|
"rawdescription": "\n\nECL Quiz Card component – represents a single card in the quiz.\n\nFor the 'reveal' variant, the entire card is clickable to flip.\nFor the 'poll' variant, individual options trigger the flip.\n",
|
|
61107
61715
|
"type": "component",
|
|
61108
|
-
"sourceCode": "import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n
|
|
61716
|
+
"sourceCode": "import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\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 { TranslateModule } from '@ngx-translate/core';\n\nexport interface EclQuizCardFlipEvent {\n flipped: boolean;\n selectedOptionIndex?: number;\n isCorrect?: boolean;\n}\n\n@Directive({\n selector: 'ol[eclQuizList]',\n})\nexport class EclQuizListDirective {\n @HostBinding('class.ecl-quiz__list') hasClass = true;\n}\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, TranslateModule],\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 * Unique identifier for the question element.\n */\n questionId = computed(() => `${this.id()}-question`);\n\n /**\n * Unique identifier for the answer element.\n */\n answerId = computed(() => `${this.id()}-answer`);\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 variant: 'poll' | 'reveal' = 'reveal';\n\n /**\n * Options for the poll variant. Each option has text and a match flag.\n */\n options = input<Array<{ text: string; match: boolean }>>([]);\n\n /**\n * Emitted when the card is flipped.\n */\n @Output() cardFlip = new EventEmitter<EclQuizCardFlipEvent>();\n\n @ViewChild('frontElement') frontElementRef: ElementRef;\n @ViewChild('backElement') backElementRef: ElementRef;\n @ViewChild('questionElement') questionElementRef: ElementRef;\n @ViewChild('answerElement') answerElementRef: ElementRef;\n @ViewChild('contentElement') contentElementRef: ElementRef;\n\n /** Whether the card is currently flipped (showing back). */\n isFlipped = signal(false);\n\n /** Index of the selected option (poll variant). */\n selectedOptionIndex = signal<number | null>(null);\n\n /** Whether the selected option is correct (poll variant). */\n isCorrect = signal<boolean | null>(null);\n\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-quiz-card'),\n this.isFlipped() ? 'ecl-quiz-card__flipped' : '',\n ]\n .join(' ')\n .trim();\n }\n\n get tabIndex(): number | null {\n return this.variant === 'reveal' ? 0 : null;\n }\n\n readonly styleTransform = 'translate3d(0px, 0px, 0px)';\n\n /**\n * Handle click on the card itself (reveal variant).\n */\n 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 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 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 }\n\n /**\n * Handle keyboard on option (poll variant).\n */\n 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 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 /** 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 the resolved icon name based on variant. */\n 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 getIconSize(): string {\n return this.iconSize() || (this.variant === 'poll' ? '2xl' : 'xl');\n }\n}\n",
|
|
61109
61717
|
"assetsDirs": [],
|
|
61110
61718
|
"styleUrlsData": "",
|
|
61111
61719
|
"stylesData": "",
|
|
@@ -61119,7 +61727,7 @@
|
|
|
61119
61727
|
"name": "cssClasses",
|
|
61120
61728
|
"type": "string",
|
|
61121
61729
|
"returnType": "string",
|
|
61122
|
-
"line":
|
|
61730
|
+
"line": 133
|
|
61123
61731
|
}
|
|
61124
61732
|
},
|
|
61125
61733
|
"tabIndex": {
|
|
@@ -61128,32 +61736,24 @@
|
|
|
61128
61736
|
"name": "tabIndex",
|
|
61129
61737
|
"type": "unknown",
|
|
61130
61738
|
"returnType": "number | null",
|
|
61131
|
-
"line":
|
|
61132
|
-
}
|
|
61133
|
-
},
|
|
61134
|
-
"ariaPressed": {
|
|
61135
|
-
"name": "ariaPressed",
|
|
61136
|
-
"getSignature": {
|
|
61137
|
-
"name": "ariaPressed",
|
|
61138
|
-
"type": "unknown",
|
|
61139
|
-
"returnType": "string | null",
|
|
61140
|
-
"line": 130
|
|
61739
|
+
"line": 142
|
|
61141
61740
|
}
|
|
61142
61741
|
}
|
|
61143
61742
|
},
|
|
61144
|
-
"templateData": "<
|
|
61743
|
+
"templateData": "<article class=\"ecl-quiz-card__content\" #contentElement>\n <!-- Front face -->\n <div class=\"ecl-quiz-card__front\" #frontElement [hidden]=\"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.CLICK-TO-REVEAL' | translate }}\n <ecl-icon iconSet=\"phosphor\" icon=\"arrow-clockwise\" size=\"m\"></ecl-icon>\n </div>\n } @else {\n <!-- Poll variant: options -->\n <fieldset>\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\"\n (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\"\n (keydown)=\"onOptionKeydown($event, i)\">\n {{ option.text }}</label>\n </li>\n }\n </ol>\n </fieldset>\n }\n </div>\n\n <!-- Back face -->\n <div class=\"ecl-quiz-card__back\" #backElement [hidden]=\"!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 class=\"ecl-quiz-card__category ecl-quiz-card__category--success\" [attr.tabindex]=\"isFlipped() && isCorrect() === true ? 0 : null\">Correct</span>\n <span class=\"ecl-quiz-card__category ecl-quiz-card__category--error\" [attr.tabindex]=\"isFlipped() && isCorrect() === false ? 0 : null\">Incorrect</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.GO-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\"\n [class.ecl-quiz-card__option--selected]=\"selectedOptionIndex() === i\" [attr.data-match]=\"option.match\">\n {{ option.text }}\n </li>\n }\n </ol>\n }\n </div>\n</article>"
|
|
61145
61744
|
},
|
|
61146
61745
|
{
|
|
61147
61746
|
"name": "EclQuizComponent",
|
|
61148
|
-
"id": "component-EclQuizComponent-
|
|
61747
|
+
"id": "component-EclQuizComponent-fe23b5f9d821dc5bc73a195ff9c3b2716c2c3196af5343029b10d4b1703d75bf4e824bb94ca064b8eea2c96fd5965b9a5ba274931f97a61ef5e9c269519c5ca2",
|
|
61149
61748
|
"file": "packages/ecl/components/ecl-quiz/ecl-quiz.component.ts",
|
|
61150
61749
|
"changeDetection": "ChangeDetectionStrategy.OnPush",
|
|
61151
61750
|
"encapsulation": [],
|
|
61152
61751
|
"entryComponents": [],
|
|
61752
|
+
"host": {},
|
|
61153
61753
|
"inputs": [],
|
|
61154
61754
|
"outputs": [],
|
|
61155
61755
|
"providers": [],
|
|
61156
|
-
"selector": "
|
|
61756
|
+
"selector": "section[eclQuiz]",
|
|
61157
61757
|
"styleUrls": [],
|
|
61158
61758
|
"styles": [],
|
|
61159
61759
|
"templateUrl": [
|
|
@@ -61171,7 +61771,7 @@
|
|
|
61171
61771
|
"indexKey": "",
|
|
61172
61772
|
"optional": false,
|
|
61173
61773
|
"description": "<p>Description displayed below the title.</p>\n",
|
|
61174
|
-
"line":
|
|
61774
|
+
"line": 54,
|
|
61175
61775
|
"rawdescription": "\nDescription displayed below the title.",
|
|
61176
61776
|
"required": false
|
|
61177
61777
|
},
|
|
@@ -61184,7 +61784,7 @@
|
|
|
61184
61784
|
"indexKey": "",
|
|
61185
61785
|
"optional": false,
|
|
61186
61786
|
"description": "<p>Title displayed in the quiz header.</p>\n",
|
|
61187
|
-
"line":
|
|
61787
|
+
"line": 51,
|
|
61188
61788
|
"rawdescription": "\nTitle displayed in the quiz header.",
|
|
61189
61789
|
"required": false
|
|
61190
61790
|
},
|
|
@@ -61197,7 +61797,7 @@
|
|
|
61197
61797
|
"indexKey": "",
|
|
61198
61798
|
"optional": false,
|
|
61199
61799
|
"description": "<p>Quiz variant: 'reveal' for flip cards, 'poll' for multiple choice.</p>\n",
|
|
61200
|
-
"line":
|
|
61800
|
+
"line": 48,
|
|
61201
61801
|
"rawdescription": "\nQuiz variant: 'reveal' for flip cards, 'poll' for multiple choice.",
|
|
61202
61802
|
"required": false
|
|
61203
61803
|
},
|
|
@@ -61247,7 +61847,7 @@
|
|
|
61247
61847
|
"indexKey": "",
|
|
61248
61848
|
"optional": false,
|
|
61249
61849
|
"description": "<p>Current snap index.</p>\n",
|
|
61250
|
-
"line":
|
|
61850
|
+
"line": 66,
|
|
61251
61851
|
"rawdescription": "\nCurrent snap index."
|
|
61252
61852
|
},
|
|
61253
61853
|
{
|
|
@@ -61258,11 +61858,11 @@
|
|
|
61258
61858
|
"indexKey": "",
|
|
61259
61859
|
"optional": false,
|
|
61260
61860
|
"description": "",
|
|
61261
|
-
"line":
|
|
61861
|
+
"line": 60,
|
|
61262
61862
|
"decorators": [
|
|
61263
61863
|
{
|
|
61264
61864
|
"name": "ContentChildren",
|
|
61265
|
-
"stringifiedArguments": "undefined"
|
|
61865
|
+
"stringifiedArguments": "undefined, {descendants: true}"
|
|
61266
61866
|
}
|
|
61267
61867
|
],
|
|
61268
61868
|
"modifierKind": [
|
|
@@ -61289,7 +61889,7 @@
|
|
|
61289
61889
|
"indexKey": "",
|
|
61290
61890
|
"optional": false,
|
|
61291
61891
|
"description": "",
|
|
61292
|
-
"line":
|
|
61892
|
+
"line": 63,
|
|
61293
61893
|
"decorators": [
|
|
61294
61894
|
{
|
|
61295
61895
|
"name": "ViewChildren",
|
|
@@ -61309,7 +61909,7 @@
|
|
|
61309
61909
|
"indexKey": "",
|
|
61310
61910
|
"optional": false,
|
|
61311
61911
|
"description": "<p>Embla carousel options matching ECL's configuration.</p>\n",
|
|
61312
|
-
"line":
|
|
61912
|
+
"line": 57,
|
|
61313
61913
|
"rawdescription": "\nEmbla carousel options matching ECL's configuration."
|
|
61314
61914
|
},
|
|
61315
61915
|
{
|
|
@@ -61320,7 +61920,7 @@
|
|
|
61320
61920
|
"indexKey": "",
|
|
61321
61921
|
"optional": false,
|
|
61322
61922
|
"description": "",
|
|
61323
|
-
"line":
|
|
61923
|
+
"line": 62,
|
|
61324
61924
|
"decorators": [
|
|
61325
61925
|
{
|
|
61326
61926
|
"name": "ViewChild",
|
|
@@ -61331,18 +61931,6 @@
|
|
|
61331
61931
|
171
|
|
61332
61932
|
]
|
|
61333
61933
|
},
|
|
61334
|
-
{
|
|
61335
|
-
"name": "liveRegionText",
|
|
61336
|
-
"defaultValue": "signal('')",
|
|
61337
|
-
"deprecated": false,
|
|
61338
|
-
"deprecationMessage": "",
|
|
61339
|
-
"type": "unknown",
|
|
61340
|
-
"indexKey": "",
|
|
61341
|
-
"optional": false,
|
|
61342
|
-
"description": "<p>Live region text for screen readers.</p>\n",
|
|
61343
|
-
"line": 69,
|
|
61344
|
-
"rawdescription": "\nLive region text for screen readers."
|
|
61345
|
-
},
|
|
61346
61934
|
{
|
|
61347
61935
|
"name": "nextDisabled",
|
|
61348
61936
|
"defaultValue": "signal(true)",
|
|
@@ -61388,7 +61976,7 @@
|
|
|
61388
61976
|
"indexKey": "",
|
|
61389
61977
|
"optional": false,
|
|
61390
61978
|
"description": "<p>Subscribed Embla events.</p>\n",
|
|
61391
|
-
"line":
|
|
61979
|
+
"line": 167,
|
|
61392
61980
|
"rawdescription": "\nSubscribed Embla events."
|
|
61393
61981
|
},
|
|
61394
61982
|
{
|
|
@@ -61400,7 +61988,7 @@
|
|
|
61400
61988
|
"indexKey": "",
|
|
61401
61989
|
"optional": false,
|
|
61402
61990
|
"description": "<p>Total number of snap points.</p>\n",
|
|
61403
|
-
"line":
|
|
61991
|
+
"line": 69,
|
|
61404
61992
|
"rawdescription": "\nTotal number of snap points."
|
|
61405
61993
|
}
|
|
61406
61994
|
],
|
|
@@ -61411,7 +61999,7 @@
|
|
|
61411
61999
|
"optional": false,
|
|
61412
62000
|
"returnType": "void",
|
|
61413
62001
|
"typeParameters": [],
|
|
61414
|
-
"line":
|
|
62002
|
+
"line": 173,
|
|
61415
62003
|
"deprecated": false,
|
|
61416
62004
|
"deprecationMessage": "",
|
|
61417
62005
|
"rawdescription": "\n\nEqualizes the height of all cards based on the tallest content.\nMirrors the ECL vanilla `checkHeight()` logic.\n",
|
|
@@ -61423,7 +62011,7 @@
|
|
|
61423
62011
|
"optional": false,
|
|
61424
62012
|
"returnType": "number",
|
|
61425
62013
|
"typeParameters": [],
|
|
61426
|
-
"line":
|
|
62014
|
+
"line": 139,
|
|
61427
62015
|
"deprecated": false,
|
|
61428
62016
|
"deprecationMessage": "",
|
|
61429
62017
|
"rawdescription": "\nReturns the total number of cards.",
|
|
@@ -61435,7 +62023,7 @@
|
|
|
61435
62023
|
"optional": false,
|
|
61436
62024
|
"returnType": "number[]",
|
|
61437
62025
|
"typeParameters": [],
|
|
61438
|
-
"line":
|
|
62026
|
+
"line": 144,
|
|
61439
62027
|
"deprecated": false,
|
|
61440
62028
|
"deprecationMessage": "",
|
|
61441
62029
|
"rawdescription": "\nReturns an array of indices for dot rendering.",
|
|
@@ -61456,7 +62044,7 @@
|
|
|
61456
62044
|
"optional": false,
|
|
61457
62045
|
"returnType": "void",
|
|
61458
62046
|
"typeParameters": [],
|
|
61459
|
-
"line":
|
|
62047
|
+
"line": 132,
|
|
61460
62048
|
"deprecated": false,
|
|
61461
62049
|
"deprecationMessage": "",
|
|
61462
62050
|
"rawdescription": "\nNavigate to a specific snap index.",
|
|
@@ -61481,7 +62069,7 @@
|
|
|
61481
62069
|
"optional": false,
|
|
61482
62070
|
"returnType": "void",
|
|
61483
62071
|
"typeParameters": [],
|
|
61484
|
-
"line":
|
|
62072
|
+
"line": 95,
|
|
61485
62073
|
"deprecated": false,
|
|
61486
62074
|
"deprecationMessage": ""
|
|
61487
62075
|
},
|
|
@@ -61491,7 +62079,7 @@
|
|
|
61491
62079
|
"optional": false,
|
|
61492
62080
|
"returnType": "void",
|
|
61493
62081
|
"typeParameters": [],
|
|
61494
|
-
"line":
|
|
62082
|
+
"line": 103,
|
|
61495
62083
|
"deprecated": false,
|
|
61496
62084
|
"deprecationMessage": ""
|
|
61497
62085
|
},
|
|
@@ -61510,7 +62098,7 @@
|
|
|
61510
62098
|
"optional": false,
|
|
61511
62099
|
"returnType": "void",
|
|
61512
62100
|
"typeParameters": [],
|
|
61513
|
-
"line":
|
|
62101
|
+
"line": 149,
|
|
61514
62102
|
"deprecated": false,
|
|
61515
62103
|
"deprecationMessage": "",
|
|
61516
62104
|
"rawdescription": "\nCalled by the emblaChange event from the directive.",
|
|
@@ -61544,20 +62132,11 @@
|
|
|
61544
62132
|
"optional": false,
|
|
61545
62133
|
"returnType": "void",
|
|
61546
62134
|
"typeParameters": [],
|
|
61547
|
-
"line":
|
|
62135
|
+
"line": 111,
|
|
61548
62136
|
"deprecated": false,
|
|
61549
62137
|
"deprecationMessage": "",
|
|
61550
62138
|
"rawdescription": "\nHandle keyboard events.",
|
|
61551
62139
|
"description": "<p>Handle keyboard events.</p>\n",
|
|
61552
|
-
"decorators": [
|
|
61553
|
-
{
|
|
61554
|
-
"name": "HostListener",
|
|
61555
|
-
"stringifiedArguments": "'keydown', ['$event']"
|
|
61556
|
-
}
|
|
61557
|
-
],
|
|
61558
|
-
"modifierKind": [
|
|
61559
|
-
171
|
|
61560
|
-
],
|
|
61561
62140
|
"jsdoctags": [
|
|
61562
62141
|
{
|
|
61563
62142
|
"name": "event",
|
|
@@ -61578,7 +62157,7 @@
|
|
|
61578
62157
|
"optional": false,
|
|
61579
62158
|
"returnType": "void",
|
|
61580
62159
|
"typeParameters": [],
|
|
61581
|
-
"line":
|
|
62160
|
+
"line": 125,
|
|
61582
62161
|
"deprecated": false,
|
|
61583
62162
|
"deprecationMessage": "",
|
|
61584
62163
|
"rawdescription": "\nNavigate to the next snap.",
|
|
@@ -61590,7 +62169,7 @@
|
|
|
61590
62169
|
"optional": false,
|
|
61591
62170
|
"returnType": "void",
|
|
61592
62171
|
"typeParameters": [],
|
|
61593
|
-
"line":
|
|
62172
|
+
"line": 118,
|
|
61594
62173
|
"deprecated": false,
|
|
61595
62174
|
"deprecationMessage": "",
|
|
61596
62175
|
"rawdescription": "\nNavigate to the previous snap.",
|
|
@@ -61634,39 +62213,8 @@
|
|
|
61634
62213
|
],
|
|
61635
62214
|
"deprecated": false,
|
|
61636
62215
|
"deprecationMessage": "",
|
|
61637
|
-
"hostBindings": [
|
|
61638
|
-
|
|
61639
|
-
"name": "class",
|
|
61640
|
-
"deprecated": false,
|
|
61641
|
-
"deprecationMessage": "",
|
|
61642
|
-
"line": 88,
|
|
61643
|
-
"type": "string",
|
|
61644
|
-
"decorators": []
|
|
61645
|
-
}
|
|
61646
|
-
],
|
|
61647
|
-
"hostListeners": [
|
|
61648
|
-
{
|
|
61649
|
-
"name": "keydown",
|
|
61650
|
-
"args": [
|
|
61651
|
-
{
|
|
61652
|
-
"name": "event",
|
|
61653
|
-
"type": "KeyboardEvent",
|
|
61654
|
-
"optional": false,
|
|
61655
|
-
"dotDotDotToken": false,
|
|
61656
|
-
"deprecated": false,
|
|
61657
|
-
"deprecationMessage": ""
|
|
61658
|
-
}
|
|
61659
|
-
],
|
|
61660
|
-
"argsDecorator": [
|
|
61661
|
-
"$event"
|
|
61662
|
-
],
|
|
61663
|
-
"deprecated": false,
|
|
61664
|
-
"deprecationMessage": "",
|
|
61665
|
-
"rawdescription": "\nHandle keyboard events.",
|
|
61666
|
-
"description": "<p>Handle keyboard events.</p>\n",
|
|
61667
|
-
"line": 119
|
|
61668
|
-
}
|
|
61669
|
-
],
|
|
62216
|
+
"hostBindings": [],
|
|
62217
|
+
"hostListeners": [],
|
|
61670
62218
|
"standalone": false,
|
|
61671
62219
|
"imports": [
|
|
61672
62220
|
{
|
|
@@ -61685,7 +62233,7 @@
|
|
|
61685
62233
|
"description": "<p>ECL Quiz component – renders a carousel of quiz cards with navigation.\nSupports two variants: 'reveal' (flip cards) and 'poll' (multiple choice).</p>\n<p>Uses Embla Carousel (via embla-carousel-angular) to match the ECL vanilla\nimplementation which also uses Embla internally.</p>\n",
|
|
61686
62234
|
"rawdescription": "\n\nECL Quiz component – renders a carousel of quiz cards with navigation.\nSupports two variants: 'reveal' (flip cards) and 'poll' (multiple choice).\n\nUses Embla Carousel (via embla-carousel-angular) to match the ECL vanilla\nimplementation which also uses Embla internally.\n",
|
|
61687
62235
|
"type": "component",
|
|
61688
|
-
"sourceCode": "import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n forwardRef,\n HostBinding,\n HostListener,\n inject,\n input,\n QueryList,\n signal,\n ViewChild,\n ViewChildren\n} from '@angular/core';\nimport { EclIconComponent } from '@eui/ecl/components/ecl-icon';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { EmblaCarouselDirective, EmblaCarouselType, EmblaEventType } from 'embla-carousel-angular';\nimport { EclQuizCardComponent } from './ecl-quiz-card.component';\n\n/**\n * ECL Quiz component – renders a carousel of quiz cards with navigation.\n * Supports two variants: 'reveal' (flip cards) and 'poll' (multiple choice).\n *\n * Uses Embla Carousel (via embla-carousel-angular) to match the ECL vanilla\n * implementation which also uses Embla internally.\n */\n@Component({\n selector: 'div[eclQuiz]',\n templateUrl: './ecl-quiz.component.html',\n imports: [\n TranslateModule,\n EclIconComponent,\n EmblaCarouselDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclQuizComponent extends ECLBaseDirective implements AfterContentInit, AfterViewInit {\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 /** Embla carousel options matching ECL's configuration. */\n emblaOptions = { loop: false, align: 'start' as const };\n\n @ContentChildren(forwardRef(() => EclQuizCardComponent))\n cards: QueryList<EclQuizCardComponent>;\n\n @ViewChild(EmblaCarouselDirective) emblaRef: EmblaCarouselDirective;\n @ViewChildren('dotButton') dotButtons: QueryList<ElementRef>;\n\n /** Current snap index. */\n activeIndex = signal(0);\n\n /** Total number of snap points. */\n totalSnaps = signal(0);\n\n /** Live region text for screen readers. */\n liveRegionText = signal('');\n\n /** Counter text for mobile display. */\n counterText = signal('');\n\n /** Whether the previous button is disabled. */\n prevDisabled = signal(true);\n\n /** Whether the next button is disabled. */\n nextDisabled = signal(true);\n\n /** Whether navigation controls should be shown. */\n showControls = signal(false);\n\n private cd = inject(ChangeDetectorRef);\n private translateService = inject(TranslateService);\n private emblaApi: EmblaCarouselType | undefined;\n\n @HostBinding('class')\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-quiz'),\n `ecl-quiz--${this.variant()}`,\n ]\n .join(' ')\n .trim();\n }\n\n // @HostBinding('attr.data-ecl-auto-init')\n // get autoInit(): string {\n // return 'Quiz';\n // }\n\n ngAfterContentInit(): void {\n if (this.cards && this.cards.length > 1) {\n this.showControls.set(true);\n }\n this.propagateVariant();\n this.cards.changes.subscribe(() => this.propagateVariant());\n }\n\n ngAfterViewInit(): void {\n // Give Embla time to initialize\n setTimeout(() => {\n this.initEmbla();\n });\n }\n\n /** Handle keyboard events. */\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.escapeSlider();\n }\n }\n\n /** Navigate to the previous snap. */\n onPrevClick(): void {\n if (this.emblaRef) {\n this.emblaRef.scrollPrev();\n }\n }\n\n /** Navigate to the next snap. */\n onNextClick(): void {\n if (this.emblaRef) {\n this.emblaRef.scrollNext();\n }\n }\n\n /** Navigate to a specific snap index. */\n goTo(index: number): void {\n if (this.emblaRef) {\n this.emblaRef.scrollTo(index);\n }\n }\n\n /** Returns the total number of cards. */\n getCardsCount(): number {\n return this.cards?.length ?? 0;\n }\n\n /** Returns an array of indices for dot rendering. */\n getDotIndices(): number[] {\n return Array.from({ length: this.totalSnaps() }, (_, i) => i);\n }\n\n /** Called by the emblaChange event from the directive. */\n 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 /** Subscribed Embla events. */\n subscribeToEvents: EmblaEventType[] = ['select', 'init', 'reInit'];\n\n /**\n * Equalizes the height of all cards based on the tallest content.\n * Mirrors the ECL vanilla `checkHeight()` logic.\n */\n 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 /** Initialize Embla and wire up state syncing. */\n private initEmbla(): void {\n if (!this.emblaRef) {\n return;\n }\n\n this.emblaApi = this.emblaRef.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 const snapList = this.emblaApi.scrollSnapList();\n const selectedSnap = this.emblaApi.selectedScrollSnap();\n const canScrollPrev = this.emblaApi.canScrollPrev();\n const canScrollNext = this.emblaApi.canScrollNext();\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\n this.updateCounter();\n this.updateLiveRegion();\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 /** Update the live region for screen readers. */\n private updateLiveRegion(): void {\n const totalCards = this.getCardsCount();\n const totalGroups = this.totalSnaps();\n const currentGroup = this.activeIndex() + 1;\n this.liveRegionText.set(\n this.translateService.instant('ecl.quiz.SHOWING-SLIDE', { current: currentGroup, totalSlides: totalCards, totalGroups })\n );\n }\n\n /** Move focus to the last dot button when Escape is pressed. */\n private escapeSlider(): void {\n if (this.dotButtons && this.dotButtons.length > 0) {\n const lastDot = this.dotButtons.last;\n lastDot.nativeElement.focus();\n }\n }\n\n /** Propagate the variant and aria-roledescription to all child cards. */\n private propagateVariant(): void {\n const v = this.variant();\n const isCarousel = this.cards.length > 1;\n this.cards?.forEach(card => {\n card.variant = v;\n card.ariaRoleDescription = isCarousel ? 'slide' : null;\n });\n }\n}\n",
|
|
62236
|
+
"sourceCode": "import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n forwardRef,\n HostBinding,\n inject,\n input,\n QueryList,\n signal,\n ViewChild,\n ViewChildren\n} from '@angular/core';\nimport { EclIconComponent } from '@eui/ecl/components/ecl-icon';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EmblaCarouselDirective, EmblaCarouselType, EmblaEventType } from 'embla-carousel-angular';\nimport { EclQuizCardComponent } from './ecl-quiz-card.component';\n\n/**\n * ECL Quiz component – renders a carousel of quiz cards with navigation.\n * Supports two variants: 'reveal' (flip cards) and 'poll' (multiple choice).\n *\n * Uses Embla Carousel (via embla-carousel-angular) to match the ECL vanilla\n * implementation which also uses Embla internally.\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 TranslateModule,\n EclIconComponent,\n EmblaCarouselDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EclQuizComponent extends ECLBaseDirective implements AfterContentInit, AfterViewInit {\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 /** Embla carousel options matching ECL's configuration. */\n emblaOptions = { loop: false, align: 'start' as const };\n\n @ContentChildren(forwardRef(() => EclQuizCardComponent), { descendants: true })\n cards: QueryList<EclQuizCardComponent>;\n\n @ViewChild(EmblaCarouselDirective) emblaRef: EmblaCarouselDirective;\n @ViewChildren('dotButton') dotButtons: QueryList<ElementRef>;\n\n /** Current snap index. */\n activeIndex = signal(0);\n\n /** Total number of snap points. */\n totalSnaps = signal(0);\n\n /** Counter text for mobile display. */\n counterText = signal('');\n\n /** Whether the previous button is disabled. */\n prevDisabled = signal(true);\n\n /** Whether the next button is disabled. */\n nextDisabled = signal(true);\n\n /** Whether navigation controls should be shown. */\n showControls = signal(false);\n\n private cd = inject(ChangeDetectorRef);\n private emblaApi: EmblaCarouselType | undefined;\n\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-quiz'),\n `ecl-quiz--${this.variant()}`,\n ]\n .join(' ')\n .trim();\n }\n\n ngAfterContentInit(): void {\n if (this.cards && this.cards.length > 1) {\n this.showControls.set(true);\n }\n this.propagateVariant();\n this.cards.changes.subscribe(() => this.propagateVariant());\n }\n\n ngAfterViewInit(): void {\n // Give Embla time to initialize\n setTimeout(() => {\n this.initEmbla();\n });\n }\n\n /** Handle keyboard events. */\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.escapeSlider();\n }\n }\n\n /** Navigate to the previous snap. */\n onPrevClick(): void {\n if (this.emblaRef) {\n this.emblaRef.scrollPrev();\n }\n }\n\n /** Navigate to the next snap. */\n onNextClick(): void {\n if (this.emblaRef) {\n this.emblaRef.scrollNext();\n }\n }\n\n /** Navigate to a specific snap index. */\n goTo(index: number): void {\n if (this.emblaRef) {\n this.emblaRef.scrollTo(index);\n }\n }\n\n /** Returns the total number of cards. */\n getCardsCount(): number {\n return this.cards?.length ?? 0;\n }\n\n /** Returns an array of indices for dot rendering. */\n getDotIndices(): number[] {\n return Array.from({ length: this.totalSnaps() }, (_, i) => i);\n }\n\n /** Called by the emblaChange event from the directive. */\n 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 /** Subscribed Embla events. */\n subscribeToEvents: EmblaEventType[] = ['select', 'init', 'reInit'];\n\n /**\n * Equalizes the height of all cards based on the tallest content.\n * Mirrors the ECL vanilla `checkHeight()` logic.\n */\n 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 /** Initialize Embla and wire up state syncing. */\n private initEmbla(): void {\n if (!this.emblaRef) {\n return;\n }\n\n this.emblaApi = this.emblaRef.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 const snapList = this.emblaApi.scrollSnapList();\n const selectedSnap = this.emblaApi.selectedScrollSnap();\n const canScrollPrev = this.emblaApi.canScrollPrev();\n const canScrollNext = this.emblaApi.canScrollNext();\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\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 if (this.dotButtons && this.dotButtons.length > 0) {\n const lastDot = this.dotButtons.last;\n lastDot.nativeElement.focus();\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 => {\n card.variant = v;\n });\n }\n}\n",
|
|
61689
62237
|
"assetsDirs": [],
|
|
61690
62238
|
"styleUrlsData": "",
|
|
61691
62239
|
"stylesData": "",
|
|
@@ -61703,11 +62251,11 @@
|
|
|
61703
62251
|
"name": "cssClasses",
|
|
61704
62252
|
"type": "string",
|
|
61705
62253
|
"returnType": "string",
|
|
61706
|
-
"line":
|
|
62254
|
+
"line": 86
|
|
61707
62255
|
}
|
|
61708
62256
|
}
|
|
61709
62257
|
},
|
|
61710
|
-
"templateData": "@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
|
|
62258
|
+
"templateData": "@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 <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]=\"'ecl.quiz.GO-TO-SLIDE' | translate: { current: dotIndex + 1, total: totalSnaps() }\"\n (click)=\"goTo(dotIndex)\">\n </button>\n }\n </div>\n\n <button\n class=\"ecl-quiz__next\"\n [disabled]=\"nextDisabled()\"\n (click)=\"onNextClick()\">\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"
|
|
61711
62259
|
},
|
|
61712
62260
|
{
|
|
61713
62261
|
"name": "EclRadioHelpComponent",
|
|
@@ -63572,19 +64120,15 @@
|
|
|
63572
64120
|
},
|
|
63573
64121
|
{
|
|
63574
64122
|
"name": "EclSiteFooterComponent",
|
|
63575
|
-
"id": "component-EclSiteFooterComponent-
|
|
64123
|
+
"id": "component-EclSiteFooterComponent-534d3bb58c2a2612def4a4e79db315e012026780ce6e380b9906ddac6d493af9ca0514e90f59f9db19dadaf994ae820c2081d54ad19e5e7f823011ad773ed15d",
|
|
63576
64124
|
"file": "packages/ecl/components/ecl-site-footer/ecl-site-footer.component.ts",
|
|
63577
|
-
"encapsulation": [
|
|
63578
|
-
"ViewEncapsulation.None"
|
|
63579
|
-
],
|
|
64125
|
+
"encapsulation": [],
|
|
63580
64126
|
"entryComponents": [],
|
|
63581
64127
|
"inputs": [],
|
|
63582
64128
|
"outputs": [],
|
|
63583
64129
|
"providers": [],
|
|
63584
64130
|
"selector": "footer[eclSiteFooter], ecl-site-footer",
|
|
63585
|
-
"styleUrls": [
|
|
63586
|
-
"./ecl-site-footer.css"
|
|
63587
|
-
],
|
|
64131
|
+
"styleUrls": [],
|
|
63588
64132
|
"styles": [],
|
|
63589
64133
|
"templateUrl": [
|
|
63590
64134
|
"./ecl-site-footer.component.html"
|
|
@@ -63599,7 +64143,7 @@
|
|
|
63599
64143
|
"deprecationMessage": "",
|
|
63600
64144
|
"rawdescription": "\n\nThe URL of the accessibility statement. It should be provided by the user, but if not, a default one from the Europa web guide will be used.\n",
|
|
63601
64145
|
"description": "<p>The URL of the accessibility statement. It should be provided by the user, but if not, a default one from the Europa web guide will be used.</p>\n",
|
|
63602
|
-
"line":
|
|
64146
|
+
"line": 37,
|
|
63603
64147
|
"type": "string",
|
|
63604
64148
|
"decorators": []
|
|
63605
64149
|
},
|
|
@@ -63611,7 +64155,7 @@
|
|
|
63611
64155
|
"deprecationMessage": "",
|
|
63612
64156
|
"rawdescription": "\n\nIf it's a core site footer. The content of the footer for the Core configuration is specific and all items mandatory.\n",
|
|
63613
64157
|
"description": "<p>If it's a core site footer. The content of the footer for the Core configuration is specific and all items mandatory.</p>\n",
|
|
63614
|
-
"line":
|
|
64158
|
+
"line": 33,
|
|
63615
64159
|
"type": "boolean",
|
|
63616
64160
|
"decorators": []
|
|
63617
64161
|
},
|
|
@@ -63661,7 +64205,7 @@
|
|
|
63661
64205
|
"indexKey": "",
|
|
63662
64206
|
"optional": false,
|
|
63663
64207
|
"description": "",
|
|
63664
|
-
"line":
|
|
64208
|
+
"line": 24
|
|
63665
64209
|
},
|
|
63666
64210
|
{
|
|
63667
64211
|
"name": "i18nService",
|
|
@@ -63672,7 +64216,7 @@
|
|
|
63672
64216
|
"indexKey": "",
|
|
63673
64217
|
"optional": false,
|
|
63674
64218
|
"description": "",
|
|
63675
|
-
"line":
|
|
64219
|
+
"line": 23,
|
|
63676
64220
|
"modifierKind": [
|
|
63677
64221
|
124
|
|
63678
64222
|
]
|
|
@@ -63686,7 +64230,7 @@
|
|
|
63686
64230
|
"indexKey": "",
|
|
63687
64231
|
"optional": false,
|
|
63688
64232
|
"description": "<p>The current language of the page.</p>\n",
|
|
63689
|
-
"line":
|
|
64233
|
+
"line": 29,
|
|
63690
64234
|
"rawdescription": "\n\nThe current language of the page.\n"
|
|
63691
64235
|
},
|
|
63692
64236
|
{
|
|
@@ -63698,7 +64242,7 @@
|
|
|
63698
64242
|
"indexKey": "",
|
|
63699
64243
|
"optional": false,
|
|
63700
64244
|
"description": "<p>The role of the component is 'contentinfo' and should not be changed.</p>\n",
|
|
63701
|
-
"line":
|
|
64245
|
+
"line": 47,
|
|
63702
64246
|
"rawdescription": "\n\nThe role of the component is 'contentinfo' and should not be changed.\n",
|
|
63703
64247
|
"decorators": [
|
|
63704
64248
|
{
|
|
@@ -63718,7 +64262,7 @@
|
|
|
63718
64262
|
"optional": false,
|
|
63719
64263
|
"returnType": "void",
|
|
63720
64264
|
"typeParameters": [],
|
|
63721
|
-
"line":
|
|
64265
|
+
"line": 69,
|
|
63722
64266
|
"deprecated": false,
|
|
63723
64267
|
"deprecationMessage": ""
|
|
63724
64268
|
},
|
|
@@ -63728,7 +64272,7 @@
|
|
|
63728
64272
|
"optional": false,
|
|
63729
64273
|
"returnType": "void",
|
|
63730
64274
|
"typeParameters": [],
|
|
63731
|
-
"line":
|
|
64275
|
+
"line": 65,
|
|
63732
64276
|
"deprecated": false,
|
|
63733
64277
|
"deprecationMessage": ""
|
|
63734
64278
|
},
|
|
@@ -63778,7 +64322,7 @@
|
|
|
63778
64322
|
"deprecationMessage": "",
|
|
63779
64323
|
"rawdescription": "\n\nThe role of the component is 'contentinfo' and should not be changed.\n",
|
|
63780
64324
|
"description": "<p>The role of the component is 'contentinfo' and should not be changed.</p>\n",
|
|
63781
|
-
"line":
|
|
64325
|
+
"line": 47,
|
|
63782
64326
|
"type": "string",
|
|
63783
64327
|
"decorators": []
|
|
63784
64328
|
},
|
|
@@ -63786,7 +64330,7 @@
|
|
|
63786
64330
|
"name": "class",
|
|
63787
64331
|
"deprecated": false,
|
|
63788
64332
|
"deprecationMessage": "",
|
|
63789
|
-
"line":
|
|
64333
|
+
"line": 40,
|
|
63790
64334
|
"type": "string",
|
|
63791
64335
|
"decorators": []
|
|
63792
64336
|
}
|
|
@@ -63817,14 +64361,9 @@
|
|
|
63817
64361
|
"description": "<p>The site footer component content provides supplementary information such as a sitemap, copyright and legal notices,\n privacy and accessibility statements, social media and contact information as well as various links to other\n important sections within the EC ecosystem.</p>\n",
|
|
63818
64362
|
"rawdescription": "\n\nThe site footer component content provides supplementary information such as a sitemap, copyright and legal notices,\n privacy and accessibility statements, social media and contact information as well as various links to other\n important sections within the EC ecosystem.\n",
|
|
63819
64363
|
"type": "component",
|
|
63820
|
-
"sourceCode": "import { Component, ElementRef, HostBinding, Input, OnDestroy, OnInit,
|
|
64364
|
+
"sourceCode": "import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { Component, ElementRef, HostBinding, Input, OnDestroy, OnInit, booleanAttribute, inject } from '@angular/core';\nimport { I18nService } from '@eui/core';\nimport { ECLBaseDirective, EclThemeService, logoLanguageCode } from '@eui/ecl/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { EclSiteFooterCoreComponent, EclSiteFooterFixedContentEUComponent } from './ecl-footer-elements';\nimport { EclSiteFooterRowCommonComponent } from './ecl-footer-elements/ec/ecl-site-footer-row-common/ecl-site-footer-row-common.component';\n\n/**\n * The site footer component content provides supplementary information such as a sitemap, copyright and legal notices,\n * privacy and accessibility statements, social media and contact information as well as various links to other\n * important sections within the EC ecosystem.\n */\n@Component({\n selector: 'footer[eclSiteFooter], ecl-site-footer',\n templateUrl: './ecl-site-footer.component.html',\n imports: [AsyncPipe, NgTemplateOutlet, EclSiteFooterRowCommonComponent, EclSiteFooterFixedContentEUComponent,\n EclSiteFooterCoreComponent,\n ],\n})\nexport class EclSiteFooterComponent extends ECLBaseDirective implements OnInit, OnDestroy {\n protected i18nService = inject(I18nService);\n eclThemeService = inject(EclThemeService);\n\n /**\n * The current language of the page.\n */\n languageCode = 'en';\n /**\n * If it's a core site footer. The content of the footer for the Core configuration is specific and all items mandatory.\n */\n @Input({ transform: booleanAttribute }) isCore = false;\n /**\n * The URL of the accessibility statement. It should be provided by the user, but if not, a default one from the Europa web guide will be used.\n */\n @Input() a11yStatementRef = 'https://commission.europa.eu/accessibility-statement_en';\n\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-site-footer'), this.isCore ? 'ecl-site-footer--split-columns' : ''].join(' ').trim();\n }\n\n /**\n * The role of the component is 'contentinfo' and should not be changed.\n */\n @HostBinding('attr.role') role = 'contentinfo';\n\n private destroy$: Subject<boolean> = new Subject<boolean>();\n\n constructor() {\n super();\n // Detect which selector was used\n const host = inject(ElementRef<HTMLElement>).nativeElement;\n\n // If the element tag is the old one → warn\n if (host.tagName.toLowerCase() === 'ecl-site-footer') {\n console.warn(\n '[DEPRECATION] <ecl-site-footer> is deprecated. ' +\n 'Use <footer eclSiteFooter> instead.'\n );\n }\n }\n\n ngOnInit(): void {\n this.handleLanguageChangeState();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n /**\n * This method is used, when current language is not present for our available logo collection.\n * In this case, a default logo is returned.\n */\n get logoLanguageCode(): string {\n return logoLanguageCode(this.languageCode);\n }\n\n private handleLanguageChangeState(): void {\n this.i18nService.getState().pipe(takeUntil(this.destroy$)).subscribe((lang) => {\n this.languageCode = lang.activeLang;\n });\n }\n}\n",
|
|
63821
64365
|
"assetsDirs": [],
|
|
63822
|
-
"styleUrlsData":
|
|
63823
|
-
{
|
|
63824
|
-
"data": ".ecl-link--inverted svg.ecl-social-media-follow__icon {\n fill: #000;\n color: #000;\n filter: invert(1);\n}",
|
|
63825
|
-
"styleUrl": "./ecl-site-footer.css"
|
|
63826
|
-
}
|
|
63827
|
-
],
|
|
64366
|
+
"styleUrlsData": "",
|
|
63828
64367
|
"stylesData": "",
|
|
63829
64368
|
"constructorObj": {
|
|
63830
64369
|
"name": "constructor",
|
|
@@ -63832,7 +64371,7 @@
|
|
|
63832
64371
|
"deprecated": false,
|
|
63833
64372
|
"deprecationMessage": "",
|
|
63834
64373
|
"args": [],
|
|
63835
|
-
"line":
|
|
64374
|
+
"line": 49
|
|
63836
64375
|
},
|
|
63837
64376
|
"extends": [
|
|
63838
64377
|
"ECLBaseDirective"
|
|
@@ -63848,7 +64387,7 @@
|
|
|
63848
64387
|
"name": "cssClasses",
|
|
63849
64388
|
"type": "string",
|
|
63850
64389
|
"returnType": "string",
|
|
63851
|
-
"line":
|
|
64390
|
+
"line": 40
|
|
63852
64391
|
}
|
|
63853
64392
|
},
|
|
63854
64393
|
"logoLanguageCode": {
|
|
@@ -63857,7 +64396,7 @@
|
|
|
63857
64396
|
"name": "logoLanguageCode",
|
|
63858
64397
|
"type": "string",
|
|
63859
64398
|
"returnType": "string",
|
|
63860
|
-
"line":
|
|
64399
|
+
"line": 78,
|
|
63861
64400
|
"rawdescription": "\n\nThis method is used, when current language is not present for our available logo collection.\nIn this case, a default logo is returned.\n",
|
|
63862
64401
|
"description": "<p>This method is used, when current language is not present for our available logo collection.\nIn this case, a default logo is returned.</p>\n"
|
|
63863
64402
|
}
|
|
@@ -71886,6 +72425,160 @@
|
|
|
71886
72425
|
},
|
|
71887
72426
|
"templateData": "<ng-content></ng-content>\n@if(isRemovable) {\n <span class=\"ecl-tag__icon\" (click)=\"onRemoveClick()\">\n <ecl-icon icon=\"close-outline\" class=\"ecl-tag__icon-close\" [title]=\"title | titlecase\"></ecl-icon>\n</span>\n}\n"
|
|
71888
72427
|
},
|
|
72428
|
+
{
|
|
72429
|
+
"name": "EclTextMediaComponent",
|
|
72430
|
+
"id": "component-EclTextMediaComponent-b90649ad7fcef76723d43125ef19d92d529e837b360eeb9f4fe79f6e953813125be807571f60812e7fa04c1dca4ea434d3ae085c8deedc1b24f40026989863e5",
|
|
72431
|
+
"file": "packages/ecl/components/ecl-text-media/ecl-text-media.component.ts",
|
|
72432
|
+
"encapsulation": [],
|
|
72433
|
+
"entryComponents": [],
|
|
72434
|
+
"host": {},
|
|
72435
|
+
"inputs": [],
|
|
72436
|
+
"outputs": [],
|
|
72437
|
+
"providers": [],
|
|
72438
|
+
"selector": "article[eclTextMedia]",
|
|
72439
|
+
"styleUrls": [],
|
|
72440
|
+
"styles": [],
|
|
72441
|
+
"templateUrl": [
|
|
72442
|
+
"./ecl-text-media.component.html"
|
|
72443
|
+
],
|
|
72444
|
+
"viewProviders": [],
|
|
72445
|
+
"hostDirectives": [],
|
|
72446
|
+
"inputsClass": [
|
|
72447
|
+
{
|
|
72448
|
+
"name": "mediaPosition",
|
|
72449
|
+
"defaultValue": "'right'",
|
|
72450
|
+
"deprecated": false,
|
|
72451
|
+
"deprecationMessage": "",
|
|
72452
|
+
"type": "\"left\" | \"right\"",
|
|
72453
|
+
"indexKey": "",
|
|
72454
|
+
"optional": false,
|
|
72455
|
+
"description": "",
|
|
72456
|
+
"line": 19,
|
|
72457
|
+
"required": false
|
|
72458
|
+
},
|
|
72459
|
+
{
|
|
72460
|
+
"name": "variant",
|
|
72461
|
+
"defaultValue": "'default'",
|
|
72462
|
+
"deprecated": false,
|
|
72463
|
+
"deprecationMessage": "",
|
|
72464
|
+
"type": "\"default\" | \"primary\"",
|
|
72465
|
+
"indexKey": "",
|
|
72466
|
+
"optional": false,
|
|
72467
|
+
"description": "",
|
|
72468
|
+
"line": 17,
|
|
72469
|
+
"required": false
|
|
72470
|
+
},
|
|
72471
|
+
{
|
|
72472
|
+
"name": "class",
|
|
72473
|
+
"deprecated": false,
|
|
72474
|
+
"deprecationMessage": "",
|
|
72475
|
+
"line": 8,
|
|
72476
|
+
"type": "string",
|
|
72477
|
+
"decorators": [],
|
|
72478
|
+
"inheritance": {
|
|
72479
|
+
"file": "ECLBaseDirective"
|
|
72480
|
+
}
|
|
72481
|
+
},
|
|
72482
|
+
{
|
|
72483
|
+
"name": "e2eAttr",
|
|
72484
|
+
"deprecated": false,
|
|
72485
|
+
"deprecationMessage": "",
|
|
72486
|
+
"line": 10,
|
|
72487
|
+
"type": "any",
|
|
72488
|
+
"decorators": [],
|
|
72489
|
+
"inheritance": {
|
|
72490
|
+
"file": "ECLBaseDirective"
|
|
72491
|
+
}
|
|
72492
|
+
},
|
|
72493
|
+
{
|
|
72494
|
+
"required": false,
|
|
72495
|
+
"name": "tabindex",
|
|
72496
|
+
"deprecated": false,
|
|
72497
|
+
"deprecationMessage": "",
|
|
72498
|
+
"line": 13,
|
|
72499
|
+
"type": "number",
|
|
72500
|
+
"decorators": [],
|
|
72501
|
+
"inheritance": {
|
|
72502
|
+
"file": "ECLBaseDirective"
|
|
72503
|
+
}
|
|
72504
|
+
}
|
|
72505
|
+
],
|
|
72506
|
+
"outputsClass": [],
|
|
72507
|
+
"propertiesClass": [],
|
|
72508
|
+
"methodsClass": [
|
|
72509
|
+
{
|
|
72510
|
+
"name": "getCssClasses",
|
|
72511
|
+
"args": [
|
|
72512
|
+
{
|
|
72513
|
+
"name": "rootClass",
|
|
72514
|
+
"type": "string",
|
|
72515
|
+
"optional": false,
|
|
72516
|
+
"dotDotDotToken": false,
|
|
72517
|
+
"deprecated": false,
|
|
72518
|
+
"deprecationMessage": ""
|
|
72519
|
+
}
|
|
72520
|
+
],
|
|
72521
|
+
"optional": false,
|
|
72522
|
+
"returnType": "string",
|
|
72523
|
+
"typeParameters": [],
|
|
72524
|
+
"line": 15,
|
|
72525
|
+
"deprecated": false,
|
|
72526
|
+
"deprecationMessage": "",
|
|
72527
|
+
"jsdoctags": [
|
|
72528
|
+
{
|
|
72529
|
+
"name": "rootClass",
|
|
72530
|
+
"type": "string",
|
|
72531
|
+
"optional": false,
|
|
72532
|
+
"dotDotDotToken": false,
|
|
72533
|
+
"deprecated": false,
|
|
72534
|
+
"deprecationMessage": "",
|
|
72535
|
+
"tagName": {
|
|
72536
|
+
"text": "param"
|
|
72537
|
+
}
|
|
72538
|
+
}
|
|
72539
|
+
],
|
|
72540
|
+
"inheritance": {
|
|
72541
|
+
"file": "ECLBaseDirective"
|
|
72542
|
+
}
|
|
72543
|
+
}
|
|
72544
|
+
],
|
|
72545
|
+
"deprecated": false,
|
|
72546
|
+
"deprecationMessage": "",
|
|
72547
|
+
"hostBindings": [],
|
|
72548
|
+
"hostListeners": [],
|
|
72549
|
+
"standalone": false,
|
|
72550
|
+
"imports": [],
|
|
72551
|
+
"description": "<p>A media container is used to display media items (video, audio, image or other data)\n with text and a caption.</p>\n",
|
|
72552
|
+
"rawdescription": "\n\nA media container is used to display media items (video, audio, image or other data)\n with text and a caption.\n",
|
|
72553
|
+
"type": "component",
|
|
72554
|
+
"sourceCode": "import { Component, contentChild, effect, input } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclMediaContainerComponent } from '@eui/ecl/components/ecl-media-container';\n\n/**\n * A media container is used to display media items (video, audio, image or other data)\n * with text and a caption.\n */\n@Component({\n selector: 'article[eclTextMedia]',\n templateUrl: './ecl-text-media.component.html',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclTextMediaComponent extends ECLBaseDirective {\n variant = input<'default' | 'primary'>('default');\n\n mediaPosition = input<'left' | 'right'>('right');\n\n private mediaContainer = contentChild(EclMediaContainerComponent);\n\n constructor() {\n super();\n effect(() => {\n const mc = this.mediaContainer();\n if (mc?.hasVideo()) {\n mc.captionPositionOverride.set('hidden');\n }\n });\n }\n\n get cssClasses(): string {\n return [super.getCssClasses('ecl-text-media'),\n this.variant() === 'primary' ? 'ecl-text-media--primary' : '',\n this.mediaPosition() === 'left' ? 'ecl-text-media--position-left' : '',\n ].filter(Boolean).join(' ');\n }\n}\n",
|
|
72555
|
+
"assetsDirs": [],
|
|
72556
|
+
"styleUrlsData": "",
|
|
72557
|
+
"stylesData": "",
|
|
72558
|
+
"constructorObj": {
|
|
72559
|
+
"name": "constructor",
|
|
72560
|
+
"description": "",
|
|
72561
|
+
"deprecated": false,
|
|
72562
|
+
"deprecationMessage": "",
|
|
72563
|
+
"args": [],
|
|
72564
|
+
"line": 21
|
|
72565
|
+
},
|
|
72566
|
+
"extends": [
|
|
72567
|
+
"ECLBaseDirective"
|
|
72568
|
+
],
|
|
72569
|
+
"accessors": {
|
|
72570
|
+
"cssClasses": {
|
|
72571
|
+
"name": "cssClasses",
|
|
72572
|
+
"getSignature": {
|
|
72573
|
+
"name": "cssClasses",
|
|
72574
|
+
"type": "string",
|
|
72575
|
+
"returnType": "string",
|
|
72576
|
+
"line": 33
|
|
72577
|
+
}
|
|
72578
|
+
}
|
|
72579
|
+
},
|
|
72580
|
+
"templateData": "<div class=\"ecl-text-media__content\">\n <ng-content select=\"div[eclTextMediaMicroTitle]\"></ng-content>\n <ng-content select=\"div[eclTextMediaTitle]\"></ng-content>\n <ng-content select=\"div[eclTextMediaDescription]\"></ng-content>\n <ng-content select=\"a[eclTextMediaLink]\"></ng-content>\n</div>\n<div class=\"ecl-text-media__media\">\n <ng-content select=\"ecl-media-container\"></ng-content>\n</div>"
|
|
72581
|
+
},
|
|
71889
72582
|
{
|
|
71890
72583
|
"name": "EclTimelineComponent",
|
|
71891
72584
|
"id": "component-EclTimelineComponent-b0a27aabbfa958205e145f2853c7864ec9ea04351454c46646f34d80e19b450bb98cef2a776b89b2baa2c85348db401333934a63788f360bbd0735e9cfe39333",
|
|
@@ -73377,6 +74070,16 @@
|
|
|
73377
74070
|
"type": "unknown",
|
|
73378
74071
|
"defaultValue": "[\n EclAddToCalendarComponent,\n EclAddToCalendarActionDirective,\n] as const"
|
|
73379
74072
|
},
|
|
74073
|
+
{
|
|
74074
|
+
"name": "EUI_ECL_ANIMATED_NUMBERS",
|
|
74075
|
+
"ctype": "miscellaneous",
|
|
74076
|
+
"subtype": "variable",
|
|
74077
|
+
"file": "packages/ecl/components/ecl-animated-numbers/index.ts",
|
|
74078
|
+
"deprecated": false,
|
|
74079
|
+
"deprecationMessage": "",
|
|
74080
|
+
"type": "unknown",
|
|
74081
|
+
"defaultValue": "[\n EclAnimatedNumbersComponent,\n EclAnimatedNumbersItemsDirective,\n EclAnimatedNumbersSourcesListDirective,\n EclAnimatedNumbersSourcesItemDirective,\n EclAnimatedNumbersSourceDirective,\n EclAnimatedNumbersItemComponent,\n EclAnimatedNumbersIconDirective,\n] as const"
|
|
74082
|
+
},
|
|
73380
74083
|
{
|
|
73381
74084
|
"name": "EUI_ECL_APP",
|
|
73382
74085
|
"ctype": "miscellaneous",
|
|
@@ -73787,6 +74490,16 @@
|
|
|
73787
74490
|
"type": "unknown",
|
|
73788
74491
|
"defaultValue": "[\n EclPageInformationDirective,\n] as const"
|
|
73789
74492
|
},
|
|
74493
|
+
{
|
|
74494
|
+
"name": "EUI_ECL_PAGE_SUMMARY",
|
|
74495
|
+
"ctype": "miscellaneous",
|
|
74496
|
+
"subtype": "variable",
|
|
74497
|
+
"file": "packages/ecl/components/ecl-page-summary/index.ts",
|
|
74498
|
+
"deprecated": false,
|
|
74499
|
+
"deprecationMessage": "",
|
|
74500
|
+
"type": "unknown",
|
|
74501
|
+
"defaultValue": "[\n EclPageSummaryComponent,\n] as const"
|
|
74502
|
+
},
|
|
73790
74503
|
{
|
|
73791
74504
|
"name": "EUI_ECL_PAGINATION",
|
|
73792
74505
|
"ctype": "miscellaneous",
|
|
@@ -73815,7 +74528,7 @@
|
|
|
73815
74528
|
"deprecated": false,
|
|
73816
74529
|
"deprecationMessage": "",
|
|
73817
74530
|
"type": "unknown",
|
|
73818
|
-
"defaultValue": "[\n EclQuizComponent,\n EclQuizCardComponent,\n] as const"
|
|
74531
|
+
"defaultValue": "[\n EclQuizComponent,\n EclQuizCardComponent,\n EclQuizListDirective,\n] as const"
|
|
73819
74532
|
},
|
|
73820
74533
|
{
|
|
73821
74534
|
"name": "EUI_ECL_RADIO",
|
|
@@ -73977,6 +74690,16 @@
|
|
|
73977
74690
|
"type": "unknown",
|
|
73978
74691
|
"defaultValue": "[\n EclTextInputDirective,\n] as const"
|
|
73979
74692
|
},
|
|
74693
|
+
{
|
|
74694
|
+
"name": "EUI_ECL_TEXT_MEDIA",
|
|
74695
|
+
"ctype": "miscellaneous",
|
|
74696
|
+
"subtype": "variable",
|
|
74697
|
+
"file": "packages/ecl/components/ecl-text-media/index.ts",
|
|
74698
|
+
"deprecated": false,
|
|
74699
|
+
"deprecationMessage": "",
|
|
74700
|
+
"type": "unknown",
|
|
74701
|
+
"defaultValue": "[\n EclTextMediaComponent,\n EclTextMediaMicroTitleDirective,\n EclTextMediaTitleDirective,\n EclTextMediaDescriptionDirective,\n EclTextMediaLinkDirective,\n EclTextMediaMediaAnchorDirective,\n EclTextMediaContainerDirective,\n] as const"
|
|
74702
|
+
},
|
|
73980
74703
|
{
|
|
73981
74704
|
"name": "EUI_ECL_TIMELINE",
|
|
73982
74705
|
"ctype": "miscellaneous",
|
|
@@ -74621,6 +75344,18 @@
|
|
|
74621
75344
|
"defaultValue": "[\n EclAddToCalendarComponent,\n EclAddToCalendarActionDirective,\n] as const"
|
|
74622
75345
|
}
|
|
74623
75346
|
],
|
|
75347
|
+
"packages/ecl/components/ecl-animated-numbers/index.ts": [
|
|
75348
|
+
{
|
|
75349
|
+
"name": "EUI_ECL_ANIMATED_NUMBERS",
|
|
75350
|
+
"ctype": "miscellaneous",
|
|
75351
|
+
"subtype": "variable",
|
|
75352
|
+
"file": "packages/ecl/components/ecl-animated-numbers/index.ts",
|
|
75353
|
+
"deprecated": false,
|
|
75354
|
+
"deprecationMessage": "",
|
|
75355
|
+
"type": "unknown",
|
|
75356
|
+
"defaultValue": "[\n EclAnimatedNumbersComponent,\n EclAnimatedNumbersItemsDirective,\n EclAnimatedNumbersSourcesListDirective,\n EclAnimatedNumbersSourcesItemDirective,\n EclAnimatedNumbersSourceDirective,\n EclAnimatedNumbersItemComponent,\n EclAnimatedNumbersIconDirective,\n] as const"
|
|
75357
|
+
}
|
|
75358
|
+
],
|
|
74624
75359
|
"packages/ecl/components/ecl-app/index.ts": [
|
|
74625
75360
|
{
|
|
74626
75361
|
"name": "EUI_ECL_APP",
|
|
@@ -75113,6 +75848,18 @@
|
|
|
75113
75848
|
"defaultValue": "[\n EclPageInformationDirective,\n] as const"
|
|
75114
75849
|
}
|
|
75115
75850
|
],
|
|
75851
|
+
"packages/ecl/components/ecl-page-summary/index.ts": [
|
|
75852
|
+
{
|
|
75853
|
+
"name": "EUI_ECL_PAGE_SUMMARY",
|
|
75854
|
+
"ctype": "miscellaneous",
|
|
75855
|
+
"subtype": "variable",
|
|
75856
|
+
"file": "packages/ecl/components/ecl-page-summary/index.ts",
|
|
75857
|
+
"deprecated": false,
|
|
75858
|
+
"deprecationMessage": "",
|
|
75859
|
+
"type": "unknown",
|
|
75860
|
+
"defaultValue": "[\n EclPageSummaryComponent,\n] as const"
|
|
75861
|
+
}
|
|
75862
|
+
],
|
|
75116
75863
|
"packages/ecl/components/ecl-pagination/index.ts": [
|
|
75117
75864
|
{
|
|
75118
75865
|
"name": "EUI_ECL_PAGINATION",
|
|
@@ -75146,7 +75893,7 @@
|
|
|
75146
75893
|
"deprecated": false,
|
|
75147
75894
|
"deprecationMessage": "",
|
|
75148
75895
|
"type": "unknown",
|
|
75149
|
-
"defaultValue": "[\n EclQuizComponent,\n EclQuizCardComponent,\n] as const"
|
|
75896
|
+
"defaultValue": "[\n EclQuizComponent,\n EclQuizCardComponent,\n EclQuizListDirective,\n] as const"
|
|
75150
75897
|
}
|
|
75151
75898
|
],
|
|
75152
75899
|
"packages/ecl/components/ecl-radio/index.ts": [
|
|
@@ -75341,6 +76088,18 @@
|
|
|
75341
76088
|
"defaultValue": "[\n EclTextInputDirective,\n] as const"
|
|
75342
76089
|
}
|
|
75343
76090
|
],
|
|
76091
|
+
"packages/ecl/components/ecl-text-media/index.ts": [
|
|
76092
|
+
{
|
|
76093
|
+
"name": "EUI_ECL_TEXT_MEDIA",
|
|
76094
|
+
"ctype": "miscellaneous",
|
|
76095
|
+
"subtype": "variable",
|
|
76096
|
+
"file": "packages/ecl/components/ecl-text-media/index.ts",
|
|
76097
|
+
"deprecated": false,
|
|
76098
|
+
"deprecationMessage": "",
|
|
76099
|
+
"type": "unknown",
|
|
76100
|
+
"defaultValue": "[\n EclTextMediaComponent,\n EclTextMediaMicroTitleDirective,\n EclTextMediaTitleDirective,\n EclTextMediaDescriptionDirective,\n EclTextMediaLinkDirective,\n EclTextMediaMediaAnchorDirective,\n EclTextMediaContainerDirective,\n] as const"
|
|
76101
|
+
}
|
|
76102
|
+
],
|
|
75344
76103
|
"packages/ecl/components/ecl-timeline/index.ts": [
|
|
75345
76104
|
{
|
|
75346
76105
|
"name": "EUI_ECL_TIMELINE",
|