@eui/ecl 22.0.0-alpha.4 → 22.0.0-alpha.6
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/docs/changelog.html +274 -0
- package/docs/components/EclDescriptionListDefinitionComponent.html +6 -44
- package/docs/components/EclIconComponent.html +1 -1
- package/docs/components/EclListIllustrationComponent.html +0 -171
- package/docs/components/EclListIllustrationItemComponent.html +77 -83
- package/docs/components/EclLoadingIndicatorComponent.html +4 -91
- package/docs/components/EclSocialMediaFollowItemComponent.html +10 -10
- package/docs/components/EclStoryCardComponent.html +1 -1
- package/docs/directives/EclDescriptionListDefinitionItemDirective.html +6 -47
- package/docs/directives/EclDescriptionListDefinitionListDirective.html +0 -116
- package/docs/directives/EclLabelDirective.html +0 -46
- package/docs/directives/EclLinkDirective.html +0 -39
- package/docs/directives/EclLoadingIndicatorLabelDirective.html +0 -61
- package/docs/directives/EclLoadingIndicatorOverlayDirective.html +0 -45
- package/docs/directives/EclMediaContainerCaptionDirective.html +0 -39
- package/docs/directives/EclMediaContainerCreditDirective.html +0 -39
- package/docs/directives/EclMediaContainerIframeDirective.html +13 -19
- package/docs/directives/EclMediaContainerItemAudioDescriptionDirective.html +0 -39
- package/docs/directives/EclMediaContainerItemDirective.html +0 -39
- package/docs/directives/EclMediaContainerPictureDirective.html +0 -39
- package/docs/js/search/search_index.js +2 -2
- package/docs/json/EclIconComponent.md +1 -1
- package/docs/json/EclMediaContainerIframeDirective.md +0 -1
- package/docs/json/documentation.json +242 -561
- package/docs/llms.txt +8 -12
- package/docs/properties.html +1 -1
- package/fesm2022/eui-ecl-components-ecl-icon.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-label.mjs +6 -6
- package/fesm2022/eui-ecl-components-ecl-label.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-link.mjs +10 -13
- package/fesm2022/eui-ecl-components-ecl-link.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-list-illustration.mjs +19 -30
- package/fesm2022/eui-ecl-components-ecl-list-illustration.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-list.mjs +44 -41
- package/fesm2022/eui-ecl-components-ecl-list.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-loading-indicator.mjs +17 -20
- package/fesm2022/eui-ecl-components-ecl-loading-indicator.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-media-container.mjs +36 -33
- package/fesm2022/eui-ecl-components-ecl-media-container.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-menu.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-site-footer.mjs +2 -2
- package/fesm2022/eui-ecl-components-ecl-site-footer.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-social-media-follow.mjs +6 -6
- package/fesm2022/eui-ecl-components-ecl-social-media-follow.mjs.map +1 -1
- package/fesm2022/eui-ecl-components-ecl-story-card.mjs +2 -2
- package/fesm2022/eui-ecl-components-ecl-story-card.mjs.map +1 -1
- package/package.json +1 -1
- package/types/eui-ecl-components-ecl-label.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-link.d.ts +2 -4
- package/types/eui-ecl-components-ecl-link.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-list-illustration.d.ts +3 -3
- package/types/eui-ecl-components-ecl-list-illustration.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-list.d.ts +9 -12
- package/types/eui-ecl-components-ecl-list.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-loading-indicator.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-media-container.d.ts +7 -2
- package/types/eui-ecl-components-ecl-media-container.d.ts.map +1 -1
- package/types/eui-ecl-components-ecl-social-media-follow.d.ts +3 -3
- package/types/eui-ecl-components-ecl-social-media-follow.d.ts.map +1 -1
|
@@ -8457,13 +8457,13 @@
|
|
|
8457
8457
|
},
|
|
8458
8458
|
{
|
|
8459
8459
|
"name": "EclSocialMediaFollowItemClickEvent",
|
|
8460
|
-
"id": "class-EclSocialMediaFollowItemClickEvent-
|
|
8460
|
+
"id": "class-EclSocialMediaFollowItemClickEvent-be2bc74a52d7b183206e23fa9c6edd0706816decad401fed2ccd0e2788dead5b1d6dbb066556634b97683220c7111e50c45fd911c2cccbe1ec6738847a5e6fdf",
|
|
8461
8461
|
"file": "packages/ecl/components/ecl-social-media-follow/ecl-social-media-follow-item.component.ts",
|
|
8462
8462
|
"coverageIgnore": false,
|
|
8463
8463
|
"deprecated": false,
|
|
8464
8464
|
"deprecationMessage": "",
|
|
8465
8465
|
"type": "class",
|
|
8466
|
-
"sourceCode": "import { booleanAttribute, Component, inject, input, output } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { EclBaseEvent } from '@eui/ecl/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EUI_ECL_LINK } from '@eui/ecl/components/ecl-link';\nimport { RouterLink, RouterLinkWithHref } from '@angular/router';\nimport { EclSocialMediaFollowComponent } from './ecl-social-media-follow.component';\n\nexport class EclSocialMediaFollowItemClickEvent extends EclBaseEvent {}\n\n@Component({\n selector: 'ecl-social-media-follow-item',\n templateUrl: './ecl-social-media-follow-item.component.html',\n imports: [...EUI_ECL_ICON, ...EUI_ECL_LINK, NgTemplateOutlet, RouterLink, RouterLinkWithHref],\n host: {\n
|
|
8466
|
+
"sourceCode": "import { booleanAttribute, Component, inject, input, output } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { EclBaseEvent } from '@eui/ecl/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EUI_ECL_LINK } from '@eui/ecl/components/ecl-link';\nimport { RouterLink, RouterLinkWithHref } from '@angular/router';\nimport { EclSocialMediaFollowComponent } from './ecl-social-media-follow.component';\n\nexport class EclSocialMediaFollowItemClickEvent extends EclBaseEvent {}\n\n@Component({\n selector: 'ecl-social-media-follow-item',\n templateUrl: './ecl-social-media-follow-item.component.html',\n imports: [...EUI_ECL_ICON, ...EUI_ECL_LINK, NgTemplateOutlet, RouterLink, RouterLinkWithHref],\n host: {\n role: 'listitem',\n '[class]': 'cssClasses',\n },\n})\nexport class EclSocialMediaFollowItemComponent extends ECLBaseDirective {\n readonly isInverted = input<false, unknown>(undefined, { transform: (booleanAttribute) as any });\n icon = input<string>();\n iconSet = input<string>('social-media');\n readonly href = input('');\n readonly routerLink = input('');\n readonly target = input<string>(undefined);\n readonly size = input('m');\n readonly extraAttributes = input<{\n name: string;\n value?: string | null;\n }[]>(undefined);\n\n get cssClasses(): string {\n return [super.getCssClasses('ecl-social-media-follow__item')].join(' ').trim();\n }\n\n readonly itemClick = output<EclSocialMediaFollowItemClickEvent>();\n\n private parent = inject(EclSocialMediaFollowComponent);\n\n get isIconOnly(): boolean {\n return this.parent?.isIconOnly() ?? false;\n }\n\n onItemClick(evt: Event): void {\n this.itemClick.emit(new EclSocialMediaFollowItemClickEvent());\n if (!this.href() && !this.routerLink()) {\n evt.preventDefault();\n }\n }\n}\n",
|
|
8467
8467
|
"displayName": "EclSocialMediaFollowItemClickEvent",
|
|
8468
8468
|
"inputsClass": [],
|
|
8469
8469
|
"outputsClass": [],
|
|
@@ -17281,12 +17281,12 @@
|
|
|
17281
17281
|
},
|
|
17282
17282
|
{
|
|
17283
17283
|
"name": "EclDescriptionListDefinitionItemDirective",
|
|
17284
|
-
"id": "directive-EclDescriptionListDefinitionItemDirective-
|
|
17284
|
+
"id": "directive-EclDescriptionListDefinitionItemDirective-a5b79a474de70418841c2b7c289fde4ee7297407f61a77dda587317d58ef219eedf6127dd2f6a706d095d4ecb41a18e8e29aabeb41f9b5ebc1cb26aaded13470",
|
|
17285
17285
|
"file": "packages/ecl/components/ecl-list/ecl-description-list-definition-item.directive.ts",
|
|
17286
17286
|
"type": "directive",
|
|
17287
17287
|
"description": "<p>Directive representing a single item in an ECL description list definition.</p>\n<p>Applies the appropriate styling classes and allows visibility control for "see all" behavior.</p>\n",
|
|
17288
17288
|
"rawdescription": "\n\nDirective representing a single item in an ECL description list definition.\n\nApplies the appropriate styling classes and allows visibility control for \"see all\" behavior.\n",
|
|
17289
|
-
"sourceCode": "import { Directive,
|
|
17289
|
+
"sourceCode": "import { Directive, signal } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive representing a single item in an ECL description list definition.\n *\n * Applies the appropriate styling classes and allows visibility control for \"see all\" behavior.\n */\n@Directive({\n selector: '[eclDescriptionListDefinitionItem]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclDescriptionListDefinitionItemDirective extends ECLBaseDirective {\n /**\n * Internal state used to hide the item when exceeding the visible limit.\n */\n readonly isHidden = signal(false);\n\n /**\n * Indicates whether this is the last item visible before the \"see all\" action is triggered.\n */\n readonly isLastVisible = signal(false);\n\n /**\n * Applies appropriate ECL classes based on visibility state.\n */\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-description-list__definition-item'),\n this.isHidden() ? 'ecl-description-list__definition-item--hidden' : '',\n this.isLastVisible() ? 'ecl-description-list__definition-item--last-visible' : '',\n ].join(' ');\n }\n}\n\n/**\n * Directive representing a container for definition list items within an ECL description list.\n *\n * Applies the ECL-specific class for the list wrapper.\n */\n@Directive({\n selector: '[eclDescriptionListDefinitionList]',\n host: {\n class: 'ecl-description-list__definition-list',\n },\n})\nexport class EclDescriptionListDefinitionListDirective extends ECLBaseDirective {}\n",
|
|
17290
17290
|
"selector": "[eclDescriptionListDefinitionItem]",
|
|
17291
17291
|
"providers": [],
|
|
17292
17292
|
"hostDirectives": [],
|
|
@@ -17339,47 +17339,40 @@
|
|
|
17339
17339
|
"outputsClass": [],
|
|
17340
17340
|
"deprecated": false,
|
|
17341
17341
|
"deprecationMessage": "",
|
|
17342
|
-
"hostBindings": [
|
|
17343
|
-
{
|
|
17344
|
-
"coverageIgnore": false,
|
|
17345
|
-
"name": "class",
|
|
17346
|
-
"actualName": "cssClasses",
|
|
17347
|
-
"deprecated": false,
|
|
17348
|
-
"deprecationMessage": "",
|
|
17349
|
-
"rawdescription": "\n\nApplies appropriate ECL classes based on visibility state.\n",
|
|
17350
|
-
"description": "<p>Applies appropriate ECL classes based on visibility state.</p>\n",
|
|
17351
|
-
"line": 17,
|
|
17352
|
-
"type": "string",
|
|
17353
|
-
"decorators": []
|
|
17354
|
-
}
|
|
17355
|
-
],
|
|
17342
|
+
"hostBindings": [],
|
|
17356
17343
|
"hostListeners": [],
|
|
17357
17344
|
"propertiesClass": [
|
|
17358
17345
|
{
|
|
17359
17346
|
"name": "isHidden",
|
|
17360
17347
|
"coverageIgnore": false,
|
|
17361
|
-
"defaultValue": "false",
|
|
17348
|
+
"defaultValue": "signal(false)",
|
|
17362
17349
|
"deprecated": false,
|
|
17363
17350
|
"deprecationMessage": "",
|
|
17364
17351
|
"type": "unknown",
|
|
17365
17352
|
"indexKey": "",
|
|
17366
17353
|
"optional": false,
|
|
17367
17354
|
"description": "<p>Internal state used to hide the item when exceeding the visible limit.</p>\n",
|
|
17368
|
-
"line":
|
|
17369
|
-
"rawdescription": "\n\nInternal state used to hide the item when exceeding the visible limit.\n"
|
|
17355
|
+
"line": 19,
|
|
17356
|
+
"rawdescription": "\n\nInternal state used to hide the item when exceeding the visible limit.\n",
|
|
17357
|
+
"modifierKind": [
|
|
17358
|
+
148
|
|
17359
|
+
]
|
|
17370
17360
|
},
|
|
17371
17361
|
{
|
|
17372
17362
|
"name": "isLastVisible",
|
|
17373
17363
|
"coverageIgnore": false,
|
|
17374
|
-
"defaultValue": "false",
|
|
17364
|
+
"defaultValue": "signal(false)",
|
|
17375
17365
|
"deprecated": false,
|
|
17376
17366
|
"deprecationMessage": "",
|
|
17377
17367
|
"type": "unknown",
|
|
17378
17368
|
"indexKey": "",
|
|
17379
17369
|
"optional": false,
|
|
17380
17370
|
"description": "<p>Indicates whether this is the last item visible before the "see all" action is triggered.</p>\n",
|
|
17381
|
-
"line":
|
|
17382
|
-
"rawdescription": "\n\nIndicates whether this is the last item visible before the \"see all\" action is triggered.\n"
|
|
17371
|
+
"line": 24,
|
|
17372
|
+
"rawdescription": "\n\nIndicates whether this is the last item visible before the \"see all\" action is triggered.\n",
|
|
17373
|
+
"modifierKind": [
|
|
17374
|
+
148
|
|
17375
|
+
]
|
|
17383
17376
|
}
|
|
17384
17377
|
],
|
|
17385
17378
|
"methodsClass": [
|
|
@@ -17425,8 +17418,8 @@
|
|
|
17425
17418
|
"coverageIgnore": false,
|
|
17426
17419
|
"jsdoctags": [
|
|
17427
17420
|
{
|
|
17428
|
-
"pos":
|
|
17429
|
-
"end":
|
|
17421
|
+
"pos": 102,
|
|
17422
|
+
"end": 288,
|
|
17430
17423
|
"kind": 321,
|
|
17431
17424
|
"id": 0,
|
|
17432
17425
|
"flags": 16777216,
|
|
@@ -17445,7 +17438,7 @@
|
|
|
17445
17438
|
"name": "cssClasses",
|
|
17446
17439
|
"type": "string",
|
|
17447
17440
|
"returnType": "string",
|
|
17448
|
-
"line":
|
|
17441
|
+
"line": 29,
|
|
17449
17442
|
"rawdescription": "\n\nApplies appropriate ECL classes based on visibility state.\n",
|
|
17450
17443
|
"description": "<p>Applies appropriate ECL classes based on visibility state.</p>\n"
|
|
17451
17444
|
}
|
|
@@ -17463,12 +17456,12 @@
|
|
|
17463
17456
|
},
|
|
17464
17457
|
{
|
|
17465
17458
|
"name": "EclDescriptionListDefinitionListDirective",
|
|
17466
|
-
"id": "directive-EclDescriptionListDefinitionListDirective-
|
|
17459
|
+
"id": "directive-EclDescriptionListDefinitionListDirective-a5b79a474de70418841c2b7c289fde4ee7297407f61a77dda587317d58ef219eedf6127dd2f6a706d095d4ecb41a18e8e29aabeb41f9b5ebc1cb26aaded13470",
|
|
17467
17460
|
"file": "packages/ecl/components/ecl-list/ecl-description-list-definition-item.directive.ts",
|
|
17468
17461
|
"type": "directive",
|
|
17469
17462
|
"description": "<p>Directive representing a container for definition list items within an ECL description list.</p>\n<p>Applies the ECL-specific class for the list wrapper.</p>\n",
|
|
17470
17463
|
"rawdescription": "\n\nDirective representing a container for definition list items within an ECL description list.\n\nApplies the ECL-specific class for the list wrapper.\n",
|
|
17471
|
-
"sourceCode": "import { Directive,
|
|
17464
|
+
"sourceCode": "import { Directive, signal } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive representing a single item in an ECL description list definition.\n *\n * Applies the appropriate styling classes and allows visibility control for \"see all\" behavior.\n */\n@Directive({\n selector: '[eclDescriptionListDefinitionItem]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclDescriptionListDefinitionItemDirective extends ECLBaseDirective {\n /**\n * Internal state used to hide the item when exceeding the visible limit.\n */\n readonly isHidden = signal(false);\n\n /**\n * Indicates whether this is the last item visible before the \"see all\" action is triggered.\n */\n readonly isLastVisible = signal(false);\n\n /**\n * Applies appropriate ECL classes based on visibility state.\n */\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-description-list__definition-item'),\n this.isHidden() ? 'ecl-description-list__definition-item--hidden' : '',\n this.isLastVisible() ? 'ecl-description-list__definition-item--last-visible' : '',\n ].join(' ');\n }\n}\n\n/**\n * Directive representing a container for definition list items within an ECL description list.\n *\n * Applies the ECL-specific class for the list wrapper.\n */\n@Directive({\n selector: '[eclDescriptionListDefinitionList]',\n host: {\n class: 'ecl-description-list__definition-list',\n },\n})\nexport class EclDescriptionListDefinitionListDirective extends ECLBaseDirective {}\n",
|
|
17472
17465
|
"selector": "[eclDescriptionListDefinitionList]",
|
|
17473
17466
|
"providers": [],
|
|
17474
17467
|
"hostDirectives": [],
|
|
@@ -17521,46 +17514,9 @@
|
|
|
17521
17514
|
"outputsClass": [],
|
|
17522
17515
|
"deprecated": false,
|
|
17523
17516
|
"deprecationMessage": "",
|
|
17524
|
-
"hostBindings": [
|
|
17525
|
-
{
|
|
17526
|
-
"coverageIgnore": false,
|
|
17527
|
-
"name": "class.ecl-description-list__definition-list",
|
|
17528
|
-
"actualName": "cmpClass",
|
|
17529
|
-
"defaultValue": "true",
|
|
17530
|
-
"deprecated": false,
|
|
17531
|
-
"deprecationMessage": "",
|
|
17532
|
-
"rawdescription": "\n\nApplies the ECL list container class.\n",
|
|
17533
|
-
"description": "<p>Applies the ECL list container class.</p>\n",
|
|
17534
|
-
"line": 48,
|
|
17535
|
-
"type": "boolean",
|
|
17536
|
-
"decorators": []
|
|
17537
|
-
}
|
|
17538
|
-
],
|
|
17517
|
+
"hostBindings": [],
|
|
17539
17518
|
"hostListeners": [],
|
|
17540
|
-
"propertiesClass": [
|
|
17541
|
-
{
|
|
17542
|
-
"name": "cmpClass",
|
|
17543
|
-
"coverageIgnore": false,
|
|
17544
|
-
"defaultValue": "true",
|
|
17545
|
-
"deprecated": false,
|
|
17546
|
-
"deprecationMessage": "",
|
|
17547
|
-
"type": "unknown",
|
|
17548
|
-
"indexKey": "",
|
|
17549
|
-
"optional": false,
|
|
17550
|
-
"description": "<p>Applies the ECL list container class.</p>\n",
|
|
17551
|
-
"line": 48,
|
|
17552
|
-
"rawdescription": "\n\nApplies the ECL list container class.\n",
|
|
17553
|
-
"decorators": [
|
|
17554
|
-
{
|
|
17555
|
-
"name": "HostBinding",
|
|
17556
|
-
"stringifiedArguments": "'class.ecl-description-list__definition-list'"
|
|
17557
|
-
}
|
|
17558
|
-
],
|
|
17559
|
-
"modifierKind": [
|
|
17560
|
-
171
|
|
17561
|
-
]
|
|
17562
|
-
}
|
|
17563
|
-
],
|
|
17519
|
+
"propertiesClass": [],
|
|
17564
17520
|
"methodsClass": [
|
|
17565
17521
|
{
|
|
17566
17522
|
"name": "getCssClasses",
|
|
@@ -17604,8 +17560,8 @@
|
|
|
17604
17560
|
"coverageIgnore": false,
|
|
17605
17561
|
"jsdoctags": [
|
|
17606
17562
|
{
|
|
17607
|
-
"pos":
|
|
17608
|
-
"end":
|
|
17563
|
+
"pos": 1196,
|
|
17564
|
+
"end": 1358,
|
|
17609
17565
|
"kind": 321,
|
|
17610
17566
|
"id": 0,
|
|
17611
17567
|
"flags": 16777216,
|
|
@@ -22186,12 +22142,12 @@
|
|
|
22186
22142
|
},
|
|
22187
22143
|
{
|
|
22188
22144
|
"name": "EclLabelDirective",
|
|
22189
|
-
"id": "directive-EclLabelDirective-
|
|
22145
|
+
"id": "directive-EclLabelDirective-1d4333f6129baa7b2cd079990628f7696c131397449388ed0807ea786303a5bd744ee268444bcd218b131494895f217e591960f1b00c660c1376e8ed3be90388",
|
|
22190
22146
|
"file": "packages/ecl/components/ecl-label/ecl-label.directive.ts",
|
|
22191
22147
|
"type": "directive",
|
|
22192
22148
|
"description": "<p>Directive for applying ECL label styles.</p>\n<p>Supports multiple visual variants based on importance or context.\nAdds appropriate ECL classes dynamically.</p>\n",
|
|
22193
22149
|
"rawdescription": "\n\nDirective for applying ECL label styles.\n\nSupports multiple visual variants based on importance or context.\nAdds appropriate ECL classes dynamically.\n",
|
|
22194
|
-
"sourceCode": "import { Directive,
|
|
22150
|
+
"sourceCode": "import { Directive, input } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive for applying ECL label styles.\n *\n * Supports multiple visual variants based on importance or context.\n * Adds appropriate ECL classes dynamically.\n */\n@Directive({\n selector: '[eclLabel]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclLabelDirective extends ECLBaseDirective {\n /**\n * Defines the visual variant of the label.\n * \n * - `'low'` – default styling\n * - `'medium'` – medium emphasis\n * - `'high'` – high emphasis\n * - `'highlight'` – special highlight\n *\n * @default 'low'\n */\n readonly variant = input<'low' | 'medium' | 'high' | 'highlight'>('low');\n\n /**\n * CSS classes applied to the host element.\n * Combines base ECL label class with the variant modifier.\n */\n get cssClasses(): string {\n return [super.getCssClasses('ecl-label'), `ecl-label--${this.variant()}`].join(' ').trim();\n }\n}\n",
|
|
22195
22151
|
"selector": "[eclLabel]",
|
|
22196
22152
|
"providers": [],
|
|
22197
22153
|
"hostDirectives": [],
|
|
@@ -22207,23 +22163,23 @@
|
|
|
22207
22163
|
"indexKey": "",
|
|
22208
22164
|
"optional": false,
|
|
22209
22165
|
"description": "<p>Defines the visual variant of the label.</p>\n<ul>\n<li><code>'low'</code> – default styling</li>\n<li><code>'medium'</code> – medium emphasis</li>\n<li><code>'high'</code> – high emphasis</li>\n<li><code>'highlight'</code> – special highlight</li>\n</ul>\n<p>'low'</p>\n",
|
|
22210
|
-
"line":
|
|
22166
|
+
"line": 27,
|
|
22211
22167
|
"rawdescription": "\n\nDefines the visual variant of the label.\n\n- `'low'` – default styling\n- `'medium'` – medium emphasis\n- `'high'` – high emphasis\n- `'highlight'` – special highlight\n\n'low'\n",
|
|
22212
22168
|
"modifierKind": [
|
|
22213
22169
|
148
|
|
22214
22170
|
],
|
|
22215
22171
|
"jsdoctags": [
|
|
22216
22172
|
{
|
|
22217
|
-
"pos":
|
|
22218
|
-
"end":
|
|
22173
|
+
"pos": 652,
|
|
22174
|
+
"end": 672,
|
|
22219
22175
|
"kind": 328,
|
|
22220
22176
|
"id": 0,
|
|
22221
22177
|
"flags": 16842752,
|
|
22222
22178
|
"modifierFlagsCache": 0,
|
|
22223
22179
|
"transformFlags": 0,
|
|
22224
22180
|
"tagName": {
|
|
22225
|
-
"pos":
|
|
22226
|
-
"end":
|
|
22181
|
+
"pos": 653,
|
|
22182
|
+
"end": 660,
|
|
22227
22183
|
"kind": 80,
|
|
22228
22184
|
"id": 0,
|
|
22229
22185
|
"flags": 16842752,
|
|
@@ -22282,20 +22238,7 @@
|
|
|
22282
22238
|
"outputsClass": [],
|
|
22283
22239
|
"deprecated": false,
|
|
22284
22240
|
"deprecationMessage": "",
|
|
22285
|
-
"hostBindings": [
|
|
22286
|
-
{
|
|
22287
|
-
"coverageIgnore": false,
|
|
22288
|
-
"name": "class",
|
|
22289
|
-
"actualName": "cssClasses",
|
|
22290
|
-
"deprecated": false,
|
|
22291
|
-
"deprecationMessage": "",
|
|
22292
|
-
"rawdescription": "\n\nCSS classes applied to the host element.\nCombines base ECL label class with the variant modifier.\n",
|
|
22293
|
-
"description": "<p>CSS classes applied to the host element.\nCombines base ECL label class with the variant modifier.</p>\n",
|
|
22294
|
-
"line": 31,
|
|
22295
|
-
"type": "string",
|
|
22296
|
-
"decorators": []
|
|
22297
|
-
}
|
|
22298
|
-
],
|
|
22241
|
+
"hostBindings": [],
|
|
22299
22242
|
"hostListeners": [],
|
|
22300
22243
|
"propertiesClass": [],
|
|
22301
22244
|
"methodsClass": [
|
|
@@ -22341,8 +22284,8 @@
|
|
|
22341
22284
|
"coverageIgnore": false,
|
|
22342
22285
|
"jsdoctags": [
|
|
22343
22286
|
{
|
|
22344
|
-
"pos":
|
|
22345
|
-
"end":
|
|
22287
|
+
"pos": 101,
|
|
22288
|
+
"end": 269,
|
|
22346
22289
|
"kind": 321,
|
|
22347
22290
|
"id": 0,
|
|
22348
22291
|
"flags": 16777216,
|
|
@@ -22361,7 +22304,7 @@
|
|
|
22361
22304
|
"name": "cssClasses",
|
|
22362
22305
|
"type": "string",
|
|
22363
22306
|
"returnType": "string",
|
|
22364
|
-
"line":
|
|
22307
|
+
"line": 33,
|
|
22365
22308
|
"rawdescription": "\n\nCSS classes applied to the host element.\nCombines base ECL label class with the variant modifier.\n",
|
|
22366
22309
|
"description": "<p>CSS classes applied to the host element.\nCombines base ECL label class with the variant modifier.</p>\n"
|
|
22367
22310
|
}
|
|
@@ -22604,12 +22547,12 @@
|
|
|
22604
22547
|
},
|
|
22605
22548
|
{
|
|
22606
22549
|
"name": "EclLinkDirective",
|
|
22607
|
-
"id": "directive-EclLinkDirective-
|
|
22550
|
+
"id": "directive-EclLinkDirective-fb6b45fe7d77a582abd56929a240d6a1418c1ca58d979b7d3c29ff7989887b38145c46f3cd3c8055fcab7abe78119fa333c24d646e16e636785744a886b96932",
|
|
22608
22551
|
"file": "packages/ecl/components/ecl-link/ecl-link.directive.ts",
|
|
22609
22552
|
"type": "directive",
|
|
22610
22553
|
"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",
|
|
22611
22554
|
"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",
|
|
22612
|
-
"sourceCode": "import {
|
|
22555
|
+
"sourceCode": "import { booleanAttribute, 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 {\n el = inject(ElementRef);\n renderer = inject(Renderer2);\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' | 'secondary-neutral' | '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 // Add 'ecl-link__icon' class to child icons reactively.\n effect(() => {\n const icons = this.eclIconComponents();\n if (icons?.length > 0) {\n icons.forEach((icn) => {\n icn.addExtraClass('ecl-link__icon');\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 /**\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",
|
|
22613
22556
|
"selector": "[eclLink]",
|
|
22614
22557
|
"providers": [],
|
|
22615
22558
|
"hostDirectives": [],
|
|
@@ -22624,7 +22567,7 @@
|
|
|
22624
22567
|
"indexKey": "",
|
|
22625
22568
|
"optional": false,
|
|
22626
22569
|
"description": "<p>Additional HTML attributes to be set on the link element.\nUsed e.g. by social-media-follow for passing extra_attributes.</p>\n",
|
|
22627
|
-
"line":
|
|
22570
|
+
"line": 19,
|
|
22628
22571
|
"rawdescription": "\n\nAdditional HTML attributes to be set on the link element.\nUsed e.g. by social-media-follow for passing extra_attributes.\n",
|
|
22629
22572
|
"required": false
|
|
22630
22573
|
},
|
|
@@ -22638,7 +22581,7 @@
|
|
|
22638
22581
|
"indexKey": "",
|
|
22639
22582
|
"optional": false,
|
|
22640
22583
|
"description": "",
|
|
22641
|
-
"line":
|
|
22584
|
+
"line": 41,
|
|
22642
22585
|
"rawdescription": "\n",
|
|
22643
22586
|
"required": false
|
|
22644
22587
|
},
|
|
@@ -22652,20 +22595,20 @@
|
|
|
22652
22595
|
"indexKey": "",
|
|
22653
22596
|
"optional": false,
|
|
22654
22597
|
"description": "<p>Adds class for hightlighted link (works only with 'primary' variant)</p>\n",
|
|
22655
|
-
"line":
|
|
22598
|
+
"line": 34,
|
|
22656
22599
|
"rawdescription": "\nAdds class for hightlighted link (works only with 'primary' variant)\n",
|
|
22657
22600
|
"jsdoctags": [
|
|
22658
22601
|
{
|
|
22659
|
-
"pos":
|
|
22660
|
-
"end":
|
|
22602
|
+
"pos": 1253,
|
|
22603
|
+
"end": 1370,
|
|
22661
22604
|
"kind": 332,
|
|
22662
22605
|
"id": 0,
|
|
22663
22606
|
"flags": 16842752,
|
|
22664
22607
|
"modifierFlagsCache": 0,
|
|
22665
22608
|
"transformFlags": 0,
|
|
22666
22609
|
"tagName": {
|
|
22667
|
-
"pos":
|
|
22668
|
-
"end":
|
|
22610
|
+
"pos": 1254,
|
|
22611
|
+
"end": 1264,
|
|
22669
22612
|
"kind": 80,
|
|
22670
22613
|
"id": 0,
|
|
22671
22614
|
"flags": 16842752,
|
|
@@ -22687,7 +22630,7 @@
|
|
|
22687
22630
|
"indexKey": "",
|
|
22688
22631
|
"optional": false,
|
|
22689
22632
|
"description": "<p>Property to style the component if it consist only of an icon.</p>\n",
|
|
22690
|
-
"line":
|
|
22633
|
+
"line": 29,
|
|
22691
22634
|
"rawdescription": "\n\nProperty to style the component if it consist only of an icon.\n",
|
|
22692
22635
|
"required": false
|
|
22693
22636
|
},
|
|
@@ -22701,7 +22644,7 @@
|
|
|
22701
22644
|
"indexKey": "",
|
|
22702
22645
|
"optional": false,
|
|
22703
22646
|
"description": "<p>Property to style the component as 'inverted' (with dark background). Can be used alone or with 'standalone' variant.</p>\n",
|
|
22704
|
-
"line":
|
|
22647
|
+
"line": 24,
|
|
22705
22648
|
"rawdescription": "\n\nProperty to style the component as 'inverted' (with dark background). Can be used alone or with 'standalone' variant.\n",
|
|
22706
22649
|
"required": false
|
|
22707
22650
|
},
|
|
@@ -22715,20 +22658,20 @@
|
|
|
22715
22658
|
"indexKey": "",
|
|
22716
22659
|
"optional": false,
|
|
22717
22660
|
"description": "",
|
|
22718
|
-
"line":
|
|
22661
|
+
"line": 39,
|
|
22719
22662
|
"rawdescription": "\n\n",
|
|
22720
22663
|
"jsdoctags": [
|
|
22721
22664
|
{
|
|
22722
|
-
"pos":
|
|
22723
|
-
"end":
|
|
22665
|
+
"pos": 1454,
|
|
22666
|
+
"end": 1521,
|
|
22724
22667
|
"kind": 332,
|
|
22725
22668
|
"id": 0,
|
|
22726
22669
|
"flags": 16842752,
|
|
22727
22670
|
"modifierFlagsCache": 0,
|
|
22728
22671
|
"transformFlags": 0,
|
|
22729
22672
|
"tagName": {
|
|
22730
|
-
"pos":
|
|
22731
|
-
"end":
|
|
22673
|
+
"pos": 1455,
|
|
22674
|
+
"end": 1465,
|
|
22732
22675
|
"kind": 80,
|
|
22733
22676
|
"id": 0,
|
|
22734
22677
|
"flags": 16842752,
|
|
@@ -22749,7 +22692,7 @@
|
|
|
22749
22692
|
"indexKey": "",
|
|
22750
22693
|
"optional": false,
|
|
22751
22694
|
"description": "<p>With 'variant' property user can add some more specific styling to the <a> component.</p>\n",
|
|
22752
|
-
"line":
|
|
22695
|
+
"line": 46,
|
|
22753
22696
|
"rawdescription": "\n\nWith 'variant' property user can add some more specific styling to the <a> component.\n",
|
|
22754
22697
|
"required": false
|
|
22755
22698
|
},
|
|
@@ -22809,7 +22752,7 @@
|
|
|
22809
22752
|
"deprecationMessage": "",
|
|
22810
22753
|
"rawdescription": "\n\nAdds speific ECL classes to the <a> component.\n",
|
|
22811
22754
|
"description": "<p>Adds speific ECL classes to the <a> component.</p>\n",
|
|
22812
|
-
"line":
|
|
22755
|
+
"line": 102,
|
|
22813
22756
|
"type": "string",
|
|
22814
22757
|
"decorators": []
|
|
22815
22758
|
},
|
|
@@ -22821,7 +22764,7 @@
|
|
|
22821
22764
|
"deprecationMessage": "",
|
|
22822
22765
|
"rawdescription": "\n",
|
|
22823
22766
|
"description": "",
|
|
22824
|
-
"line":
|
|
22767
|
+
"line": 80,
|
|
22825
22768
|
"type": "boolean",
|
|
22826
22769
|
"decorators": []
|
|
22827
22770
|
},
|
|
@@ -22833,7 +22776,7 @@
|
|
|
22833
22776
|
"deprecationMessage": "",
|
|
22834
22777
|
"rawdescription": "\n",
|
|
22835
22778
|
"description": "",
|
|
22836
|
-
"line":
|
|
22779
|
+
"line": 90,
|
|
22837
22780
|
"type": "boolean",
|
|
22838
22781
|
"decorators": []
|
|
22839
22782
|
},
|
|
@@ -22845,7 +22788,7 @@
|
|
|
22845
22788
|
"deprecationMessage": "",
|
|
22846
22789
|
"rawdescription": "\n",
|
|
22847
22790
|
"description": "",
|
|
22848
|
-
"line":
|
|
22791
|
+
"line": 85,
|
|
22849
22792
|
"type": "boolean",
|
|
22850
22793
|
"decorators": []
|
|
22851
22794
|
},
|
|
@@ -22857,26 +22800,13 @@
|
|
|
22857
22800
|
"deprecationMessage": "",
|
|
22858
22801
|
"rawdescription": "\n",
|
|
22859
22802
|
"description": "",
|
|
22860
|
-
"line":
|
|
22803
|
+
"line": 75,
|
|
22861
22804
|
"type": "boolean",
|
|
22862
22805
|
"decorators": []
|
|
22863
22806
|
}
|
|
22864
22807
|
],
|
|
22865
22808
|
"hostListeners": [],
|
|
22866
22809
|
"propertiesClass": [
|
|
22867
|
-
{
|
|
22868
|
-
"name": "cd",
|
|
22869
|
-
"coverageIgnore": false,
|
|
22870
|
-
"defaultValue": "inject(ChangeDetectorRef)",
|
|
22871
|
-
"deprecated": false,
|
|
22872
|
-
"deprecationMessage": "",
|
|
22873
|
-
"type": "unknown",
|
|
22874
|
-
"indexKey": "",
|
|
22875
|
-
"optional": false,
|
|
22876
|
-
"description": "",
|
|
22877
|
-
"line": 14,
|
|
22878
|
-
"rawdescription": "\n"
|
|
22879
|
-
},
|
|
22880
22810
|
{
|
|
22881
22811
|
"name": "eclIconComponents",
|
|
22882
22812
|
"coverageIgnore": false,
|
|
@@ -22887,7 +22817,7 @@
|
|
|
22887
22817
|
"indexKey": "",
|
|
22888
22818
|
"optional": false,
|
|
22889
22819
|
"description": "",
|
|
22890
|
-
"line":
|
|
22820
|
+
"line": 48,
|
|
22891
22821
|
"rawdescription": "\n"
|
|
22892
22822
|
},
|
|
22893
22823
|
{
|
|
@@ -22918,19 +22848,6 @@
|
|
|
22918
22848
|
}
|
|
22919
22849
|
],
|
|
22920
22850
|
"methodsClass": [
|
|
22921
|
-
{
|
|
22922
|
-
"name": "ngAfterContentInit",
|
|
22923
|
-
"coverageIgnore": false,
|
|
22924
|
-
"args": [],
|
|
22925
|
-
"optional": false,
|
|
22926
|
-
"returnType": "void",
|
|
22927
|
-
"typeParameters": [],
|
|
22928
|
-
"line": 106,
|
|
22929
|
-
"deprecated": false,
|
|
22930
|
-
"deprecationMessage": "",
|
|
22931
|
-
"rawdescription": "\n",
|
|
22932
|
-
"description": ""
|
|
22933
|
-
},
|
|
22934
22851
|
{
|
|
22935
22852
|
"name": "onBlur",
|
|
22936
22853
|
"coverageIgnore": false,
|
|
@@ -22938,7 +22855,7 @@
|
|
|
22938
22855
|
"optional": false,
|
|
22939
22856
|
"returnType": "void",
|
|
22940
22857
|
"typeParameters": [],
|
|
22941
|
-
"line":
|
|
22858
|
+
"line": 132,
|
|
22942
22859
|
"deprecated": false,
|
|
22943
22860
|
"deprecationMessage": "",
|
|
22944
22861
|
"rawdescription": "\n\nCalls the native blur() method of the default HTML element.\n",
|
|
@@ -22951,7 +22868,7 @@
|
|
|
22951
22868
|
"optional": false,
|
|
22952
22869
|
"returnType": "void",
|
|
22953
22870
|
"typeParameters": [],
|
|
22954
|
-
"line":
|
|
22871
|
+
"line": 125,
|
|
22955
22872
|
"deprecated": false,
|
|
22956
22873
|
"deprecationMessage": "",
|
|
22957
22874
|
"rawdescription": "\n\nCalls the native click() method of the default HTML element.\n",
|
|
@@ -22964,7 +22881,7 @@
|
|
|
22964
22881
|
"optional": false,
|
|
22965
22882
|
"returnType": "void",
|
|
22966
22883
|
"typeParameters": [],
|
|
22967
|
-
"line":
|
|
22884
|
+
"line": 118,
|
|
22968
22885
|
"deprecated": false,
|
|
22969
22886
|
"deprecationMessage": "",
|
|
22970
22887
|
"rawdescription": "\n\nCalls the native focus() method of the default HTML element.\n",
|
|
@@ -23012,8 +22929,8 @@
|
|
|
23012
22929
|
"coverageIgnore": false,
|
|
23013
22930
|
"jsdoctags": [
|
|
23014
22931
|
{
|
|
23015
|
-
"pos":
|
|
23016
|
-
"end":
|
|
22932
|
+
"pos": 275,
|
|
22933
|
+
"end": 409,
|
|
23017
22934
|
"kind": 321,
|
|
23018
22935
|
"id": 0,
|
|
23019
22936
|
"flags": 16777216,
|
|
@@ -23025,16 +22942,13 @@
|
|
|
23025
22942
|
"extends": [
|
|
23026
22943
|
"ECLBaseDirective"
|
|
23027
22944
|
],
|
|
23028
|
-
"implements": [
|
|
23029
|
-
"AfterContentInit"
|
|
23030
|
-
],
|
|
23031
22945
|
"constructorObj": {
|
|
23032
22946
|
"name": "constructor",
|
|
23033
22947
|
"description": "",
|
|
23034
22948
|
"deprecated": false,
|
|
23035
22949
|
"deprecationMessage": "",
|
|
23036
22950
|
"args": [],
|
|
23037
|
-
"line":
|
|
22951
|
+
"line": 48,
|
|
23038
22952
|
"rawdescription": "\n"
|
|
23039
22953
|
},
|
|
23040
22954
|
"accessors": {
|
|
@@ -23044,7 +22958,7 @@
|
|
|
23044
22958
|
"name": "hostIsInverted",
|
|
23045
22959
|
"type": "boolean",
|
|
23046
22960
|
"returnType": "boolean",
|
|
23047
|
-
"line":
|
|
22961
|
+
"line": 75,
|
|
23048
22962
|
"rawdescription": "\n",
|
|
23049
22963
|
"description": ""
|
|
23050
22964
|
}
|
|
@@ -23055,7 +22969,7 @@
|
|
|
23055
22969
|
"name": "hostIsBranded",
|
|
23056
22970
|
"type": "boolean",
|
|
23057
22971
|
"returnType": "boolean",
|
|
23058
|
-
"line":
|
|
22972
|
+
"line": 80,
|
|
23059
22973
|
"rawdescription": "\n",
|
|
23060
22974
|
"description": ""
|
|
23061
22975
|
}
|
|
@@ -23066,7 +22980,7 @@
|
|
|
23066
22980
|
"name": "hostIsIconOnly",
|
|
23067
22981
|
"type": "boolean",
|
|
23068
22982
|
"returnType": "boolean",
|
|
23069
|
-
"line":
|
|
22983
|
+
"line": 85,
|
|
23070
22984
|
"rawdescription": "\n",
|
|
23071
22985
|
"description": ""
|
|
23072
22986
|
}
|
|
@@ -23077,7 +22991,7 @@
|
|
|
23077
22991
|
"name": "hasIcon",
|
|
23078
22992
|
"type": "boolean",
|
|
23079
22993
|
"returnType": "boolean",
|
|
23080
|
-
"line":
|
|
22994
|
+
"line": 90,
|
|
23081
22995
|
"rawdescription": "\n",
|
|
23082
22996
|
"description": ""
|
|
23083
22997
|
}
|
|
@@ -23088,7 +23002,7 @@
|
|
|
23088
23002
|
"name": "cssClasses",
|
|
23089
23003
|
"type": "string",
|
|
23090
23004
|
"returnType": "string",
|
|
23091
|
-
"line":
|
|
23005
|
+
"line": 102,
|
|
23092
23006
|
"rawdescription": "\n\nAdds speific ECL classes to the <a> component.\n",
|
|
23093
23007
|
"description": "<p>Adds speific ECL classes to the <a> component.</p>\n"
|
|
23094
23008
|
}
|
|
@@ -23100,10 +23014,6 @@
|
|
|
23100
23014
|
{
|
|
23101
23015
|
"name": "ECLBaseDirective",
|
|
23102
23016
|
"type": "directive"
|
|
23103
|
-
},
|
|
23104
|
-
{
|
|
23105
|
-
"name": "AfterContentInit",
|
|
23106
|
-
"type": "interface"
|
|
23107
23017
|
}
|
|
23108
23018
|
]
|
|
23109
23019
|
}
|
|
@@ -23878,12 +23788,12 @@
|
|
|
23878
23788
|
},
|
|
23879
23789
|
{
|
|
23880
23790
|
"name": "EclLoadingIndicatorLabelDirective",
|
|
23881
|
-
"id": "directive-EclLoadingIndicatorLabelDirective-
|
|
23791
|
+
"id": "directive-EclLoadingIndicatorLabelDirective-105f4f16a23a68208bc6803868c3a673e2cb0abea445aaa46a19ebc7ce6d14ff4c574689621c8404aff41a107bf365c152478007496029528281429b372411f0",
|
|
23882
23792
|
"file": "packages/ecl/components/ecl-loading-indicator/ecl-loading-indicator-label.directive.ts",
|
|
23883
23793
|
"type": "directive",
|
|
23884
23794
|
"description": "<p>Directive for styling the label text of an ECL loading indicator.</p>\n<p>Adds the <code>ecl-spinner__text</code> class to the host element.</p>\n",
|
|
23885
23795
|
"rawdescription": "\n\nDirective for styling the label text of an ECL loading indicator.\n\nAdds the `ecl-spinner__text` class to the host element.\n",
|
|
23886
|
-
"sourceCode": "import { Directive
|
|
23796
|
+
"sourceCode": "import { Directive } from '@angular/core';\n\n/**\n * Directive for styling the label text of an ECL loading indicator.\n *\n * Adds the `ecl-spinner__text` class to the host element.\n */\n@Directive({\n selector: '[eclLoadingIndicatorLabel]',\n host: {\n '[class.ecl-spinner__text]': 'className',\n },\n})\nexport class EclLoadingIndicatorLabelDirective {\n /**\n * Applies the ECL class for spinner label text.\n */\n className = true;\n}\n",
|
|
23887
23797
|
"selector": "[eclLoadingIndicatorLabel]",
|
|
23888
23798
|
"providers": [],
|
|
23889
23799
|
"hostDirectives": [],
|
|
@@ -23892,21 +23802,7 @@
|
|
|
23892
23802
|
"outputsClass": [],
|
|
23893
23803
|
"deprecated": false,
|
|
23894
23804
|
"deprecationMessage": "",
|
|
23895
|
-
"hostBindings": [
|
|
23896
|
-
{
|
|
23897
|
-
"coverageIgnore": false,
|
|
23898
|
-
"name": "class.ecl-spinner__text",
|
|
23899
|
-
"actualName": "className",
|
|
23900
|
-
"defaultValue": "true",
|
|
23901
|
-
"deprecated": false,
|
|
23902
|
-
"deprecationMessage": "",
|
|
23903
|
-
"rawdescription": "\n\nApplies the ECL class for spinner label text.\n",
|
|
23904
|
-
"description": "<p>Applies the ECL class for spinner label text.</p>\n",
|
|
23905
|
-
"line": 15,
|
|
23906
|
-
"type": "boolean",
|
|
23907
|
-
"decorators": []
|
|
23908
|
-
}
|
|
23909
|
-
],
|
|
23805
|
+
"hostBindings": [],
|
|
23910
23806
|
"hostListeners": [],
|
|
23911
23807
|
"propertiesClass": [
|
|
23912
23808
|
{
|
|
@@ -23919,25 +23815,16 @@
|
|
|
23919
23815
|
"indexKey": "",
|
|
23920
23816
|
"optional": false,
|
|
23921
23817
|
"description": "<p>Applies the ECL class for spinner label text.</p>\n",
|
|
23922
|
-
"line":
|
|
23923
|
-
"rawdescription": "\n\nApplies the ECL class for spinner label text.\n"
|
|
23924
|
-
"decorators": [
|
|
23925
|
-
{
|
|
23926
|
-
"name": "HostBinding",
|
|
23927
|
-
"stringifiedArguments": "'class.ecl-spinner__text'"
|
|
23928
|
-
}
|
|
23929
|
-
],
|
|
23930
|
-
"modifierKind": [
|
|
23931
|
-
171
|
|
23932
|
-
]
|
|
23818
|
+
"line": 18,
|
|
23819
|
+
"rawdescription": "\n\nApplies the ECL class for spinner label text.\n"
|
|
23933
23820
|
}
|
|
23934
23821
|
],
|
|
23935
23822
|
"methodsClass": [],
|
|
23936
23823
|
"coverageIgnore": false,
|
|
23937
23824
|
"jsdoctags": [
|
|
23938
23825
|
{
|
|
23939
|
-
"pos":
|
|
23940
|
-
"end":
|
|
23826
|
+
"pos": 44,
|
|
23827
|
+
"end": 182,
|
|
23941
23828
|
"kind": 321,
|
|
23942
23829
|
"id": 0,
|
|
23943
23830
|
"flags": 16777216,
|
|
@@ -23954,12 +23841,12 @@
|
|
|
23954
23841
|
},
|
|
23955
23842
|
{
|
|
23956
23843
|
"name": "EclLoadingIndicatorOverlayDirective",
|
|
23957
|
-
"id": "directive-EclLoadingIndicatorOverlayDirective-
|
|
23844
|
+
"id": "directive-EclLoadingIndicatorOverlayDirective-f77d352395d27b2fbc37e7853c5f17b71a8a4077968fb655ababc246774f76ee2aa3cf6e9447c150b97dbebc15f19e1b2b9740a17b725ffe4ab628f86472f558",
|
|
23958
23845
|
"file": "packages/ecl/components/ecl-loading-indicator/ecl-loading-indicator-overlay.directive.ts",
|
|
23959
23846
|
"type": "directive",
|
|
23960
23847
|
"description": "<p>Directive that adds an overlay layer to an ECL loading indicator.</p>\n<p>Automatically applies the ECL spinner overlay classes.</p>\n",
|
|
23961
23848
|
"rawdescription": "\n\nDirective that adds an overlay layer to an ECL loading indicator.\n\nAutomatically applies the ECL spinner overlay classes.\n",
|
|
23962
|
-
"sourceCode": "import { Directive
|
|
23849
|
+
"sourceCode": "import { Directive } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive that adds an overlay layer to an ECL loading indicator.\n *\n * Automatically applies the ECL spinner overlay classes.\n */\n@Directive({\n selector: '[eclLoadingIndicatorOverlay]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclLoadingIndicatorOverlayDirective extends ECLBaseDirective {\n /**\n * Applies the CSS classes for the spinner overlay.\n */\n get cssClasses(): string {\n return [super.getCssClasses('ecl-spinner__overlay ecl-spinner__overlay--visible')].join(' ').trim();\n }\n}\n",
|
|
23963
23850
|
"selector": "[eclLoadingIndicatorOverlay]",
|
|
23964
23851
|
"providers": [],
|
|
23965
23852
|
"hostDirectives": [],
|
|
@@ -24012,20 +23899,7 @@
|
|
|
24012
23899
|
"outputsClass": [],
|
|
24013
23900
|
"deprecated": false,
|
|
24014
23901
|
"deprecationMessage": "",
|
|
24015
|
-
"hostBindings": [
|
|
24016
|
-
{
|
|
24017
|
-
"coverageIgnore": false,
|
|
24018
|
-
"name": "class",
|
|
24019
|
-
"actualName": "cssClasses",
|
|
24020
|
-
"deprecated": false,
|
|
24021
|
-
"deprecationMessage": "",
|
|
24022
|
-
"rawdescription": "\n\nApplies the CSS classes for the spinner overlay.\n",
|
|
24023
|
-
"description": "<p>Applies the CSS classes for the spinner overlay.</p>\n",
|
|
24024
|
-
"line": 17,
|
|
24025
|
-
"type": "string",
|
|
24026
|
-
"decorators": []
|
|
24027
|
-
}
|
|
24028
|
-
],
|
|
23902
|
+
"hostBindings": [],
|
|
24029
23903
|
"hostListeners": [],
|
|
24030
23904
|
"propertiesClass": [],
|
|
24031
23905
|
"methodsClass": [
|
|
@@ -24071,8 +23945,8 @@
|
|
|
24071
23945
|
"coverageIgnore": false,
|
|
24072
23946
|
"jsdoctags": [
|
|
24073
23947
|
{
|
|
24074
|
-
"pos":
|
|
24075
|
-
"end":
|
|
23948
|
+
"pos": 94,
|
|
23949
|
+
"end": 231,
|
|
24076
23950
|
"kind": 321,
|
|
24077
23951
|
"id": 0,
|
|
24078
23952
|
"flags": 16777216,
|
|
@@ -24091,7 +23965,7 @@
|
|
|
24091
23965
|
"name": "cssClasses",
|
|
24092
23966
|
"type": "string",
|
|
24093
23967
|
"returnType": "string",
|
|
24094
|
-
"line":
|
|
23968
|
+
"line": 19,
|
|
24095
23969
|
"rawdescription": "\n\nApplies the CSS classes for the spinner overlay.\n",
|
|
24096
23970
|
"description": "<p>Applies the CSS classes for the spinner overlay.</p>\n"
|
|
24097
23971
|
}
|
|
@@ -24109,12 +23983,12 @@
|
|
|
24109
23983
|
},
|
|
24110
23984
|
{
|
|
24111
23985
|
"name": "EclMediaContainerCaptionDirective",
|
|
24112
|
-
"id": "directive-EclMediaContainerCaptionDirective-
|
|
23986
|
+
"id": "directive-EclMediaContainerCaptionDirective-8cbae748f044a2b10bf6ac742afd1f1c1aa09c84d98f0f39a369d2635efd4c173547de425b435980d154c2b59f0dcd64d047567527008d1ea0a075cc7d1f571f",
|
|
24113
23987
|
"file": "packages/ecl/components/ecl-media-container/ecl-media-container-caption.directive.ts",
|
|
24114
23988
|
"type": "directive",
|
|
24115
23989
|
"description": "<p>Adds styling and attributes to the media container caption element.</p>\n",
|
|
24116
23990
|
"rawdescription": "\n\nAdds styling and attributes to the media container caption element.\n",
|
|
24117
|
-
"sourceCode": "import { Directive
|
|
23991
|
+
"sourceCode": "import { Directive } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Adds styling and attributes to the media container caption element.\n */\n@Directive({\n selector: 'figcaption[eclMediaContainerCaption]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclMediaContainerCaptionDirective extends ECLBaseDirective {\n get cssClasses(): string {\n return [super.getCssClasses('ecl-media-container__caption')].join(' ').trim();\n }\n}\n",
|
|
24118
23992
|
"selector": "figcaption[eclMediaContainerCaption]",
|
|
24119
23993
|
"providers": [],
|
|
24120
23994
|
"hostDirectives": [],
|
|
@@ -24167,20 +24041,7 @@
|
|
|
24167
24041
|
"outputsClass": [],
|
|
24168
24042
|
"deprecated": false,
|
|
24169
24043
|
"deprecationMessage": "",
|
|
24170
|
-
"hostBindings": [
|
|
24171
|
-
{
|
|
24172
|
-
"coverageIgnore": false,
|
|
24173
|
-
"name": "class",
|
|
24174
|
-
"actualName": "cssClasses",
|
|
24175
|
-
"deprecated": false,
|
|
24176
|
-
"deprecationMessage": "",
|
|
24177
|
-
"rawdescription": "\n",
|
|
24178
|
-
"description": "",
|
|
24179
|
-
"line": 12,
|
|
24180
|
-
"type": "string",
|
|
24181
|
-
"decorators": []
|
|
24182
|
-
}
|
|
24183
|
-
],
|
|
24044
|
+
"hostBindings": [],
|
|
24184
24045
|
"hostListeners": [],
|
|
24185
24046
|
"propertiesClass": [],
|
|
24186
24047
|
"methodsClass": [
|
|
@@ -24226,8 +24087,8 @@
|
|
|
24226
24087
|
"coverageIgnore": false,
|
|
24227
24088
|
"jsdoctags": [
|
|
24228
24089
|
{
|
|
24229
|
-
"pos":
|
|
24230
|
-
"end":
|
|
24090
|
+
"pos": 94,
|
|
24091
|
+
"end": 172,
|
|
24231
24092
|
"kind": 321,
|
|
24232
24093
|
"id": 0,
|
|
24233
24094
|
"flags": 16777216,
|
|
@@ -24246,7 +24107,7 @@
|
|
|
24246
24107
|
"name": "cssClasses",
|
|
24247
24108
|
"type": "string",
|
|
24248
24109
|
"returnType": "string",
|
|
24249
|
-
"line":
|
|
24110
|
+
"line": 14,
|
|
24250
24111
|
"rawdescription": "\n",
|
|
24251
24112
|
"description": ""
|
|
24252
24113
|
}
|
|
@@ -24264,12 +24125,12 @@
|
|
|
24264
24125
|
},
|
|
24265
24126
|
{
|
|
24266
24127
|
"name": "EclMediaContainerCreditDirective",
|
|
24267
|
-
"id": "directive-EclMediaContainerCreditDirective-
|
|
24128
|
+
"id": "directive-EclMediaContainerCreditDirective-46dff5a267e45c1ae989bacb6887afc00952df088052300f1af502f6ff875375266d0df406245d6d59b128782e892c2263ae003e6d1050b05730b97d914d1b64",
|
|
24268
24129
|
"file": "packages/ecl/components/ecl-media-container/ecl-media-container-credit.directive.ts",
|
|
24269
24130
|
"type": "directive",
|
|
24270
24131
|
"description": "<p>Adds styling and attributes to the media container credit element.</p>\n",
|
|
24271
24132
|
"rawdescription": "\n\nAdds styling and attributes to the media container credit element.\n",
|
|
24272
|
-
"sourceCode": "import { Directive
|
|
24133
|
+
"sourceCode": "import { Directive } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Adds styling and attributes to the media container credit element.\n */\n@Directive({\n selector: 'footer[eclMediaContainerCredit]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclMediaContainerCreditDirective extends ECLBaseDirective {\n get cssClasses(): string {\n return [super.getCssClasses('ecl-media-container__credit')].join(' ').trim();\n }\n}\n",
|
|
24273
24134
|
"selector": "footer[eclMediaContainerCredit]",
|
|
24274
24135
|
"providers": [],
|
|
24275
24136
|
"hostDirectives": [],
|
|
@@ -24322,20 +24183,7 @@
|
|
|
24322
24183
|
"outputsClass": [],
|
|
24323
24184
|
"deprecated": false,
|
|
24324
24185
|
"deprecationMessage": "",
|
|
24325
|
-
"hostBindings": [
|
|
24326
|
-
{
|
|
24327
|
-
"coverageIgnore": false,
|
|
24328
|
-
"name": "class",
|
|
24329
|
-
"actualName": "cssClasses",
|
|
24330
|
-
"deprecated": false,
|
|
24331
|
-
"deprecationMessage": "",
|
|
24332
|
-
"rawdescription": "\n",
|
|
24333
|
-
"description": "",
|
|
24334
|
-
"line": 12,
|
|
24335
|
-
"type": "string",
|
|
24336
|
-
"decorators": []
|
|
24337
|
-
}
|
|
24338
|
-
],
|
|
24186
|
+
"hostBindings": [],
|
|
24339
24187
|
"hostListeners": [],
|
|
24340
24188
|
"propertiesClass": [],
|
|
24341
24189
|
"methodsClass": [
|
|
@@ -24381,8 +24229,8 @@
|
|
|
24381
24229
|
"coverageIgnore": false,
|
|
24382
24230
|
"jsdoctags": [
|
|
24383
24231
|
{
|
|
24384
|
-
"pos":
|
|
24385
|
-
"end":
|
|
24232
|
+
"pos": 94,
|
|
24233
|
+
"end": 171,
|
|
24386
24234
|
"kind": 321,
|
|
24387
24235
|
"id": 0,
|
|
24388
24236
|
"flags": 16777216,
|
|
@@ -24401,7 +24249,7 @@
|
|
|
24401
24249
|
"name": "cssClasses",
|
|
24402
24250
|
"type": "string",
|
|
24403
24251
|
"returnType": "string",
|
|
24404
|
-
"line":
|
|
24252
|
+
"line": 14,
|
|
24405
24253
|
"rawdescription": "\n",
|
|
24406
24254
|
"description": ""
|
|
24407
24255
|
}
|
|
@@ -24419,28 +24267,17 @@
|
|
|
24419
24267
|
},
|
|
24420
24268
|
{
|
|
24421
24269
|
"name": "EclMediaContainerIframeDirective",
|
|
24422
|
-
"id": "directive-EclMediaContainerIframeDirective-
|
|
24270
|
+
"id": "directive-EclMediaContainerIframeDirective-838b18f9ffd6a551b3638d611f9034c2fbd3a8eee0dbd5a34cb184d1cfae5c1390bcee6e5f216f0497de35c6c2d13d118d80d49f97067d2be4d5d00489413a22",
|
|
24423
24271
|
"file": "packages/ecl/components/ecl-media-container/ecl-media-container-iframe.directive.ts",
|
|
24424
24272
|
"type": "directive",
|
|
24425
24273
|
"description": "<p>Adds styling and attributes to the iframe element.</p>\n",
|
|
24426
24274
|
"rawdescription": "\n\nAdds styling and attributes to the iframe element.\n",
|
|
24427
|
-
"sourceCode": "import { Directive, ElementRef,
|
|
24275
|
+
"sourceCode": "import { Directive, ElementRef, inject, input } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Adds styling and attributes to the iframe element.\n */\n@Directive({\n selector: 'iframe[eclMediaContainerIframe]',\n host: {\n '[style.aspect-ratio]': 'ratio',\n },\n})\nexport class EclMediaContainerIframeDirective extends ECLBaseDirective {\n readonly width = input(undefined);\n readonly height = input(undefined);\n\n hasCustomRatio = false;\n private elem = inject(ElementRef);\n\n /**\n * Aspect ratio applied as a host style binding. Derived from the\n * `width`/`height` inputs (falling back to the element's measured size),\n * and only produced when a custom ratio is requested.\n */\n get ratio(): string | null {\n return this.hasCustomRatio ? this.calculateCustomRatio() : null;\n }\n\n calculateCustomRatio(): string {\n let iframeHeight = this.height();\n let iframeWidth = this.width();\n if (!iframeWidth || !iframeHeight) {\n iframeWidth = this.elem.nativeElement.offsetWidth;\n iframeHeight = this.elem.nativeElement.offsetHeight;\n }\n return `${iframeWidth}/${iframeHeight}`;\n }\n}\n",
|
|
24428
24276
|
"selector": "iframe[eclMediaContainerIframe]",
|
|
24429
24277
|
"providers": [],
|
|
24430
24278
|
"hostDirectives": [],
|
|
24431
24279
|
"standalone": false,
|
|
24432
24280
|
"inputsClass": [
|
|
24433
|
-
{
|
|
24434
|
-
"coverageIgnore": false,
|
|
24435
|
-
"name": "ratio",
|
|
24436
|
-
"deprecated": false,
|
|
24437
|
-
"deprecationMessage": "",
|
|
24438
|
-
"rawdescription": "\n",
|
|
24439
|
-
"description": "",
|
|
24440
|
-
"line": 15,
|
|
24441
|
-
"type": "string",
|
|
24442
|
-
"decorators": []
|
|
24443
|
-
},
|
|
24444
24281
|
{
|
|
24445
24282
|
"name": "height",
|
|
24446
24283
|
"coverageIgnore": false,
|
|
@@ -24450,7 +24287,7 @@
|
|
|
24450
24287
|
"indexKey": "",
|
|
24451
24288
|
"optional": false,
|
|
24452
24289
|
"description": "",
|
|
24453
|
-
"line":
|
|
24290
|
+
"line": 15,
|
|
24454
24291
|
"rawdescription": "\n",
|
|
24455
24292
|
"modifierKind": [
|
|
24456
24293
|
148
|
|
@@ -24466,7 +24303,7 @@
|
|
|
24466
24303
|
"indexKey": "",
|
|
24467
24304
|
"optional": false,
|
|
24468
24305
|
"description": "",
|
|
24469
|
-
"line":
|
|
24306
|
+
"line": 14,
|
|
24470
24307
|
"rawdescription": "\n",
|
|
24471
24308
|
"modifierKind": [
|
|
24472
24309
|
148
|
|
@@ -24533,7 +24370,7 @@
|
|
|
24533
24370
|
"indexKey": "",
|
|
24534
24371
|
"optional": false,
|
|
24535
24372
|
"description": "",
|
|
24536
|
-
"line":
|
|
24373
|
+
"line": 17,
|
|
24537
24374
|
"rawdescription": "\n"
|
|
24538
24375
|
}
|
|
24539
24376
|
],
|
|
@@ -24545,7 +24382,7 @@
|
|
|
24545
24382
|
"optional": false,
|
|
24546
24383
|
"returnType": "string",
|
|
24547
24384
|
"typeParameters": [],
|
|
24548
|
-
"line":
|
|
24385
|
+
"line": 29,
|
|
24549
24386
|
"deprecated": false,
|
|
24550
24387
|
"deprecationMessage": "",
|
|
24551
24388
|
"rawdescription": "\n",
|
|
@@ -24593,8 +24430,8 @@
|
|
|
24593
24430
|
"coverageIgnore": false,
|
|
24594
24431
|
"jsdoctags": [
|
|
24595
24432
|
{
|
|
24596
|
-
"pos":
|
|
24597
|
-
"end":
|
|
24433
|
+
"pos": 121,
|
|
24434
|
+
"end": 182,
|
|
24598
24435
|
"kind": 321,
|
|
24599
24436
|
"id": 0,
|
|
24600
24437
|
"flags": 16777216,
|
|
@@ -24611,11 +24448,11 @@
|
|
|
24611
24448
|
"name": "ratio",
|
|
24612
24449
|
"getSignature": {
|
|
24613
24450
|
"name": "ratio",
|
|
24614
|
-
"type": "
|
|
24615
|
-
"returnType": "string",
|
|
24616
|
-
"line":
|
|
24617
|
-
"rawdescription": "\n",
|
|
24618
|
-
"description": ""
|
|
24451
|
+
"type": "unknown",
|
|
24452
|
+
"returnType": "string | null",
|
|
24453
|
+
"line": 25,
|
|
24454
|
+
"rawdescription": "\n\nAspect ratio applied as a host style binding. Derived from the\n`width`/`height` inputs (falling back to the element's measured size),\nand only produced when a custom ratio is requested.\n",
|
|
24455
|
+
"description": "<p>Aspect ratio applied as a host style binding. Derived from the\n<code>width</code>/<code>height</code> inputs (falling back to the element's measured size),\nand only produced when a custom ratio is requested.</p>\n"
|
|
24619
24456
|
}
|
|
24620
24457
|
}
|
|
24621
24458
|
},
|
|
@@ -24631,12 +24468,12 @@
|
|
|
24631
24468
|
},
|
|
24632
24469
|
{
|
|
24633
24470
|
"name": "EclMediaContainerItemAudioDescriptionDirective",
|
|
24634
|
-
"id": "directive-EclMediaContainerItemAudioDescriptionDirective-
|
|
24471
|
+
"id": "directive-EclMediaContainerItemAudioDescriptionDirective-b17bc8fb1bc7be353f925e271b35eab6c9200d081b149fa477e1e78583c63cbecedfde7c0d7e62695de2801b5cc4dd08778a24bd1f1773628aa9caeef7e4fa2b",
|
|
24635
24472
|
"file": "packages/ecl/components/ecl-media-container/ecl-media-container-item-audio-description.directive.ts",
|
|
24636
24473
|
"type": "directive",
|
|
24637
24474
|
"description": "<p>Adds styling to the media container description.</p>\n",
|
|
24638
24475
|
"rawdescription": "\n\nAdds styling to the media container description.\n",
|
|
24639
|
-
"sourceCode": "import { Directive
|
|
24476
|
+
"sourceCode": "import { Directive } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Adds styling to the media container description.\n */\n@Directive({\n selector: '[eclMediaContainerItemAudioDescription]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclMediaContainerItemAudioDescriptionDirective extends ECLBaseDirective {\n get cssClasses(): string {\n return [super.getCssClasses('ecl-media-container__media-audio')].join(' ').trim();\n }\n}\n",
|
|
24640
24477
|
"selector": "[eclMediaContainerItemAudioDescription]",
|
|
24641
24478
|
"providers": [],
|
|
24642
24479
|
"hostDirectives": [],
|
|
@@ -24689,20 +24526,7 @@
|
|
|
24689
24526
|
"outputsClass": [],
|
|
24690
24527
|
"deprecated": false,
|
|
24691
24528
|
"deprecationMessage": "",
|
|
24692
|
-
"hostBindings": [
|
|
24693
|
-
{
|
|
24694
|
-
"coverageIgnore": false,
|
|
24695
|
-
"name": "class",
|
|
24696
|
-
"actualName": "cssClasses",
|
|
24697
|
-
"deprecated": false,
|
|
24698
|
-
"deprecationMessage": "",
|
|
24699
|
-
"rawdescription": "\n",
|
|
24700
|
-
"description": "",
|
|
24701
|
-
"line": 12,
|
|
24702
|
-
"type": "string",
|
|
24703
|
-
"decorators": []
|
|
24704
|
-
}
|
|
24705
|
-
],
|
|
24529
|
+
"hostBindings": [],
|
|
24706
24530
|
"hostListeners": [],
|
|
24707
24531
|
"propertiesClass": [],
|
|
24708
24532
|
"methodsClass": [
|
|
@@ -24748,8 +24572,8 @@
|
|
|
24748
24572
|
"coverageIgnore": false,
|
|
24749
24573
|
"jsdoctags": [
|
|
24750
24574
|
{
|
|
24751
|
-
"pos":
|
|
24752
|
-
"end":
|
|
24575
|
+
"pos": 94,
|
|
24576
|
+
"end": 153,
|
|
24753
24577
|
"kind": 321,
|
|
24754
24578
|
"id": 0,
|
|
24755
24579
|
"flags": 16777216,
|
|
@@ -24768,7 +24592,7 @@
|
|
|
24768
24592
|
"name": "cssClasses",
|
|
24769
24593
|
"type": "string",
|
|
24770
24594
|
"returnType": "string",
|
|
24771
|
-
"line":
|
|
24595
|
+
"line": 14,
|
|
24772
24596
|
"rawdescription": "\n",
|
|
24773
24597
|
"description": ""
|
|
24774
24598
|
}
|
|
@@ -24786,12 +24610,12 @@
|
|
|
24786
24610
|
},
|
|
24787
24611
|
{
|
|
24788
24612
|
"name": "EclMediaContainerItemDirective",
|
|
24789
|
-
"id": "directive-EclMediaContainerItemDirective-
|
|
24613
|
+
"id": "directive-EclMediaContainerItemDirective-90aa274c665c54f4dabcca5a22834d9c336f03a9d2ddf1fc78e6880a3bc07c7625392ed6ae7d0d77eb9ffa07269903d6b64567402d559826c7ac28fe456f5929",
|
|
24790
24614
|
"file": "packages/ecl/components/ecl-media-container/ecl-media-container-item.directive.ts",
|
|
24791
24615
|
"type": "directive",
|
|
24792
24616
|
"description": "<p>Adds styling and functionality to the media container item /image.</p>\n",
|
|
24793
24617
|
"rawdescription": "\n\nAdds styling and functionality to the media container item /image.\n",
|
|
24794
|
-
"sourceCode": "import { AfterContentInit, Directive, ElementRef,
|
|
24618
|
+
"sourceCode": "import { AfterContentInit, Directive, ElementRef, PLATFORM_ID, afterNextRender, inject, input, contentChild } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclMediaContainerIframeDirective } from './ecl-media-container-iframe.directive';\nimport { isPlatformBrowser } from '@angular/common';\n\n/**\n * Adds styling and functionality to the media container item /image.\n */\n@Directive({\n selector: '[eclMediaContainerItem], img[eclMediaContainerImage]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclMediaContainerItemDirective extends ECLBaseDirective implements AfterContentInit {\n el = inject(ElementRef);\n\n readonly ratio = input<string>(undefined);\n readonly contentIframe = contentChild(EclMediaContainerIframeDirective);\n\n get cssClasses(): string {\n const ratio = this.ratio();\n return [\n super.getCssClasses('ecl-media-container__media'),\n ratio ? `ecl-media-container__media--ratio-${ratio}` : '',\n this.isVideo ? 'ecl-video' : '',\n ]\n .join(' ')\n .trim();\n }\n\n public isVideo = false;\n private platformId = inject(PLATFORM_ID);\n\n constructor() {\n super();\n afterNextRender(() => {\n this.setIframeUrl();\n });\n }\n\n ngAfterContentInit(): void {\n const contentIframe = this.contentIframe();\n if (contentIframe) {\n contentIframe.hasCustomRatio = this.ratio() ? false : true;\n }\n if (isPlatformBrowser(this.platformId)) {\n const selector = this.el.nativeElement.tagName;\n this.isVideo = selector === 'VIDEO';\n }\n }\n\n // TODO: is this really needed?\n setIframeUrl(): void {\n if (this.el.nativeElement.lastChild && this.el.nativeElement.lastChild.nodeName === 'IFRAME') {\n const iframe = this.el.nativeElement.lastChild;\n const iframeUrl = new URL(iframe.src);\n if (iframeUrl.host.includes('youtube')) {\n iframe.src = iframeUrl;\n }\n }\n }\n}\n",
|
|
24795
24619
|
"selector": "[eclMediaContainerItem], img[eclMediaContainerImage]",
|
|
24796
24620
|
"providers": [],
|
|
24797
24621
|
"hostDirectives": [],
|
|
@@ -24807,7 +24631,7 @@
|
|
|
24807
24631
|
"indexKey": "",
|
|
24808
24632
|
"optional": false,
|
|
24809
24633
|
"description": "",
|
|
24810
|
-
"line":
|
|
24634
|
+
"line": 18,
|
|
24811
24635
|
"rawdescription": "\n",
|
|
24812
24636
|
"modifierKind": [
|
|
24813
24637
|
148
|
|
@@ -24861,20 +24685,7 @@
|
|
|
24861
24685
|
"outputsClass": [],
|
|
24862
24686
|
"deprecated": false,
|
|
24863
24687
|
"deprecationMessage": "",
|
|
24864
|
-
"hostBindings": [
|
|
24865
|
-
{
|
|
24866
|
-
"coverageIgnore": false,
|
|
24867
|
-
"name": "class",
|
|
24868
|
-
"actualName": "cssClasses",
|
|
24869
|
-
"deprecated": false,
|
|
24870
|
-
"deprecationMessage": "",
|
|
24871
|
-
"rawdescription": "\n",
|
|
24872
|
-
"description": "",
|
|
24873
|
-
"line": 19,
|
|
24874
|
-
"type": "string",
|
|
24875
|
-
"decorators": []
|
|
24876
|
-
}
|
|
24877
|
-
],
|
|
24688
|
+
"hostBindings": [],
|
|
24878
24689
|
"hostListeners": [],
|
|
24879
24690
|
"propertiesClass": [
|
|
24880
24691
|
{
|
|
@@ -24887,7 +24698,7 @@
|
|
|
24887
24698
|
"indexKey": "",
|
|
24888
24699
|
"optional": false,
|
|
24889
24700
|
"description": "",
|
|
24890
|
-
"line":
|
|
24701
|
+
"line": 19,
|
|
24891
24702
|
"rawdescription": "\n",
|
|
24892
24703
|
"modifierKind": [
|
|
24893
24704
|
148
|
|
@@ -24903,7 +24714,7 @@
|
|
|
24903
24714
|
"indexKey": "",
|
|
24904
24715
|
"optional": false,
|
|
24905
24716
|
"description": "",
|
|
24906
|
-
"line":
|
|
24717
|
+
"line": 16,
|
|
24907
24718
|
"rawdescription": "\n"
|
|
24908
24719
|
},
|
|
24909
24720
|
{
|
|
@@ -24916,7 +24727,7 @@
|
|
|
24916
24727
|
"indexKey": "",
|
|
24917
24728
|
"optional": false,
|
|
24918
24729
|
"description": "",
|
|
24919
|
-
"line":
|
|
24730
|
+
"line": 32,
|
|
24920
24731
|
"rawdescription": "\n",
|
|
24921
24732
|
"modifierKind": [
|
|
24922
24733
|
125
|
|
@@ -24931,7 +24742,7 @@
|
|
|
24931
24742
|
"optional": false,
|
|
24932
24743
|
"returnType": "void",
|
|
24933
24744
|
"typeParameters": [],
|
|
24934
|
-
"line":
|
|
24745
|
+
"line": 42,
|
|
24935
24746
|
"deprecated": false,
|
|
24936
24747
|
"deprecationMessage": "",
|
|
24937
24748
|
"rawdescription": "\n",
|
|
@@ -24944,7 +24755,7 @@
|
|
|
24944
24755
|
"optional": false,
|
|
24945
24756
|
"returnType": "void",
|
|
24946
24757
|
"typeParameters": [],
|
|
24947
|
-
"line":
|
|
24758
|
+
"line": 54,
|
|
24948
24759
|
"deprecated": false,
|
|
24949
24760
|
"deprecationMessage": "",
|
|
24950
24761
|
"rawdescription": "\n",
|
|
@@ -24992,8 +24803,8 @@
|
|
|
24992
24803
|
"coverageIgnore": false,
|
|
24993
24804
|
"jsdoctags": [
|
|
24994
24805
|
{
|
|
24995
|
-
"pos":
|
|
24996
|
-
"end":
|
|
24806
|
+
"pos": 327,
|
|
24807
|
+
"end": 404,
|
|
24997
24808
|
"kind": 321,
|
|
24998
24809
|
"id": 0,
|
|
24999
24810
|
"flags": 16777216,
|
|
@@ -25014,7 +24825,7 @@
|
|
|
25014
24825
|
"deprecated": false,
|
|
25015
24826
|
"deprecationMessage": "",
|
|
25016
24827
|
"args": [],
|
|
25017
|
-
"line":
|
|
24828
|
+
"line": 33,
|
|
25018
24829
|
"rawdescription": "\n"
|
|
25019
24830
|
},
|
|
25020
24831
|
"accessors": {
|
|
@@ -25024,7 +24835,7 @@
|
|
|
25024
24835
|
"name": "cssClasses",
|
|
25025
24836
|
"type": "string",
|
|
25026
24837
|
"returnType": "string",
|
|
25027
|
-
"line":
|
|
24838
|
+
"line": 21,
|
|
25028
24839
|
"rawdescription": "\n",
|
|
25029
24840
|
"description": ""
|
|
25030
24841
|
}
|
|
@@ -25046,12 +24857,12 @@
|
|
|
25046
24857
|
},
|
|
25047
24858
|
{
|
|
25048
24859
|
"name": "EclMediaContainerPictureDirective",
|
|
25049
|
-
"id": "directive-EclMediaContainerPictureDirective-
|
|
24860
|
+
"id": "directive-EclMediaContainerPictureDirective-208ee2efa1712fe030e5b1b24e8f29d15bb24dda6db7967506d8138ba994efd15b2faf41aa88e84b73ca127c250c2646287b714e7c7b0d4c654f0824fd655275",
|
|
25050
24861
|
"file": "packages/ecl/components/ecl-media-container/ecl-media-container-picture.directive.ts",
|
|
25051
24862
|
"type": "directive",
|
|
25052
24863
|
"description": "<p>Applies styles for the picture element.</p>\n",
|
|
25053
24864
|
"rawdescription": "\n\nApplies styles for the picture element.\n",
|
|
25054
|
-
"sourceCode": "import { Directive
|
|
24865
|
+
"sourceCode": "import { Directive } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Applies styles for the picture element.\n */\n@Directive({\n selector: 'picture[eclMediaContainerPicture]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclMediaContainerPictureDirective extends ECLBaseDirective {\n get cssClasses(): string {\n return [super.getCssClasses('ecl-picture ecl-media-container__picture')].join(' ').trim();\n }\n}\n",
|
|
25055
24866
|
"selector": "picture[eclMediaContainerPicture]",
|
|
25056
24867
|
"providers": [],
|
|
25057
24868
|
"hostDirectives": [],
|
|
@@ -25104,20 +24915,7 @@
|
|
|
25104
24915
|
"outputsClass": [],
|
|
25105
24916
|
"deprecated": false,
|
|
25106
24917
|
"deprecationMessage": "",
|
|
25107
|
-
"hostBindings": [
|
|
25108
|
-
{
|
|
25109
|
-
"coverageIgnore": false,
|
|
25110
|
-
"name": "class",
|
|
25111
|
-
"actualName": "cssClasses",
|
|
25112
|
-
"deprecated": false,
|
|
25113
|
-
"deprecationMessage": "",
|
|
25114
|
-
"rawdescription": "\n",
|
|
25115
|
-
"description": "",
|
|
25116
|
-
"line": 12,
|
|
25117
|
-
"type": "string",
|
|
25118
|
-
"decorators": []
|
|
25119
|
-
}
|
|
25120
|
-
],
|
|
24918
|
+
"hostBindings": [],
|
|
25121
24919
|
"hostListeners": [],
|
|
25122
24920
|
"propertiesClass": [],
|
|
25123
24921
|
"methodsClass": [
|
|
@@ -25163,8 +24961,8 @@
|
|
|
25163
24961
|
"coverageIgnore": false,
|
|
25164
24962
|
"jsdoctags": [
|
|
25165
24963
|
{
|
|
25166
|
-
"pos":
|
|
25167
|
-
"end":
|
|
24964
|
+
"pos": 94,
|
|
24965
|
+
"end": 144,
|
|
25168
24966
|
"kind": 321,
|
|
25169
24967
|
"id": 0,
|
|
25170
24968
|
"flags": 16777216,
|
|
@@ -25183,7 +24981,7 @@
|
|
|
25183
24981
|
"name": "cssClasses",
|
|
25184
24982
|
"type": "string",
|
|
25185
24983
|
"returnType": "string",
|
|
25186
|
-
"line":
|
|
24984
|
+
"line": 14,
|
|
25187
24985
|
"rawdescription": "\n",
|
|
25188
24986
|
"description": ""
|
|
25189
24987
|
}
|
|
@@ -50535,10 +50333,11 @@
|
|
|
50535
50333
|
},
|
|
50536
50334
|
{
|
|
50537
50335
|
"name": "EclDescriptionListDefinitionComponent",
|
|
50538
|
-
"id": "component-EclDescriptionListDefinitionComponent-
|
|
50336
|
+
"id": "component-EclDescriptionListDefinitionComponent-e3df3158863fb47d29c9bddd99a9c91ace679e9f97138ede1022b3bccfd820f96a584648e8392dea49e34ac45cadce3ff87767c12425f31ff80e3f6374f37d36",
|
|
50539
50337
|
"file": "packages/ecl/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.ts",
|
|
50540
50338
|
"encapsulation": [],
|
|
50541
50339
|
"entryComponents": [],
|
|
50340
|
+
"host": {},
|
|
50542
50341
|
"inputs": [],
|
|
50543
50342
|
"outputs": [],
|
|
50544
50343
|
"providers": [],
|
|
@@ -50562,7 +50361,7 @@
|
|
|
50562
50361
|
"indexKey": "",
|
|
50563
50362
|
"optional": false,
|
|
50564
50363
|
"description": "<p>Visual variant of the definition list item.\nOptions: 'link', 'inline', 'taxonomy', 'tag'.</p>\n",
|
|
50565
|
-
"line":
|
|
50364
|
+
"line": 43,
|
|
50566
50365
|
"rawdescription": "\n\nVisual variant of the definition list item.\nOptions: 'link', 'inline', 'taxonomy', 'tag'.\n",
|
|
50567
50366
|
"required": false
|
|
50568
50367
|
},
|
|
@@ -50621,9 +50420,9 @@
|
|
|
50621
50420
|
"type": "unknown",
|
|
50622
50421
|
"indexKey": "",
|
|
50623
50422
|
"optional": false,
|
|
50624
|
-
"description": "<p>Signal indicating whether the DOM is ready for manipulation.\nSet to true after first render to ensure projected
|
|
50423
|
+
"description": "<p>Signal indicating whether the DOM is ready for manipulation.\nSet to true after first render to ensure the projected <ul> exists before\nthe see-more link is inserted into it. Defers DOM writes in the effect.</p>\n",
|
|
50625
50424
|
"line": 76,
|
|
50626
|
-
"rawdescription": "\n\nSignal indicating whether the DOM is ready for manipulation.\nSet to true after first render to ensure projected
|
|
50425
|
+
"rawdescription": "\n\nSignal indicating whether the DOM is ready for manipulation.\nSet to true after first render to ensure the projected <ul> exists before\nthe see-more link is inserted into it. Defers DOM writes in the effect.\n",
|
|
50627
50426
|
"modifierKind": [
|
|
50628
50427
|
148
|
|
50629
50428
|
]
|
|
@@ -50654,7 +50453,7 @@
|
|
|
50654
50453
|
"indexKey": "",
|
|
50655
50454
|
"optional": false,
|
|
50656
50455
|
"description": "<p>Maximum number of items to display before showing "See all" link.\nControlled by parent EclDescriptionListDirective.</p>\n",
|
|
50657
|
-
"line":
|
|
50456
|
+
"line": 49,
|
|
50658
50457
|
"rawdescription": "\n\nMaximum number of items to display before showing \"See all\" link.\nControlled by parent EclDescriptionListDirective.\n"
|
|
50659
50458
|
}
|
|
50660
50459
|
],
|
|
@@ -50675,7 +50474,7 @@
|
|
|
50675
50474
|
"optional": false,
|
|
50676
50475
|
"returnType": "void",
|
|
50677
50476
|
"typeParameters": [],
|
|
50678
|
-
"line":
|
|
50477
|
+
"line": 145,
|
|
50679
50478
|
"deprecated": false,
|
|
50680
50479
|
"deprecationMessage": "",
|
|
50681
50480
|
"rawdescription": "\n\nHandles the \"Show all items\" link click event.\nExpands all hidden items and removes the \"See all\" link from DOM.\n",
|
|
@@ -50736,22 +50535,9 @@
|
|
|
50736
50535
|
"coverageIgnore": false,
|
|
50737
50536
|
"deprecated": false,
|
|
50738
50537
|
"deprecationMessage": "",
|
|
50739
|
-
"hostBindings": [
|
|
50740
|
-
{
|
|
50741
|
-
"coverageIgnore": false,
|
|
50742
|
-
"name": "class",
|
|
50743
|
-
"actualName": "cssClasses",
|
|
50744
|
-
"deprecated": false,
|
|
50745
|
-
"deprecationMessage": "",
|
|
50746
|
-
"rawdescription": "\n",
|
|
50747
|
-
"description": "",
|
|
50748
|
-
"line": 64,
|
|
50749
|
-
"type": "string",
|
|
50750
|
-
"decorators": []
|
|
50751
|
-
}
|
|
50752
|
-
],
|
|
50538
|
+
"hostBindings": [],
|
|
50753
50539
|
"hostListeners": [],
|
|
50754
|
-
"standalone":
|
|
50540
|
+
"standalone": false,
|
|
50755
50541
|
"imports": [
|
|
50756
50542
|
{
|
|
50757
50543
|
"name": "EUI_ECL_LINK"
|
|
@@ -50764,14 +50550,14 @@
|
|
|
50764
50550
|
"description": "<p>Component for a definition item within an ECL description list.\nSupports variants (link, inline, taxonomy, tag) and collapsible functionality\nwith maxVisibleItems control.</p>\n",
|
|
50765
50551
|
"rawdescription": "\n\nComponent for a definition item within an ECL description list.\nSupports variants (link, inline, taxonomy, tag) and collapsible functionality\nwith maxVisibleItems control.\n",
|
|
50766
50552
|
"type": "component",
|
|
50767
|
-
"sourceCode": "import {\n ApplicationRef,\n Component,\n DestroyRef,\n ElementRef,\n EmbeddedViewRef,\n
|
|
50553
|
+
"sourceCode": "import {\n ApplicationRef,\n Component,\n DestroyRef,\n ElementRef,\n EmbeddedViewRef,\n TemplateRef,\n afterNextRender,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclDescriptionListDefinitionItemDirective } from '../ecl-description-list-definition-item.directive';\nimport { EUI_ECL_LINK } from '@eui/ecl/components/ecl-link';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n/**\n * Component for a definition item within an ECL description list.\n * Supports variants (link, inline, taxonomy, tag) and collapsible functionality\n * with maxVisibleItems control.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[eclDescriptionListDefinition]',\n templateUrl: './ecl-description-list-definition.component.html',\n imports: [...EUI_ECL_LINK, TranslatePipe],\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclDescriptionListDefinitionComponent extends ECLBaseDirective {\n\n /**\n * Visual variant of the definition list item.\n * Options: 'link', 'inline', 'taxonomy', 'tag'.\n */\n variant = input<'link' | 'inline' | 'taxonomy' | 'tag' | null>(null);\n\n /**\n * Maximum number of items to display before showing \"See all\" link.\n * Controlled by parent EclDescriptionListDirective.\n */\n maxVisibleItems = signal<number | null>(null);\n\n private readonly eclListItems = contentChildren(EclDescriptionListDefinitionItemDirective, {\n descendants: true,\n });\n\n private readonly seeMoreTpl = viewChild.required<TemplateRef<unknown>>('seeMoreTpl');\n\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly appRef = inject(ApplicationRef);\n private readonly destroyRef = inject(DestroyRef);\n\n private seeMoreView?: EmbeddedViewRef<unknown>;\n private appended = false;\n\n get cssClasses(): string {\n const v = this.variant();\n return [\n super.getCssClasses('ecl-description-list__definition'),\n v ? `ecl-description-list__definition--${v}` : '',\n ].join(' ');\n }\n /**\n * Signal indicating whether the DOM is ready for manipulation.\n * Set to true after first render to ensure the projected <ul> exists before\n * the see-more link is inserted into it. Defers DOM writes in the effect.\n */\n readonly domReady = signal(false);\n \n /**\n * Computed signal that returns the total number of list items.\n */\n private readonly currentItemsNumber = computed(() => this.eclListItems().length);\n\n /**\n * Computed signal that determines if \"See all\" link should be shown.\n * Returns true when maxVisibleItems is set and less than total items.\n */\n readonly hasSeeAll = computed(() => {\n const max = this.maxVisibleItems();\n const total = this.currentItemsNumber();\n return !!max && total > 0 && max < total;\n });\n\n constructor() {\n super();\n // Mark DOM ready AFTER first render (projected <ul> will exist)\n afterNextRender(() => this.domReady.set(true));\n\n // The \"See more\" link must render as a sibling <li> INSIDE the consumer-authored\n // <ul eclDescriptionListDefinitionList>, because ECL's CSS targets it as a direct\n // child of that list. Angular has no declarative way to project content into an\n // element the consumer owns (ng-content only projects into this component's own\n // template), so the link is inserted into the projected <ul> via controlled DOM\n // manipulation. This is intentional: keeping the natural <ul><li> markup in the\n // consumer template is preferred over an API that would force bare <li> authoring.\n //\n // This effect keeps two things in sync with reactive state:\n // 1. Per-item visibility (isHidden / isLastVisible signals) based on maxVisibleItems.\n // 2. Presence of the \"See more\" <li> in the projected <ul>, driven by hasSeeAll().\n // DOM writes are deferred until domReady() so the projected <ul> exists.\n effect(() => {\n const items = this.eclListItems();\n // If DOM not ready yet, only do state updates (no DOM querying/appending)\n const ready = this.domReady();\n\n if (!this.hasSeeAll()) {\n // show all items\n items.forEach((it) => {\n it.isHidden.set(false);\n it.isLastVisible.set(false);\n });\n\n if (ready) this.removeSeeMoreFromDom();\n return;\n }\n\n // \"See all\" needed → hide beyond max\n const max = this.maxVisibleItems()!;\n items.forEach((it, idx) => {\n it.isHidden.set(idx >= max);\n it.isLastVisible.set(false);\n });\n const last = items[max - 1];\n if (last) last.isLastVisible.set(true);\n\n if (ready) this.ensureSeeMoreInsideProjectedUl();\n });\n\n this.destroyRef.onDestroy(() => this.removeSeeMoreFromDom());\n }\n\n /**\n * Handles the \"Show all items\" link click event.\n * Expands all hidden items and removes the \"See all\" link from DOM.\n */\n onShowAllItems(evt: Event): void {\n evt.preventDefault();\n this.showAllInternal();\n this.removeSeeMoreFromDom();\n }\n\n /**\n * Shows all items by setting isHidden to false for all items.\n */\n private showAllInternal(): void {\n const items = this.eclListItems();\n items.forEach((item) => item.isHidden.set(false));\n items.forEach((item) => item.isLastVisible.set(false));\n }\n\n /**\n * Ensures the \"See all\" link is appended inside the projected <ul> element.\n * Creates and attaches the embedded view if needed.\n */\n private ensureSeeMoreInsideProjectedUl(): void {\n if (!this.hasSeeAll()) return;\n\n const ul = this.findProjectedUl();\n if (!ul) return;\n\n // If it's already in there (e.g. reruns), do nothing\n if (ul.querySelector(':scope > li.ecl-description-list__see_more')) return;\n\n // Create the embedded view once and append its root <li> into the projected <ul>\n if (!this.seeMoreView) {\n this.seeMoreView = this.seeMoreTpl().createEmbeddedView({});\n this.appRef.attachView(this.seeMoreView);\n this.seeMoreView.detectChanges();\n }\n\n const [liNode] = this.seeMoreView.rootNodes as HTMLElement[];\n if (liNode && !this.appended) {\n ul.appendChild(liNode);\n this.appended = true;\n } else if (liNode && liNode.parentElement !== ul) {\n // if it was moved/removed, re-append\n ul.appendChild(liNode);\n }\n }\n\n /**\n * Removes the \"See all\" link from the DOM and cleans up the embedded view.\n */\n private removeSeeMoreFromDom(): void {\n const ul = this.findProjectedUl();\n ul?.querySelector(':scope > li.ecl-description-list__see_more')?.remove();\n\n this.appended = false;\n\n if (this.seeMoreView) {\n this.appRef.detachView(this.seeMoreView);\n this.seeMoreView.destroy();\n this.seeMoreView = undefined;\n }\n }\n\n /**\n * Finds the projected <ul> element with eclDescriptionListDefinitionList directive.\n * Returns null if not found.\n */\n private findProjectedUl(): HTMLUListElement | null {\n // The consumer-authored list carries the eclDescriptionListDefinitionList directive.\n return this.host.nativeElement.querySelector(\n 'ul[eclDescriptionListDefinitionList]'\n ) as HTMLUListElement | null;\n }\n}",
|
|
50768
50554
|
"assetsDirs": [],
|
|
50769
50555
|
"styleUrlsData": "",
|
|
50770
50556
|
"stylesData": "",
|
|
50771
50557
|
"jsdoctags": [
|
|
50772
50558
|
{
|
|
50773
|
-
"pos":
|
|
50774
|
-
"end":
|
|
50559
|
+
"pos": 533,
|
|
50560
|
+
"end": 721,
|
|
50775
50561
|
"kind": 321,
|
|
50776
50562
|
"id": 0,
|
|
50777
50563
|
"flags": 16777216,
|
|
@@ -57095,7 +56881,7 @@
|
|
|
57095
56881
|
},
|
|
57096
56882
|
{
|
|
57097
56883
|
"name": "EclIconComponent",
|
|
57098
|
-
"id": "component-EclIconComponent-
|
|
56884
|
+
"id": "component-EclIconComponent-098102385dea8ae19585b13531343588c38d879186ee8a691fc0aeb0f6cef41ef570f2be629b561695d0c3f13ebb52e8869d91e74ca8d7e05471f478e7ad412b",
|
|
57099
56885
|
"file": "packages/ecl/components/ecl-icon/ecl-icon.component.ts",
|
|
57100
56886
|
"encapsulation": [],
|
|
57101
56887
|
"entryComponents": [],
|
|
@@ -57208,7 +56994,7 @@
|
|
|
57208
56994
|
"defaultValue": "'default'",
|
|
57209
56995
|
"deprecated": false,
|
|
57210
56996
|
"deprecationMessage": "",
|
|
57211
|
-
"type": "'default' | 'social' | 'social-media' | 'social-media-color' | 'flag' | 'flag-non-members' | 'phosphor' | string",
|
|
56997
|
+
"type": "'default' | 'social' | 'social-media' | 'social-media-color' | 'flag' | 'flag-non-members' | 'phosphor' | 'phosphor-fill' | string",
|
|
57212
56998
|
"indexKey": "",
|
|
57213
56999
|
"optional": false,
|
|
57214
57000
|
"description": "<p>Defines the icon set to use.\nAvailable sets: <code>default</code>, <code>social</code>, <code>social-media</code>, <code>flag</code>, or a custom URL prefix.\nDefaults to <code>'default'</code>.</p>\n",
|
|
@@ -57628,7 +57414,7 @@
|
|
|
57628
57414
|
"description": "<p>ECL icon component – renders SVG icons from various sets depending on current theme.\nIntegrates with ECL theming and supports accessibility options.</p>\n",
|
|
57629
57415
|
"rawdescription": "\n\nECL icon component – renders SVG icons from various sets depending on current theme.\nIntegrates with ECL theming and supports accessibility options.\n",
|
|
57630
57416
|
"type": "component",
|
|
57631
|
-
"sourceCode": "import { isPlatformBrowser, NgClass } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n Component,\n computed,\n ElementRef,\n HostBinding,\n inject,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n Renderer2,\n signal,\n SimpleChanges,\n viewChild,\n} from '@angular/core';\nimport { ECLBaseDirective, EclThemeService } from '@eui/ecl/core';\n\n/**\n * ECL icon component – renders SVG icons from various sets depending on current theme.\n * Integrates with ECL theming and supports accessibility options.\n */\n@Component({\n selector: 'ecl-icon',\n templateUrl: './ecl-icon.component.html',\n hostDirectives: [\n {\n directive: ECLBaseDirective,\n },\n ],\n imports: [NgClass],\n providers: [EclThemeService],\n host: {\n '[class.ecl-icon--flip-horizontal]': 'isFlipHorizontal()',\n },\n})\nexport class EclIconComponent implements OnInit, OnChanges, OnDestroy {\n /**\n * Defines the icon set to use.\n * Available sets: `default`, `social`, `social-media`, `flag`, or a custom URL prefix.\n * Defaults to `'default'`.\n */\n iconSet = input<'default' | 'social' | 'social-media' | 'social-media-color' | 'flag' | 'flag-non-members' |\n 'phosphor' | string>('default');\n\n /**\n * Name of the icon to render from the selected set.\n */\n icon = input<string>();\n\n /**\n * Size of the icon.\n * Supported values: `'2xs'`, `'xs'`, `'s'`, `'m'`, `'l'`, `'xl'`, `'2xl'`, `'fluid'`.\n * Defaults to `'xs'`.\n */\n size = input<'2xs' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | 'fluid' | string>('xs');\n\n /**\n * Applies color styling to the icon.\n * Use `'inverted'` for icons on dark backgrounds, or `'primary'` for emphasis.\n */\n color = input<'inverted' | 'primary' | null>(null);\n\n /**\n * Adds a transformation modifier to the icon (e.g., rotation).\n */\n transform = input<string>();\n\n /**\n * ID reference for an external element that labels this icon for screen readers.\n */\n readonly ariaLabelledby = input<string>(undefined);\n\n /**\n * ARIA role of the icon. If a `title` is provided and no role is defined, defaults to `'img'`.\n */\n readonly role = input<string>(undefined);\n\n /**\n * Title used for accessibility. Also affects `aria-hidden` and `role`.\n */\n readonly title = input<string>(undefined);\n\n /**\n * Determines whether the icon should be hidden from assistive technologies.\n * Defaults to `true` unless a title is provided.\n */\n readonly ariaHidden = input<boolean, unknown>(undefined, { transform: booleanAttribute });\n\n /**\n * Controls whether the icon is focusable via keyboard.\n * Defaults to `false`.\n */\n readonly focusable = input(false, { transform: booleanAttribute });\n\n /**\n * Resolved role: uses the explicit `role` input if provided,\n * otherwise defaults to `'img'` when a `title` is set.\n */\n readonly effectiveRole = computed<string | undefined>(() => {\n const explicit = this.role();\n if (explicit !== undefined) return explicit;\n return this.title() !== undefined ? 'img' : undefined;\n });\n\n /**\n * Resolved aria-hidden: uses the explicit `ariaHidden` input if provided,\n * otherwise hides the icon unless a `title` is set.\n */\n readonly effectiveAriaHidden = computed<boolean>(() => {\n const explicit = this.ariaHidden();\n if (explicit !== undefined) return explicit;\n return this.title() === undefined;\n });\n\n /**\n * Flips the icon horizontally if set to `true`.\n */\n readonly isFlipHorizontal = input(false, { transform: booleanAttribute });\n\n /**\n * Adds a dark background utility class if the color is set to `'inverted'`.\n */\n @HostBinding('class.ecl-u-bg-grey')\n get isColorInverted(): boolean {\n return this.color() === 'inverted';\n }\n\n readonly svgEl = viewChild<ElementRef>('svg');\n\n iconUrl = signal<string>('');\n baseDirective = inject(ECLBaseDirective);\n el = inject(ElementRef);\n private renderer = inject(Renderer2);\n private platformId = inject(PLATFORM_ID);\n\n /**\n * Extra classes added programmatically by parent components\n * (button, link, etc.)\n */\n readonly extraClasses = signal<string>('');\n\n /**\n * Real classes currently present on <ecl-icon>.\n * To support [class.foo] / [ngClass].\n */\n readonly hostClasses = signal<string>('');\n\n readonly svgClasses = computed<Record<string, boolean>>(() => {\n return {\n [this.baseDirective.getCssClasses('ecl-icon')]: true,\n [`ecl-icon--${this.size()}`]: !!this.size(),\n [`ecl-icon--${this.transform()}`]: !!this.transform(),\n [`ecl-icon--${this.color()}`]: !!this.color(),\n ...this.toClassRecord(this.hostClasses()),\n ...this.toClassRecord(this.extraClasses()),\n };\n });\n\n private classObserver?: MutationObserver;\n\n constructor() {\n afterNextRender(() => {\n this.detachHostAndPromoteSvg();\n this.syncHostClassesFromDom();\n this.observeHostClassChanges();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['icon']) {\n this.initiateIconUrl();\n }\n }\n\n ngOnInit(): void {\n this.initiateIconUrl();\n }\n\n ngOnDestroy(): void {\n this.classObserver?.disconnect();\n if (!isPlatformBrowser(this.platformId)) return;\n\n try {\n const svgNative = this.svgEl()?.nativeElement as SVGElement | null;\n const parent = svgNative?.parentElement;\n if (svgNative && parent) parent.removeChild(svgNative);\n } catch {\n /* ignore */\n }\n }\n\n addExtraClass(className: string): void {\n const classes = new Set([\n ...this.tokenize(this.extraClasses()),\n ...this.tokenize(className),\n ]);\n this.extraClasses.set(Array.from(classes).join(' '));\n }\n\n removeExtraClass(className: string): void {\n const classes = this.tokenize(this.extraClasses()).filter((c) => c !== className);\n this.extraClasses.set(classes.join(' '));\n }\n\n setExtraClasses(classes: string): void {\n this.extraClasses.set(classes ?? '');\n }\n\n private syncHostClassesFromDom(): void {\n const host = this.el.nativeElement;\n this.hostClasses.set(host.className || '');\n }\n\n private observeHostClassChanges(): void {\n const host = this.el.nativeElement;\n\n this.classObserver = new MutationObserver(() => {\n this.hostClasses.set(host.className || '');\n });\n\n this.classObserver.observe(host, {\n attributes: true,\n attributeFilter: ['class'],\n });\n }\n\n private toClassRecord(classes?: string | null): Record<string, boolean> {\n return Object.fromEntries(\n this.tokenize(classes).map(c => [c, true])\n );\n }\n\n private tokenize(classes: string | null | undefined): string[] {\n return (classes ?? '')\n .split(/\\s+/)\n .filter(Boolean);\n }\n\n private detachHostAndPromoteSvg(): void {\n const hostEl = this.el.nativeElement as HTMLElement | null;\n const svgNative = this.svgEl()?.nativeElement as SVGElement | null;\n if (!hostEl || !svgNative) return;\n\n const hostParentEl = hostEl.parentElement;\n if (!hostParentEl) return;\n\n // add the svg and remove the parent from the DOM\n this.renderer.setStyle(hostEl, 'visibility', 'hidden');\n hostEl.after(svgNative);\n this.renderer.removeChild(hostParentEl, hostEl);\n }\n\n private initiateIconUrl(): void {\n switch (this.iconSet()) {\n case 'default':\n this.iconUrl.set(`assets/images/ecl/icons/sprite.svg#${this.icon()}`);\n break;\n case 'social': // TODO: Remove this in the next version.\n this.iconUrl.set(`assets/images/ecl/networks/sprite.svg#${this.icon()}`);\n break;\n case 'social-media':\n this.iconUrl.set(`assets/images/ecl/networks/sprite.svg#${this.icon()}`);\n break;\n case 'social-media-color':\n this.iconUrl.set(`assets/images/ecl/networks-color/sprite.svg#${this.icon()}`);\n break;\n case 'flag':\n this.iconUrl.set(`assets/images/ecl/icons-flag/sprites/icons-flag.svg#${this.icon()}`);\n break;\n case 'flag-non-members':\n this.iconUrl.set(`assets/images/ecl/icons-flag/sprites/icons-flag-non-members.svg#${this.icon()}`);\n break;\n case 'phosphor':\n this.iconUrl.set(`assets/icons/sprites/regular.svg#${this.icon()}`);\n break;\n case 'phosphor-fill':\n this.iconUrl.set(`assets/icons/sprites/fill.svg#${this.icon()}`);\n break;\n default:\n this.iconUrl.set(`assets/images/ecl/icons/sprite.svg#${this.icon()}`);\n }\n }\n}\n",
|
|
57417
|
+
"sourceCode": "import { isPlatformBrowser, NgClass } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n Component,\n computed,\n ElementRef,\n HostBinding,\n inject,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n Renderer2,\n signal,\n SimpleChanges,\n viewChild,\n} from '@angular/core';\nimport { ECLBaseDirective, EclThemeService } from '@eui/ecl/core';\n\n/**\n * ECL icon component – renders SVG icons from various sets depending on current theme.\n * Integrates with ECL theming and supports accessibility options.\n */\n@Component({\n selector: 'ecl-icon',\n templateUrl: './ecl-icon.component.html',\n hostDirectives: [\n {\n directive: ECLBaseDirective,\n },\n ],\n imports: [NgClass],\n providers: [EclThemeService],\n host: {\n '[class.ecl-icon--flip-horizontal]': 'isFlipHorizontal()',\n },\n})\nexport class EclIconComponent implements OnInit, OnChanges, OnDestroy {\n /**\n * Defines the icon set to use.\n * Available sets: `default`, `social`, `social-media`, `flag`, or a custom URL prefix.\n * Defaults to `'default'`.\n */\n iconSet = input<'default' | 'social' | 'social-media' | 'social-media-color' | 'flag' | 'flag-non-members' |\n 'phosphor' | 'phosphor-fill' | string>('default');\n\n /**\n * Name of the icon to render from the selected set.\n */\n icon = input<string>();\n\n /**\n * Size of the icon.\n * Supported values: `'2xs'`, `'xs'`, `'s'`, `'m'`, `'l'`, `'xl'`, `'2xl'`, `'fluid'`.\n * Defaults to `'xs'`.\n */\n size = input<'2xs' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | 'fluid' | string>('xs');\n\n /**\n * Applies color styling to the icon.\n * Use `'inverted'` for icons on dark backgrounds, or `'primary'` for emphasis.\n */\n color = input<'inverted' | 'primary' | null>(null);\n\n /**\n * Adds a transformation modifier to the icon (e.g., rotation).\n */\n transform = input<string>();\n\n /**\n * ID reference for an external element that labels this icon for screen readers.\n */\n readonly ariaLabelledby = input<string>(undefined);\n\n /**\n * ARIA role of the icon. If a `title` is provided and no role is defined, defaults to `'img'`.\n */\n readonly role = input<string>(undefined);\n\n /**\n * Title used for accessibility. Also affects `aria-hidden` and `role`.\n */\n readonly title = input<string>(undefined);\n\n /**\n * Determines whether the icon should be hidden from assistive technologies.\n * Defaults to `true` unless a title is provided.\n */\n readonly ariaHidden = input<boolean, unknown>(undefined, { transform: booleanAttribute });\n\n /**\n * Controls whether the icon is focusable via keyboard.\n * Defaults to `false`.\n */\n readonly focusable = input(false, { transform: booleanAttribute });\n\n /**\n * Resolved role: uses the explicit `role` input if provided,\n * otherwise defaults to `'img'` when a `title` is set.\n */\n readonly effectiveRole = computed<string | undefined>(() => {\n const explicit = this.role();\n if (explicit !== undefined) return explicit;\n return this.title() !== undefined ? 'img' : undefined;\n });\n\n /**\n * Resolved aria-hidden: uses the explicit `ariaHidden` input if provided,\n * otherwise hides the icon unless a `title` is set.\n */\n readonly effectiveAriaHidden = computed<boolean>(() => {\n const explicit = this.ariaHidden();\n if (explicit !== undefined) return explicit;\n return this.title() === undefined;\n });\n\n /**\n * Flips the icon horizontally if set to `true`.\n */\n readonly isFlipHorizontal = input(false, { transform: booleanAttribute });\n\n /**\n * Adds a dark background utility class if the color is set to `'inverted'`.\n */\n @HostBinding('class.ecl-u-bg-grey')\n get isColorInverted(): boolean {\n return this.color() === 'inverted';\n }\n\n readonly svgEl = viewChild<ElementRef>('svg');\n\n iconUrl = signal<string>('');\n baseDirective = inject(ECLBaseDirective);\n el = inject(ElementRef);\n private renderer = inject(Renderer2);\n private platformId = inject(PLATFORM_ID);\n\n /**\n * Extra classes added programmatically by parent components\n * (button, link, etc.)\n */\n readonly extraClasses = signal<string>('');\n\n /**\n * Real classes currently present on <ecl-icon>.\n * To support [class.foo] / [ngClass].\n */\n readonly hostClasses = signal<string>('');\n\n readonly svgClasses = computed<Record<string, boolean>>(() => {\n return {\n [this.baseDirective.getCssClasses('ecl-icon')]: true,\n [`ecl-icon--${this.size()}`]: !!this.size(),\n [`ecl-icon--${this.transform()}`]: !!this.transform(),\n [`ecl-icon--${this.color()}`]: !!this.color(),\n ...this.toClassRecord(this.hostClasses()),\n ...this.toClassRecord(this.extraClasses()),\n };\n });\n\n private classObserver?: MutationObserver;\n\n constructor() {\n afterNextRender(() => {\n this.detachHostAndPromoteSvg();\n this.syncHostClassesFromDom();\n this.observeHostClassChanges();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['icon']) {\n this.initiateIconUrl();\n }\n }\n\n ngOnInit(): void {\n this.initiateIconUrl();\n }\n\n ngOnDestroy(): void {\n this.classObserver?.disconnect();\n if (!isPlatformBrowser(this.platformId)) return;\n\n try {\n const svgNative = this.svgEl()?.nativeElement as SVGElement | null;\n const parent = svgNative?.parentElement;\n if (svgNative && parent) parent.removeChild(svgNative);\n } catch {\n /* ignore */\n }\n }\n\n addExtraClass(className: string): void {\n const classes = new Set([\n ...this.tokenize(this.extraClasses()),\n ...this.tokenize(className),\n ]);\n this.extraClasses.set(Array.from(classes).join(' '));\n }\n\n removeExtraClass(className: string): void {\n const classes = this.tokenize(this.extraClasses()).filter((c) => c !== className);\n this.extraClasses.set(classes.join(' '));\n }\n\n setExtraClasses(classes: string): void {\n this.extraClasses.set(classes ?? '');\n }\n\n private syncHostClassesFromDom(): void {\n const host = this.el.nativeElement;\n this.hostClasses.set(host.className || '');\n }\n\n private observeHostClassChanges(): void {\n const host = this.el.nativeElement;\n\n this.classObserver = new MutationObserver(() => {\n this.hostClasses.set(host.className || '');\n });\n\n this.classObserver.observe(host, {\n attributes: true,\n attributeFilter: ['class'],\n });\n }\n\n private toClassRecord(classes?: string | null): Record<string, boolean> {\n return Object.fromEntries(\n this.tokenize(classes).map(c => [c, true])\n );\n }\n\n private tokenize(classes: string | null | undefined): string[] {\n return (classes ?? '')\n .split(/\\s+/)\n .filter(Boolean);\n }\n\n private detachHostAndPromoteSvg(): void {\n const hostEl = this.el.nativeElement as HTMLElement | null;\n const svgNative = this.svgEl()?.nativeElement as SVGElement | null;\n if (!hostEl || !svgNative) return;\n\n const hostParentEl = hostEl.parentElement;\n if (!hostParentEl) return;\n\n // add the svg and remove the parent from the DOM\n this.renderer.setStyle(hostEl, 'visibility', 'hidden');\n hostEl.after(svgNative);\n this.renderer.removeChild(hostParentEl, hostEl);\n }\n\n private initiateIconUrl(): void {\n switch (this.iconSet()) {\n case 'default':\n this.iconUrl.set(`assets/images/ecl/icons/sprite.svg#${this.icon()}`);\n break;\n case 'social': // TODO: Remove this in the next version.\n this.iconUrl.set(`assets/images/ecl/networks/sprite.svg#${this.icon()}`);\n break;\n case 'social-media':\n this.iconUrl.set(`assets/images/ecl/networks/sprite.svg#${this.icon()}`);\n break;\n case 'social-media-color':\n this.iconUrl.set(`assets/images/ecl/networks-color/sprite.svg#${this.icon()}`);\n break;\n case 'flag':\n this.iconUrl.set(`assets/images/ecl/icons-flag/sprites/icons-flag.svg#${this.icon()}`);\n break;\n case 'flag-non-members':\n this.iconUrl.set(`assets/images/ecl/icons-flag/sprites/icons-flag-non-members.svg#${this.icon()}`);\n break;\n case 'phosphor':\n this.iconUrl.set(`assets/icons/sprites/regular.svg#${this.icon()}`);\n break;\n case 'phosphor-fill':\n this.iconUrl.set(`assets/icons/sprites/fill.svg#${this.icon()}`);\n break;\n default:\n this.iconUrl.set(`assets/images/ecl/icons/sprite.svg#${this.icon()}`);\n }\n }\n}\n",
|
|
57632
57418
|
"assetsDirs": [],
|
|
57633
57419
|
"styleUrlsData": "",
|
|
57634
57420
|
"stylesData": "",
|
|
@@ -59353,7 +59139,7 @@
|
|
|
59353
59139
|
},
|
|
59354
59140
|
{
|
|
59355
59141
|
"name": "EclListIllustrationComponent",
|
|
59356
|
-
"id": "component-EclListIllustrationComponent-
|
|
59142
|
+
"id": "component-EclListIllustrationComponent-c3cdb33b10eac59e3f68a266cbc679e9089906b04036d4d17eae7f4035452c2157898c19070374614e139055b8da2c0198cb8ada310189bb882fc4785abe0a4c",
|
|
59357
59143
|
"file": "packages/ecl/components/ecl-list-illustration/ecl-list-illustration.component.ts",
|
|
59358
59144
|
"encapsulation": [],
|
|
59359
59145
|
"entryComponents": [],
|
|
@@ -59381,7 +59167,7 @@
|
|
|
59381
59167
|
"indexKey": "",
|
|
59382
59168
|
"optional": false,
|
|
59383
59169
|
"description": "<p>If we have a number-list, the user can set the start of the counter.</p>\n",
|
|
59384
|
-
"line":
|
|
59170
|
+
"line": 54,
|
|
59385
59171
|
"rawdescription": "\nIf we have a number-list, the user can set the start of the counter.",
|
|
59386
59172
|
"required": false
|
|
59387
59173
|
},
|
|
@@ -59395,7 +59181,7 @@
|
|
|
59395
59181
|
"indexKey": "",
|
|
59396
59182
|
"optional": false,
|
|
59397
59183
|
"description": "<p>Font size for list content.\nPossible values:</p>\n<ul>\n<li><code>'m'</code> – medium</li>\n<li><code>'l'</code> – large (default)</li>\n</ul>\n",
|
|
59398
|
-
"line":
|
|
59184
|
+
"line": 39,
|
|
59399
59185
|
"rawdescription": "\n\nFont size for list content.\nPossible values:\n- `'m'` – medium\n- `'l'` – large (default)\n",
|
|
59400
59186
|
"modifierKind": [
|
|
59401
59187
|
148
|
|
@@ -59412,7 +59198,7 @@
|
|
|
59412
59198
|
"indexKey": "",
|
|
59413
59199
|
"optional": false,
|
|
59414
59200
|
"description": "<p>If this is an icon-list, it can have dividers between each item.</p>\n",
|
|
59415
|
-
"line":
|
|
59201
|
+
"line": 51,
|
|
59416
59202
|
"rawdescription": "\nIf this is an icon-list, it can have dividers between each item.",
|
|
59417
59203
|
"modifierKind": [
|
|
59418
59204
|
148
|
|
@@ -59429,7 +59215,7 @@
|
|
|
59429
59215
|
"indexKey": "",
|
|
59430
59216
|
"optional": false,
|
|
59431
59217
|
"description": "<p>Number of horizontal columns. If greater than <code>0</code>, items are displayed in a grid layout.</p>\n",
|
|
59432
|
-
"line":
|
|
59218
|
+
"line": 31,
|
|
59433
59219
|
"rawdescription": "\n\nNumber of horizontal columns. If greater than `0`, items are displayed in a grid layout.\n",
|
|
59434
59220
|
"required": false
|
|
59435
59221
|
},
|
|
@@ -59443,7 +59229,7 @@
|
|
|
59443
59229
|
"indexKey": "",
|
|
59444
59230
|
"optional": false,
|
|
59445
59231
|
"description": "<p>If content should be centered</p>\n",
|
|
59446
|
-
"line":
|
|
59232
|
+
"line": 42,
|
|
59447
59233
|
"rawdescription": "\nIf content should be centered",
|
|
59448
59234
|
"modifierKind": [
|
|
59449
59235
|
148
|
|
@@ -59460,7 +59246,7 @@
|
|
|
59460
59246
|
"indexKey": "",
|
|
59461
59247
|
"optional": false,
|
|
59462
59248
|
"description": "<p>If the icon should be on the same row as title - for list with icons</p>\n",
|
|
59463
|
-
"line":
|
|
59249
|
+
"line": 45,
|
|
59464
59250
|
"rawdescription": "\nIf the icon should be on the same row as title - for list with icons",
|
|
59465
59251
|
"modifierKind": [
|
|
59466
59252
|
148
|
|
@@ -59477,7 +59263,7 @@
|
|
|
59477
59263
|
"indexKey": "",
|
|
59478
59264
|
"optional": false,
|
|
59479
59265
|
"description": "<p>Enables zebra style (alternating background colors for list items).</p>\n",
|
|
59480
|
-
"line":
|
|
59266
|
+
"line": 26,
|
|
59481
59267
|
"rawdescription": "\n\nEnables zebra style (alternating background colors for list items).\n",
|
|
59482
59268
|
"modifierKind": [
|
|
59483
59269
|
148
|
|
@@ -59494,7 +59280,7 @@
|
|
|
59494
59280
|
"indexKey": "",
|
|
59495
59281
|
"optional": false,
|
|
59496
59282
|
"description": "<p>Two variants available: icon-list and number-list.</p>\n",
|
|
59497
|
-
"line":
|
|
59283
|
+
"line": 48,
|
|
59498
59284
|
"rawdescription": "\nTwo variants available: icon-list and number-list.",
|
|
59499
59285
|
"modifierKind": [
|
|
59500
59286
|
148
|
|
@@ -59557,17 +59343,8 @@
|
|
|
59557
59343
|
"indexKey": "",
|
|
59558
59344
|
"optional": false,
|
|
59559
59345
|
"description": "",
|
|
59560
|
-
"line":
|
|
59561
|
-
"rawdescription": "\n"
|
|
59562
|
-
"decorators": [
|
|
59563
|
-
{
|
|
59564
|
-
"name": "HostBinding",
|
|
59565
|
-
"stringifiedArguments": "'style.--ecl-list-illustration-counter-start'"
|
|
59566
|
-
}
|
|
59567
|
-
],
|
|
59568
|
-
"modifierKind": [
|
|
59569
|
-
171
|
|
59570
|
-
]
|
|
59346
|
+
"line": 88,
|
|
59347
|
+
"rawdescription": "\n"
|
|
59571
59348
|
},
|
|
59572
59349
|
{
|
|
59573
59350
|
"name": "eclIllustrationItems",
|
|
@@ -59579,7 +59356,7 @@
|
|
|
59579
59356
|
"indexKey": "",
|
|
59580
59357
|
"optional": false,
|
|
59581
59358
|
"description": "",
|
|
59582
|
-
"line":
|
|
59359
|
+
"line": 56,
|
|
59583
59360
|
"rawdescription": "\n",
|
|
59584
59361
|
"modifierKind": [
|
|
59585
59362
|
148
|
|
@@ -59595,7 +59372,7 @@
|
|
|
59595
59372
|
"indexKey": "",
|
|
59596
59373
|
"optional": false,
|
|
59597
59374
|
"description": "<p>Controls <code>display</code> style of the host element based on breakpoint and column count.</p>\n",
|
|
59598
|
-
"line":
|
|
59375
|
+
"line": 84,
|
|
59599
59376
|
"rawdescription": "\n\nControls `display` style of the host element based on breakpoint and column count.\n"
|
|
59600
59377
|
},
|
|
59601
59378
|
{
|
|
@@ -59608,17 +59385,8 @@
|
|
|
59608
59385
|
"indexKey": "",
|
|
59609
59386
|
"optional": false,
|
|
59610
59387
|
"description": "<p>Applies ARIA role for list elements.</p>\n",
|
|
59611
|
-
"line":
|
|
59612
|
-
"rawdescription": "\n\nApplies ARIA role for list elements.\n"
|
|
59613
|
-
"decorators": [
|
|
59614
|
-
{
|
|
59615
|
-
"name": "HostBinding",
|
|
59616
|
-
"stringifiedArguments": "'attr.role'"
|
|
59617
|
-
}
|
|
59618
|
-
],
|
|
59619
|
-
"modifierKind": [
|
|
59620
|
-
171
|
|
59621
|
-
]
|
|
59388
|
+
"line": 61,
|
|
59389
|
+
"rawdescription": "\n\nApplies ARIA role for list elements.\n"
|
|
59622
59390
|
},
|
|
59623
59391
|
{
|
|
59624
59392
|
"name": "startAttr",
|
|
@@ -59630,17 +59398,8 @@
|
|
|
59630
59398
|
"indexKey": "",
|
|
59631
59399
|
"optional": false,
|
|
59632
59400
|
"description": "",
|
|
59633
|
-
"line":
|
|
59634
|
-
"rawdescription": "\n"
|
|
59635
|
-
"decorators": [
|
|
59636
|
-
{
|
|
59637
|
-
"name": "HostBinding",
|
|
59638
|
-
"stringifiedArguments": "'attr.start'"
|
|
59639
|
-
}
|
|
59640
|
-
],
|
|
59641
|
-
"modifierKind": [
|
|
59642
|
-
171
|
|
59643
|
-
]
|
|
59401
|
+
"line": 90,
|
|
59402
|
+
"rawdescription": "\n"
|
|
59644
59403
|
}
|
|
59645
59404
|
],
|
|
59646
59405
|
"methodsClass": [
|
|
@@ -59651,7 +59410,7 @@
|
|
|
59651
59410
|
"optional": false,
|
|
59652
59411
|
"returnType": "void",
|
|
59653
59412
|
"typeParameters": [],
|
|
59654
|
-
"line":
|
|
59413
|
+
"line": 109,
|
|
59655
59414
|
"deprecated": false,
|
|
59656
59415
|
"deprecationMessage": "",
|
|
59657
59416
|
"rawdescription": "\n",
|
|
@@ -59699,73 +59458,21 @@
|
|
|
59699
59458
|
"coverageIgnore": false,
|
|
59700
59459
|
"deprecated": false,
|
|
59701
59460
|
"deprecationMessage": "",
|
|
59702
|
-
"hostBindings": [
|
|
59703
|
-
{
|
|
59704
|
-
"coverageIgnore": false,
|
|
59705
|
-
"name": "attr.role",
|
|
59706
|
-
"actualName": "role",
|
|
59707
|
-
"defaultValue": "'list'",
|
|
59708
|
-
"deprecated": false,
|
|
59709
|
-
"deprecationMessage": "",
|
|
59710
|
-
"rawdescription": "\n\nApplies ARIA role for list elements.\n",
|
|
59711
|
-
"description": "<p>Applies ARIA role for list elements.</p>\n",
|
|
59712
|
-
"line": 57,
|
|
59713
|
-
"type": "string",
|
|
59714
|
-
"decorators": []
|
|
59715
|
-
},
|
|
59716
|
-
{
|
|
59717
|
-
"coverageIgnore": false,
|
|
59718
|
-
"name": "attr.start",
|
|
59719
|
-
"actualName": "startAttr",
|
|
59720
|
-
"defaultValue": "null",
|
|
59721
|
-
"deprecated": false,
|
|
59722
|
-
"deprecationMessage": "",
|
|
59723
|
-
"rawdescription": "\n",
|
|
59724
|
-
"description": "",
|
|
59725
|
-
"line": 89,
|
|
59726
|
-
"type": "string | null",
|
|
59727
|
-
"decorators": []
|
|
59728
|
-
},
|
|
59729
|
-
{
|
|
59730
|
-
"coverageIgnore": false,
|
|
59731
|
-
"name": "class",
|
|
59732
|
-
"actualName": "cssClasses",
|
|
59733
|
-
"deprecated": false,
|
|
59734
|
-
"deprecationMessage": "",
|
|
59735
|
-
"rawdescription": "\n\nApplies the appropriate ECL CSS classes to the host element.\n",
|
|
59736
|
-
"description": "<p>Applies the appropriate ECL CSS classes to the host element.</p>\n",
|
|
59737
|
-
"line": 63,
|
|
59738
|
-
"type": "string",
|
|
59739
|
-
"decorators": []
|
|
59740
|
-
},
|
|
59741
|
-
{
|
|
59742
|
-
"coverageIgnore": false,
|
|
59743
|
-
"name": "style.--ecl-list-illustration-counter-start",
|
|
59744
|
-
"actualName": "counterStartStyle",
|
|
59745
|
-
"defaultValue": "''",
|
|
59746
|
-
"deprecated": false,
|
|
59747
|
-
"deprecationMessage": "",
|
|
59748
|
-
"rawdescription": "\n",
|
|
59749
|
-
"description": "",
|
|
59750
|
-
"line": 86,
|
|
59751
|
-
"type": "string",
|
|
59752
|
-
"decorators": []
|
|
59753
|
-
}
|
|
59754
|
-
],
|
|
59461
|
+
"hostBindings": [],
|
|
59755
59462
|
"hostListeners": [],
|
|
59756
59463
|
"standalone": false,
|
|
59757
59464
|
"imports": [],
|
|
59758
59465
|
"description": "<p>Component representing a list using ECL illustration styles.</p>\n<p>Supports zebra styling, responsive horizontal layout, and font size options.</p>\n",
|
|
59759
59466
|
"rawdescription": "\n\nComponent representing a list using ECL illustration styles.\n\nSupports zebra styling, responsive horizontal layout, and font size options.\n",
|
|
59760
59467
|
"type": "component",
|
|
59761
|
-
"sourceCode": "import { Component,
|
|
59468
|
+
"sourceCode": "import { Component, booleanAttribute, numberAttribute, afterNextRender, inject, forwardRef, AfterContentInit, Signal, computed, input, effect, signal, contentChildren } from '@angular/core';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclListIllustrationItemComponent } from './ecl-list-illustration-item.component';\n\n/**\n * Component representing a list using ECL illustration styles.\n *\n * Supports zebra styling, responsive horizontal layout, and font size options.\n */\n@Component({\n selector: 'ecl-list-illustration, ul[eclListIllustration], ol[eclListIllustration]',\n templateUrl: './ecl-list-illustration.component.html',\n host: {\n '[attr.role]': 'role',\n '[class]': 'cssClasses',\n '[style.display]': 'elementDisplayStyle()',\n '[style.--ecl-list-illustration-counter-start]': 'counterStartStyle',\n '[attr.start]': 'startAttr',\n },\n})\nexport class EclListIllustrationComponent extends ECLBaseDirective implements AfterContentInit {\n /**\n * Enables zebra style (alternating background colors for list items).\n */\n readonly isZebra = input(false, { transform: booleanAttribute });\n\n /**\n * Number of horizontal columns. If greater than `0`, items are displayed in a grid layout.\n */\n horizontalColumns = input(0, { transform: numberAttribute });\n\n /**\n * Font size for list content.\n * Possible values:\n * - `'m'` – medium\n * - `'l'` – large (default)\n */\n readonly fontSize = input<'m' | 'l'>('l');\n\n /** If content should be centered */\n readonly isCentered = input(false, { transform: booleanAttribute });\n\n /** If the icon should be on the same row as title - for list with icons */\n readonly isIconInline = input(false, { transform: booleanAttribute });\n\n /** Two variants available: icon-list and number-list. */\n readonly variant = input<'icon-list' | 'number-list' | null>(null);\n\n /** If this is an icon-list, it can have dividers between each item. */\n readonly hasDividers = input(false, { transform: booleanAttribute });\n\n /** If we have a number-list, the user can set the start of the counter. */\n counterStart = input<number | null, unknown>(null, { transform: numberAttribute });\n\n readonly eclIllustrationItems = contentChildren(forwardRef(() => EclListIllustrationItemComponent));\n\n /**\n * Applies ARIA role for list elements.\n */\n role = 'list';\n\n /**\n * Applies the appropriate ECL CSS classes to the host element.\n */\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-list-illustration'),\n this.isZebra() ? 'ecl-list-illustration--zebra' : '',\n this.horizontalColumns() > 0 ? `ecl-list-illustration--col-${this.horizontalColumns()}` : '',\n this.fontSize() === 'm' ? 'ecl-list-illustration--font-m' : '',\n this.isCentered() ? 'ecl-list-illustration--centered' : '',\n this.isIconInline() ? 'ecl-list-illustration--icon-inline' : '',\n this.variant() === 'icon-list' ? 'ecl-list-illustration--icon-list' : '',\n this.variant() === 'number-list' ? 'ecl-list-illustration--number-list ecl-list-illustration--number-list-reset': '',\n ]\n .join(' ')\n .trim();\n }\n\n /**\n * Controls `display` style of the host element based on breakpoint and column count.\n */\n elementDisplayStyle = computed(() =>\n this.horizontalColumns() > 0 && this.isTabletBreakpoint() ? null : 'block'\n );\n\n counterStartStyle = '';\n\n startAttr: string | null = null;\n\n private isTabletBreakpoint = signal(false);\n private cdkBreakpointObserver = inject(BreakpointObserver);\n\n constructor() {\n super();\n afterNextRender(() => {\n this.observeBreakpointChanges();\n });\n effect(() => {\n const value = this.counterStart();\n const stringValue = value != null ? `${value}` : null;\n\n this.startAttr = stringValue;\n this.counterStartStyle = stringValue ?? '';\n });\n }\n\n ngAfterContentInit(): void {\n if (this.horizontalColumns() === 0) {\n this.eclIllustrationItems()?.forEach(item => {\n if (item.hasPicture()) item.isVerticalPicture.set(true);\n });\n }\n\n if (this.variant() === 'icon-list' && this.hasDividers()) {\n this.eclIllustrationItems()?.forEach(item => {\n item.hasDivider.set(true);\n });\n }\n }\n\n private observeBreakpointChanges(): void {\n this.cdkBreakpointObserver\n .observe(['(min-width: 768px)'])\n .subscribe((result) => {\n this.isTabletBreakpoint.set(result.matches);\n });\n }\n}\n",
|
|
59762
59469
|
"assetsDirs": [],
|
|
59763
59470
|
"styleUrlsData": "",
|
|
59764
59471
|
"stylesData": "",
|
|
59765
59472
|
"jsdoctags": [
|
|
59766
59473
|
{
|
|
59767
|
-
"pos":
|
|
59768
|
-
"end":
|
|
59474
|
+
"pos": 391,
|
|
59475
|
+
"end": 545,
|
|
59769
59476
|
"kind": 321,
|
|
59770
59477
|
"id": 0,
|
|
59771
59478
|
"flags": 16777216,
|
|
@@ -59780,7 +59487,7 @@
|
|
|
59780
59487
|
"deprecated": false,
|
|
59781
59488
|
"deprecationMessage": "",
|
|
59782
59489
|
"args": [],
|
|
59783
|
-
"line":
|
|
59490
|
+
"line": 93,
|
|
59784
59491
|
"rawdescription": "\n"
|
|
59785
59492
|
},
|
|
59786
59493
|
"extends": [
|
|
@@ -59796,7 +59503,7 @@
|
|
|
59796
59503
|
"name": "cssClasses",
|
|
59797
59504
|
"type": "string",
|
|
59798
59505
|
"returnType": "string",
|
|
59799
|
-
"line":
|
|
59506
|
+
"line": 66,
|
|
59800
59507
|
"rawdescription": "\n\nApplies the appropriate ECL CSS classes to the host element.\n",
|
|
59801
59508
|
"description": "<p>Applies the appropriate ECL CSS classes to the host element.</p>\n"
|
|
59802
59509
|
}
|
|
@@ -59819,7 +59526,7 @@
|
|
|
59819
59526
|
},
|
|
59820
59527
|
{
|
|
59821
59528
|
"name": "EclListIllustrationItemComponent",
|
|
59822
|
-
"id": "component-EclListIllustrationItemComponent-
|
|
59529
|
+
"id": "component-EclListIllustrationItemComponent-807c9c0580d188894e7435acbfefc9149bb388d5e9ca5f379ea45cf3bef84a8ed1116cd038fd61496342f5cf92839b3270bed54a057bd289dc9cfd716619fbef",
|
|
59823
59530
|
"file": "packages/ecl/components/ecl-list-illustration/ecl-list-illustration-item.component.ts",
|
|
59824
59531
|
"encapsulation": [],
|
|
59825
59532
|
"entryComponents": [],
|
|
@@ -59996,6 +59703,38 @@
|
|
|
59996
59703
|
"line": 55,
|
|
59997
59704
|
"rawdescription": "\n"
|
|
59998
59705
|
},
|
|
59706
|
+
{
|
|
59707
|
+
"name": "hasTitle",
|
|
59708
|
+
"coverageIgnore": false,
|
|
59709
|
+
"defaultValue": "computed(() => Boolean(this.eclTitle()) || this.eclIllustrationIcon() !== undefined)",
|
|
59710
|
+
"deprecated": false,
|
|
59711
|
+
"deprecationMessage": "",
|
|
59712
|
+
"type": "unknown",
|
|
59713
|
+
"indexKey": "",
|
|
59714
|
+
"optional": false,
|
|
59715
|
+
"description": "<p>Returns <code>true</code> if the item has a title or any projected icons.</p>\n",
|
|
59716
|
+
"line": 60,
|
|
59717
|
+
"rawdescription": "\n\nReturns `true` if the item has a title or any projected icons.\n",
|
|
59718
|
+
"modifierKind": [
|
|
59719
|
+
148
|
|
59720
|
+
]
|
|
59721
|
+
},
|
|
59722
|
+
{
|
|
59723
|
+
"name": "hasValue",
|
|
59724
|
+
"coverageIgnore": false,
|
|
59725
|
+
"defaultValue": "computed(() => Boolean(this.eclValue()))",
|
|
59726
|
+
"deprecated": false,
|
|
59727
|
+
"deprecationMessage": "",
|
|
59728
|
+
"type": "unknown",
|
|
59729
|
+
"indexKey": "",
|
|
59730
|
+
"optional": false,
|
|
59731
|
+
"description": "<p>Returns <code>true</code> if the item has a value.</p>\n",
|
|
59732
|
+
"line": 65,
|
|
59733
|
+
"rawdescription": "\n\nReturns `true` if the item has a value.\n",
|
|
59734
|
+
"modifierKind": [
|
|
59735
|
+
148
|
|
59736
|
+
]
|
|
59737
|
+
},
|
|
59999
59738
|
{
|
|
60000
59739
|
"name": "isVerticalPicture",
|
|
60001
59740
|
"coverageIgnore": false,
|
|
@@ -60109,7 +59848,7 @@
|
|
|
60109
59848
|
"description": "<p>Component representing a single item in an ECL illustration list.</p>\n<p>Displays optional title, value, and one or more illustration icons.</p>\n",
|
|
60110
59849
|
"rawdescription": "\n\nComponent representing a single item in an ECL illustration list.\n\nDisplays optional title, value, and one or more illustration icons.\n",
|
|
60111
59850
|
"type": "component",
|
|
60112
|
-
"sourceCode": "import {\n Component,\n computed,\n forwardRef,\n HostBinding,\n Signal,\n signal,\n input,\n contentChild,\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclListIllustrationIconDirective } from './ecl-list-illustration-icon.directive';\nimport { EclListIllustrationPictureDirective } from './ecl-list-illustration-picture.directive';\n\n/**\n * Component representing a single item in an ECL illustration list.\n *\n * Displays optional title, value, and one or more illustration icons.\n */\n@Component({\n selector: 'ecl-list-illustration-item, li[eclListIllustrationItem]',\n templateUrl: './ecl-list-illustration-item.component.html',\n})\nexport class EclListIllustrationItemComponent extends ECLBaseDirective {\n /**\n * Text displayed as the item title.\n */\n readonly eclTitle = input('');\n\n /**\n * Text displayed as the item value.\n */\n readonly eclValue = input('');\n\n /**\n * Applies ARIA role for list items.\n */\n @HostBinding('attr.role') role = 'listitem';\n\n /**\n * Applies ECL class for illustration list item.\n */\n @HostBinding('class.ecl-list-illustration__item') className = true;\n\n readonly eclIllustrationIcon = contentChild(forwardRef(() => EclListIllustrationIconDirective));\n\n readonly eclIllustrationPicture = contentChild(forwardRef(() => EclListIllustrationPictureDirective));\n\n /** A special class needs to be added, for vertical lists with picture. */\n isVerticalPicture = signal(false);\n\n /** A special class needs to be added, if an icon list has dividers between items. */\n hasDivider = signal(false);\n\n hasPicture: Signal<boolean> = computed(() => this.eclIllustrationPicture() !== undefined);\n\n /**\n * Returns `true` if the item has a title or any projected icons.\n */\n
|
|
59851
|
+
"sourceCode": "import {\n Component,\n computed,\n forwardRef,\n HostBinding,\n Signal,\n signal,\n input,\n contentChild,\n} from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclListIllustrationIconDirective } from './ecl-list-illustration-icon.directive';\nimport { EclListIllustrationPictureDirective } from './ecl-list-illustration-picture.directive';\n\n/**\n * Component representing a single item in an ECL illustration list.\n *\n * Displays optional title, value, and one or more illustration icons.\n */\n@Component({\n selector: 'ecl-list-illustration-item, li[eclListIllustrationItem]',\n templateUrl: './ecl-list-illustration-item.component.html',\n})\nexport class EclListIllustrationItemComponent extends ECLBaseDirective {\n /**\n * Text displayed as the item title.\n */\n readonly eclTitle = input('');\n\n /**\n * Text displayed as the item value.\n */\n readonly eclValue = input('');\n\n /**\n * Applies ARIA role for list items.\n */\n @HostBinding('attr.role') role = 'listitem';\n\n /**\n * Applies ECL class for illustration list item.\n */\n @HostBinding('class.ecl-list-illustration__item') className = true;\n\n readonly eclIllustrationIcon = contentChild(forwardRef(() => EclListIllustrationIconDirective));\n\n readonly eclIllustrationPicture = contentChild(forwardRef(() => EclListIllustrationPictureDirective));\n\n /** A special class needs to be added, for vertical lists with picture. */\n isVerticalPicture = signal(false);\n\n /** A special class needs to be added, if an icon list has dividers between items. */\n hasDivider = signal(false);\n\n hasPicture: Signal<boolean> = computed(() => this.eclIllustrationPicture() !== undefined);\n\n /**\n * Returns `true` if the item has a title or any projected icons.\n */\n readonly hasTitle = computed(() => Boolean(this.eclTitle()) || this.eclIllustrationIcon() !== undefined);\n\n /**\n * Returns `true` if the item has a value.\n */\n readonly hasValue = computed(() => Boolean(this.eclValue()));\n}\n",
|
|
60113
59852
|
"assetsDirs": [],
|
|
60114
59853
|
"styleUrlsData": "",
|
|
60115
59854
|
"stylesData": "",
|
|
@@ -60128,30 +59867,6 @@
|
|
|
60128
59867
|
"extends": [
|
|
60129
59868
|
"ECLBaseDirective"
|
|
60130
59869
|
],
|
|
60131
|
-
"accessors": {
|
|
60132
|
-
"hasTitle": {
|
|
60133
|
-
"name": "hasTitle",
|
|
60134
|
-
"getSignature": {
|
|
60135
|
-
"name": "hasTitle",
|
|
60136
|
-
"type": "boolean",
|
|
60137
|
-
"returnType": "boolean",
|
|
60138
|
-
"line": 60,
|
|
60139
|
-
"rawdescription": "\n\nReturns `true` if the item has a title or any projected icons.\n",
|
|
60140
|
-
"description": "<p>Returns <code>true</code> if the item has a title or any projected icons.</p>\n"
|
|
60141
|
-
}
|
|
60142
|
-
},
|
|
60143
|
-
"hasValue": {
|
|
60144
|
-
"name": "hasValue",
|
|
60145
|
-
"getSignature": {
|
|
60146
|
-
"name": "hasValue",
|
|
60147
|
-
"type": "boolean",
|
|
60148
|
-
"returnType": "boolean",
|
|
60149
|
-
"line": 67,
|
|
60150
|
-
"rawdescription": "\n\nReturns `true` if the item has a value.\n",
|
|
60151
|
-
"description": "<p>Returns <code>true</code> if the item has a value.</p>\n"
|
|
60152
|
-
}
|
|
60153
|
-
}
|
|
60154
|
-
},
|
|
60155
59870
|
"relationships": {
|
|
60156
59871
|
"incoming": [],
|
|
60157
59872
|
"outgoing": [
|
|
@@ -60161,14 +59876,15 @@
|
|
|
60161
59876
|
}
|
|
60162
59877
|
]
|
|
60163
59878
|
},
|
|
60164
|
-
"templateData": "<div class=\"ecl-list-illustration__item-content\" [class.ecl-list-illustration__item-content--row]=\"isVerticalPicture()\"\n [class.ecl-list-illustration__divider]=\"hasDivider()\">\n <ng-content select=\"[eclListIllustrationImage],[eclListIllustrationPicture],[eclListIllustrationIcon]\"></ng-content>\n <div class=\"ecl-list-illustration__detail\">\n @if (hasTitle || hasValue) {\n <div class=\"ecl-list-illustration__title-container\">\n @if (hasValue) {\n <div class=\"ecl-list-illustration__value\">{{ eclValue() }}</div>\n }\n <div class=\"ecl-list-illustration__title\">{{ eclTitle() }}</div>\n </div>\n }\n\n <div class=\"ecl-list-illustration__description\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>"
|
|
59879
|
+
"templateData": "<div class=\"ecl-list-illustration__item-content\" [class.ecl-list-illustration__item-content--row]=\"isVerticalPicture()\"\n [class.ecl-list-illustration__divider]=\"hasDivider()\">\n <ng-content select=\"[eclListIllustrationImage],[eclListIllustrationPicture],[eclListIllustrationIcon]\"></ng-content>\n <div class=\"ecl-list-illustration__detail\">\n @if (hasTitle() || hasValue()) {\n <div class=\"ecl-list-illustration__title-container\">\n @if (hasValue()) {\n <div class=\"ecl-list-illustration__value\">{{ eclValue() }}</div>\n }\n <div class=\"ecl-list-illustration__title\">{{ eclTitle() }}</div>\n </div>\n }\n\n <div class=\"ecl-list-illustration__description\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>"
|
|
60165
59880
|
},
|
|
60166
59881
|
{
|
|
60167
59882
|
"name": "EclLoadingIndicatorComponent",
|
|
60168
|
-
"id": "component-EclLoadingIndicatorComponent-
|
|
59883
|
+
"id": "component-EclLoadingIndicatorComponent-640a69de4dccdc5ef0f3b544347bea9576bd0d653521a704d0004e2e7a176d60fd64c871de05b39225df1d8576fa39ee2618d4f19276249bc627bb557246836c",
|
|
60169
59884
|
"file": "packages/ecl/components/ecl-loading-indicator/ecl-loading-indicator.component.ts",
|
|
60170
59885
|
"encapsulation": [],
|
|
60171
59886
|
"entryComponents": [],
|
|
59887
|
+
"host": {},
|
|
60172
59888
|
"inputs": [],
|
|
60173
59889
|
"outputs": [],
|
|
60174
59890
|
"providers": [],
|
|
@@ -60192,7 +59908,7 @@
|
|
|
60192
59908
|
"indexKey": "",
|
|
60193
59909
|
"optional": false,
|
|
60194
59910
|
"description": "<p>Controls whether the spinner should be centered.</p>\n<p>Defaults to <code>true</code>.</p>\n",
|
|
60195
|
-
"line":
|
|
59911
|
+
"line": 42,
|
|
60196
59912
|
"rawdescription": "\n\nControls whether the spinner should be centered.\n\nDefaults to `true`.\n",
|
|
60197
59913
|
"modifierKind": [
|
|
60198
59914
|
148
|
|
@@ -60209,7 +59925,7 @@
|
|
|
60209
59925
|
"indexKey": "",
|
|
60210
59926
|
"optional": false,
|
|
60211
59927
|
"description": "<p>Controls visibility of the spinner.</p>\n<p>When set to <code>false</code>, the spinner will be hidden via CSS.</p>\n<p>Defaults to <code>true</code>.</p>\n",
|
|
60212
|
-
"line":
|
|
59928
|
+
"line": 51,
|
|
60213
59929
|
"rawdescription": "\n\nControls visibility of the spinner.\n\nWhen set to `false`, the spinner will be hidden via CSS.\n\nDefaults to `true`.\n",
|
|
60214
59930
|
"modifierKind": [
|
|
60215
59931
|
148
|
|
@@ -60226,7 +59942,7 @@
|
|
|
60226
59942
|
"indexKey": "",
|
|
60227
59943
|
"optional": false,
|
|
60228
59944
|
"description": "<p>Size of the spinner.</p>\n<p>Possible values:</p>\n<ul>\n<li><code>'s'</code> – small</li>\n<li><code>'m'</code> – medium (default)</li>\n<li><code>'l'</code> – large</li>\n</ul>\n",
|
|
60229
|
-
"line":
|
|
59945
|
+
"line": 26,
|
|
60230
59946
|
"rawdescription": "\n\nSize of the spinner.\n\nPossible values:\n- `'s'` – small\n- `'m'` – medium (default)\n- `'l'` – large\n",
|
|
60231
59947
|
"modifierKind": [
|
|
60232
59948
|
148
|
|
@@ -60243,7 +59959,7 @@
|
|
|
60243
59959
|
"indexKey": "",
|
|
60244
59960
|
"optional": false,
|
|
60245
59961
|
"description": "<p>Variant of the spinner color.</p>\n<p>Possible values:</p>\n<ul>\n<li><code>'primary'</code> – default appearance</li>\n<li><code>'inverted'</code> – used on dark backgrounds</li>\n</ul>\n",
|
|
60246
|
-
"line":
|
|
59962
|
+
"line": 35,
|
|
60247
59963
|
"rawdescription": "\n\nVariant of the spinner color.\n\nPossible values:\n- `'primary'` – default appearance\n- `'inverted'` – used on dark backgrounds\n",
|
|
60248
59964
|
"modifierKind": [
|
|
60249
59965
|
148
|
|
@@ -60306,17 +60022,8 @@
|
|
|
60306
60022
|
"indexKey": "",
|
|
60307
60023
|
"optional": false,
|
|
60308
60024
|
"description": "<p>Applies ARIA role for accessibility.</p>\n",
|
|
60309
|
-
"line":
|
|
60310
|
-
"rawdescription": "\n\nApplies ARIA role for accessibility.\n"
|
|
60311
|
-
"decorators": [
|
|
60312
|
-
{
|
|
60313
|
-
"name": "HostBinding",
|
|
60314
|
-
"stringifiedArguments": "'attr.role'"
|
|
60315
|
-
}
|
|
60316
|
-
],
|
|
60317
|
-
"modifierKind": [
|
|
60318
|
-
171
|
|
60319
|
-
]
|
|
60025
|
+
"line": 56,
|
|
60026
|
+
"rawdescription": "\n\nApplies ARIA role for accessibility.\n"
|
|
60320
60027
|
}
|
|
60321
60028
|
],
|
|
60322
60029
|
"methodsClass": [
|
|
@@ -60362,47 +60069,21 @@
|
|
|
60362
60069
|
"coverageIgnore": false,
|
|
60363
60070
|
"deprecated": false,
|
|
60364
60071
|
"deprecationMessage": "",
|
|
60365
|
-
"hostBindings": [
|
|
60366
|
-
{
|
|
60367
|
-
"coverageIgnore": false,
|
|
60368
|
-
"name": "attr.role",
|
|
60369
|
-
"actualName": "role",
|
|
60370
|
-
"defaultValue": "'alert'",
|
|
60371
|
-
"deprecated": false,
|
|
60372
|
-
"deprecationMessage": "",
|
|
60373
|
-
"rawdescription": "\n\nApplies ARIA role for accessibility.\n",
|
|
60374
|
-
"description": "<p>Applies ARIA role for accessibility.</p>\n",
|
|
60375
|
-
"line": 52,
|
|
60376
|
-
"type": "string",
|
|
60377
|
-
"decorators": []
|
|
60378
|
-
},
|
|
60379
|
-
{
|
|
60380
|
-
"coverageIgnore": false,
|
|
60381
|
-
"name": "class",
|
|
60382
|
-
"actualName": "cssClasses",
|
|
60383
|
-
"deprecated": false,
|
|
60384
|
-
"deprecationMessage": "",
|
|
60385
|
-
"rawdescription": "\n\nApplies CSS classes based on size, variant and visibility settings.\n",
|
|
60386
|
-
"description": "<p>Applies CSS classes based on size, variant and visibility settings.</p>\n",
|
|
60387
|
-
"line": 58,
|
|
60388
|
-
"type": "string",
|
|
60389
|
-
"decorators": []
|
|
60390
|
-
}
|
|
60391
|
-
],
|
|
60072
|
+
"hostBindings": [],
|
|
60392
60073
|
"hostListeners": [],
|
|
60393
60074
|
"standalone": false,
|
|
60394
60075
|
"imports": [],
|
|
60395
60076
|
"description": "<p>Component representing a loading indicator (spinner) using ECL styles.</p>\n<p>Supports different sizes, color variants, centering and visibility options.</p>\n",
|
|
60396
60077
|
"rawdescription": "\n\nComponent representing a loading indicator (spinner) using ECL styles.\n\nSupports different sizes, color variants, centering and visibility options.\n",
|
|
60397
60078
|
"type": "component",
|
|
60398
|
-
"sourceCode": "import { Component,
|
|
60079
|
+
"sourceCode": "import { Component, booleanAttribute, input } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Component representing a loading indicator (spinner) using ECL styles.\n *\n * Supports different sizes, color variants, centering and visibility options.\n */\n@Component({\n selector: 'ecl-loading-indicator',\n templateUrl: './ecl-loading-indicator.component.html',\n host: {\n '[attr.role]': 'role',\n '[class]': 'cssClasses',\n },\n})\nexport class EclLoadingIndicatorComponent extends ECLBaseDirective {\n /**\n * Size of the spinner.\n *\n * Possible values:\n * - `'s'` – small\n * - `'m'` – medium (default)\n * - `'l'` – large\n */\n readonly size = input<'s' | 'm' | 'l'>('m');\n\n /**\n * Variant of the spinner color.\n *\n * Possible values:\n * - `'primary'` – default appearance\n * - `'inverted'` – used on dark backgrounds\n */\n readonly variant = input<'primary' | 'inverted'>('primary');\n\n /**\n * Controls whether the spinner should be centered.\n *\n * Defaults to `true`.\n */\n readonly isCentered = input(true, { transform: booleanAttribute });\n\n /**\n * Controls visibility of the spinner.\n *\n * When set to `false`, the spinner will be hidden via CSS.\n *\n * Defaults to `true`.\n */\n readonly isVisible = input(true, { transform: booleanAttribute });\n\n /**\n * Applies ARIA role for accessibility.\n */\n role = 'alert';\n\n /**\n * Applies CSS classes based on size, variant and visibility settings.\n */\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-spinner'),\n `ecl-spinner--${this.size()}`,\n `ecl-spinner--${this.variant()}`,\n this.isCentered() ? 'ecl-spinner--centered' : '',\n this.isVisible() ? 'ecl-spinner--visible' : '',\n ]\n .join(' ')\n .trim();\n }\n}\n",
|
|
60399
60080
|
"assetsDirs": [],
|
|
60400
60081
|
"styleUrlsData": "",
|
|
60401
60082
|
"stylesData": "",
|
|
60402
60083
|
"jsdoctags": [
|
|
60403
60084
|
{
|
|
60404
|
-
"pos":
|
|
60405
|
-
"end":
|
|
60085
|
+
"pos": 119,
|
|
60086
|
+
"end": 282,
|
|
60406
60087
|
"kind": 321,
|
|
60407
60088
|
"id": 0,
|
|
60408
60089
|
"flags": 16777216,
|
|
@@ -60421,7 +60102,7 @@
|
|
|
60421
60102
|
"name": "cssClasses",
|
|
60422
60103
|
"type": "string",
|
|
60423
60104
|
"returnType": "string",
|
|
60424
|
-
"line":
|
|
60105
|
+
"line": 61,
|
|
60425
60106
|
"rawdescription": "\n\nApplies CSS classes based on size, variant and visibility settings.\n",
|
|
60426
60107
|
"description": "<p>Applies CSS classes based on size, variant and visibility settings.</p>\n"
|
|
60427
60108
|
}
|
|
@@ -64716,7 +64397,7 @@
|
|
|
64716
64397
|
},
|
|
64717
64398
|
{
|
|
64718
64399
|
"name": "EclMenuItemComponent",
|
|
64719
|
-
"id": "component-EclMenuItemComponent-
|
|
64400
|
+
"id": "component-EclMenuItemComponent-2e828b9fa40b69437b34ee8534c8041d5f0329c62e7f0de43e9f6bb1b0fc888748f0edb953a4cbcde823fcc0192e5393d366ce1c2ad78727e2b78670410f86bc",
|
|
64720
64401
|
"file": "packages/ecl/components/ecl-menu/ecl-menu/ecl-menu-item.component.ts",
|
|
64721
64402
|
"encapsulation": [
|
|
64722
64403
|
"ViewEncapsulation.None"
|
|
@@ -65654,7 +65335,7 @@
|
|
|
65654
65335
|
"description": "<p>This component represents a root menu item. Adds styling and functionality to menu item.</p>\n",
|
|
65655
65336
|
"rawdescription": "\n\nThis component represents a root menu item. Adds styling and functionality to menu item.\n",
|
|
65656
65337
|
"type": "component",
|
|
65657
|
-
"sourceCode": "import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n afterNextRender,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewEncapsulation,\n DOCUMENT,\n input,\n contentChild,\n viewChild,\n booleanAttribute,\n} from '@angular/core';\nimport { Params, QueryParamsHandling, RouterLink, RouterLinkWithHref } from '@angular/router';\nimport { EuiAppShellService } from '@eui/core';\nimport { EclButtonComponent, EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { EUI_ECL_LINK } from '@eui/ecl/components/ecl-link';\nimport { ECLBaseDirective, KeyCode } from '@eui/ecl/core';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, map, takeUntil } from 'rxjs/operators';\nimport { EclMenuMegaComponent } from '../ecl-menu-mega';\nimport {\n EclMenuItemCaretEvent,\n EclMenuItemFocusEvent,\n EclMenuItemHoverEvent,\n EclMenuItemHoverOutEvent,\n EclMenuItemKeydownEvent,\n EclMenuItemParentFocusEvent,\n EclMenuItemSelectEvent,\n} from '../events';\nimport { EclMenuItem } from '../models/ecl-menu-item.model';\n\nconst enum ColTrigger {\n COL1_TRIGGER = 5,\n COL2_TRIGGER = 9,\n COL3_TRIGGER = 13,\n}\n\n/**\n * This component represents a root menu item. Adds styling and functionality to menu item.\n */\n@Component({\n selector: 'ecl-menu-item',\n templateUrl: './ecl-menu-item.component.html',\n imports: [NgTemplateOutlet, RouterLink, RouterLinkWithHref, ...EUI_ECL_BUTTON, ...EUI_ECL_ICON, ...EUI_ECL_LINK],\n encapsulation: ViewEncapsulation.None,\n host: {\n role: 'listitem',\n '[class]': 'cssClasses',\n '[class.ecl-menu__item--has-children]': 'hasEclChildrenDataAttribute',\n '[attr.aria-haspopup]': 'hasEclChildrenDataAttribute',\n '[attr.data-expanded]': 'isDataExpanded',\n '(mouseenter)': 'onItemMouseEnter($event)',\n '(mouseleave)': 'onItemMouseLeave($event)',\n },\n})\nexport class EclMenuItemComponent extends ECLBaseDirective implements EclMenuItem, AfterContentInit, OnDestroy {\n el = inject(ElementRef);\n\n @Input() id: string;\n @Input() label: string;\n /**\n * When in mobile view, use this property to set aria-label for the toggle items button (to expand item's children).\n */\n readonly toggleAriaLabel = input<string>(undefined);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly routerLink = input<string | any[]>(null);\n readonly queryParams = input<Params | null>(null);\n readonly queryParamsHandling = input<QueryParamsHandling>(null);\n @Input() href = '';\n readonly target = input('');\n @Input({ transform: booleanAttribute }) isCurrent = false;\n /**\n * Custom attributes, to be added to the <a> tag of the menu item.\n */\n readonly linkExtraAttributes = input<Record<string, string>>(undefined);\n\n isExpanded: boolean;\n /**\n * Set to 'true', when item has more than 13 chidren and the overlay needs to use the full available space.\n */\n isFull = false;\n isHovered = false;\n isMobileBreakpoint = false;\n /**\n * Used when menu has overlay, to show if the item is currently displayed.\n */\n isVisible = true;\n\n private readonly doc = inject(DOCUMENT);\n private readonly window = this.doc.defaultView; // Window | null\n\n /**\n * The default role of the item is 'listitem' and should not be changed.\n */\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-menu__item'),\n this.isCurrent ? 'ecl-menu__item--current' : '',\n this.isExpanded ? 'ecl-menu__item--expanded' : '',\n this.getClassDependingChildrenCnt(),\n ]\n .join(' ')\n .trim();\n }\n\n readonly submenu = contentChild(forwardRef(() => EclMenuMegaComponent));\n /**\n * The <a> element of the menu item, when there are no children.\n */\n readonly menuLink = viewChild<ElementRef<HTMLAnchorElement>>('menuLink');\n /**\n * The <button> element of the menu item, when item has children.\n */\n readonly menuButton = viewChild(EclButtonComponent);\n\n @Output() menuItemSelect = new EventEmitter<EclMenuItemSelectEvent>();\n @Output() menuItemCaret = new EventEmitter<EclMenuItemCaretEvent>();\n /**\n * Event that is emited on clicking the caret button to expand item's children in mobile mode.\n */\n @Output() menuItemHover = new EventEmitter<EclMenuItemHoverEvent>();\n @Output() menuItemHoverOut = new EventEmitter<EclMenuItemHoverOutEvent>();\n @Output() menuMegaItemSelect = new EventEmitter<EclMenuItemSelectEvent>();\n @Output() menuItemFocus = new EventEmitter<EclMenuItemFocusEvent>();\n @Output() menuItemKeydown = new EventEmitter<EclMenuItemKeydownEvent>();\n /**\n * This event is emited when the keyboard nav reaches the last item in mobile view.\n * Then the next focused element should be the 'close' btn.\n */\n @Output() menuMegaLastItemTab = new EventEmitter<void>();\n\n get hasEclChildrenDataAttribute(): boolean {\n return this.hasChildren || undefined;\n }\n\n get isDataExpanded(): boolean {\n return this.hasChildren ? this.isHovered : null;\n }\n\n /**\n * 'aria-current' is set to 'page' only when this item itself is the current page, and not when it is\n * marked current merely because one of its children is the active item (in that case the child link\n * carries 'aria-current=\"page\"'). Derived from live state so it stays correct whether 'isCurrent' is set\n * at render time or updated on selection.\n */\n get ariaCurrent(): string | null {\n return this.isCurrent && !this.hasCurrentChild ? 'page' : null;\n }\n\n /**\n * Whether any child (sub-item) is the current item.\n */\n get hasCurrentChild(): boolean {\n return this.children.some((child) => child.isCurrent);\n }\n\n get hasChildren(): boolean {\n return !!this.submenu();\n }\n\n get children(): EclMenuItem[] {\n return this.hasChildren ? this.submenu().eclMenuMegaItems.toArray() : [];\n }\n\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private renderer = inject(Renderer2);\n private appShell = inject(EuiAppShellService);\n\n constructor() {\n super();\n afterNextRender(() => {\n this.observeBreakpointChanges();\n this.setExtraAttributesForLink(this.menuLink()?.nativeElement, this.linkExtraAttributes());\n });\n }\n\n onItemMouseEnter(evt: MouseEvent): void {\n if (this.isMobileBreakpoint) return;\n this.menuItemHover.next(new EclMenuItemHoverEvent(this, evt));\n }\n\n onItemMouseLeave(evt: MouseEvent): void {\n if (this.isMobileBreakpoint) return;\n this.menuItemHoverOut.next(new EclMenuItemHoverOutEvent(this, evt));\n }\n\n ngAfterContentInit(): void {\n // Subscibe to submenu component events.\n const submenu = this.submenu();\n if (submenu) {\n submenu.menuItemSelect.pipe(takeUntil(this.destroy$)).subscribe((it: EclMenuItemSelectEvent) => {\n this.menuMegaItemSelect.next(new EclMenuItemSelectEvent(it.menuItem, it.domEvent));\n });\n submenu.menuMegaItemParentFocus.pipe(takeUntil(this.destroy$)).subscribe((it: EclMenuItemParentFocusEvent) => {\n if (!this.isMobileBreakpoint) {\n this.onFocusFromSubmenu();\n }\n });\n submenu.menuMegaLastItemTab.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.isMobileBreakpoint) {\n this.menuMegaLastItemTab.next();\n }\n });\n\n if (this.hasSubmenuAnySelections()) {\n this.isCurrent = true;\n }\n }\n\n // this.tabindex = this.routerLink || this.href ? 0 : -1;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n onItemFocus(evt: FocusEvent): void {\n this.menuItemFocus.next(new EclMenuItemFocusEvent(this, evt));\n }\n\n onItemClick(evt: Event): void {\n this.menuItemSelect.next(new EclMenuItemSelectEvent(this, evt));\n\n if (!this.href) {\n evt.stopPropagation();\n }\n }\n\n /**\n * When clicking the caret button, to expand item's children. Used in mobile view.\n * @param evt\n */\n onItemCaretClick(evt: MouseEvent): void {\n this.menuItemCaret.next(new EclMenuItemCaretEvent(this, evt));\n }\n\n /**\n * Manages the state when the item is focused, when navigating with keyboard and the navigation is coming from the submenu.\n */\n onFocusFromSubmenu(): void {\n this.onButtonFocus();\n this.isHovered = false;\n this.isExpanded = false;\n }\n\n /**\n * Manages the state when the item is focused, when navigating with keyboard and the navigation is coming from\n * the next root menu item.\n */\n onFocusFromNext(): void {\n if (this.menuButton()) {\n this.onButtonFocus();\n } else {\n this.onLinkFocus();\n }\n }\n\n /**\n * Manages the state when the item is focused, when navigating with keyboard and the navigation is coming from\n * the previous root menu item.\n */\n onFocusFromPrev(): void {\n this.onLinkFocus();\n }\n\n /**\n * Manages the keyboard navigation when the current element is the button of the menu item.\n * @param evt\n */\n onButtonKeydown(evt: Event): void {\n switch ((evt as KeyboardEvent).key) {\n case KeyCode.ARROW_DOWN: {\n evt.preventDefault();\n if (this.isHovered) {\n this.selectFirstMegaMenuItem();\n } else {\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n }\n break;\n }\n case KeyCode.ARROW_UP: {\n evt.preventDefault();\n this.onLinkFocus();\n break;\n }\n case KeyCode.ARROW_RIGHT: {\n evt.preventDefault();\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n case KeyCode.ARROW_LEFT: {\n evt.preventDefault();\n this.onLinkFocus();\n break;\n }\n case KeyCode.TAB: {\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n case KeyCode.ENTER: {\n evt.preventDefault();\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n case KeyCode.ESCAPE: {\n evt.preventDefault();\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n default: {\n break;\n }\n }\n }\n\n /**\n * Manages the keyboard navigation when the current element is the <a> tag of the menu item.\n * @param evt\n */\n onLinkKeydown(evt: Event): void {\n switch ((evt as KeyboardEvent).key) {\n case KeyCode.ARROW_DOWN: {\n evt.preventDefault();\n this.onLinkNextFocus(evt);\n break;\n }\n case KeyCode.ARROW_UP: {\n evt.preventDefault();\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n case KeyCode.ARROW_RIGHT: {\n evt.preventDefault();\n this.onLinkNextFocus(evt);\n break;\n }\n case KeyCode.ARROW_LEFT: {\n evt.preventDefault();\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n case KeyCode.ENTER: {\n this.onItemClick(evt);\n break;\n }\n case KeyCode.ESCAPE: {\n evt.preventDefault();\n this.onLinkEscape(evt);\n break;\n }\n default: {\n break;\n }\n }\n }\n\n /**\n * This method calculates height and width of an item, depending the maximum of lines(rows) allowed.\n * Depends on the 'maxLines' property of the parent menu component.\n * @param maxLines - property that sets the maximum possible lines in a menu item.\n * @param isMobileBreakpoint\n * @returns\n */\n checkMenuItem(maxLines: number, isMobileBreakpoint: boolean): void {\n if (maxLines < 1) return;\n\n const currentItem = this.el.nativeElement;\n const currentLink = this.menuLink().nativeElement;\n if (isMobileBreakpoint) {\n this.renderer.setStyle(currentLink, 'width', '100%');\n return;\n }\n this.renderer.setStyle(currentItem, 'alignItems', 'flex-start');\n const linkStyle = this.window.getComputedStyle(currentLink);\n\n const maxHeight = this.getMenuItemLinkMaxHeight(linkStyle, maxLines);\n\n if (currentLink.offsetHeight > maxHeight) {\n this.changeMenuItemLinkWidth(currentLink, maxLines, linkStyle);\n }\n this.renderer.removeStyle(currentItem, 'alignItems');\n }\n\n private onLinkEscape(evt: Event): void {\n const menuButton = this.menuButton();\n if (menuButton) {\n menuButton.el.nativeElement.focus();\n evt.stopPropagation();\n } else {\n this.menuLink().nativeElement.blur();\n }\n }\n\n private selectFirstMegaMenuItem(): void {\n this.submenu().selectFirstSubItem();\n }\n\n private onLinkFocus(): void {\n this.menuLink().nativeElement.focus();\n }\n\n private onLinkNextFocus(evt: Event): void {\n if (this.menuButton()) {\n this.onButtonFocus();\n } else {\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n }\n }\n\n private onButtonFocus(): void {\n this.menuButton().el.nativeElement.focus();\n }\n\n private getMenuItemLinkMaxHeight(linkStyle: CSSStyleDeclaration, maxLines: number): number {\n return parseInt(linkStyle.lineHeight, 10) * maxLines + parseInt(linkStyle.paddingTop, 10) + parseInt(linkStyle.paddingBottom, 10);\n }\n\n /**\n * Calculates width of a menu item, depending on maximum lines of text allowed.\n * @param currentLink\n * @param maxLines\n * @param linkStyle\n * @returns\n */\n private changeMenuItemLinkWidth(currentLink: HTMLAnchorElement, maxLines: number, linkStyle: CSSStyleDeclaration): void {\n this.renderer.setStyle(currentLink, 'white-space', 'nowrap');\n const linkWidth = currentLink.offsetWidth;\n if (maxLines === 1) {\n this.renderer.setStyle(currentLink, 'width', `${linkWidth + parseInt(linkStyle.paddingLeft, 10) + parseInt(linkStyle.paddingRight, 10)}px`);\n this.renderer.removeStyle(currentLink, 'white-space');\n return;\n }\n const textSize = currentLink.text.length;\n const letterWidth = Math.ceil(linkWidth / textSize);\n const wordsArray = currentLink.text.trim().split(' ');\n const goalWidth = Math.ceil(linkWidth / maxLines);\n const firstWord = wordsArray[0];\n let cnt = 1;\n let wordWidth = Math.ceil((firstWord.length + 1) * letterWidth);\n while (wordWidth < goalWidth) {\n wordWidth += Math.ceil((wordsArray[cnt].length + 1) * letterWidth);\n cnt++;\n }\n this.renderer.setStyle(currentLink, 'width', `${wordWidth + parseInt(linkStyle.paddingLeft, 10) + parseInt(linkStyle.paddingRight, 10)}px`);\n this.renderer.removeStyle(currentLink, 'white-space');\n }\n\n private getClassDependingChildrenCnt(): string {\n if (this.hasChildren) {\n if (this.submenu().eclMenuMegaItems.length < ColTrigger.COL1_TRIGGER) {\n return 'ecl-menu__item--col1';\n } else if (this.submenu().eclMenuMegaItems.length < ColTrigger.COL2_TRIGGER) {\n return 'ecl-menu__item--col2';\n } else if (this.submenu().eclMenuMegaItems.length < ColTrigger.COL3_TRIGGER) {\n return 'ecl-menu__item--col3';\n } else {\n this.isFull = true;\n return 'ecl-menu__item--full';\n }\n }\n return '';\n }\n\n private hasSubmenuAnySelections(): boolean {\n const submenu = this.submenu();\n return submenu && !!submenu.eclMenuMegaItems.find((it) => it.isCurrent);\n }\n\n private setExtraAttributesForLink(link: HTMLElement, linkExtraAttributes: Record<string, string>): void {\n if (linkExtraAttributes) {\n Object.keys(linkExtraAttributes).forEach((key) => {\n if (key !== 'href' && key !== 'routerLink') {\n this.renderer.setAttribute(link, key, linkExtraAttributes[key]);\n }\n });\n }\n }\n\n private observeBreakpointChanges(): void {\n this.appShell.getState<any>('breakpoints')\n .pipe(\n map(bp => !!(bp?.isMobile || bp?.isTablet || bp?.isLtLargeTablet)), // xs/sm/md/lg (< 1140px)\n distinctUntilChanged(),\n takeUntil(this.destroy$),\n )\n .subscribe((isMobile) => {\n this.isMobileBreakpoint = isMobile;\n });\n }\n}\n",
|
|
65338
|
+
"sourceCode": "import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n afterNextRender,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewEncapsulation,\n DOCUMENT,\n booleanAttribute,\n input,\n contentChild,\n viewChild,\n} from '@angular/core';\nimport { Params, QueryParamsHandling, RouterLink, RouterLinkWithHref } from '@angular/router';\nimport { EuiAppShellService } from '@eui/core';\nimport { EclButtonComponent, EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { EUI_ECL_LINK } from '@eui/ecl/components/ecl-link';\nimport { ECLBaseDirective, KeyCode } from '@eui/ecl/core';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, map, takeUntil } from 'rxjs/operators';\nimport { EclMenuMegaComponent } from '../ecl-menu-mega';\nimport {\n EclMenuItemCaretEvent,\n EclMenuItemFocusEvent,\n EclMenuItemHoverEvent,\n EclMenuItemHoverOutEvent,\n EclMenuItemKeydownEvent,\n EclMenuItemParentFocusEvent,\n EclMenuItemSelectEvent,\n} from '../events';\nimport { EclMenuItem } from '../models/ecl-menu-item.model';\n\nconst enum ColTrigger {\n COL1_TRIGGER = 5,\n COL2_TRIGGER = 9,\n COL3_TRIGGER = 13,\n}\n\n/**\n * This component represents a root menu item. Adds styling and functionality to menu item.\n */\n@Component({\n selector: 'ecl-menu-item',\n templateUrl: './ecl-menu-item.component.html',\n imports: [NgTemplateOutlet, RouterLink, RouterLinkWithHref, ...EUI_ECL_BUTTON, ...EUI_ECL_ICON, ...EUI_ECL_LINK],\n encapsulation: ViewEncapsulation.None,\n host: {\n role: 'listitem',\n '[class]': 'cssClasses',\n '[class.ecl-menu__item--has-children]': 'hasEclChildrenDataAttribute',\n '[attr.aria-haspopup]': 'hasEclChildrenDataAttribute',\n '[attr.data-expanded]': 'isDataExpanded',\n '(mouseenter)': 'onItemMouseEnter($event)',\n '(mouseleave)': 'onItemMouseLeave($event)',\n },\n})\nexport class EclMenuItemComponent extends ECLBaseDirective implements EclMenuItem, AfterContentInit, OnDestroy {\n el = inject(ElementRef);\n\n @Input() id: string;\n @Input() label: string;\n /**\n * When in mobile view, use this property to set aria-label for the toggle items button (to expand item's children).\n */\n readonly toggleAriaLabel = input<string>(undefined);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly routerLink = input<string | any[]>(null);\n readonly queryParams = input<Params | null>(null);\n readonly queryParamsHandling = input<QueryParamsHandling>(null);\n @Input() href = '';\n readonly target = input('');\n @Input({ transform: booleanAttribute }) isCurrent = false;\n /**\n * Custom attributes, to be added to the <a> tag of the menu item.\n */\n readonly linkExtraAttributes = input<Record<string, string>>(undefined);\n\n isExpanded: boolean;\n /**\n * Set to 'true', when item has more than 13 chidren and the overlay needs to use the full available space.\n */\n isFull = false;\n isHovered = false;\n isMobileBreakpoint = false;\n /**\n * Used when menu has overlay, to show if the item is currently displayed.\n */\n isVisible = true;\n\n private readonly doc = inject(DOCUMENT);\n private readonly window = this.doc.defaultView; // Window | null\n\n /**\n * The default role of the item is 'listitem' and should not be changed.\n */\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-menu__item'),\n this.isCurrent ? 'ecl-menu__item--current' : '',\n this.isExpanded ? 'ecl-menu__item--expanded' : '',\n this.getClassDependingChildrenCnt(),\n ]\n .join(' ')\n .trim();\n }\n\n readonly submenu = contentChild(forwardRef(() => EclMenuMegaComponent));\n /**\n * The <a> element of the menu item, when there are no children.\n */\n readonly menuLink = viewChild<ElementRef<HTMLAnchorElement>>('menuLink');\n /**\n * The <button> element of the menu item, when item has children.\n */\n readonly menuButton = viewChild(EclButtonComponent);\n\n @Output() menuItemSelect = new EventEmitter<EclMenuItemSelectEvent>();\n @Output() menuItemCaret = new EventEmitter<EclMenuItemCaretEvent>();\n /**\n * Event that is emited on clicking the caret button to expand item's children in mobile mode.\n */\n @Output() menuItemHover = new EventEmitter<EclMenuItemHoverEvent>();\n @Output() menuItemHoverOut = new EventEmitter<EclMenuItemHoverOutEvent>();\n @Output() menuMegaItemSelect = new EventEmitter<EclMenuItemSelectEvent>();\n @Output() menuItemFocus = new EventEmitter<EclMenuItemFocusEvent>();\n @Output() menuItemKeydown = new EventEmitter<EclMenuItemKeydownEvent>();\n /**\n * This event is emited when the keyboard nav reaches the last item in mobile view.\n * Then the next focused element should be the 'close' btn.\n */\n @Output() menuMegaLastItemTab = new EventEmitter<void>();\n\n get hasEclChildrenDataAttribute(): boolean {\n return this.hasChildren || undefined;\n }\n\n get isDataExpanded(): boolean {\n return this.hasChildren ? this.isHovered : null;\n }\n\n /**\n * 'aria-current' is set to 'page' only when this item itself is the current page, and not when it is\n * marked current merely because one of its children is the active item (in that case the child link\n * carries 'aria-current=\"page\"'). Derived from live state so it stays correct whether 'isCurrent' is set\n * at render time or updated on selection.\n */\n get ariaCurrent(): string | null {\n return this.isCurrent && !this.hasCurrentChild ? 'page' : null;\n }\n\n /**\n * Whether any child (sub-item) is the current item.\n */\n get hasCurrentChild(): boolean {\n return this.children.some((child) => child.isCurrent);\n }\n\n get hasChildren(): boolean {\n return !!this.submenu();\n }\n\n get children(): EclMenuItem[] {\n return this.hasChildren ? this.submenu().eclMenuMegaItems.toArray() : [];\n }\n\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private renderer = inject(Renderer2);\n private appShell = inject(EuiAppShellService);\n\n constructor() {\n super();\n afterNextRender(() => {\n this.observeBreakpointChanges();\n this.setExtraAttributesForLink(this.menuLink()?.nativeElement, this.linkExtraAttributes());\n });\n }\n\n onItemMouseEnter(evt: MouseEvent): void {\n if (this.isMobileBreakpoint) return;\n this.menuItemHover.next(new EclMenuItemHoverEvent(this, evt));\n }\n\n onItemMouseLeave(evt: MouseEvent): void {\n if (this.isMobileBreakpoint) return;\n this.menuItemHoverOut.next(new EclMenuItemHoverOutEvent(this, evt));\n }\n\n ngAfterContentInit(): void {\n // Subscibe to submenu component events.\n const submenu = this.submenu();\n if (submenu) {\n submenu.menuItemSelect.pipe(takeUntil(this.destroy$)).subscribe((it: EclMenuItemSelectEvent) => {\n this.menuMegaItemSelect.next(new EclMenuItemSelectEvent(it.menuItem, it.domEvent));\n });\n submenu.menuMegaItemParentFocus.pipe(takeUntil(this.destroy$)).subscribe((it: EclMenuItemParentFocusEvent) => {\n if (!this.isMobileBreakpoint) {\n this.onFocusFromSubmenu();\n }\n });\n submenu.menuMegaLastItemTab.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (this.isMobileBreakpoint) {\n this.menuMegaLastItemTab.next();\n }\n });\n\n if (this.hasSubmenuAnySelections()) {\n this.isCurrent = true;\n }\n }\n\n // this.tabindex = this.routerLink || this.href ? 0 : -1;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n onItemFocus(evt: FocusEvent): void {\n this.menuItemFocus.next(new EclMenuItemFocusEvent(this, evt));\n }\n\n onItemClick(evt: Event): void {\n this.menuItemSelect.next(new EclMenuItemSelectEvent(this, evt));\n\n if (!this.href) {\n evt.stopPropagation();\n }\n }\n\n /**\n * When clicking the caret button, to expand item's children. Used in mobile view.\n * @param evt\n */\n onItemCaretClick(evt: MouseEvent): void {\n this.menuItemCaret.next(new EclMenuItemCaretEvent(this, evt));\n }\n\n /**\n * Manages the state when the item is focused, when navigating with keyboard and the navigation is coming from the submenu.\n */\n onFocusFromSubmenu(): void {\n this.onButtonFocus();\n this.isHovered = false;\n this.isExpanded = false;\n }\n\n /**\n * Manages the state when the item is focused, when navigating with keyboard and the navigation is coming from\n * the next root menu item.\n */\n onFocusFromNext(): void {\n if (this.menuButton()) {\n this.onButtonFocus();\n } else {\n this.onLinkFocus();\n }\n }\n\n /**\n * Manages the state when the item is focused, when navigating with keyboard and the navigation is coming from\n * the previous root menu item.\n */\n onFocusFromPrev(): void {\n this.onLinkFocus();\n }\n\n /**\n * Manages the keyboard navigation when the current element is the button of the menu item.\n * @param evt\n */\n onButtonKeydown(evt: Event): void {\n switch ((evt as KeyboardEvent).key) {\n case KeyCode.ARROW_DOWN: {\n evt.preventDefault();\n if (this.isHovered) {\n this.selectFirstMegaMenuItem();\n } else {\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n }\n break;\n }\n case KeyCode.ARROW_UP: {\n evt.preventDefault();\n this.onLinkFocus();\n break;\n }\n case KeyCode.ARROW_RIGHT: {\n evt.preventDefault();\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n case KeyCode.ARROW_LEFT: {\n evt.preventDefault();\n this.onLinkFocus();\n break;\n }\n case KeyCode.TAB: {\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n case KeyCode.ENTER: {\n evt.preventDefault();\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n case KeyCode.ESCAPE: {\n evt.preventDefault();\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n default: {\n break;\n }\n }\n }\n\n /**\n * Manages the keyboard navigation when the current element is the <a> tag of the menu item.\n * @param evt\n */\n onLinkKeydown(evt: Event): void {\n switch ((evt as KeyboardEvent).key) {\n case KeyCode.ARROW_DOWN: {\n evt.preventDefault();\n this.onLinkNextFocus(evt);\n break;\n }\n case KeyCode.ARROW_UP: {\n evt.preventDefault();\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n case KeyCode.ARROW_RIGHT: {\n evt.preventDefault();\n this.onLinkNextFocus(evt);\n break;\n }\n case KeyCode.ARROW_LEFT: {\n evt.preventDefault();\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n break;\n }\n case KeyCode.ENTER: {\n this.onItemClick(evt);\n break;\n }\n case KeyCode.ESCAPE: {\n evt.preventDefault();\n this.onLinkEscape(evt);\n break;\n }\n default: {\n break;\n }\n }\n }\n\n /**\n * This method calculates height and width of an item, depending the maximum of lines(rows) allowed.\n * Depends on the 'maxLines' property of the parent menu component.\n * @param maxLines - property that sets the maximum possible lines in a menu item.\n * @param isMobileBreakpoint\n * @returns\n */\n checkMenuItem(maxLines: number, isMobileBreakpoint: boolean): void {\n if (maxLines < 1) return;\n\n const currentItem = this.el.nativeElement;\n const currentLink = this.menuLink().nativeElement;\n if (isMobileBreakpoint) {\n this.renderer.setStyle(currentLink, 'width', '100%');\n return;\n }\n this.renderer.setStyle(currentItem, 'alignItems', 'flex-start');\n const linkStyle = this.window.getComputedStyle(currentLink);\n\n const maxHeight = this.getMenuItemLinkMaxHeight(linkStyle, maxLines);\n\n if (currentLink.offsetHeight > maxHeight) {\n this.changeMenuItemLinkWidth(currentLink, maxLines, linkStyle);\n }\n this.renderer.removeStyle(currentItem, 'alignItems');\n }\n\n private onLinkEscape(evt: Event): void {\n const menuButton = this.menuButton();\n if (menuButton) {\n menuButton.el.nativeElement.focus();\n evt.stopPropagation();\n } else {\n this.menuLink().nativeElement.blur();\n }\n }\n\n private selectFirstMegaMenuItem(): void {\n this.submenu().selectFirstSubItem();\n }\n\n private onLinkFocus(): void {\n this.menuLink().nativeElement.focus();\n }\n\n private onLinkNextFocus(evt: Event): void {\n if (this.menuButton()) {\n this.onButtonFocus();\n } else {\n this.menuItemKeydown.next(new EclMenuItemKeydownEvent(this, evt as KeyboardEvent));\n }\n }\n\n private onButtonFocus(): void {\n this.menuButton().el.nativeElement.focus();\n }\n\n private getMenuItemLinkMaxHeight(linkStyle: CSSStyleDeclaration, maxLines: number): number {\n return parseInt(linkStyle.lineHeight, 10) * maxLines + parseInt(linkStyle.paddingTop, 10) + parseInt(linkStyle.paddingBottom, 10);\n }\n\n /**\n * Calculates width of a menu item, depending on maximum lines of text allowed.\n * @param currentLink\n * @param maxLines\n * @param linkStyle\n * @returns\n */\n private changeMenuItemLinkWidth(currentLink: HTMLAnchorElement, maxLines: number, linkStyle: CSSStyleDeclaration): void {\n this.renderer.setStyle(currentLink, 'white-space', 'nowrap');\n const linkWidth = currentLink.offsetWidth;\n if (maxLines === 1) {\n this.renderer.setStyle(currentLink, 'width', `${linkWidth + parseInt(linkStyle.paddingLeft, 10) + parseInt(linkStyle.paddingRight, 10)}px`);\n this.renderer.removeStyle(currentLink, 'white-space');\n return;\n }\n const textSize = currentLink.text.length;\n const letterWidth = Math.ceil(linkWidth / textSize);\n const wordsArray = currentLink.text.trim().split(' ');\n const goalWidth = Math.ceil(linkWidth / maxLines);\n const firstWord = wordsArray[0];\n let cnt = 1;\n let wordWidth = Math.ceil((firstWord.length + 1) * letterWidth);\n while (wordWidth < goalWidth) {\n wordWidth += Math.ceil((wordsArray[cnt].length + 1) * letterWidth);\n cnt++;\n }\n this.renderer.setStyle(currentLink, 'width', `${wordWidth + parseInt(linkStyle.paddingLeft, 10) + parseInt(linkStyle.paddingRight, 10)}px`);\n this.renderer.removeStyle(currentLink, 'white-space');\n }\n\n private getClassDependingChildrenCnt(): string {\n if (this.hasChildren) {\n if (this.submenu().eclMenuMegaItems.length < ColTrigger.COL1_TRIGGER) {\n return 'ecl-menu__item--col1';\n } else if (this.submenu().eclMenuMegaItems.length < ColTrigger.COL2_TRIGGER) {\n return 'ecl-menu__item--col2';\n } else if (this.submenu().eclMenuMegaItems.length < ColTrigger.COL3_TRIGGER) {\n return 'ecl-menu__item--col3';\n } else {\n this.isFull = true;\n return 'ecl-menu__item--full';\n }\n }\n return '';\n }\n\n private hasSubmenuAnySelections(): boolean {\n const submenu = this.submenu();\n return submenu && !!submenu.eclMenuMegaItems.find((it) => it.isCurrent);\n }\n\n private setExtraAttributesForLink(link: HTMLElement, linkExtraAttributes: Record<string, string>): void {\n if (linkExtraAttributes) {\n Object.keys(linkExtraAttributes).forEach((key) => {\n if (key !== 'href' && key !== 'routerLink') {\n this.renderer.setAttribute(link, key, linkExtraAttributes[key]);\n }\n });\n }\n }\n\n private observeBreakpointChanges(): void {\n this.appShell.getState<any>('breakpoints')\n .pipe(\n map(bp => !!(bp?.isMobile || bp?.isTablet || bp?.isLtLargeTablet)), // xs/sm/md/lg (< 1140px)\n distinctUntilChanged(),\n takeUntil(this.destroy$),\n )\n .subscribe((isMobile) => {\n this.isMobileBreakpoint = isMobile;\n });\n }\n}\n",
|
|
65658
65339
|
"assetsDirs": [],
|
|
65659
65340
|
"styleUrlsData": "",
|
|
65660
65341
|
"stylesData": "",
|
|
@@ -82552,7 +82233,7 @@
|
|
|
82552
82233
|
}
|
|
82553
82234
|
]
|
|
82554
82235
|
},
|
|
82555
|
-
"templateData": "<div class=\"ecl-site-footer__section ecl-site-footer__section--common\">\n @if (!isCore()) {\n <a href=\"https://commission.europa.eu/index_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__logo-link\">\n <picture class=\"ecl-picture ecl-site-footer__picture\"><img class=\"ecl-site-footer__logo-image\"\n src=\"assets/images/ecl/logo/ec/negative/logo-ec--{{logoLanguageCode}}.svg\" alt=\"European Commission\">\n </picture>\n </a>\n <div class=\"ecl-site-footer__extra-links-container\">\n <ecl-social-media-follow isIconOnly description=\"{{'ecl.footer.FOLLOW-EUROPEAN-COMMISSION' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted>Mastodon</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted>LinkedIn</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted>Bluesky</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted>Facebook</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted>YouTube</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted>Other</ecl-social-media-follow-item>\n </ecl-social-media-follow>\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/about-european-commission/contact_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__link\">{{ 'ecl.footer.CONTACT' | translate }}</a></li>\n </ul>\n </div>\n } @else {\n <ecl-social-media-follow isIconOnly description=\"{{'ecl.footer.FOLLOW-US' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted>Mastodon</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted>LinkedIn</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted>Bluesky</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted>Facebook</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted>YouTube</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted>Other</ecl-social-media-follow-item>\n </ecl-social-media-follow>\n }\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/legal-notice/vulnerability-disclosure-policy_{{languageCode()}}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.REPORT-IT-VULNERABILITY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/languages-our-websites_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LANGUAGES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/cookies_{{languageCode()}}\" eclLink isInverted\n variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.COOKIES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/privacy-policy_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.PRIVACY-POLICY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/legal-notice_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LEGAL-NOTICE' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"{{ a11yStatementRef() }}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.ACCESSIBILITY' | translate }}</a></li>\n </ul>\n</div
|
|
82236
|
+
"templateData": "<div class=\"ecl-site-footer__section ecl-site-footer__section--common\">\n @if (!isCore()) {\n <a href=\"https://commission.europa.eu/index_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__logo-link\">\n <picture class=\"ecl-picture ecl-site-footer__picture\"><img class=\"ecl-site-footer__logo-image\"\n src=\"assets/images/ecl/logo/ec/negative/logo-ec--{{logoLanguageCode}}.svg\" alt=\"European Commission\">\n </picture>\n </a>\n <div class=\"ecl-site-footer__extra-links-container\">\n <ecl-social-media-follow isIconOnly description=\"{{'ecl.footer.FOLLOW-EUROPEAN-COMMISSION' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted>Mastodon</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted>LinkedIn</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted>Bluesky</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted>Facebook</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted>YouTube</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted>Other</ecl-social-media-follow-item>\n </ecl-social-media-follow>\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/about-european-commission/contact_{{languageCode()}}\"\n class=\"ecl-link ecl-link--standalone ecl-link--inverted ecl-site-footer__link\">{{ 'ecl.footer.CONTACT' | translate }}</a></li>\n </ul>\n </div>\n } @else {\n <ecl-social-media-follow isIconOnly description=\"{{'ecl.footer.FOLLOW-US' | translate}}\"\n class=\"ecl-social-media-follow--description_inline ecl-site-footer__social-media\">\n <ecl-social-media-follow-item icon=\"mastodon\" href=\"https://ec.social-network.europa.eu/@EUCommission\"\n isInverted>Mastodon</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"linkedin\" href=\"https://www.linkedin.com/company/european-commission\"\n isInverted>LinkedIn</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"bluesky\" href=\"https://bsky.app/profile/ec.europa.eu\"\n isInverted>Bluesky</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"facebook\" href=\"https://www.facebook.com/EuropeanCommission\"\n isInverted>Facebook</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"youtube\" href=\"https://www.youtube.com/user/eutube\"\n isInverted>YouTube</ecl-social-media-follow-item>\n <ecl-social-media-follow-item icon=\"chain\"\n href=\"https://european-union.europa.eu/contact-eu/social-media-channels_{{languageCode()}}\"\n isInverted>Other</ecl-social-media-follow-item>\n </ecl-social-media-follow>\n }\n <ul eclSiteFooterList isInline>\n <li eclSiteFooterListItem><a\n href=\"https://commission.europa.eu/legal-notice/vulnerability-disclosure-policy_{{languageCode()}}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.REPORT-IT-VULNERABILITY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/languages-our-websites_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LANGUAGES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/cookies_{{languageCode()}}\" eclLink isInverted\n variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.COOKIES' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/privacy-policy_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.PRIVACY-POLICY' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"https://commission.europa.eu/legal-notice_{{languageCode()}}\" eclLink\n isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.LEGAL-NOTICE' | translate }}</a></li>\n <li eclSiteFooterListItem><a href=\"{{ a11yStatementRef() }}\"\n eclLink isInverted variant=\"standalone\" eclSiteFooterLink>{{ 'ecl.footer.ACCESSIBILITY' | translate }}</a></li>\n </ul>\n</div>\n"
|
|
82556
82237
|
},
|
|
82557
82238
|
{
|
|
82558
82239
|
"name": "EclSiteHeaderActionComponent",
|
|
@@ -87531,7 +87212,7 @@
|
|
|
87531
87212
|
},
|
|
87532
87213
|
{
|
|
87533
87214
|
"name": "EclSocialMediaFollowItemComponent",
|
|
87534
|
-
"id": "component-EclSocialMediaFollowItemComponent-
|
|
87215
|
+
"id": "component-EclSocialMediaFollowItemComponent-be2bc74a52d7b183206e23fa9c6edd0706816decad401fed2ccd0e2788dead5b1d6dbb066556634b97683220c7111e50c45fd911c2cccbe1ec6738847a5e6fdf",
|
|
87535
87216
|
"file": "packages/ecl/components/ecl-social-media-follow/ecl-social-media-follow-item.component.ts",
|
|
87536
87217
|
"encapsulation": [],
|
|
87537
87218
|
"entryComponents": [],
|
|
@@ -87732,7 +87413,7 @@
|
|
|
87732
87413
|
"indexKey": "",
|
|
87733
87414
|
"optional": false,
|
|
87734
87415
|
"description": "",
|
|
87735
|
-
"line":
|
|
87416
|
+
"line": 38,
|
|
87736
87417
|
"rawdescription": "\n",
|
|
87737
87418
|
"modifierKind": [
|
|
87738
87419
|
148
|
|
@@ -87748,7 +87429,7 @@
|
|
|
87748
87429
|
"args": [
|
|
87749
87430
|
{
|
|
87750
87431
|
"name": "evt",
|
|
87751
|
-
"type": "
|
|
87432
|
+
"type": "Event",
|
|
87752
87433
|
"optional": false,
|
|
87753
87434
|
"dotDotDotToken": false,
|
|
87754
87435
|
"deprecated": false,
|
|
@@ -87766,7 +87447,7 @@
|
|
|
87766
87447
|
"jsdoctags": [
|
|
87767
87448
|
{
|
|
87768
87449
|
"name": "evt",
|
|
87769
|
-
"type": "
|
|
87450
|
+
"type": "Event",
|
|
87770
87451
|
"optional": false,
|
|
87771
87452
|
"dotDotDotToken": false,
|
|
87772
87453
|
"deprecated": false,
|
|
@@ -87842,7 +87523,7 @@
|
|
|
87842
87523
|
"description": "",
|
|
87843
87524
|
"rawdescription": "\n",
|
|
87844
87525
|
"type": "component",
|
|
87845
|
-
"sourceCode": "import { booleanAttribute, Component, inject, input, output } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { EclBaseEvent } from '@eui/ecl/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EUI_ECL_LINK } from '@eui/ecl/components/ecl-link';\nimport { RouterLink, RouterLinkWithHref } from '@angular/router';\nimport { EclSocialMediaFollowComponent } from './ecl-social-media-follow.component';\n\nexport class EclSocialMediaFollowItemClickEvent extends EclBaseEvent {}\n\n@Component({\n selector: 'ecl-social-media-follow-item',\n templateUrl: './ecl-social-media-follow-item.component.html',\n imports: [...EUI_ECL_ICON, ...EUI_ECL_LINK, NgTemplateOutlet, RouterLink, RouterLinkWithHref],\n host: {\n
|
|
87526
|
+
"sourceCode": "import { booleanAttribute, Component, inject, input, output } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\nimport { EclBaseEvent } from '@eui/ecl/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EUI_ECL_LINK } from '@eui/ecl/components/ecl-link';\nimport { RouterLink, RouterLinkWithHref } from '@angular/router';\nimport { EclSocialMediaFollowComponent } from './ecl-social-media-follow.component';\n\nexport class EclSocialMediaFollowItemClickEvent extends EclBaseEvent {}\n\n@Component({\n selector: 'ecl-social-media-follow-item',\n templateUrl: './ecl-social-media-follow-item.component.html',\n imports: [...EUI_ECL_ICON, ...EUI_ECL_LINK, NgTemplateOutlet, RouterLink, RouterLinkWithHref],\n host: {\n role: 'listitem',\n '[class]': 'cssClasses',\n },\n})\nexport class EclSocialMediaFollowItemComponent extends ECLBaseDirective {\n readonly isInverted = input<false, unknown>(undefined, { transform: (booleanAttribute) as any });\n icon = input<string>();\n iconSet = input<string>('social-media');\n readonly href = input('');\n readonly routerLink = input('');\n readonly target = input<string>(undefined);\n readonly size = input('m');\n readonly extraAttributes = input<{\n name: string;\n value?: string | null;\n }[]>(undefined);\n\n get cssClasses(): string {\n return [super.getCssClasses('ecl-social-media-follow__item')].join(' ').trim();\n }\n\n readonly itemClick = output<EclSocialMediaFollowItemClickEvent>();\n\n private parent = inject(EclSocialMediaFollowComponent);\n\n get isIconOnly(): boolean {\n return this.parent?.isIconOnly() ?? false;\n }\n\n onItemClick(evt: Event): void {\n this.itemClick.emit(new EclSocialMediaFollowItemClickEvent());\n if (!this.href() && !this.routerLink()) {\n evt.preventDefault();\n }\n }\n}\n",
|
|
87846
87527
|
"assetsDirs": [],
|
|
87847
87528
|
"styleUrlsData": "",
|
|
87848
87529
|
"stylesData": "",
|
|
@@ -87850,24 +87531,24 @@
|
|
|
87850
87531
|
"ECLBaseDirective"
|
|
87851
87532
|
],
|
|
87852
87533
|
"accessors": {
|
|
87853
|
-
"isIconOnly": {
|
|
87854
|
-
"name": "isIconOnly",
|
|
87855
|
-
"getSignature": {
|
|
87856
|
-
"name": "isIconOnly",
|
|
87857
|
-
"type": "boolean",
|
|
87858
|
-
"returnType": "boolean",
|
|
87859
|
-
"line": 36,
|
|
87860
|
-
"rawdescription": "\n",
|
|
87861
|
-
"description": ""
|
|
87862
|
-
}
|
|
87863
|
-
},
|
|
87864
87534
|
"cssClasses": {
|
|
87865
87535
|
"name": "cssClasses",
|
|
87866
87536
|
"getSignature": {
|
|
87867
87537
|
"name": "cssClasses",
|
|
87868
87538
|
"type": "string",
|
|
87869
87539
|
"returnType": "string",
|
|
87870
|
-
"line":
|
|
87540
|
+
"line": 34,
|
|
87541
|
+
"rawdescription": "\n",
|
|
87542
|
+
"description": ""
|
|
87543
|
+
}
|
|
87544
|
+
},
|
|
87545
|
+
"isIconOnly": {
|
|
87546
|
+
"name": "isIconOnly",
|
|
87547
|
+
"getSignature": {
|
|
87548
|
+
"name": "isIconOnly",
|
|
87549
|
+
"type": "boolean",
|
|
87550
|
+
"returnType": "boolean",
|
|
87551
|
+
"line": 42,
|
|
87871
87552
|
"rawdescription": "\n",
|
|
87872
87553
|
"description": ""
|
|
87873
87554
|
}
|
|
@@ -90224,7 +89905,7 @@
|
|
|
90224
89905
|
}
|
|
90225
89906
|
]
|
|
90226
89907
|
},
|
|
90227
|
-
"templateData": "@if (eclTitle() || eclDescription()) {\n<div class=\"ecl-story-card__header\">\n @if (eclTitle()) {\n <div class=\"ecl-story-card__title\" [attr.id]=\"titleId()\">{{ eclTitle() }}</div>\n }\n @if (eclDescription()) {\n <div class=\"ecl-story-card__description\">{{ eclDescription() }}</div>\n }\n</div>\n}\n\n<!-- Mobile: Embla Carousel (auto-generated from items + details) -->\n<div class=\"ecl-story-card__carousel\">\n <div class=\"ecl-story-card__carousel-viewport\"\n role=\"region\"\n [attr.aria-label]=\"'ecl.story-card.SLIDER-LABEL' | translate\"\n emblaCarousel\n [options]=\"emblaOptions\"\n [subscribeToEvents]=\"subscribeToEvents\"\n (emblaChange)=\"onEmblaChange($event)\">\n <ul class=\"ecl-story-card__carousel-container\">\n @for (item of items(); track i; let i = $index) {\n <li class=\"ecl-story-card__carousel-slide\"\n [attr.aria-hidden]=\"i !== activeSlideIndex() ? true : null\">\n <article class=\"ecl-story-card__card\">\n <div class=\"ecl-story-card__image-wrapper\" #carouselImageWrapper>\n </div>\n <div class=\"ecl-story-card__content\" #carouselContentWrapper>\n @if (detailsPanels()[i]; as panel) {\n @if (panel.eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ panel.eclTitle() }}</div>\n }\n @if (panel.description()) {\n <div class=\"ecl-story-card__card-description\">{{ panel.description() }}</div>\n }\n }\n </div>\n </article>\n </li>\n }\n </ul>\n </div>\n\n <!-- Carousel Controls -->\n @if (totalSlides() > 1) {\n <div class=\"ecl-story-card__pager\">\n <button class=\"ecl-story-card__prev\"\n [disabled]=\"prevDisabled()\"\n (click)=\"onCarouselPrevClick()\"\n [attr.aria-label]=\"'ecl.story-card.SHOW-PREV-SLIDE' | translate\">\n <ecl-icon icon=\"corner-arrow\" size=\"s\" transform=\"rotate-270\"></ecl-icon>\n <span class=\"ecl-story-card__prev-label\">\n {{ 'ecl.story-card.PREVIOUS' | translate }}\n </span>\n </button>\n\n <div class=\"ecl-story-card__dots\">\n @for (dotIndex of getDotIndices(); track dotIndex) {\n <button\n #dotButton\n class=\"ecl-story-card__dot\"\n [class.ecl-story-card__dot--active]=\"dotIndex === activeSlideIndex()\"\n [class.is-prev]=\"dotIndex === activeSlideIndex() - 1\"\n [attr.aria-label]=\"'ecl.story-card.GO-TO-SLIDE' | translate: { current: dotIndex + 1, total: totalSlides() }\"\n (click)=\"goToSlide(dotIndex)\">\n </button>\n }\n </div>\n\n <button class=\"ecl-story-card__next\"\n [disabled]=\"nextDisabled()\"\n (click)=\"onCarouselNextClick()\"\n [attr.aria-label]=\"'ecl.story-card.SHOW-NEXT-SLIDE' | translate\">\n <span class=\"ecl-story-card__next-label\">\n {{ 'ecl.story-card.NEXT' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"s\" transform=\"rotate-90\"></ecl-icon>\n </button>\n </div>\n }\n</div>\n\n<!-- Desktop: Grid with Accordion (user-authored content projected here) -->\n<div class=\"ecl-story-card__grid\">\n <ng-content select=\"ul[eclStoryCardList]\"></ng-content>\n <ng-content select=\"[eclStoryCardGridDetails]\"></ng-content>\n\n <!-- Grid Controls -->\n @if (totalSlides() > 1) {\n <div class=\"ecl-story-card__grid-controls\">\n <button class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-story-card__grid-prev ecl-button--icon-only\"\n type=\"button\"\n (click)=\"onGridPrevClick()\"\n [attr.aria-label]=\"'ecl.story-card.PREVIOUS' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\"
|
|
89908
|
+
"templateData": "@if (eclTitle() || eclDescription()) {\n<div class=\"ecl-story-card__header\">\n @if (eclTitle()) {\n <div class=\"ecl-story-card__title\" [attr.id]=\"titleId()\">{{ eclTitle() }}</div>\n }\n @if (eclDescription()) {\n <div class=\"ecl-story-card__description\">{{ eclDescription() }}</div>\n }\n</div>\n}\n\n<!-- Mobile: Embla Carousel (auto-generated from items + details) -->\n<div class=\"ecl-story-card__carousel\">\n <div class=\"ecl-story-card__carousel-viewport\"\n role=\"region\"\n [attr.aria-label]=\"'ecl.story-card.SLIDER-LABEL' | translate\"\n emblaCarousel\n [options]=\"emblaOptions\"\n [subscribeToEvents]=\"subscribeToEvents\"\n (emblaChange)=\"onEmblaChange($event)\">\n <ul class=\"ecl-story-card__carousel-container\">\n @for (item of items(); track i; let i = $index) {\n <li class=\"ecl-story-card__carousel-slide\"\n [attr.aria-hidden]=\"i !== activeSlideIndex() ? true : null\">\n <article class=\"ecl-story-card__card\">\n <div class=\"ecl-story-card__image-wrapper\" #carouselImageWrapper>\n </div>\n <div class=\"ecl-story-card__content\" #carouselContentWrapper>\n @if (detailsPanels()[i]; as panel) {\n @if (panel.eclTitle()) {\n <div class=\"ecl-story-card__card-title\">{{ panel.eclTitle() }}</div>\n }\n @if (panel.description()) {\n <div class=\"ecl-story-card__card-description\">{{ panel.description() }}</div>\n }\n }\n </div>\n </article>\n </li>\n }\n </ul>\n </div>\n\n <!-- Carousel Controls -->\n @if (totalSlides() > 1) {\n <div class=\"ecl-story-card__pager\">\n <button class=\"ecl-story-card__prev\"\n [disabled]=\"prevDisabled()\"\n (click)=\"onCarouselPrevClick()\"\n [attr.aria-label]=\"'ecl.story-card.SHOW-PREV-SLIDE' | translate\">\n <ecl-icon icon=\"corner-arrow\" size=\"s\" transform=\"rotate-270\"></ecl-icon>\n <span class=\"ecl-story-card__prev-label\">\n {{ 'ecl.story-card.PREVIOUS' | translate }}\n </span>\n </button>\n\n <div class=\"ecl-story-card__dots\">\n @for (dotIndex of getDotIndices(); track dotIndex) {\n <button\n #dotButton\n class=\"ecl-story-card__dot\"\n [class.ecl-story-card__dot--active]=\"dotIndex === activeSlideIndex()\"\n [class.is-prev]=\"dotIndex === activeSlideIndex() - 1\"\n [attr.aria-label]=\"'ecl.story-card.GO-TO-SLIDE' | translate: { current: dotIndex + 1, total: totalSlides() }\"\n (click)=\"goToSlide(dotIndex)\">\n </button>\n }\n </div>\n\n <button class=\"ecl-story-card__next\"\n [disabled]=\"nextDisabled()\"\n (click)=\"onCarouselNextClick()\"\n [attr.aria-label]=\"'ecl.story-card.SHOW-NEXT-SLIDE' | translate\">\n <span class=\"ecl-story-card__next-label\">\n {{ 'ecl.story-card.NEXT' | translate }}\n </span>\n <ecl-icon icon=\"corner-arrow\" size=\"s\" transform=\"rotate-90\"></ecl-icon>\n </button>\n </div>\n }\n</div>\n\n<!-- Desktop: Grid with Accordion (user-authored content projected here) -->\n<div class=\"ecl-story-card__grid\">\n <ng-content select=\"ul[eclStoryCardList]\"></ng-content>\n <ng-content select=\"[eclStoryCardGridDetails]\"></ng-content>\n\n <!-- Grid Controls -->\n @if (totalSlides() > 1) {\n <div class=\"ecl-story-card__grid-controls\">\n <button class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-story-card__grid-prev ecl-button--icon-only\"\n type=\"button\"\n (click)=\"onGridPrevClick()\"\n [attr.aria-label]=\"'ecl.story-card.PREVIOUS' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PREVIOUS' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-left\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-story-card__grid-play ecl-button--icon-only\"\n type=\"button\"\n [style.display]=\"isAutoPlaying() ? 'none' : 'flex'\"\n (click)=\"onPlayClick()\"\n [attr.aria-label]=\"'ecl.story-card.PLAY' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PLAY' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"play\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--secondary ecl-button--neutral ecl-story-card__grid-pause ecl-button--icon-only\"\n type=\"button\"\n [style.display]=\"isAutoPlaying() ? 'flex' : 'none'\"\n (click)=\"onPauseClick()\"\n [attr.aria-label]=\"'ecl.story-card.PAUSE' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.PAUSE' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor-fill\" icon=\"pause\" size=\"l\"></ecl-icon>\n </span>\n </button>\n\n <button class=\"ecl-button ecl-button--tertiary ecl-button--neutral ecl-story-card__grid-next ecl-button--icon-only\"\n type=\"button\"\n (click)=\"onGridNextClick()\"\n [attr.aria-label]=\"'ecl.story-card.NEXT' | translate\">\n <span class=\"ecl-button__container\">\n <span class=\"ecl-button__label\">\n {{ 'ecl.story-card.NEXT' | translate }}\n </span>\n <ecl-icon iconSet=\"phosphor\" icon=\"caret-right\" size=\"l\"></ecl-icon>\n </span>\n </button>\n </div>\n }\n</div>\n"
|
|
90228
89909
|
},
|
|
90229
89910
|
{
|
|
90230
89911
|
"name": "EclStoryCardGridDetailsComponent",
|